Compare commits

...

126 Commits
0.10.4 ... 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
Philip Withnall 0979e60567
0.11.1
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2023-03-16 13:16:02 +00:00
Philip Withnall bcb33bced1 Merge branch 'update-tr' into 'main'
doc: Add Turkish Translation

See merge request pwithnall/malcontent!152
2023-03-09 09:54:31 +00:00
Sabri Unal 828c5b5973 doc: Add Turkish Translation 2023-03-09 09:54:30 +00:00
Philip Withnall 062231804a Merge branch 'wip/jtojnar/meson_postinstall' into 'main'
build: Switch to Meson’s gnome.post_install function

See merge request pwithnall/malcontent!148
2022-12-30 16:57:12 +00:00
Jan Tojnar 4d234c01dd build: Switch to Meson’s gnome.post_install function
Instead of using a custom post install script.
This drops the GTK 3 dependency.

Required bumping minimum Meson version to 0.59
for the `update_desktop_database` kwarg.

https://mesonbuild.com/Gnome-module.html#gnomepost_install
2022-12-30 16:35:55 +00:00
Jan Tojnar 6c96a5e7b6 build: Bump Meson dependency to 0.59.0
Required for switching to `gnome.post_install()` function
with `update_desktop_database` kwarg.

Even newer version is available in bullseye-backports in Debian
so it should probably be fine.
2022-12-30 16:35:55 +00:00
Philip Withnall 54ebc3739e ci: Add missing dependencies
`libdbus-1-dev` is needed for the interfaces dir from `dbus-1.pc`, and
`desktop-file-utils` is needed for `update-desktop-database`.

These are needed due to updating Debian Unstable.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-12-30 16:35:15 +00:00
Philip Withnall 8c2a1dd73b Merge branch 'main' into 'main'
Update Hindi (hi) translation

See merge request pwithnall/malcontent!151
2022-11-29 11:29:51 +00:00
Hemish 3d1ec3047f Update Hindi (hi) translation 2022-11-29 13:07:23 +05:30
Philip Withnall 327173ba11 Merge branch 'hun-20220922' into 'main'
Update Hungarian translation

See merge request pwithnall/malcontent!150
2022-10-10 11:56:49 +00:00
Philip Withnall afb3f9630c Merge branch 'main' into 'main'
po: add Georgian translation

See merge request pwithnall/malcontent!149
2022-10-10 11:55:41 +00:00
Balázs Úr c577543af8 Update Hungarian translation 2022-09-22 21:55:47 +00:00
NorwayFun af4cd80fd5 add Georgian translation 2022-09-14 07:50:37 +00:00
NorwayFun 2ef945255c add Georgian 2022-09-14 07:50:08 +00:00
Georges Basile Stavracas Neto 741bc8a2b0 Merge branch 'gbsneto/release-0-11-0' into 'main'
0.11.0

See merge request pwithnall/malcontent!147
2022-08-12 15:10:26 +00:00
Georges Basile Stavracas Neto 810c16bbf1 0.11.0 2022-08-12 12:06:34 -03:00
Georges Basile Stavracas Neto e1c5b8a4fe Merge branch '52-focusable' into 'main'
restrict-applications-selector: Make rows not focusable

Closes #52

See merge request pwithnall/malcontent!146
2022-08-12 14:58:06 +00:00
Philip Withnall 950abf2e44 user-controls: Mark rows as not focusable
Only the controls inside them should be focusable. This saves having to
press the tab key twice as much as needed.

The row to open the restrict applications dialogue remains focusable, as
it doesn’t contain an interactive widget. It’s essentially one big
button.

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

Helps: #52
2022-07-25 23:53:24 +02:00
Philip Withnall 2e72916afb restrict-applications-selector: Make rows not focusable
The toggle switches remain focusable, but the rows should not be
focusable. Otherwise tabbing through the list involves two tabs per row.

The screen reader continues to work correctly with this MR applied: when
tabbing to a new switch, it reads out the label from the row, plus the
switch state.

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

Fixes: #52
2022-07-25 23:53:24 +02:00
Philip Withnall 2f64f3865e Merge branch 'piotrdrag/fix-string' into 'main'
main: Restore previous whitespace in string

See merge request pwithnall/malcontent!145
2022-07-24 18:55:29 +00:00
Piotr Drąg 8416b0f263 main: Restore previous whitespace in string
So that we don’t change the string for no reason,
invalidating all existing translations.
2022-07-24 15:47:45 +02:00
Georges Basile Stavracas Neto a859e22e26 Merge branch 'wip/wjt/more-gtk4' into 'main'
Fix some build system leftovers from the GTK 4 port

See merge request pwithnall/malcontent!144
2022-07-22 12:22:04 +00:00
Will Thompson 8eba2f2ef3 Prepare for 0.11.0 release 2022-07-22 11:26:28 +01:00
Will Thompson ffba5dab43 libmalcontent-ui: Bump API version
An app which currently depends on malcontent-ui-0.pc or
MalcontentUi-0.gir will fail to compile or run, respectively, aganist
the GTK 4-ified version.

Bump the API version, which is used in both those names. This will also
(I think) allow the two versions of libmalcontent-ui to be
parallel-installed.
2022-07-22 11:13:33 +01:00
Will Thompson 922ae096be libmalcontent-ui: Fix includes for GIR
The libmalcontent-ui API exposes types from GTK 4 (not 3) and
libadwaita.
2022-07-22 11:12:47 +01:00
Will Thompson 1c7fe694fa Don't depend on gtk+-3.0 if xmllint is found
When validating the .ui files, we need to determine the path to GTK 4's
relaxng schema. Previously this was erroneously looked up in the prefix
of GTK 3, which malcontent otherwise doesn't depend on.

Define the GTK dependency once, and use that variable everywhere.
2022-07-22 11:09:35 +01:00
Georges Basile Stavracas Neto 2da5d5597e Merge branch 'gbsneto/gtk4' into 'main'
GTK4

See merge request pwithnall/malcontent!141
2022-07-20 22:27:51 +00:00
Georges Basile Stavracas Neto fe785d357d user-controls: Remove AdwPreferencesPage
AdwPreferencesPage is intended to be used as the first widget
inside page. It has an AdwClamp and a scrolled window to handle
just that.

Putting it in the MctUserControls widget is undesired, because
it introduces an oddly positioned scrolled window in the parental
controls page of Initial Setup, and if we ever reintroduce this
widgetry in Settings, it would suffer from the same problem.

Remove AdwPreferencesPage from MctUserControls, and replace it
with a vertical box. Add an AdwPreferencesPage in malcontent-controls
to compensate for that.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 9a35a09e24 malcontent-control: Update copyright headers
Append myself as the author of the files I've meaninfully changed.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto e8e9231d89 libmalcontent-ui: Cleanup CSS
Use named colors, and reimplement the disabled slider with a CSS
grayscale filter.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 61141a6670 restrict-applications-selector: Center-align app list
Simply expanding this list is enough to let the AdwClamp of
the parent AdwPreferencesGroup center it.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto d204944ae2 main: Improve visuals of loading label
Replace the manual scaling of the font size by a proper style
class, and center-align it vertically.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto a4ac1d644d user-selector: Purge items after listing users
The first call to act_user_manager_list_users() may lazily load
and notify the 'is-loaded' property, in which case we end up
indirectly recursing into reload_users(). Because we recurse
*after* purging carousel items, the same user is added twice:
once in the leaf recursion call, and once again in the call that
notified the 'is-loaded' property.

A simple workaround to this is purging carousel items after the
call to act_user_manager_list_users().
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto b5e516bea0 user-controls: Don't set popover direction
Let GTK handle that as it sees fit.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto e5ecc02488 user-controls: Remove OARS widgetry size group
We don't actually want the menu button to have the same size
of the popover, since the popover can grow pretty wide.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto b25a4e2119 carousel: Simplify arrow handling
The CSS-based animation is incompatible with the layout machinery
of GTK4, and we can't easily reintroduce it without another major
surgery in the carousel code, so just drop it for now.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 15172723dd carousel: Use revealer to calculate arrow offset
Now that the inner GtkStack has margins, it has an odd offset from
what we would expect. A better widget to use is the GtkRevealer,
which must cover the entire allocation, and therefore will always
produce the expected x offset.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 4887ded149 carousel: Replace size-allocate callback by a layout manager
GTK4 has no size-allocate signal anymore, but we can use a custom
layout manager to produce the same effect.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 3656cffcc0 carousel: Cleanup overlays
There are overlays inside overlays and that is not playing well
with event delivery - the main box is eating away clicks from the
userlist avatars.

Remove all that, and the extra overlays, and just leave one simple
overlay handling the whole widgetry.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 1d20fc50c9 carousel: Improve carousel box
This makes the carousel look more like what it used to.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto cd7d6a3845 carousel: Reindent file
No functional changes, just reindent the file.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto a9290f86b9 main: Make unlock button a pill
And set the 'suggested-action' style class too. This makes the
button more inline with modern GNOME HIG.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 486183a017 carousel: Move margins to inner stack 2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 0134e5d875 main: Remove has-default from buttons
This property is read-only in GTK4.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 8a8fe7b346 restrict-applications-dialog: Use close-request
Instead of delete-event. Pretty straightforward, 1:1 port to this
new signal.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 977b82f681 main: Remove can-default 2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto adaea91a4c carousel: Remove pass-through from overlay children
It doesn't exist anymore.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 3e1c14bda3 project: Port to GtkStack API changes 2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 6cd201166b main: Remove use-popover property from GtkMenuButton
It doesn't exist anymore.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 58fc4e0a5b main: Reimplement primary menu accellerator as a shortcut
In GTK4, the replacement to accelerators like this are shortcut
controllers.

Add a global shortcut controller to the primary menu button, and
bind it to F10.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 6fc250d5cf main: Adapt to GtkHeaderBar API changes 2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto dc1f68c7bc application: Port to gtk_show_uri_full()
A pretty straightfoward port, and most importantly, this function
actually exists in GTK4 :)
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto b71b83f348 carousel: Port MctCarousel to GTK4
Make it an AdwBin subclass. Purge all GtkContainer usage, and expose
GTK4-inspired API to add items to the carousel, and also to control
the internal GtkRevealer.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 0fca70768a carousel: Make MctCarouselItem subclass GtkButton
And add a setter to its internal child.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto e088443645 carousel: use double to translate coordinates
That's what GTK4 expects now.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 03ecb2dcb2 user-controls: Use GtkPopoverMenu API to set menu model
Pretty trivial replacement, since 'oars_popover' already is a
GtkPopoverMenu.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 6cb361efb9 user-image: Port to AdwAvatar
This simultaneously allows us to remove a lot of code, and make
Malcontent more consistent with the rest of the system.

Port MctUserImage to use an AdwAvatar internally. Make it inherit
AdwBin since it has a single child now.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto d4f219b71e user-controls: Use GtkRoot API to get toplevel
In practice, widgets that implement GtkRoot represent what
toplevel widgets used to. Use that instead.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 8c170d11a2 project: Port GdkScreen to GdkDisplay
API looks about the same, just switching to 'display'.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 6ee8b77b95 user-controls: Remove unused variable 2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto c39ffd45fc project: Remove unnecessary usage of gtk_widget_show()
Now that widgets are visible by default, no need to show them
after creating them. Also revove gtk_widget_show_all() which
doesn't exist in GTK4.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto bb0865eb23 project: Use gtk_window_present() to present windows
Instead of gtk_widget_show(). In practice, it's exactly the same,
but it'll make follow-up patches cleaner.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 360c5b0271 restrict-applications-selector: Adapt to GtkImage API changes
This was supposed to be a project-wide commit, but actually only
MctRestrictApplicationsDialog had APIs to be updated. MctUseImage
will undergo a major surgery soon, so it's left out.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 8560ca0677 project: Simplify buttons
GtkButton has an 'icon-name' property that greatly simplifies
setting up buttons. GtkMenuButton has a new 'always-show-arrow'
property that also allows us to simplify some code.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto c9f8bb22f6 restrict-applications-selector: Adapt to AdwActionRow
This greatly reduces the code size. GtkBin is no more, and
AdwActionRow has specific API to add suffix widgets.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 631df4f1a5 project: Adapt to GtkBox API changes
GtkBox provides a different API surface, such as gtk_box_append()
and gtk_box_prepend(), so switch to that.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 2d9b408a32 user-controls: Inherit from AdwBin
GtkBin is no more, but libadwaita has a nice 1:1 replacement which
is AdwBin.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto e322d8cd98 Hdy → Adw
This simply changes namespaces. Fortunately, no further widgetry
changes will be necessary - all the widgets and APIs seem to have
an exact match in libadwaita.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto d142554ed3 malcontent-control: Replace border-width by margins
The 'border-width' property does not exist in GTK4 anymore, so
replace it with margin-* and in one case just remove it entirely.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto a8484b9c07 project: Port to GTK4 accessibility framework
This was simple, since few widgets have accessibility properties
manually set. The 'static' role doesn't exist anymore, and GtkLabel
handles everything for us, so we can just drop it.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 262d6a6e7a project: Remove most can-focus properties
In GTK4, can-focus usage is much more specific to widget subclasses,
and in almost all cases it's not necessary to set it.

Remove it everywhere, except in one case where it still needs to be
manually set to False.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto 5bec6e8fdc project: Remove all visible=True properties
Start the GTK4 port by cleaning up all visible=True properties,
since widgets are visible by default on GTK4.
2022-07-20 19:23:12 -03:00
Georges Basile Stavracas Neto c31640fa12 build: Switch to GTK4 and libadwaita
Switch the build system to GTK4 and libadwaita, instead of GTK3
and libhandy.

This commit breaks the build.
2022-07-20 19:23:12 -03:00
Christopher Davis 52b4b490f3 dockerfile: Add libhandy as a dependency
Though it's unlikely Debian will have a version
new enough for us, it's still useful to have this an
advance. The meson subproject will work in cases where
we don't have a new enough version of libhandy.
2022-07-20 19:23:12 -03:00
Christopher Davis d11e609543 dependencies: Add libhandy as a subproject
Allows for building on systems that don't ship libhandy
or a version of libhandy that's new enough.
2022-07-20 19:23:12 -03:00
Christopher Davis 554b390cd4 main.ui: Use HdyStatusPage for status pages
We now have a nice pre-built widget for status pages
with an icon, title, description, and children.
We should take advantage of that instead of manually
setting up each status page.
2022-07-20 19:23:12 -03:00
Christopher Davis 73c1d7f3fe restrict-applications-selector: Hide placeholder when list isn't empty
Prevents a broken bottom border radius on the list.
2022-07-20 19:23:12 -03:00
Christopher Davis 9ed46ae597 restrict-applications-selector: Use HdyActionRow
Implements click-to-activate for rows in the dialog.
2022-07-20 19:23:12 -03:00
Christopher Davis c68058f0f3 restrict-applications: Use HdyPreferencesWindow
HdyPreferencesWindow provides a neat API we can use for
windows like this.
2022-07-20 19:23:12 -03:00
Christopher Davis 358cad3a24 user-controls: Use HdyPreferencesPage and HdyActionRow API
This allows us to get styling consistent with
HdyPreferencesWindow and similar content across GNOME.

Part of a consistency push for GNOME 40
2022-07-20 19:23:12 -03:00
Philip Withnall 598fab96a9 Merge branch 'fix-it-help' into 'main'
po: Fix markup error in Italian translation of the help

See merge request pwithnall/malcontent!143
2022-07-15 12:18:48 +00:00
Philip Withnall 766603676c po: Fix markup error in Italian translation of the help
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-07-15 13:16:29 +01:00
Christopher Davis d80ed10592 malcontent-control: Use HdyWindow and HdyHeaderBar 2022-07-13 12:00:33 -03:00
Philip Withnall f11d91da3a Merge branch 'gbsneto/appstream' into 'main'
libmalcontent-ui: Port to libappstream

Closes #51

See merge request pwithnall/malcontent!142
2022-07-13 14:29:08 +00:00
Georges Basile Stavracas Neto 25486a1df9 libmalcontent-ui: Port to libappstream
Depend on libappstream-dev, and include appstream.h instead of
appstream-glib.h.

We can depend on a new enough version of libappstream that all the
content rating symbols we need are available, which means that
`gs-content-rating.[ch]` can be dropped entirely.

Turns out no code changes are needed other than that.

Fixes: #51
2022-07-13 15:26:12 +01:00
Philip Withnall 0bbdb242a0 build: Bump Meson dependency to 0.57.0
This means we can depend on fix 42ba8efaf2 in Meson, which fixes use of
`volatile` in the default templates used by `gnome.mkenums_simple()`.
This fixes compiler warnings with recent compilers, which are promoted
to errors due to `-Werror`.

Meson 0.57.0 is available in bullseye-backports in Debian, which means
it’s available basically everywhere now.

Bumping the dependency required fixing a few deprecations in the
`meson.build` files.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-07-13 15:26:11 +01:00
Philip Withnall a732fd418d Merge branch 'main' into 'main'
update ru.po

See merge request pwithnall/malcontent!140
2022-06-20 09:43:56 +00:00
Ser82-png cae9044b92 update ru.po 2022-06-19 20:36:14 +10:00
Philip Withnall 40933baef2 Merge branch 'main' into 'main'
Update Russian translation

See merge request pwithnall/malcontent!139
2022-06-06 10:43:13 +00:00
Ser82-png c6581c49cd Update Russian translation 2022-06-05 11:43:28 +10:00
Philip Withnall 9d1e8ac3c5 0.10.5
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-05-31 13:56:40 +01:00
Philip Withnall 26961a0614 Merge branch 'main' into 'main'
Update Chinese (Taiwan) translation file.

See merge request pwithnall/malcontent!138
2022-05-31 12:52:16 +00:00
Freddy Cheng 788c13d827 Update Chinese (Taiwan) translation file. 2022-05-30 19:36:36 +00:00
Philip Withnall 0baa23ab44 Merge branch 'main' into 'main'
Update tr.po

See merge request pwithnall/malcontent!137
2022-05-19 13:51:20 +00:00
libre ajans 88a7c57fb0 Update tr.po 2022-05-19 13:42:32 +00:00
Philip Withnall 1a0b3e5d4b Merge branch 'polkornyipt-main-patch-69406' into 'main'
Update pt_BR.po

See merge request pwithnall/malcontent!136
2022-04-13 15:07:35 +00:00
Matheus Polkorny c36b5b268e Update pt_BR.po 2022-04-13 15:07:35 +00:00
Philip Withnall 0e89f39e89 Merge branch 'main' into 'main'
Add German help translation

See merge request pwithnall/malcontent!135
2022-03-21 13:15:26 +00:00
Tim Sabsch 069fe74e9c Add German help translation 2022-03-21 14:03:01 +01:00
Philip Withnall f8a7d0e372 Merge branch 'albanobattistella-main-patch-74286' into 'main'
Update it.po

See merge request pwithnall/malcontent!134
2022-03-14 11:47:22 +00:00
albanobattistella dbdc0d3f16 Update it.po 2022-03-12 15:13:38 +00:00
54 changed files with 4207 additions and 4070 deletions

View File

@ -7,7 +7,7 @@ cache:
- _ccache/
variables:
DEBIAN_IMAGE: "registry.freedesktop.org/pwithnall/malcontent/debian-unstable:v1"
DEBIAN_IMAGE: "registry.freedesktop.org/pwithnall/malcontent/debian-unstable:v4"
MESON_TEST_TIMEOUT_MULTIPLIER: 2
G_MESSAGES_DEBUG: all
MESON_COMMON_OPTIONS: "--buildtype debug --wrap-mode=nodownload"

View File

@ -1,17 +1,20 @@
FROM debian:unstable
RUN apt-get update -qq && apt-get install --no-install-recommends -qq -y \
desktop-file-utils \
gettext \
git \
gtk-doc-tools \
lcov \
libadwaita-1-dev \
libaccountsservice-dev \
libappstream-glib-dev \
libappstream-dev \
libdbus-1-dev \
libflatpak-dev \
libgirepository1.0-dev \
libglib2.0-dev \
libglib-testing-0-dev \
libgtk-3-dev \
libgtk-4-dev \
libpam0g-dev \
libpolkit-gobject-1-dev \
libxml2-utils \
@ -27,7 +30,7 @@ RUN locale-gen C.UTF-8 && /usr/sbin/update-locale LANG=C.UTF-8
ENV LANG=C.UTF-8 LANGUAGE=C.UTF-8 LC_ALL=C.UTF-8
RUN pip3 install meson==0.54.3
RUN pip3 install meson==0.59.4
ARG HOST_USER_ID=5555
ENV HOST_USER_ID ${HOST_USER_ID}

53
NEWS
View File

@ -1,3 +1,56 @@
Overview of changes in malcontent 0.11.1
========================================
* Bugs fixed:
- !147 0.11.0
- !148 build: Switch to Mesons gnome.post_install function
- !149 po: add Georgian translation
- !150 Update Hungarian translation
- !151 Update Hindi (hi) translation
- !152 doc: Add Turkish Translation
* Translation updates:
- Georgian (NorwayFun)
- Hindi (Hemish)
- Hungarian (Balázs Úr)
- Turkish (Sabri Unal)
Overview of changes in malcontent 0.11.0
========================================
* libmalcontent-ui, and the malcontent-control application, now use
libappstream rather than appstream-glib. (#51)
* libmalcontent-ui, and the malcontent-control application, now use GTK 4 and
libadwaita rather than GTK+ 3. (!141)
* As a result of these changes, the pkg-config name has been bumped to
libmalcontent-ui-1, and the gobject-introspection name to MalcontentUi-1.
* Improve keyboard navigation of the malcontent-control application. (#52)
* Translation updates:
- Italian
- Russian
Overview of changes in malcontent 0.10.5
========================================
* Bugs fixed:
- !134 Update it.po
- !135 Add German help translation
- !136 Update pt_BR.po
- !137 Update tr.po
- !138 Update Chinese (Taiwan) translation file.
* Translation updates:
- Chinese (Taiwan)
- Italian
- Portuguese (Brazil)
- Turkish
Overview of changes in malcontent 0.10.4
========================================

View File

@ -115,14 +115,15 @@ Dependencies
------------
* accounts-service
* appstream-glib
* appstream
* dbus-daemon
* flatpak
* gio-2.0 ≥ 2.60
* gio-unix-2.0 ≥ 2.60
* glib-2.0 ≥ 2.60
* gobject-2.0 ≥ 2.60
* gtk+-3.0
* gtk4
* libadwaita
* polkit-gobject-1
Licensing

View File

@ -1,18 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import subprocess
install_prefix = os.environ['MESON_INSTALL_PREFIX']
if not os.environ.get('DESTDIR'):
icon_cache_dir = os.path.join(install_prefix, 'share', 'icons', 'hicolor')
if os.path.exists(icon_cache_dir):
print('Updating icon cache…')
subprocess.call(['gtk-update-icon-cache', '-qtf', icon_cache_dir])
desktop_database_dir = os.path.join(install_prefix, 'share', 'applications')
if os.path.exists(desktop_database_dir):
print('Updating desktop database…')
subprocess.call(['update-desktop-database', '-q', desktop_database_dir])

View File

@ -1,9 +1,13 @@
# please keep this list sorted alphabetically
da
de
es
hu
id
it
pl
pt_BR
ru
sv
tr
uk

362
help/de/de.po Normal file
View File

@ -0,0 +1,362 @@
# German translation for malcontent.
# Copyright (C) 2021 malcontent's COPYRIGHT HOLDER
# This file is distributed under the same license as the malcontent package.
# Christian Kirbach <Christian.Kirbach@gmail.com>, 2021.
#
msgid ""
msgstr ""
"Project-Id-Version: malcontent main\n"
"POT-Creation-Date: 2021-12-29 15:34+0000\n"
"PO-Revision-Date: 2021-12-31 13:36+0100\n"
"Last-Translator: Tim Sabsch <tim@sabsch.com>\n"
"Language-Team: German <gnome-de@gnome.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.0\n"
#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
msgctxt "_"
msgid "translator-credits"
msgstr "Christian Kirbach <christian.kirbach@gmail.com>, 2021."
#. (itstool) path: info/desc
#: C/creating-a-child-user.page:6
msgid "Creating a child user on the computer."
msgstr "So legen Sie ein Kinderkonto auf dem Rechner an."
#. (itstool) path: page/title
#: C/creating-a-child-user.page:9
msgid "Creating a Child User"
msgstr "Ein Kinderkonto anlegen"
#. (itstool) path: page/p
#: C/creating-a-child-user.page:11
msgid ""
"Parental controls can only be applied to non-administrator accounts. Such an "
"account may have been created when the computer was initially set up. If "
"not, a new child user may be created from the <app>Parental Controls</app> "
"application if no child users already exist; and otherwise may be created "
"from the <app>Control Center</app>."
msgstr ""
"Die Kindersicherung kann für alle Konten außer Administrator-Konten "
"eingerichtet werden. Ein solches Konto wurde vermutlich bei der "
"Ersteinrichtung des Rechners angelegt. Falls nicht, können Sie ein neues "
"Kinderkonto in der Anwendung <app>Kindersicherung</app> anlegen, und "
"alternativ in den <app>Einstellungen</app>."
#. (itstool) path: page/p
#: C/creating-a-child-user.page:17
msgid ""
"To create a new child user, see <link type=\"guide\" xref=\"help:gnome-help/"
"user-add\">Add a new user account</link>. As soon as the new user is "
"created, it will appear in the <app>Parental Controls</app> window so that "
"its parental controls settings can be configured."
msgstr ""
"Folgen Sie den Anweisungen <link type=\"guide\" xref=\"help:gnome-help/user-"
"add\">Ein neues Benutzerkonto anlegen</link>, um ein neues Kinderkonto "
"anzulegen. Sobald der neue Benutzer angelegt wurde, erscheint er im Fenster "
"von <app>Kindersicherung</app>. Die Einrichtung der Kindersicherung wird "
"dort durchgeführt."
#. (itstool) path: credit/name
#: C/index.page:6
msgid "Philip Withnall"
msgstr "Philip Withnall"
#. (itstool) path: credit/years
#: C/index.page:8
msgid "2020"
msgstr "2020"
#. (itstool) path: page/title
#: C/index.page:12
msgid "Parental Controls Help"
msgstr "Hilfe zur Kindersicherung"
#. (itstool) path: section/title
#: C/index.page:15
msgid "Introduction &amp; Setup"
msgstr "Einführung und Einrichtung"
#. (itstool) path: section/title
#: C/index.page:19
msgid "Controls to Apply"
msgstr ""
#. (itstool) path: info/desc
#: C/internet.page:6
msgid "Restricting a child users access to the internet."
msgstr "Den Internet-Zugang eines Kinderkontos einschränken."
#. (itstool) path: page/title
#: C/internet.page:9
msgid "Restricting Access to the Internet"
msgstr "Den Zugriff auf das Internet einschränken"
#. (itstool) path: page/p
#: C/internet.page:11
msgid ""
"You can restrict a users access to the internet. This will prevent them "
"using a web browser, but it will not prevent them using the internet (in "
"potentially more limited forms) through other applications. For example, it "
"will not prevent access to e-mail accounts using <app>Evolution</app>, and "
"it will not prevent software updates being downloaded and applied."
msgstr ""
#. (itstool) path: page/p
#: C/internet.page:17
msgid "To restrict a users access to the internet:"
msgstr "So schränken Sie den Internet-Zugang eines Kinderkontos ein:"
#. (itstool) path: item/p
#: C/internet.page:19 C/restricting-applications.page:20
#: C/software-installation.page:28 C/software-installation.page:54
msgid "Open the <app>Parental Controls</app> application."
msgstr "Öffnen Sie die Anwendung <app>Kindersicherung</app>."
#. (itstool) path: item/p
#: C/internet.page:20 C/restricting-applications.page:21
#: C/software-installation.page:29 C/software-installation.page:55
msgid "Select the user in the tabs at the top."
msgstr "Wählen Sie den Benutzer oben in den Reitern."
#. (itstool) path: item/p
#: C/internet.page:21
msgid ""
"Enable the <gui style=\"checkbox\">Restrict Web Browsers</gui> checkbox."
msgstr ""
"Aktivieren Sie das Ankreuzfeld <gui style=\"checkbox\">Web-Browser "
"einschränken</gui>."
#. (itstool) path: info/desc
#: C/introduction.page:6
msgid ""
"Overview of parental controls, the <app>Parental Controls</app> application "
"and its use in other situations where access restrictions are needed on a "
"user."
msgstr ""
#. (itstool) path: page/title
#: C/introduction.page:12
msgid "Introduction to Parental Controls"
msgstr "Einführung in die Kindersicherung"
#. (itstool) path: page/p
#: C/introduction.page:14
msgid ""
"Parental controls are a way to restrict what non-administrator accounts can "
"do on the computer, with the aim of allowing parents to restrict what their "
"children can do when using the computer unsupervised or under limited "
"supervision."
msgstr ""
#. (itstool) path: page/p
#: C/introduction.page:18
msgid ""
"This functionality can be used in other situations ­ such as other carer/"
"caree relationships but is labelled as parental controls so that its "
"easy to find, as thats what most people will be looking for."
msgstr ""
#. (itstool) path: page/p
#: C/introduction.page:21
msgid ""
"The parental controls for any user can be queried and set using the "
"<app>Parental Controls</app> application. This lists the non-administrator "
"accounts in tabs along its top bar, and shows their current parental "
"controls settings below. Changes to the parental controls apply immediately."
msgstr ""
#. (itstool) path: page/p
#: C/introduction.page:25
msgid ""
"Restrictions on using the computer can only be applied to non-administrator "
"accounts. The parental controls settings for a user can only be changed by "
"an administrator, although the administrator can do so from the users "
"account by entering their password when prompted by the <app>Parental "
"Controls</app> application."
msgstr ""
#. (itstool) path: p/link
#: C/legal.xml:4
msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License"
msgstr "Creative Commons Attribution-ShareAlike 3.0 Unported License"
#. (itstool) path: license/p
#: C/legal.xml:3
msgid "This work is licensed under a <_:link-1/>."
msgstr "Dieses Werk wird unter einer <_:link-1/> verbreitet."
#. (itstool) path: info/desc
#: C/restricting-applications.page:6
msgid "Restricting a child user from running already-installed applications."
msgstr ""
#. (itstool) path: page/title
#: C/restricting-applications.page:9
msgid "Restricting Access to Installed Applications"
msgstr "Den Zugriff auf installierte Anwendungen einschränken"
#. (itstool) path: page/p
#: C/restricting-applications.page:11
msgid ""
"You can prevent a user from running specific applications which are already "
"installed on the computer. This could be useful if other users need those "
"applications but they are not appropriate for a child."
msgstr ""
"Sie können Benutzer daran hindern, bestimmte Anwendungen auszuführen, die "
"auf dem Rechner installiert sind. Dies ist nützlich, wenn andere Benutzer "
"die Anwendungen benötigen, diese aber nicht für Kinder geeignet sind."
#. (itstool) path: page/p
#: C/restricting-applications.page:14
msgid ""
"When installing additional software, you should consider whether that needs "
"to be restricted for some users — newly installed software is usable by all "
"users by default."
msgstr ""
"Wenn Sie weitere Software installieren, sollten Sie berücksichtigen, ob sie "
"für einige Benutzer eingeschränkt werden muss. Neu installierte Software ist "
"standardmäßig für alle Benutzer nutzbar."
#. (itstool) path: page/p
#: C/restricting-applications.page:18
msgid "To restrict a users access to a specific application:"
msgstr ""
"So schränken Sie den Zugriff eines Benutzers auf bestimmte Anwendungen ein:"
#. (itstool) path: item/p
#: C/restricting-applications.page:22
msgid "Press the <gui style=\"button\">Restrict Applications</gui> button."
msgstr ""
#. (itstool) path: item/p
#: C/restricting-applications.page:23
msgid ""
"Enable the switch in the row for each application you would like to restrict "
"the user from accessing."
msgstr ""
#. (itstool) path: item/p
#: C/restricting-applications.page:24
msgid "Close the <gui>Restrict Applications</gui> window."
msgstr ""
#. (itstool) path: page/p
#: C/restricting-applications.page:27
msgid ""
"Restricting access to specific applications is often used in conjunction "
"with <link xref=\"software-installation\"/> to prevent a user from "
"installing additional software which has not been vetted."
msgstr ""
#. (itstool) path: info/desc
#: C/software-installation.page:6
msgid ""
"Restricting the software a child user can install, or preventing them "
"installing additional software entirely."
msgstr ""
#. (itstool) path: page/title
#: C/software-installation.page:9
msgid "Restricting Software Installation"
msgstr "Software-Installation einschränken"
#. (itstool) path: page/p
#: C/software-installation.page:11
msgid ""
"You can prevent a user from installing additional software on the system. "
"They will still be able to search for new software to install, but will need "
"an administrator to authorize the installation when they try to install an "
"application. This applies whether they are trying to install the application "
"system-wide (for all users) or just for themselves."
msgstr ""
#. (itstool) path: page/p
#: C/software-installation.page:17
msgid ""
"Additionally, you can restrict which software a user can browse or search "
"for in the <app>Software</app> catalog by age categories."
msgstr ""
#. (itstool) path: page/p
#: C/software-installation.page:20
msgid ""
"To prevent a user from running an application which has already been "
"installed, see <link xref=\"restricting-applications\"/>."
msgstr ""
#. (itstool) path: section/title
#: C/software-installation.page:24
msgid "Preventing Software Installation"
msgstr ""
#. (itstool) path: section/p
#: C/software-installation.page:26
msgid "To prevent a user from installing additional software:"
msgstr ""
#. (itstool) path: item/p
#: C/software-installation.page:30
msgid ""
"Enable the <gui style=\"checkbox\">Restrict Application Installation</gui> "
"checkbox."
msgstr ""
#. (itstool) path: section/title
#: C/software-installation.page:35
msgid "Restricting Software Installation by Age"
msgstr ""
#. (itstool) path: section/p
#: C/software-installation.page:37
msgid ""
"Applications in the <app>Software</app> catalog have information about "
"content they contain which might be inappropriate for some ages — for "
"example, various forms of violence, unmoderated chat with other people on "
"the internet, or the possibility of spending money."
msgstr ""
#. (itstool) path: section/p
#: C/software-installation.page:41
msgid ""
"For each application, this information is summarized as the minimum age "
"child it is typically suitable to be used by — for example, “suitable for "
"ages 7+”. These age ratings are presented in region-specific schemes which "
"can be compared with the ratings schemes used for films and games."
msgstr ""
#. (itstool) path: section/p
#: C/software-installation.page:45
msgid ""
"The applications shown to a user in the <app>Software</app> catalog can be "
"filtered by their age suitability. Applications which are not suitable for "
"the user will be hidden, and will not be installable by that user. They will "
"be installable by other users (if their age suitability is set high enough)."
msgstr ""
#. (itstool) path: section/p
#: C/software-installation.page:51
msgid ""
"To filter the applications seen by a user in the <app>Software</app> catalog "
"to only those suitable for a certain age:"
msgstr ""
#. (itstool) path: item/p
#: C/software-installation.page:56
msgid ""
"In the <gui>Application Suitability</gui> list, select the age which "
"applications should be suitable for."
msgstr ""
#. (itstool) path: note/p
#: C/software-installation.page:60
msgid ""
"The users actual age is not stored, so the <gui>Application Suitability</"
"gui> is not automatically updated over time as the child grows older. You "
"must periodically re-assess the appropriate <gui>Application Suitability</"
"gui> for each user."
msgstr ""

441
help/hu/hu.po Normal file
View File

@ -0,0 +1,441 @@
# Hungarian translation for malcontent.
# Copyright (C) 2022 Free Software Foundation, Inc.
# This file is distributed under the same license as the malcontent package.
#
# Balázs Úr <ur.balazs at fsf dot hu>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: malcontent main\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/"
"issues\n"
"POT-Creation-Date: 2022-09-21 15:25+0000\n"
"PO-Revision-Date: 2022-09-22 23:43+0200\n"
"Last-Translator: Balázs Úr <ur.balazs at fsf dot hu>\n"
"Language-Team: Hungarian <gnome-hu-list at gnome dot org>\n"
"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 19.12.3\n"
#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
msgctxt "_"
msgid "translator-credits"
msgstr "Úr Balázs <ur dot balazs at fsf dot hu>, 2022."
#. (itstool) path: info/desc
#: C/creating-a-child-user.page:6
msgid "Creating a child user on the computer."
msgstr "Gyermekfelhasználó létrehozása a számítógépen."
#. (itstool) path: page/title
#: C/creating-a-child-user.page:9
msgid "Creating a Child User"
msgstr "Gyermekfelhasználó létrehozása"
#. (itstool) path: page/p
#: C/creating-a-child-user.page:11
msgid ""
"Parental controls can only be applied to non-administrator accounts. Such an "
"account may have been created when the computer was initially set up. If "
"not, a new child user may be created from the <app>Parental Controls</app> "
"application if no child users already exist; and otherwise may be created "
"from the <app>Control Center</app>."
msgstr ""
"A szülői felügyelet csak a nem rendszergazdai fiókokra alkalmazható. Ilyen "
"fiókot esetleg a számítógép kezdeti beállításakor hozhattak létre. Ha nem, "
"akkor új gyermekfelhasználó hozható létre a <app>Szülői felügyelet</app> "
"alkalmazásból, ha még nem létezik gyermekfelhasználó, egyébként pedig a "
"<app>Vezérlőközpont</app> alkalmazásból hozható létre."
#. (itstool) path: page/p
#: C/creating-a-child-user.page:17
msgid ""
"To create a new child user, see <link type=\"guide\" xref=\"help:gnome-help/"
"user-add\">Add a new user account</link>. As soon as the new user is "
"created, it will appear in the <app>Parental Controls</app> window so that "
"its parental controls settings can be configured."
msgstr ""
"Új gyermekfelhasználó létrehozásához nézze meg az <link type=\"guide\" xref="
"\"help:gnome-help/user-add\">Új felhasználói fiók hozzáadása</link> "
"fejezetet. Amint az új felhasználó létrejött, megjelenik a <app>Szülői "
"felügyelet</app> ablakban, így a szülői felügyeleti beállításai "
"konfigurálhatók."
#. (itstool) path: credit/name
#: C/index.page:6
msgid "Philip Withnall"
msgstr "Philip Withnall"
#. (itstool) path: credit/years
#: C/index.page:8
msgid "2020"
msgstr "2020"
#. (itstool) path: page/title
#: C/index.page:12
msgid "Parental Controls Help"
msgstr "Szülői felügyelet súgó"
#. (itstool) path: section/title
#: C/index.page:15
msgid "Introduction &amp; Setup"
msgstr "Bevezetés és beállítás"
#. (itstool) path: section/title
#: C/index.page:19
msgid "Controls to Apply"
msgstr "Alkalmazandó szabályozások"
#. (itstool) path: info/desc
#: C/internet.page:6
msgid "Restricting a child users access to the internet."
msgstr "Egy gyermekfelhasználó internet-hozzáférésének korlátozása."
#. (itstool) path: page/title
#: C/internet.page:9
msgid "Restricting Access to the Internet"
msgstr "Internet-hozzáférés korlátozása"
#. (itstool) path: page/p
#: C/internet.page:11
msgid ""
"You can restrict a users access to the internet. This will prevent them "
"using a web browser, but it will not prevent them using the internet (in "
"potentially more limited forms) through other applications. For example, it "
"will not prevent access to e-mail accounts using <app>Evolution</app>, and "
"it will not prevent software updates being downloaded and applied."
msgstr ""
"Korlátozhatja egy felhasználó internet-hozzáférését. Ez megakadályozza őt a "
"webböngésző használatában, de nem akadályozza meg abban, hogy az internetet "
"(esetleg korlátozottabb formában) más alkalmazásokon keresztül használja. "
"Például nem akadályozza meg az e-mail fiókokhoz való hozzáférést az "
"<app>Evolution</app> használatával, és nem akadályozza meg a "
"szoftverfrissítések letöltését és alkalmazását."
#. (itstool) path: page/p
#: C/internet.page:17
msgid "To restrict a users access to the internet:"
msgstr "Egy felhasználó internet-hozzáférésének korlátozásához:"
#. (itstool) path: item/p
#: C/internet.page:19 C/restricting-applications.page:20
#: C/software-installation.page:28 C/software-installation.page:54
msgid "Open the <app>Parental Controls</app> application."
msgstr "Nyissa meg a <app>Szülői felügyelet</app> alkalmazást."
#. (itstool) path: item/p
#: C/internet.page:20 C/restricting-applications.page:21
#: C/software-installation.page:29 C/software-installation.page:55
msgid "Select the user in the tabs at the top."
msgstr "Válassza ki a felhasználót a fenti lapokon."
#. (itstool) path: item/p
#: C/internet.page:21
msgid ""
"Enable the <gui style=\"checkbox\">Restrict Web Browsers</gui> checkbox."
msgstr ""
"Jelölje be a <gui style=\"checkbox\">Webböngészők korlátozása</gui> "
"jelölőnégyzetet."
#. (itstool) path: info/desc
#: C/introduction.page:6
msgid ""
"Overview of parental controls, the <app>Parental Controls</app> application "
"and its use in other situations where access restrictions are needed on a "
"user."
msgstr ""
"A szülői felügyelet áttekintése, a <app>Szülői felügyelet</app> alkalmazás "
"és annak használata olyan egyéb helyzetekben, amikor egy felhasználó "
"hozzáférésének korlátozásai szükségesek."
#. (itstool) path: page/title
#: C/introduction.page:12
msgid "Introduction to Parental Controls"
msgstr "Bevezetés a szülői felügyeletbe"
#. (itstool) path: page/p
#: C/introduction.page:14
msgid ""
"Parental controls are a way to restrict what non-administrator accounts can "
"do on the computer, with the aim of allowing parents to restrict what their "
"children can do when using the computer unsupervised or under limited "
"supervision."
msgstr ""
"A szülői felügyelet segítségével korlátozható, hogy a nem rendszergazdai "
"fiókok mit tehetnek a számítógépen, azzal a céllal, hogy a szülők "
"korlátozhassák, hogy mit tehetnek a gyermekeik, amikor felügyelet nélkül "
"vagy korlátozott felügyelet mellett használják a számítógépet."
#. (itstool) path: page/p
#: C/introduction.page:18
msgid ""
"This functionality can be used in other situations ­ such as other carer/"
"caree relationships but is labelled as parental controls so that its "
"easy to find, as thats what most people will be looking for."
msgstr ""
"Ez a funkció más helyzetekben is használható például egyéb gondozó-"
"gondozott kapcsolatokban , de „szülői felügyelet” címkével van ellátva, "
"hogy könnyen megtalálható legyen, mivel a legtöbb ember ezt keresi."
#. (itstool) path: page/p
#: C/introduction.page:21
msgid ""
"The parental controls for any user can be queried and set using the "
"<app>Parental Controls</app> application. This lists the non-administrator "
"accounts in tabs along its top bar, and shows their current parental "
"controls settings below. Changes to the parental controls apply immediately."
msgstr ""
"A szülői felügyelet bármely felhasználóhoz lekérdezhető és beállítható a "
"<app>Szülői felügyelet</app> alkalmazás használatával. Ez a felső sávjában "
"lévő lapokon felsorolja a nem rendszergazdai fiókokat, és alatta megjeleníti "
"az aktuális szülői felügyeleti beállításokat. A szülői felügyelet "
"változtatásai azonnal érvénybe lépnek."
#. (itstool) path: page/p
#: C/introduction.page:25
msgid ""
"Restrictions on using the computer can only be applied to non-administrator "
"accounts. The parental controls settings for a user can only be changed by "
"an administrator, although the administrator can do so from the users "
"account by entering their password when prompted by the <app>Parental "
"Controls</app> application."
msgstr ""
"A számítógép használatára vonatkozó korlátozások csak a nem rendszergazdai "
"fiókokra alkalmazhatók. Egy felhasználó szülői felügyeleti beállításait csak "
"egy rendszergazda változtathatja meg, bár a rendszergazda ezt a felhasználó "
"fiókjából is megteheti a jelszavának megadásával, amikor a <app>Szülői "
"felügyelet</app> alkalmazás erre kéri."
#. (itstool) path: p/link
#: C/legal.xml:4
msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License"
msgstr "Creative Commons Nevezd meg! - Így add tovább! 3.0 átíratlan licenc"
#. (itstool) path: license/p
#: C/legal.xml:3
msgid "This work is licensed under a <_:link-1/>."
msgstr "Ez a mű a <_:link-1/> szerint licencelt."
#. (itstool) path: info/desc
#: C/restricting-applications.page:6
msgid "Restricting a child user from running already-installed applications."
msgstr ""
"Egy gyermekfelhasználó korlátozása a már telepített alkalmazások "
"futtatásában."
#. (itstool) path: page/title
#: C/restricting-applications.page:9
msgid "Restricting Access to Installed Applications"
msgstr "A telepített alkalmazásokhoz való hozzáférés korlátozása"
#. (itstool) path: page/p
#: C/restricting-applications.page:11
msgid ""
"You can prevent a user from running specific applications which are already "
"installed on the computer. This could be useful if other users need those "
"applications but they are not appropriate for a child."
msgstr ""
"Megakadályozhatja, hogy egy felhasználó a számítógépre már telepített "
"bizonyos alkalmazásokat futtasson. Ez akkor lehet hasznos, ha más "
"felhasználóknak szükségük van ezekre az alkalmazásokra, de egy gyermek "
"számára nem megfelelőek."
#. (itstool) path: page/p
#: C/restricting-applications.page:14
msgid ""
"When installing additional software, you should consider whether that needs "
"to be restricted for some users — newly installed software is usable by all "
"users by default."
msgstr ""
"További szoftverek telepítésekor meg kell fontolnia, hogy nem kell-e "
"korlátozni azokat egyes felhasználók számára, ugyanis az újonnan telepített "
"szoftverek alapértelmezetten minden felhasználó számára használhatóak."
#. (itstool) path: page/p
#: C/restricting-applications.page:18
msgid "To restrict a users access to a specific application:"
msgstr ""
"Egy felhasználó adott alkalmazáshoz való hozzáférésének korlátozásához:"
#. (itstool) path: item/p
#: C/restricting-applications.page:22
msgid "Press the <gui style=\"button\">Restrict Applications</gui> button."
msgstr ""
"Nyomja meg az <gui style=\"button\">Alkalmazások korlátozása</gui> gombot."
#. (itstool) path: item/p
#: C/restricting-applications.page:23
msgid ""
"Enable the switch in the row for each application you would like to restrict "
"the user from accessing."
msgstr ""
"Kapcsolja be a kapcsolót minden olyan alkalmazás sorában, amelyhez a "
"felhasználó hozzáférését korlátozni szeretné."
#. (itstool) path: item/p
#: C/restricting-applications.page:24
msgid "Close the <gui>Restrict Applications</gui> window."
msgstr "Zárja be az <gui>Alkalmazások korlátozása</gui> ablakot."
#. (itstool) path: page/p
#: C/restricting-applications.page:27
msgid ""
"Restricting access to specific applications is often used in conjunction "
"with <link xref=\"software-installation\"/> to prevent a user from "
"installing additional software which has not been vetted."
msgstr ""
"Bizonyos alkalmazásokhoz való hozzáférés korlátozását gyakran használják a "
"<link xref=\"software-installation\"/> korlátozással együtt, hogy "
"megakadályozzanak egy felhasználót a további, nem ellenőrzött szoftverek "
"telepítésében."
#. (itstool) path: info/desc
#: C/software-installation.page:6
msgid ""
"Restricting the software a child user can install, or preventing them "
"installing additional software entirely."
msgstr ""
"Egy gyermekfelhasználó által telepíthető szoftverek korlátozása, vagy "
"további szoftverek telepítésének teljes megakadályozása."
#. (itstool) path: page/title
#: C/software-installation.page:9
msgid "Restricting Software Installation"
msgstr "Szoftvertelepítés korlátozása"
#. (itstool) path: page/p
#: C/software-installation.page:11
msgid ""
"You can prevent a user from installing additional software on the system. "
"They will still be able to search for new software to install, but will need "
"an administrator to authorize the installation when they try to install an "
"application. This applies whether they are trying to install the application "
"system-wide (for all users) or just for themselves."
msgstr ""
"Megakadályozhat egy felhasználót abban, hogy további szoftvereket telepítsen "
"a rendszerre. A felhasználó továbbra is kereshet új telepítendő szoftvert, "
"de rendszergazdára lesz szüksége a telepítés felhatalmazásához, amikor "
"megpróbál telepíteni egy alkalmazást. Ez arra is vonatkozik, hogy az "
"alkalmazást rendszerszinten (minden felhasználónak) vagy csak saját magának "
"próbálja telepíteni."
#. (itstool) path: page/p
#: C/software-installation.page:17
msgid ""
"Additionally, you can restrict which software a user can browse or search "
"for in the <app>Software</app> catalog by age categories."
msgstr ""
"Ezenkívül azt is korlátozhatja az életkor kategória alapján, hogy egy "
"felhasználó milyen szoftvereket böngészhet vagy kereshet a <app>Szoftver</"
"app> katalógusában."
#. (itstool) path: page/p
#: C/software-installation.page:20
msgid ""
"To prevent a user from running an application which has already been "
"installed, see <link xref=\"restricting-applications\"/>."
msgstr ""
"Annak megakadályozásához, hogy egy felhasználó egy már telepített "
"alkalmazást futtasson, nézze meg az <link xref=\"restricting-applications\"/"
"> fejezetet."
#. (itstool) path: section/title
#: C/software-installation.page:24
msgid "Preventing Software Installation"
msgstr "Szoftvertelepítés megakadályozása"
#. (itstool) path: section/p
#: C/software-installation.page:26
msgid "To prevent a user from installing additional software:"
msgstr ""
"Annak megakadályozásához, hogy a felhasználó további szoftvereket telepítsen:"
#. (itstool) path: item/p
#: C/software-installation.page:30
msgid ""
"Enable the <gui style=\"checkbox\">Restrict Application Installation</gui> "
"checkbox."
msgstr ""
"Jelölje be az <gui style=\"checkbox\">Alkalmazástelepítés korlátozása</gui> "
"jelölőnégyzetet."
#. (itstool) path: section/title
#: C/software-installation.page:35
msgid "Restricting Software Installation by Age"
msgstr "Szoftvertelepítés korlátozása életkor alapján"
#. (itstool) path: section/p
#: C/software-installation.page:37
msgid ""
"Applications in the <app>Software</app> catalog have information about "
"content they contain which might be inappropriate for some ages — for "
"example, various forms of violence, unmoderated chat with other people on "
"the internet, or the possibility of spending money."
msgstr ""
"A <app>Szoftver</app> katalógusában található alkalmazások információval "
"rendelkeznek az általuk tartalmazott tartalommal kapcsolatban, hogy melyek "
"lehetnek bizonyos korosztályok számára nem megfelelőek például az erőszak "
"különböző formái, moderálatlan csevegés az interneten más emberekkel, vagy a "
"pénzköltés lehetősége."
#. (itstool) path: section/p
#: C/software-installation.page:41
msgid ""
"For each application, this information is summarized as the minimum age "
"child it is typically suitable to be used by — for example, “suitable for "
"ages 7+”. These age ratings are presented in region-specific schemes which "
"can be compared with the ratings schemes used for films and games."
msgstr ""
"Minden egyes alkalmazás esetében ez az információ összefoglalja, hogy az "
"adott alkalmazás jellemzően legalább milyen korú gyermek számára alkalmas "
"például „7 év felettiek számára alkalmas”. Ezek a korhatár-besorolások régió-"
"specifikus sémákban jelennek meg, amelyek összehasonlíthatók a filmek és "
"játékok esetében használt besorolási sémákkal."
#. (itstool) path: section/p
#: C/software-installation.page:45
msgid ""
"The applications shown to a user in the <app>Software</app> catalog can be "
"filtered by their age suitability. Applications which are not suitable for "
"the user will be hidden, and will not be installable by that user. They will "
"be installable by other users (if their age suitability is set high enough)."
msgstr ""
"A <app>Szoftver</app> katalógusában egy felhasználó számára megjelenített "
"alkalmazások szűrhetők az életkori alkalmasságuk alapján. A felhasználó "
"számára nem megfelelő alkalmazások el lesznek rejtve, és nem lesznek "
"telepíthetők az adott felhasználó számára. Más felhasználók számára "
"telepíthetők lesznek (ha az életkori alkalmasságuk elég magasra van állítva)."
#. (itstool) path: section/p
#: C/software-installation.page:51
msgid ""
"To filter the applications seen by a user in the <app>Software</app> catalog "
"to only those suitable for a certain age:"
msgstr ""
"A <app>Szoftver</app> katalógusában egy felhasználó által látott "
"alkalmazások szűréséhez, hogy csak egy bizonyos korosztály számára legyenek "
"alkalmasak:"
#. (itstool) path: item/p
#: C/software-installation.page:56
msgid ""
"In the <gui>Application Suitability</gui> list, select the age which "
"applications should be suitable for."
msgstr ""
"Az <gui>Alkalmazás alkalmassága</gui> listából válassza ki azt az életkort, "
"amelyre az alkalmazásoknak alkalmasnak kell lenniük."
#. (itstool) path: note/p
#: C/software-installation.page:60
msgid ""
"The users actual age is not stored, so the <gui>Application Suitability</"
"gui> is not automatically updated over time as the child grows older. You "
"must periodically re-assess the appropriate <gui>Application Suitability</"
"gui> for each user."
msgstr ""
"A felhasználó tényleges életkora nem kerül tárolásra, így az <gui>Alkalmazás "
"alkalmassága</gui> nem frissül automatikusan az idő múlásával, ahogy a "
"gyermek idősebbé válik. Rendszeresen újra kell értékelnie a megfelelő "
"<gui>Alkalmazás alkalmassága</gui> értéket minden egyes felhasználónál."

View File

@ -447,4 +447,4 @@ msgstr ""
"Poiché l'età dell'utente non viene memorizzata, l' <gui>Idoneità dell'applicazione</"
"gui> non viene aggiornata automaticamente man mano che il minore cresce. Si dovrebbe "
"rivalutare periodicamente il livello appropriato di <gui>Idoneità dell'applicazione</"
"</gui> per ciascuno degli account."
"gui> per ciascuno degli account."

435
help/ru/ru.po Normal file
View File

@ -0,0 +1,435 @@
# Russian translation for malcontent.
# Copyright (C) 2022 malcontent's COPYRIGHT HOLDER
# This file is distributed under the same license as the malcontent package.
# Sergej A. <sw@atrus.ru>, 2022.
#
msgid ""
msgstr ""
"Project-Id-Version: malcontent main\n"
"POT-Creation-Date: 2022-06-04 15:25+0000\n"
"PO-Revision-Date: 2022-06-05 11:41+1000\n"
"Last-Translator: Ser82-png <sw@atrus.ru>\n"
"Language-Team: Russian <gnome-cyr@gnome.org>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 2.3\n"
#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
msgctxt "_"
msgid "translator-credits"
msgstr "Ser82-png <sw@atrus.ru>, 2022"
#. (itstool) path: info/desc
#: C/creating-a-child-user.page:6
msgid "Creating a child user on the computer."
msgstr "Создание записи пользователя-ребёнка на компьютере."
#. (itstool) path: page/title
#: C/creating-a-child-user.page:9
msgid "Creating a Child User"
msgstr "Создание записи пользователя-ребёнка"
#. (itstool) path: page/p
#: C/creating-a-child-user.page:11
msgid ""
"Parental controls can only be applied to non-administrator accounts. Such an "
"account may have been created when the computer was initially set up. If "
"not, a new child user may be created from the <app>Parental Controls</app> "
"application if no child users already exist; and otherwise may be created "
"from the <app>Control Center</app>."
msgstr ""
"Родительский контроль можно применять только к учётным записям без "
"административных прав. Такая учётная запись могла быть создана при "
"первоначальной настройке системы. Если этого не было сделано, можно создать "
"новую детскую учётную запись с помощью приложения <app>Родительский "
"контроль</app>. Кроме того, такую учётную запись можно создать с помощью "
"<app>Центра управления</app>."
#. (itstool) path: page/p
#: C/creating-a-child-user.page:17
msgid ""
"To create a new child user, see <link type=\"guide\" xref=\"help:gnome-help/"
"user-add\">Add a new user account</link>. As soon as the new user is "
"created, it will appear in the <app>Parental Controls</app> window so that "
"its parental controls settings can be configured."
msgstr ""
"Чтобы создать нового пользователя ребёнка, смотрите <link type=\"guide\" "
"xref=\"help:gnome-help/user-add\">Добавление новой учётной записи "
"пользователя</link>. Как только новый пользователь будет создан, он появится "
"в окне <app>Родительский контроль</app>, чтобы можно было для него настроить "
"параметры родительского контроля."
#. (itstool) path: credit/name
#: C/index.page:6
msgid "Philip Withnall"
msgstr "Philip Withnall"
#. (itstool) path: credit/years
#: C/index.page:8
msgid "2020"
msgstr "2020"
#. (itstool) path: page/title
#: C/index.page:12
msgid "Parental Controls Help"
msgstr "Справка по родительскому контролю"
#. (itstool) path: section/title
#: C/index.page:15
msgid "Introduction &amp; Setup"
msgstr "Введение &amp; Настройка"
#. (itstool) path: section/title
#: C/index.page:19
msgid "Controls to Apply"
msgstr "Средства контроля, которые можно применить"
#. (itstool) path: info/desc
#: C/internet.page:6
msgid "Restricting a child users access to the internet."
msgstr "Ограничение доступа ребёнка к интернету."
#. (itstool) path: page/title
#: C/internet.page:9
msgid "Restricting Access to the Internet"
msgstr "Ограничение доступа к интернету"
#. (itstool) path: page/p
#: C/internet.page:11
msgid ""
"You can restrict a users access to the internet. This will prevent them "
"using a web browser, but it will not prevent them using the internet (in "
"potentially more limited forms) through other applications. For example, it "
"will not prevent access to e-mail accounts using <app>Evolution</app>, and "
"it will not prevent software updates being downloaded and applied."
msgstr ""
"Вы можете ограничить доступ пользователя к интернету. Этим способом можно "
"запретить пользователю использовать веб-браузер, но доступ к сети интернет "
"будет сохранён (в потенциально более ограниченной форме) с помощью других "
"приложений. Например, пользователь будет иметь доступ к учётным записям "
"электронной почты с помощью <app>Evolution</app>, а также не будет "
"ограничений для загрузки и обновления программного обеспечения."
#. (itstool) path: page/p
#: C/internet.page:17
msgid "To restrict a users access to the internet:"
msgstr "Чтобы ограничить доступ пользователя к интернету:"
#. (itstool) path: item/p
#: C/internet.page:19 C/restricting-applications.page:20
#: C/software-installation.page:28 C/software-installation.page:54
msgid "Open the <app>Parental Controls</app> application."
msgstr "Откройте приложение <app>Родительский контроль</app>."
#. (itstool) path: item/p
#: C/internet.page:20 C/restricting-applications.page:21
#: C/software-installation.page:29 C/software-installation.page:55
msgid "Select the user in the tabs at the top."
msgstr "Выберите пользователя во вкладках верхней части окна."
#. (itstool) path: item/p
#: C/internet.page:21
msgid ""
"Enable the <gui style=\"checkbox\">Restrict Web Browsers</gui> checkbox."
msgstr ""
"Установите флажок <gui style=\"checkbox\">Ограничить доступ к Веб-браузерам</"
"gui>."
#. (itstool) path: info/desc
#: C/introduction.page:6
msgid ""
"Overview of parental controls, the <app>Parental Controls</app> application "
"and its use in other situations where access restrictions are needed on a "
"user."
msgstr ""
"Обзор родительского контроля, приложения <app>Родительский контроль</app> и "
"его использования в различных ситуациях, когда необходимо ограничить доступ "
"для пользователя."
#. (itstool) path: page/title
#: C/introduction.page:12
msgid "Introduction to Parental Controls"
msgstr "Введение в родительский контроль"
#. (itstool) path: page/p
#: C/introduction.page:14
msgid ""
"Parental controls are a way to restrict what non-administrator accounts can "
"do on the computer, with the aim of allowing parents to restrict what their "
"children can do when using the computer unsupervised or under limited "
"supervision."
msgstr ""
"Родительский контроль — это способ ограничить перечень возможных действий на "
"компьютере пользователям не имеющим учётных записей администратора. Целью "
"является ограничение родителями действий детей при работе на компьютере, "
"находящихся без присмотра или под ограниченным присмотром."
#. (itstool) path: page/p
#: C/introduction.page:18
msgid ""
"This functionality can be used in other situations ­ such as other carer/"
"caree relationships but is labelled as parental controls so that its "
"easy to find, as thats what most people will be looking for."
msgstr ""
"Эту функцию также можно использовать и в других ситуациях, например, в "
"отношениях «сиделка/пациент», но она помечена как «родительский контроль» "
"только для удобства поиска, поскольку именно это будут искать большинство "
"пользователей."
#. (itstool) path: page/p
#: C/introduction.page:21
msgid ""
"The parental controls for any user can be queried and set using the "
"<app>Parental Controls</app> application. This lists the non-administrator "
"accounts in tabs along its top bar, and shows their current parental "
"controls settings below. Changes to the parental controls apply immediately."
msgstr ""
"Для любого пользователя можно просмотреть и установить родительский контроль "
"с помощью приложения <app>Родительский контроль</app>. В окне программы на "
"вкладках вдоль верхней панели перечислены учётные записи без прав "
"администратора, а ниже показаны их текущие настройки родительского контроля. "
"Изменения в родительском контроле вступают в силу немедленно."
#. (itstool) path: page/p
#: C/introduction.page:25
msgid ""
"Restrictions on using the computer can only be applied to non-administrator "
"accounts. The parental controls settings for a user can only be changed by "
"an administrator, although the administrator can do so from the users "
"account by entering their password when prompted by the <app>Parental "
"Controls</app> application."
msgstr ""
"Ограничения на использование компьютера могут применяться только к учётным "
"записям без прав администратора. Настройки родительского контроля для "
"пользователя может изменить только администратор, хотя он может сделать это "
"из учётной записи пользователя, введя свой пароль при запросе приложения "
"<app>Родительский контроль</app>."
#. (itstool) path: p/link
#: C/legal.xml:4
msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License"
msgstr "Creative Commons Attribution-ShareAlike 3.0 Unported License"
#. (itstool) path: license/p
#: C/legal.xml:3
msgid "This work is licensed under a <_:link-1/>."
msgstr "Данная работа находится под лицензией <_:link-1/>."
#. (itstool) path: info/desc
#: C/restricting-applications.page:6
msgid "Restricting a child user from running already-installed applications."
msgstr "Запретить ребёнку запускать уже установленные приложения."
#. (itstool) path: page/title
#: C/restricting-applications.page:9
msgid "Restricting Access to Installed Applications"
msgstr "Ограничение доступа к установленным приложениям"
#. (itstool) path: page/p
#: C/restricting-applications.page:11
msgid ""
"You can prevent a user from running specific applications which are already "
"installed on the computer. This could be useful if other users need those "
"applications but they are not appropriate for a child."
msgstr ""
"Вы можете запретить пользователю запускать определённые приложения, уже "
"установленные на компьютере. Это может быть полезно, если эти приложения "
"необходимы другим пользователям, но не подходят для ребёнка."
#. (itstool) path: page/p
#: C/restricting-applications.page:14
msgid ""
"When installing additional software, you should consider whether that needs "
"to be restricted for some users — newly installed software is usable by all "
"users by default."
msgstr ""
"При установке дополнительного программного обеспечения вам следует "
"учитывать, нужно ли ограничивать доступ для некоторых пользователей — новое "
"установленное программное обеспечение по умолчанию может использоваться "
"всеми пользователями."
#. (itstool) path: page/p
#: C/restricting-applications.page:18
msgid "To restrict a users access to a specific application:"
msgstr "Чтобы ограничить доступ пользователя к определенному приложению:"
#. (itstool) path: item/p
#: C/restricting-applications.page:22
msgid "Press the <gui style=\"button\">Restrict Applications</gui> button."
msgstr ""
"Нажмите кнопку <gui style=\"button\">Ограничить доступ к приложениям</gui>."
#. (itstool) path: item/p
#: C/restricting-applications.page:23
msgid ""
"Enable the switch in the row for each application you would like to restrict "
"the user from accessing."
msgstr ""
"Измените положение переключателя в строке для каждого приложения, к которому "
"вы хотите ограничить доступ пользователя."
#. (itstool) path: item/p
#: C/restricting-applications.page:24
msgid "Close the <gui>Restrict Applications</gui> window."
msgstr "Закройте окно <gui>Ограничить доступ к приложениям</gui>."
#. (itstool) path: page/p
#: C/restricting-applications.page:27
msgid ""
"Restricting access to specific applications is often used in conjunction "
"with <link xref=\"software-installation\"/> to prevent a user from "
"installing additional software which has not been vetted."
msgstr ""
"Ограничение доступа к определённым приложениям часто используется в "
"сочетании с <link xref=\"software-installation\"/>, чтобы запретить "
"пользователю устанавливать непроверенное программное обеспечение."
#. (itstool) path: info/desc
#: C/software-installation.page:6
msgid ""
"Restricting the software a child user can install, or preventing them "
"installing additional software entirely."
msgstr ""
"Ограничение перечная программного обеспечения, которое ребёнок может "
"установить, или полный запрет на его установку."
#. (itstool) path: page/title
#: C/software-installation.page:9
msgid "Restricting Software Installation"
msgstr "Ограничения на установку программного обеспечения по возрасту"
#. (itstool) path: page/p
#: C/software-installation.page:11
msgid ""
"You can prevent a user from installing additional software on the system. "
"They will still be able to search for new software to install, but will need "
"an administrator to authorize the installation when they try to install an "
"application. This applies whether they are trying to install the application "
"system-wide (for all users) or just for themselves."
msgstr ""
"Вы можете запретить пользователям устанавливать дополнительное программное "
"обеспечение. Хотя они по-прежнему смогут искать программное обеспечение для "
"установки, но при попытке установить приложение им потребуется разрешение "
"администратора. Это не зависит от того, пытаются ли установить приложение в "
"масштабах всей системы (для всех пользователей) или только для себя."
#. (itstool) path: page/p
#: C/software-installation.page:17
msgid ""
"Additionally, you can restrict which software a user can browse or search "
"for in the <app>Software</app> catalog by age categories."
msgstr ""
"Кроме того, вы можете ограничить по возрастному критерию, какое программное "
"обеспечение пользователь может просматривать или искать в <app>Центре "
"приложений</app>."
#. (itstool) path: page/p
#: C/software-installation.page:20
msgid ""
"To prevent a user from running an application which has already been "
"installed, see <link xref=\"restricting-applications\"/>."
msgstr ""
"Чтобы запретить пользователю запускать уже установленное приложение, "
"смотрите раздел <link xref=\"restricting-applications\"/>."
#. (itstool) path: section/title
#: C/software-installation.page:24
msgid "Preventing Software Installation"
msgstr "Предотвращение установки программного обеспечения"
#. (itstool) path: section/p
#: C/software-installation.page:26
msgid "To prevent a user from installing additional software:"
msgstr ""
"Чтобы запретить пользователю устанавливать дополнительное программное "
"обеспечение:"
#. (itstool) path: item/p
#: C/software-installation.page:30
msgid ""
"Enable the <gui style=\"checkbox\">Restrict Application Installation</gui> "
"checkbox."
msgstr ""
"Установите флажок <gui style=\"checkbox\">Ограничить установку приложений</"
"gui>."
#. (itstool) path: section/title
#: C/software-installation.page:35
msgid "Restricting Software Installation by Age"
msgstr "Ограничения на установку программного обеспечения по возрасту"
#. (itstool) path: section/p
#: C/software-installation.page:37
msgid ""
"Applications in the <app>Software</app> catalog have information about "
"content they contain which might be inappropriate for some ages — for "
"example, various forms of violence, unmoderated chat with other people on "
"the internet, or the possibility of spending money."
msgstr ""
"В описании к приложениям из каталога <app>Центра приложений</app> содержатся "
"сведения, которые могут быть неприемлемыми для определённых возрастных групп "
"— например, различные формы насилия, неограниченные возможности по общению с "
"другими людьми в интернете или возможность расходовать деньги."
#. (itstool) path: section/p
#: C/software-installation.page:41
msgid ""
"For each application, this information is summarized as the minimum age "
"child it is typically suitable to be used by — for example, “suitable for "
"ages 7+”. These age ratings are presented in region-specific schemes which "
"can be compared with the ratings schemes used for films and games."
msgstr ""
"Для каждого приложения в этих сведениях содержится информация о минимальном "
"возрасте ребенка, с которого его можно допустить к использованию данного "
"приложения. Например, «подходит для возраста 7+». Эти возрастные оценки "
"представлены в виде специфических для региона схем, сопоставимых со схемами "
"рейтингов для фильмов и видеоигр."
#. (itstool) path: section/p
#: C/software-installation.page:45
msgid ""
"The applications shown to a user in the <app>Software</app> catalog can be "
"filtered by their age suitability. Applications which are not suitable for "
"the user will be hidden, and will not be installable by that user. They will "
"be installable by other users (if their age suitability is set high enough)."
msgstr ""
"Приложения, показанные в каталоге <app>Центра приложений</app>, могут быть "
"отфильтрованы по возрастным критериям. Приложения, которые не подходят для "
"конкретного пользователя, будут скрыты и не смогут быть установлены. Но для "
"других пользователей они будут доступны (если пользователи будут "
"соответствовать установленным возрастным критериям)."
#. (itstool) path: section/p
#: C/software-installation.page:51
msgid ""
"To filter the applications seen by a user in the <app>Software</app> catalog "
"to only those suitable for a certain age:"
msgstr ""
"Чтобы отфильтровать приложения, представленные пользователю в каталоге "
"<app>Центра приложений</app>, по возрастному критерию:"
#. (itstool) path: item/p
#: C/software-installation.page:56
msgid ""
"In the <gui>Application Suitability</gui> list, select the age which "
"applications should be suitable for."
msgstr ""
"В списке <gui>Пригодность приложений</gui> выберите возраст, для которого "
"должны быть подходящими приложения."
#. (itstool) path: note/p
#: C/software-installation.page:60
msgid ""
"The users actual age is not stored, so the <gui>Application Suitability</"
"gui> is not automatically updated over time as the child grows older. You "
"must periodically re-assess the appropriate <gui>Application Suitability</"
"gui> for each user."
msgstr ""
"Возраст пользователя в системе не сохраняется, поэтому <gui>Пригодность "
"приложений</gui> по мере взросления ребёнка автоматически не обновляется. Вы "
"должны периодически пересматривать соответствующую для каждого пользователя "
"<gui>Пригодность приложений</gui>."

427
help/tr/tr.po Normal file
View File

@ -0,0 +1,427 @@
# Turkish translation for malcontent.
# Copyright (C) 2023 malcontent's COPYRIGHT HOLDER
# This file is distributed under the same license as the malcontent package.
#
# Sabri Ünal <libreajans@gmail.com>, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: malcontent main\n"
"POT-Creation-Date: 2023-03-08 15:25+0000\n"
"PO-Revision-Date: 2023-03-09 03:38+0300\n"
"Last-Translator: Sabri Ünal <libreajans@gmail.com>\n"
"Language-Team: Turkish <tr@li.org>\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 3.1.1\n"
#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
msgctxt "_"
msgid "translator-credits"
msgstr "Sabri Ünal <libreajans@gmail.com>, 2023."
#. (itstool) path: info/desc
#: C/creating-a-child-user.page:6
msgid "Creating a child user on the computer."
msgstr "Bilgisayarda çocuk kullanıcı oluşturmak."
#. (itstool) path: page/title
#: C/creating-a-child-user.page:9
msgid "Creating a Child User"
msgstr "Çocuk Kullanıcı Oluşturmak"
# Control Center için ayarlar çevirisini kullanıyoruz. Burada eski adı kullanılmış.
#. (itstool) path: page/p
#: C/creating-a-child-user.page:11
msgid ""
"Parental controls can only be applied to non-administrator accounts. Such an "
"account may have been created when the computer was initially set up. If "
"not, a new child user may be created from the <app>Parental Controls</app> "
"application if no child users already exist; and otherwise may be created "
"from the <app>Control Center</app>."
msgstr ""
"Ebeveyn denetimleri yalnızca yönetici olmayan hesaplara uygulanabilir. Bu "
"tip hesap, bilgisayar ilk kurulduğunda oluşturulmuş olabilir. Değilse, hiç "
"çocuk kullanıcı yoksa, <app>Ebeveyn Denetimleri</app> uygulamasından yeni "
"çocuk kullanıcı oluşturulabilir; aksi halde <app>Ayarlar</app>ʼdan "
"oluşturulabilir."
#. (itstool) path: page/p
#: C/creating-a-child-user.page:17
msgid ""
"To create a new child user, see <link type=\"guide\" xref=\"help:gnome-help/"
"user-add\">Add a new user account</link>. As soon as the new user is "
"created, it will appear in the <app>Parental Controls</app> window so that "
"its parental controls settings can be configured."
msgstr ""
"Yeni çocuk kullanıcı oluşturmak için <link type=\"guide\" xref=\"help:gnome-"
"help/user-add\">Yeni kullanıcı hesabı ekle</link>ʼye bakın. Yeni kullanıcı "
"oluşturulunca, ebeveyn denetimleri ayarlarının yapılandırılabilmesi için "
"<app>Ebeveyn Denetimleri</app> penceresi görünecektir."
#. (itstool) path: credit/name
#: C/index.page:6
msgid "Philip Withnall"
msgstr "Philip Withnall"
#. (itstool) path: credit/years
#: C/index.page:8
msgid "2020"
msgstr "2020"
#. (itstool) path: page/title
#: C/index.page:12
msgid "Parental Controls Help"
msgstr "Ebeveyn Denetimleri Yardım"
#. (itstool) path: section/title
#: C/index.page:15
msgid "Introduction &amp; Setup"
msgstr "Giriş ve Kurulum"
#. (itstool) path: section/title
#: C/index.page:19
msgid "Controls to Apply"
msgstr "Uygulanacak Denetimler"
#. (itstool) path: info/desc
#: C/internet.page:6
msgid "Restricting a child users access to the internet."
msgstr "Çocuk kullanıcının internete erişimini kısıtlamak."
#. (itstool) path: page/title
#: C/internet.page:9
msgid "Restricting Access to the Internet"
msgstr "İnternet Erişimini Kısıtlama"
#. (itstool) path: page/p
#: C/internet.page:11
msgid ""
"You can restrict a users access to the internet. This will prevent them "
"using a web browser, but it will not prevent them using the internet (in "
"potentially more limited forms) through other applications. For example, it "
"will not prevent access to e-mail accounts using <app>Evolution</app>, and "
"it will not prevent software updates being downloaded and applied."
msgstr ""
"Kullanıcının internete erişimini kısıtlayabilirsiniz. Bu, web tarayıcısı "
"kullanmalarını engelleyecektir, ancak diğer uygulamalar aracılığıyla "
"(muhtemelen daha sınırlı biçimlerde) interneti kullanmalarını "
"engellemeyecektir. Örneğin, <app>Evolution</app> kullanarak e-posta "
"hesaplarına erişimi engellemez ve yazılım güncellemelerinin indirilip "
"uygulanmasını engellemez."
#. (itstool) path: page/p
#: C/internet.page:17
msgid "To restrict a users access to the internet:"
msgstr "Kullanıcının internet erişimini kısıtlamak için:"
#. (itstool) path: item/p
#: C/internet.page:19 C/restricting-applications.page:20
#: C/software-installation.page:28 C/software-installation.page:54
msgid "Open the <app>Parental Controls</app> application."
msgstr "<app>Ebeveyn Denetimleri</app> uygulamasınıın."
#. (itstool) path: item/p
#: C/internet.page:20 C/restricting-applications.page:21
#: C/software-installation.page:29 C/software-installation.page:55
msgid "Select the user in the tabs at the top."
msgstr "Üstteki sekmelerde kullanıcıyı seçin."
#. (itstool) path: item/p
#: C/internet.page:21
msgid ""
"Enable the <gui style=\"checkbox\">Restrict Web Browsers</gui> checkbox."
msgstr ""
"<gui style=\"checkbox\">Web Tarayıcılarını Kısıtla</gui> onay kutusunu "
"etkinleştirin."
#. (itstool) path: info/desc
#: C/introduction.page:6
msgid ""
"Overview of parental controls, the <app>Parental Controls</app> application "
"and its use in other situations where access restrictions are needed on a "
"user."
msgstr ""
"Ebeveyn denetimlerine, <app>Ebeveyn Denetimleri</app> uygulamasına ve "
"kullanıcı için erişim kısıtlamalarının gereksinildiği diğer durumlarda "
"kullanımına genel bakış."
#. (itstool) path: page/title
#: C/introduction.page:12
msgid "Introduction to Parental Controls"
msgstr "Ebeveyn Denetimleriʼne Giriş"
#. (itstool) path: page/p
#: C/introduction.page:14
msgid ""
"Parental controls are a way to restrict what non-administrator accounts can "
"do on the computer, with the aim of allowing parents to restrict what their "
"children can do when using the computer unsupervised or under limited "
"supervision."
msgstr ""
"Ebeveyn denetimleri, bilgisayarda yönetici hesabı olmayan hesapların ne "
"yapabileceğini sınırlamanın bir yoludur. Amacı, ebeveynlerin çocukları "
"bilgisayarı gözetimsiz veya sınırlı gözetim altında kullandıklarında ne "
"yapabileceklerini sınırlamalarını sağlamaktır."
#. (itstool) path: page/p
#: C/introduction.page:18
msgid ""
"This functionality can be used in other situations ­ such as other carer/"
"caree relationships but is labelled as parental controls so that its "
"easy to find, as thats what most people will be looking for."
msgstr ""
"Bu işlevsellik diğer bakıcı/bakılan ilişkileri gibi diğer durumlarda da "
"kullanılabilir, ancak çoğu insanın ebeveyn denetimleri olarak arayacağı "
"varsayılarak, bulması kolay olsun diye bu şekilde adlandırılmıştır."
#. (itstool) path: page/p
#: C/introduction.page:21
msgid ""
"The parental controls for any user can be queried and set using the "
"<app>Parental Controls</app> application. This lists the non-administrator "
"accounts in tabs along its top bar, and shows their current parental "
"controls settings below. Changes to the parental controls apply immediately."
msgstr ""
"Herhangi bir kullanıcı için ebeveyn denetimleri, <app>Ebeveyn Denetimleri</"
"app> uygulaması kullanılarak sorgulanabilir ve ayarlanabilir. Bu, yönetici "
"olmayan hesapları üst çubuğundaki sekmelerde listeler ve altında geçerli "
"ebeveyn denetimleri ayarlarını gösterir. Ebeveyn denetimlerinde yapılan "
"değişiklikler hemen uygulanır."
#. (itstool) path: page/p
#: C/introduction.page:25
msgid ""
"Restrictions on using the computer can only be applied to non-administrator "
"accounts. The parental controls settings for a user can only be changed by "
"an administrator, although the administrator can do so from the users "
"account by entering their password when prompted by the <app>Parental "
"Controls</app> application."
msgstr ""
"Bilgisayar kullanımıyla ilgili kısıtlamalar yalnızca yönetici olmayan "
"hesaplara uygulanabilir. Bir kullanıcının ebeveyn denetimleri ayarları "
"yalnızca bir yönetici tarafından değiştirilebilir, ancak yönetici "
"<app>Ebeveyn Denetimleri</app> uygulaması tarafından istendiğinde parolasını "
"girerek kullanıcının hesabından bunu yapabilir."
#. (itstool) path: p/link
#: C/legal.xml:4
msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License"
msgstr "Creative Commons Attribution-ShareAlike 3.0 Unported License"
#. (itstool) path: license/p
#: C/legal.xml:3
msgid "This work is licensed under a <_:link-1/>."
msgstr "Bu çalışma <_:link-1/> altında lisanslanmıştır."
#. (itstool) path: info/desc
#: C/restricting-applications.page:6
msgid "Restricting a child user from running already-installed applications."
msgstr ""
"Çocuk kullanıcının zaten kurulmuş uygulamaları çalıştırmasını kısıtlama."
#. (itstool) path: page/title
#: C/restricting-applications.page:9
msgid "Restricting Access to Installed Applications"
msgstr "Kurulu Uygulamalara Erişimi Kısıtlama"
#. (itstool) path: page/p
#: C/restricting-applications.page:11
msgid ""
"You can prevent a user from running specific applications which are already "
"installed on the computer. This could be useful if other users need those "
"applications but they are not appropriate for a child."
msgstr ""
"Kullanıcının zaten bilgisayarda kurulu olan belirli uygulamaları "
"çalıştırmasını engelleyebilirsiniz. Bu, diğer kullanıcıların bu uygulamalara "
"ihtiyacı varsa ancak çocuk için uygun değilse faydalı olabilir."
#. (itstool) path: page/p
#: C/restricting-applications.page:14
msgid ""
"When installing additional software, you should consider whether that needs "
"to be restricted for some users — newly installed software is usable by all "
"users by default."
msgstr ""
"Ek yazılım kurarken, bunun bazı kullanıcılar için kısıtlanması gerekip "
"gerekmediğini değerlendirmelisiniz. Yeni kurulan yazılımlar öntanımlı olarak "
"tüm kullanıcılar tarafından kullanılabilir."
#. (itstool) path: page/p
#: C/restricting-applications.page:18
msgid "To restrict a users access to a specific application:"
msgstr "Bir kullanıcının belirli bir uygulamaya erişimini kısıtlamak için:"
#. (itstool) path: item/p
#: C/restricting-applications.page:22
msgid "Press the <gui style=\"button\">Restrict Applications</gui> button."
msgstr "<gui style=\"button\">Uygulamaları Kısıtla</gui> düğmesine basın."
#. (itstool) path: item/p
#: C/restricting-applications.page:23
msgid ""
"Enable the switch in the row for each application you would like to restrict "
"the user from accessing."
msgstr ""
"Kullanıcının erişimini kısıtlamak istediğiniz her uygulamanın anahtarını "
"etkinleştirin."
#. (itstool) path: item/p
#: C/restricting-applications.page:24
msgid "Close the <gui>Restrict Applications</gui> window."
msgstr "<gui style=\"button\">Uygulamaları Kısıtla</gui> benceresini kapatın."
#. (itstool) path: page/p
#: C/restricting-applications.page:27
msgid ""
"Restricting access to specific applications is often used in conjunction "
"with <link xref=\"software-installation\"/> to prevent a user from "
"installing additional software which has not been vetted."
msgstr ""
"Belirli uygulamalara erişimin kısıtlanması, kullanıcının incelenmemiş ek "
"yazılımlar kurmasını önlemek için genellikle <link xref=\"software-"
"installation\"/> ile birlikte kullanılır."
#. (itstool) path: info/desc
#: C/software-installation.page:6
msgid ""
"Restricting the software a child user can install, or preventing them "
"installing additional software entirely."
msgstr ""
"Çocuk kullanıcının kurabileceği yazılımı kısıtlamak ya da ek yazılım "
"kurmasını tamamen engellemek."
#. (itstool) path: page/title
#: C/software-installation.page:9
msgid "Restricting Software Installation"
msgstr "Yazılım Kurulumunu Kısıtlama"
#. (itstool) path: page/p
#: C/software-installation.page:11
msgid ""
"You can prevent a user from installing additional software on the system. "
"They will still be able to search for new software to install, but will need "
"an administrator to authorize the installation when they try to install an "
"application. This applies whether they are trying to install the application "
"system-wide (for all users) or just for themselves."
msgstr ""
"Kullanıcının sisteme ek yazılım kurmasını engelleyebilirsiniz. Yine de "
"kurulum için yeni yazılım arayabilecekler, ancak uygulama kurmaya "
"çalıştıklarında kurulumu yetkilendirmek için yöneticiye ihtiyaçları olacak. "
"Bu, uygulamayı sistem geneline (tüm kullanıcılar için) ya da yalnızca "
"kendileri için kurmaya çalışsalar da geçerlidir."
#. (itstool) path: page/p
#: C/software-installation.page:17
msgid ""
"Additionally, you can restrict which software a user can browse or search "
"for in the <app>Software</app> catalog by age categories."
msgstr ""
"Ayrıca, kullanıcının <app>Yazılımlar</app> kataloğunda hangi yazılımlara göz "
"atabileceğini ya da arayabileceğini yaş kategorilerine göre "
"sınırlayabilirsiniz."
#. (itstool) path: page/p
#: C/software-installation.page:20
msgid ""
"To prevent a user from running an application which has already been "
"installed, see <link xref=\"restricting-applications\"/>."
msgstr ""
"Bir kullanıcının zaten kurulu bir uygulamayı çalıştırmasını engellemek için "
"bkz. <link xref=\"restricting-applications\"/>."
#. (itstool) path: section/title
#: C/software-installation.page:24
msgid "Preventing Software Installation"
msgstr "Yazılım Kurulumunu Engelleme"
#. (itstool) path: section/p
#: C/software-installation.page:26
msgid "To prevent a user from installing additional software:"
msgstr "Kullanıcının ek yazılım kurmasını engellemek için:"
#. (itstool) path: item/p
#: C/software-installation.page:30
msgid ""
"Enable the <gui style=\"checkbox\">Restrict Application Installation</gui> "
"checkbox."
msgstr ""
"<gui style=\"checkbox\">Uygulama Kurulumunu Kısıtla</gui> onay kutusunu "
"etkinleştirin."
#. (itstool) path: section/title
#: C/software-installation.page:35
msgid "Restricting Software Installation by Age"
msgstr "Yazılım Kurulumunu Yaşa Göre Kısıtlama"
#. (itstool) path: section/p
#: C/software-installation.page:37
msgid ""
"Applications in the <app>Software</app> catalog have information about "
"content they contain which might be inappropriate for some ages — for "
"example, various forms of violence, unmoderated chat with other people on "
"the internet, or the possibility of spending money."
msgstr ""
"<app>Yazılımlar</app> kataloğundaki uygulamalar, kimi yaş grupları için "
"uygun olmayabilecek içerikleri hakkında bilgiler içerir - örneğin, çeşitli "
"şiddet türleri, internet üzerinden diğer kişilerle denetlenmeyen sohbet, ya "
"da para harcama olasılığı gibi."
#. (itstool) path: section/p
#: C/software-installation.page:41
msgid ""
"For each application, this information is summarized as the minimum age "
"child it is typically suitable to be used by — for example, “suitable for "
"ages 7+”. These age ratings are presented in region-specific schemes which "
"can be compared with the ratings schemes used for films and games."
msgstr ""
"Her uygulama için, bu bilgi genellikle kullanımı için uygun en düşük yaş "
"grubu olarak özetlenir - örneğin, \"7 yaş ve üzeri için uygun\". Bu yaş "
"derecelendirmeleri, filmler ve oyunlar için kullanılan derecelendirme "
"şemaları ile karşılaştırılabilen bölgesel şemalarda sunulur."
#. (itstool) path: section/p
#: C/software-installation.page:45
msgid ""
"The applications shown to a user in the <app>Software</app> catalog can be "
"filtered by their age suitability. Applications which are not suitable for "
"the user will be hidden, and will not be installable by that user. They will "
"be installable by other users (if their age suitability is set high enough)."
msgstr ""
"<app>Yazılımlar</app> kataloğunda kullanıcıya gösterilen uygulamalar, yaş "
"uygunluğuna göre süzülerek gösterilebilir. Kullanıcı için uygun olmayan "
"uygulamalar gizlenir ve kullanıcı tarafından kurulamaz. Bu uygulamalar, yaş "
"uygunluğu yeterince yüksek olan diğer kullanıcılarca kurulabilir."
#. (itstool) path: section/p
#: C/software-installation.page:51
msgid ""
"To filter the applications seen by a user in the <app>Software</app> catalog "
"to only those suitable for a certain age:"
msgstr ""
"Kullanıcının <app>Yazılımlar</app> kataloğunda gördüğü uygulamaları yalnızca "
"belirli yaşa uygun olacak şekilde süzmek için:"
#. (itstool) path: item/p
#: C/software-installation.page:56
msgid ""
"In the <gui>Application Suitability</gui> list, select the age which "
"applications should be suitable for."
msgstr ""
"<gui>Uygulama Uygunluğu</gui> listesinde, uygulamaların hangi yaş için uygun "
"olduğunu seçin."
#. (itstool) path: note/p
#: C/software-installation.page:60
msgid ""
"The users actual age is not stored, so the <gui>Application Suitability</"
"gui> is not automatically updated over time as the child grows older. You "
"must periodically re-assess the appropriate <gui>Application Suitability</"
"gui> for each user."
msgstr ""
"Kullanıcının gerçek yaşı depolanmadığı için, <gui>Uygulama Uygunluğu</gui> "
"çocuk büyüdükçe zamanla kendiliğinden güncellenmez. <gui>Uygulama Uygunluğu</"
"gui> her kullanıcı için düzenli olarak yeniden belirlenmelidir."

View File

@ -1,610 +0,0 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
*
* Copyright (C) 2015-2016 Richard Hughes <richard@hughsie.com>
*
* Licensed under the GNU General Public License Version 2
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "config.h"
#include <appstream-glib.h>
#include <glib/gi18n-lib.h>
#include <string.h>
#include "gs-content-rating.h"
#if !AS_CHECK_VERSION(0, 7, 18)
const gchar *
gs_content_rating_system_to_str (GsContentRatingSystem system)
{
if (system == GS_CONTENT_RATING_SYSTEM_INCAA)
return "INCAA";
if (system == GS_CONTENT_RATING_SYSTEM_ACB)
return "ACB";
if (system == GS_CONTENT_RATING_SYSTEM_DJCTQ)
return "DJCTQ";
if (system == GS_CONTENT_RATING_SYSTEM_GSRR)
return "GSRR";
if (system == GS_CONTENT_RATING_SYSTEM_PEGI)
return "PEGI";
if (system == GS_CONTENT_RATING_SYSTEM_KAVI)
return "KAVI";
if (system == GS_CONTENT_RATING_SYSTEM_USK)
return "USK";
if (system == GS_CONTENT_RATING_SYSTEM_ESRA)
return "ESRA";
if (system == GS_CONTENT_RATING_SYSTEM_CERO)
return "CERO";
if (system == GS_CONTENT_RATING_SYSTEM_OFLCNZ)
return "OFLCNZ";
if (system == GS_CONTENT_RATING_SYSTEM_RUSSIA)
return "RUSSIA";
if (system == GS_CONTENT_RATING_SYSTEM_MDA)
return "MDA";
if (system == GS_CONTENT_RATING_SYSTEM_GRAC)
return "GRAC";
if (system == GS_CONTENT_RATING_SYSTEM_ESRB)
return "ESRB";
if (system == GS_CONTENT_RATING_SYSTEM_IARC)
return "IARC";
return NULL;
}
/* data obtained from https://en.wikipedia.org/wiki/Video_game_rating_system */
static char *
get_esrb_string (const gchar *source, const gchar *translate)
{
if (g_strcmp0 (source, translate) == 0)
return g_strdup (source);
/* TRANSLATORS: This is the formatting of English and localized name
of the rating e.g. "Adults Only (solo adultos)" */
return g_strdup_printf (_("%s (%s)"), source, translate);
}
/* data obtained from https://en.wikipedia.org/wiki/Video_game_rating_system */
gchar *
gs_utils_content_rating_age_to_str (GsContentRatingSystem system, guint age)
{
if (system == GS_CONTENT_RATING_SYSTEM_INCAA) {
if (age >= 18)
return g_strdup ("+18");
if (age >= 13)
return g_strdup ("+13");
return g_strdup ("ATP");
}
if (system == GS_CONTENT_RATING_SYSTEM_ACB) {
if (age >= 18)
return g_strdup ("R18+");
if (age >= 15)
return g_strdup ("MA15+");
return g_strdup ("PG");
}
if (system == GS_CONTENT_RATING_SYSTEM_DJCTQ) {
if (age >= 18)
return g_strdup ("18");
if (age >= 16)
return g_strdup ("16");
if (age >= 14)
return g_strdup ("14");
if (age >= 12)
return g_strdup ("12");
if (age >= 10)
return g_strdup ("10");
return g_strdup ("L");
}
if (system == GS_CONTENT_RATING_SYSTEM_GSRR) {
if (age >= 18)
return g_strdup ("限制");
if (age >= 15)
return g_strdup ("輔15");
if (age >= 12)
return g_strdup ("輔12");
if (age >= 6)
return g_strdup ("保護");
return g_strdup ("普通");
}
if (system == GS_CONTENT_RATING_SYSTEM_PEGI) {
if (age >= 18)
return g_strdup ("18");
if (age >= 16)
return g_strdup ("16");
if (age >= 12)
return g_strdup ("12");
if (age >= 7)
return g_strdup ("7");
if (age >= 3)
return g_strdup ("3");
return NULL;
}
if (system == GS_CONTENT_RATING_SYSTEM_KAVI) {
if (age >= 18)
return g_strdup ("18+");
if (age >= 16)
return g_strdup ("16+");
if (age >= 12)
return g_strdup ("12+");
if (age >= 7)
return g_strdup ("7+");
if (age >= 3)
return g_strdup ("3+");
return NULL;
}
if (system == GS_CONTENT_RATING_SYSTEM_USK) {
if (age >= 18)
return g_strdup ("18");
if (age >= 16)
return g_strdup ("16");
if (age >= 12)
return g_strdup ("12");
if (age >= 6)
return g_strdup ("6");
return g_strdup ("0");
}
/* Reference: http://www.esra.org.ir/ */
if (system == GS_CONTENT_RATING_SYSTEM_ESRA) {
if (age >= 18)
return g_strdup ("+18");
if (age >= 15)
return g_strdup ("+15");
if (age >= 12)
return g_strdup ("+12");
if (age >= 7)
return g_strdup ("+7");
if (age >= 3)
return g_strdup ("+3");
return NULL;
}
if (system == GS_CONTENT_RATING_SYSTEM_CERO) {
if (age >= 18)
return g_strdup ("Z");
if (age >= 17)
return g_strdup ("D");
if (age >= 15)
return g_strdup ("C");
if (age >= 12)
return g_strdup ("B");
return g_strdup ("A");
}
if (system == GS_CONTENT_RATING_SYSTEM_OFLCNZ) {
if (age >= 18)
return g_strdup ("R18");
if (age >= 16)
return g_strdup ("R16");
if (age >= 15)
return g_strdup ("R15");
if (age >= 13)
return g_strdup ("R13");
return g_strdup ("G");
}
if (system == GS_CONTENT_RATING_SYSTEM_RUSSIA) {
if (age >= 18)
return g_strdup ("18+");
if (age >= 16)
return g_strdup ("16+");
if (age >= 12)
return g_strdup ("12+");
if (age >= 6)
return g_strdup ("6+");
return g_strdup ("0+");
}
if (system == GS_CONTENT_RATING_SYSTEM_MDA) {
if (age >= 18)
return g_strdup ("M18");
if (age >= 16)
return g_strdup ("ADV");
return get_esrb_string ("General", _("General"));
}
if (system == GS_CONTENT_RATING_SYSTEM_GRAC) {
if (age >= 18)
return g_strdup ("18");
if (age >= 15)
return g_strdup ("15");
if (age >= 12)
return g_strdup ("12");
return get_esrb_string ("ALL", _("ALL"));
}
if (system == GS_CONTENT_RATING_SYSTEM_ESRB) {
if (age >= 18)
return get_esrb_string ("Adults Only", _("Adults Only"));
if (age >= 17)
return get_esrb_string ("Mature", _("Mature"));
if (age >= 13)
return get_esrb_string ("Teen", _("Teen"));
if (age >= 10)
return get_esrb_string ("Everyone 10+", _("Everyone 10+"));
if (age >= 6)
return get_esrb_string ("Everyone", _("Everyone"));
return get_esrb_string ("Early Childhood", _("Early Childhood"));
}
/* IARC = everything else */
if (age >= 18)
return g_strdup ("18+");
if (age >= 16)
return g_strdup ("16+");
if (age >= 12)
return g_strdup ("12+");
if (age >= 7)
return g_strdup ("7+");
if (age >= 3)
return g_strdup ("3+");
return NULL;
}
/*
* parse_locale:
* @locale: (transfer full): a locale to parse
* @language_out: (out) (optional) (nullable): return location for the parsed
* language, or %NULL to ignore
* @territory_out: (out) (optional) (nullable): return location for the parsed
* territory, or %NULL to ignore
* @codeset_out: (out) (optional) (nullable): return location for the parsed
* codeset, or %NULL to ignore
* @modifier_out: (out) (optional) (nullable): return location for the parsed
* modifier, or %NULL to ignore
*
* Parse @locale as a locale string of the form
* `language[_territory][.codeset][@modifier]` see `man 3 setlocale` for
* details.
*
* On success, %TRUE will be returned, and the components of the locale will be
* returned in the given addresses, with each component not including any
* separators. Otherwise, %FALSE will be returned and the components will be set
* to %NULL.
*
* @locale is modified, and any returned non-%NULL pointers will point inside
* it.
*
* Returns: %TRUE on success, %FALSE otherwise
*/
static gboolean
parse_locale (gchar *locale /* (transfer full) */,
const gchar **language_out,
const gchar **territory_out,
const gchar **codeset_out,
const gchar **modifier_out)
{
gchar *separator;
const gchar *language = NULL, *territory = NULL, *codeset = NULL, *modifier = NULL;
separator = strrchr (locale, '@');
if (separator != NULL) {
modifier = separator + 1;
*separator = '\0';
}
separator = strrchr (locale, '.');
if (separator != NULL) {
codeset = separator + 1;
*separator = '\0';
}
separator = strrchr (locale, '_');
if (separator != NULL) {
territory = separator + 1;
*separator = '\0';
}
language = locale;
/* Parse failure? */
if (*language == '\0') {
language = NULL;
territory = NULL;
codeset = NULL;
modifier = NULL;
}
if (language_out != NULL)
*language_out = language;
if (territory_out != NULL)
*territory_out = territory;
if (codeset_out != NULL)
*codeset_out = codeset;
if (modifier_out != NULL)
*modifier_out = modifier;
return (language != NULL);
}
/* data obtained from https://en.wikipedia.org/wiki/Video_game_rating_system */
GsContentRatingSystem
gs_utils_content_rating_system_from_locale (const gchar *locale)
{
g_autofree gchar *locale_copy = g_strdup (locale);
const gchar *territory;
/* Default to IARC for locales which cant be parsed. */
if (!parse_locale (locale_copy, NULL, &territory, NULL, NULL))
return GS_CONTENT_RATING_SYSTEM_IARC;
/* Argentina */
if (g_strcmp0 (territory, "AR") == 0)
return GS_CONTENT_RATING_SYSTEM_INCAA;
/* Australia */
if (g_strcmp0 (territory, "AU") == 0)
return GS_CONTENT_RATING_SYSTEM_ACB;
/* Brazil */
if (g_strcmp0 (territory, "BR") == 0)
return GS_CONTENT_RATING_SYSTEM_DJCTQ;
/* Taiwan */
if (g_strcmp0 (territory, "TW") == 0)
return GS_CONTENT_RATING_SYSTEM_GSRR;
/* Europe (but not Finland or Germany), India, Israel,
* Pakistan, Quebec, South Africa */
if ((g_strcmp0 (territory, "GB") == 0) ||
g_strcmp0 (territory, "AL") == 0 ||
g_strcmp0 (territory, "AD") == 0 ||
g_strcmp0 (territory, "AM") == 0 ||
g_strcmp0 (territory, "AT") == 0 ||
g_strcmp0 (territory, "AZ") == 0 ||
g_strcmp0 (territory, "BY") == 0 ||
g_strcmp0 (territory, "BE") == 0 ||
g_strcmp0 (territory, "BA") == 0 ||
g_strcmp0 (territory, "BG") == 0 ||
g_strcmp0 (territory, "HR") == 0 ||
g_strcmp0 (territory, "CY") == 0 ||
g_strcmp0 (territory, "CZ") == 0 ||
g_strcmp0 (territory, "DK") == 0 ||
g_strcmp0 (territory, "EE") == 0 ||
g_strcmp0 (territory, "FR") == 0 ||
g_strcmp0 (territory, "GE") == 0 ||
g_strcmp0 (territory, "GR") == 0 ||
g_strcmp0 (territory, "HU") == 0 ||
g_strcmp0 (territory, "IS") == 0 ||
g_strcmp0 (territory, "IT") == 0 ||
g_strcmp0 (territory, "LZ") == 0 ||
g_strcmp0 (territory, "XK") == 0 ||
g_strcmp0 (territory, "LV") == 0 ||
g_strcmp0 (territory, "FL") == 0 ||
g_strcmp0 (territory, "LU") == 0 ||
g_strcmp0 (territory, "LT") == 0 ||
g_strcmp0 (territory, "MK") == 0 ||
g_strcmp0 (territory, "MT") == 0 ||
g_strcmp0 (territory, "MD") == 0 ||
g_strcmp0 (territory, "MC") == 0 ||
g_strcmp0 (territory, "ME") == 0 ||
g_strcmp0 (territory, "NL") == 0 ||
g_strcmp0 (territory, "NO") == 0 ||
g_strcmp0 (territory, "PL") == 0 ||
g_strcmp0 (territory, "PT") == 0 ||
g_strcmp0 (territory, "RO") == 0 ||
g_strcmp0 (territory, "SM") == 0 ||
g_strcmp0 (territory, "RS") == 0 ||
g_strcmp0 (territory, "SK") == 0 ||
g_strcmp0 (territory, "SI") == 0 ||
g_strcmp0 (territory, "ES") == 0 ||
g_strcmp0 (territory, "SE") == 0 ||
g_strcmp0 (territory, "CH") == 0 ||
g_strcmp0 (territory, "TR") == 0 ||
g_strcmp0 (territory, "UA") == 0 ||
g_strcmp0 (territory, "VA") == 0 ||
g_strcmp0 (territory, "IN") == 0 ||
g_strcmp0 (territory, "IL") == 0 ||
g_strcmp0 (territory, "PK") == 0 ||
g_strcmp0 (territory, "ZA") == 0)
return GS_CONTENT_RATING_SYSTEM_PEGI;
/* Finland */
if (g_strcmp0 (territory, "FI") == 0)
return GS_CONTENT_RATING_SYSTEM_KAVI;
/* Germany */
if (g_strcmp0 (territory, "DE") == 0)
return GS_CONTENT_RATING_SYSTEM_USK;
/* Iran */
if (g_strcmp0 (territory, "IR") == 0)
return GS_CONTENT_RATING_SYSTEM_ESRA;
/* Japan */
if (g_strcmp0 (territory, "JP") == 0)
return GS_CONTENT_RATING_SYSTEM_CERO;
/* New Zealand */
if (g_strcmp0 (territory, "NZ") == 0)
return GS_CONTENT_RATING_SYSTEM_OFLCNZ;
/* Russia: Content rating law */
if (g_strcmp0 (territory, "RU") == 0)
return GS_CONTENT_RATING_SYSTEM_RUSSIA;
/* Singapore */
if (g_strcmp0 (territory, "SQ") == 0)
return GS_CONTENT_RATING_SYSTEM_MDA;
/* South Korea */
if (g_strcmp0 (territory, "KR") == 0)
return GS_CONTENT_RATING_SYSTEM_GRAC;
/* USA, Canada, Mexico */
if ((g_strcmp0 (territory, "US") == 0) ||
g_strcmp0 (territory, "CA") == 0 ||
g_strcmp0 (territory, "MX") == 0)
return GS_CONTENT_RATING_SYSTEM_ESRB;
/* everything else is IARC */
return GS_CONTENT_RATING_SYSTEM_IARC;
}
static const gchar *content_rating_strings[GS_CONTENT_RATING_SYSTEM_LAST][7] = {
{ "3+", "7+", "12+", "16+", "18+", NULL }, /* GS_CONTENT_RATING_SYSTEM_UNKNOWN */
{ "ATP", "+13", "+18", NULL }, /* GS_CONTENT_RATING_SYSTEM_INCAA */
{ "PG", "MA15+", "R18+", NULL }, /* GS_CONTENT_RATING_SYSTEM_ACB */
{ "L", "10", "12", "14", "16", "18", NULL }, /* GS_CONTENT_RATING_SYSTEM_DJCTQ */
{ "普通", "保護", "輔12", "輔15", "限制", NULL }, /* GS_CONTENT_RATING_SYSTEM_GSRR */
{ "3", "7", "12", "16", "18", NULL }, /* GS_CONTENT_RATING_SYSTEM_PEGI */
{ "3+", "7+", "12+", "16+", "18+", NULL }, /* GS_CONTENT_RATING_SYSTEM_KAVI */
{ "0", "6", "12", "16", "18", NULL}, /* GS_CONTENT_RATING_SYSTEM_USK */
{ "+3", "+7", "+12", "+15", "+18", NULL }, /* GS_CONTENT_RATING_SYSTEM_ESRA */
{ "A", "B", "C", "D", "Z", NULL }, /* GS_CONTENT_RATING_SYSTEM_CERO */
{ "G", "R13", "R15", "R16", "R18", NULL }, /* GS_CONTENT_RATING_SYSTEM_OFLCNZ */
{ "0+", "6+", "12+", "16+", "18+", NULL }, /* GS_CONTENT_RATING_SYSTEM_RUSSIA */
{ "General", "ADV", "M18", NULL }, /* GS_CONTENT_RATING_SYSTEM_MDA */
{ "ALL", "12", "15", "18", NULL }, /* GS_CONTENT_RATING_SYSTEM_GRAC */
{ "Early Childhood", "Everyone", "Everyone 10+", "Teen", "Mature", "Adults Only", NULL }, /* GS_CONTENT_RATING_SYSTEM_ESRB */
{ "3+", "7+", "12+", "16+", "18+", NULL }, /* GS_CONTENT_RATING_SYSTEM_IARC */
};
gchar **
gs_utils_content_rating_get_values (GsContentRatingSystem system)
{
g_return_val_if_fail ((int) system < GS_CONTENT_RATING_SYSTEM_LAST, NULL);
/* IARC is the fallback for everything */
if (system == GS_CONTENT_RATING_SYSTEM_UNKNOWN)
system = GS_CONTENT_RATING_SYSTEM_IARC;
/* ESRB is special as it requires localised suffixes */
if (system == GS_CONTENT_RATING_SYSTEM_ESRB) {
g_auto(GStrv) esrb_ages = g_new0 (gchar *, 7);
esrb_ages[0] = get_esrb_string (content_rating_strings[system][0], _("Early Childhood"));
esrb_ages[1] = get_esrb_string (content_rating_strings[system][1], _("Everyone"));
esrb_ages[2] = get_esrb_string (content_rating_strings[system][2], _("Everyone 10+"));
esrb_ages[3] = get_esrb_string (content_rating_strings[system][3], _("Teen"));
esrb_ages[4] = get_esrb_string (content_rating_strings[system][4], _("Mature"));
esrb_ages[5] = get_esrb_string (content_rating_strings[system][5], _("Adults Only"));
esrb_ages[6] = NULL;
return g_steal_pointer (&esrb_ages);
}
return g_strdupv ((gchar **) content_rating_strings[system]);
}
static guint content_rating_ages[GS_CONTENT_RATING_SYSTEM_LAST][7] = {
{ 3, 7, 12, 16, 18 }, /* GS_CONTENT_RATING_SYSTEM_UNKNOWN */
{ 0, 13, 18 }, /* GS_CONTENT_RATING_SYSTEM_INCAA */
{ 0, 15, 18 }, /* GS_CONTENT_RATING_SYSTEM_ACB */
{ 0, 10, 12, 14, 16, 18 }, /* GS_CONTENT_RATING_SYSTEM_DJCTQ */
{ 0, 6, 12, 15, 18 }, /* GS_CONTENT_RATING_SYSTEM_GSRR */
{ 3, 7, 12, 16, 18 }, /* GS_CONTENT_RATING_SYSTEM_PEGI */
{ 3, 7, 12, 16, 18 }, /* GS_CONTENT_RATING_SYSTEM_KAVI */
{ 0, 6, 12, 16, 18 }, /* GS_CONTENT_RATING_SYSTEM_USK */
{ 3, 7, 12, 15, 18 }, /* GS_CONTENT_RATING_SYSTEM_ESRA */
{ 0, 12, 15, 17, 18 }, /* GS_CONTENT_RATING_SYSTEM_CERO */
{ 0, 13, 15, 16, 18 }, /* GS_CONTENT_RATING_SYSTEM_OFLCNZ */
{ 0, 6, 12, 16, 18 }, /* GS_CONTENT_RATING_SYSTEM_RUSSIA */
{ 0, 16, 18 }, /* GS_CONTENT_RATING_SYSTEM_MDA */
{ 0, 12, 15, 18 }, /* GS_CONTENT_RATING_SYSTEM_GRAC */
{ 0, 6, 10, 13, 17, 18 }, /* GS_CONTENT_RATING_SYSTEM_ESRB */
{ 3, 7, 12, 16, 18 }, /* GS_CONTENT_RATING_SYSTEM_IARC */
};
const guint *
gs_utils_content_rating_get_ages (GsContentRatingSystem system, gsize *length_out)
{
g_return_val_if_fail ((int) system < GS_CONTENT_RATING_SYSTEM_LAST, NULL);
g_return_val_if_fail (length_out != NULL, NULL);
/* IARC is the fallback for everything */
if (system == GS_CONTENT_RATING_SYSTEM_UNKNOWN)
system = GS_CONTENT_RATING_SYSTEM_IARC;
*length_out = g_strv_length ((gchar **) content_rating_strings[system]);
return content_rating_ages[system];
}
typedef enum
{
OARS_1_0,
OARS_1_1,
} OarsVersion;
/* The struct definition below assumes we dont grow more
* #AsContentRating values. */
G_STATIC_ASSERT (AS_CONTENT_RATING_VALUE_LAST == AS_CONTENT_RATING_VALUE_INTENSE + 1);
static const struct {
const gchar *id;
OarsVersion oars_version; /* when the key was first added */
guint csm_age_none; /* for %AS_CONTENT_RATING_VALUE_NONE */
guint csm_age_mild; /* for %AS_CONTENT_RATING_VALUE_MILD */
guint csm_age_moderate; /* for %AS_CONTENT_RATING_VALUE_MODERATE */
guint csm_age_intense; /* for %AS_CONTENT_RATING_VALUE_INTENSE */
} oars_to_csm_mappings[] = {
/* Each @id must only appear once. The set of @csm_age_* values for a
* given @id must be complete and non-decreasing. */
/* v1.0 */
{ "violence-cartoon", OARS_1_0, 0, 3, 4, 6 },
{ "violence-fantasy", OARS_1_0, 0, 3, 7, 8 },
{ "violence-realistic", OARS_1_0, 0, 4, 9, 14 },
{ "violence-bloodshed", OARS_1_0, 0, 9, 11, 18 },
{ "violence-sexual", OARS_1_0, 0, 18, 18, 18 },
{ "drugs-alcohol", OARS_1_0, 0, 11, 13, 16 },
{ "drugs-narcotics", OARS_1_0, 0, 12, 14, 17 },
{ "drugs-tobacco", OARS_1_0, 0, 10, 13, 13 },
{ "sex-nudity", OARS_1_0, 0, 12, 14, 14 },
{ "sex-themes", OARS_1_0, 0, 13, 14, 15 },
{ "language-profanity", OARS_1_0, 0, 8, 11, 14 },
{ "language-humor", OARS_1_0, 0, 3, 8, 14 },
{ "language-discrimination", OARS_1_0, 0, 9, 10, 11 },
{ "money-advertising", OARS_1_0, 0, 7, 8, 10 },
{ "money-gambling", OARS_1_0, 0, 7, 10, 18 },
{ "money-purchasing", OARS_1_0, 0, 12, 14, 15 },
{ "social-chat", OARS_1_0, 0, 4, 10, 13 },
{ "social-audio", OARS_1_0, 0, 15, 15, 15 },
{ "social-contacts", OARS_1_0, 0, 12, 12, 12 },
{ "social-info", OARS_1_0, 0, 0, 13, 13 },
{ "social-location", OARS_1_0, 0, 13, 13, 13 },
/* v1.1 additions */
{ "sex-homosexuality", OARS_1_1, 0, 13, 14, 15 },
{ "sex-prostitution", OARS_1_1, 0, 12, 14, 18 },
{ "sex-adultery", OARS_1_1, 0, 8, 10, 18 },
{ "sex-appearance", OARS_1_1, 0, 10, 10, 15 },
{ "violence-worship", OARS_1_1, 0, 13, 15, 18 },
{ "violence-desecration", OARS_1_1, 0, 13, 15, 18 },
{ "violence-slavery", OARS_1_1, 0, 13, 15, 18 },
};
#endif /* appstream-glib < 0.7.18 */
#if !AS_CHECK_VERSION(0, 7, 18)
/**
* as_content_rating_id_csm_age_to_value:
* @id: the subsection ID e.g. "violence-cartoon"
* @age: the age
*
* Gets the #MctAppFilterOarsValue for a given age.
*
* Returns: the #MctAppFilterOarsValue
**/
MctAppFilterOarsValue
as_content_rating_id_csm_age_to_value (const gchar *id, guint age)
{
for (gsize i = 0; G_N_ELEMENTS (oars_to_csm_mappings); i++) {
if (g_strcmp0 (id, oars_to_csm_mappings[i].id) == 0) {
if (age >= oars_to_csm_mappings[i].csm_age_intense)
return MCT_APP_FILTER_OARS_VALUE_INTENSE;
else if (age >= oars_to_csm_mappings[i].csm_age_moderate)
return MCT_APP_FILTER_OARS_VALUE_MODERATE;
else if (age >= oars_to_csm_mappings[i].csm_age_mild)
return MCT_APP_FILTER_OARS_VALUE_MILD;
else if (age >= oars_to_csm_mappings[i].csm_age_none)
return MCT_APP_FILTER_OARS_VALUE_NONE;
else
return MCT_APP_FILTER_OARS_VALUE_UNKNOWN;
}
}
return MCT_APP_FILTER_OARS_VALUE_UNKNOWN;
}
#endif /* appstream-glib < 0.7.18 */

View File

@ -1,93 +0,0 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
*
* Copyright (C) 2015-2016 Richard Hughes <richard@hughsie.com>
*
* Licensed under the GNU General Public License Version 2
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
G_BEGIN_DECLS
#include <appstream-glib.h>
#include <glib-object.h>
#include <libmalcontent/malcontent.h>
#if AS_CHECK_VERSION(0, 7, 18)
#define GS_CONTENT_RATING_SYSTEM_UNKNOWN AS_CONTENT_RATING_SYSTEM_UNKNOWN
#define GS_CONTENT_RATING_SYSTEM_INCAA AS_CONTENT_RATING_SYSTEM_INCAA
#define GS_CONTENT_RATING_SYSTEM_ACB AS_CONTENT_RATING_SYSTEM_ACB
#define GS_CONTENT_RATING_SYSTEM_DJCTQ AS_CONTENT_RATING_SYSTEM_DJCTQ
#define GS_CONTENT_RATING_SYSTEM_GSRR AS_CONTENT_RATING_SYSTEM_GSRR
#define GS_CONTENT_RATING_SYSTEM_PEGI AS_CONTENT_RATING_SYSTEM_PEGI
#define GS_CONTENT_RATING_SYSTEM_KAVI AS_CONTENT_RATING_SYSTEM_KAVI
#define GS_CONTENT_RATING_SYSTEM_USK AS_CONTENT_RATING_SYSTEM_USK
#define GS_CONTENT_RATING_SYSTEM_ESRA AS_CONTENT_RATING_SYSTEM_ESRA
#define GS_CONTENT_RATING_SYSTEM_CERO AS_CONTENT_RATING_SYSTEM_CERO
#define GS_CONTENT_RATING_SYSTEM_OFLCNZ AS_CONTENT_RATING_SYSTEM_OFLCNZ
#define GS_CONTENT_RATING_SYSTEM_RUSSIA AS_CONTENT_RATING_SYSTEM_RUSSIA
#define GS_CONTENT_RATING_SYSTEM_MDA AS_CONTENT_RATING_SYSTEM_MDA
#define GS_CONTENT_RATING_SYSTEM_GRAC AS_CONTENT_RATING_SYSTEM_GRAC
#define GS_CONTENT_RATING_SYSTEM_ESRB AS_CONTENT_RATING_SYSTEM_ESRB
#define GS_CONTENT_RATING_SYSTEM_IARC AS_CONTENT_RATING_SYSTEM_IARC
#define GS_CONTENT_RATING_SYSTEM_LAST AS_CONTENT_RATING_SYSTEM_LAST
#define GsContentRatingSystem AsContentRatingSystem
#define gs_utils_content_rating_age_to_str as_content_rating_system_format_age
#define gs_utils_content_rating_system_from_locale as_content_rating_system_from_locale
#define gs_content_rating_system_to_str as_content_rating_system_to_string
#define gs_utils_content_rating_get_values as_content_rating_system_get_formatted_ages
#define gs_utils_content_rating_get_ages as_content_rating_system_get_csm_ages
#define as_content_rating_id_csm_age_to_value as_content_rating_attribute_from_csm_age
#else
typedef enum {
GS_CONTENT_RATING_SYSTEM_UNKNOWN,
GS_CONTENT_RATING_SYSTEM_INCAA,
GS_CONTENT_RATING_SYSTEM_ACB,
GS_CONTENT_RATING_SYSTEM_DJCTQ,
GS_CONTENT_RATING_SYSTEM_GSRR,
GS_CONTENT_RATING_SYSTEM_PEGI,
GS_CONTENT_RATING_SYSTEM_KAVI,
GS_CONTENT_RATING_SYSTEM_USK,
GS_CONTENT_RATING_SYSTEM_ESRA,
GS_CONTENT_RATING_SYSTEM_CERO,
GS_CONTENT_RATING_SYSTEM_OFLCNZ,
GS_CONTENT_RATING_SYSTEM_RUSSIA,
GS_CONTENT_RATING_SYSTEM_MDA,
GS_CONTENT_RATING_SYSTEM_GRAC,
GS_CONTENT_RATING_SYSTEM_ESRB,
GS_CONTENT_RATING_SYSTEM_IARC,
/*< private >*/
GS_CONTENT_RATING_SYSTEM_LAST
} GsContentRatingSystem;
gchar *gs_utils_content_rating_age_to_str (GsContentRatingSystem system,
guint age);
GsContentRatingSystem gs_utils_content_rating_system_from_locale (const gchar *locale);
const gchar *gs_content_rating_system_to_str (GsContentRatingSystem system);
gchar **gs_utils_content_rating_get_values (GsContentRatingSystem system);
const guint *gs_utils_content_rating_get_ages (GsContentRatingSystem system, gsize *length_out);
MctAppFilterOarsValue as_content_rating_id_csm_age_to_value (const gchar *id, guint age);
#endif /* appstream-glib < 0.7.18 */
#if AS_CHECK_VERSION(0, 7, 15)
#define as_content_rating_id_value_to_csm_age as_content_rating_attribute_to_csm_age
#else
guint as_content_rating_id_value_to_csm_age (const gchar *id, MctAppFilterOarsValue value);
#endif /* appstream-glib < 0.7.15 */
G_END_DECLS

View File

@ -1,4 +1,4 @@
libmalcontent_ui_api_version = '0'
libmalcontent_ui_api_version = '1'
libmalcontent_ui_api_name = 'malcontent-ui-' + libmalcontent_ui_api_version
if not cc.has_function('atexit')
@ -12,7 +12,6 @@ resources = gnome.compile_resources(
)
libmalcontent_ui_sources = [
'gs-content-rating.c',
'restrict-applications-dialog.c',
'restrict-applications-selector.c',
'user-controls.c',
@ -23,20 +22,18 @@ libmalcontent_ui_headers = [
'restrict-applications-selector.h',
'user-controls.h',
]
libmalcontent_ui_private_headers = [
'gs-content-rating.h',
]
libmalcontent_ui_public_deps = [
dependency('accountsservice', version: '>= 0.6.39'),
dependency('gio-2.0', version: '>= 2.44'),
dependency('glib-2.0', version: '>= 2.54.2'),
dependency('gobject-2.0', version: '>= 2.54'),
dependency('gtk+-3.0', version: '>= 3.24'),
gtk_dep,
libadwaita_dep,
libmalcontent_dep,
]
libmalcontent_ui_private_deps = [
dependency('appstream-glib', version: '>= 0.7.15'),
dependency('appstream', version: '>= 0.12.10'),
dependency('flatpak'),
]
@ -44,7 +41,7 @@ libmalcontent_ui_private_deps = [
libmalcontent_ui_include_subdir = join_paths(libmalcontent_ui_api_name, 'libmalcontent-ui')
libmalcontent_ui = library(libmalcontent_ui_api_name,
libmalcontent_ui_sources + libmalcontent_ui_headers + libmalcontent_ui_private_headers,
libmalcontent_ui_sources + libmalcontent_ui_headers,
dependencies: libmalcontent_ui_public_deps + libmalcontent_ui_private_deps,
include_directories: root_inc,
install: true,
@ -72,25 +69,25 @@ pkgconfig.generate(libmalcontent_ui,
)
libmalcontent_ui_gir = gnome.generate_gir(libmalcontent_ui,
sources: libmalcontent_ui_sources + libmalcontent_ui_headers + libmalcontent_ui_private_headers,
sources: libmalcontent_ui_sources + libmalcontent_ui_headers,
nsversion: libmalcontent_ui_api_version,
namespace: 'MalcontentUi',
symbol_prefix: 'mct_',
identifier_prefix: 'Mct',
export_packages: 'libmalcontent-ui',
includes: ['AccountsService-1.0', 'Gio-2.0', 'GObject-2.0', 'Gtk-3.0', libmalcontent_gir[0]],
includes: ['AccountsService-1.0', 'Gio-2.0', 'GObject-2.0', 'Gtk-4.0', 'Adw-1', libmalcontent_gir[0]],
install: true,
dependencies: libmalcontent_ui_dep,
)
xmllint = find_program('xmllint', required: false)
if xmllint.found()
gtk_prefix = dependency('gtk+-3.0').get_pkgconfig_variable('prefix')
gtk_prefix = gtk_dep.get_variable(pkgconfig: 'prefix')
test(
'validate-ui', xmllint,
args: [
'--nonet', '--noblanks', '--noout',
'--relaxng', join_paths(gtk_prefix, 'share', 'gtk-3.0', 'gtkbuilder.rng'),
'--relaxng', join_paths(gtk_prefix, 'share', 'gtk-4.0', 'gtk4builder.rng'),
files(
'restrict-applications-dialog.ui',
'restrict-applications-selector.ui',

View File

@ -26,6 +26,7 @@
#include <glib-object.h>
#include <glib/gi18n-lib.h>
#include <gtk/gtk.h>
#include <adwaita.h>
#include "restrict-applications-dialog.h"
#include "restrict-applications-selector.h"
@ -53,13 +54,20 @@ struct _MctRestrictApplicationsDialog
GtkDialog parent_instance;
MctRestrictApplicationsSelector *selector;
GtkLabel *description;
AdwPreferencesGroup *group;
GtkSearchEntry *search_entry;
MctAppFilter *app_filter; /* (owned) (not nullable) */
gchar *user_display_name; /* (owned) (nullable) */
};
G_DEFINE_TYPE (MctRestrictApplicationsDialog, mct_restrict_applications_dialog, GTK_TYPE_DIALOG)
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)
typedef enum
{
@ -139,6 +147,19 @@ mct_restrict_applications_dialog_dispose (GObject *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
mct_restrict_applications_dialog_class_init (MctRestrictApplicationsDialogClass *klass)
{
@ -150,6 +171,8 @@ mct_restrict_applications_dialog_class_init (MctRestrictApplicationsDialogClass
object_class->set_property = mct_restrict_applications_dialog_set_property;
object_class->dispose = mct_restrict_applications_dialog_dispose;
widget_class->map = mct_restrict_applications_dialog_map;
/**
* MctRestrictApplicationsDialog:app-filter: (not nullable)
*
@ -195,7 +218,16 @@ mct_restrict_applications_dialog_class_init (MctRestrictApplicationsDialogClass
gtk_widget_class_set_template_from_resource (widget_class, "/org/freedesktop/MalcontentUi/ui/restrict-applications-dialog.ui");
gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsDialog, selector);
gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsDialog, description);
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
@ -205,6 +237,8 @@ mct_restrict_applications_dialog_init (MctRestrictApplicationsDialog *self)
g_type_ensure (MCT_TYPE_RESTRICT_APPLICATIONS_SELECTOR);
gtk_widget_init_template (GTK_WIDGET (self));
gtk_search_entry_set_key_capture_widget (self->search_entry, GTK_WIDGET (self));
}
static void
@ -214,15 +248,33 @@ update_description (MctRestrictApplicationsDialog *self)
if (self->user_display_name == NULL)
{
gtk_widget_hide (GTK_WIDGET (self->description));
adw_preferences_group_set_description (self->group, NULL);
return;
}
/* Translators: the placeholder is a users full name */
description = g_strdup_printf (_("Restrict %s from using the following installed applications."),
self->user_display_name);
gtk_label_set_text (self->description, description);
gtk_widget_show (GTK_WIDGET (self->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;
}
/**

View File

@ -24,13 +24,14 @@
#include <glib.h>
#include <glib-object.h>
#include <gtk/gtk.h>
#include <adwaita.h>
#include <libmalcontent/manager.h>
G_BEGIN_DECLS
#define MCT_TYPE_RESTRICT_APPLICATIONS_DIALOG (mct_restrict_applications_dialog_get_type ())
G_DECLARE_FINAL_TYPE (MctRestrictApplicationsDialog, mct_restrict_applications_dialog, MCT, RESTRICT_APPLICATIONS_DIALOG, GtkDialog)
G_DECLARE_FINAL_TYPE (MctRestrictApplicationsDialog, mct_restrict_applications_dialog, MCT, RESTRICT_APPLICATIONS_DIALOG, AdwPreferencesWindow)
MctRestrictApplicationsDialog *mct_restrict_applications_dialog_new (MctAppFilter *app_filter,
const gchar *user_display_name);

View File

@ -2,48 +2,36 @@
<!-- Copyright © 2020 Endless, Inc. -->
<interface domain="malcontent">
<requires lib="gtk+" version="3.12"/>
<template class="MctRestrictApplicationsDialog" parent="GtkDialog">
<template class="MctRestrictApplicationsDialog" parent="AdwPreferencesWindow">
<property name="title" translatable="yes">Restrict Applications</property>
<property name="skip-taskbar-hint">True</property>
<property name="default-width">300</property>
<property name="default-width">500</property>
<property name="default-height">500</property>
<child internal-child="headerbar">
<object class="GtkHeaderBar">
<property name="title" translatable="yes">Restrict Applications</property>
<property name="show-close-button">True</property>
</object>
</child>
<child internal-child="vbox">
<object class="GtkBox">
<property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="margin">18</property>
<property name="spacing">12</property>
<property name="search-enabled">False</property>
<child>
<object class="AdwPreferencesPage">
<child>
<object class="GtkLabel" id="description">
<object class="AdwPreferencesGroup" id="group">
<!-- Translated dynamically: -->
<property name="label">Restrict {username} from using the following installed applications.</property>
<property name="visible">False</property>
<property name="ellipsize">none</property>
<property name="wrap">True</property>
<property name="halign">start</property>
<property name="xalign">0</property>
<property name="hexpand">True</property>
<child internal-child="accessible">
<object class="AtkObject">
<property name="accessible-role">static</property>
<property name="description">Restrict {username} from using the following installed applications.</property>
<child>
<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>
</object>
</child>
<child>
<object class="MctRestrictApplicationsSelector" id="selector">
<property name="visible">True</property>
</object>
<packing>
<property name="expand">True</property>
</packing>
</child>
</object>
</child>
</template>

View File

@ -28,6 +28,7 @@
#include <glib-object.h>
#include <glib/gi18n-lib.h>
#include <gtk/gtk.h>
#include <adwaita.h>
#include <libmalcontent/app-filter.h>
#include "restrict-applications-selector.h"
@ -40,6 +41,7 @@ static void app_info_changed_cb (GAppInfoMonitor *monitor,
static void reload_apps (MctRestrictApplicationsSelector *self);
static GtkWidget *create_row_for_app_cb (gpointer item,
gpointer user_data);
static char *app_info_dup_name (GAppInfo *app_info);
/**
* MctRestrictApplicationsSelector:
@ -53,6 +55,11 @@ static GtkWidget *create_row_for_app_cb (gpointer item,
* #MctAppFilterBuilder using
* 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
*/
struct _MctRestrictApplicationsSelector
@ -62,7 +69,9 @@ struct _MctRestrictApplicationsSelector
GtkListBox *listbox;
GList *cached_apps; /* (nullable) (owned) (element-type GAppInfo) */
GListStore *apps; /* (owned) */
GListStore *apps;
GtkFilterListModel *filtered_apps;
GtkStringFilter *search_filter;
GAppInfoMonitor *app_info_monitor; /* (owned) */
gulong app_info_monitor_changed_id;
GHashTable *blocklisted_apps; /* (owned) (element-type GAppInfo) */
@ -73,6 +82,8 @@ struct _MctRestrictApplicationsSelector
FlatpakInstallation *user_installation; /* (owned) */
GtkCssProvider *css_provider; /* (owned) */
gchar *search; /* (nullable) (owned) */
};
G_DEFINE_TYPE (MctRestrictApplicationsSelector, mct_restrict_applications_selector, GTK_TYPE_BOX)
@ -80,9 +91,10 @@ G_DEFINE_TYPE (MctRestrictApplicationsSelector, mct_restrict_applications_select
typedef enum
{
PROP_APP_FILTER = 1,
PROP_SEARCH,
} MctRestrictApplicationsSelectorProperty;
static GParamSpec *properties[PROP_APP_FILTER + 1];
static GParamSpec *properties[PROP_SEARCH + 1];
enum {
SIGNAL_CHANGED,
@ -123,6 +135,9 @@ mct_restrict_applications_selector_get_property (GObject *object,
case PROP_APP_FILTER:
g_value_set_boxed (value, self->app_filter);
break;
case PROP_SEARCH:
g_value_set_string (value, self->search);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -142,6 +157,9 @@ mct_restrict_applications_selector_set_property (GObject *object,
case PROP_APP_FILTER:
mct_restrict_applications_selector_set_app_filter (self, g_value_get_boxed (value));
break;
case PROP_SEARCH:
mct_restrict_applications_selector_set_search (self, g_value_get_string (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -154,7 +172,6 @@ mct_restrict_applications_selector_dispose (GObject *object)
MctRestrictApplicationsSelector *self = (MctRestrictApplicationsSelector *)object;
g_clear_pointer (&self->blocklisted_apps, g_hash_table_unref);
g_clear_object (&self->apps);
g_clear_list (&self->cached_apps, g_object_unref);
if (self->app_info_monitor != NULL && self->app_info_monitor_changed_id != 0)
@ -167,6 +184,7 @@ mct_restrict_applications_selector_dispose (GObject *object)
g_clear_object (&self->system_installation);
g_clear_object (&self->user_installation);
g_clear_object (&self->css_provider);
g_clear_pointer (&self->search, g_free);
G_OBJECT_CLASS (mct_restrict_applications_selector_parent_class)->dispose (object);
}
@ -201,6 +219,23 @@ mct_restrict_applications_selector_class_init (MctRestrictApplicationsSelectorCl
G_PARAM_STATIC_STRINGS |
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);
/**
@ -222,15 +257,18 @@ 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_bind_template_child (widget_class, MctRestrictApplicationsSelector, listbox);
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
mct_restrict_applications_selector_init (MctRestrictApplicationsSelector *self)
{
gtk_widget_init_template (GTK_WIDGET (self));
self->apps = g_list_store_new (G_TYPE_APP_INFO);
self->cached_apps = NULL;
gtk_widget_init_template (GTK_WIDGET (self));
self->app_info_monitor = g_app_info_monitor_get ();
self->app_info_monitor_changed_id =
@ -238,7 +276,7 @@ mct_restrict_applications_selector_init (MctRestrictApplicationsSelector *self)
(GCallback) app_info_changed_cb, self);
gtk_list_box_bind_model (self->listbox,
G_LIST_MODEL (self->apps),
G_LIST_MODEL (self->filtered_apps),
create_row_for_app_cb,
self,
NULL);
@ -312,9 +350,8 @@ create_row_for_app_cb (gpointer item,
MctRestrictApplicationsSelector *self = MCT_RESTRICT_APPLICATIONS_SELECTOR (user_data);
GAppInfo *app = G_APP_INFO (item);
g_autoptr(GIcon) icon = NULL;
GtkWidget *box, *w;
GtkWidget *row, *w;
const gchar *app_name;
gint size;
GtkStyleContext *context;
app_name = g_app_info_get_name (app);
@ -327,23 +364,15 @@ create_row_for_app_cb (gpointer item,
else
g_object_ref (icon);
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
gtk_container_set_border_width (GTK_CONTAINER (box), 12);
gtk_widget_set_margin_end (box, 12);
row = adw_action_row_new ();
/* Icon */
w = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_DIALOG);
gtk_icon_size_lookup (GTK_ICON_SIZE_DND, &size, NULL);
gtk_image_set_pixel_size (GTK_IMAGE (w), size);
gtk_container_add (GTK_CONTAINER (box), w);
w = gtk_image_new_from_gicon (icon);
gtk_image_set_icon_size (GTK_IMAGE (w), GTK_ICON_SIZE_LARGE);
adw_action_row_add_prefix (ADW_ACTION_ROW (row), w);
/* App name label */
w = g_object_new (GTK_TYPE_LABEL,
"label", app_name,
"hexpand", TRUE,
"xalign", 0.0,
NULL);
gtk_container_add (GTK_CONTAINER (box), w);
adw_preferences_row_set_title (ADW_PREFERENCES_ROW (row), app_name);
/* Switch */
w = g_object_new (GTK_TYPE_SWITCH,
@ -354,16 +383,24 @@ create_row_for_app_cb (gpointer item,
gtk_style_context_add_provider (context,
GTK_STYLE_PROVIDER (self->css_provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION - 1);
gtk_container_add (GTK_CONTAINER (box), w);
adw_action_row_add_suffix (ADW_ACTION_ROW (row), w);
adw_action_row_set_activatable_widget (ADW_ACTION_ROW (row), w);
gtk_widget_show_all (box);
gtk_widget_set_focusable (GTK_WIDGET (row), FALSE);
/* Fetch status from AccountService */
g_object_set_data (G_OBJECT (row), "GtkSwitch", w);
g_object_set_data_full (G_OBJECT (w), "GAppInfo", g_object_ref (app), g_object_unref);
update_listbox_row_switch (self, GTK_SWITCH (w));
g_signal_connect (w, "notify::active", G_CALLBACK (on_switch_active_changed_cb), self);
return box;
return row;
}
static char *
app_info_dup_name (GAppInfo *app_info)
{
return g_strdup (g_app_info_get_name (app_info));
}
static gint
@ -774,25 +811,18 @@ mct_restrict_applications_selector_set_app_filter (MctRestrictApplicationsSelect
self->app_filter = mct_app_filter_ref (app_filter);
/* 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++)
{
GtkListBoxRow *row;
GtkWidget *box, *w;
g_autoptr(GList) children = NULL; /* (element-type GtkWidget) */
GtkWidget *w;
/* Navigate the widget hierarchy set up in create_row_for_app_cb(). */
row = gtk_list_box_get_row_at_index (self->listbox, i);
g_assert (row != NULL && GTK_IS_LIST_BOX_ROW (row));
box = gtk_bin_get_child (GTK_BIN (row));
g_assert (box != NULL && GTK_IS_BOX (box));
children = gtk_container_get_children (GTK_CONTAINER (box));
g_assert (children != NULL);
w = g_list_nth_data (children, 2);
w = g_object_get_data (G_OBJECT (row), "GtkSwitch");
g_assert (w != NULL && GTK_IS_SWITCH (w));
update_listbox_row_switch (self, GTK_SWITCH (w));
@ -800,3 +830,50 @@ mct_restrict_applications_selector_set_app_filter (MctRestrictApplicationsSelect
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,
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

View File

@ -4,29 +4,37 @@
<requires lib="gtk+" version="3.12"/>
<template class="MctRestrictApplicationsSelector" parent="GtkBox">
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<object class="GtkListBox" id="listbox">
<property name="hexpand">True</property>
<property name="hscrollbar-policy">never</property>
<property name="min-content-height">100</property>
<property name="max-content-height">400</property>
<property name="propagate-natural-height">True</property>
<property name="shadow-type">etched-in</property>
<property name="selection-mode">none</property>
<child>
<object class="GtkListBox" id="listbox">
<property name="visible">True</property>
<property name="selection-mode">none</property>
<child type="placeholder">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label" translatable="yes">No applications found to restrict.</property>
</object>
</child>
<child type="placeholder">
<object class="GtkLabel">
<property name="label" translatable="yes">No applications found to restrict.</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
</object>
</child>
<style>
<class name="content"/>
</style>
</object>
</child>
</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>

View File

@ -1,11 +1,11 @@
/* FIXME: This negative variant of a GtkSwitch should probably be
* upstreamed to GTK. See https://gitlab.gnome.org/GNOME/gtk/issues/2470 */
switch:checked.restricts {
background-color: #fffd33;
background-color: @yellow_5;
}
switch:checked.restricts, switch:checked.restricts slider {
border-color: #ffd52b;
border-color: @yellow_3;
}
switch:disabled.restricts {
@ -14,5 +14,5 @@ switch:disabled.restricts {
}
switch:disabled.restricts slider {
border-color: #bfb8b1;
filter: grayscale(100%);
}

View File

@ -22,7 +22,7 @@
#include "config.h"
#include <appstream-glib.h>
#include <appstream.h>
#include <libmalcontent/malcontent.h>
#include <locale.h>
#include <gio/gio.h>
@ -30,7 +30,6 @@
#include <glib/gi18n-lib.h>
#include <strings.h>
#include "gs-content-rating.h"
#include "restrict-applications-dialog.h"
#include "user-controls.h"
@ -74,22 +73,19 @@ static const guint32 oars_disabled_age = (guint32) -1;
*/
struct _MctUserControls
{
GtkGrid parent_instance;
AdwBin parent_instance;
GtkLabel *description_label;
GMenu *age_menu;
GtkSwitch *restrict_software_installation_switch;
GtkLabel *restrict_software_installation_description;
AdwActionRow *restrict_software_installation_row;
GtkSwitch *restrict_web_browsers_switch;
GtkLabel *restrict_web_browsers_description;
GtkButton *oars_button;
GtkLabel *oars_button_label;
GtkPopover *oars_popover;
AdwActionRow *restrict_web_browsers_row;
GtkMenuButton *oars_button;
GtkPopoverMenu *oars_popover;
MctRestrictApplicationsDialog *restrict_applications_dialog;
GtkLabel *restrict_applications_description;
GtkListBoxRow *restrict_applications_row;
GtkListBox *application_usage_permissions_listbox;
GtkListBox *software_installation_permissions_listbox;
AdwActionRow *restrict_applications_row;
GSimpleActionGroup *action_group; /* (owned) */
@ -112,6 +108,7 @@ struct _MctUserControls
ActUserAccountType user_account_type;
gchar *user_locale; /* (nullable) (owned) */
gchar *user_display_name; /* (nullable) (owned) */
gchar *description; /* (nullable) (owned) */
};
static gboolean blocklist_apps_cb (gpointer data);
@ -124,20 +121,12 @@ static void on_restrict_web_browsers_switch_active_changed_cb (GtkSwitch
GParamSpec *pspec,
MctUserControls *self);
static void on_restrict_applications_button_clicked_cb (GtkButton *button,
gpointer user_data);
static void on_restrict_applications_action_activated (GSimpleAction *action,
GVariant *param,
gpointer user_data);
static gboolean on_restrict_applications_dialog_delete_event_cb (GtkWidget *widget,
GdkEvent *event,
gpointer user_data);
static void on_restrict_applications_dialog_response_cb (GtkDialog *dialog,
gint response_id,
gpointer user_data);
static void on_application_usage_permissions_listbox_activated_cb (GtkListBox *list_box,
GtkListBoxRow *row,
gpointer user_data);
static gboolean on_restrict_applications_dialog_close_request_cb (GtkWidget *widget,
gpointer user_data);
static void on_set_age_action_activated (GSimpleAction *action,
GVariant *param,
@ -147,7 +136,7 @@ static void on_permission_allowed_cb (GObject *obj,
GParamSpec *pspec,
gpointer user_data);
G_DEFINE_TYPE (MctUserControls, mct_user_controls, GTK_TYPE_GRID)
G_DEFINE_TYPE (MctUserControls, mct_user_controls, ADW_TYPE_BIN)
typedef enum
{
@ -158,23 +147,25 @@ typedef enum
PROP_USER_LOCALE,
PROP_USER_DISPLAY_NAME,
PROP_DBUS_CONNECTION,
PROP_DESCRIPTION,
} MctUserControlsProperty;
static GParamSpec *properties[PROP_DBUS_CONNECTION + 1];
static GParamSpec *properties[PROP_DESCRIPTION + 1];
static const GActionEntry actions[] = {
{ "set-age", on_set_age_action_activated, "u", NULL, NULL, { 0, }}
{ "set-age", on_set_age_action_activated, "u", NULL, NULL, { 0, }},
{ "restrict-applications", on_restrict_applications_action_activated, NULL, NULL, NULL, { 0, }}
};
/* Auxiliary methods */
static GsContentRatingSystem
static AsContentRatingSystem
get_content_rating_system (MctUserControls *self)
{
if (self->user_locale == NULL)
return GS_CONTENT_RATING_SYSTEM_UNKNOWN;
return AS_CONTENT_RATING_SYSTEM_UNKNOWN;
return gs_utils_content_rating_system_from_locale (self->user_locale);
return as_content_rating_system_from_locale (self->user_locale);
}
static const gchar *
@ -290,7 +281,7 @@ update_restricted_apps (MctUserControls *self)
static void
update_categories_from_language (MctUserControls *self)
{
GsContentRatingSystem rating_system;
AsContentRatingSystem rating_system;
g_auto(GStrv) entries = NULL;
const gchar *rating_system_str;
const guint *ages;
@ -298,12 +289,12 @@ update_categories_from_language (MctUserControls *self)
g_autofree gchar *disabled_action = NULL;
rating_system = get_content_rating_system (self);
rating_system_str = gs_content_rating_system_to_str (rating_system);
rating_system_str = as_content_rating_system_to_string (rating_system);
g_debug ("Using rating system %s", rating_system_str);
entries = gs_utils_content_rating_get_values (rating_system);
ages = gs_utils_content_rating_get_ages (rating_system, &n_ages);
entries = as_content_rating_system_get_formatted_ages (rating_system);
ages = as_content_rating_system_get_csm_ages (rating_system, &n_ages);
/* Fill in the age menu */
g_menu_remove_all (self->age_menu);
@ -357,7 +348,7 @@ G_STATIC_ASSERT ((int) MCT_APP_FILTER_OARS_VALUE_INTENSE == (int) AS_CONTENT_RAT
static void
update_oars_level (MctUserControls *self)
{
GsContentRatingSystem rating_system;
AsContentRatingSystem rating_system;
g_autofree gchar *rating_age_category = NULL;
guint maximum_age, selected_age;
gsize i;
@ -376,7 +367,7 @@ update_oars_level (MctUserControls *self)
oars_value = mct_app_filter_get_oars_value (self->filter, oars_categories[i]);
all_categories_unset &= (oars_value == MCT_APP_FILTER_OARS_VALUE_UNKNOWN);
age = as_content_rating_id_value_to_csm_age (oars_categories[i], (AsContentRatingValue) oars_value);
age = as_content_rating_attribute_to_csm_age (oars_categories[i], (AsContentRatingValue) oars_value);
g_debug ("OARS value for '%s': %s", oars_categories[i], oars_value_to_string (oars_value));
@ -388,7 +379,7 @@ update_oars_level (MctUserControls *self)
all_categories_unset ? "all categories unset" : "some categories set");
rating_system = get_content_rating_system (self);
rating_age_category = gs_utils_content_rating_age_to_str (rating_system, maximum_age);
rating_age_category = as_content_rating_system_format_age (rating_system, maximum_age);
/* Unrestricted? */
if (rating_age_category == NULL || all_categories_unset)
@ -402,7 +393,7 @@ update_oars_level (MctUserControls *self)
selected_age = maximum_age;
}
gtk_label_set_label (self->oars_button_label, rating_age_category);
gtk_menu_button_set_label (self->oars_button, rating_age_category);
self->selected_age = selected_age;
}
@ -473,19 +464,21 @@ update_labels_from_name (MctUserControls *self)
{
g_autofree gchar *l = NULL;
gtk_label_set_markup (self->description_label, self->description);
/* Translators: The placeholder is a users display name. */
l = g_strdup_printf (_("Prevents %s from running web browsers. Limited web content may still be available in other applications."), self->user_display_name);
gtk_label_set_label (self->restrict_web_browsers_description, l);
adw_action_row_set_subtitle (self->restrict_web_browsers_row, l);
g_clear_pointer (&l, g_free);
/* Translators: The placeholder is a users display name. */
l = g_strdup_printf (_("Prevents specified applications from being used by %s."), self->user_display_name);
gtk_label_set_label (self->restrict_applications_description, l);
adw_action_row_set_subtitle (self->restrict_applications_row, l);
g_clear_pointer (&l, g_free);
/* Translators: The placeholder is a users display name. */
l = g_strdup_printf (_("Prevents %s from installing applications."), self->user_display_name);
gtk_label_set_label (self->restrict_software_installation_description, l);
adw_action_row_set_subtitle (self->restrict_software_installation_row, l);
g_clear_pointer (&l, g_free);
}
@ -586,29 +579,29 @@ on_restrict_web_browsers_switch_active_changed_cb (GtkSwitch *s,
}
static void
on_restrict_applications_button_clicked_cb (GtkButton *button,
gpointer user_data)
on_restrict_applications_action_activated (GSimpleAction *action,
GVariant *param,
gpointer user_data)
{
MctUserControls *self = MCT_USER_CONTROLS (user_data);
GtkWidget *toplevel;
GtkRoot *root;
/* Show the restrict applications dialogue modally, making sure to update its
* state first. */
toplevel = gtk_widget_get_toplevel (GTK_WIDGET (self));
if (GTK_IS_WINDOW (toplevel))
root = gtk_widget_get_root (GTK_WIDGET (self));
if (GTK_IS_WINDOW (root))
gtk_window_set_transient_for (GTK_WINDOW (self->restrict_applications_dialog),
GTK_WINDOW (toplevel));
GTK_WINDOW (root));
mct_restrict_applications_dialog_set_user_display_name (self->restrict_applications_dialog, self->user_display_name);
mct_restrict_applications_dialog_set_app_filter (self->restrict_applications_dialog, self->filter);
gtk_widget_show (GTK_WIDGET (self->restrict_applications_dialog));
gtk_window_present (GTK_WINDOW (self->restrict_applications_dialog));
}
static gboolean
on_restrict_applications_dialog_delete_event_cb (GtkWidget *widget,
GdkEvent *event,
gpointer user_data)
on_restrict_applications_dialog_close_request_cb (GtkWidget *widget,
gpointer user_data)
{
MctUserControls *self = MCT_USER_CONTROLS (user_data);
@ -623,33 +616,12 @@ on_restrict_applications_dialog_delete_event_cb (GtkWidget *widget,
return TRUE;
}
static void
on_restrict_applications_dialog_response_cb (GtkDialog *dialog,
gint response_id,
gpointer user_data)
{
MctUserControls *self = MCT_USER_CONTROLS (user_data);
on_restrict_applications_dialog_delete_event_cb (GTK_WIDGET (dialog), NULL, self);
}
static void
on_application_usage_permissions_listbox_activated_cb (GtkListBox *list_box,
GtkListBoxRow *row,
gpointer user_data)
{
MctUserControls *self = MCT_USER_CONTROLS (user_data);
if (row == self->restrict_applications_row)
on_restrict_applications_button_clicked_cb (NULL, self);
}
static void
on_set_age_action_activated (GSimpleAction *action,
GVariant *param,
gpointer user_data)
{
GsContentRatingSystem rating_system;
AsContentRatingSystem rating_system;
MctUserControls *self;
g_auto(GStrv) entries = NULL;
const guint *ages;
@ -661,18 +633,18 @@ on_set_age_action_activated (GSimpleAction *action,
age = g_variant_get_uint32 (param);
rating_system = get_content_rating_system (self);
entries = gs_utils_content_rating_get_values (rating_system);
ages = gs_utils_content_rating_get_ages (rating_system, &n_ages);
entries = as_content_rating_system_get_formatted_ages (rating_system);
ages = as_content_rating_system_get_csm_ages (rating_system, &n_ages);
/* Update the button */
if (age == oars_disabled_age)
gtk_label_set_label (self->oars_button_label, _("All Ages"));
gtk_menu_button_set_label (self->oars_button, _("All Ages"));
for (i = 0; age != oars_disabled_age && entries[i] != NULL; i++)
{
if (ages[i] == age)
{
gtk_label_set_label (self->oars_button_label, entries[i]);
gtk_menu_button_set_label (self->oars_button, entries[i]);
break;
}
}
@ -689,53 +661,6 @@ on_set_age_action_activated (GSimpleAction *action,
schedule_update_blocklisted_apps (self);
}
static void
list_box_header_func (GtkListBoxRow *row,
GtkListBoxRow *before,
gpointer user_data)
{
GtkWidget *current;
if (before == NULL)
{
gtk_list_box_row_set_header (row, NULL);
return;
}
current = gtk_list_box_row_get_header (row);
if (current == NULL)
{
current = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
gtk_widget_show (current);
gtk_list_box_row_set_header (row, current);
}
}
static gboolean
on_keynav_failed (GtkWidget *listbox,
GtkDirectionType direction,
gpointer user_data)
{
MctUserControls *self = MCT_USER_CONTROLS (user_data);
GtkWidget *new_widget = NULL;
/* There are currently two listboxes, so dont over-complicate this function. */
if (listbox == GTK_WIDGET (self->application_usage_permissions_listbox) &&
direction == GTK_DIR_DOWN)
new_widget = GTK_WIDGET (self->software_installation_permissions_listbox);
else if (listbox == GTK_WIDGET (self->software_installation_permissions_listbox) &&
direction == GTK_DIR_UP)
new_widget = GTK_WIDGET (self->application_usage_permissions_listbox);
if (new_widget != NULL)
{
gtk_widget_child_focus (new_widget, direction);
return TRUE;
}
return FALSE;
}
/* GObject overrides */
static void
@ -777,6 +702,7 @@ mct_user_controls_finalize (GObject *object)
g_clear_object (&self->user);
g_clear_pointer (&self->user_locale, 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)
{
@ -851,6 +777,10 @@ mct_user_controls_get_property (GObject *object,
g_value_set_object (value, self->dbus_connection);
break;
case PROP_DESCRIPTION:
g_value_set_string (value, self->description);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@ -896,6 +826,10 @@ mct_user_controls_set_property (GObject *object,
self->dbus_connection = g_value_dup_object (value);
break;
case PROP_DESCRIPTION:
mct_user_controls_set_description (self, g_value_get_string (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@ -1014,6 +948,25 @@ mct_user_controls_class_init (MctUserControlsClass *klass)
G_PARAM_STATIC_STRINGS |
G_PARAM_EXPLICIT_NOTIFY);
/**
* MctUserControls:description: (nullable)
*
* The description for the currently selected user account, or %NULL if no
* user is selected.
*
* If set, it must be valid UTF-8 and non-empty.
*
* Since: 0.11.0
*/
properties[PROP_DESCRIPTION] =
g_param_spec_string ("description",
"Description",
"The description for the currently selected user account, or %NULL if no user is selected.",
NULL,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS |
G_PARAM_EXPLICIT_NOTIFY);
/**
* MctUserControls:dbus-connection: (not nullable)
*
@ -1037,32 +990,24 @@ mct_user_controls_class_init (MctUserControlsClass *klass)
gtk_widget_class_set_template_from_resource (widget_class, "/org/freedesktop/MalcontentUi/ui/user-controls.ui");
gtk_widget_class_bind_template_child (widget_class, MctUserControls, age_menu);
gtk_widget_class_bind_template_child (widget_class, MctUserControls, description_label);
gtk_widget_class_bind_template_child (widget_class, MctUserControls, restrict_software_installation_switch);
gtk_widget_class_bind_template_child (widget_class, MctUserControls, restrict_software_installation_description);
gtk_widget_class_bind_template_child (widget_class, MctUserControls, restrict_software_installation_row);
gtk_widget_class_bind_template_child (widget_class, MctUserControls, restrict_web_browsers_switch);
gtk_widget_class_bind_template_child (widget_class, MctUserControls, restrict_web_browsers_description);
gtk_widget_class_bind_template_child (widget_class, MctUserControls, restrict_web_browsers_row);
gtk_widget_class_bind_template_child (widget_class, MctUserControls, oars_button);
gtk_widget_class_bind_template_child (widget_class, MctUserControls, oars_button_label);
gtk_widget_class_bind_template_child (widget_class, MctUserControls, oars_popover);
gtk_widget_class_bind_template_child (widget_class, MctUserControls, restrict_applications_dialog);
gtk_widget_class_bind_template_child (widget_class, MctUserControls, restrict_applications_description);
gtk_widget_class_bind_template_child (widget_class, MctUserControls, restrict_applications_row);
gtk_widget_class_bind_template_child (widget_class, MctUserControls, application_usage_permissions_listbox);
gtk_widget_class_bind_template_child (widget_class, MctUserControls, software_installation_permissions_listbox);
gtk_widget_class_bind_template_callback (widget_class, on_restrict_installation_switch_active_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, on_restrict_web_browsers_switch_active_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, on_restrict_applications_button_clicked_cb);
gtk_widget_class_bind_template_callback (widget_class, on_restrict_applications_dialog_delete_event_cb);
gtk_widget_class_bind_template_callback (widget_class, on_restrict_applications_dialog_response_cb);
gtk_widget_class_bind_template_callback (widget_class, on_application_usage_permissions_listbox_activated_cb);
gtk_widget_class_bind_template_callback (widget_class, on_keynav_failed);
gtk_widget_class_bind_template_callback (widget_class, on_restrict_applications_dialog_close_request_cb);
}
static void
mct_user_controls_init (MctUserControls *self)
{
g_autoptr(GError) error = NULL;
g_autoptr(GtkCssProvider) provider = NULL;
/* Ensure the types used in the UI are registered. */
@ -1073,9 +1018,9 @@ mct_user_controls_init (MctUserControls *self)
provider = gtk_css_provider_new ();
gtk_css_provider_load_from_resource (provider,
"/org/freedesktop/MalcontentUi/ui/restricts-switch.css");
gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
GTK_STYLE_PROVIDER (provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION - 1);
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
GTK_STYLE_PROVIDER (provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION - 1);
self->selected_age = (guint) -1;
@ -1091,13 +1036,7 @@ mct_user_controls_init (MctUserControls *self)
"permissions",
G_ACTION_GROUP (self->action_group));
gtk_popover_bind_model (self->oars_popover, G_MENU_MODEL (self->age_menu), NULL);
/* Automatically add separators between rows. */
gtk_list_box_set_header_func (self->application_usage_permissions_listbox,
list_box_header_func, NULL, NULL);
gtk_list_box_set_header_func (self->software_installation_permissions_listbox,
list_box_header_func, NULL, NULL);
gtk_popover_menu_set_menu_model (self->oars_popover, G_MENU_MODEL (self->age_menu));
}
/**
@ -1462,6 +1401,38 @@ mct_user_controls_set_user_display_name (MctUserControls *self,
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_USER_DISPLAY_NAME]);
}
/**
* mct_user_controls_set_description:
* @self: an #MctUserControls
* @description: (nullable) (transfer none): the description shown
* above the controls, or %NULL if none.
*
* Set the value of #MctUserControls:description.
*
* Since: 0.11.0
*/
void
mct_user_controls_set_description (MctUserControls *self,
const gchar *description)
{
g_return_if_fail (MCT_IS_USER_CONTROLS (self));
g_return_if_fail (description != NULL);
/* If we have pending unsaved changes from the previous user, force them to be
* saved first. */
flush_update_blocklisted_apps (self);
if (g_strcmp0 (self->description, description) == 0)
return;
g_clear_pointer (&self->description, g_free);
self->description = g_strdup (description);
setup_parental_control_settings (self);
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_DESCRIPTION]);
}
/**
* mct_user_controls_build_app_filter:
* @self: an #MctUserControls
@ -1504,7 +1475,7 @@ mct_user_controls_build_app_filter (MctUserControls *self,
const gchar *oars_category;
oars_category = oars_categories[i];
oars_value = (MctAppFilterOarsValue) as_content_rating_id_csm_age_to_value (oars_category, self->selected_age);
oars_value = (MctAppFilterOarsValue) as_content_rating_attribute_from_csm_age (oars_category, self->selected_age);
g_debug ("\t\t → %s: %s", oars_category, oars_value_to_string (oars_value));

View File

@ -27,13 +27,14 @@
#include <glib.h>
#include <glib-object.h>
#include <gtk/gtk.h>
#include <adwaita.h>
#include <libmalcontent/malcontent.h>
G_BEGIN_DECLS
#define MCT_TYPE_USER_CONTROLS (mct_user_controls_get_type())
G_DECLARE_FINAL_TYPE (MctUserControls, mct_user_controls, MCT, USER_CONTROLS, GtkGrid)
G_DECLARE_FINAL_TYPE (MctUserControls, mct_user_controls, MCT, USER_CONTROLS, AdwBin)
ActUser *mct_user_controls_get_user (MctUserControls *self);
void mct_user_controls_set_user (MctUserControls *self,
@ -59,6 +60,9 @@ const gchar *mct_user_controls_get_user_display_name (MctUserControls *self);
void mct_user_controls_set_user_display_name (MctUserControls *self,
const gchar *user_display_name);
void mct_user_controls_set_description (MctUserControls *self,
const gchar *description);
void mct_user_controls_build_app_filter (MctUserControls *self,
MctAppFilterBuilder *builder);

View File

@ -2,491 +2,133 @@
<!-- Copyright © 2018, 2019, 2020 Endless, Inc. -->
<interface domain="malcontent">
<requires lib="gtk+" version="3.12"/>
<template class="MctUserControls" parent="GtkGrid">
<property name="visible">True</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<property name="valign">start</property>
<!-- Application Usage Restrictions -->
<template class="MctUserControls" parent="AdwBin">
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="xalign">0.0</property>
<property name="label" translatable="yes">Application Usage Restrictions</property>
<attributes>
<attribute name="weight" value="bold" />
</attributes>
</object>
<packing>
<property name="top-attach">0</property>
<property name="left-attach">0</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="label_xalign">0</property>
<property name="shadow_type">in</property>
<object class="GtkBox">
<property name="spacing">24</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkListBox" id="application_usage_permissions_listbox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="selection_mode">none</property>
<property name="activate-on-single-click">True</property>
<signal name="row-activated" handler="on_application_usage_permissions_listbox_activated_cb" object="MctUserControls" swapped="no" />
<signal name="keynav-failed" handler="on_keynav_failed" object="MctUserControls" swapped="no" />
<object class="AdwPreferencesGroup">
<child>
<object class="GtkListBoxRow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="activatable">False</property>
<property name="selectable">False</property>
<object class="GtkLabel" id="description_label">
<property name="wrap">True</property>
<property name="xalign">0.0</property>
<property name="yalign">0.0</property>
</object>
</child>
</object>
</child>
<!-- Application Usage Restrictions -->
<child>
<object class="AdwPreferencesGroup">
<property name="title" translatable="yes">Application Usage Restrictions</property>
<child>
<object class="AdwActionRow" id="restrict_web_browsers_row">
<property name="title" translatable="yes">Restrict _Web Browsers</property>
<property name="use_underline">True</property>
<property name="activatable_widget">restrict_web_browsers_switch</property>
<!-- Set dynamically from user-controls.c: -->
<property name="subtitle">Prevents {username} from running web browsers. Limited web content may still be available in other applications.</property>
<property name="subtitle_lines">0</property>
<property name="focusable">False</property>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<object class="GtkSwitch" id="restrict_web_browsers_switch">
<property name="halign">end</property>
<property name="valign">center</property>
<property name="margin-left">12</property>
<property name="margin-right">12</property>
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="row-spacing">4</property>
<property name="column-spacing">4</property>
<child>
<object class="GtkLabel" id="restrict_web_browsers_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="ellipsize">end</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Restrict _Web Browsers</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">restrict_web_browsers_switch</property>
<accessibility>
<relation target="restrict_web_browsers_switch" type="label-for"/>
</accessibility>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="restrict_web_browsers_description">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="ellipsize">none</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
<!-- Set dynamically from user-controls.c: -->
<property name="label">Prevents {username} from running web browsers. Limited web content may still be available in other applications.</property>
<attributes>
<attribute name="scale" value="0.88"/>
</attributes>
<style>
<class name="dim-label" />
</style>
<accessibility>
<relation target="restrict_web_browsers_switch" type="description-for"/>
</accessibility>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="restrict_web_browsers_switch">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property>
<signal name="notify::active" handler="on_restrict_web_browsers_switch_active_changed_cb" object="MctUserControls" swapped="no" />
<style>
<class name="restricts" />
</style>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">0</property>
<property name="height">2</property>
</packing>
</child>
<signal name="notify::active" handler="on_restrict_web_browsers_switch_active_changed_cb" object="MctUserControls" swapped="no" />
<style>
<class name="restricts" />
</style>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="restrict_applications_row">
<property name="visible">True</property>
<property name="can_focus">True</property>
<object class="AdwActionRow" id="restrict_applications_row">
<property name="activatable">True</property>
<property name="selectable">False</property>
<property name="title" translatable="yes">_Restrict Applications</property>
<property name="use_underline">True</property>
<!-- Set dynamically from user-controls.c: -->
<property name="subtitle">Prevents specified applications from being used by {username}.</property>
<property name="subtitle_lines">0</property>
<property name="action-name">permissions.restrict-applications</property>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">center</property>
<property name="margin-left">12</property>
<property name="margin-right">12</property>
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="row-spacing">4</property>
<property name="column-spacing">4</property>
<child>
<object class="GtkLabel" id="restrict_applications_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="ellipsize">end</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">_Restrict Applications</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">restrict_applications_button</property>
<accessibility>
<relation target="restrict_applications_button" type="label-for"/>
</accessibility>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="restrict_applications_description">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="ellipsize">none</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
<!-- Set dynamically from user-controls.c: -->
<property name="label">Prevents specified applications from being used by {username}.</property>
<attributes>
<attribute name="scale" value="0.88"/>
</attributes>
<style>
<class name="dim-label" />
</style>
<accessibility>
<relation target="restrict_applications_button" type="description-for"/>
</accessibility>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="restrict_applications_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="relief">none</property>
<signal name="clicked" handler="on_restrict_applications_button_clicked_cb" object="MctUserControls" swapped="no" />
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon-name">go-next-symbolic</property>
<property name="icon-size">4</property><!-- GTK_ICON_SIZE_BUTTON -->
</object>
</child>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">0</property>
<property name="height">2</property>
</packing>
</child>
<object class="GtkImage">
<property name="icon-name">go-next-symbolic</property>
</object>
</child>
</object>
</child>
<style>
<class name="content"/>
</style>
</object>
</child>
</object>
<packing>
<property name="top-attach">1</property>
<property name="left-attach">0</property>
</packing>
</child>
<!-- Software Installation Restrictions -->
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="margin-top">12</property>
<property name="xalign">0.0</property>
<property name="label" translatable="yes">Software Installation Restrictions</property>
<attributes>
<attribute name="weight" value="bold" />
</attributes>
</object>
<packing>
<property name="top-attach">2</property>
<property name="left-attach">0</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="label_xalign">0</property>
<property name="shadow_type">in</property>
<!-- Software Installation Restrictions -->
<child>
<object class="GtkListBox" id="software_installation_permissions_listbox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="selection_mode">none</property>
<property name="activate_on_single_click">False</property>
<signal name="keynav-failed" handler="on_keynav_failed" object="MctUserControls" swapped="no" />
<object class="AdwPreferencesGroup">
<property name="title" translatable="yes">Software Installation Restrictions</property>
<child>
<object class="GtkListBoxRow">
<object class="AdwActionRow" id="restrict_software_installation_row">
<property name="visible" bind-source="restrict_software_installation_switch" bind-property="visible" bind-flags="default|sync-create" />
<property name="can_focus">True</property>
<property name="activatable">False</property>
<property name="selectable">False</property>
<property name="title" translatable="yes">Restrict Application _Installation</property>
<property name="use_underline">True</property>
<property name="activatable_widget">restrict_software_installation_switch</property>
<!-- Set dynamically from user-controls.c: -->
<property name="subtitle">Prevents {username} from installing applications.</property>
<property name="subtitle_lines">0</property>
<property name="focusable">False</property>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<object class="GtkSwitch" id="restrict_software_installation_switch">
<property name="halign">end</property>
<property name="valign">center</property>
<property name="margin-left">12</property>
<property name="margin-right">12</property>
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="row-spacing">4</property>
<property name="column-spacing">4</property>
<child>
<object class="GtkLabel" id="restrict_software_installation_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="ellipsize">end</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Restrict Application _Installation</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">restrict_software_installation_switch</property>
<accessibility>
<relation target="restrict_software_installation_switch" type="label-for"/>
</accessibility>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="restrict_software_installation_description">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="ellipsize">none</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
<!-- Set dynamically from user-controls.c: -->
<property name="label">Prevents {username} from installing applications.</property>
<attributes>
<attribute name="scale" value="0.88"/>
</attributes>
<style>
<class name="dim-label" />
</style>
<accessibility>
<relation target="restrict_software_installation_switch" type="description-for"/>
</accessibility>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="restrict_software_installation_switch">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property>
<signal name="notify::active" handler="on_restrict_installation_switch_active_changed_cb" object="MctUserControls" swapped="no" />
<style>
<class name="restricts" />
</style>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">0</property>
<property name="height">2</property>
</packing>
</child>
<signal name="notify::active" handler="on_restrict_installation_switch_active_changed_cb" object="MctUserControls" swapped="no" />
<style>
<class name="restricts" />
</style>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="activatable">False</property>
<property name="selectable">False</property>
<object class="AdwActionRow">
<property name="title" translatable="yes">Application _Suitability</property>
<property name="use_underline">True</property>
<property name="activatable_widget">oars_button</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="focusable">False</property>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<object class="GtkMenuButton" id="oars_button">
<property name="halign">end</property>
<property name="valign">center</property>
<property name="margin-left">12</property>
<property name="margin-right">12</property>
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="row-spacing">4</property>
<property name="column-spacing">4</property>
<child>
<object class="GtkLabel" id="oars_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="ellipsize">end</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Application _Suitability</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">oars_button</property>
<accessibility>
<relation target="oars_button" type="label-for"/>
<relation target="oars_button" type="flows-to"/>
</accessibility>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="oars_description">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="ellipsize">none</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Restricts browsing or installation of applications to applications suitable for certain ages or above.</property>
<attributes>
<attribute name="scale" value="0.88"/>
</attributes>
<style>
<class name="dim-label" />
</style>
<accessibility>
<relation target="oars_button" type="description-for"/>
</accessibility>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkMenuButton" id="oars_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="direction">right</property>
<property name="popover">oars_popover</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">horizontal</property>
<child>
<object class="GtkLabel" id="oars_button_label">
<property name="visible">True</property>
<property name="label"></property>
<property name="expand">True</property>
<property name="halign">start</property>
<property name="xalign">0.0</property>
</object>
</child>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon-name">pan-down-symbolic</property>
<property name="icon-size">4</property><!-- GTK_ICON_SIZE_BUTTON -->
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">0</property>
<property name="height">2</property>
</packing>
</child>
<property name="popover">oars_popover</property>
<property name="always-show-arrow">True</property>
</object>
</child>
</object>
</child>
<style>
<class name="content"/>
</style>
</object>
</child>
</object>
<packing>
<property name="top-attach">3</property>
<property name="left-attach">0</property>
</packing>
</child>
</template>
<object class="GtkPopoverMenu" id="oars_popover">
<accessibility>
<relation target="oars_button" type="popup-for"/>
</accessibility>
</object>
<object class="GtkPopoverMenu" id="oars_popover" />
<menu id="age_menu" />
<object class="GtkSizeGroup">
<property name="mode">horizontal</property>
<widgets>
<widget name="oars_button" />
<widget name="oars_popover" />
</widgets>
</object>
<object class="GtkSizeGroup">
<property name="mode">horizontal</property>
<widgets>
<widget name="restrict_web_browsers_label" />
<widget name="restrict_web_browsers_description" />
<widget name="restrict_applications_label" />
<widget name="restrict_applications_description" />
<widget name="oars_label" />
<widget name="restrict_software_installation_label" />
</widgets>
</object>
<object class="MctRestrictApplicationsDialog" id="restrict_applications_dialog">
<property name="visible">False</property>
<property name="modal">True</property>
<property name="destroy-with-parent">False</property>
<property name="use-header-bar">1</property>
<signal name="delete-event" handler="on_restrict_applications_dialog_delete_event_cb" />
<signal name="response" handler="on_restrict_applications_dialog_response_cb" />
<signal name="close-request" handler="on_restrict_applications_dialog_close_request_cb" />
</object>
</interface>

View File

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

View File

@ -66,7 +66,7 @@ pkgconfig.generate(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,
namespace: 'Malcontent',
symbol_prefix: 'mct_',

View File

@ -50,6 +50,7 @@ typedef enum
struct _MctSessionLimits
{
/*< private >*/
gint ref_count;
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
is_maybe_content_type = not is_maybe_flatpak_id and is_valid_content_type(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,
is_maybe_content_type, is_maybe_path])
@ -320,6 +321,11 @@ def command_check_app_filter(user, arg, quiet=False, interactive=True):
# Content type
is_allowed = app_filter.is_content_type_allowed(arg)
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:
path = os.path.abspath(arg)
is_allowed = app_filter.is_path_allowed(path)

View File

@ -27,6 +27,7 @@
#include <glib/gi18n-lib.h>
#include <gio/gio.h>
#include <gtk/gtk.h>
#include <adwaita.h>
#include <libmalcontent-ui/malcontent-ui.h>
#include <polkit/polkit.h>
@ -76,8 +77,7 @@ struct _MctApplication
MctUserSelector *user_selector;
MctUserControls *user_controls;
GtkStack *main_stack;
GtkLabel *error_title;
GtkLabel *error_message;
AdwStatusPage *error_page;
GtkLockButton *lock_button;
GtkButton *user_accounts_panel_button;
GtkLabel *help_label;
@ -209,11 +209,9 @@ mct_application_activate (GApplication *application)
self->main_stack = GTK_STACK (gtk_builder_get_object (builder, "main_stack"));
self->user_selector = MCT_USER_SELECTOR (gtk_builder_get_object (builder, "user_selector"));
self->user_controls = MCT_USER_CONTROLS (gtk_builder_get_object (builder, "user_controls"));
self->error_title = GTK_LABEL (gtk_builder_get_object (builder, "error_title"));
self->error_message = GTK_LABEL (gtk_builder_get_object (builder, "error_message"));
self->error_page = ADW_STATUS_PAGE (gtk_builder_get_object (builder, "error_page"));
self->lock_button = GTK_LOCK_BUTTON (gtk_builder_get_object (builder, "lock_button"));
self->user_accounts_panel_button = GTK_BUTTON (gtk_builder_get_object (builder, "user_accounts_panel_button"));
self->help_label = GTK_LABEL (gtk_builder_get_object (builder, "help_label"));
/* Connect signals. */
g_signal_connect_object (self->user_selector, "notify::user",
@ -230,7 +228,7 @@ mct_application_activate (GApplication *application)
user_selector_notify_user_cb (G_OBJECT (self->user_selector), NULL, self);
user_manager_notify_is_loaded_cb (G_OBJECT (self->user_manager), NULL, self);
gtk_widget_show (GTK_WIDGET (window));
gtk_window_present (GTK_WINDOW (window));
}
/* Bring the window to the front. */
@ -250,6 +248,8 @@ mct_application_startup (GApplication *application)
/* Chain up. */
G_APPLICATION_CLASS (mct_application_parent_class)->startup (application);
adw_init ();
g_action_map_add_action_entries (G_ACTION_MAP (application), app_entries,
G_N_ELEMENTS (app_entries), application);
@ -323,13 +323,16 @@ about_action_cb (GSimpleAction *action, GVariant *parameters, gpointer user_data
}
static void
help_action_cb (GSimpleAction *action, GVariant *parameters, gpointer user_data)
on_malcontent_help_shown_finished_cb (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
MctApplication *self = MCT_APPLICATION (user_data);
g_autoptr(GError) local_error = NULL;
if (!gtk_show_uri_on_window (mct_application_get_main_window (self), "help:malcontent",
gtk_get_current_event_time (), &local_error))
if (!gtk_show_uri_full_finish (mct_application_get_main_window (self),
result,
&local_error))
{
GtkWidget *dialog = gtk_message_dialog_new (mct_application_get_main_window (self),
GTK_DIALOG_MODAL,
@ -337,13 +340,23 @@ help_action_cb (GSimpleAction *action, GVariant *parameters, gpointer user_data)
GTK_BUTTONS_OK,
_("The help contents could not be displayed"));
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", local_error->message);
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
gtk_window_present (GTK_WINDOW (dialog));
}
}
static void
help_action_cb (GSimpleAction *action, GVariant *parameters, gpointer user_data)
{
MctApplication *self = MCT_APPLICATION (user_data);
gtk_show_uri_full (mct_application_get_main_window (self),
"help:malcontent",
GDK_CURRENT_TIME,
NULL,
on_malcontent_help_shown_finished_cb,
self);
}
static void
quit_action_cb (GSimpleAction *action, GVariant *parameters, gpointer user_data)
{
@ -371,10 +384,10 @@ update_main_stack (MctApplication *self)
if ((is_user_manager_loaded && act_user_manager_no_service (self->user_manager)) ||
self->permission_error != NULL)
{
gtk_label_set_label (self->error_title,
_("Failed to load user data from the system"));
gtk_label_set_label (self->error_message,
_("Please make sure that the AccountsService is installed and enabled."));
adw_status_page_set_title (self->error_page,
_("Failed to load user data from the system"));
adw_status_page_set_description (self->error_page,
_("Please make sure that the AccountsService is installed and enabled."));
new_page_name = "error";
new_focus_widget = NULL;
@ -410,7 +423,7 @@ update_main_stack (MctApplication *self)
"with %s. <a href='https://www.commonsensemedia.org/privacy-and-internet-safety'>"
"Read guidance</a> on what to consider."),
act_user_get_real_name (selected_user));
gtk_label_set_markup (self->help_label, help_label);
mct_user_controls_set_description (self->user_controls, help_label);
mct_user_controls_set_user (self->user_controls, selected_user);
@ -427,12 +440,7 @@ update_main_stack (MctApplication *self)
gtk_stack_set_visible_child_name (self->main_stack, new_page_name);
if (new_focus_widget != NULL && !g_str_equal (old_page_name, new_page_name))
{
if (gtk_widget_get_can_focus (new_focus_widget))
gtk_widget_grab_focus (new_focus_widget);
else
gtk_widget_child_focus (new_focus_widget, GTK_DIR_TAB_FORWARD);
}
gtk_widget_grab_focus (new_focus_widget);
}
static void

View File

@ -18,6 +18,7 @@
*
* Authors:
* - Felipe Borges <felipeborges@gnome.org>
* - Georges Basile Stavracas Neto <georges@endlessos.org>
* - Philip Withnall <withnall@endlessm.com>
*/
@ -29,13 +30,16 @@
#define ARROW_SIZE 20
#define MCT_TYPE_CAROUSEL_LAYOUT (mct_carousel_layout_get_type ())
G_DECLARE_FINAL_TYPE (MctCarouselLayout, mct_carousel_layout, MCT, CAROUSEL_LAYOUT, GtkLayoutManager)
struct _MctCarouselItem {
GtkRadioButton parent;
GtkButton parent;
gint page;
};
G_DEFINE_TYPE (MctCarouselItem, mct_carousel_item, GTK_TYPE_RADIO_BUTTON)
G_DEFINE_TYPE (MctCarouselItem, mct_carousel_item, GTK_TYPE_BUTTON)
GtkWidget *
mct_carousel_item_new (void)
@ -43,28 +47,36 @@ mct_carousel_item_new (void)
return g_object_new (MCT_TYPE_CAROUSEL_ITEM, NULL);
}
void
mct_carousel_item_set_child (MctCarouselItem *self,
GtkWidget *child)
{
g_return_if_fail (MCT_IS_CAROUSEL_ITEM (self));
gtk_button_set_child (GTK_BUTTON (self), child);
}
static void
mct_carousel_item_class_init (MctCarouselItemClass *klass)
{
gtk_widget_class_set_css_name (GTK_WIDGET_CLASS (klass), "carousel-item");
}
static void
mct_carousel_item_init (MctCarouselItem *self)
{
gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (self), FALSE);
gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (self)),
"carousel-item");
}
struct _MctCarousel {
GtkRevealer parent;
AdwBin parent;
GtkRevealer *revealer;
GList *children;
gint visible_page;
MctCarouselItem *selected_item;
GtkWidget *last_box;
GtkWidget *arrow;
gint arrow_start_x;
/* Widgets */
GtkStack *stack;
@ -74,7 +86,7 @@ struct _MctCarousel {
GtkStyleProvider *provider;
};
G_DEFINE_TYPE (MctCarousel, mct_carousel, GTK_TYPE_REVEALER)
G_DEFINE_TYPE (MctCarousel, mct_carousel, ADW_TYPE_BIN)
enum {
ITEM_ACTIVATED,
@ -91,9 +103,9 @@ mct_carousel_item_get_x (MctCarouselItem *item,
{
GtkWidget *widget, *parent;
gint width;
gint dest_x;
gdouble dest_x;
parent = GTK_WIDGET (carousel->stack);
parent = GTK_WIDGET (carousel->revealer);
widget = GTK_WIDGET (item);
width = gtk_widget_get_allocated_width (widget);
@ -116,8 +128,6 @@ mct_carousel_move_arrow (MctCarousel *self)
GtkStyleContext *context;
gchar *css;
gint end_x;
GtkSettings *settings;
gboolean animations;
if (!self->selected_item)
return;
@ -129,31 +139,9 @@ mct_carousel_move_arrow (MctCarousel *self)
gtk_style_context_remove_provider (context, self->provider);
g_clear_object (&self->provider);
settings = gtk_widget_get_settings (GTK_WIDGET (self));
g_object_get (settings, "gtk-enable-animations", &animations, NULL);
/* Animate the arrow movement if animations are enabled. Otherwise,
* jump the arrow to the right location instantly. */
if (animations)
{
css = g_strdup_printf ("@keyframes arrow_keyframes-%d-%d {\n"
" from { margin-left: %dpx; }\n"
" to { margin-left: %dpx; }\n"
"}\n"
"* {\n"
" animation-name: arrow_keyframes-%d-%d;\n"
"}\n",
self->arrow_start_x, end_x,
self->arrow_start_x, end_x,
self->arrow_start_x, end_x);
}
else
{
css = g_strdup_printf ("* { margin-left: %dpx }", end_x);
}
css = g_strdup_printf ("* { margin-left: %dpx; }", end_x);
self->provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ());
gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (self->provider), css, -1, NULL);
gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (self->provider), css, -1);
gtk_style_context_add_provider (context, self->provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
g_free (css);
@ -234,10 +222,7 @@ mct_carousel_select_item (MctCarousel *self,
}
if (self->selected_item != NULL)
{
page_changed = (self->selected_item->page != item->page);
self->arrow_start_x = mct_carousel_item_get_x (self->selected_item, self);
}
page_changed = (self->selected_item->page != item->page);
self->selected_item = item;
self->visible_page = item->page;
@ -300,59 +285,44 @@ mct_carousel_goto_next_page (GtkWidget *button,
mct_carousel_select_item_at_index (self, self->visible_page * ITEMS_PER_PAGE);
}
static void
mct_carousel_add (GtkContainer *container,
GtkWidget *widget)
void
mct_carousel_add (MctCarousel *self,
MctCarouselItem *item)
{
MctCarousel *self = MCT_CAROUSEL (container);
gboolean last_box_is_full;
if (!MCT_IS_CAROUSEL_ITEM (widget))
{
GTK_CONTAINER_CLASS (mct_carousel_parent_class)->add (container, widget);
return;
}
g_return_if_fail (MCT_IS_CAROUSEL (self));
g_return_if_fail (MCT_IS_CAROUSEL_ITEM (item));
gtk_style_context_add_class (gtk_widget_get_style_context (widget), "menu");
gtk_button_set_relief (GTK_BUTTON (widget), GTK_RELIEF_NONE);
self->children = g_list_append (self->children, widget);
MCT_CAROUSEL_ITEM (widget)->page = get_last_page_number (self);
if (self->selected_item != NULL)
gtk_radio_button_join_group (GTK_RADIO_BUTTON (widget), GTK_RADIO_BUTTON (self->selected_item));
g_signal_connect (widget, "button-press-event", G_CALLBACK (on_item_toggled), self);
self->children = g_list_append (self->children, item);
item->page = get_last_page_number (self);
g_signal_connect (item, "clicked", G_CALLBACK (on_item_toggled), self);
last_box_is_full = ((g_list_length (self->children) - 1) % ITEMS_PER_PAGE == 0);
if (last_box_is_full)
{
g_autofree gchar *page = NULL;
page = g_strdup_printf ("%d", MCT_CAROUSEL_ITEM (widget)->page);
self->last_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
gtk_widget_show (self->last_box);
page = g_strdup_printf ("%d", item->page);
self->last_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 18);
gtk_widget_set_hexpand (self->last_box, TRUE);
gtk_widget_set_valign (self->last_box, GTK_ALIGN_CENTER);
gtk_box_set_homogeneous (GTK_BOX (self->last_box), TRUE);
gtk_stack_add_named (self->stack, self->last_box, page);
}
gtk_widget_show_all (widget);
gtk_box_pack_start (GTK_BOX (self->last_box), widget, TRUE, FALSE, 10);
gtk_box_append (GTK_BOX (self->last_box), GTK_WIDGET (item));
update_buttons_visibility (self);
}
static void
destroy_widget_cb (GtkWidget *widget,
gpointer user_data)
{
gtk_widget_destroy (widget);
}
void
mct_carousel_purge_items (MctCarousel *self)
{
gtk_container_forall (GTK_CONTAINER (self->stack),
destroy_widget_cb,
NULL);
GtkWidget *child;
while ((child = gtk_widget_get_first_child (GTK_WIDGET (self->stack))) != NULL)
gtk_stack_remove (self->stack, child);
g_list_free (self->children);
self->children = NULL;
@ -386,7 +356,6 @@ mct_carousel_class_init (MctCarouselClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *wclass = GTK_WIDGET_CLASS (klass);
GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
gtk_widget_class_set_template_from_resource (wclass,
"/org/freedesktop/MalcontentControl/ui/carousel.ui");
@ -395,13 +364,14 @@ mct_carousel_class_init (MctCarouselClass *klass)
gtk_widget_class_bind_template_child (wclass, MctCarousel, go_back_button);
gtk_widget_class_bind_template_child (wclass, MctCarousel, go_next_button);
gtk_widget_class_bind_template_child (wclass, MctCarousel, arrow);
gtk_widget_class_bind_template_child (wclass, MctCarousel, revealer);
gtk_widget_class_bind_template_callback (wclass, mct_carousel_goto_previous_page);
gtk_widget_class_bind_template_callback (wclass, mct_carousel_goto_next_page);
object_class->dispose = mct_carousel_dispose;
gtk_widget_class_set_layout_manager_type (wclass, MCT_TYPE_CAROUSEL_LAYOUT);
container_class->add = mct_carousel_add;
object_class->dispose = mct_carousel_dispose;
signals[ITEM_ACTIVATED] =
g_signal_new ("item-activated",
@ -414,19 +384,6 @@ mct_carousel_class_init (MctCarouselClass *klass)
MCT_TYPE_CAROUSEL_ITEM);
}
static void
on_size_allocate (MctCarousel *self)
{
if (self->selected_item == NULL)
return;
if (gtk_stack_get_transition_running (self->stack))
return;
self->arrow_start_x = mct_carousel_item_get_x (self->selected_item, self);
mct_carousel_move_arrow (self);
}
static void
on_transition_running (MctCarousel *self)
{
@ -445,13 +402,12 @@ mct_carousel_init (MctCarousel *self)
gtk_css_provider_load_from_resource (GTK_CSS_PROVIDER (provider),
"/org/freedesktop/MalcontentControl/ui/carousel.css");
gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
provider,
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION - 1);
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
provider,
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION - 1);
g_object_unref (provider);
g_signal_connect_swapped (self->stack, "size-allocate", G_CALLBACK (on_size_allocate), self);
g_signal_connect_swapped (self->stack, "notify::transition-running", G_CALLBACK (on_transition_running), self);
}
@ -460,3 +416,77 @@ mct_carousel_get_item_count (MctCarousel *self)
{
return g_list_length (self->children);
}
void
mct_carousel_set_revealed (MctCarousel *self,
gboolean revealed)
{
g_return_if_fail (MCT_IS_CAROUSEL (self));
gtk_revealer_set_reveal_child (self->revealer, revealed);
}
struct _MctCarouselLayout {
GtkLayoutManager parent;
};
G_DEFINE_FINAL_TYPE (MctCarouselLayout, mct_carousel_layout, GTK_TYPE_LAYOUT_MANAGER)
static void
mct_carousel_layout_measure (GtkLayoutManager *layout_manager,
GtkWidget *widget,
GtkOrientation orientation,
int for_size,
int *minimum,
int *natural,
int *minimum_baseline,
int *natural_baseline)
{
MctCarousel *carousel;
g_assert (MCT_IS_CAROUSEL (widget));
carousel = MCT_CAROUSEL (widget);
gtk_widget_measure (GTK_WIDGET (carousel->revealer),
orientation, for_size,
minimum, natural,
minimum_baseline, natural_baseline);
}
static void
mct_carousel_layout_allocate (GtkLayoutManager *layout_manager,
GtkWidget *widget,
int width,
int height,
int baseline)
{
MctCarousel *carousel;
g_assert (MCT_IS_CAROUSEL (widget));
carousel = MCT_CAROUSEL (widget);
gtk_widget_allocate (GTK_WIDGET (carousel->revealer), width, height, baseline, NULL);
if (carousel->selected_item == NULL)
return;
if (gtk_stack_get_transition_running (carousel->stack))
return;
mct_carousel_move_arrow (carousel);
}
static void
mct_carousel_layout_class_init (MctCarouselLayoutClass *klass)
{
GtkLayoutManagerClass *layout_manager_class = GTK_LAYOUT_MANAGER_CLASS (klass);
layout_manager_class->measure = mct_carousel_layout_measure;
layout_manager_class->allocate = mct_carousel_layout_allocate;
}
static void
mct_carousel_layout_init (MctCarouselLayout *self)
{
}

View File

@ -22,9 +22,18 @@
margin-bottom: -2px;
}
.carousel-item {
carousel-item {
background: transparent;
box-shadow: none;
border: none;
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

@ -18,24 +18,28 @@
*
* Authors:
* - Felipe Borges <felipeborges@gnome.org>
* - Georges Basile Stavracas Neto <georges@endlessos.org>
* - Philip Withnall <withnall@endlessm.com>
*/
#pragma once
#include <gtk/gtk.h>
#include <adwaita.h>
G_BEGIN_DECLS
#define MCT_TYPE_CAROUSEL_ITEM (mct_carousel_item_get_type ())
G_DECLARE_FINAL_TYPE (MctCarouselItem, mct_carousel_item, MCT, CAROUSEL_ITEM, GtkRadioButton)
G_DECLARE_FINAL_TYPE (MctCarouselItem, mct_carousel_item, MCT, CAROUSEL_ITEM, GtkButton)
#define MCT_TYPE_CAROUSEL (mct_carousel_get_type ())
G_DECLARE_FINAL_TYPE (MctCarousel, mct_carousel, MCT, CAROUSEL, GtkRevealer)
G_DECLARE_FINAL_TYPE (MctCarousel, mct_carousel, MCT, CAROUSEL, AdwBin)
GtkWidget *mct_carousel_item_new (void);
void mct_carousel_item_set_child (MctCarouselItem *self,
GtkWidget *child);
MctCarousel *mct_carousel_new (void);
void mct_carousel_purge_items (MctCarousel *self);
@ -49,4 +53,10 @@ void mct_carousel_select_item (MctCarousel *self,
guint mct_carousel_get_item_count (MctCarousel *self);
void mct_carousel_add (MctCarousel *self,
MctCarouselItem *item);
void mct_carousel_set_revealed (MctCarousel *self,
gboolean revealed);
G_END_DECLS

View File

@ -3,100 +3,76 @@
<!-- Copyright © 2020 Endless, Inc. -->
<interface>
<requires lib="gtk+" version="3.12"/>
<template class="MctCarousel" parent="GtkRevealer">
<property name="transition_duration">400</property>
<property name="reveal-child">True</property>
<template class="MctCarousel" parent="AdwBin">
<child>
<object class="GtkOverlay">
<property name="visible">True</property>
<property name="hexpand">True</property>
<property name="border_width">16</property>
<object class="GtkRevealer" id="revealer">
<property name="transition_duration">400</property>
<property name="reveal-child">True</property>
<child>
<object class="GtkStack" id="stack">
<property name="visible">True</property>
<property name="transition_duration">400</property>
<property name="transition_type">GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT</property>
<style>
<class name="location-bar"/>
</style>
</object>
</child>
<child type="overlay">
<object class="GtkOverlay">
<property name="visible">True</property>
<property name="hexpand">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
<property name="border_width">12</property>
<child>
<object class="GtkButton" id="go_back_button">
<property name="visible">False</property>
<property name="can_focus">True</property>
<property name="valign">center</property>
<style>
<class name="circular"/>
</style>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon-size">4</property>
<property name="icon_name">go-previous-symbolic</property>
<child internal-child="accessible">
<object class="AtkObject">
<property name="accessible-name" translatable="yes">Previous Page</property>
</object>
</child>
</object>
</child>
<signal name="clicked" handler="mct_carousel_goto_previous_page" object="MctCarousel" swapped="no"/>
</object>
<packing>
<property name="pack_type">GTK_PACK_START</property>
</packing>
</child>
<child>
<object class="GtkButton" id="go_next_button">
<property name="can_focus">True</property>
<property name="valign">center</property>
<style>
<class name="circular"/>
</style>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon-size">4</property>
<property name="icon_name">go-next-symbolic</property>
<child internal-child="accessible">
<object class="AtkObject">
<property name="accessible-name" translatable="yes">Next Page</property>
</object>
</child>
</object>
</child>
<signal name="clicked" handler="mct_carousel_goto_next_page" object="MctCarousel" swapped="no"/>
</object>
<packing>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
<object class="GtkStack" id="stack">
<property name="margin-top">16</property>
<property name="margin-bottom">16</property>
<property name="margin-start">16</property>
<property name="margin-end">16</property>
<property name="transition_duration">400</property>
<property name="transition_type">GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT</property>
<style>
<class name="location-bar"/>
</style>
</object>
</child>
<child type="overlay">
<object class="GtkButton" id="go_back_button">
<property name="visible">False</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<property name="icon_name">go-previous-symbolic</property>
<accessibility>
<property name="label" translatable="yes">Previous Page</property>
</accessibility>
<style>
<class name="circular"/>
</style>
<signal name="clicked" handler="mct_carousel_goto_previous_page" object="MctCarousel" swapped="no"/>
</object>
</child>
<child type="overlay">
<object class="GtkButton" id="go_next_button">
<property name="valign">center</property>
<property name="halign">end</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
<property name="hexpand">True</property>
<property name="icon_name">go-next-symbolic</property>
<accessibility>
<property name="label" translatable="yes">Next Page</property>
</accessibility>
<style>
<class name="circular"/>
</style>
<signal name="clicked" handler="mct_carousel_goto_next_page" object="MctCarousel" swapped="no"/>
</object>
</child>
<child type="overlay">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">GTK_ALIGN_END</property>
<style>
<class name="carousel-arrow-container"/>
</style>
<child>
<object class="GtkOverlay">
<property name="visible">True</property>
<child>
<object class="GtkBox" id="arrow">
<property name="visible">True</property>
<property name="halign">GTK_ALIGN_END</property>
<style>
<class name="carousel-arrow"/>
@ -105,7 +81,6 @@
</child>
<child type="overlay">
<object class="GtkBox">
<property name="visible">True</property>
<property name="halign">GTK_ALIGN_END</property>
<style>
<class name="carousel-inner-arrow"/>
@ -115,14 +90,8 @@
</object>
</child>
</object>
<packing>
<property name="pass-through">True</property>
</packing>
</child>
</object>
<packing>
<property name="pass-through">True</property>
</packing>
</child>
</object>
</child>

View File

@ -2,297 +2,163 @@
<!-- Copyright © 2019, 2020 Endless Mobile, Inc. -->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkApplicationWindow" id="main_window">
<object class="AdwApplicationWindow" id="main_window">
<property name="default-width">540</property>
<property name="default-height">580</property>
<child type="titlebar">
<object class="GtkHeaderBar" id="header">
<property name="show-close-button">True</property>
<!-- Translators: This is the title of the main window -->
<property name="title" translatable="yes">Parental Controls</property>
<property name="visible">True</property>
<child>
<object class="GtkMenuButton" id="primary_menu">
<property name="visible">True</property>
<property name="direction">none</property>
<property name="can-focus">True</property>
<property name="use-popover">True</property>
<property name="menu-model">primary-menu</property>
<accelerator key="F10" signal="activate"/>
<style>
<class name="image-button"/>
</style>
</object>
<packing>
<property name="pack-type">end</property>
</packing>
</child>
</object>
</child>
<child>
<object class="GtkStack" id="main_stack">
<property name="visible">True</property>
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="border_width">0</property>
<child>
<object class="MctUserSelector" id="user_selector">
<property name="visible">True</property>
<property name="user-manager">user_manager</property>
<property name="show-administrators">False</property>
<accessibility>
<relation target="user_controls" type="controller-for"/>
</accessibility>
<object class="GtkHeaderBar" id="header">
<property name="show-title-buttons">True</property>
<property name="title-widget">
<object class="AdwWindowTitle">
<!-- Translators: This is the title of the main window -->
<property name="title" translatable="yes">Parental Controls</property>
</object>
<packing>
<property name="fill">False</property>
<property name="expand">False</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="hscrollbar-policy">never</property>
<property name="min-content-height">370</property>
</property>
<child type="end">
<object class="GtkMenuButton" id="primary_menu">
<property name="direction">none</property>
<property name="menu-model">primary-menu</property>
<style>
<class name="image-button"/>
</style>
<child>
<object class="GtkBox">
<property name="margin">18</property>
<property name="orientation">vertical</property>
<property name="spacing">18</property>
<property name="visible">True</property>
<object class="GtkShortcutController">
<property name="scope">global</property>
<child>
<object class="GtkLabel" id="help_label">
<!-- Content is set in code; this string is just a placeholder -->
<property name="label">Its recommended that restrictions are set as part of an ongoing conversation with $name. Read guidance on what to consider.</property>
<property name="visible">True</property>
<property name="wrap">True</property>
<property name="xalign">0.0</property>
<property name="yalign">0.0</property>
<child internal-child="accessible">
<object class="AtkObject">
<property name="AtkObject::accessible-role">static</property>
<object class="GtkShortcut">
<property name="trigger">F10</property>
<property name="action">activate</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkStack" id="main_stack">
<child>
<object class="GtkStackPage">
<property name="name">controls</property>
<property name="child">
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="MctUserSelector" id="user_selector">
<property name="user-manager">user_manager</property>
<property name="show-administrators">False</property>
<accessibility>
<relation name="controls">user_controls</relation>
</accessibility>
</object>
</child>
<child>
<object class="AdwPreferencesPage">
<child>
<object class="AdwPreferencesGroup">
<child>
<object class="MctUserControls" id="user_controls">
<!-- Content is set in code; this string is just a placeholder -->
<property name="description">Its recommended that restrictions are set as part of an ongoing conversation with $name. Read guidance on what to consider.</property>
<property name="height-request">270</property>
<property name="dbus-connection">dbus_connection</property>
<property name="vexpand">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</property>
</object>
</child>
<child>
<object class="GtkStackPage">
<property name="name">unlock</property>
<property name="child">
<object class="AdwStatusPage">
<property name="title" translatable="yes">Permission Required</property>
<property name="description" translatable="yes">Permission is required to view and change user parental controls settings.</property>
<property name="icon-name">org.freedesktop.MalcontentControl</property>
<child>
<object class="MctUserControls" id="user_controls">
<object class="GtkLockButton" id="lock_button">
<property name="halign">center</property>
<property name="visible">True</property>
<property name="dbus-connection">dbus_connection</property>
<style>
<class name="suggested-action" />
<class name="pill" />
</style>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
</packing>
</child>
</object>
<packing>
<property name="name">controls</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<child type="center">
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property>
<property name="margin">18</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label" translatable="yes">Permission Required</property>
<attributes>
<attribute name="scale" value="1.4"/>
</attributes>
<child internal-child="accessible">
<object class="AtkObject">
<property name="AtkObject::accessible-role">static</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label" translatable="yes">Permission is required to view and change user parental controls settings.</property>
<property name="wrap">True</property>
<child internal-child="accessible">
<object class="AtkObject">
<property name="AtkObject::accessible-role">static</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLockButton" id="lock_button">
<property name="visible">True</property>
<property name="halign">center</property>
<property name="can-default">True</property>
<property name="has-default">True</property>
<property name="can-focus">True</property>
<!-- Give 18px spacing between the label and the button -->
<property name="margin-top">6</property>
</object>
</child>
</property>
</object>
</child>
</object>
<packing>
<property name="name">unlock</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<child type="center">
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property>
<property name="margin">18</property>
<child>
<object class="GtkImage">
<child>
<object class="GtkStackPage">
<property name="name">no-other-users</property>
<property name="child">
<object class="AdwStatusPage">
<property name="icon-name">system-users-symbolic</property>
<property name="pixel-size">96</property>
<property name="visible">True</property>
<child internal-child="accessible">
<object class="AtkObject">
<property name="AtkObject::accessible-role">static</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label" translatable="yes">No Standard User Accounts</property>
<attributes>
<attribute name="scale" value="1.4"/>
</attributes>
<child internal-child="accessible">
<object class="AtkObject">
<property name="AtkObject::accessible-role">static</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="justify">center</property>
<property name="label" translatable="yes">Parental controls can only be applied to standard user
<property name="title" translatable="yes">No Standard User Accounts</property>
<property name="description" translatable="yes">Parental controls can only be applied to standard user
accounts. These can be created in the user settings.</property>
<property name="wrap">True</property>
<child internal-child="accessible">
<object class="AtkObject">
<property name="AtkObject::accessible-role">static</property>
<child>
<object class="GtkButton" id="user_accounts_panel_button">
<property name="label" translatable="yes">_User Settings</property>
<property name="halign">center</property>
<property name="use-underline">True</property>
<style>
<class name="suggested-action"/>
</style>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="user_accounts_panel_button">
<property name="visible">True</property>
<property name="label" translatable="yes">_User Settings</property>
<property name="halign">center</property>
<property name="can-default">True</property>
<property name="has-default">True</property>
<property name="use-underline">True</property>
<property name="can-focus">True</property>
<!-- Give 18px spacing between the label and the button -->
<property name="margin-top">6</property>
<style>
<class name="suggested-action"/>
</style>
</object>
</child>
</property>
</object>
</child>
</object>
<packing>
<property name="name">no-other-users</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<child type="center">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label" translatable="yes">Loading…</property>
<attributes>
<attribute name="scale" value="1.4"/>
</attributes>
<child internal-child="accessible">
<object class="AtkObject">
<property name="AtkObject::accessible-role">static</property>
<child>
<object class="GtkStackPage">
<property name="name">loading</property>
<property name="child">
<object class="GtkBox">
<property name="orientation">vertical</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<child type="center">
<object class="GtkLabel">
<property name="label" translatable="yes">Loading…</property>
<property name="vexpand">True</property>
<style>
<class name="title-1" />
</style>
</object>
</child>
</object>
</child>
</property>
</object>
</child>
</object>
<packing>
<property name="name">loading</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<child type="center">
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkLabel" id="error_title">
<property name="visible">True</property>
<property name="label"></property>
<attributes>
<attribute name="scale" value="1.4"/>
</attributes>
<child>
<object class="GtkStackPage">
<property name="name">error</property>
<property name="child">
<object class="AdwStatusPage" id="error_page">
<property name="icon-name">dialog-error-symbolic</property>
</object>
</child>
<child>
<object class="GtkLabel" id="error_message">
<property name="visible">True</property>
<property name="label"></property>
</object>
</child>
</object>
</child>
<child internal-child="accessible">
<object class="AtkObject">
<property name="AtkObject::accessible-role">alert</property>
</property>
</object>
</child>
</object>
<packing>
<property name="name">error</property>
</packing>
</child>
</object>
</child>

View File

@ -27,8 +27,9 @@ malcontent_control = executable('malcontent-control',
dependency('gio-2.0', version: '>= 2.44'),
dependency('glib-2.0', version: '>= 2.54.2'),
dependency('gobject-2.0', version: '>= 2.54'),
dependency('gtk+-3.0'),
gtk_dep,
dependency('polkit-gobject-1'),
libadwaita_dep,
libmalcontent_dep,
libmalcontent_ui_dep,
],
@ -78,12 +79,12 @@ endif
xmllint = find_program('xmllint', required: false)
if xmllint.found()
gtk_prefix = dependency('gtk+-3.0').get_pkgconfig_variable('prefix')
gtk_prefix = gtk_dep.get_variable(pkgconfig: 'prefix')
test(
'validate-ui', xmllint,
args: [
'--nonet', '--noblanks', '--noout',
'--relaxng', join_paths(gtk_prefix, 'share', 'gtk-3.0', 'gtkbuilder.rng'),
'--relaxng', join_paths(gtk_prefix, 'share', 'gtk-4.0', 'gtk4builder.rng'),
files(
'carousel.ui',
'main.ui',

View File

@ -31,7 +31,8 @@
<launchable type="desktop-id">org.freedesktop.MalcontentControl.desktop</launchable>
<url type="homepage">https://gitlab.freedesktop.org/pwithnall/malcontent</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>
<update_contact>philip_at_tecnocode.co.uk</update_contact>
<compulsory_for_desktop>GNOME</compulsory_for_desktop>
@ -44,6 +45,33 @@
</kudos>
<translation type="gettext">malcontent</translation>
<releases>
<release version="0.11.1" date="2023-03-16" type="stable">
<description>
<p>This is a stable release with the following changes:</p>
<ul>
<li>Translation updates</li>
</ul>
</description>
</release>
<release version="0.11.0" date="2022-08-12" type="stable">
<description>
<p>This is a stable release with the following changes:</p>
<ul>
<li>Use libappstream instead of appstream-glib</li>
<li>Port to GTK4</li>
<li>Translation updates</li>
</ul>
</description>
</release>
<release version="0.10.5" date="2022-05-31" type="stable">
<description>
<p>This is a stable release with the following changes:</p>
<ul>
<li>German translation of the user help</li>
<li>Translation updates</li>
</ul>
</description>
</release>
<release version="0.10.4" date="2022-03-09" type="stable">
<description>
<p>This is a stable release with the following changes:</p>

View File

@ -1,5 +1,6 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
*
* Copyright © 2022 Endless Mobile, Inc.
* Copyright © 2015 Red Hat, Inc.
*
* This program is free software; you can redistribute it and/or modify
@ -16,10 +17,11 @@
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*
* Authors:
* - Georges Basile Stavracas Neto <georges@endlessos.org>
* - Ondrej Holy <oholy@redhat.com>
*/
#include <gtk/gtk.h>
#include <adwaita.h>
#include <act/act.h>
#include <sys/stat.h>
@ -28,108 +30,49 @@
struct _MctUserImage
{
GtkImage parent_instance;
AdwBin parent_instance;
AdwAvatar *avatar;
ActUser *user;
};
G_DEFINE_TYPE (MctUserImage, mct_user_image, GTK_TYPE_IMAGE)
G_DEFINE_TYPE (MctUserImage, mct_user_image, ADW_TYPE_BIN)
static GdkPixbuf *
round_image (GdkPixbuf *pixbuf)
static GdkTexture *
render_user_icon_texture (ActUser *user)
{
GdkPixbuf *dest = NULL;
cairo_surface_t *surface;
cairo_t *cr;
gint size;
size = gdk_pixbuf_get_width (pixbuf);
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, size, size);
cr = cairo_create (surface);
/* Clip a circle */
cairo_arc (cr, size / 2, size / 2, size / 2, 0, 2 * G_PI);
cairo_clip (cr);
cairo_new_path (cr);
gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
cairo_paint (cr);
dest = gdk_pixbuf_get_from_surface (surface, 0, 0, size, size);
cairo_surface_destroy (surface);
cairo_destroy (cr);
return dest;
}
static cairo_surface_t *
render_user_icon (ActUser *user,
gint icon_size,
gint scale)
{
g_autoptr(GdkPixbuf) source_pixbuf = NULL;
GdkPixbuf *pixbuf = NULL;
GError *error;
g_autoptr(GdkTexture) texture = NULL;
g_autoptr(GError) error = NULL;
const gchar *icon_file;
cairo_surface_t *surface = NULL;
g_return_val_if_fail (ACT_IS_USER (user), NULL);
g_return_val_if_fail (icon_size > 12, NULL);
icon_file = act_user_get_icon_file (user);
pixbuf = NULL;
if (icon_file)
if (icon_file == NULL)
return NULL;
texture = gdk_texture_new_from_filename (icon_file, &error);
if (error != NULL)
{
source_pixbuf = gdk_pixbuf_new_from_file_at_size (icon_file,
icon_size * scale,
icon_size * scale,
NULL);
if (source_pixbuf)
pixbuf = round_image (source_pixbuf);
g_warning ("Error loading user icon: %s", error->message);
return NULL;
}
if (pixbuf != NULL)
goto out;
error = NULL;
pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
"avatar-default",
icon_size * scale,
GTK_ICON_LOOKUP_FORCE_SIZE,
&error);
if (error)
{
g_warning ("%s", error->message);
g_error_free (error);
}
out:
if (pixbuf != NULL)
{
surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, scale, NULL);
g_object_unref (pixbuf);
}
return surface;
return g_steal_pointer (&texture);
}
static void
render_image (MctUserImage *image)
{
cairo_surface_t *surface;
gint scale, pixel_size;
g_autoptr(GdkTexture) texture = NULL;
if (image->user == NULL)
return;
pixel_size = gtk_image_get_pixel_size (GTK_IMAGE (image));
scale = gtk_widget_get_scale_factor (GTK_WIDGET (image));
surface = render_user_icon (image->user,
pixel_size > 0 ? pixel_size : 48,
scale);
gtk_image_set_from_surface (GTK_IMAGE (image), surface);
cairo_surface_destroy (surface);
texture = render_user_icon_texture (image->user);
adw_avatar_set_custom_image (image->avatar, GDK_PAINTABLE (texture));
adw_avatar_set_text (image->avatar, act_user_get_real_name (image->user));
}
void
@ -163,8 +106,8 @@ mct_user_image_class_init (MctUserImageClass *class)
static void
mct_user_image_init (MctUserImage *image)
{
g_signal_connect_swapped (image, "notify::scale-factor", G_CALLBACK (render_image), image);
g_signal_connect_swapped (image, "notify::pixel-size", G_CALLBACK (render_image), image);
image->avatar = ADW_AVATAR (adw_avatar_new (48, NULL, TRUE));
adw_bin_set_child (ADW_BIN (image), GTK_WIDGET (image->avatar));
}
GtkWidget *

View File

@ -1,5 +1,6 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
*
* Copyright © 2022 Endless Mobile, Inc.
* Copyright © 2015 Red Hat, Inc.
*
* This program is free software; you can redistribute it and/or modify
@ -16,19 +17,20 @@
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*
* Authors:
* - Georges Basile Stavracas Neto <georges@endlessos.org>
* - Ondrej Holy <oholy@redhat.com>
*/
#pragma once
#include <gtk/gtk.h>
#include <adwaita.h>
#include <act/act.h>
G_BEGIN_DECLS
#define MCT_TYPE_USER_IMAGE (mct_user_image_get_type ())
G_DECLARE_FINAL_TYPE (MctUserImage, mct_user_image, MCT, USER_IMAGE, GtkImage)
G_DECLARE_FINAL_TYPE (MctUserImage, mct_user_image, MCT, USER_IMAGE, AdwBin)
GtkWidget *mct_user_image_new (void);
void mct_user_image_set_user (MctUserImage *image,

View File

@ -370,11 +370,11 @@ reload_users (MctUserSelector *self,
g_object_get (settings, "gtk-enable-animations", &animations, NULL);
g_object_set (settings, "gtk-enable-animations", FALSE, NULL);
mct_carousel_purge_items (self->carousel);
list = act_user_manager_list_users (self->user_manager);
g_debug ("Got %u users", g_slist_length (list));
mct_carousel_purge_items (self->carousel);
list = g_slist_sort (list, (GCompareFunc) sort_users);
for (l = list; l; l = l->next)
{
@ -397,7 +397,7 @@ reload_users (MctUserSelector *self,
g_object_set (settings, "gtk-enable-animations", animations, NULL);
gtk_revealer_set_reveal_child (GTK_REVEALER (self->carousel), TRUE);
mct_carousel_set_revealed (self->carousel, TRUE);
}
static GtkWidget *
@ -411,7 +411,7 @@ create_carousel_entry (MctUserSelector *self,
widget = mct_user_image_new ();
mct_user_image_set_user (MCT_USER_IMAGE (widget), user);
gtk_box_pack_start (GTK_BOX (box), widget, FALSE, FALSE, 0);
gtk_box_append (GTK_BOX (box), widget);
label = g_strdup_printf ("<b>%s</b>",
get_real_or_user_name (user));
@ -419,7 +419,7 @@ create_carousel_entry (MctUserSelector *self,
gtk_label_set_use_markup (GTK_LABEL (widget), TRUE);
gtk_label_set_ellipsize (GTK_LABEL (widget), PANGO_ELLIPSIZE_END);
gtk_widget_set_margin_top (widget, 5);
gtk_box_pack_start (GTK_BOX (box), widget, FALSE, FALSE, 0);
gtk_box_append (GTK_BOX (box), widget);
g_free (label);
if (act_user_get_uid (user) == getuid ())
@ -431,7 +431,7 @@ create_carousel_entry (MctUserSelector *self,
gtk_label_set_use_markup (GTK_LABEL (widget), TRUE);
g_free (label);
gtk_box_pack_start (GTK_BOX (box), widget, FALSE, FALSE, 0);
gtk_box_append (GTK_BOX (box), widget);
gtk_style_context_add_class (gtk_widget_get_style_context (widget),
"dim-label");
@ -455,10 +455,10 @@ user_added_cb (ActUserManager *user_manager,
widget = create_carousel_entry (self, user);
item = mct_carousel_item_new ();
gtk_container_add (GTK_CONTAINER (item), widget);
mct_carousel_item_set_child (MCT_CAROUSEL_ITEM (item), widget);
g_object_set_data (G_OBJECT (item), "uid", GINT_TO_POINTER (act_user_get_uid (user)));
gtk_container_add (GTK_CONTAINER (self->carousel), item);
mct_carousel_add (self->carousel, MCT_CAROUSEL_ITEM (item));
}
static void

View File

@ -5,7 +5,6 @@
<template class="MctUserSelector" parent="GtkBox">
<child>
<object class="MctCarousel" id="carousel">
<property name="visible">True</property>
<property name="hexpand">True</property>
<signal name="item-activated" handler="carousel_item_activated"/>
</object>

View File

@ -1,6 +1,6 @@
project('malcontent', 'c',
version : '0.10.4',
meson_version : '>= 0.50.0',
version : '0.12.0',
meson_version : '>= 0.59.0',
license: ['LGPL-2.1-or-later', 'GPL-2.0-or-later'],
default_options : [
'buildtype=debugoptimized',
@ -34,12 +34,12 @@ if pamlibdir == ''
endif
dbus = dependency('dbus-1')
dbusinterfacesdir = dbus.get_pkgconfig_variable('interfaces_dir',
define_variable: ['datadir', datadir])
dbusinterfacesdir = dbus.get_variable(pkgconfig: 'interfaces_dir',
pkgconfig_define: ['datadir', datadir])
polkit_gobject = dependency('polkit-gobject-1')
polkitpolicydir = polkit_gobject.get_pkgconfig_variable('policydir',
define_variable: ['prefix', prefix])
polkitpolicydir = polkit_gobject.get_variable(pkgconfig: 'policydir',
pkgconfig_define: ['prefix', prefix])
config_h = configuration_data()
config_h.set_quoted('GETTEXT_PACKAGE', 'malcontent')
@ -134,13 +134,23 @@ else
'Malcontent-' + libmalcontent_api_version + '.typelib']
endif
if get_option('ui').enabled()
gtk_dep = dependency('gtk4', version: '>= 4.6')
libadwaita_dep = dependency(
'libadwaita-1',
version: '>= 1.1',
fallback: ['libadwaita', 'libadwaita_dep'],
default_options: ['examples=false', 'introspection=disabled', 'tests=false', 'vapi=false'],
)
subdir('libmalcontent-ui')
endif
subdir('malcontent-client')
if get_option('ui').enabled()
subdir('malcontent-control')
gnome.post_install(
gtk_update_icon_cache: true,
update_desktop_database: true,
)
endif
subdir('pam')
subdir('po')
meson.add_install_script('build-aux/meson_post_install.py')

View File

@ -23,6 +23,7 @@ hr
hu
id
it
ka
kk
ko
lt

View File

@ -4,7 +4,6 @@ accounts-service/com.endlessm.ParentalControls.policy.in
libmalcontent/app-filter.c
libmalcontent/manager.c
libmalcontent/session-limits.c
libmalcontent-ui/gs-content-rating.c
libmalcontent-ui/restrict-applications-dialog.c
libmalcontent-ui/restrict-applications-dialog.ui
libmalcontent-ui/restrict-applications-selector.c

162
po/cs.po
View File

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: malcontent\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/"
"issues\n"
"POT-Creation-Date: 2021-09-18 12:41+0000\n"
"PO-Revision-Date: 2021-10-02 00:36+0200\n"
"POT-Creation-Date: 2023-10-13 16:18+0000\n"
"PO-Revision-Date: 2023-10-23 23:04+0200\n"
"Last-Translator: Daniel Rusek <mail@asciiwolf.com>\n"
"Language-Team: none\n"
"Language: cs\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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
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"
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
#: libmalcontent-ui/restrict-applications-dialog.c:222
#: libmalcontent-ui/restrict-applications-dialog.c:256
#, c-format
msgid "Restrict %s from using the following installed applications."
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:12
msgid "Restrict Applications"
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."
msgstr "Nenalezeny žádné aplikace k omezení."
#. 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"
msgstr "neznámé"
#: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397
#: libmalcontent-ui/user-controls.c:669
#: libmalcontent-ui/user-controls.c:303 libmalcontent-ui/user-controls.c:388
#: libmalcontent-ui/user-controls.c:641
msgid "All Ages"
msgstr "libovolný věk"
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:477
#: libmalcontent-ui/user-controls.c:470
#, c-format
msgid ""
"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."
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:482
#: libmalcontent-ui/user-controls.c:475
#, c-format
msgid "Prevents specified applications from being used by %s."
msgstr "Zabraňuje v používání určených aplikací uživatelem %s."
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:487
#: libmalcontent-ui/user-controls.c:480
#, c-format
msgid "Prevents %s from installing applications."
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"
msgstr "Omezení použití aplikací"
#: libmalcontent-ui/user-controls.ui:67
#: libmalcontent-ui/user-controls.ui:28
msgid "Restrict _Web Browsers"
msgstr "Omezit _webové prohlížeče"
#: libmalcontent-ui/user-controls.ui:151
#: libmalcontent-ui/user-controls.ui:51
msgid "_Restrict Applications"
msgstr "Omezit _aplikace"
#: libmalcontent-ui/user-controls.ui:230
#: libmalcontent-ui/user-controls.ui:73
msgid "Software Installation Restrictions"
msgstr "Omezení instalace softwaru"
#: libmalcontent-ui/user-controls.ui:280
#: libmalcontent-ui/user-controls.ui:77
msgid "Restrict Application _Installation"
msgstr "Omezit _instalaci aplikací"
#: libmalcontent-ui/user-controls.ui:365
#: libmalcontent-ui/user-controls.ui:99
msgid "Application _Suitability"
msgstr "Vhodno_st aplikací"
#: libmalcontent-ui/user-controls.ui:387
#: libmalcontent-ui/user-controls.ui:102
msgid ""
"Restricts browsing or installation of applications to applications suitable "
"for certain ages or above."
"Restricts the browsing or installation of applications unsuitable for this "
"age or younger."
msgstr ""
"Omezí prohlížení nebo instalaci aplikací na aplikace vhodné pro určitý věk "
"nebo výše."
"Omezí prohlížení nebo instalaci aplikací nevhodných pro tento věk nebo "
"mladší."
#. Translators: This documents the --user command line option to malcontent-control:
#: malcontent-control/application.c:102
@ -298,44 +256,44 @@ msgstr "Uživatel ke zvolení v UI"
msgid "USERNAME"
msgstr "UŽIVATEL"
#: malcontent-control/application.c:115
#: malcontent-control/application.c:116
msgid "— view and edit parental controls"
msgstr "— zobrazit a upravit rodičovskou kontrolu"
#. Translators: This is the title of the main window
#. 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.desktop.in:3
msgid "Parental Controls"
msgstr "Rodičovská kontrola"
#: malcontent-control/application.c:308
#: malcontent-control/application.c:309
msgid "Copyright © 2019, 2020 Endless Mobile, Inc."
msgstr "Copyright © 2019, 2020 Endless Mobile, Inc."
#. Translators: this should be "translated" to the
#. names of people who have translated Malcontent into
#. this language, one per line.
#: malcontent-control/application.c:313
#: malcontent-control/application.c:314
msgid "translator-credits"
msgstr "Daniel Rusek <mail@asciiwolf.com>"
#. Translators: "Malcontent" is the brand name of this
#. project, so should not be translated.
#: malcontent-control/application.c:319
#: malcontent-control/application.c:320
msgid "Malcontent Website"
msgstr "Webové stránky"
#: malcontent-control/application.c:337
#: malcontent-control/application.c:341
msgid "The help contents could not be displayed"
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"
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."
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!
#. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new
#.
#: malcontent-control/application.c:407
#: malcontent-control/application.c:421
#, c-format
msgid ""
"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-"
"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"
msgstr "Předchozí stránka"
#: malcontent-control/carousel.ui:74
#: malcontent-control/carousel.ui:57
msgid "Next Page"
msgstr "Následující stránka"
#: malcontent-control/main.ui:115
#: malcontent-control/main.ui:87
msgid "Permission Required"
msgstr "Vyžadováno oprávnění"
#: malcontent-control/main.ui:129
#: malcontent-control/main.ui:88
msgid ""
"Permission is required to view and change user parental controls settings."
msgstr ""
"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"
msgstr "Žádný běžný uživatelský účet"
#: malcontent-control/main.ui:199
#: malcontent-control/main.ui:111
msgid ""
"Parental controls can only be applied to standard user\n"
"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"
"účty. Ty mohou být vytvořeny v nastavení uživatelů."
#: malcontent-control/main.ui:212
#: malcontent-control/main.ui:115
msgid "_User Settings"
msgstr "Nastavení _uživatelů"
#: malcontent-control/main.ui:242
#: malcontent-control/main.ui:138
msgid "Loading…"
msgstr "Načítá se…"
#: malcontent-control/main.ui:305
#: malcontent-control/main.ui:171
msgid "_Help"
msgstr "_Nápověda"
#: malcontent-control/main.ui:309
#: malcontent-control/main.ui:175
msgid "_About Parental Controls"
msgstr "O _aplikaci Rodičovská kontrola"
@ -426,7 +384,7 @@ msgstr ""
msgid "Main window"
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"
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"
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"
#~ msgstr "Žádné kreslené násilí"

670
po/hi.po
View File

@ -1,50 +1,55 @@
# Hindi translations for malcontent package.
# Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER
# Copyright (C) 2022 THE malcontent'S COPYRIGHT HOLDER
# This file is distributed under the same license as the malcontent package.
# Automatically generated, 2020.
# Will Thompson <wjt@endlessm.com>, 202>, 202>-2022.
# Some of credits are lost, as the translations were pulled from Transifex to upstream, but the project does not exist on Transifex now.
# Hemish <hemish04082005@gmail.com>, 2022.
#
msgid ""
msgstr ""
"Project-Id-Version: malcontent\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-06-10 12:08+0100\n"
"PO-Revision-Date: 2020-04-17 21:58+0000\n"
"Last-Translator: Will Thompson <wjt@endlessm.com>, 2020\n"
"Language-Team: Hindi (https://www.transifex.com/endless-os/teams/9016/hi/)\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/"
"issues\n"
"POT-Creation-Date: 2022-07-25 03:26+0000\n"
"PO-Revision-Date: 2022-11-29 13:03+0530\n"
"Last-Translator: Hemish <hemish04082005@gmail.com>\n"
"Language-Team: Hindi <indlinux-hindi@lists.sourceforge.net https://indlinux."
"org/hindi>\n"
"Language: hi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Gtranslator 42.0\n"
#: accounts-service/com.endlessm.ParentalControls.policy.in:4
msgid "Change your own app filter"
msgstr "अपना खुद का ऐप फ़िल्टर बदलें"
msgstr "स्वयं के ऐप फ़िल्टर बदलें"
#: accounts-service/com.endlessm.ParentalControls.policy.in:5
msgid "Authentication is required to change your app filter."
msgstr "आपके ऐप फिल्टर को बदलने के लिए सत्यापन की आवश्यकता है।"
msgstr "स्वयं के ऐप फिल्टर को बदलने के लिए सत्यापन की आवश्यकता है।"
#: accounts-service/com.endlessm.ParentalControls.policy.in:14
msgid "Read your own app filter"
msgstr "अपना खुद का ऐप फिल्टर पढ़ें"
msgstr "स्वयं के ऐप फिल्टर पढ़ें"
#: accounts-service/com.endlessm.ParentalControls.policy.in:15
msgid "Authentication is required to read your app filter."
msgstr "आपके एप फ़िल्टर को पढ़ने के लिए प्रमाणीकरण आवश्यक है।"
msgstr "स्वयं के एप फ़िल्टर को पढ़ने के लिए प्रमाणीकरण आवश्यक है।"
#: accounts-service/com.endlessm.ParentalControls.policy.in:24
msgid "Change another users app filter"
msgstr "अन्य उपयोगकर्ता का ऐप फ़िल्टर बदलें"
msgstr "किसी अन्य उपयोगकर्ता के ऐप फ़िल्टर बदलें"
#: accounts-service/com.endlessm.ParentalControls.policy.in:25
msgid "Authentication is required to change another users app filter."
msgstr ""
"किसी अन्य उपयोगकर्ता के ऐप फ़िल्टर को बदलने के लिए प्रमाणीकरण की आवश्यकता होती है"
msgstr "किसी अन्य उपयोगकर्ता के ऐप फ़िल्टर को बदलने के लिए प्रमाणीकरण की आवश्यकता है।"
#: accounts-service/com.endlessm.ParentalControls.policy.in:34
msgid "Read another users app filter"
msgstr "अन्य उपयोगकर्ता का ऐप फ़िल्टर पढ़ें"
msgstr "किसी अन्य उपयोगकर्ता के ऐप फ़िल्टर पढ़ें"
#: accounts-service/com.endlessm.ParentalControls.policy.in:35
msgid "Authentication is required to read another users app filter."
@ -52,19 +57,19 @@ msgstr "किसी अन्य उपयोगकर्ता के ऐप
#: accounts-service/com.endlessm.ParentalControls.policy.in:44
msgid "Change your own session limits"
msgstr "अपने स्वयं के सेशन की सीमा को बदलें"
msgstr "स्वयं की सत्र सीमा को बदलें"
#: accounts-service/com.endlessm.ParentalControls.policy.in:45
msgid "Authentication is required to change your session limits."
msgstr "आपके सत्र की सीमा को बदलने के लिए सत्यापन की आवश्यकता है।"
msgstr "स्वयं की सत्र सीमा को बदलने के लिए सत्यापन की आवश्यकता है।"
#: accounts-service/com.endlessm.ParentalControls.policy.in:54
msgid "Read your own session limits"
msgstr "अपने स्वयं के सेशन की सीमा को पढ़ें"
msgstr "स्वयं की सत्र सीमा को पढ़ें"
#: accounts-service/com.endlessm.ParentalControls.policy.in:55
msgid "Authentication is required to read your session limits."
msgstr "आपके सत्र की सीमा को पढ़ने के लिए सत्यापन की आवश्यकता है।"
msgstr "स्वयं की सत्र सीमा को पढ़ने के लिए सत्यापन की आवश्यकता है।"
#: accounts-service/com.endlessm.ParentalControls.policy.in:64
msgid "Change another users session limits"
@ -72,7 +77,7 @@ msgstr "किसी अन्य उपयोगकर्ता की सत
#: accounts-service/com.endlessm.ParentalControls.policy.in:65
msgid "Authentication is required to change another users session limits."
msgstr "उपयोगकर्ता की सत्र सीमाओं को बदलने के लिए प्रमाणीकरण आवश्यक है"
msgstr "किसी अन्य उपयोगकर्ता की सत्र सीमाओं को बदलने के लिए प्रमाणीकरण आवश्यक है"
#: accounts-service/com.endlessm.ParentalControls.policy.in:74
msgid "Read another users session limits"
@ -84,19 +89,19 @@ msgstr "किसी अन्य उपयोगकर्ता की से
#: accounts-service/com.endlessm.ParentalControls.policy.in:84
msgid "Change your own account info"
msgstr "अपनी खुद की खाता जानकारी बदलें"
msgstr "स्वयं के खाते की जानकारी बदलें"
#: accounts-service/com.endlessm.ParentalControls.policy.in:85
msgid "Authentication is required to change your account info."
msgstr "आपके खाते की जानकारी बदलने के लिए प्रमाणीकरण आवश्यक है।"
msgstr "स्वयं के खाते की जानकारी बदलने के लिए प्रमाणीकरण आवश्यक है।"
#: accounts-service/com.endlessm.ParentalControls.policy.in:94
msgid "Read your own account info"
msgstr "अपने स्वयं के खाते की जानकारी पढ़ें"
msgstr "स्वयं के खाते की जानकारी पढ़ें"
#: accounts-service/com.endlessm.ParentalControls.policy.in:95
msgid "Authentication is required to read your account info."
msgstr "आपके खाते की जानकारी पढ़ने के लिए सत्यापन आवश्यक है।"
msgstr "स्वयं के खाते की जानकारी पढ़ने के लिए सत्यापन आवश्यक है।"
#: accounts-service/com.endlessm.ParentalControls.policy.in:104
msgid "Change another users account info"
@ -112,128 +117,82 @@ msgstr "अन्य उपयोगकर्ता के खाते की
#: accounts-service/com.endlessm.ParentalControls.policy.in:115
msgid "Authentication is required to read another users account info."
msgstr "उपयोगकर्ता के खाते की जानकारी को पढ़ने के लिए प्रमाणीकरण आवश्यक है।"
msgstr "किसी अन्य उपयोगकर्ता के खाते की जानकारी को पढ़ने के लिए प्रमाणीकरण आवश्यक है।"
#: libmalcontent/app-filter.c:694
#, c-format
msgid "App filter for user %u was in an unrecognized format"
msgstr "उपयोगकर्ता %u के लिए एप फ़िल्टर एक अपरिचित प्रारूप में था"
msgstr "उपयोगकर्ता %u के लिए एप फ़िल्टर एक अपरिचित प्रारूप में था"
#: libmalcontent/app-filter.c:725
#, c-format
msgid "OARS filter for user %u has an unrecognized kind %s"
msgstr "उपयोगकर्ता %u के लिए OARS फ़िल्टर के पास एक अपरिचित प्रकार का '%s' है। "
msgstr "उपयोगकर्ता %u के लिए OARS फ़िल्टर के पास एक अपरिचित प्रकार %s है।"
#: libmalcontent/manager.c:283 libmalcontent/manager.c:412
#: libmalcontent/manager.c:283 libmalcontent/manager.c:420
#: libmalcontent/manager.c:803
#, c-format
msgid "Not allowed to query app filter data for user %u"
msgid "Not allowed to query parental controls data for user %u"
msgstr "उपयोगकर्ता %u के लिए ऐप फ़िल्टर डेटा को क्वेरी करने की अनुमति नहीं है"
#: libmalcontent/manager.c:288
#, c-format
msgid "User %u does not exist"
msgstr "उपयोगकर्ता %u मौजूद नहीं है"
msgstr "उपयोगकर्ता %u मौजूद नहीं है"
#: libmalcontent/manager.c:394
#: libmalcontent/manager.c:296
msgid "System accounts service not available"
msgstr "सिस्टम खाता सेवा (AccountsService) उपलब्ध नहीं है।"
#: libmalcontent/manager.c:402
msgid "App filtering is globally disabled"
msgstr "ऐप फ़िल्टरिंग सार्वभौमिक स्तर पर निष्क्रिय है"
msgstr "ऐप फ़िल्टरिंग सार्वभौमिक स्तर पर निष्क्रिय है"
#: libmalcontent/manager.c:777
#: libmalcontent/manager.c:785
msgid "Session limits are globally disabled"
msgstr "सेशन की सीमा सार्वभौमिक स्तर पर निष्क्रिय है"
#: libmalcontent/manager.c:795
#, c-format
msgid "Not allowed to query session limits data for user %u"
msgstr "उपयोगकर्ता %u के लिए डेटा सत्र सीमा की क्वेरी करने की अनुमति नहीं है"
msgstr "सत्र सीमाएँ सार्वभौमिक स्तर पर निष्क्रिय हैं।"
#: libmalcontent/session-limits.c:306
#, c-format
msgid "Session limit for user %u was in an unrecognized format"
msgstr "उपयोगकर्ता %u के लिए सत्र सीमा एक अपरिचित प्रारूप में थी"
msgstr "उपयोगकर्ता %u के लिए सत्र सीमा एक अपरिचित प्रारूप में थी।"
#: libmalcontent/session-limits.c:328
#, c-format
msgid "Session limit for user %u has an unrecognized type %u"
msgstr "उपयोगकर्ता %u के लिए सत्र सीमा एक अपरिचित प्रकार की है '%u'"
msgstr "उपयोगकर्ता %u के लिए सत्र सीमा एक अपरिचित प्रकार %u की है।"
#: libmalcontent/session-limits.c:346
#, c-format
msgid "Session limit for user %u has invalid daily schedule %u%u"
msgstr "उपयोगकर्ता %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 ""
#: 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 ""
#: 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 ""
msgstr "उपयोगकर्ता %u के सत्र सीमा में अमान्य दैनिक शेड्यूल %u-%u है"
#. Translators: the placeholder is a users full name
#: libmalcontent-ui/restrict-applications-dialog.c:222
#: libmalcontent-ui/restrict-applications-dialog.c:223
#, c-format
msgid "Restrict %s from using the following installed applications."
msgstr "निम्न इंस्टाल हुई एप्लिकेशन के उपयोग से %s को प्रतिबंधित करें।"
#: libmalcontent-ui/restrict-applications-dialog.ui:6
#: libmalcontent-ui/restrict-applications-dialog.ui:12
msgid "Restrict Applications"
msgstr "एप्लीकेशन को प्रतिबंधित करें"
#: libmalcontent-ui/restrict-applications-selector.ui:24
#: libmalcontent-ui/restrict-applications-selector.ui:13
msgid "No applications found to restrict."
msgstr "प्रतिबंधित करने के लिए कोई भी एप्लिकेशन नहीं मिल।"
msgstr "प्रतिबंधित करने के लिए कोई भी एप्लिकेशन नहीं मिली।"
#. Translators: this is the full name for an unknown user account.
#: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253
#: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209
msgid "unknown"
msgstr "अज्ञात"
#: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425
#: libmalcontent-ui/user-controls.c:711
#: libmalcontent-ui/user-controls.c:303 libmalcontent-ui/user-controls.c:388
#: libmalcontent-ui/user-controls.c:641
msgid "All Ages"
msgstr "सभी आयु"
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:514
#: libmalcontent-ui/user-controls.c:470
#, c-format
msgid ""
"Prevents %s from running web browsers. Limited web content may still be "
@ -243,146 +202,177 @@ msgstr ""
"हो सकती है।"
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:519
#: libmalcontent-ui/user-controls.c:475
#, c-format
msgid "Prevents specified applications from being used by %s."
msgstr "%s को विशिष्ट एप्लीकेशन का उपयोग करने से रोकें।"
msgstr "%s को विशिष्ट एप्लीकेशन का उपयोग करने से रोकता है।"
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:524
#: libmalcontent-ui/user-controls.c:480
#, c-format
msgid "Prevents %s from installing applications."
msgstr " %s को एप्लिकेशन इंस्टॉल करने से रोकता है।"
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:529
#, c-format
msgid "Applications installed by %s will not appear for other users."
msgstr "%s द्वारा इंस्टॉल किए गए एप्लिकेशन अन्य उपयोगकर्ताओं के लिए उपलब्ध नहीं होंगे।"
#: libmalcontent-ui/user-controls.ui:17
#: libmalcontent-ui/user-controls.ui:25
msgid "Application Usage Restrictions"
msgstr "एप्लीकेशन उपयोग के प्रतिबंध"
msgstr "एप्लीकेशन उपयोग पर प्रतिबंध"
#: libmalcontent-ui/user-controls.ui:68
#: libmalcontent-ui/user-controls.ui:28
msgid "Restrict _Web Browsers"
msgstr "_वेब ब्राउज़रों को प्रतिबंधित करें"
msgstr "वेब ब्राउज़रों को प्रतिबंधित करें (_W)"
#: libmalcontent-ui/user-controls.ui:152
#: libmalcontent-ui/user-controls.ui:50
msgid "_Restrict Applications"
msgstr "_एप्लीकेशन प्रतिबंधित करें"
msgstr "एप्लीकेशन प्रतिबंधित करें (_R)"
#: libmalcontent-ui/user-controls.ui:231
#: libmalcontent-ui/user-controls.ui:72
msgid "Software Installation Restrictions"
msgstr "साफ्टवेयर इंस्टालेशन का प्रतिबंध"
msgstr "साफ्टवेयर इंस्टालेशन पर प्रतिबंध"
#: libmalcontent-ui/user-controls.ui:281
#: libmalcontent-ui/user-controls.ui:76
msgid "Restrict Application _Installation"
msgstr "एप्लीकेशन इंस्टालेशन को रोकें"
msgstr "एप्लीकेशन के इंस्टालेशन को रोकें (_I)"
#: libmalcontent-ui/user-controls.ui:366
msgid "Restrict Application Installation for _Others"
msgstr "_अन्य लोगों को एप्लिकेशन इंस्टॉलेशन करने से रोकें"
#: libmalcontent-ui/user-controls.ui:451
#: libmalcontent-ui/user-controls.ui:97
msgid "Application _Suitability"
msgstr "एप्लीकेशन की उपयुक्तता"
msgstr "एप्लीकेशन की उपयुक्तता (_S)"
#: libmalcontent-ui/user-controls.ui:473
#: libmalcontent-ui/user-controls.ui:100
msgid ""
"Restricts browsing or installation of applications to applications suitable "
"for certain ages or above."
msgstr ""
"ख़ास उम्र या उससे ऊपर के लोगों के लिए उपयुक्त एप्लिकेशन इंस्टाल या ब्राउज़िंग को प्रतिबंधित "
"करता है।"
"विशिष्ट उम्र या उससे ऊपर के लोगों के लिए उपयुक्त एप्लिकेशन इंस्टाल या ब्राउज़िंग को "
"प्रतिबंधित करता है।"
#. Translators: This documents the --user command line option to malcontent-control:
#: malcontent-control/application.c:102
msgid "User to select in the UI"
msgstr "UI में जो उपयोगकर्ता चुना जाना चाहिए"
# This is a place holder for command line field, thus left as such.
#. Translators: This is a placeholder for a command line argument value:
#: malcontent-control/application.c:104
msgid "USERNAME"
msgstr "USERNAME"
#: malcontent-control/application.c:116
msgid "— view and edit parental controls"
msgstr "— पैरेंटल कंट्रोल को देखें व उनका प्रबंधन करें"
#. Translators: This is the title of the main window
#. Translators: the name of the application as it appears in a software center
#: malcontent-control/application.c:105 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.desktop.in:3
msgid "Parental Controls"
msgstr "पैरेंटल कंट्रोल "
#: malcontent-control/application.c:270
#: malcontent-control/application.c:309
msgid "Copyright © 2019, 2020 Endless Mobile, Inc."
msgstr "कॉपीराइट © 2019, 2020 Endless Mobile, Inc."
#. Translators: this should be "translated" to the
#. names of people who have translated Malcontent into
#. this language, one per line.
#: malcontent-control/application.c:275
#: malcontent-control/application.c:314
msgid "translator-credits"
msgstr ""
"Hemish <hemish04082005@gmail.com>\n"
"https://www.transifex.com/endless-os/teams/9016/hi/"
# 'Malcontent' is a brand name, so to clarify for Hindi audience, it is put in inverted commas
#. Translators: "Malcontent" is the brand name of this
#. project, so should not be translated.
#: malcontent-control/application.c:281
#: malcontent-control/application.c:320
msgid "Malcontent Website"
msgstr "अनुचित सामग्री युक्त वेबसाइट"
msgstr "'Malcontent' की वेबसाइट"
#: malcontent-control/application.c:299
#: malcontent-control/application.c:341
msgid "The help contents could not be displayed"
msgstr "सहायता सामग्री प्रदर्शित नहीं की जा सकी"
#: malcontent-control/application.c:336
#: malcontent-control/application.c:388
msgid "Failed to load user data from the system"
msgstr "सिस्टम से यूजर डेटा को लोड करने में असक्षम"
msgstr "सिस्टम से उपयोगकर्ता डेटा को लोड करने में असक्षम"
#: malcontent-control/application.c:338
#: malcontent-control/application.c:390
msgid "Please make sure that the AccountsService is installed and enabled."
msgstr "कृपया सुनिश्चित करें कि खातासर्विस इनस्टॉल है और सक्रीय है।"
msgstr "कृपया सुनिश्चित करें कि AccountsService इनस्टॉल है और सक्रिय है।"
#: malcontent-control/carousel.ui:48
# A google-translated link of commonsensemedia.org has been provided, as the language is not available at the site, and any good localised guide does not exist.
#. Translators: Replace the link to commonsensemedia.org with some
#. * localised guidance for parents/carers on how to set restrictions on
#. * their child/caree in a responsible way which is in keeping with the
#. * best practice and culture of the region. If no suitable localised
#. * guidance exists, and if the default commonsensemedia.org link is not
#. * suitable, please file an issue against malcontent so we can discuss
#. * further!
#. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new
#.
#: malcontent-control/application.c:421
#, c-format
msgid ""
"Its recommended that restrictions are set as part of an ongoing "
"conversation with %s. <a href='https://www.commonsensemedia.org/privacy-and-"
"internet-safety'>Read guidance</a> on what to consider."
msgstr ""
"यह सलाह दी जाती है कि प्रतिबंध %s से बातचीत के हिस्से हैं। कृपया <a href='https://www-"
"commonsensemedia-org.translate.goog/articles/online-safety?"
"_x_tr_sl=auto&_x_tr_tl=hi'>गाइड को पढें </a> व जानें कि क्या-क्या चीज़ों पर ध्यान "
"रखना चाहिए।"
#: malcontent-control/carousel.ui:38
msgid "Previous Page"
msgstr "पिछला पेज"
msgstr "पिछला पृष्ठ"
#: malcontent-control/carousel.ui:74
#: malcontent-control/carousel.ui:57
msgid "Next Page"
msgstr "अगला पेज"
msgstr "अगला पृष्ठ"
#: malcontent-control/main.ui:93
#: malcontent-control/main.ui:87
msgid "Permission Required"
msgstr "अनुमति आवश्यक है"
#: malcontent-control/main.ui:107
#: malcontent-control/main.ui:88
msgid ""
"Permission is required to view and change user parental controls settings."
msgstr "यूजर पैरेंटल नियंत्रण की सेटिंग्स को देखने और बदलने के लिए अनुमति की आवश्यकता है।"
#: malcontent-control/main.ui:148
msgid "No Child Users Configured"
msgstr "कोई चाइल्ड यूजर कॉन्फिगर नहीं किया गया"
#: malcontent-control/main.ui:162
msgid ""
"No child users are currently set up on the system. Create one before setting "
"up their parental controls."
msgstr ""
"वर्तमान में कोई भी बच्चा उपयोगकर्ता सिस्टम पर सेट नहीं है। उनके पैरेंटल कंट्रोल स्थापित करने "
"से पहले एक निर्मित करें।"
"उपयोगकर्ता पैरेंटल नियंत्रण की सेटिंग्स को देखने और बदलने के लिए अनुमति की आवश्यकता है।"
#: malcontent-control/main.ui:174
msgid "Create _Child User"
msgstr "चाइल्ड यूजर बनायें"
#: malcontent-control/main.ui:110
msgid "No Standard User Accounts"
msgstr "कोई साधारण उपयोगकर्ता खाता नहीं पाया गया"
#: malcontent-control/main.ui:202
#: malcontent-control/main.ui:111
msgid ""
"Parental controls can only be applied to standard user\n"
"accounts. These can be created in the user settings."
msgstr ""
"उपयोगकर्ता प्रतिबंध का नियंत्रण केवल सामान्य उपयोगकर्ता खातों पर लागू किया\n"
"जा सकता है। इन्हें उपयोगकर्ता सेटिंग्स में प्रबंधित किया जा सकता है।"
#: malcontent-control/main.ui:115
msgid "_User Settings"
msgstr "उपयोगकर्ता सेटिंग्स"
#: malcontent-control/main.ui:138
msgid "Loading…"
msgstr "लोड हो रहा है…"
#: malcontent-control/main.ui:265
#: malcontent-control/main.ui:171
msgid "_Help"
msgstr "_सहायता"
msgstr "सहायता (_H)"
#: malcontent-control/main.ui:269
#: malcontent-control/main.ui:175
msgid "_About Parental Controls"
msgstr "_पैरेंटल कंट्रोल के बारे में"
msgstr "'पैरेंटल कंट्रोल' का परिचय (_A)"
#. Translators: the brief summary of the application as it appears in a software center.
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4
msgid "Set parental controls and monitor usage by users"
msgstr "पैरेंटल नियंत्रण सेट करें और यूजर द्वारा प्रयोग को मॉनीटर करें"
msgstr "पैरेंटल नियंत्रण सेट करें और उपयोगकर्ता द्वारा प्रयोग को मॉनीटर करें"
#. Translators: These are the application description paragraphs in the AppData file.
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16
@ -392,63 +382,26 @@ msgid ""
"software they can run."
msgstr ""
"उपयोगकर्ताओं के पैरेंटल कंट्रोल प्रतिबंधों को प्रबंधित करें, यह नियंत्रित करते हुए कि वे कितने "
"समय तक कंप्यूटर का उपयोग कर सकते हैं, वे कौन स सॉफ़्टवेयर इंस्टाल कर सकते हैं और कौन से "
"समय तक कंप्यूटर का उपयोग कर सकते हैं, वे कौन स सॉफ़्टवेयर इंस्टाल कर सकते हैं और कौन से "
"इंस्टाल हो चुके सॉफ़्टवेयर चला सकते हैं।"
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25
msgid "Main window"
msgstr "मुख्य विंडो"
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39
msgid "The GNOME Project"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59
msgid "Minor improvements to parental controls application UI"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51
msgid "Add a user manual"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52
msgid "Translation updates"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60
msgid "Translations to Ukrainian and Polish"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67
msgid "Improve parental controls application UI and add icon"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68
msgid "Support for indicating which accounts are parent accounts"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75
msgid "Initial release of basic parental controls application"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76
msgid "Support for setting app installation and run restrictions on users"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83
msgid "Maintenance release of underlying parental controls library"
msgstr ""
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7
msgid "org.freedesktop.MalcontentControl"
msgstr ""
msgstr "दी गनोम प्रॉजेक्ट"
#. 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 ""
"parental controls;screen time;app restrictions;web browser restrictions;oars;"
"usage;usage limit;kid;child;"
msgstr ""
"अभिभावक नियंत्रण; स्क्रीन समय; ऐप प्रतिबंध; वेब ब्राउज़र पर प्रतिबंध; ऑर्स; उपयोग; उपयोग "
"की सीमा; बच्चा;"
"की सीमा; बच्चा;parental controls;screen time;app restrictions;web browser "
"restrictions;oars;usage;usage limit;kid;child;"
#: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9
msgid "Manage parental controls"
@ -456,7 +409,7 @@ msgstr "पैरेंटल कंट्रोल का प्रबंधन
#: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10
msgid "Authentication is required to read and change user parental controls"
msgstr "उपयोगकर्ता अभिभावक नियंत्रणों को पढ़ने और बदलने के लिए सत्यापन आवश्यक है"
msgstr "उपयोगकर्ता प्रतिबंध व नियंत्रणों को पढ़ने और बदलने के लिए सत्यापन आवश्यक है"
#: malcontent-control/user-selector.c:426
msgid "Your account"
@ -467,315 +420,20 @@ msgstr "आपका खाता"
#: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188
#, c-format
msgid "User %s has no time limits enabled"
msgstr "उपयोगकर्ता '%s' की कोई समय सीमा सक्षम नहीं है"
msgstr "उपयोगकर्ता '%s' के लिए कोई समय सीमा सक्रिय नहीं है।"
#: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172
#, c-format
msgid "Error getting session limits for user %s: %s"
msgstr "उपयोगकर्ता %s: %s के लिए सेशन सीमा प्राप्त करने में समस्या हुई है"
msgstr "उपयोगकर्ता %s के लिए सेशन सत्र की सीमाएँ प्राप्त करने में समस्या हुई: %s"
#: pam/pam_malcontent.c:182
#, c-format
msgid "User %s has no time remaining"
msgstr "उपयोगकर्ता %s के पास समय नहीं बचा है"
msgstr "उपयोगकर्ता %s के पास समय नहीं बचा है"
#: pam/pam_malcontent.c:200
#, c-format
msgid "Error setting time limit on login session: %s"
msgstr "%s के लॉगिन सेशन पर समय सीमा सेट करने में समस्या हुई है"
msgstr "%s के लॉगिन सत्र पर समय सीमा सेट करने में त्रुटि हुई"
#~ msgid "No cartoon violence"
#~ msgstr "कोई कार्टून हिंसा नहीं"
#~ msgid "Cartoon characters in unsafe situations"
#~ msgstr "असुरक्षित परिस्थितियों में कार्टून कैरेक्टर"
#~ msgid "Cartoon characters in aggressive conflict"
#~ msgstr "आक्रामक विरोध में कार्टून कैरेक्टर"
#~ msgid "Graphic violence involving cartoon characters"
#~ msgstr "कार्टून कैरेक्टर में शामिल ग्राफ़िक हिंसा"
#~ msgid "No fantasy violence"
#~ msgstr "कोई काल्पनिक हिंसा नहीं"
#~ msgid "Characters in unsafe situations easily distinguishable from reality"
#~ msgstr "असुरक्षित परिस्थितियों वाले कैरेक्टर को रिएलिटी से आसानी से अलग होने योग्य है"
#~ msgid ""
#~ "Characters in aggressive conflict easily distinguishable from reality"
#~ msgstr "आक्रामक विरोध वाले कैरेक्टर को रिएलिटी से आसानी से अलग होने योग्य है"
#~ msgid "Graphic violence easily distinguishable from reality"
#~ msgstr "ग्राफ़िक हिंसा रिएलिटी से आसानी से अलग होने योग्य है"
#~ msgid "No realistic violence"
#~ msgstr "कोई यथार्थवादी हिंसा नहीं"
#~ msgid "Mildly realistic characters in unsafe situations"
#~ msgstr "असुरक्षित परिस्थितियों में थोड़े यथार्थवादी चरित्र"
#~ msgid "Depictions of realistic characters in aggressive conflict"
#~ msgstr "आक्रामक विरोध में वास्तविक कैरेक्टर का विवरण"
#~ msgid "Graphic violence involving realistic characters"
#~ msgstr "ग्राफ़िक हिंसा वाले वास्तविक कैरेक्टर"
#~ msgid "No bloodshed"
#~ msgstr "कोई रक्तपात नहीं"
#~ msgid "Unrealistic bloodshed"
#~ msgstr "अवास्तविक रक्तपात"
#~ msgid "Realistic bloodshed"
#~ msgstr "वास्तविक रक्तपात"
#~ msgid "Depictions of bloodshed and the mutilation of body parts"
#~ msgstr "रक्तपात और शरीर के अंगों में विकृति का विवरण"
#~ msgid "No sexual violence"
#~ msgstr "कोई यौन हिंसा नहीं"
#~ msgid "Rape or other violent sexual behavior"
#~ msgstr "बलात्कार या अन्य हिंसात्मक लैंगिक व्यवहार"
#~ msgid "No references to alcohol"
#~ msgstr "एल्कोहल के कोई संदर्भ नहीं"
#~ msgid "References to alcoholic beverages"
#~ msgstr "एल्कोहल वाले पेय पदार्थों का संदर्भ"
#~ msgid "Use of alcoholic beverages"
#~ msgstr "एल्कोहल वाले पेयपदार्थों का उपयोग"
#~ msgid "No references to illicit drugs"
#~ msgstr "अवैध नशीली दवाओं के कोई संदर्भ नहीं"
#~ msgid "References to illicit drugs"
#~ msgstr "अवैध ड्रग का संदर्भ"
#~ msgid "Use of illicit drugs"
#~ msgstr "अवैध ड्रग का उपयोग"
#~ msgid "References to tobacco products"
#~ msgstr "तंबाकू के उत्पादों का संदर्भ"
#~ msgid "Use of tobacco products"
#~ msgstr "तंबाकू के उत्पादों का उपयोग"
#~ msgid "No nudity of any sort"
#~ msgstr "किसी प्रकार की कोई नग्नता नहीं"
#~ msgid "Brief artistic nudity"
#~ msgstr "संक्षिप्त कलात्मक नग्नता"
#~ msgid "Prolonged nudity"
#~ msgstr "लंबे समय तक नग्नता"
#~ msgid "No references or depictions of sexual nature"
#~ msgstr "यौन प्रकृति के कोई संदर्भ या चित्रण नहीं"
#~ msgid "Provocative references or depictions"
#~ msgstr "उत्तेजक संदर्भ या विवरण"
#~ msgid "Sexual references or depictions"
#~ msgstr "लैंगिक संदर्भ या विवरण"
#~ msgid "Graphic sexual behavior"
#~ msgstr "ग्राफ़िक लैंगिक व्यवहार"
#~ msgid "No profanity of any kind"
#~ msgstr "किसी प्रकार की कोई गाली नहीं"
#~ msgid "Mild or infrequent use of profanity"
#~ msgstr "गलत आचरण का माइल्ड या कभी कभी उपयोग"
#~ msgid "Moderate use of profanity"
#~ msgstr "गलत आचरण का मॉडरेट उपयोग"
#~ msgid "Strong or frequent use of profanity"
#~ msgstr "गलत आचरण का अधिक या बार-बार उपयोग"
#~ msgid "No inappropriate humor"
#~ msgstr "कोई अनुचित हास्य नहीं"
#~ msgid "Slapstick humor"
#~ msgstr "हँसी मज़ाक"
#~ msgid "Vulgar or bathroom humor"
#~ msgstr "अश्लील या बाथरुम संबंधी हास्य"
#~ msgid "Mature or sexual humor"
#~ msgstr "वयस्क या लिंग संबंधी हास्य"
#~ msgid "No discriminatory language of any kind"
#~ msgstr "किसी प्रकार की कोई भेदभावपूर्ण भाषा नहीं"
#~ msgid "Negativity towards a specific group of people"
#~ msgstr "लोगों के किसी विशेष समूह के लिए नकारात्मकता"
#~ msgid "Discrimination designed to cause emotional harm"
#~ msgstr "भावनात्मक नुकसान पहुँचाने के लिए निर्मित भेदभाव"
#~ msgid "Explicit discrimination based on gender, sexuality, race or religion"
#~ msgstr "लिंग, लिंग संबंध, जाति या धर्म के आधार पर सुस्पष्ट भेदभाव"
#~ msgid "No advertising of any kind"
#~ msgstr "किसी प्रकार का कोई विज्ञापन नहीं"
#~ msgid "Product placement"
#~ msgstr "उत्पाद का प्रतिस्थापन"
#~ msgid "Explicit references to specific brands or trademarked products"
#~ msgstr "विशेष ब्रांड या ट्रेडमार्क उत्पादों के लिए सुस्पष्ट संदर्भ"
#~ msgid "Users are encouraged to purchase specific real-world items"
#~ msgstr ""
#~ "उपयोगकर्ताओं को वास्तविक दुनिया के विशिष्ट सामानों को खरीदने के लिए प्रोत्साहित किया "
#~ "जाता है"
#~ msgid "No gambling of any kind"
#~ msgstr "किसी प्रकार का कोई जुआ नहीं"
#~ msgid "Gambling on random events using tokens or credits"
#~ msgstr "टोकन या क्रेडिट का उपयोग करके जुआं या निरुदेश्य ईवेंट"
#~ msgid "Gambling using “play” money"
#~ msgstr "\"प्ले\" धन का उपयोग करके जुआ"
#~ msgid "Gambling using real money"
#~ msgstr "वास्तविक धन का उपयोग जुआ"
#~ msgid "No ability to spend money"
#~ msgstr "धन व्यय करने की कोई क्षमता नहीं"
#~ msgid "Users are encouraged to donate real money"
#~ msgstr "उपयोगकर्ताओं को वास्तविक धन दान करने के लिए प्रोत्साहित किया जाता है"
#~ msgid "Ability to spend real money in-game"
#~ msgstr "गेम में वास्तविक धन व्यय करने की क्षमता"
#~ msgid "No way to chat with other users"
#~ msgstr "अन्य उपयोगकर्ताओं के साथ चैट करने का कोई तरीका नहीं है"
#~ msgid "User-to-user game interactions without chat functionality"
#~ msgstr "चैट कार्यात्मकता के बिना उपयोगकर्ता-से-उपयोगकर्ता गेम संवाद"
#~ msgid "Moderated chat functionality between users"
#~ msgstr "उपयोगकर्ताओं के मध्य मॉडरेटेड चैट कार्यक्षमता"
#~ msgid "Uncontrolled chat functionality between users"
#~ msgstr "उपयोगकर्ताओं के मध्य अनियंत्रित चैट कार्यक्षमता"
#~ msgid "No way to talk with other users"
#~ msgstr "यह अन्य उपयोगकर्ताओं के साथ बात करने का कोई तरीका नहीं"
#~ msgid "Uncontrolled audio or video chat functionality between users"
#~ msgstr "उपयोगकर्ताओं के बीच अनियंत्रित ऑडियो और वीडियो चैट कार्यात्मकता"
#~ msgid "No sharing of social network usernames or email addresses"
#~ msgstr "सामाजिक नेटवर्क उपयोगकर्ता नामों या ईमेल पतों का कोई साझाकरण नहीं"
#~ msgid "Sharing social network usernames or email addresses"
#~ msgstr "सामाजिक नेटवर्क उपयोगकर्ता नाम या ईमेल पतों का साझाकरण"
#~ msgid "No sharing of user information with 3rd parties"
#~ msgstr "तृतीय पक्षों के साथ उपयोगकर्ता जानकारी का कोई साझाकरण नहीं"
#~ msgid "Checking for the latest application version"
#~ msgstr "नवीनतम एप्लिकेशन संस्करण के लिए जांच की जा रही है"
#~ msgid "Sharing diagnostic data that does not let others identify the user"
#~ msgstr ""
#~ "डाइग्नोस्टिक डेटा शेयर करना जो दूसरों को उपयोगकर्ता की पहचान करने की अनुमति नहीं "
#~ "देता है"
#~ msgid "Sharing information that lets others identify the user"
#~ msgstr "वह जानकारी शेयर करें जिससे अन्य लोग उपयोगकर्ता को पहचान सकें"
#~ msgid "No sharing of physical location to other users"
#~ msgstr "अन्य उपयोगकर्ताओं के साथ भौतिक स्थान का कोई साझाकरण नहीं"
#~ msgid "Sharing physical location to other users"
#~ msgstr "अन्य उपयोगकर्ताओं के साथ भौतिक स्थान साझा करना"
#~ msgid "No references to homosexuality"
#~ msgstr "समलैंगिकता का कोई संदर्भ नहीं"
#~ msgid "Indirect references to homosexuality"
#~ msgstr "समलैंगिकता का परोक्ष संदर्भ"
#~ msgid "Kissing between people of the same gender"
#~ msgstr "एक ही लिंग के लोगों के बीच चुंबन"
#~ msgid "Graphic sexual behavior between people of the same gender"
#~ msgstr "एक ही लिंग के लोगों के बीच ग्राफिक यौन व्यवहार"
#~ msgid "No references to prostitution"
#~ msgstr "वेश्यावृत्ति का कोई संदर्भ नहीं है"
#~ msgid "Indirect references to prostitution"
#~ msgstr "वेश्यावृत्ति के लिए अप्रत्यक्ष संदर्भ"
#~ msgid "Direct references to prostitution"
#~ msgstr "वेश्यावृत्ति का सीधा संदर्भ"
#~ msgid "Graphic depictions of the act of prostitution"
#~ msgstr "वेश्यावृत्ति के कार्यों का ग्राफिक चित्रण"
#~ msgid "No references to adultery"
#~ msgstr "व्यभिचार का कोई संदर्भ नहीं"
#~ msgid "Indirect references to adultery"
#~ msgstr "व्यभिचार के लिए अप्रत्यक्ष संदर्भ"
#~ msgid "Direct references to adultery"
#~ msgstr "व्यभिचार का प्रत्यक्ष संदर्भ"
#~ msgid "Graphic depictions of the act of adultery"
#~ msgstr "व्यभिचार अधिनियम के ग्राफिक चित्रण"
#~ msgid "No sexualized characters"
#~ msgstr "कोई यौन सम्बंधित शब्द नहीं है"
#~ msgid "Scantily clad human characters"
#~ msgstr "असाधारण रूप से मानवीय चरित्रों को ढकते हैं"
#~ msgid "Overtly sexualized human characters"
#~ msgstr "अति कामुक मानव पात्र "
#~ msgid "No references to desecration"
#~ msgstr "अपवित्रता का कोई संदर्भ नहीं"
#~ msgid "Depictions or references to historical desecration"
#~ msgstr "ऐतिहासिक अवनति का चित्रण या संदर्भ"
#~ msgid "Depictions of modern-day human desecration"
#~ msgstr "आधुनिक-मानव की निराशा का चित्रण"
#~ msgid "Graphic depictions of modern-day desecration"
#~ msgstr "आधुनिक समय की असमानताओं के ग्राफिक चित्रण"
#~ msgid "No visible dead human remains"
#~ msgstr "मृत मानव के प्रत्यक्ष अवशेष नहीं हैं"
#~ msgid "Visible dead human remains"
#~ msgstr "दर्शनीय मृत मानव अवशेष"
#~ msgid "Dead human remains that are exposed to the elements"
#~ msgstr "मृत मानव के अवशेष जो तत्वों के लिए अनावृत है"
#~ msgid "Graphic depictions of desecration of human bodies"
#~ msgstr "मानव शरीर की अपवित्रता का ग्राफिक चित्रण"
#~ msgid "No references to slavery"
#~ msgstr "दासता का कोई संदर्भ नहीं"
#~ msgid "Depictions or references to historical slavery"
#~ msgstr "ऐतिहासिक गुलामी के संदर्भ या वर्णन"
#~ msgid "Depictions of modern-day slavery"
#~ msgstr "आधुनिक गुलामी के वर्णन"
#~ msgid "Graphic depictions of modern-day slavery"
#~ msgstr "आधुनिक काल की दासता का ग्राफिक चित्रण"

701
po/hu.po
View File

@ -1,381 +1,386 @@
# Hungarian translations for malcontent package.
# Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER
# Hungarian translation for malcontent.
# Copyright (C) 2022 Free Software Foundation, Inc.
# This file is distributed under the same license as the malcontent package.
# Automatically generated, 2020.
#
# Balázs Úr <ur.balazs at fsf dot hu>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: malcontent\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-06-10 12:04+0100\n"
"PO-Revision-Date: 2020-04-15 13:42+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/"
"issues\n"
"POT-Creation-Date: 2022-07-25 03:26+0000\n"
"PO-Revision-Date: 2022-09-22 01:02+0200\n"
"Last-Translator: Balázs Úr <ur.balazs at fsf dot hu>\n"
"Language-Team: Hungarian <gnome-hu-list at gnome dot org>\n"
"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 19.12.3\n"
#: accounts-service/com.endlessm.ParentalControls.policy.in:4
msgid "Change your own app filter"
msgstr ""
msgstr "A saját alkalmazásszűrőjének megváltoztatása"
#: accounts-service/com.endlessm.ParentalControls.policy.in:5
msgid "Authentication is required to change your app filter."
msgstr ""
msgstr "Hitelesítés szükséges az alkalmazásszűrőjének megváltoztatásához."
#: accounts-service/com.endlessm.ParentalControls.policy.in:14
msgid "Read your own app filter"
msgstr ""
msgstr "A saját alkalmazásszűrőjének olvasása"
#: accounts-service/com.endlessm.ParentalControls.policy.in:15
msgid "Authentication is required to read your app filter."
msgstr ""
msgstr "Hitelesítés szükséges az alkalmazásszűrőjének olvasásához."
#: accounts-service/com.endlessm.ParentalControls.policy.in:24
msgid "Change another users app filter"
msgstr ""
msgstr "Egy másik felhasználó alkalmazásszűrőjének megváltoztatása"
#: accounts-service/com.endlessm.ParentalControls.policy.in:25
msgid "Authentication is required to change another users app filter."
msgstr ""
"Hitelesítés szükséges egy másik felhasználó alkalmazásszűrőjének "
"megváltoztatásához."
#: accounts-service/com.endlessm.ParentalControls.policy.in:34
msgid "Read another users app filter"
msgstr ""
msgstr "Egy másik felhasználó alkalmazásszűrőjének olvasása"
#: accounts-service/com.endlessm.ParentalControls.policy.in:35
msgid "Authentication is required to read another users app filter."
msgstr ""
"Hitelesítés szükséges egy másik felhasználó alkalmazásszűrőjének olvasásához."
#: accounts-service/com.endlessm.ParentalControls.policy.in:44
msgid "Change your own session limits"
msgstr ""
msgstr "A saját munkamenetkorlátainak megváltoztatása"
#: accounts-service/com.endlessm.ParentalControls.policy.in:45
msgid "Authentication is required to change your session limits."
msgstr ""
msgstr "Hitelesítés szükséges a munkamenetkorlátainak megváltoztatásához."
#: accounts-service/com.endlessm.ParentalControls.policy.in:54
msgid "Read your own session limits"
msgstr ""
msgstr "A saját munkamenetkorlátainak olvasása"
#: accounts-service/com.endlessm.ParentalControls.policy.in:55
msgid "Authentication is required to read your session limits."
msgstr ""
msgstr "Hitelesítés szükséges a munkamenetkorlátainak olvasásához."
#: accounts-service/com.endlessm.ParentalControls.policy.in:64
msgid "Change another users session limits"
msgstr ""
msgstr "Egy másik felhasználó munkamenetkorlátainak megváltoztatása"
#: accounts-service/com.endlessm.ParentalControls.policy.in:65
msgid "Authentication is required to change another users session limits."
msgstr ""
"Hitelesítés szükséges egy másik felhasználó munkamenetkorlátainak "
"megváltoztatásához."
#: accounts-service/com.endlessm.ParentalControls.policy.in:74
msgid "Read another users session limits"
msgstr ""
msgstr "Egy másik felhasználó munkamenetkorlátainak olvasása"
#: accounts-service/com.endlessm.ParentalControls.policy.in:75
msgid "Authentication is required to read another users session limits."
msgstr ""
"Hitelesítés szükséges egy másik felhasználó munkamenetkorlátainak "
"olvasásához."
#: accounts-service/com.endlessm.ParentalControls.policy.in:84
msgid "Change your own account info"
msgstr ""
msgstr "A saját fiókinformációinak megváltoztatása"
#: accounts-service/com.endlessm.ParentalControls.policy.in:85
msgid "Authentication is required to change your account info."
msgstr ""
msgstr "Hitelesítés szükséges a fiókinformációinak megváltoztatásához."
#: accounts-service/com.endlessm.ParentalControls.policy.in:94
msgid "Read your own account info"
msgstr ""
msgstr "A saját fiókinformációinak olvasása"
#: accounts-service/com.endlessm.ParentalControls.policy.in:95
msgid "Authentication is required to read your account info."
msgstr ""
msgstr "Hitelesítés szükséges a fiókinformációinak olvasásához."
#: accounts-service/com.endlessm.ParentalControls.policy.in:104
msgid "Change another users account info"
msgstr ""
msgstr "Egy másik felhasználó fiókinformációinak megváltoztatása"
#: accounts-service/com.endlessm.ParentalControls.policy.in:105
msgid "Authentication is required to change another users account info."
msgstr ""
"Hitelesítés szükséges egy másik felhasználó fiókinformációinak "
"megváltoztatásához."
#: accounts-service/com.endlessm.ParentalControls.policy.in:114
msgid "Read another users account info"
msgstr ""
msgstr "Egy másik felhasználó fiókinformációinak olvasása"
#: accounts-service/com.endlessm.ParentalControls.policy.in:115
msgid "Authentication is required to read another users account info."
msgstr ""
"Hitelesítés szükséges egy másik felhasználó fiókinformációinak olvasásához."
#: libmalcontent/app-filter.c:694
#, c-format
msgid "App filter for user %u was in an unrecognized format"
msgstr ""
msgstr "%u felhasználó alkalmazásszűrője felismerhetetlen formátumban volt"
#: libmalcontent/app-filter.c:725
#, c-format
msgid "OARS filter for user %u has an unrecognized kind %s"
msgstr ""
msgstr "%u felhasználó OARS-szűrője felismerhetetlen „%s” fajtájú"
#: libmalcontent/manager.c:283 libmalcontent/manager.c:412
#: libmalcontent/manager.c:283 libmalcontent/manager.c:420
#: libmalcontent/manager.c:803
#, c-format
msgid "Not allowed to query app filter data for user %u"
msgid "Not allowed to query parental controls data for user %u"
msgstr ""
"Nem engedélyezett %u felhasználó szülői felügyeleti adatainak lekérdezése"
#: libmalcontent/manager.c:288
#, c-format
msgid "User %u does not exist"
msgstr ""
msgstr "%u felhasználó nem létezik"
#: libmalcontent/manager.c:394
#: libmalcontent/manager.c:296
msgid "System accounts service not available"
msgstr "A rendszer fiókjainak szolgáltatása nem érhető el"
#: libmalcontent/manager.c:402
msgid "App filtering is globally disabled"
msgstr ""
msgstr "Az alkalmazásszűrés globálisan le van tiltva"
#: libmalcontent/manager.c:777
#: libmalcontent/manager.c:785
msgid "Session limits are globally disabled"
msgstr ""
#: libmalcontent/manager.c:795
#, c-format
msgid "Not allowed to query session limits data for user %u"
msgstr ""
msgstr "A munkamenetkorlátok globálisan le vannak tiltva"
#: libmalcontent/session-limits.c:306
#, c-format
msgid "Session limit for user %u was in an unrecognized format"
msgstr ""
msgstr "%u felhasználó munkamenetkorlátja felismerhetetlen formátumban volt"
#: libmalcontent/session-limits.c:328
#, c-format
msgid "Session limit for user %u has an unrecognized type %u"
msgstr ""
msgstr "%u felhasználó munkamenetkorlátjának felismerhetetlen „%u” típusa van"
#: libmalcontent/session-limits.c:346
#, c-format
msgid "Session limit for user %u has invalid daily schedule %u%u"
msgstr ""
#. 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 ""
#: 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 ""
#: 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 ""
"%u felhasználó munkamenetkorlátjának érvénytelen %u%u napi ütemezése van"
#. Translators: the placeholder is a users full name
#: libmalcontent-ui/restrict-applications-dialog.c:222
#: libmalcontent-ui/restrict-applications-dialog.c:223
#, c-format
msgid "Restrict %s from using the following installed applications."
msgstr ""
"%s korlátozása abban, hogy a következő telepített alkalmazásokat használja."
#: libmalcontent-ui/restrict-applications-dialog.ui:6
#: libmalcontent-ui/restrict-applications-dialog.ui:12
msgid "Restrict Applications"
msgstr ""
msgstr "Alkalmazások korlátozása"
#: libmalcontent-ui/restrict-applications-selector.ui:24
#: libmalcontent-ui/restrict-applications-selector.ui:13
msgid "No applications found to restrict."
msgstr ""
msgstr "Nem találhatók korlátozandó alkalmazások."
#. Translators: this is the full name for an unknown user account.
#: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253
#: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209
msgid "unknown"
msgstr ""
msgstr "ismeretlen"
#: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425
#: libmalcontent-ui/user-controls.c:711
#: libmalcontent-ui/user-controls.c:303 libmalcontent-ui/user-controls.c:388
#: libmalcontent-ui/user-controls.c:641
msgid "All Ages"
msgstr ""
msgstr "Összes életkor"
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:514
#: libmalcontent-ui/user-controls.c:470
#, c-format
msgid ""
"Prevents %s from running web browsers. Limited web content may still be "
"available in other applications."
msgstr ""
"Megakadályozza, hogy %s webböngészőket futtasson. Korlátozott webes tartalom "
"továbbra is elérhető lehet egyéb alkalmazásokban."
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:519
#: libmalcontent-ui/user-controls.c:475
#, c-format
msgid "Prevents specified applications from being used by %s."
msgstr ""
msgstr "Megakadályozza, hogy %s a megadott alkalmazásokat használja."
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:524
#: libmalcontent-ui/user-controls.c:480
#, c-format
msgid "Prevents %s from installing applications."
msgstr ""
msgstr "Megakadályozza, hogy %s alkalmazásokat telepítsen."
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:529
#, c-format
msgid "Applications installed by %s will not appear for other users."
msgstr ""
#: libmalcontent-ui/user-controls.ui:17
#: libmalcontent-ui/user-controls.ui:25
msgid "Application Usage Restrictions"
msgstr ""
msgstr "Alkalmazáshasználati korlátozások"
#: libmalcontent-ui/user-controls.ui:68
#: libmalcontent-ui/user-controls.ui:28
msgid "Restrict _Web Browsers"
msgstr ""
msgstr "_Webböngészők korlátozása"
#: libmalcontent-ui/user-controls.ui:152
#: libmalcontent-ui/user-controls.ui:50
msgid "_Restrict Applications"
msgstr ""
msgstr "_Alkalmazások korlátozása"
#: libmalcontent-ui/user-controls.ui:231
#: libmalcontent-ui/user-controls.ui:72
msgid "Software Installation Restrictions"
msgstr ""
msgstr "Szoftvertelepítési korlátozások"
#: libmalcontent-ui/user-controls.ui:281
#: libmalcontent-ui/user-controls.ui:76
msgid "Restrict Application _Installation"
msgstr ""
msgstr "Alkalmazás_telepítés korlátozása"
#: libmalcontent-ui/user-controls.ui:366
msgid "Restrict Application Installation for _Others"
msgstr ""
#: libmalcontent-ui/user-controls.ui:451
#: libmalcontent-ui/user-controls.ui:97
msgid "Application _Suitability"
msgstr ""
msgstr "Alkalmazás _alkalmassága"
#: libmalcontent-ui/user-controls.ui:473
#: libmalcontent-ui/user-controls.ui:100
msgid ""
"Restricts browsing or installation of applications to applications suitable "
"for certain ages or above."
msgstr ""
"Korlátozza az alkalmazások böngészését vagy telepítését a bizonyos "
"korosztályok vagy afölöttiek számára alkalmas alkalmazásokra."
#. Translators: This documents the --user command line option to malcontent-control:
#: malcontent-control/application.c:102
msgid "User to select in the UI"
msgstr "A felhasználói felületen kiválasztandó felhasználó"
#. Translators: This is a placeholder for a command line argument value:
#: malcontent-control/application.c:104
msgid "USERNAME"
msgstr "FELHASZNÁLÓNÉV"
#: malcontent-control/application.c:116
msgid "— view and edit parental controls"
msgstr "— szülői felügyelet megtekintése és szerkesztése"
#. Translators: This is the title of the main window
#. Translators: the name of the application as it appears in a software center
#: malcontent-control/application.c:105 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.desktop.in:3
msgid "Parental Controls"
msgstr ""
msgstr "Szülői felügyelet"
#: malcontent-control/application.c:270
#: malcontent-control/application.c:309
msgid "Copyright © 2019, 2020 Endless Mobile, Inc."
msgstr ""
msgstr "Copyright © 2019, 2020 Endless Mobile, Inc."
#. Translators: this should be "translated" to the
#. names of people who have translated Malcontent into
#. this language, one per line.
#: malcontent-control/application.c:275
#: malcontent-control/application.c:314
msgid "translator-credits"
msgstr ""
msgstr "Úr Balázs <ur dot balazs at fsf dot hu>, 2022."
#. Translators: "Malcontent" is the brand name of this
#. project, so should not be translated.
#: malcontent-control/application.c:281
#: malcontent-control/application.c:320
msgid "Malcontent Website"
msgstr ""
msgstr "A Malcontent weboldala"
#: malcontent-control/application.c:299
#: malcontent-control/application.c:341
msgid "The help contents could not be displayed"
msgstr ""
msgstr "A súgótartalmat nem sikerült megjeleníteni"
#: malcontent-control/application.c:336
#: malcontent-control/application.c:388
msgid "Failed to load user data from the system"
msgstr ""
msgstr "Nem sikerült betölteni a felhasználói adatokat a rendszerről"
#: malcontent-control/application.c:338
#: malcontent-control/application.c:390
msgid "Please make sure that the AccountsService is installed and enabled."
msgstr ""
"Győződjön meg arról, hogy az AccountsService telepítve van-e és engedélyezve "
"van-e."
#: malcontent-control/carousel.ui:48
#. Translators: Replace the link to commonsensemedia.org with some
#. * localised guidance for parents/carers on how to set restrictions on
#. * their child/caree in a responsible way which is in keeping with the
#. * best practice and culture of the region. If no suitable localised
#. * guidance exists, and if the default commonsensemedia.org link is not
#. * suitable, please file an issue against malcontent so we can discuss
#. * further!
#. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new
#.
#: malcontent-control/application.c:421
#, c-format
msgid ""
"Its recommended that restrictions are set as part of an ongoing "
"conversation with %s. <a href='https://www.commonsensemedia.org/privacy-and-"
"internet-safety'>Read guidance</a> on what to consider."
msgstr ""
"Azt javasoljuk, hogy a korlátozásokat %s felhasználóval történő folyamatos "
"beszélgetés részeként határozzák meg. <a href='https://www.commonsensemedia."
"org/privacy-and-internet-safety'>Olvasson útmutatást</a> arról, hogy mit "
"kell figyelembe venni."
#: malcontent-control/carousel.ui:38
msgid "Previous Page"
msgstr ""
msgstr "Előző oldal"
#: malcontent-control/carousel.ui:74
#: malcontent-control/carousel.ui:57
msgid "Next Page"
msgstr ""
msgstr "Következő oldal"
#: malcontent-control/main.ui:93
#: malcontent-control/main.ui:87
msgid "Permission Required"
msgstr ""
msgstr "Engedély szükséges"
#: malcontent-control/main.ui:107
#: malcontent-control/main.ui:88
msgid ""
"Permission is required to view and change user parental controls settings."
msgstr ""
"Engedély szükséges a felhasználó szülői felügyeleti beállításainak "
"megtekintéséhez és megváltoztatásához."
#: malcontent-control/main.ui:148
msgid "No Child Users Configured"
msgstr ""
#: malcontent-control/main.ui:110
msgid "No Standard User Accounts"
msgstr "Nincsenek szabványos felhasználói fiókok"
#: malcontent-control/main.ui:162
#: malcontent-control/main.ui:111
msgid ""
"No child users are currently set up on the system. Create one before setting "
"up their parental controls."
"Parental controls can only be applied to standard user\n"
"accounts. These can be created in the user settings."
msgstr ""
"A szülői felügyeletet csak szabványos felhasználói fiókokra lehet\n"
"alkalmazni. Ezek a felhasználói beállításokban hozhatók létre."
#: malcontent-control/main.ui:174
msgid "Create _Child User"
msgstr ""
#: malcontent-control/main.ui:115
msgid "_User Settings"
msgstr "_Felhasználói beállítások"
#: malcontent-control/main.ui:202
#: malcontent-control/main.ui:138
msgid "Loading…"
msgstr ""
msgstr "Betöltés…"
#: malcontent-control/main.ui:265
#: malcontent-control/main.ui:171
msgid "_Help"
msgstr "_Súgó"
#: malcontent-control/main.ui:269
#: malcontent-control/main.ui:175
msgid "_About Parental Controls"
msgstr ""
msgstr "_A szülői felügyeletről"
#. Translators: the brief summary of the application as it appears in a software center.
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4
msgid "Set parental controls and monitor usage by users"
msgstr ""
"Szülői felügyelet beállítása és a felhasználók tevékenységeinek megfigyelése"
#. Translators: These are the application description paragraphs in the AppData file.
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16
@ -384,67 +389,36 @@ msgid ""
"use the computer for, what software they can install, and what installed "
"software they can run."
msgstr ""
"A felhasználók szülői felügyeleti korlátozásainak kezelése, a számítógép "
"használati idejének szabályozása, milyen szoftvereket telepíthetnek, "
"valamint mely telepített szoftvereket futtathatnak."
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25
msgid "Main window"
msgstr "Főablak"
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39
msgid "The GNOME Project"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59
msgid "Minor improvements to parental controls application UI"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51
msgid "Add a user manual"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52
msgid "Translation updates"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60
msgid "Translations to Ukrainian and Polish"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67
msgid "Improve parental controls application UI and add icon"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68
msgid "Support for indicating which accounts are parent accounts"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75
msgid "Initial release of basic parental controls application"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76
msgid "Support for setting app installation and run restrictions on users"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83
msgid "Maintenance release of underlying parental controls library"
msgstr ""
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7
msgid "org.freedesktop.MalcontentControl"
msgstr ""
msgstr "A GNOME projekt"
#. 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 ""
"parental controls;screen time;app restrictions;web browser restrictions;oars;"
"usage;usage limit;kid;child;"
msgstr ""
"szülői felügyelet;képernyőidő;alkalmazáskorlátozások;webböngésző-"
"korlátozások;oars;használat;használati korlátozás;kölyök;gyerek;gyermek;"
#: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9
msgid "Manage parental controls"
msgstr ""
msgstr "Szülői felügyelet kezelése"
#: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10
msgid "Authentication is required to read and change user parental controls"
msgstr ""
"Hitelesítés szükséges a felhasználó szülői felügyeletének olvasásához és "
"megváltoztatásához"
#: malcontent-control/user-selector.c:426
msgid "Your account"
@ -455,331 +429,20 @@ msgstr "Az Ön fiókja"
#: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188
#, c-format
msgid "User %s has no time limits enabled"
msgstr ""
msgstr "„%s” felhasználónak nincsenek időkorlátok engedélyezve"
#: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172
#, c-format
msgid "Error getting session limits for user %s: %s"
msgstr ""
msgstr "Hiba történt „%s” felhasználó munkamenetkorlátjainak lekérésekor: %s"
#: pam/pam_malcontent.c:182
#, c-format
msgid "User %s has no time remaining"
msgstr ""
msgstr "„%s” felhasználónak nincs hátralévő ideje"
#: pam/pam_malcontent.c:200
#, c-format
msgid "Error setting time limit on login session: %s"
msgstr ""
#~ msgid "No cartoon violence"
#~ msgstr "Nincs rajzfilmes erőszak"
#~ msgid "Cartoon characters in unsafe situations"
#~ msgstr "Rajzfilmfigurák veszélyes helyzetekben"
#~ msgid "Cartoon characters in aggressive conflict"
#~ msgstr "Rajzfilmfigurák agresszív konfliktusban"
#~ msgid "Graphic violence involving cartoon characters"
#~ msgstr "Rajzfilmfigurákat érintő grafikus erőszak"
#~ msgid "No fantasy violence"
#~ msgstr "Nincs kitalált erőszak"
#~ msgid "Characters in unsafe situations easily distinguishable from reality"
#~ msgstr ""
#~ "Karakterek veszélyes helyzetekben, amely könnyen megkülönböztethető a "
#~ "valóságtól"
#~ msgid ""
#~ "Characters in aggressive conflict easily distinguishable from reality"
#~ msgstr ""
#~ "Karakterek agresszív konfliktusban, amely könnyen megkülönböztethető a "
#~ "valóságtól"
#~ msgid "Graphic violence easily distinguishable from reality"
#~ msgstr "Grafikus erőszak, amely könnyen megkülönböztethető a valóságtól"
#~ msgid "No realistic violence"
#~ msgstr "Nincs valósághű erőszak"
#~ msgid "Mildly realistic characters in unsafe situations"
#~ msgstr "Enyhén valósághű karakterek veszélyes helyzetekben"
#~ msgid "Depictions of realistic characters in aggressive conflict"
#~ msgstr "Valósághű karakterek ábrázolása agresszív konfliktusban"
#~ msgid "Graphic violence involving realistic characters"
#~ msgstr "Valósághű karaktereket érintő grafikus erőszak"
#~ msgid "No bloodshed"
#~ msgstr "Nincs vérontás"
#~ msgid "Unrealistic bloodshed"
#~ msgstr "Nem valósághű vérontás"
#~ msgid "Realistic bloodshed"
#~ msgstr "Valósághű vérontás"
#~ msgid "Depictions of bloodshed and the mutilation of body parts"
#~ msgstr "Várontás és a testrészek megcsonkításának ábrázolása"
#~ msgid "No sexual violence"
#~ msgstr "Nincs szexuális erőszak"
#~ msgid "Rape or other violent sexual behavior"
#~ msgstr "Megerőszakolás vagy egyéb erőszakos szexuális viselkedés"
#~ msgid "No references to alcohol"
#~ msgstr "Nincs alkoholtartalmú italokra való hivatkozás"
#~ msgid "References to alcoholic beverages"
#~ msgstr "Alkoholtartalmú italokra való hivatkozások"
#~ msgid "Use of alcoholic beverages"
#~ msgstr "Alkoholtartalmú italok használata"
#~ msgid "No references to illicit drugs"
#~ msgstr "Nincs tiltott kábítószerekre való hivatkozás"
#~ msgid "References to illicit drugs"
#~ msgstr "Tiltott kábítószerekre való hivatkozások"
#~ msgid "Use of illicit drugs"
#~ msgstr "Tiltott kábítószerek használata"
#~ msgid "References to tobacco products"
#~ msgstr "Dohánytermékekre való hivatkozások"
#~ msgid "Use of tobacco products"
#~ msgstr "Dohánytermékek használata"
#~ msgid "No nudity of any sort"
#~ msgstr "Nincs semmiféle meztelenség"
#~ msgid "Brief artistic nudity"
#~ msgstr "Rövid művészi meztelenség"
#~ msgid "Prolonged nudity"
#~ msgstr "Hosszan tartó meztelenség"
#~ msgid "No references or depictions of sexual nature"
#~ msgstr "Nincs szexuális hivatkozás vagy ábrázolás"
#~ msgid "Provocative references or depictions"
#~ msgstr "Kihívó hivatkozások vagy ábrázolások"
#~ msgid "Sexual references or depictions"
#~ msgstr "Szexuális hivatkozások vagy ábrázolások"
#~ msgid "Graphic sexual behavior"
#~ msgstr "Grafikus szexuális viselkedés"
#~ msgid "No profanity of any kind"
#~ msgstr "Nincs káromkodás"
#~ msgid "Mild or infrequent use of profanity"
#~ msgstr "Enyhe vagy ritka káromkodáshasználat"
#~ msgid "Moderate use of profanity"
#~ msgstr "Mérsékelt káromkodáshasználat"
#~ msgid "Strong or frequent use of profanity"
#~ msgstr "Erős vagy gyakori káromkodáshasználat"
#~ msgid "No inappropriate humor"
#~ msgstr "Nincs helytelen humor"
#~ msgid "Slapstick humor"
#~ msgstr "Helyzethumor"
#~ msgid "Vulgar or bathroom humor"
#~ msgstr "Vulgáris vagy fürdőszoba humor"
#~ msgid "Mature or sexual humor"
#~ msgstr "Felnőtt vagy szexuális humor"
#~ msgid "No discriminatory language of any kind"
#~ msgstr "Nincs semmiféle diszkriminatív nyelvezet"
#~ msgid "Negativity towards a specific group of people"
#~ msgstr "Negatívság egy bizonyos embercsoport felé"
#~ msgid "Discrimination designed to cause emotional harm"
#~ msgstr "Érzelmi károsodást okozó tervezett diszkrimináció"
#~ msgid "Explicit discrimination based on gender, sexuality, race or religion"
#~ msgstr ""
#~ "Kifejezetten nemi, szexuális, faji vagy vallási alapú diszkrimináció"
#~ msgid "No advertising of any kind"
#~ msgstr "Nincs semmiféle hirdetés"
#~ msgid "Product placement"
#~ msgstr "Termékelhelyezés"
#~ msgid "Explicit references to specific brands or trademarked products"
#~ msgstr ""
#~ "Közvetlen utalások egy bizonyos márkára vagy védjeggyel védett termékre"
#~ msgid "Users are encouraged to purchase specific real-world items"
#~ msgstr ""
#~ "A felhasználókat arra ösztönzik, hogy a valódi világban bizonyos "
#~ "tárgyakat vásároljanak"
#~ msgid "No gambling of any kind"
#~ msgstr "Nincs semmiféle szerencsejáték"
#~ msgid "Gambling on random events using tokens or credits"
#~ msgstr ""
#~ "Szerencsejáték véletlenszerű eseményeken zsetonok vagy kreditek "
#~ "használatával"
#~ msgid "Gambling using “play” money"
#~ msgstr "Szerencsejáték „játékpénz” használatával"
#~ msgid "Gambling using real money"
#~ msgstr "Szerencsejáték valódi pénz használatával"
#~ msgid "No ability to spend money"
#~ msgstr "Nem lehet valódi pénzt elkölteni"
#~ msgid "Users are encouraged to donate real money"
#~ msgstr "A felhasználókat arra ösztönzik, hogy valós pénzt adományozzanak"
#~ msgid "Ability to spend real money in-game"
#~ msgstr "Lehetséges a játékon belül valódi pénzt elkölteni"
#~ msgid "No way to chat with other users"
#~ msgstr "Nincs mód a csevegésre más felhasználókkal"
#~ msgid "User-to-user game interactions without chat functionality"
#~ msgstr ""
#~ "Felhasználók közötti játékinterakció, csevegés funkcionalitás nélkül"
#~ msgid "Moderated chat functionality between users"
#~ msgstr "Moderált csevegés funkcionalitás a felhasználók között"
#~ msgid "Uncontrolled chat functionality between users"
#~ msgstr "Ellenőrizetlen csevegés funkcionalitás a felhasználók között"
#~ msgid "No way to talk with other users"
#~ msgstr "Nincs mód a beszélgetésre más felhasználókkal"
#~ msgid "Uncontrolled audio or video chat functionality between users"
#~ msgstr ""
#~ "Ellenőrizetlen hang- vagy videocsevegés funkcionalitás a felhasználók "
#~ "között"
#~ msgid "No sharing of social network usernames or email addresses"
#~ msgstr ""
#~ "Nincs közösségi hálózatokon használt felhasználónevek vagy e-mail címek "
#~ "megosztása"
#~ msgid "Sharing social network usernames or email addresses"
#~ msgstr ""
#~ "Közösségi hálózatokon használt felhasználónevek vagy e-mail címek "
#~ "megosztása"
#~ msgid "No sharing of user information with 3rd parties"
#~ msgstr "Felhasználói információk nem kerülnek megosztásra harmadik féllel"
#~ msgid "Checking for the latest application version"
#~ msgstr "A legfrissebb alkalmazásverzió ellenőrzése"
#~ msgid "Sharing diagnostic data that does not let others identify the user"
#~ msgstr ""
#~ "Diagnosztikai adatok megosztása, amelyek mások számára nem azonosítják a "
#~ "felhasználót"
#~ msgid "Sharing information that lets others identify the user"
#~ msgstr ""
#~ "Információk megosztása, amelyek mások számára azonosítják a felhasználót"
#~ msgid "No sharing of physical location to other users"
#~ msgstr "Fizikai hely nem kerül megosztásra más felhasználók számára"
#~ msgid "Sharing physical location to other users"
#~ msgstr "Fizikai hely megosztása más felhasználók számára"
#~ msgid "No references to homosexuality"
#~ msgstr "Nincs homoszexualitásra való hivatkozás"
#~ msgid "Indirect references to homosexuality"
#~ msgstr "Közvetett homoszexualitásra való hivatkozás"
#~ msgid "Kissing between people of the same gender"
#~ msgstr "Csókolózás azonos nemű emberek között"
#~ msgid "Graphic sexual behavior between people of the same gender"
#~ msgstr "Grafikus szexuális viselkedés azonos nemű emberek között"
#~ msgid "No references to prostitution"
#~ msgstr "Nincs prostitúcióra való hivatkozás"
#~ msgid "Indirect references to prostitution"
#~ msgstr "Közvetett prostitúcióra való hivatkozás"
#~ msgid "Direct references to prostitution"
#~ msgstr "Közvetlen prostitúcióra való hivatkozás"
#~ msgid "Graphic depictions of the act of prostitution"
#~ msgstr "Prostitúció grafikus ábrázolása"
#~ msgid "No references to adultery"
#~ msgstr "Nincs házasságtörésre való hivatkozás"
#~ msgid "Indirect references to adultery"
#~ msgstr "Közvetett házasságtörésre való hivatkozás"
#~ msgid "Direct references to adultery"
#~ msgstr "Közvetlen házasságtörésre való hivatkozás"
#~ msgid "Graphic depictions of the act of adultery"
#~ msgstr "Házasságtörés grafikus ábrázolása"
#~ msgid "No sexualized characters"
#~ msgstr "Nincsenek szexualizált karakterek"
#~ msgid "Scantily clad human characters"
#~ msgstr "Hiányosan öltözött emberi karakterek"
#~ msgid "Overtly sexualized human characters"
#~ msgstr "Nyíltan szexualizált emberi karakterek"
#~ msgid "No references to desecration"
#~ msgstr "Nincs gyalázásra való hivatkozás"
#~ msgid "Depictions or references to historical desecration"
#~ msgstr "Gyalázás történelmi ábrázolása vagy arra való hivatkozás"
#~ msgid "Depictions of modern-day human desecration"
#~ msgstr "Modern kori emberi gyalázás ábrázolása"
#~ msgid "Graphic depictions of modern-day desecration"
#~ msgstr "Modern kori emberi gyalázás grafikus ábrázolása"
#~ msgid "No visible dead human remains"
#~ msgstr "Nincsenek látható emberi maradványok"
#~ msgid "Visible dead human remains"
#~ msgstr "Látható emberi maradványok"
#~ msgid "Dead human remains that are exposed to the elements"
#~ msgstr "Emberi maradványok, kitéve az időjárási viszonyoknak"
#~ msgid "Graphic depictions of desecration of human bodies"
#~ msgstr "Emberi testek gyalázásának grafikus ábrázolása"
#~ msgid "No references to slavery"
#~ msgstr "Nincs rabszolgaságra való hivatkozás"
#~ msgid "Depictions or references to historical slavery"
#~ msgstr "Rabszolgaság történelmi ábrázolása vagy arra való hivatkozás"
#~ msgid "Depictions of modern-day slavery"
#~ msgstr "Modern kori rabszolgaság ábrázolása"
#~ msgid "Graphic depictions of modern-day slavery"
#~ msgstr "Modern kori rabszolgaság grafikus ábrázolása"
"Hiba történt a bejelentkezési munkameneten való időkorlát beállításakor: %s"

View File

@ -10,7 +10,7 @@ msgstr ""
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/"
"issues\n"
"POT-Creation-Date: 2020-12-18 15:14+0000\n"
"PO-Revision-Date: 2022-01-06 13:27+0100\n"
"PO-Revision-Date: 2022-03-12 13:27+0100\n"
"Last-Translator: Albano Battistella <albano_battistella@hotmail.com>\n"
"Language-Team: none\n"
"Language: it\n"
@ -192,7 +192,7 @@ msgstr "Generale"
#: libmalcontent-ui/gs-content-rating.c:218
msgid "ALL"
msgstr "Tutto"
msgstr "TUTTO"
#: libmalcontent-ui/gs-content-rating.c:222
#: libmalcontent-ui/gs-content-rating.c:485
@ -334,7 +334,7 @@ msgstr "Copyright © 2019, 2020 Endless Mobile, Inc."
#. this language, one per line.
#: malcontent-control/application.c:313
msgid "translator-credits"
msgstr "Milo Casagrande <milo@milo.name>, 2020"
msgstr "Milo Casagrande <milo@milo.name>, 2020, Albano Battistella,2022"
#. Translators: "Malcontent" is the brand name of this
#. project, so should not be translated.

479
po/ka.po Normal file
View File

@ -0,0 +1,479 @@
# Georgian translations for malcontent package.
# Copyright (C) 2022 THE malcontent'S COPYRIGHT HOLDER
# This file is distributed under the same license as the malcontent package.
# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: malcontent\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/"
"issues\n"
"POT-Creation-Date: 2021-09-18 12:41+0000\n"
"PO-Revision-Date: 2022-09-14 09:48+0200\n"
"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
"Language-Team: Georgian <(nothing)>\n"
"Language: ka\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.1.1\n"
#: accounts-service/com.endlessm.ParentalControls.policy.in:4
msgid "Change your own app filter"
msgstr "შეცვალეთ თქვენი საკუთარი აპის ფილტრი"
#: accounts-service/com.endlessm.ParentalControls.policy.in:5
msgid "Authentication is required to change your app filter."
msgstr "თქვენი აპის ფილტრის შესაცვლელად საჭიროა ავთენტიკაცია."
#: accounts-service/com.endlessm.ParentalControls.policy.in:14
msgid "Read your own app filter"
msgstr "წაიკთხეთ თქვენი საკუთარი აპის ფილტრი"
#: accounts-service/com.endlessm.ParentalControls.policy.in:15
msgid "Authentication is required to read your app filter."
msgstr "თქვენი აპის ფილტრის წასაკითხად საჭიროა ავთენტიკაცია."
#: accounts-service/com.endlessm.ParentalControls.policy.in:24
msgid "Change another users app filter"
msgstr "სხვა მომხმარებლის აპის ფილტრის შეცვლა"
#: accounts-service/com.endlessm.ParentalControls.policy.in:25
msgid "Authentication is required to change another users app filter."
msgstr "სხვა მომხმარებლის აპის ფილტრის შესაცვლელად ავთენტიკაციაა საჭირო."
#: accounts-service/com.endlessm.ParentalControls.policy.in:34
msgid "Read another users app filter"
msgstr "სხვა მომხმარებლის აპის ფილტრის წაკითხვა"
#: accounts-service/com.endlessm.ParentalControls.policy.in:35
msgid "Authentication is required to read another users app filter."
msgstr "სხვა მომხმარებლის აპის ფილტრის წასაკითხად ავთენტიკაციაა საჭირო."
#: accounts-service/com.endlessm.ParentalControls.policy.in:44
msgid "Change your own session limits"
msgstr "თქვენი საკუთარი სესიის ლიმიტების შეცვლა"
#: accounts-service/com.endlessm.ParentalControls.policy.in:45
msgid "Authentication is required to change your session limits."
msgstr "თქვენი საკუთარი სესიის ლიმიტების შესაცვლელად ავთენთიკაციაა საჭირო."
#: accounts-service/com.endlessm.ParentalControls.policy.in:54
msgid "Read your own session limits"
msgstr "თქვენი საკუთარი სესიის ლიმიტების შეცვლა"
#: accounts-service/com.endlessm.ParentalControls.policy.in:55
msgid "Authentication is required to read your session limits."
msgstr "თქვენი საკუთარი სესიის ლიმიტების წასაკითხად ავთენთიკაციაა საჭირო."
#: accounts-service/com.endlessm.ParentalControls.policy.in:64
msgid "Change another users session limits"
msgstr "სხვა მომხმარებლის სესიის ლიმიტების შეცვლა"
#: accounts-service/com.endlessm.ParentalControls.policy.in:65
msgid "Authentication is required to change another users session limits."
msgstr "სხვა მომხმარებლის სესიის ლიმიტების შესაცვლელად ავთენტიკაციაა საჭირო."
#: accounts-service/com.endlessm.ParentalControls.policy.in:74
msgid "Read another users session limits"
msgstr "სხვა მომხმარებლის სესიის ლიმიტების წაკითხვა"
#: accounts-service/com.endlessm.ParentalControls.policy.in:75
msgid "Authentication is required to read another users session limits."
msgstr "სხვა მომხმარებლის სესიის ლიმიტების წასაკითხად ავთენტიკაციაა საჭირო."
#: accounts-service/com.endlessm.ParentalControls.policy.in:84
msgid "Change your own account info"
msgstr "თქვენი საკუთარი ანგარიშის ინფორმაციის შეცვლა"
#: accounts-service/com.endlessm.ParentalControls.policy.in:85
msgid "Authentication is required to change your account info."
msgstr ""
"თქვენი საკუთარი ანგარიშის ინფორმაციის შესაცვლელად ავთენთიკაციაა საჭირო."
#: accounts-service/com.endlessm.ParentalControls.policy.in:94
msgid "Read your own account info"
msgstr "თქვენი საკუთარი ანგარიშის ინფორმაციის წაკითხვა"
#: accounts-service/com.endlessm.ParentalControls.policy.in:95
msgid "Authentication is required to read your account info."
msgstr "თქვენი საკუთარი ანგარიშის ინფორმაციის წასაკითხად ავთენთიკაციაა საჭირო."
#: accounts-service/com.endlessm.ParentalControls.policy.in:104
msgid "Change another users account info"
msgstr "სხვა მომხმარებლის ანგარიშის ინფორმაციის შეცვლა"
#: accounts-service/com.endlessm.ParentalControls.policy.in:105
msgid "Authentication is required to change another users account info."
msgstr ""
"სხვა მომხმარებლის ანგარიშის ინფორმაციის შესაცვლელად ავთენტიკაციაა საჭირო."
#: accounts-service/com.endlessm.ParentalControls.policy.in:114
msgid "Read another users account info"
msgstr "სხვა მომხმარებლის ანგარიშის ინფორმაციის წაკითხვა"
#: accounts-service/com.endlessm.ParentalControls.policy.in:115
msgid "Authentication is required to read another users account info."
msgstr ""
"სხვა მომხმარებლის ანგარიშის ინფორმაციის წასაკითხად ავთენტიკაციაა საჭირო."
#: libmalcontent/app-filter.c:694
#, c-format
msgid "App filter for user %u was in an unrecognized format"
msgstr "აპის ფილტრი მომხმარებლისთვის %u უცნობი ფორმატითაა"
#: libmalcontent/app-filter.c:725
#, c-format
msgid "OARS filter for user %u has an unrecognized kind %s"
msgstr "OARS ფილტრი მომხმარებლისთვის %u უცნობი სახისაა: '%s'"
#: libmalcontent/manager.c:283 libmalcontent/manager.c:420
#: libmalcontent/manager.c:803
#, c-format
msgid "Not allowed to query parental controls data for user %u"
msgstr ""
"მშობლების კონტროლის მონაცემების გამოთხოვა მომხმარებლისთვის %u დაშვებული არაა"
#: libmalcontent/manager.c:288
#, c-format
msgid "User %u does not exist"
msgstr "მომხმარებელი %u არ არსებობს"
#: libmalcontent/manager.c:296
msgid "System accounts service not available"
msgstr "სისტემური ანგარიშების სერვისი მიუწვდომელია"
#: libmalcontent/manager.c:402
msgid "App filtering is globally disabled"
msgstr "აპის გაფილტვრა გლობალურადაა გათიშული"
#: libmalcontent/manager.c:785
msgid "Session limits are globally disabled"
msgstr "სესიის ლიმიტები გლობალურადაა გათიშული"
#: libmalcontent/session-limits.c:306
#, c-format
msgid "Session limit for user %u was in an unrecognized format"
msgstr "მომხმარებლისთვის %u სესიის ლიმიტი უცნობ ფორმატშია"
#: libmalcontent/session-limits.c:328
#, c-format
msgid "Session limit for user %u has an unrecognized type %u"
msgstr "მომხმარებლისთვის %u სესიის ლიმიტის ტიპი (%u) უცნობია"
#: libmalcontent/session-limits.c:346
#, c-format
msgid "Session limit for user %u has invalid daily schedule %u%u"
msgstr ""
"სესიის ლიმიტს მომხმარებლისთვის %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
#: libmalcontent-ui/restrict-applications-dialog.c:222
#, c-format
msgid "Restrict %s from using the following installed applications."
msgstr "%s-სთვის მითითებული დაყენებული აპლიკაციების გამოყენების აკრძალვა."
#: libmalcontent-ui/restrict-applications-dialog.ui:6
#: libmalcontent-ui/restrict-applications-dialog.ui:12
msgid "Restrict Applications"
msgstr "აპლიკაციების შეზღუდვა"
#: libmalcontent-ui/restrict-applications-selector.ui:24
msgid "No applications found to restrict."
msgstr "შესაზღუდი აპლიკაციების გარეშე."
#. Translators: this is the full name for an unknown user account.
#: libmalcontent-ui/user-controls.c:207 libmalcontent-ui/user-controls.c:218
msgid "unknown"
msgstr "უცნობი"
#: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397
#: libmalcontent-ui/user-controls.c:669
msgid "All Ages"
msgstr "ყველა ასაკი"
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:477
#, c-format
msgid ""
"Prevents %s from running web browsers. Limited web content may still be "
"available in other applications."
msgstr ""
"%s-სთვის ბრაუზერების გაშვების აკრძალვა. სხვა აპლიკაციებში შეზღუდული ვებ-"
"შემცველობა მაინც შეიძლება ხელმისაწვდომი იყოს."
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:482
#, c-format
msgid "Prevents specified applications from being used by %s."
msgstr "%s-სთვის მითითებული აპლიკაციების გამოყენების აკრძალვა."
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:487
#, c-format
msgid "Prevents %s from installing applications."
msgstr "%s-სთვის აპლიკაციების დაყენების უფლების წართმევა."
#: libmalcontent-ui/user-controls.ui:16
msgid "Application Usage Restrictions"
msgstr "აპლიკაციის გამოყენების შეზღუდვები"
#: libmalcontent-ui/user-controls.ui:67
msgid "Restrict _Web Browsers"
msgstr "_ვებ ბრაუზერების შეზღუდვა"
#: libmalcontent-ui/user-controls.ui:151
msgid "_Restrict Applications"
msgstr "აპლიკაციების _შეზღუდვა"
#: libmalcontent-ui/user-controls.ui:230
msgid "Software Installation Restrictions"
msgstr "პროგრამების დაყენების შეზღუდვები"
#: libmalcontent-ui/user-controls.ui:280
msgid "Restrict Application _Installation"
msgstr "აპლიკაციების _დაენების შეზღუდვა"
#: libmalcontent-ui/user-controls.ui:365
msgid "Application _Suitability"
msgstr "აპლიკაციის _შესაბამისობა"
#: libmalcontent-ui/user-controls.ui:387
msgid ""
"Restricts browsing or installation of applications to applications suitable "
"for certain ages or above."
msgstr ""
"ზღუდავს აპლიკაციების დათვალიერებას ან დაყენებას გარკვეული ასაკამდე ან ქვემოთ."
#. Translators: This documents the --user command line option to malcontent-control:
#: malcontent-control/application.c:102
msgid "User to select in the UI"
msgstr "UI-ში ასარჩევი მომხმარებელი"
#. Translators: This is a placeholder for a command line argument value:
#: malcontent-control/application.c:104
msgid "USERNAME"
msgstr "მომხმარებლის სახელი"
#: malcontent-control/application.c:115
msgid "— view and edit parental controls"
msgstr "— მშობლის კონტროლების ნახვა და ჩასწორება"
#. Translators: This is the title of the main window
#. 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/org.freedesktop.MalcontentControl.appdata.xml.in:9
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3
msgid "Parental Controls"
msgstr "მშობლის კონტროლი"
#: malcontent-control/application.c:308
msgid "Copyright © 2019, 2020 Endless Mobile, Inc."
msgstr "© 2019, 2020 Endless Mobile, Inc., ყველა უფლება დაცულია."
#. Translators: this should be "translated" to the
#. names of people who have translated Malcontent into
#. this language, one per line.
#: malcontent-control/application.c:313
msgid "translator-credits"
msgstr "თემური დოღონაძე"
#. Translators: "Malcontent" is the brand name of this
#. project, so should not be translated.
#: malcontent-control/application.c:319
msgid "Malcontent Website"
msgstr "Malcontent -ის ვებგვერდი"
#: malcontent-control/application.c:337
msgid "The help contents could not be displayed"
msgstr "დახმარების შემცველობის ჩვენება შეუძლებელია"
#: malcontent-control/application.c:374
msgid "Failed to load user data from the system"
msgstr "სისტემიდან მომხმარებლის მონაცემების წაკითხვის შეცდომა"
#: malcontent-control/application.c:376
msgid "Please make sure that the AccountsService is installed and enabled."
msgstr "დარწმუნდით, რომ AccountService დაყენებული და ჩართულია."
#. Translators: Replace the link to commonsensemedia.org with some
#. * localised guidance for parents/carers on how to set restrictions on
#. * their child/caree in a responsible way which is in keeping with the
#. * best practice and culture of the region. If no suitable localised
#. * guidance exists, and if the default commonsensemedia.org link is not
#. * suitable, please file an issue against malcontent so we can discuss
#. * further!
#. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new
#.
#: malcontent-control/application.c:407
#, c-format
msgid ""
"Its recommended that restrictions are set as part of an ongoing "
"conversation with %s. <a href='https://www.commonsensemedia.org/privacy-and-"
"internet-safety'>Read guidance</a> on what to consider."
msgstr ""
"რეკომენდებულია, რომ შეზღუდვები %s-სთან მიმდინარე საუბრის ნაწილი იყოს. <a "
"href='https://www.commonsensemedia.org/privacy-and-internet-"
"safety'>წაიკითხეთ,</a> რა უნდა გაითვალისწინოთ."
#: malcontent-control/carousel.ui:48
msgid "Previous Page"
msgstr "წინა გვერდი"
#: malcontent-control/carousel.ui:74
msgid "Next Page"
msgstr "შემდეგი გვერდი"
#: malcontent-control/main.ui:115
msgid "Permission Required"
msgstr "საჭიროა წვდომის უფლება"
#: malcontent-control/main.ui:129
msgid ""
"Permission is required to view and change user parental controls settings."
msgstr ""
"მომხმარებლის მშობლის კონტროლის პარამეტრების შესაცვლელად საჭირო წვდომა არ "
"გაგაჩნიათ."
#: malcontent-control/main.ui:184
msgid "No Standard User Accounts"
msgstr "სტანდარტული მომხმარებლის ანგარიშების გარეშე"
#: malcontent-control/main.ui:199
msgid ""
"Parental controls can only be applied to standard user\n"
"accounts. These can be created in the user settings."
msgstr ""
"მშობლის კონტროლის პოლიტიკის გადატარება მხოლოდ ჩვეულებრივ\n"
"მომხმარებლებზე შეიძლება. მათი შექმნა მომხმარებლის პარამეტრებში შეგიძლიათ."
#: malcontent-control/main.ui:212
msgid "_User Settings"
msgstr "_მომხმარებლის პარამეტრები"
#: malcontent-control/main.ui:242
msgid "Loading…"
msgstr "ჩატვირთვა…"
#: malcontent-control/main.ui:305
msgid "_Help"
msgstr "და_ხმარება"
#: malcontent-control/main.ui:309
msgid "_About Parental Controls"
msgstr "მშობლის კონტროლის _შესახებ"
#. Translators: the brief summary of the application as it appears in a software center.
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4
msgid "Set parental controls and monitor usage by users"
msgstr "დააყენეთ მშობლის კონტროლი და აკონტროლეთ მომხმარებლების ქცევა"
#. Translators: These are the application description paragraphs in the AppData file.
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16
msgid ""
"Manage users parental controls restrictions, controlling how long they can "
"use the computer for, what software they can install, and what installed "
"software they can run."
msgstr ""
"მართეთ მომხმარებლის მშობლის კონტროლის შეზღუდვები. აკონტროლეთ, რამდენ ხანს "
"შეუძლიათ, ისარგებლონ კომპიუტერით, რა პროგრამების დაყენება შეუძლიათ და "
"დაყენებული პროგრამებიდან რისი გაშვება შეუძლიათ."
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25
msgid "Main window"
msgstr "მთავარი ფანჯარა"
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:38
msgid "The GNOME Project"
msgstr "პროექტი \"GNOME\""
#. 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:14
msgid ""
"parental controls;screen time;app restrictions;web browser restrictions;oars;"
"usage;usage limit;kid;child;"
msgstr ""
"parental controls;screen time;app restrictions;web browser restrictions;oars;"
"usage;usage limit;kid;child;"
#: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9
msgid "Manage parental controls"
msgstr "მშობლის კონტროლის მართვა"
#: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10
msgid "Authentication is required to read and change user parental controls"
msgstr ""
"მომხმარებლის მშობლის კონტროლის წასაკითხად და შესაცვლელად ავთენტიკაციაა საჭირო"
#: malcontent-control/user-selector.c:426
msgid "Your account"
msgstr "თქვენი ანგარიში"
#. Always allow root, to avoid a situation where this PAM module prevents
#. * all users logging in with no way of recovery.
#: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188
#, c-format
msgid "User %s has no time limits enabled"
msgstr "მომხმარებელს \"%s\" დროის ლიმიტები ჩართული არ აქვს"
#: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172
#, c-format
msgid "Error getting session limits for user %s: %s"
msgstr "მომხმარებლისთვის '%s' სესიის ლიმიტების მიღების შეცდომა: %s"
#: pam/pam_malcontent.c:182
#, c-format
msgid "User %s has no time remaining"
msgstr "მომხმარებელს \"%s\" დრო დარჩენილი არ აქვს"
#: pam/pam_malcontent.c:200
#, c-format
msgid "Error setting time limit on login session: %s"
msgstr "შესვლის სესიაზე დროის ლიმიტის დაყენების შეცდომა: %s"

View File

@ -125,6 +125,25 @@ msgid "Authentication is required to read another users account info."
msgstr ""
"Autenticação é necessária para ler as informações da conta de outro usuário."
#: malcontent-control/main.ui:197
msgid ""
"Parental controls can only be applied to standard user\n"
"accounts. These can be created in the user settings."
msgstr ""
"O controle dos pais só pode ser aplicado para o usuário\n"
"padrão. É possível cria-lo nas configurações do usuário."
#: malcontent-control/application.c:407
#, c-format
msgid ""
"Its recommended that restrictions are set as part of an ongoing "
"conversation with %s. <a href='https://www.commonsensemedia.org/privacy-and-"
"internet-safety'>Read guidance</a> on what to consider."
msgstr ""
"É recomendável que as restrições sejam definidas como parte de uma "
"conversa em andamento com %s. Para mais informações <a href='https://www."
"commonsensemedia.org/privacy-and-internet-safety'>Leia as orientações</a>"
#: libmalcontent/app-filter.c:694
#, c-format
msgid "App filter for user %u was in an unrecognized format"
@ -385,10 +404,18 @@ msgstr ""
msgid "Create _Child User"
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
msgid "Loading…"
msgstr "Carregando…"
#: malcontent-control/main.ui:210
msgid "_User Settings"
msgstr "Configurações do _Usuário"
#: malcontent-control/main.ui:265
msgid "_Help"
msgstr "Aj_uda"

425
po/ru.po
View File

@ -6,377 +6,384 @@
msgid ""
msgstr ""
"Project-Id-Version: malcontent\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-06-10 12:04+0100\n"
"PO-Revision-Date: 2020-04-15 13:42+0100\n"
"Last-Translator: Automatically generated\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/"
"issues\n"
"POT-Creation-Date: 2023-10-13 16:18+0000\n"
"PO-Revision-Date: 2023-10-29 01:03+1000\n"
"Last-Translator: Ser82-png <asvmail.as@gmail.com>\n"
"Language-Team: none\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 3.0.1\n"
#: accounts-service/com.endlessm.ParentalControls.policy.in:4
msgid "Change your own app filter"
msgstr ""
msgstr "Изменение собственного фильтра приложений"
#: accounts-service/com.endlessm.ParentalControls.policy.in:5
msgid "Authentication is required to change your app filter."
msgstr ""
msgstr "Для изменения своего фильтра приложений требуется идентификация."
#: accounts-service/com.endlessm.ParentalControls.policy.in:14
msgid "Read your own app filter"
msgstr ""
msgstr "Чтение собственного фильтра приложений"
#: accounts-service/com.endlessm.ParentalControls.policy.in:15
msgid "Authentication is required to read your app filter."
msgstr ""
msgstr "Для чтения своего фильтра приложений требуется идентификация."
#: accounts-service/com.endlessm.ParentalControls.policy.in:24
msgid "Change another users app filter"
msgstr ""
msgstr "Изменение фильтра приложений другого пользователя"
#: accounts-service/com.endlessm.ParentalControls.policy.in:25
msgid "Authentication is required to change another users app filter."
msgstr ""
"Для изменения фильтра приложений другого пользователя требуется "
"идентификация."
#: accounts-service/com.endlessm.ParentalControls.policy.in:34
msgid "Read another users app filter"
msgstr ""
msgstr "Чтение фильтра приложений другого пользователя"
#: accounts-service/com.endlessm.ParentalControls.policy.in:35
msgid "Authentication is required to read another users app filter."
msgstr ""
"Для чтения фильтра приложений другого пользователя требуется идентификация."
#: accounts-service/com.endlessm.ParentalControls.policy.in:44
msgid "Change your own session limits"
msgstr ""
msgstr "Изменение ограничений собственного сеанса"
#: accounts-service/com.endlessm.ParentalControls.policy.in:45
msgid "Authentication is required to change your session limits."
msgstr ""
msgstr "Для изменения ограничений собственного сеанса требуется идентификация."
#: accounts-service/com.endlessm.ParentalControls.policy.in:54
msgid "Read your own session limits"
msgstr ""
msgstr "Чтение ограничений собственного сеанса"
#: accounts-service/com.endlessm.ParentalControls.policy.in:55
msgid "Authentication is required to read your session limits."
msgstr ""
msgstr "Для чтения ограничений собственного сеанса требуется идентификация."
#: accounts-service/com.endlessm.ParentalControls.policy.in:64
msgid "Change another users session limits"
msgstr ""
msgstr "Изменение ограничений сеанса другого пользователя"
#: accounts-service/com.endlessm.ParentalControls.policy.in:65
msgid "Authentication is required to change another users session limits."
msgstr ""
"Для изменения ограничений сеанса другого пользователя требуется "
"идентификация."
#: accounts-service/com.endlessm.ParentalControls.policy.in:74
msgid "Read another users session limits"
msgstr ""
msgstr "Чтение ограничений сеанса другого пользователя"
#: accounts-service/com.endlessm.ParentalControls.policy.in:75
msgid "Authentication is required to read another users session limits."
msgstr ""
"Для чтения ограничений сеанса другого пользователя требуется идентификация."
#: accounts-service/com.endlessm.ParentalControls.policy.in:84
msgid "Change your own account info"
msgstr ""
msgstr "Изменение данных своей учётной записи"
#: accounts-service/com.endlessm.ParentalControls.policy.in:85
msgid "Authentication is required to change your account info."
msgstr ""
msgstr "Для изменения данных своей учётной записи требуется идентификация."
#: accounts-service/com.endlessm.ParentalControls.policy.in:94
msgid "Read your own account info"
msgstr ""
msgstr "Чтение данных своей учётной записи"
#: accounts-service/com.endlessm.ParentalControls.policy.in:95
msgid "Authentication is required to read your account info."
msgstr ""
msgstr "Для чтения данных своей учётной записи требуется идентификация."
#: accounts-service/com.endlessm.ParentalControls.policy.in:104
msgid "Change another users account info"
msgstr ""
msgstr "Изменение данных учётной записи другого пользователя"
#: accounts-service/com.endlessm.ParentalControls.policy.in:105
msgid "Authentication is required to change another users account info."
msgstr ""
"Для изменения данных учётной записи другого пользователя требуется "
"идентификация."
#: accounts-service/com.endlessm.ParentalControls.policy.in:114
msgid "Read another users account info"
msgstr ""
msgstr "Чтение данных учётной записи другого пользователя"
#: accounts-service/com.endlessm.ParentalControls.policy.in:115
msgid "Authentication is required to read another users account info."
msgstr ""
"Для чтения данных учётной записи другого пользователя требуется "
"идентификация."
#: libmalcontent/app-filter.c:694
#, c-format
msgid "App filter for user %u was in an unrecognized format"
msgstr ""
msgstr "Фильтр приложений для пользователя %u записан в неизвестном формате"
#: libmalcontent/app-filter.c:725
#, c-format
msgid "OARS filter for user %u has an unrecognized kind %s"
msgstr ""
msgstr "Фильтр OARS для пользователя %u имеет неизвестный тип «%s»"
#: libmalcontent/manager.c:283 libmalcontent/manager.c:412
#: libmalcontent/manager.c:283 libmalcontent/manager.c:420
#: libmalcontent/manager.c:803
#, c-format
msgid "Not allowed to query app filter data for user %u"
msgid "Not allowed to query parental controls data for user %u"
msgstr ""
"Запрещено запрашивать данные родительского контроля для пользователя %u"
#: libmalcontent/manager.c:288
#, c-format
msgid "User %u does not exist"
msgstr ""
msgstr "Пользователь %u не существует"
#: libmalcontent/manager.c:394
#: libmalcontent/manager.c:296
msgid "System accounts service not available"
msgstr "Служба системных учётных записей недоступна"
#: libmalcontent/manager.c:402
msgid "App filtering is globally disabled"
msgstr ""
msgstr "Фильтрация приложений отключена глобально"
#: libmalcontent/manager.c:777
#: libmalcontent/manager.c:785
msgid "Session limits are globally disabled"
msgstr ""
#: libmalcontent/manager.c:795
#, c-format
msgid "Not allowed to query session limits data for user %u"
msgstr ""
msgstr "Ограничения сеанса отключены глобально"
#: libmalcontent/session-limits.c:306
#, c-format
msgid "Session limit for user %u was in an unrecognized format"
msgstr ""
msgstr "Ограничение сеанса для пользователя %u записаны в неизвестном формате"
#: libmalcontent/session-limits.c:328
#, c-format
msgid "Session limit for user %u has an unrecognized type %u"
msgstr ""
msgstr "Ограничение сеанса для пользователя %u имеет неизвестный тип «%u»"
#: libmalcontent/session-limits.c:346
#, c-format
msgid "Session limit for user %u has invalid daily schedule %u%u"
msgstr ""
#. 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 ""
#: 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 ""
#: 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 ""
"Ограничение сеанса для пользователя %u имеет недопустимое ежедневное "
"расписание %u%u"
#. Translators: the placeholder is a users full name
#: libmalcontent-ui/restrict-applications-dialog.c:222
#: libmalcontent-ui/restrict-applications-dialog.c:256
#, c-format
msgid "Restrict %s from using the following installed applications."
msgstr ""
msgstr "Запретить %s использовать следующие установленные приложения."
#: libmalcontent-ui/restrict-applications-dialog.ui:6
#: libmalcontent-ui/restrict-applications-dialog.ui:12
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."
msgstr ""
msgstr "Не найдено приложений, доступ к которым ограничен."
#. Translators: this is the full name for an unknown user account.
#: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253
#: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209
msgid "unknown"
msgstr ""
msgstr "неизвестный"
#: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425
#: libmalcontent-ui/user-controls.c:711
#: libmalcontent-ui/user-controls.c:303 libmalcontent-ui/user-controls.c:388
#: libmalcontent-ui/user-controls.c:641
msgid "All Ages"
msgstr ""
msgstr "Все возрастные группы"
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:514
#: libmalcontent-ui/user-controls.c:470
#, c-format
msgid ""
"Prevents %s from running web browsers. Limited web content may still be "
"available in other applications."
msgstr ""
"Запретить %s запускать веб-браузеры. Ограниченный веб-контент может быть "
"доступен в других приложениях."
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:519
#: libmalcontent-ui/user-controls.c:475
#, c-format
msgid "Prevents specified applications from being used by %s."
msgstr ""
msgstr "Запретить %s использование указанных приложений."
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:524
#: libmalcontent-ui/user-controls.c:480
#, c-format
msgid "Prevents %s from installing applications."
msgstr ""
msgstr "Запретить %s устанавливать приложения."
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:529
#, c-format
msgid "Applications installed by %s will not appear for other users."
msgstr ""
#: libmalcontent-ui/user-controls.ui:17
#: libmalcontent-ui/user-controls.ui:25
msgid "Application Usage Restrictions"
msgstr ""
msgstr "Ограничения на использование приложений"
#: libmalcontent-ui/user-controls.ui:68
#: libmalcontent-ui/user-controls.ui:28
msgid "Restrict _Web Browsers"
msgstr ""
msgstr "Ограничить доступ к _Веб-браузерам"
#: libmalcontent-ui/user-controls.ui:152
#: libmalcontent-ui/user-controls.ui:51
msgid "_Restrict Applications"
msgstr ""
msgstr "_Ограничить доступ к приложениям"
#: libmalcontent-ui/user-controls.ui:231
#: libmalcontent-ui/user-controls.ui:73
msgid "Software Installation Restrictions"
msgstr ""
msgstr "Ограничения на установку программного обеспечения"
#: libmalcontent-ui/user-controls.ui:281
#: libmalcontent-ui/user-controls.ui:77
msgid "Restrict Application _Installation"
msgstr ""
msgstr "Ограничить _установку приложений"
#: libmalcontent-ui/user-controls.ui:366
msgid "Restrict Application Installation for _Others"
msgstr ""
#: libmalcontent-ui/user-controls.ui:451
#: libmalcontent-ui/user-controls.ui:99
msgid "Application _Suitability"
msgstr ""
msgstr "_Пригодность приложений"
#: libmalcontent-ui/user-controls.ui:473
#: libmalcontent-ui/user-controls.ui:102
msgid ""
"Restricts browsing or installation of applications to applications suitable "
"for certain ages or above."
"Restricts the browsing or installation of applications unsuitable for this "
"age or younger."
msgstr ""
"Ограничить просмотр или установку приложений неподходящих для этой "
"возрастной группы."
#. Translators: This documents the --user command line option to malcontent-control:
#: malcontent-control/application.c:102
msgid "User to select in the UI"
msgstr "Пользователь для выбора в пользовательском интерфейсе"
#. Translators: This is a placeholder for a command line argument value:
#: malcontent-control/application.c:104
msgid "USERNAME"
msgstr "ПОЛЬЗОВАТЕЛЬ"
#: malcontent-control/application.c:116
msgid "— view and edit parental controls"
msgstr "— просмотр и редактирование родительского контроя"
#. Translators: This is the title of the main window
#. Translators: the name of the application as it appears in a software center
#: malcontent-control/application.c:105 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.desktop.in:3
msgid "Parental Controls"
msgstr ""
msgstr "Родительский контроль"
#: malcontent-control/application.c:270
#: malcontent-control/application.c:309
msgid "Copyright © 2019, 2020 Endless Mobile, Inc."
msgstr ""
msgstr "Copyright © 2019, 2020 Endless Mobile, Inc."
#. Translators: this should be "translated" to the
#. names of people who have translated Malcontent into
#. this language, one per line.
#: malcontent-control/application.c:275
#: malcontent-control/application.c:314
msgid "translator-credits"
msgstr ""
msgstr "Ser82-png <asvmail.as@gmail.com>, 2022-2023"
#. Translators: "Malcontent" is the brand name of this
#. project, so should not be translated.
#: malcontent-control/application.c:281
#: malcontent-control/application.c:320
msgid "Malcontent Website"
msgstr ""
msgstr "Веб-сайт Malcontent"
#: malcontent-control/application.c:299
#: malcontent-control/application.c:341
msgid "The help contents could not be displayed"
msgstr ""
msgstr "Содержание справки не может быть отображено"
#: malcontent-control/application.c:336
#: malcontent-control/application.c:388
msgid "Failed to load user data from the system"
msgstr ""
msgstr "Не удалось загрузить пользовательские данные из системы"
#: malcontent-control/application.c:338
#: malcontent-control/application.c:390
msgid "Please make sure that the AccountsService is installed and enabled."
msgstr ""
msgstr "Убедитесь, что служба AccountsService установлена и включена."
#: malcontent-control/carousel.ui:48
#. Translators: Replace the link to commonsensemedia.org with some
#. * localised guidance for parents/carers on how to set restrictions on
#. * their child/caree in a responsible way which is in keeping with the
#. * best practice and culture of the region. If no suitable localised
#. * guidance exists, and if the default commonsensemedia.org link is not
#. * suitable, please file an issue against malcontent so we can discuss
#. * further!
#. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new
#.
#: malcontent-control/application.c:421
#, c-format
msgid ""
"Its recommended that restrictions are set as part of an ongoing "
"conversation with %s. <a href='https://www.commonsensemedia.org/privacy-and-"
"internet-safety'>Read guidance</a> on what to consider."
msgstr ""
"Рекомендуется устанавливать эти ограничения как дополнение к беседе с %s. <a "
"href='https://www.commonsensemedia.org/privacy-and-internet-"
"safety'>Ознакомьтесь с инструкцией</a> о том, что нужно учитывать."
#: malcontent-control/carousel.ui:38
msgid "Previous Page"
msgstr ""
msgstr "Предыдущая страница"
#: malcontent-control/carousel.ui:74
#: malcontent-control/carousel.ui:57
msgid "Next Page"
msgstr ""
msgstr "Следующая страница"
#: malcontent-control/main.ui:93
#: malcontent-control/main.ui:87
msgid "Permission Required"
msgstr ""
msgstr "Требуется разрешение"
#: malcontent-control/main.ui:107
#: malcontent-control/main.ui:88
msgid ""
"Permission is required to view and change user parental controls settings."
msgstr ""
"Требуется разрешение для просмотра и изменения настроек родительского "
"контроля пользователя."
#: malcontent-control/main.ui:148
msgid "No Child Users Configured"
msgstr ""
#: malcontent-control/main.ui:110
msgid "No Standard User Accounts"
msgstr "Нет обычных учётных записей пользователей"
#: malcontent-control/main.ui:162
#: malcontent-control/main.ui:111
msgid ""
"No child users are currently set up on the system. Create one before setting "
"up their parental controls."
"Parental controls can only be applied to standard user\n"
"accounts. These can be created in the user settings."
msgstr ""
"Родительский контроль может быть применен только к обычным учётным\n"
"записям пользователей. Такие записи можно создать в настройках пользователя."
#: malcontent-control/main.ui:174
msgid "Create _Child User"
msgstr ""
#: malcontent-control/main.ui:115
msgid "_User Settings"
msgstr "Настройки _пользователя"
#: malcontent-control/main.ui:202
#: malcontent-control/main.ui:138
msgid "Loading…"
msgstr ""
msgstr "Загрузка…"
#: malcontent-control/main.ui:265
#: malcontent-control/main.ui:171
msgid "_Help"
msgstr "_Справка"
#: malcontent-control/main.ui:269
#: malcontent-control/main.ui:175
msgid "_About Parental Controls"
msgstr ""
msgstr "_О родительском контроле"
#. Translators: the brief summary of the application as it appears in a software center.
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4
msgid "Set parental controls and monitor usage by users"
msgstr ""
"Создание родительского контроля и управление использованием компьютера для "
"каждого пользователя"
#. Translators: These are the application description paragraphs in the AppData file.
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16
@ -385,67 +392,37 @@ msgid ""
"use the computer for, what software they can install, and what installed "
"software they can run."
msgstr ""
"Управление ограничениями родительского контроля, позволяет контролировать "
"время использования компьютера, какое программное обеспечение вы можете "
"установить и какое уже установленное программное обеспечение разрешено "
"запускать."
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25
msgid "Main window"
msgstr "Главное окно"
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39
msgid "The GNOME Project"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59
msgid "Minor improvements to parental controls application UI"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51
msgid "Add a user manual"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52
msgid "Translation updates"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60
msgid "Translations to Ukrainian and Polish"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67
msgid "Improve parental controls application UI and add icon"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68
msgid "Support for indicating which accounts are parent accounts"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75
msgid "Initial release of basic parental controls application"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76
msgid "Support for setting app installation and run restrictions on users"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83
msgid "Maintenance release of underlying parental controls library"
msgstr ""
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7
msgid "org.freedesktop.MalcontentControl"
msgstr ""
msgstr "Проект GNOME"
#. 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 ""
"parental controls;screen time;app restrictions;web browser restrictions;oars;"
"usage;usage limit;kid;child;"
msgstr ""
"parental controls;screen time;app restrictions;web browser restrictions;oars;"
"usage;usage limit;kid;child;родительский контроль;ребенок;ограничение;"
#: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9
msgid "Manage parental controls"
msgstr ""
msgstr "Управление родительским контролем"
#: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10
msgid "Authentication is required to read and change user parental controls"
msgstr ""
"Для просмотра и внесения изменений в родительский контроль пользователя "
"требуется идентификация"
#: malcontent-control/user-selector.c:426
msgid "Your account"
@ -456,22 +433,52 @@ msgstr "Ваша учётная запись"
#: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188
#, c-format
msgid "User %s has no time limits enabled"
msgstr ""
msgstr "Пользователь «%s» не имеет ограничений по времени"
#: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172
#, c-format
msgid "Error getting session limits for user %s: %s"
msgstr ""
"Ошибка при попытке получить данные об ограничениях сеанса пользователя «%s»: "
"%s"
#: pam/pam_malcontent.c:182
#, c-format
msgid "User %s has no time remaining"
msgstr ""
msgstr "У пользователя «%s» не осталось времени"
#: pam/pam_malcontent.c:200
#, c-format
msgid "Error setting time limit on login session: %s"
msgstr ""
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"
#~ msgstr "Отсутствуют сцены мультипликационного насилия"

164
po/sv.po
View File

@ -1,16 +1,16 @@
# 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.
# Automatically generated, 2020.
# Anders Jonsson <anders.jonsson@norsjovallen.se>, 2020.
# Anders Jonsson <anders.jonsson@norsjovallen.se>, 2020, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: malcontent\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/"
"issues\n"
"POT-Creation-Date: 2020-12-09 03:28+0000\n"
"PO-Revision-Date: 2020-12-17 18:28+0100\n"
"POT-Creation-Date: 2023-10-13 16:18+0000\n"
"PO-Revision-Date: 2023-10-20 21:11+0200\n"
"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n"
@ -18,7 +18,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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
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"
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
#: libmalcontent-ui/restrict-applications-dialog.c:222
#: libmalcontent-ui/restrict-applications-dialog.c:256
#, c-format
msgid "Restrict %s from using the following installed applications."
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:12
msgid "Restrict Applications"
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."
msgstr "Inga program att begränsa hittades."
#. 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"
msgstr "okänd"
#: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397
#: libmalcontent-ui/user-controls.c:669
#: libmalcontent-ui/user-controls.c:303 libmalcontent-ui/user-controls.c:388
#: libmalcontent-ui/user-controls.c:641
msgid "All Ages"
msgstr "Alla åldrar"
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:477
#: libmalcontent-ui/user-controls.c:470
#, c-format
msgid ""
"Prevents %s from running web browsers. Limited web content may still be "
@ -247,48 +204,48 @@ msgstr ""
"fortfarande finnas tillgängligt i andra program."
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:482
#: libmalcontent-ui/user-controls.c:475
#, c-format
msgid "Prevents specified applications from being used by %s."
msgstr "Förhindrar angivna program från att användas av %s."
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:487
#: libmalcontent-ui/user-controls.c:480
#, c-format
msgid "Prevents %s from installing applications."
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"
msgstr "Begränsningar av programanvändning"
#: libmalcontent-ui/user-controls.ui:67
#: libmalcontent-ui/user-controls.ui:28
msgid "Restrict _Web Browsers"
msgstr "Begränsa _webbläsare"
#: libmalcontent-ui/user-controls.ui:151
#: libmalcontent-ui/user-controls.ui:51
msgid "_Restrict Applications"
msgstr "_Begränsa program"
#: libmalcontent-ui/user-controls.ui:230
#: libmalcontent-ui/user-controls.ui:73
msgid "Software Installation Restrictions"
msgstr "Begränsningar av programvaruinstallation"
#: libmalcontent-ui/user-controls.ui:280
#: libmalcontent-ui/user-controls.ui:77
msgid "Restrict Application _Installation"
msgstr "Begränsa _installation av program"
#: libmalcontent-ui/user-controls.ui:365
#: libmalcontent-ui/user-controls.ui:99
msgid "Application _Suitability"
msgstr "_Lämplighet för program"
#: libmalcontent-ui/user-controls.ui:387
#: libmalcontent-ui/user-controls.ui:102
msgid ""
"Restricts browsing or installation of applications to applications suitable "
"for certain ages or above."
"Restricts the browsing or installation of applications unsuitable for this "
"age or younger."
msgstr ""
"Begränsar bläddring bland eller installation av program till program som är "
"lämpliga för vissa åldrar och uppåt."
"Begränsar bläddring bland eller installation av program som är olämpliga för "
"denna ålder och yngre."
#. Translators: This documents the --user command line option to malcontent-control:
#: malcontent-control/application.c:102
@ -300,44 +257,44 @@ msgstr "Användare att välja i användargränssnittet"
msgid "USERNAME"
msgstr "ANVÄNDARNAMN"
#: malcontent-control/application.c:115
#: malcontent-control/application.c:116
msgid "— view and edit parental controls"
msgstr "— visa och redigera föräldrakontroller"
#. Translators: This is the title of the main window
#. 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.desktop.in:3
msgid "Parental Controls"
msgstr "Föräldrakontroller"
#: malcontent-control/application.c:308
#: malcontent-control/application.c:309
msgid "Copyright © 2019, 2020 Endless Mobile, Inc."
msgstr "Copyright © 2019, 2020 Endless Mobile, Inc."
#. Translators: this should be "translated" to the
#. names of people who have translated Malcontent into
#. this language, one per line.
#: malcontent-control/application.c:313
#: malcontent-control/application.c:314
msgid "translator-credits"
msgstr "Anders Jonsson <anders.jonsson@norsjovallen.se>"
#. Translators: "Malcontent" is the brand name of this
#. project, so should not be translated.
#: malcontent-control/application.c:319
#: malcontent-control/application.c:320
msgid "Malcontent Website"
msgstr "Webbplats för Malcontent"
#: malcontent-control/application.c:337
#: malcontent-control/application.c:341
msgid "The help contents could not be displayed"
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"
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."
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!
#. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new
#.
#: malcontent-control/application.c:407
#: malcontent-control/application.c:421
#, c-format
msgid ""
"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 "
"att ta i beaktande."
#: malcontent-control/carousel.ui:48
#: malcontent-control/carousel.ui:38
msgid "Previous Page"
msgstr "Föregående sida"
#: malcontent-control/carousel.ui:74
#: malcontent-control/carousel.ui:57
msgid "Next Page"
msgstr "Nästa sida"
#: malcontent-control/main.ui:115
#: malcontent-control/main.ui:87
msgid "Permission Required"
msgstr "Behörighet krävs"
#: malcontent-control/main.ui:129
#: malcontent-control/main.ui:88
msgid ""
"Permission is required to view and change user parental controls settings."
msgstr ""
"Behörighet krävs för att visa och ändra inställningar för föräldrakontroll "
"för användare."
#: malcontent-control/main.ui:182
#: malcontent-control/main.ui:110
msgid "No Standard User Accounts"
msgstr "Inga standardanvändarkonton"
#: malcontent-control/main.ui:197
#: malcontent-control/main.ui:111
msgid ""
"Parental controls can only be applied to standard user\n"
"accounts. These can be created in the user settings."
@ -394,19 +351,19 @@ msgstr ""
"standardanvändarkonton. Dessa kan skapas i\n"
"användarinställningarna."
#: malcontent-control/main.ui:210
#: malcontent-control/main.ui:115
msgid "_User Settings"
msgstr "_Användarinställningar"
#: malcontent-control/main.ui:238
#: malcontent-control/main.ui:138
msgid "Loading…"
msgstr "Läser in…"
#: malcontent-control/main.ui:301
#: malcontent-control/main.ui:171
msgid "_Help"
msgstr "_Hjälp"
#: malcontent-control/main.ui:305
#: malcontent-control/main.ui:175
msgid "_About Parental Controls"
msgstr "_Om Föräldrakontroller"
@ -431,12 +388,12 @@ msgstr ""
msgid "Main window"
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"
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!
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:14
msgid ""
"parental controls;screen time;app restrictions;web browser restrictions;oars;"
"usage;usage limit;kid;child;"
@ -478,26 +435,3 @@ msgstr "Användaren ”%s” har ingen återstående tid"
#, c-format
msgid "Error setting time limit on login session: %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"

656
po/tr.po
View File

@ -1,381 +1,429 @@
# Turkish translations for malcontent package.
# Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER
# Copyright (C) 2022 malcontent's COPYRIGHT HOLDER
# This file is distributed under the same license as the malcontent package.
# Automatically generated, 2020.
#
# Sabri Ünal <libreajans@gmail.com>, 2022.
# Emin Tufan Çetin <etcetin@gmail.com>, 2022.
#
msgid ""
msgstr ""
"Project-Id-Version: malcontent\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-06-10 12:04+0100\n"
"PO-Revision-Date: 2020-04-15 13:42+0100\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/"
"issues\n"
"POT-Creation-Date: 2022-05-18 03:25+0000\n"
"PO-Revision-Date: 2023-03-09 03:35+0300\n"
"Last-Translator: Sabri Ünal <libreajans@gmail.com>\n"
"Language-Team: Türkçe <gnome-turk@gnome.org>\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 3.1.1\n"
"X-POOTLE-MTIME: 1434043811.000000\n"
#: accounts-service/com.endlessm.ParentalControls.policy.in:4
msgid "Change your own app filter"
msgstr ""
msgstr "Kendi uygulama süzgecini değiştir"
#: accounts-service/com.endlessm.ParentalControls.policy.in:5
msgid "Authentication is required to change your app filter."
msgstr ""
msgstr "Uygulama süzgecinizi değiştirmek için kimlik doğrulanmalıdır."
#: accounts-service/com.endlessm.ParentalControls.policy.in:14
msgid "Read your own app filter"
msgstr ""
msgstr "Kendi uygulama süzgecini oku"
#: accounts-service/com.endlessm.ParentalControls.policy.in:15
msgid "Authentication is required to read your app filter."
msgstr ""
msgstr "Uygulama süzgecinizi okumak için kimlik doğrulanmalıdır."
#: accounts-service/com.endlessm.ParentalControls.policy.in:24
msgid "Change another users app filter"
msgstr ""
msgstr "Başka kullanıcının uygulama süzgecini değiştir"
#: accounts-service/com.endlessm.ParentalControls.policy.in:25
msgid "Authentication is required to change another users app filter."
msgstr ""
"Başka kullanıcının uygulama süzgecini değiştirmek için kimlik "
"doğrulanmalıdır."
#: accounts-service/com.endlessm.ParentalControls.policy.in:34
msgid "Read another users app filter"
msgstr ""
msgstr "Başka kullanıcının uygulama süzgecini oku"
#: accounts-service/com.endlessm.ParentalControls.policy.in:35
msgid "Authentication is required to read another users app filter."
msgstr ""
"Başka kullanıcının uygulama süzgecini okumak için kimlik doğrulanmalıdır."
#: accounts-service/com.endlessm.ParentalControls.policy.in:44
msgid "Change your own session limits"
msgstr ""
msgstr "Kendi oturum sınırlarını değiştir"
#: accounts-service/com.endlessm.ParentalControls.policy.in:45
msgid "Authentication is required to change your session limits."
msgstr ""
msgstr "Kendi oturum sınırlarınızı değiştirmek için kimlik doğrulanmalıdır."
#: accounts-service/com.endlessm.ParentalControls.policy.in:54
msgid "Read your own session limits"
msgstr ""
msgstr "Kendi oturum sınırlarını oku"
#: accounts-service/com.endlessm.ParentalControls.policy.in:55
msgid "Authentication is required to read your session limits."
msgstr ""
msgstr "Kendi oturum sınırlarınızı okumak için kimlik doğrulanmalıdır."
#: accounts-service/com.endlessm.ParentalControls.policy.in:64
msgid "Change another users session limits"
msgstr ""
msgstr "Başka kullanıcının oturum kısıtlarını değiştir"
#: accounts-service/com.endlessm.ParentalControls.policy.in:65
msgid "Authentication is required to change another users session limits."
msgstr ""
"Başka kullanıcının oturum sınırlarını değiştirmek için kimlik "
"doğrulanmalıdır."
#: accounts-service/com.endlessm.ParentalControls.policy.in:74
msgid "Read another users session limits"
msgstr ""
msgstr "Başka kullanıcının oturum sınırlarını oku"
#: accounts-service/com.endlessm.ParentalControls.policy.in:75
msgid "Authentication is required to read another users session limits."
msgstr ""
"Başka kullanıcının oturum sınırlarını okumak için kimlik doğrulanmalıdır."
#: accounts-service/com.endlessm.ParentalControls.policy.in:84
msgid "Change your own account info"
msgstr ""
msgstr "Kendi hesap bilgilerini değiştir"
#: accounts-service/com.endlessm.ParentalControls.policy.in:85
msgid "Authentication is required to change your account info."
msgstr ""
msgstr "Kendi hesap bilgilerinizi değiştirmek için kimlik doğrulanmalıdır."
#: accounts-service/com.endlessm.ParentalControls.policy.in:94
msgid "Read your own account info"
msgstr ""
msgstr "Kendi hesap bilgilerini oku"
#: accounts-service/com.endlessm.ParentalControls.policy.in:95
msgid "Authentication is required to read your account info."
msgstr ""
msgstr "Kendi hesap bilgilerinizi okumak için kimlik doğrulanmalıdır."
#: accounts-service/com.endlessm.ParentalControls.policy.in:104
msgid "Change another users account info"
msgstr ""
msgstr "Başka kullanıcının hesap bilgilerini değiştir"
#: accounts-service/com.endlessm.ParentalControls.policy.in:105
msgid "Authentication is required to change another users account info."
msgstr ""
"Başka kullanıcının hesap bilgilerini değiştirmek için kimlik doğrulanmalıdır."
#: accounts-service/com.endlessm.ParentalControls.policy.in:114
msgid "Read another users account info"
msgstr ""
msgstr "Başka kullanıcının hesap bilgilerini oku"
#: accounts-service/com.endlessm.ParentalControls.policy.in:115
msgid "Authentication is required to read another users account info."
msgstr ""
"Başka kullanıcının hesap bilgilerini okumak için kimlik doğrulanmalıdır."
#: libmalcontent/app-filter.c:694
#, c-format
msgid "App filter for user %u was in an unrecognized format"
msgstr ""
msgstr "%u kullanıcısı için uygulama süzgeci tanınmayan biçimde"
#: libmalcontent/app-filter.c:725
#, c-format
msgid "OARS filter for user %u has an unrecognized kind %s"
msgstr ""
msgstr "%u kullanıcısı için OARS süzgeci tanınmayan %s türünde"
#: libmalcontent/manager.c:283 libmalcontent/manager.c:412
#: libmalcontent/manager.c:283 libmalcontent/manager.c:420
#: libmalcontent/manager.c:803
#, c-format
msgid "Not allowed to query app filter data for user %u"
msgstr ""
msgid "Not allowed to query parental controls data for user %u"
msgstr "%u kullanıcısı için ebeveyn denetimi verileri sorgulanamaz"
#: libmalcontent/manager.c:288
#, c-format
msgid "User %u does not exist"
msgstr ""
msgstr "%u kullanıcısı yok"
#: libmalcontent/manager.c:394
#: libmalcontent/manager.c:296
msgid "System accounts service not available"
msgstr "Sistem hesap hizmeti kullanılamıyor"
#: libmalcontent/manager.c:402
msgid "App filtering is globally disabled"
msgstr ""
msgstr "Uygulama süzgeci tümüyle devre dışı"
#: libmalcontent/manager.c:777
#: libmalcontent/manager.c:785
msgid "Session limits are globally disabled"
msgstr ""
#: libmalcontent/manager.c:795
#, c-format
msgid "Not allowed to query session limits data for user %u"
msgstr ""
msgstr "Oturum kısıtları tümüyle devre dışı"
#: libmalcontent/session-limits.c:306
#, c-format
msgid "Session limit for user %u was in an unrecognized format"
msgstr ""
msgstr "%u kullanıcısı için oturum kısıtları tanınmayan biçimde"
#: libmalcontent/session-limits.c:328
#, c-format
msgid "Session limit for user %u has an unrecognized type %u"
msgstr ""
msgstr "%u kullanıcısı için oturum kısıtları tanınmayan %u türünde"
#: libmalcontent/session-limits.c:346
#, c-format
msgid "Session limit for user %u has invalid daily schedule %u%u"
msgstr ""
msgstr "%u kullanıcısı için oturum kısıtları geçersiz günlük düzende %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 ""
msgstr "%s (%s)"
#: libmalcontent-ui/gs-content-rating.c:209
msgid "General"
msgstr ""
msgstr "Genel"
#: libmalcontent-ui/gs-content-rating.c:218
msgid "ALL"
msgstr ""
msgstr "TÜMÜ"
#: libmalcontent-ui/gs-content-rating.c:222
#: libmalcontent-ui/gs-content-rating.c:485
msgid "Adults Only"
msgstr ""
msgstr "Yalnızca Yetişkinler"
#: libmalcontent-ui/gs-content-rating.c:224
#: libmalcontent-ui/gs-content-rating.c:484
msgid "Mature"
msgstr ""
msgstr "Yetişkin"
#: libmalcontent-ui/gs-content-rating.c:226
#: libmalcontent-ui/gs-content-rating.c:483
msgid "Teen"
msgstr ""
msgstr "Genç"
#: libmalcontent-ui/gs-content-rating.c:228
#: libmalcontent-ui/gs-content-rating.c:482
msgid "Everyone 10+"
msgstr ""
msgstr "10 Yaş Üstü Herkes"
#: libmalcontent-ui/gs-content-rating.c:230
#: libmalcontent-ui/gs-content-rating.c:481
msgid "Everyone"
msgstr ""
msgstr "Herkes"
#: libmalcontent-ui/gs-content-rating.c:232
#: libmalcontent-ui/gs-content-rating.c:480
msgid "Early Childhood"
msgstr ""
msgstr "Erken Çocukluk"
#. Translators: the placeholder is a users full name
#: libmalcontent-ui/restrict-applications-dialog.c:222
#, c-format
msgid "Restrict %s from using the following installed applications."
msgstr ""
msgstr "%s kullanıcısının aşağıdaki kurulu uygulamaları kullanmasını kısıtla."
#: libmalcontent-ui/restrict-applications-dialog.ui:6
#: libmalcontent-ui/restrict-applications-dialog.ui:12
msgid "Restrict Applications"
msgstr ""
msgstr "Uygulamaları Kısıtla"
#: libmalcontent-ui/restrict-applications-selector.ui:24
msgid "No applications found to restrict."
msgstr ""
msgstr "Kısıtlanacak uygulama bulunamadı."
#. Translators: this is the full name for an unknown user account.
#: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253
#: libmalcontent-ui/user-controls.c:207 libmalcontent-ui/user-controls.c:218
msgid "unknown"
msgstr ""
msgstr "bilinmeyen"
#: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425
#: libmalcontent-ui/user-controls.c:711
#: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397
#: libmalcontent-ui/user-controls.c:669
msgid "All Ages"
msgstr ""
msgstr "Tüm Yaşlar"
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:514
#: libmalcontent-ui/user-controls.c:477
#, c-format
msgid ""
"Prevents %s from running web browsers. Limited web content may still be "
"available in other applications."
msgstr ""
"%s kullanıcısının web tarayıcılarını çalıştırmasını engeller. Yine de "
"sınırlı web içeriği diğer uygulamalarda da bulunabilir."
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:519
#: libmalcontent-ui/user-controls.c:482
#, c-format
msgid "Prevents specified applications from being used by %s."
msgstr ""
msgstr "Belirtilen uygulamaların %s tarafından kullanılmasını engeller."
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:524
#: libmalcontent-ui/user-controls.c:487
#, c-format
msgid "Prevents %s from installing applications."
msgstr ""
msgstr "%s kullanıcısının uygulama kurmasını engeller."
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:529
#, c-format
msgid "Applications installed by %s will not appear for other users."
msgstr ""
#: libmalcontent-ui/user-controls.ui:17
#: libmalcontent-ui/user-controls.ui:16
msgid "Application Usage Restrictions"
msgstr ""
msgstr "Uygulama Kullanım Kısıtlamaları"
#: libmalcontent-ui/user-controls.ui:68
msgid "Restrict _Web Browsers"
msgstr ""
msgstr "_Web Tarayıcılarını Kısıtla"
#: libmalcontent-ui/user-controls.ui:152
msgid "_Restrict Applications"
msgstr ""
msgstr "Uygulamaları _Kısıtla"
#: libmalcontent-ui/user-controls.ui:231
msgid "Software Installation Restrictions"
msgstr ""
msgstr "Yazılım Kurulumu Kısıtlamaları"
#: libmalcontent-ui/user-controls.ui:281
#: libmalcontent-ui/user-controls.ui:282
msgid "Restrict Application _Installation"
msgstr ""
msgstr "Uygulama _Kurulumunu Kısıtla"
#: libmalcontent-ui/user-controls.ui:366
msgid "Restrict Application Installation for _Others"
msgstr ""
#: libmalcontent-ui/user-controls.ui:451
#: libmalcontent-ui/user-controls.ui:367
msgid "Application _Suitability"
msgstr ""
msgstr "Uygulama _Uygunluğu"
#: libmalcontent-ui/user-controls.ui:473
# Biraz serbest çeviri oldu.
#: libmalcontent-ui/user-controls.ui:389
msgid ""
"Restricts browsing or installation of applications to applications suitable "
"for certain ages or above."
msgstr ""
"Gezinmeyi veya uygulamaların kurulmasını belirli yaşa veya üstüne elverişli "
"uygulamalarla kısıtla."
#. Translators: This documents the --user command line option to malcontent-control:
#: malcontent-control/application.c:102
msgid "User to select in the UI"
msgstr "Kullanıcı arayüzünde seçilecek kullanıcı"
#. Translators: This is a placeholder for a command line argument value:
#: malcontent-control/application.c:104
msgid "USERNAME"
msgstr "KULLANICIADI"
#: malcontent-control/application.c:116
msgid "— view and edit parental controls"
msgstr "— ebeveyn denetimlerini görüntüle ve düzenle"
#. Translators: This is the title of the main window
#. Translators: the name of the application as it appears in a software center
#: malcontent-control/application.c:105 malcontent-control/main.ui:12
#: malcontent-control/application.c:123 malcontent-control/main.ui:12
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3
msgid "Parental Controls"
msgstr ""
msgstr "Ebeveyn Denetimleri"
#: malcontent-control/application.c:270
#: malcontent-control/application.c:309
msgid "Copyright © 2019, 2020 Endless Mobile, Inc."
msgstr ""
msgstr "Telif Hakkı © 2019, 2020 Endless Mobile, Inc."
#. Translators: this should be "translated" to the
#. names of people who have translated Malcontent into
#. this language, one per line.
#: malcontent-control/application.c:275
#: malcontent-control/application.c:314
msgid "translator-credits"
msgstr ""
"Sabri Ünal <libreajans@gmail.com>\n"
"Emin Tufan Çetin <etcetin@gmail.com>"
#. Translators: "Malcontent" is the brand name of this
#. project, so should not be translated.
#: malcontent-control/application.c:281
#: malcontent-control/application.c:320
msgid "Malcontent Website"
msgstr ""
#: malcontent-control/application.c:299
msgid "The help contents could not be displayed"
msgstr ""
#: malcontent-control/application.c:336
msgid "Failed to load user data from the system"
msgstr ""
msgstr "Malcontent Web Sitesi"
#: malcontent-control/application.c:338
msgid "The help contents could not be displayed"
msgstr "Yardım içeriği gösterilemiyor"
#: malcontent-control/application.c:375
msgid "Failed to load user data from the system"
msgstr "Sistemden kullanıcı verisi yüklenemedi"
#: malcontent-control/application.c:377
msgid "Please make sure that the AccountsService is installed and enabled."
msgstr "AccountsServicein kurulu ve etkinleştirildiğinden emin olun."
#. Translators: Replace the link to commonsensemedia.org with some
#. * localised guidance for parents/carers on how to set restrictions on
#. * their child/caree in a responsible way which is in keeping with the
#. * best practice and culture of the region. If no suitable localised
#. * guidance exists, and if the default commonsensemedia.org link is not
#. * suitable, please file an issue against malcontent so we can discuss
#. * further!
#. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new
#.
#: malcontent-control/application.c:408
#, c-format
msgid ""
"Its recommended that restrictions are set as part of an ongoing "
"conversation with %s. <a href='https://www.commonsensemedia.org/privacy-and-"
"internet-safety'>Read guidance</a> on what to consider."
msgstr ""
"Kısıtlamaların, %s ile süren konuşmanın parçası olarak belirlenmesi "
"önerilir. Nelere özenilmesi gerektiğine ilişkin <a href='https://www."
"guvenliweb.org.tr/e_kilavuz'>kılavuzu okuyun</a>."
#: malcontent-control/carousel.ui:48
msgid "Previous Page"
msgstr ""
msgstr "Önceki Sayfa"
#: malcontent-control/carousel.ui:74
msgid "Next Page"
msgstr ""
msgstr "Sonraki Sayfa"
#: malcontent-control/main.ui:93
#: malcontent-control/main.ui:115
msgid "Permission Required"
msgstr ""
msgstr "İzin Gerekli"
#: malcontent-control/main.ui:107
#: malcontent-control/main.ui:129
msgid ""
"Permission is required to view and change user parental controls settings."
msgstr ""
"Kullanıcı ebeveyn denetimleri ayarlarını görüntülemek ve değiştirmek için "
"izin gereklidir."
#: malcontent-control/main.ui:148
msgid "No Child Users Configured"
msgstr ""
#: malcontent-control/main.ui:184
msgid "No Standard User Accounts"
msgstr "Standart Kullanıcı Hesabı Yok"
#: malcontent-control/main.ui:162
#: malcontent-control/main.ui:199
msgid ""
"No child users are currently set up on the system. Create one before setting "
"up their parental controls."
"Parental controls can only be applied to standard user\n"
"accounts. These can be created in the user settings."
msgstr ""
"Ebeveyn denetimleri yalnızca standart kullanıcı hesaplarına uygulanabilir. \n"
"Bunlar kullanıcı ayarlarından oluşturulabilir."
#: malcontent-control/main.ui:174
msgid "Create _Child User"
msgstr ""
#: malcontent-control/main.ui:212
msgid "_User Settings"
msgstr "_Kullanıcı Ayarları"
#: malcontent-control/main.ui:202
#: malcontent-control/main.ui:242
msgid "Loading…"
msgstr ""
msgstr "Yükleniyor…"
#: malcontent-control/main.ui:265
#: malcontent-control/main.ui:305
msgid "_Help"
msgstr "_Yardım"
#: malcontent-control/main.ui:269
#: malcontent-control/main.ui:309
msgid "_About Parental Controls"
msgstr ""
msgstr "Ebeveyn Denetimleri _Hakkında"
#. Translators: the brief summary of the application as it appears in a software center.
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4
msgid "Set parental controls and monitor usage by users"
msgstr ""
msgstr "Ebeveyn denetimlerini ayarlayın ve kullanıcılarla kullanımı izleyin"
#. Translators: These are the application description paragraphs in the AppData file.
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16
@ -384,67 +432,40 @@ msgid ""
"use the computer for, what software they can install, and what installed "
"software they can run."
msgstr ""
"Kullanıcıların ebeveyn denetimi kısıtlamalarını yönetin, bilgisayarı ne çok "
"süre kullanabileceklerini, hangi yazılımları kurabileceklerini ve hangi "
"kurulu yazılımları çalıştırabileceklerini denetleyin."
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25
msgid "Main window"
msgstr "Ana pencere"
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39
msgid "The GNOME Project"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59
msgid "Minor improvements to parental controls application UI"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51
msgid "Add a user manual"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52
msgid "Translation updates"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60
msgid "Translations to Ukrainian and Polish"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67
msgid "Improve parental controls application UI and add icon"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68
msgid "Support for indicating which accounts are parent accounts"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75
msgid "Initial release of basic parental controls application"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76
msgid "Support for setting app installation and run restrictions on users"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83
msgid "Maintenance release of underlying parental controls library"
msgstr ""
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7
msgid "org.freedesktop.MalcontentControl"
msgstr ""
msgstr "GNOME Projesi"
#. 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 ""
"parental controls;screen time;app restrictions;web browser restrictions;oars;"
"usage;usage limit;kid;child;"
msgstr ""
"ebeveyn denetimleri;ebeveyn denetimi;aile denetimleri;aile denetimi;ebeveyn "
"kontrolleri;ebeveyn kontrolü;aile kontrolü;ekran zamanı;uygulama "
"kısıtlamaları;uygulama sınırlamaları;yazılım kısıtlamaları;yazılım "
"sınırlamaları;web tarayıcı kısıtlamaları;web tarayıcı sınırlamaları;internet "
"tarayıcı kısıtlamaları;internet tarayıcı sınırlamaları;oars;kullanım;"
"kullanım sınırı;kullanım kısıtı;çocuk;evlat;"
#: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9
msgid "Manage parental controls"
msgstr ""
msgstr "Ebeveyn denetimlerini yönet"
#: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10
msgid "Authentication is required to read and change user parental controls"
msgstr ""
"Kullanıcı ebeveyn denetimlerini okumak ve değiştirmek için kimlik "
"doğrulaması gereklidir"
#: malcontent-control/user-selector.c:426
msgid "Your account"
@ -455,314 +476,19 @@ msgstr "Hesabınız"
#: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188
#, c-format
msgid "User %s has no time limits enabled"
msgstr ""
msgstr "%s kullanıcısının etkin zaman sınırı yok"
#: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172
#, c-format
msgid "Error getting session limits for user %s: %s"
msgstr ""
msgstr "%s kullanıcısı için oturum sınırları alınırken hata oluştu: %s"
#: pam/pam_malcontent.c:182
#, c-format
msgid "User %s has no time remaining"
msgstr ""
msgstr "%s kullanıcısının hiç zamanı kalmadı"
#: pam/pam_malcontent.c:200
#, c-format
msgid "Error setting time limit on login session: %s"
msgstr ""
#~ msgid "No cartoon violence"
#~ msgstr "Çizgi dizisi şiddeti yok"
#~ msgid "Cartoon characters in unsafe situations"
#~ msgstr "Çizgi karakterler güvensiz durumlarda"
#~ msgid "Cartoon characters in aggressive conflict"
#~ msgstr "Çizgi karakterler saldırgan çatışma halinde"
#~ msgid "Graphic violence involving cartoon characters"
#~ msgstr "Çizgi karakterlerin dahil olduğu görsel şiddet"
#~ msgid "No fantasy violence"
#~ msgstr "Fantezi şiddeti yok"
#~ msgid "Characters in unsafe situations easily distinguishable from reality"
#~ msgstr ""
#~ "Güvensiz durumlardaki karakterler gerçeklikten kolayca ayırt edilebilir"
#~ msgid ""
#~ "Characters in aggressive conflict easily distinguishable from reality"
#~ msgstr ""
#~ "Agresif çatışma içindeki karakterler gerçeklikten kolayca ayırt edilebilir"
#~ msgid "Graphic violence easily distinguishable from reality"
#~ msgstr "Gerçeklikten kolayca ayırt edilebilen canlı şiddet"
#~ msgid "No realistic violence"
#~ msgstr "Gerçekçi şiddet yok"
#~ msgid "Mildly realistic characters in unsafe situations"
#~ msgstr "Hafif gerçekçi karakterler güvenli olmayan durumlarda"
#~ msgid "Depictions of realistic characters in aggressive conflict"
#~ msgstr "Agresif çatışma içindeki gerçekçi karakterlerin betimlemesi"
#~ msgid "Graphic violence involving realistic characters"
#~ msgstr "Gerçekçi karakterleri ilgilendiren canlı şiddet"
#~ msgid "No bloodshed"
#~ msgstr "Kan dökme yok"
#~ msgid "Unrealistic bloodshed"
#~ msgstr "Gerçekçi olmayan kan dökme"
#~ msgid "Realistic bloodshed"
#~ msgstr "Gerçekçi kan dökme"
#~ msgid "Depictions of bloodshed and the mutilation of body parts"
#~ msgstr "Kan dökme betimlemeleri ve vücut parçalarının sakatlanması"
#~ msgid "No sexual violence"
#~ msgstr "Cinsel şiddet yok"
#~ msgid "Rape or other violent sexual behavior"
#~ msgstr "Tecavüz veya diğer şiddetli cinsel davranış"
#~ msgid "No references to alcohol"
#~ msgstr "Alkole atıf yok"
#~ msgid "References to alcoholic beverages"
#~ msgstr "Alkollü içeceklere atıflar"
#~ msgid "Use of alcoholic beverages"
#~ msgstr "Alkollü içeceklerin kullanımı"
#~ msgid "No references to illicit drugs"
#~ msgstr "Yasadışı ilaçlara atıf yok"
#~ msgid "References to illicit drugs"
#~ msgstr "Yasadışı ilaçlara atıflar"
#~ msgid "Use of illicit drugs"
#~ msgstr "Yasadışı ilaçların kullanımı"
#~ msgid "References to tobacco products"
#~ msgstr "Tütün ürünlerine atıflar"
#~ msgid "Use of tobacco products"
#~ msgstr "Tütün ürünlerinin kullanımı"
#~ msgid "No nudity of any sort"
#~ msgstr "Herhangi biçimde çıplaklık yok"
#~ msgid "Brief artistic nudity"
#~ msgstr "Kısa sanatsal çıplaklık"
#~ msgid "Prolonged nudity"
#~ msgstr "Uzun çıplaklık"
#~ msgid "No references or depictions of sexual nature"
#~ msgstr "Cinsel doğa atfı veya tasviri yok"
#~ msgid "Provocative references or depictions"
#~ msgstr "Kışkırtıcı atıflar veya betimlemeler"
#~ msgid "Sexual references or depictions"
#~ msgstr "Cinsel atıflar veya betimlemeler"
#~ msgid "Graphic sexual behavior"
#~ msgstr "Canlı cinsel davranış"
#~ msgid "No profanity of any kind"
#~ msgstr "Herhangi biçimde küfür yok"
#~ msgid "Mild or infrequent use of profanity"
#~ msgstr "Hafif veya sık olmayan küfür kullanımı"
#~ msgid "Moderate use of profanity"
#~ msgstr "Orta kullanımlı küfür"
#~ msgid "Strong or frequent use of profanity"
#~ msgstr "Şiddetli veya sık küfür kullanımı"
#~ msgid "No inappropriate humor"
#~ msgstr "Uygunsuz mizah yok"
#~ msgid "Slapstick humor"
#~ msgstr "Kaba mizah"
#~ msgid "Vulgar or bathroom humor"
#~ msgstr "Kaba veya banyo mizahı"
#~ msgid "Mature or sexual humor"
#~ msgstr "Olgun veya cinsel mizah"
#~ msgid "No discriminatory language of any kind"
#~ msgstr "Herhangi biçimde ayrımcı dil yok"
#~ msgid "Negativity towards a specific group of people"
#~ msgstr "Belirli bir insan kümesine karşı olumsuzluk"
#~ msgid "Discrimination designed to cause emotional harm"
#~ msgstr "Duygusal zarara neden olmaya tasarlanmış ayrımcılık"
#~ msgid "Explicit discrimination based on gender, sexuality, race or religion"
#~ msgstr "Cinsiyet, cinsellik, ırk veya din tabanlıık ayrımcılık"
#~ msgid "No advertising of any kind"
#~ msgstr "Herhangi biçimde reklam yok"
#~ msgid "Product placement"
#~ msgstr "Ürün yerleştirme"
#~ msgid "Explicit references to specific brands or trademarked products"
#~ msgstr "Belirli markalara veya ticari markalı ürünlere açık atıflar"
#~ msgid "Users are encouraged to purchase specific real-world items"
#~ msgstr ""
#~ "Kullanıcılar belirli gerçek dünya ögelerini satın almaya özendirilir"
#~ msgid "No gambling of any kind"
#~ msgstr "Herhangi biçimde kumar yok"
#~ msgid "Gambling on random events using tokens or credits"
#~ msgstr ""
#~ "Belirteç veya kontör kullanarak rastlantısal etkinlikler üzerinde kumar"
#~ msgid "Gambling using “play” money"
#~ msgstr "“Oyun” parası kullanarak kumar"
#~ msgid "Gambling using real money"
#~ msgstr "Gerçek para kullanarak kumar"
#~ msgid "No ability to spend money"
#~ msgstr "Para harcama yeteneği yok"
#~ msgid "Users are encouraged to donate real money"
#~ msgstr "Kullanıcılar gerçek para bağışlamaya özendirilir"
#~ msgid "Ability to spend real money in-game"
#~ msgstr "Oyun içinde gerçek para harcanabilmesi"
#~ msgid "No way to chat with other users"
#~ msgstr "Diğer kullanıcılarla sohbet etme yolu yok"
#~ msgid "Moderated chat functionality between users"
#~ msgstr "Kullanıcılar arasında denetlenen konuşma işlevi"
#~ msgid "Uncontrolled chat functionality between users"
#~ msgstr "Kullanıcılar arasında denetlenmeyen konuşma işlevi"
#~ msgid "No way to talk with other users"
#~ msgstr "Diğer kullanıcılarla konuşma yolu yok"
#~ msgid "Uncontrolled audio or video chat functionality between users"
#~ msgstr ""
#~ "Kullanıcılar arasında denetlenmeyen sesli veya görüntülü konuşma işlevi"
#~ msgid "No sharing of social network usernames or email addresses"
#~ msgstr ""
#~ "Sosyal ağ kullanıcı adlarının veya e-posta adreslerinin paylaşımı yok"
#~ msgid "Sharing social network usernames or email addresses"
#~ msgstr "Sosyal ağ kullanıcı adlarını veya e-posta adreslerini paylaşır"
#~ msgid "No sharing of user information with 3rd parties"
#~ msgstr "Kullanıcı bilgisini 3. şahıslarla paylaşmıyor"
#~ msgid "Checking for the latest application version"
#~ msgstr "En son uygulama sürümünün denetlenmesi"
#~ msgid "Sharing diagnostic data that does not let others identify the user"
#~ msgstr ""
#~ "Başkalarının kullanıcıyı tanımasını sağlamayacak tanılama verisinin "
#~ "paylaşılması"
#~ msgid "Sharing information that lets others identify the user"
#~ msgstr ""
#~ "Başkalarının kullanıcıyı tanımasını sağlayacak bilgilerin paylaşılması"
#~ msgid "No sharing of physical location to other users"
#~ msgstr "Fiziksel konumun diğer kullanıcılara paylaşımı yok"
#~ msgid "Sharing physical location to other users"
#~ msgstr "Diğer kullanıcılara fiziksel konumu paylaşır"
#~ msgid "No references to homosexuality"
#~ msgstr "Eş cinselliğe atıf yok"
#~ msgid "Indirect references to homosexuality"
#~ msgstr "Eş cinselliğe doğrudan olmayan atıflar"
#~ msgid "Kissing between people of the same gender"
#~ msgstr "Benzer cinsiyetteki insanlar arasında öpüşme"
#~ msgid "Graphic sexual behavior between people of the same gender"
#~ msgstr "Benzer cinsiyetteki insanların arasında görsel cinsî davranış"
#~ msgid "No references to prostitution"
#~ msgstr "Fuhşa atıf yok"
#~ msgid "Indirect references to prostitution"
#~ msgstr "Fuhşa doğrudan olmayan atıflar"
#~ msgid "Direct references to prostitution"
#~ msgstr "Fuhuşa doğrudan atıflar"
#~ msgid "Graphic depictions of the act of prostitution"
#~ msgstr "Fuhuş eyleminin görsel betimlemeleri"
#~ msgid "No references to adultery"
#~ msgstr "Eş aldatmaya atıf yok"
#~ msgid "Indirect references to adultery"
#~ msgstr "Eş aldatmaya doğrudan olmayan atıflar"
#~ msgid "Direct references to adultery"
#~ msgstr "Eş aldatmaya doğrudan atıflar"
#~ msgid "Graphic depictions of the act of adultery"
#~ msgstr "Eş aldatma eyleminin görsel betimlemeleri"
#~ msgid "No sexualized characters"
#~ msgstr "Cinselleştirilmiş karakterler yok"
#~ msgid "Scantily clad human characters"
#~ msgstr "Yetersizce giyinmiş insan karakterleri"
#~ msgid "Overtly sexualized human characters"
#~ msgstr "Açıkça cinselleştirilmiş insan karakterleri"
#~ msgid "No references to desecration"
#~ msgstr "Kutsala saygısızlığa atıf yok"
#~ msgid "Depictions of modern-day human desecration"
#~ msgstr "Çağdaş zaman insan saygısızlığının betimlemeleri"
#~ msgid "Graphic depictions of modern-day desecration"
#~ msgstr "Çağdaş zaman saygısızlığının görsel betimlemeleri"
#~ msgid "No visible dead human remains"
#~ msgstr "Görününür ölü insan kalıntıları yok"
#~ msgid "Visible dead human remains"
#~ msgstr "Görününür ölü insan kalıntıları"
#~ msgid "Dead human remains that are exposed to the elements"
#~ msgstr "Parçalarına ayrılmış ölü insan kalıntıları"
#~ msgid "Graphic depictions of desecration of human bodies"
#~ msgstr "İnsan bedenlerine saygısızlığın görsel betimlemeleri"
#~ msgid "No references to slavery"
#~ msgstr "Köleliğe atıf yok"
#~ msgid "Depictions or references to historical slavery"
#~ msgstr "Tarihsel köleliğe ait betimlemeler veya atıflar"
#~ msgid "Depictions of modern-day slavery"
#~ msgstr "Çağdaş zaman köleliğinin betimlemeleri"
#~ msgid "Graphic depictions of modern-day slavery"
#~ msgstr "Çağdaş zaman köleliğinin görsel betimlemeleri"
msgstr "Oturum açma oturum zaman sınırı ayarlanırken hata oluştu: %s"

View File

@ -9,216 +9,219 @@
# S.J. Luo <crystal@mickey.ee.nctu.edu.tw>, 1999
# Wei-Lun Chao <chaoweilun@gmail.com>, 2010
# Will Thompson <wjt@endlessm.com>, 2019, 2020
# Freddy Cheng <freddy4212@gmail.com>, 2022.
#
msgid ""
msgstr ""
"Project-Id-Version: malcontent\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-06-10 12:08+0100\n"
"PO-Revision-Date: 2020-04-17 21:58+0000\n"
"Last-Translator: Will Thompson <wjt@endlessm.com>, 2020\n"
"Language-Team: Chinese (Taiwan) (https://www.transifex.com/endless-os/"
"teams/9016/zh_TW/)\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/"
"issues\n"
"POT-Creation-Date: 2022-05-05 03:26+0000\n"
"PO-Revision-Date: 2022-05-31 01:43+0800\n"
"Last-Translator: Freddy Cheng <freddy4212@gmail.com>\n"
"Language-Team: Chinese - Taiwan <chinese-l10n@googlegroups.com>\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"Plural-Forms: nplurals=1; plural=0\n"
"X-Generator: Gtranslator 41.0\n"
#: accounts-service/com.endlessm.ParentalControls.policy.in:4
msgid "Change your own app filter"
msgstr "變更您自己的應用程式篩選條件"
msgstr "更改您的應用程式過濾器"
#: accounts-service/com.endlessm.ParentalControls.policy.in:5
msgid "Authentication is required to change your app filter."
msgstr "需要驗證才能變更您的應用程式篩選條件。"
msgstr "需要認證才能更改您的應用程式過濾器。"
#: accounts-service/com.endlessm.ParentalControls.policy.in:14
msgid "Read your own app filter"
msgstr "讀取您自己的應用程式篩選條件"
msgstr "讀取您的應用程式過濾器"
#: accounts-service/com.endlessm.ParentalControls.policy.in:15
msgid "Authentication is required to read your app filter."
msgstr "需要驗證才能讀取您的應用程式篩選條件。"
msgstr "需要認證才能讀取您的應用程式過濾器。"
#: accounts-service/com.endlessm.ParentalControls.policy.in:24
msgid "Change another users app filter"
msgstr "變更另一使用者的應用程式篩選條件"
msgstr "更改另一位使用者的應用程式過濾器"
#: accounts-service/com.endlessm.ParentalControls.policy.in:25
msgid "Authentication is required to change another users app filter."
msgstr "需要驗證才能變更另一使用者的應用程式篩選條件。"
msgstr "需要認證才能更改另一位使用者的應用程式過濾器。"
#: accounts-service/com.endlessm.ParentalControls.policy.in:34
msgid "Read another users app filter"
msgstr "讀取另一使用者的應用程式篩選條件"
msgstr "讀取另一位使用者的應用程式過濾器"
#: accounts-service/com.endlessm.ParentalControls.policy.in:35
msgid "Authentication is required to read another users app filter."
msgstr "需要驗證才能讀取另一使用者的應用程式篩選條件。"
msgstr "需要認證才能讀取另一位使用者的應用程式過濾器。"
#: accounts-service/com.endlessm.ParentalControls.policy.in:44
msgid "Change your own session limits"
msgstr "更您自己的工作階段限制"
msgstr "更您的工作階段限制"
#: accounts-service/com.endlessm.ParentalControls.policy.in:45
msgid "Authentication is required to change your session limits."
msgstr "需要驗證才能變更您的工作階段限制。"
msgstr "需要認證才能更改您的工作階段限制。"
#: accounts-service/com.endlessm.ParentalControls.policy.in:54
msgid "Read your own session limits"
msgstr "讀取您自己的工作階段限制"
msgstr "讀取您的工作階段限制"
#: accounts-service/com.endlessm.ParentalControls.policy.in:55
msgid "Authentication is required to read your session limits."
msgstr "需要證才能讀取您的工作階段限制。"
msgstr "需要證才能讀取您的工作階段限制。"
#: accounts-service/com.endlessm.ParentalControls.policy.in:64
msgid "Change another users session limits"
msgstr "更另一使用者的工作階段限制"
msgstr "更另一使用者的工作階段限制"
#: accounts-service/com.endlessm.ParentalControls.policy.in:65
msgid "Authentication is required to change another users session limits."
msgstr "需要驗證才能更另一使用者的工作階段限制。"
msgstr "需要驗證才能更另一使用者的工作階段限制。"
#: accounts-service/com.endlessm.ParentalControls.policy.in:74
msgid "Read another users session limits"
msgstr "讀取另一使用者的工作階段限制"
msgstr "讀取另一使用者的工作階段限制"
#: accounts-service/com.endlessm.ParentalControls.policy.in:75
msgid "Authentication is required to read another users session limits."
msgstr "需要驗證才能讀取另一使用者的工作階段限制。"
msgstr "需要認證才能讀取另一位使用者的工作階段限制。"
#: accounts-service/com.endlessm.ParentalControls.policy.in:84
msgid "Change your own account info"
msgstr "更您自己的帳戶資訊"
msgstr "更您的帳戶資訊"
#: accounts-service/com.endlessm.ParentalControls.policy.in:85
msgid "Authentication is required to change your account info."
msgstr "需要驗證才能變更您的帳戶資訊。"
msgstr "需要認證才能更改您的帳戶資訊。"
#: accounts-service/com.endlessm.ParentalControls.policy.in:94
msgid "Read your own account info"
msgstr "讀取您自己的帳戶資訊"
msgstr "讀取您的帳戶資訊"
#: accounts-service/com.endlessm.ParentalControls.policy.in:95
msgid "Authentication is required to read your account info."
msgstr "需要證才能讀取您的帳戶資訊。"
msgstr "需要證才能讀取您的帳戶資訊。"
#: accounts-service/com.endlessm.ParentalControls.policy.in:104
msgid "Change another users account info"
msgstr "更另一使用者帳戶資訊"
msgstr "更另一使用者帳戶資訊"
#: accounts-service/com.endlessm.ParentalControls.policy.in:105
msgid "Authentication is required to change another users account info."
msgstr "需要驗證才能變更另一使用者的帳戶資訊。"
msgstr "需要認證才能更改另一位使用者的帳戶資訊。"
#: accounts-service/com.endlessm.ParentalControls.policy.in:114
msgid "Read another users account info"
msgstr "讀取另一使用者的帳戶資訊"
msgstr "讀取另一使用者的帳戶資訊"
#: accounts-service/com.endlessm.ParentalControls.policy.in:115
msgid "Authentication is required to read another users account info."
msgstr "需要驗證才能讀取另一使用者的帳戶資訊。"
msgstr "需要認證才能讀取另一位使用者的帳戶資訊。"
#: libmalcontent/app-filter.c:694
#, c-format
msgid "App filter for user %u was in an unrecognized format"
msgstr "針對使用者 %u 的應用程式篩選條件為無法辨識的格式"
msgstr "使用者 %u 的應用程式過濾器設定格式錯誤"
#: libmalcontent/app-filter.c:725
#, c-format
msgid "OARS filter for user %u has an unrecognized kind %s"
msgstr "針對使用者 %u 的 OARS 篩選條件有無法辨識類型 %s"
msgstr "使用者 %u 的 OARS 過濾器設定有無效類型「%s」"
#: libmalcontent/manager.c:283 libmalcontent/manager.c:412
#: libmalcontent/manager.c:283 libmalcontent/manager.c:420
#: libmalcontent/manager.c:803
#, c-format
msgid "Not allowed to query app filter data for user %u"
msgstr "不允許查詢使用者 %u 應用程式篩選條件資料"
#| msgid "Not allowed to query app filter data for user %u"
msgid "Not allowed to query parental controls data for user %u"
msgstr "不允許查詢使用者 %u 的應用程式過濾器資料"
#: libmalcontent/manager.c:288
#, c-format
msgid "User %u does not exist"
msgstr "使用者 %u 不存在"
msgstr "使用者「%u」不存在"
#: libmalcontent/manager.c:394
#: libmalcontent/manager.c:296
msgid "System accounts service not available"
msgstr "沒有系統帳號服務"
#: libmalcontent/manager.c:402
msgid "App filtering is globally disabled"
msgstr "已全域停用應用程式篩選條件"
msgstr "已全域停用應用程式過濾器"
#: libmalcontent/manager.c:777
#: libmalcontent/manager.c:785
msgid "Session limits are globally disabled"
msgstr "已全域停用工作階段限制"
#: libmalcontent/manager.c:795
#, c-format
msgid "Not allowed to query session limits data for user %u"
msgstr "不允許查詢使用者 %u 工作階段限制"
#: libmalcontent/session-limits.c:306
#, c-format
msgid "Session limit for user %u was in an unrecognized format"
msgstr "針對使用者 %u 的工作階段限制為無法辨識的格式"
msgstr "使用者 %u 的工作階段限制設定格式錯誤"
#: libmalcontent/session-limits.c:328
#, c-format
msgid "Session limit for user %u has an unrecognized type %u"
msgstr "針對使用者 %u 的工作階段限制有無法辨識的類型 %u"
msgstr "使用者 %u 的工作階段限制設定有無效類型「%u」"
#: libmalcontent/session-limits.c:346
#, c-format
msgid "Session limit for user %u has invalid daily schedule %u%u"
msgstr "針對使用者 %u 的工作階段限制有無效的每日排程 %u%u"
msgstr "使用者 %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 ""
msgstr "%s%s"
#: libmalcontent-ui/gs-content-rating.c:209
msgid "General"
msgstr ""
msgstr "一般"
#: libmalcontent-ui/gs-content-rating.c:218
msgid "ALL"
msgstr ""
msgstr "所有"
#: libmalcontent-ui/gs-content-rating.c:222
#: libmalcontent-ui/gs-content-rating.c:485
msgid "Adults Only"
msgstr ""
msgstr "僅限成人"
#: libmalcontent-ui/gs-content-rating.c:224
#: libmalcontent-ui/gs-content-rating.c:484
msgid "Mature"
msgstr ""
msgstr "成熟"
#: libmalcontent-ui/gs-content-rating.c:226
#: libmalcontent-ui/gs-content-rating.c:483
msgid "Teen"
msgstr ""
msgstr "青少年"
#: libmalcontent-ui/gs-content-rating.c:228
#: libmalcontent-ui/gs-content-rating.c:482
msgid "Everyone 10+"
msgstr ""
msgstr "十歲以上"
#: libmalcontent-ui/gs-content-rating.c:230
#: libmalcontent-ui/gs-content-rating.c:481
msgid "Everyone"
msgstr ""
msgstr "任何人"
#: libmalcontent-ui/gs-content-rating.c:232
#: libmalcontent-ui/gs-content-rating.c:480
msgid "Early Childhood"
msgstr ""
msgstr "幼兒"
#. Translators: the placeholder is a users full name
#: libmalcontent-ui/restrict-applications-dialog.c:222
#, c-format
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:12
@ -227,116 +230,146 @@ msgstr "限制應用程式"
#: libmalcontent-ui/restrict-applications-selector.ui:24
msgid "No applications found to restrict."
msgstr "找不到可限制的應用程式。"
msgstr "沒有可限制的應用程式。"
#. Translators: this is the full name for an unknown user account.
#: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253
#: libmalcontent-ui/user-controls.c:207 libmalcontent-ui/user-controls.c:218
msgid "unknown"
msgstr "未知"
msgstr "不明"
#: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425
#: libmalcontent-ui/user-controls.c:711
#: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397
#: libmalcontent-ui/user-controls.c:669
msgid "All Ages"
msgstr "所有年齡"
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:514
#: libmalcontent-ui/user-controls.c:477
#, c-format
msgid ""
"Prevents %s from running web browsers. Limited web content may still be "
"available in other applications."
msgstr ""
"防止 '%s' 執行網頁瀏覽器。受限制的網頁內容可能在其他應用程式中仍然可用。"
msgstr "防止 %s 執行網頁瀏覽器。受限制的網頁內容仍可能在其他應用程式中取用。"
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:519
#: libmalcontent-ui/user-controls.c:482
#, c-format
msgid "Prevents specified applications from being used by %s."
msgstr "防止 %s 使用特定應用程式。"
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:524
#: libmalcontent-ui/user-controls.c:487
#, c-format
msgid "Prevents %s from installing applications."
msgstr "防止 %s 安裝應用程式。"
#. Translators: The placeholder is a users display name.
#: libmalcontent-ui/user-controls.c:529
#, c-format
msgid "Applications installed by %s will not appear for other users."
msgstr "由 %s 安裝的應用程式將不會讓其他使用者看到。"
#: libmalcontent-ui/user-controls.ui:17
#: libmalcontent-ui/user-controls.ui:16
msgid "Application Usage Restrictions"
msgstr "應用程式使用限制"
#: libmalcontent-ui/user-controls.ui:68
msgid "Restrict _Web Browsers"
msgstr "限制_網頁瀏覽器"
msgstr "限制網頁瀏覽器(_W)"
#: libmalcontent-ui/user-controls.ui:152
msgid "_Restrict Applications"
msgstr "_限制應用程式"
msgstr "限制應用程式(_R)"
#: libmalcontent-ui/user-controls.ui:231
msgid "Software Installation Restrictions"
msgstr "軟體安裝限制"
#: libmalcontent-ui/user-controls.ui:281
#: libmalcontent-ui/user-controls.ui:282
msgid "Restrict Application _Installation"
msgstr "限制應用程式_安裝"
msgstr "限制應用程式安裝(_I)"
#: libmalcontent-ui/user-controls.ui:366
msgid "Restrict Application Installation for _Others"
msgstr " 針對其他人_限制安裝應用程式"
#: libmalcontent-ui/user-controls.ui:451
#: libmalcontent-ui/user-controls.ui:367
msgid "Application _Suitability"
msgstr "應用程式 _合適性"
msgstr "應用程式合適年齡(_S)"
#: libmalcontent-ui/user-controls.ui:473
#: libmalcontent-ui/user-controls.ui:389
msgid ""
"Restricts browsing or installation of applications to applications suitable "
"for certain ages or above."
msgstr "將瀏覽或安裝的應用程式,限制為適合特定年齡或更年長年齡的應用程式。"
msgstr "根據應用程式年齡分級制度,限制可瀏覽或安裝的應用程式項目。"
#. Translators: This documents the --user command line option to malcontent-control:
#: malcontent-control/application.c:102
msgid "User to select in the UI"
msgstr "界面上要選擇的使用者"
#. Translators: This is a placeholder for a command line argument value:
#: malcontent-control/application.c:104
msgid "USERNAME"
msgstr "使用者名稱"
#: malcontent-control/application.c:116
#| msgid "Manage parental controls"
msgid "— view and edit parental controls"
msgstr "― 檢視和編輯家長控制"
#. Translators: This is the title of the main window
#. Translators: the name of the application as it appears in a software center
#: malcontent-control/application.c:105 malcontent-control/main.ui:12
#: malcontent-control/application.c:123 malcontent-control/main.ui:12
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3
msgid "Parental Controls"
msgstr "分級控制"
msgstr "家長控制"
#: malcontent-control/application.c:270
#: malcontent-control/application.c:309
msgid "Copyright © 2019, 2020 Endless Mobile, Inc."
msgstr "版權所有 © 2019, 2020 Endless Mobile, Inc."
#. Translators: this should be "translated" to the
#. names of people who have translated Malcontent into
#. this language, one per line.
#: malcontent-control/application.c:275
#: malcontent-control/application.c:314
msgid "translator-credits"
msgstr ""
"S.J. Luo <crystal@mickey.ee.nctu.edu.tw>, 1999\n"
"Abel Cheung <abel@oaka.org>, 2001-2003, 2005\n"
"Wei-Lun Chao <chaoweilun@gmail.com>, 2010\n"
"Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>, 2010\n"
"Roddy Shuler <roddy@stanfordalumni.org>, 2018\n"
"Will Thompson <wjt@endlessm.com>, 2019, 2020\n"
"Freddy Cheng <freddy4212@gmail.com>, 2022."
#. Translators: "Malcontent" is the brand name of this
#. project, so should not be translated.
#: malcontent-control/application.c:281
#: malcontent-control/application.c:320
msgid "Malcontent Website"
msgstr "Malcontent 網站"
#: malcontent-control/application.c:299
msgid "The help contents could not be displayed"
msgstr "無法顯示說明內容"
#: malcontent-control/application.c:336
msgid "Failed to load user data from the system"
msgstr "從系統載入使用者資料失敗"
#: malcontent-control/application.c:338
msgid "The help contents could not be displayed"
msgstr "無法顯示求助內容"
#: malcontent-control/application.c:375
msgid "Failed to load user data from the system"
msgstr "無法從系統載入使用者資料"
#: malcontent-control/application.c:377
msgid "Please make sure that the AccountsService is installed and enabled."
msgstr "請確認已安裝並啟用 AccountsService。"
#. Translators: Replace the link to commonsensemedia.org with some
#. * localised guidance for parents/carers on how to set restrictions on
#. * their child/caree in a responsible way which is in keeping with the
#. * best practice and culture of the region. If no suitable localised
#. * guidance exists, and if the default commonsensemedia.org link is not
#. * suitable, please file an issue against malcontent so we can discuss
#. * further!
#. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new
#.
#: malcontent-control/application.c:408
#, c-format
msgid ""
"Its recommended that restrictions are set as part of an ongoing "
"conversation with %s. <a href='https://www.commonsensemedia.org/privacy-and-"
"internet-safety'>Read guidance</a> on what to consider."
msgstr ""
"建議在設定家長控制前要先與 %s 溝通過。<a href='https://parents.smartkid.org."
"tw/'>閱讀指南</a>了解須考慮的事項。"
#: malcontent-control/carousel.ui:48
msgid "Previous Page"
msgstr "上一頁"
@ -345,46 +378,48 @@ msgstr "上一頁"
msgid "Next Page"
msgstr "下一頁"
#: malcontent-control/main.ui:93
#: malcontent-control/main.ui:115
msgid "Permission Required"
msgstr "需要權限"
msgstr "需要許可"
#: malcontent-control/main.ui:107
#: malcontent-control/main.ui:129
msgid ""
"Permission is required to view and change user parental controls settings."
msgstr "需要權限才能檢視和變更使用者分級控制設定。"
msgstr "需要許可才能檢視和更改家長控制設定。"
#: malcontent-control/main.ui:148
msgid "No Child Users Configured"
msgstr "沒有預設兒童使用者"
#: malcontent-control/main.ui:184
msgid "No Standard User Accounts"
msgstr "沒有標準使用者"
#: malcontent-control/main.ui:162
#: malcontent-control/main.ui:199
msgid ""
"No child users are currently set up on the system. Create one before setting "
"up their parental controls."
msgstr "系統目前沒有兒童使用者的設定。請在設定他們的分級控制之前先建立一個。"
"Parental controls can only be applied to standard user\n"
"accounts. These can be created in the user settings."
msgstr ""
"家長控制只能套用到標準使用者上。\n"
"可至使用者設定建立帳號。"
#: malcontent-control/main.ui:174
msgid "Create _Child User"
msgstr "建立 _兒童使用者"
#: malcontent-control/main.ui:212
msgid "_User Settings"
msgstr "使用者設定(_U)"
#: malcontent-control/main.ui:202
#: malcontent-control/main.ui:242
msgid "Loading…"
msgstr "載入中……"
msgstr "正在載入…"
#: malcontent-control/main.ui:265
#: malcontent-control/main.ui:305
msgid "_Help"
msgstr "求助(_H)"
#: malcontent-control/main.ui:269
#: malcontent-control/main.ui:309
msgid "_About Parental Controls"
msgstr "_關於分級控制"
msgstr "關於家長控制(_A)"
#. Translators: the brief summary of the application as it appears in a software center.
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4
msgid "Set parental controls and monitor usage by users"
msgstr "設定分級控制和監視使用者的使用情況"
msgstr "設定家長控制和監視孩童或青少年的使用情況"
#. Translators: These are the application description paragraphs in the AppData file.
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16
@ -393,71 +428,34 @@ msgid ""
"use the computer for, what software they can install, and what installed "
"software they can run."
msgstr ""
"管理使用者的分級控制限制,控制他們可以使用電腦多久、可以安裝什麼軟體以及能執"
"行哪些已安裝的軟體。"
"管理孩童或青少年的家長控制設定值,控制他們的電腦使用時間、可以安裝的軟體以及"
"能執行哪些已安裝的軟體。"
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25
msgid "Main window"
msgstr "主視窗"
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39
msgid "The GNOME Project"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59
msgid "Minor improvements to parental controls application UI"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51
msgid "Add a user manual"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52
msgid "Translation updates"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60
msgid "Translations to Ukrainian and Polish"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67
msgid "Improve parental controls application UI and add icon"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68
msgid "Support for indicating which accounts are parent accounts"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75
msgid "Initial release of basic parental controls application"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76
msgid "Support for setting app installation and run restrictions on users"
msgstr ""
#: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83
msgid "Maintenance release of underlying parental controls library"
msgstr ""
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
#: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7
msgid "org.freedesktop.MalcontentControl"
msgstr ""
msgstr "GNOME 專案"
#. 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 ""
"parental controls;screen time;app restrictions;web browser restrictions;oars;"
"usage;usage limit;kid;child;"
msgstr ""
"分級控制;電腦使用時間;應用程式限制;網頁瀏覽器限制;oars;使用;使用限制;小孩;兒"
"童;"
"parental controls;screen time;app restrictions;web browser restrictions;oars;"
"usage;usage limit;kid;child;家長控制;分級控制;電腦使用時間;應用程式限制;網頁"
"瀏覽器限制;使用;使用限制;小孩;兒童;孩童;青少年;軟體限制;安裝限制;限制;"
#: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9
msgid "Manage parental controls"
msgstr "管理分級控制"
msgstr "管理家長控制"
#: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10
msgid "Authentication is required to read and change user parental controls"
msgstr "需要驗證才能讀取和變更使用者分級控制"
msgstr "需要認證才能讀取和更改使用者的家長控制"
#: malcontent-control/user-selector.c:426
msgid "Your account"
@ -468,22 +466,45 @@ msgstr "您的帳號"
#: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188
#, c-format
msgid "User %s has no time limits enabled"
msgstr "沒有為使用者 '%s' 啟用時間限制"
msgstr "沒有啟動「%s」的使用時間限制"
#: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172
#, c-format
msgid "Error getting session limits for user %s: %s"
msgstr "為使用者 %s 取得工作階段限制發生錯誤:%s"
msgstr "取得使用者「%s」的工作階段限制設定發生錯誤:%s"
#: pam/pam_malcontent.c:182
#, c-format
msgid "User %s has no time remaining"
msgstr "使用者 %s 沒有剩餘時間"
msgstr "使用者「%s」已達使用時間上限"
#: pam/pam_malcontent.c:200
#, c-format
msgid "Error setting time limit on login session: %s"
msgstr "登入工作階段時發生設定時間限制錯誤:%s"
msgstr "無法在登入工作階段設定時間限制:%s"
#, c-format
#~ msgid "Not allowed to query session limits data for user %u"
#~ msgstr "不允許查詢使用者 %u 工作階段限制"
#, c-format
#~ msgid "Applications installed by %s will not appear for other users."
#~ msgstr "由 %s 安裝的應用程式將不會讓其他使用者看到。"
#~ msgid "Restrict Application Installation for _Others"
#~ msgstr " 針對其他人_限制安裝應用程式"
#~ msgid "No Child Users Configured"
#~ msgstr "沒有預設兒童使用者"
#~ msgid ""
#~ "No child users are currently set up on the system. Create one before "
#~ "setting up their parental controls."
#~ msgstr ""
#~ "系統目前沒有兒童使用者的設定。請在設定他們的分級控制之前先建立一個。"
#~ msgid "Create _Child User"
#~ msgstr "建立 _兒童使用者"
#~ msgid "No cartoon violence"
#~ msgstr "沒有漫畫暴力"

View File

@ -0,0 +1,4 @@
[wrap-git]
url = https://gitlab.gnome.org/GNOME/libadwaita.git
revision = 1.1.0
depth = 1