307 Commits

Author SHA1 Message Date
Rafał Dzięgiel
b41949fb87 Merge pull request #585 from Rafostar/enhancers-keyfile
Store enhancers settings in separate config file
2025-08-11 18:26:28 +02:00
Rafał Dzięgiel
38752a3832 doc: clapper: Document how to share enhancers config between Flatpaks 2025-08-11 17:32:52 +02:00
Rafał Dzięgiel
659de80741 clapper: Store enhancers settings in separate config file
By enforcing keyfile GSettings backend with a custom file path,
we can store all enhancers settings within known location.
It makes it much easier to share them in between apps in Flatpak.
2025-08-11 17:32:38 +02:00
Rafał Dzięgiel
d2ceb962f1 Merge pull request #584 from Rafostar/additional-docs
doc: Additional migration docs
2025-08-08 19:12:52 +02:00
Rafał Dzięgiel
ff3df7a8bf doc: clapper: Fix typo 2025-08-08 17:52:50 +02:00
Rafał Dzięgiel
31c230dde6 doc: clapper-gtk: Add migrating to 0.10 guide 2025-08-08 10:14:47 +02:00
Rafał Dzięgiel
91b7a0f1a5 Merge pull request #583 from Rafostar/additional-docs
doc: clapper: Additional documentation about enhancers
2025-08-07 22:50:50 +02:00
Rafał Dzięgiel
8d002397df doc: clapper: Additional documentation about enhancers 2025-08-07 22:35:38 +02:00
Rafał Dzięgiel
b9e98e2fdb Merge pull request #581 from Rafostar/flatpak-enhancers
flatpak: Reverse enhancers extension preference order
2025-08-04 20:31:52 +02:00
Rafał Dzięgiel
555b93451e flatpak: Reverse enhancers extension preference order
It seems that Flatpak selects first available branch from the end, not start
2025-08-04 20:13:42 +02:00
Rafał Dzięgiel
cdfac76d66 Merge pull request #580 from Rafostar/versioning
lib: Add runtime version information
2025-08-03 20:11:59 +02:00
Rafał Dzięgiel
ed13d53db9 clapper-gtk: Add runtime version information
Allows apps to check the library version app
is run against, contrary to compiled against
2025-08-03 15:18:44 +02:00
Rafał Dzięgiel
acf2b75f27 clapper: Add runtime version information
Allows apps to check the library version app
is run against, contrary to compiled against
2025-08-03 15:12:28 +02:00
Rafał Dzięgiel
d9c8534bb7 Merge pull request #579 from Rafostar/audio
clapper-gtk: Add audio widget
2025-08-03 14:23:20 +02:00
Rafał Dzięgiel
292b339e8a clapper-app: Use actions from AV widget
Replace all usage of "video" actions with "av" as the former one is deprecated
2025-08-03 13:36:34 +02:00
Rafał Dzięgiel
ddfedddce5 clapper-app: Use player from AV widget
Replace all usage of "clapper_gtk_video_get_player" with
"clapper_gtk_av_get_player" as the former one is deprecated
2025-08-02 20:57:03 +02:00
Rafał Dzięgiel
743097060e gst: sink: Remove unused posting of navigation messages
We only need to post events in the pipeline for navigation to work.
This was never used for anything and it generates a lot of noise
in the pipeline bus when cursor is moving over video.
2025-08-02 20:50:26 +02:00
Rafał Dzięgiel
b0b15cec5c clapper: Add "message" signal to the player
A detailed signal that allows for applications to receive element
messages posted on the pipeline bus. Useful if app cares about
some custom message that player normally does not handle.

For example audio player might want to read "level" messages in
order to show current audio level or implement visualizations.
2025-08-02 20:50:24 +02:00
Rafał Dzięgiel
b9a8b28a1f examples: Add audio player python example
A simple audio player made using "ClapperGtkAudio"
widget with python3 GI bindings
2025-08-02 20:50:22 +02:00
Rafał Dzięgiel
4c8c76c8f7 clapper-gtk: Introduce "ClapperGtkAudio" widget
A widget similar to video but for audio playback only. Widgets from
ClapperGtk library like buttons, seek bar, etc. can be used in it
for building an audio player with ease.
2025-08-02 20:50:20 +02:00
Rafał Dzięgiel
a5db6f701d clapper-gtk: Use AV widget actions directly
Actions of video widget are being deprecated in favour of
the same actions in the recently added AV base class
2025-08-02 20:50:18 +02:00
Rafał Dzięgiel
4301a9a9fa clapper-gtk: video: Split code into subclass
Create a base class called "ClapperGtkAv" and subclass it into "ClapperGtkVideo".
This allows to have player and session inhibit logic in base class and share it
with other subclassed widgets.
2025-08-02 20:50:10 +02:00
Rafał Dzięgiel
c21e1c1c6a Merge pull request #578 from City-busz/window-group
Put each main window into its own group
2025-08-01 16:09:41 +02:00
Balló György
92e0e22e8b Put each main window into its own group
This fixes the problem that a main window cannot be used if a modal dialog
is opened in another main window.
2025-07-31 19:15:29 +02:00
Rafał Dzięgiel
4d5519b42d Merge pull request #575 from Rafostar/playlistable
Expandable playlists support
2025-07-26 18:10:29 +02:00
Rafał Dzięgiel
4a34fb3484 clapper: discoverer: Skip items that already have tags
When tags are populated elsewhere, do not run discovery on them again.
It is possible they were discovered in more efficient maner
(e.g. from playlist data itself).

This avoid us downloading each media item separately after all
playlist items are queued.
2025-07-26 15:37:33 +02:00
Rafał Dzięgiel
d8ea220aad clapper-app: Remove claps handling code
It is now handled inside playlist demuxer, with the other playlist formats
2025-07-26 15:37:31 +02:00
Rafał Dzięgiel
dc56cb201a clapper: Support demuxing uri-list and claps files 2025-07-26 15:37:28 +02:00
Rafał Dzięgiel
07f944fb31 clapper: Update harvest common formats description 2025-07-26 15:37:26 +02:00
Rafał Dzięgiel
b2e6533c30 clapper: Store full caps in harvest
Make it possible to know which enhancer harvested this cached data
2025-07-26 15:37:24 +02:00
Rafał Dzięgiel
7a56fbfff8 clapper: Rename "uri-list-demux" element
Move as harvest URI demuxer since it is supposed to work only with
harvest data from extractable src. Also change caps media type
to "text/x-uri" which is non-standard, but we have to differentiate
single URI from harvest and URI list (one or more URIs).
2025-07-26 15:37:22 +02:00
Rafał Dzięgiel
7457ffda13 clapper: Handle parsed playlists
Handle "ClapperPlaylistParsed" messages on playbin bus by updating current media
item (playlist) to redirect to the first item in that playlist (with changed tags)
and appending remaining items to the queue after that playlist position.

This basically means that playlist gets resolved into simply adding more
items to the queue. This should also work with nested playlists within playlist.
2025-07-26 15:37:18 +02:00
Rafał Dzięgiel
bee2e08fb1 clapper: Add playlist demuxer element
Uses "Playlistable" enhancers to parse playlist and demux first URI in it
2025-07-26 15:32:32 +02:00
Rafał Dzięgiel
0c1d291006 clapper: Split URI list demux code into subclass 2025-07-19 15:43:36 +02:00
Rafał Dzięgiel
4002a63e3a clapper: Add "Playlistable" interface
An interface for creating enhancers that parse data
into individual media items
2025-07-19 15:43:30 +02:00
Rafał Dzięgiel
ff054743e6 flatpak: Sync with Flathub 2025-07-19 15:39:42 +02:00
Rafał Dzięgiel
9432156aec flatpak: Sync with Flathub 2025-07-19 14:54:02 +02:00
Rafał Dzięgiel
47d3ebe693 Revert "flatpak: Skip libmpeg2 build for now"
This reverts commit f63e13ed39.

This workaround does not work, since GStreamer build manifest we use
as shared module from Flathub has explicitly enabled libmpeg2 support.
2025-07-19 12:56:13 +02:00
Rafał Dzięgiel
5f8270f0e8 clapper-app: Retain compatibility with older graphviz 2025-07-19 12:49:01 +02:00
Rafał Dzięgiel
54f059aaa3 clapper-app: Correct pipeline SVG size variable type 2025-07-19 12:03:52 +02:00
Rafał Dzięgiel
f63e13ed39 flatpak: Skip libmpeg2 build for now
Source URI is dead. Build Flatpak without it until
fixed or mirror is found, so our CI works again.
2025-07-19 11:59:22 +02:00
Rafał Dzięgiel
daadabba8d Merge pull request #567 from Rafostar/mpris-compat
MPRIS compat changes
2025-06-26 19:44:07 +02:00
Rafał Dzięgiel
225e665aff clapper: Deprecate MPRIS feature
It was ported to Clapper Enhancers repo as a plugin and applications
using old one should slowy move towards using new plugin instead
2025-06-26 19:37:23 +02:00
Rafał Dzięgiel
31564b568b clapper-app: Prefer MPRIS enhancer over feature object
First try to find and use new MPRIS enhancer plugin, then old MPRIS feature as fallback
2025-06-26 19:09:34 +02:00
Rafał Dzięgiel
1c376612b8 clapper: Do not skip on loading ported enhancers
With some workarounds, we can make enhancers that were ported from
features still be loaded and used within single process without
requirement for building Clapper with their old implementations disabled.

Since MPRIS enhancer already has workarounds in place, lets just remove
all code that was skipping its loading.
2025-06-26 19:06:02 +02:00
Rafał Dzięgiel
c4afd8bea1 Merge pull request #565 from Rafostar/timeline-improvements
Timeline improvements
2025-06-24 19:22:12 +02:00
Rafał Dzięgiel
266c588db9 clapper-gtk: seek-bar: Make custom markers colorful 2025-06-24 18:53:52 +02:00
Rafał Dzięgiel
1c0049ec2b clapper: Make timeline insert/remove work from any thread
Detect and auto switch thread to main if done from a different one.
With this, apps can still continue to implement thread switch and doing
multiple insertions/deletions within single main thread invoke or simply
call this function from a different thread for convenience.
2025-06-24 18:53:43 +02:00
Rafał Dzięgiel
7f326e6875 Merge pull request #564 from Rafostar/disallow-enhancers
clapper: Ability to allow/disallow enhancers
2025-06-24 18:51:52 +02:00
Rafał Dzięgiel
16430c4c66 clapper-app: Allow usage of all reactable enhancers
Enable and use all found enhancer plugins on the system
2025-06-22 13:36:09 +02:00
Rafał Dzięgiel
9f1102bafd clapper: Add ability to enable/disable creation of given enhancer
Allow apps to enable or disable given enhancer instances from being created.
Also as a safely measure, by default only enable enhancers that work
on-demand (extractables) and disable others (reactables).
2025-06-22 13:35:57 +02:00
Rafał Dzięgiel
7b4a19659b Merge pull request #561 from musicinmybrain/remote-only-fsf
Update LGPL-2.1-or-later notices and text for remote-only FSF
2025-06-19 12:43:50 +02:00
Benjamin A. Beasley
8fe46d315c Update LGPL-2.1-or-later license text for remote-only FSF
The Free Software Foundation is now remote-only, and no longer has a
street address. Updated license text is from
https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt.
2025-06-14 11:35:04 -04:00
Benjamin A. Beasley
b5cc171803 Update LGPL-2.1-or-later license notices for remote-only FSF
The Free Software Foundation is now remote-only, and no longer has a
street address. Updated license notice text is from
https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html#SEC4.
2025-06-14 11:35:02 -04:00
Rafał Dzięgiel
0f929014d5 clapper: reactable: Fix invalid assert check
Fix a copy-paste bug. There is no item to check in this function.
2025-06-09 20:57:45 +02:00
Rafał Dzięgiel
f3b120f451 Merge pull request #559 from Rafostar/reactable
clapper: Add "Reactable" interface
2025-06-09 20:52:15 +02:00
Rafał Dzięgiel
c354d31436 clapper: reactable: Inform which properties were updated 2025-06-09 20:21:39 +02:00
Rafał Dzięgiel
c0b360dc0f clapper-app: Add support for MPRIS enhancer 2025-06-09 18:37:40 +02:00
Rafał Dzięgiel
a6ca0b726c clapper: Implement reactables manager
An object for managing instances of reactable type of enhancers.

Based on/similar to features manager which along with Clapper
features objects gets deprecated in favour of reactables.
2025-06-09 18:36:06 +02:00
Rafał Dzięgiel
976bcc338f clapper: Add "Reactable" interface
An interface for creating enhancers that react to the
playback and/or events that should influence it.
2025-06-08 17:46:35 +02:00
Rafał Dzięgiel
6273446817 Merge pull request #558 from Rafostar/tagged
clapper: Add taglist to media items
2025-06-08 17:43:12 +02:00
Rafał Dzięgiel
72ab32d4ef shared: Do not print deprecations when compiling own code
We keep and use old functions in code for the compatibility reasons with
older API versions. Do not print warnings about them being deprecated when
compiling Clapper library that has and uses such function internally.
2025-06-08 17:17:23 +02:00
Rafał Dzięgiel
e9d0d8f345 clapper: Add taglist to media items
Allow apps to read and/or populate initial taglist within media item.
Apps might care about other tags that Clapper application does not,
so this single property allows them to read whatever tag they might need.
2025-06-08 17:17:13 +02:00
Rafał Dzięgiel
0b8d359844 meson: Improve GIR init section
Init with disabled registry and remove it only for clapper-gtk where its not needed.
2025-06-08 16:57:04 +02:00
Rafał Dzięgiel
4a93bea203 Revert "meson: Remove GIR init section"
This reverts commit b05f0f2b30.
2025-06-08 16:56:57 +02:00
Rafał Dzięgiel
5e2c1a8e30 flatpak: Sync with Flathub 2025-06-08 16:40:47 +02:00
Rafał Dzięgiel
72c8e4ab84 clapper: Fix missing pspec ref when copying proxy
Newly created enhancer proxies hold param specs with a reference
on each and unref them when finalized. For this reason, copied
proxy objects needs to ref pspecs from source, otherwise it would
do an unref without holding a reference on object during destruction.
2025-06-02 20:10:53 +02:00
Rafał Dzięgiel
db61b9c773 gst-plugin: Avoid main thread invoke when used with "ClapperGtkVideo"
This thread invoke is done mainly to support testing with gst-launch-1.0,
otherwise no need when used with "ClapperGtkVideo". We can avoid doing this,
by checking whether this type was already registered in which case it means
that "ClapperGtkVideo" widget is used within GTK application and registered
before sink starts processing data.

In case of "ClapperGtkVideo" we might run into situation where these two threads
are stuck waiting for each other to be idle. This change works around this issue.

Fixes #555
2025-05-25 15:06:32 +02:00
Rafał Dzięgiel
682ad6c3c8 clapper: Allow peeking in Vala
Vala does better job at handling objects without increased reference than
interpreted languages, so its safe to expose list "peek" functions to it.
2025-05-23 16:15:11 +02:00
Rafał Dzięgiel
749796a12f clapper: doc: Update enhancer proxy docs 2025-05-23 16:11:46 +02:00
Rafał Dzięgiel
c557c11e86 clapper: Check enhancer config existence before applying it
Fixes crash due to trying to apply config for an enhancer while
there are no settings in this enhancer to be applied
2025-05-23 08:12:09 +02:00
Rafał Dzięgiel
a2f67a9bc0 Merge pull request #553 from Rafostar/harvest-caching
clapper: Implement harvest caching
2025-05-21 19:49:26 +02:00
Rafał Dzięgiel
ddc0a4d8f9 clapper: doc: Fix missing transfer annotation 2025-05-21 19:42:27 +02:00
Rafał Dzięgiel
92e3e686db clapper: doc: Fix adaptive-start-bitrate description 2025-05-21 18:36:19 +02:00
Rafał Dzięgiel
9fd87dbbb9 clapper: Rename enhancersrc -> extractablesrc
Since this element only uses enhancers of "extractable" type
2025-05-21 17:42:15 +02:00
Rafał Dzięgiel
ca15f4760a clapper: Cleanup cached harvests periodically 2025-05-21 17:42:08 +02:00
Rafał Dzięgiel
6ddb53252a clapper: Implement harvest caching
Using recently added local cache functionality, store harvests
that have expiration date. With this, next time the same URI is
selected for playback we can read it from cache, skipping loading
of any enhancer plugins and doing network requests.

This also works nicely with Clapper discoverer feature.
Making queued items be fetched and cached ahead of playback.
2025-05-20 18:56:28 +02:00
Rafał Dzięgiel
b30d53d8ce clapper: Add ability to set harvest expiration date 2025-05-20 17:18:20 +02:00
Rafał Dzięgiel
1527873bcc clapper: Fix missing unref of mapped file
In case where enhancer plugin version did not match
an unref was missing of read file.
2025-05-19 20:42:32 +02:00
Rafał Dzięgiel
e23f2acb3e meson: Remove unused "config.h" variable 2025-05-18 13:24:51 +02:00
Rafał Dzięgiel
1dfcb218ac meson: Bump min required libadwaita version
Since URI dialog was ported to use AdwAlertDialog,
a minimal Adw version has to be changed to 1.5.
2025-05-17 18:55:31 +02:00
Rafał Dzięgiel
b05f0f2b30 meson: Remove GIR init section
Clapper GStreamer plugin is not part of GObject Introspection,
so no need to init GStreamer when compiling bindings.
2025-05-17 18:20:33 +02:00
Rafał Dzięgiel
dad0d46196 Merge pull request #546 from Rafostar/configurable-enhancers
Make Clapper Enhancers configurable
2025-05-16 18:30:05 +02:00
Rafał Dzięgiel
e34f729f62 clapper: Move basic functions into separate files
Avoid including whole "clapper.h" internally.
Faster recompilation when changes are done.
2025-05-16 17:02:29 +02:00
Rafał Dzięgiel
a97e7d1a96 clapper: Avoid using hardcoded API name in enhancers loader on win32 2025-05-16 17:02:10 +02:00
Rafał Dzięgiel
c6c4fe309b clapper: Implement data cache
Add data cache functions and use them to store enhancer data into local cache file.
This way we can restore all properties and interfaces used in enhancer without
creating its instance. This avoids loading interpreters like Python at init time
making startup a lot faster.
2025-05-16 17:02:07 +02:00
Rafał Dzięgiel
3ef6e9694a clapper-app: Add enhancers to preferences window
Browse, read info and configure Clapper enhancer plugins from preferences window
2025-05-16 17:02:03 +02:00
Rafał Dzięgiel
d951be7a56 clapper: Remove usage of "X-Interfaces" in enhancer data
At this point its sole remaining place where its used is one debug message.
For this reason remove it. With this, enhancer plugin files no longer need to
have this in them unless they want to keep Clapper 0.8 compat (otherwise unused).
2025-05-16 17:01:59 +02:00
Rafał Dzięgiel
98fdd7c58b clapper: Introduce "ClapperEnhancerProxy" objects
Add support for configuring Clapper Enhancers. In order to do that,
introduce enhancer proxy object that act as intermediary between
player and enhancer plugin.

We cannot give direct access to enhancer instances from code, since
they are managed (created and destroyed) by player as/when needed.
Also due to some interpreted languages not working with multiple
threads. Instead, give proxy objects that will store each enhancer
configuration to be applied when an enhancer instance is created.

With this, implementations also gain ability to browse available
enhancers, see what they support and change their properties.

Enhancers are now also assigned to player, instead of being only global.
This allows to configure them separately on a per player instance basis.

Writing configurable enhancers is super easy too, as all plugin has
to do is install standard GParamSpec properties to its class with a
corresponding gschema file (for global props only) and its done.
2025-05-16 17:01:51 +02:00
Rafał Dzięgiel
147d94088c Merge pull request #548 from ximion/master
Use modern appstream, instead of appstream-util for validation
2025-05-03 15:42:28 +02:00
Matthias Klumpp
c7790d9f7b Use modern appstream, instead of appstream-util for validation 2025-05-03 01:56:53 +02:00
Rafał Dzięgiel
f5731957dc New Crowdin updates (#524)
* New translations clapper-app.pot (Chinese Simplified)

* New translations clapper-app.pot (Chinese Simplified)

* New translations clapper-app.pot (Romanian)

* New translations clapper-app.pot (French)

* New translations clapper-app.pot (Spanish)

* New translations clapper-app.pot (Afrikaans)

* New translations clapper-app.pot (Arabic)

* New translations clapper-app.pot (Catalan)

* New translations clapper-app.pot (Czech)

* New translations clapper-app.pot (Danish)

* New translations clapper-app.pot (German)

* New translations clapper-app.pot (Greek)

* New translations clapper-app.pot (Basque)

* New translations clapper-app.pot (Finnish)

* New translations clapper-app.pot (Hebrew)

* New translations clapper-app.pot (Hungarian)

* New translations clapper-app.pot (Italian)

* New translations clapper-app.pot (Japanese)

* New translations clapper-app.pot (Korean)

* New translations clapper-app.pot (Lithuanian)

* New translations clapper-app.pot (Dutch)

* New translations clapper-app.pot (Norwegian)

* New translations clapper-app.pot (Polish)

* New translations clapper-app.pot (Portuguese)

* New translations clapper-app.pot (Russian)

* New translations clapper-app.pot (Slovak)

* New translations clapper-app.pot (Serbian (Cyrillic))

* New translations clapper-app.pot (Swedish)

* New translations clapper-app.pot (Turkish)

* New translations clapper-app.pot (Ukrainian)

* New translations clapper-app.pot (Chinese Simplified)

* New translations clapper-app.pot (Chinese Traditional)

* New translations clapper-app.pot (Vietnamese)

* New translations clapper-app.pot (Portuguese, Brazilian)

* New translations clapper-app.pot (Persian)

* New translations clapper-app.pot (Croatian)

* New translations clapper-app.pot (Hindi)

* New translations clapper-app.pot (Asturian)

* New translations clapper-app.pot (Occitan)

* New translations clapper-app.pot (Persian)

* New translations clapper-app.pot (Portuguese, Brazilian)

* New translations clapper-app.pot (Finnish)

* New translations clapper-app.pot (Russian)

* New translations clapper-gtk.pot (Russian)

* New translations clapper-app.pot (French)

* New translations clapper-app.pot (Portuguese)

* New translations clapper-app.pot (German)
2025-04-27 15:20:33 +02:00
Rafał Dzięgiel
2e3c98d9b4 Merge pull request #530 from Rafostar/pipeline-preview-launcher
Ability to show GStreamer pipeline
2025-04-27 13:04:04 +02:00
Rafał Dzięgiel
d09824fb1a clapper-app: Show error dialog on pipeline preview failure 2025-04-26 21:25:13 +02:00
Rafał Dzięgiel
366315077e clapper-app: Use user data dir for storing pipeline exports
System tmp directory does not work within containers such as Flatpak
for our usage with file launcher, so make our own temp in app data dir
2025-04-26 18:33:02 +02:00
Rafał Dzięgiel
a75184a471 flatpak: Build graphviz
Needed for pipeline preview app functionality
2025-04-26 18:32:59 +02:00
Rafał Dzięgiel
5bd6ba8948 meson: Add "pipeline-preview" to printed summary 2025-04-26 18:32:57 +02:00
Rafał Dzięgiel
160dbce265 clapper-app: Add "show pipeline" key shortcut to help overlay 2025-04-26 18:32:55 +02:00
Rafał Dzięgiel
224326857b clapper-app: Create pipeline preview file async 2025-04-26 18:32:42 +02:00
Rafał Dzięgiel
f9b31c51a7 Merge pull request #538 from fritteli/fix-typo-in-german-translation
chore: Fix typo in german translation
2025-04-11 20:11:27 +02:00
Manuel Friedli
be1de8bc77 chore: Fix typo in german translation 2025-04-04 23:06:42 +02:00
Rafał Dzięgiel
b8a4a90b6c clapper-app: Delete temp dir on exit
Pipeline preview creates temp files, so delete whole directory
recursively on app exit. Since these files are used through
launcher/portal with another app, we do not know when user finished
using them, thus we cannot detect and remove them earlier.
2025-02-18 18:30:09 +01:00
Rafał Dzięgiel
d73f33785d clapper-app: Fix a file path in POTFILES
Since #479 "window" was renamed to "dialog".
We also need to update POTFILES accordingly.
2025-02-16 17:49:11 +01:00
Rafał Dzięgiel
dca8fbd336 clapper-app: Add GStreamer pipeline preview
Allow to preview GStreamer pipeline while playing content.
This makes it easier to check what is used underneath.
2025-02-16 17:36:05 +01:00
Rafał Dzięgiel
681d5b8699 clapper: Add a function to get pipeline graph data 2025-02-16 17:23:34 +01:00
Rafał Dzięgiel
009f272f64 Merge pull request #479 from geopjr-forks/fix/adw-1-6-deprecations
clapper-app: Fix libadwaita 1.6 deprecations
2025-02-16 13:22:54 +01:00
Evan Paterakis
a5bc1b5578 clapper-app: set uri-dialog's content width to 420
Co-authored-by: Rafał Dzięgiel <40623528+Rafostar@users.noreply.github.com>
2025-02-15 19:17:04 +02:00
Rafał Dzięgiel
49471882c1 clapper-app: Update POT file 2025-02-15 12:48:42 +01:00
Evan Paterakis
069be30225 clapper-app: fix adw 1.6 deprecations 2025-02-12 17:49:22 +02:00
Rafał Dzięgiel
5f83d93374 Merge pull request #525 from abhijeeth-babu/patch-1
Remove "Music" from Clapper's keywords to lower its priority as a music player
2025-02-10 19:59:51 +01:00
Rafał Dzięgiel
d0a9122833 Merge pull request #528 from Rafostar/ci-arm64
workflows: Build natively on arm64
2025-02-10 19:26:16 +01:00
Rafał Dzięgiel
c29b8871a3 workflows: Build natively on arm64
Replace QEMU with native arm64 runners, now that they are available
2025-02-10 18:21:37 +01:00
Rafał Dzięgiel
d4d0f9e95e flatpak: Sync with Flathub 2025-02-08 12:48:37 +01:00
Rafał Dzięgiel
291c6e35f2 Back to development 2025-02-08 11:48:12 +01:00
Abhijeeth Babu
69bace7150 Remove other unneeded keywords (Album, GNOME, Clapper) from desktop file 2025-01-27 22:57:01 +05:30
Abhijeeth Babu
401e33b1c0 Remove "Music" from Clapper's keywords to lower its priority as a music player
This PR removes the keyword "Music" from Clapper's `.desktop` file to lower its priority as a music player in desktop search results. This ensures that Clapper is not prominently suggested when searching for music-related applications, while retaining its functionality as a video player.

### Changes:
- Removed "Music" from the `Keywords` field in the `.desktop` file.

This change does not affect Clapper's ability to play audio files but adjusts its visibility in application search results.
2025-01-25 22:10:10 +05:30
Rafał Dzięgiel
a449b6b3f5 0.8.0 2025-01-20 21:29:59 +01:00
Rafał Dzięgiel
2d12c8980d clapper-app: Update LINGUAS file 2025-01-20 21:17:53 +01:00
Rafał Dzięgiel
ea102ed870 clapper-gtk: Update LINGUAS file 2025-01-20 21:17:13 +01:00
Rafał Dzięgiel
ee6f3cccdb New Crowdin updates (#517)
* New translations clapper-gtk.pot (German)

* New translations clapper-app.pot (German)

* New translations clapper-app.pot (German)

* New translations clapper-app.pot (Portuguese)

* New translations clapper-gtk.pot (Portuguese)

* New translations clapper-app.pot (Portuguese)

* New translations clapper-app.pot (Russian)

* New translations clapper-app.pot (French)

* New translations clapper-gtk.pot (French)

* New translations clapper-app.pot (French)

* New translations clapper-app.pot (Chinese Simplified)

* New translations clapper-app.pot (Chinese Simplified)

* New translations clapper-gtk.pot (Polish)

* New translations clapper-app.pot (Polish)

* New translations clapper-gtk.pot (Romanian)

* New translations clapper-app.pot (Romanian)

* New translations clapper-app.pot (Romanian)
2025-01-20 21:13:13 +01:00
Rafał Dzięgiel
63d393662e metainfo: Update version history 2025-01-20 20:46:59 +01:00
Rafał Dzięgiel
80285fb50b clapper: Fix importing enhancers with extra path
We cannot use "goto" here, like it was before, as we would fall into an endless loop.
2025-01-20 17:43:48 +01:00
Rafał Dzięgiel
e9377f0c6a Merge pull request #519 from Rafostar/misc-fixes
Miscellaneous fixes
2025-01-19 18:02:10 +01:00
Rafał Dzięgiel
ce102b9c76 workflows: Use flatpak-builder action master version
Since "flatpak-builder" action uses deprecated "upload-artifact"
version, that can stop working soon, disable it and upload ourselves.
This is supported in master, but not in any tagged version,
so for now switch to using action from master branch.

Also bump used runtime to GNOME 47 when building.
2025-01-19 17:42:08 +01:00
Rafał Dzięgiel
4df812066f clapper: enhancers-loader: Support loading extra enhancers
Allow setting an additional dir(s) with "CLAPPER_ENHANCERS_EXTRA_PATH" env.

This should allow to add other enhancers without removing default ones.
If app/user needs to remove default ones, "CLAPPER_ENHANCERS_PATH" env
can be set to empty.
2025-01-19 15:48:45 +01:00
Rafał Dzięgiel
8752d08113 clapper: enhancers-loader: Fix default enhancers dir on Win32 2025-01-19 15:48:34 +01:00
Rafał Dzięgiel
fe30ba24fa clapper-gtk: extra-menu-button: Drop popover focus on unmap
Fixes #496
2025-01-18 18:31:03 +01:00
Rafał Dzięgiel
4472d87f8b clapper-app: Show sink bin child name in info window
Sinks that are bin types often take another configurable sink through a property.
We want to show what was set there in info window too.
2025-01-18 17:27:39 +01:00
Rafał Dzięgiel
e35d04a742 clapper-app: Fix internal functions visibility
We have to export functions that are used from UI files, otherwise they are
not accessible. For this reason add a special internal visibility header.
2025-01-18 15:59:12 +01:00
Rafał Dzięgiel
f017b23798 Merge pull request #518 from Rafostar/win-installer
Provide Windows installer
2025-01-18 11:50:42 +01:00
Rafał Dzięgiel
3513c37f97 clapper-app: Fix declaration-after-statement warning 2025-01-17 21:57:34 +01:00
Rafał Dzięgiel
2225cc68c4 workflows: windows: Add cleanup step
Removal of things that will not be used in an installed app
2025-01-17 21:57:11 +01:00
Rafał Dzięgiel
228ef3e556 workflows: windows: Create installer instead of portable
It makes things much easier for the user, such as automatically associating
video files with Clapper, makes menu entries, optional desktop icon and takes
care of eventual uninstall and/or update later.
2025-01-17 21:53:36 +01:00
Rafał Dzięgiel
21417a1ae7 pkgs: Generate Inno Setup based Windows installer 2025-01-17 21:53:20 +01:00
Rafał Dzięgiel
5906d1b78e clapper-app: Add Windows icon 2025-01-17 21:51:16 +01:00
Rafał Dzięgiel
b7b33172fe New Crowdin updates (#514)
* New translations clapper-gtk.pot (Romanian)

* New translations clapper-app.pot (Romanian)

* New translations clapper-gtk.pot (French)

* New translations clapper-app.pot (French)

* New translations clapper-gtk.pot (Spanish)

* New translations clapper-app.pot (Spanish)

* New translations clapper-gtk.pot (Afrikaans)

* New translations clapper-app.pot (Afrikaans)

* New translations clapper-gtk.pot (Arabic)

* New translations clapper-app.pot (Arabic)

* New translations clapper-gtk.pot (Catalan)

* New translations clapper-app.pot (Catalan)

* New translations clapper-gtk.pot (Czech)

* New translations clapper-app.pot (Czech)

* New translations clapper-gtk.pot (Danish)

* New translations clapper-app.pot (Danish)

* New translations clapper-gtk.pot (German)

* New translations clapper-app.pot (German)

* New translations clapper-gtk.pot (Greek)

* New translations clapper-app.pot (Greek)

* New translations clapper-gtk.pot (Basque)

* New translations clapper-app.pot (Basque)

* New translations clapper-gtk.pot (Finnish)

* New translations clapper-app.pot (Finnish)

* New translations clapper-gtk.pot (Hebrew)

* New translations clapper-app.pot (Hebrew)

* New translations clapper-gtk.pot (Hungarian)

* New translations clapper-app.pot (Hungarian)

* New translations clapper-gtk.pot (Italian)

* New translations clapper-app.pot (Italian)

* New translations clapper-gtk.pot (Japanese)

* New translations clapper-app.pot (Japanese)

* New translations clapper-gtk.pot (Korean)

* New translations clapper-app.pot (Korean)

* New translations clapper-gtk.pot (Lithuanian)

* New translations clapper-app.pot (Lithuanian)

* New translations clapper-gtk.pot (Dutch)

* New translations clapper-app.pot (Dutch)

* New translations clapper-gtk.pot (Norwegian)

* New translations clapper-app.pot (Norwegian)

* New translations clapper-gtk.pot (Polish)

* New translations clapper-app.pot (Polish)

* New translations clapper-gtk.pot (Portuguese)

* New translations clapper-app.pot (Portuguese)

* New translations clapper-gtk.pot (Russian)

* New translations clapper-app.pot (Russian)

* New translations clapper-gtk.pot (Slovak)

* New translations clapper-app.pot (Slovak)

* New translations clapper-gtk.pot (Serbian (Cyrillic))

* New translations clapper-app.pot (Serbian (Cyrillic))

* New translations clapper-gtk.pot (Swedish)

* New translations clapper-app.pot (Swedish)

* New translations clapper-gtk.pot (Turkish)

* New translations clapper-app.pot (Turkish)

* New translations clapper-gtk.pot (Ukrainian)

* New translations clapper-app.pot (Ukrainian)

* New translations clapper-gtk.pot (Chinese Simplified)

* New translations clapper-app.pot (Chinese Simplified)

* New translations clapper-gtk.pot (Chinese Traditional)

* New translations clapper-app.pot (Chinese Traditional)

* New translations clapper-gtk.pot (Vietnamese)

* New translations clapper-app.pot (Vietnamese)

* New translations clapper-gtk.pot (Portuguese, Brazilian)

* New translations clapper-app.pot (Portuguese, Brazilian)

* New translations clapper-gtk.pot (Persian)

* New translations clapper-app.pot (Persian)

* New translations clapper-gtk.pot (Croatian)

* New translations clapper-app.pot (Croatian)

* New translations clapper-gtk.pot (Hindi)

* New translations clapper-app.pot (Hindi)

* New translations clapper-gtk.pot (Asturian)

* New translations clapper-app.pot (Asturian)

* New translations clapper-gtk.pot (Occitan)

* New translations clapper-app.pot (Occitan)
2025-01-13 18:32:37 +01:00
Rafał Dzięgiel
d4d82034a4 Merge pull request #515 from Rafostar/win-hi-clock
clapper-app: Support high resolution clock on MS Windows
2025-01-12 20:47:59 +01:00
Rafał Dzięgiel
09b3ef8f39 clapper-app: Do not enforce GSK renderer on Windows 2025-01-12 17:12:33 +01:00
Rafał Dzięgiel
d9b20dcc18 clapper-app: Support Windows high resolution clock
Windows high resolution clock improves accuracy of various Windows
timer APIs and precision of GstSystemClock during playback
2025-01-12 17:12:24 +01:00
Rafał Dzięgiel
60e7d56611 clapper-app: Update POT file 2025-01-11 15:24:07 +01:00
Rafał Dzięgiel
e3bc87ba11 clapper-app: Add "Clear Queue" menu option
An option to clear playback queue from UI. This is quckier
and easier than manually dragging every item to bin.

Closes #434
2025-01-11 15:17:50 +01:00
Rafał Dzięgiel
b542aa1e76 clapper: Wait with flush after streams are selected
Instead flushing right after select streams request, wait until
they are selected before doing a flush.

This fixes a hang when changing audio language with hlsdemux2.
2025-01-10 23:54:29 +01:00
Rafał Dzięgiel
6534fb1e22 clapper-app: Update LINGUAS file 2025-01-07 19:22:15 +01:00
Rafał Dzięgiel
c8b3e28299 clapper-gtk: Update LINGUAS file 2025-01-07 19:21:58 +01:00
Rafał Dzięgiel
35424bf8cf clapper-app: Update POT file 2025-01-07 19:06:11 +01:00
Rafał Dzięgiel
6989b86249 clapper-gtk: Update POT file 2025-01-07 19:05:57 +01:00
Rafał Dzięgiel
fed0c0a972 clapper-app: Add do not translate desktop app name comment 2025-01-07 19:03:10 +01:00
Rafał Dzięgiel
496cc60272 Merge pull request #512 from Rafostar/video-placeholder
clapper-gtk: Add video placeholder widget
2025-01-02 14:18:52 +01:00
Rafał Dzięgiel
a91ce5b0ab clapper-gtk: Add video placeholder widget
A simple placeholder to be shown when "ClapperGtkVideo" is used with a video
sink that cannot be embedded in it (with a text explaining that).
2025-01-02 13:34:36 +01:00
Rafał Dzięgiel
93b1be3147 New Crowdin updates (#503)
* New translations clapper-app.pot (Turkish)

* New translations clapper-gtk.pot (Spanish)

* New translations clapper-app.pot (Spanish)
2024-11-22 22:41:54 +01:00
Rafał Dzięgiel
cca4b002b6 Merge pull request #492 from danialbehzadi/i18n
Make dektop file i18n.
2024-11-22 22:40:50 +01:00
Rafał Dzięgiel
8e6599ae81 Merge pull request #508 from Rafostar/nightly-fix
Update Flatpak Nightly
2024-11-16 22:33:31 +01:00
Rafał Dzięgiel
77ee519f8c flatpak-nightly: Update manifest
Use 24.08 for ffmpeg and switch to Rust stable with added recommended env vars
2024-11-16 17:25:49 +01:00
Rafał Dzięgiel
c42e12d2be workflows: Update nightly extensions to 24.08
Also change to Rust stable to fix build failing
2024-11-16 17:25:03 +01:00
Rafał Dzięgiel
2b916ef856 Merge pull request #506 from Rafostar/adaptive
Add adaptive streaming bitrate control to Clapper API
2024-11-16 16:15:19 +01:00
Rafał Dzięgiel
303bda4d65 clapper: Do not reset "adaptive-bandwidth" to zero
When new instance of adaptive demuxer is created (different video is played)
this prop value would become zero. We want to avoid that and instead report
only bandwidth after fragment is downloaded, so when video will be unplayable,
next one will not start from lowest quality.
2024-11-16 15:26:24 +01:00
Rafał Dzięgiel
22430620a8 clapper-app: Apply "adaptive-start-bitrate" on startup
Watch for "adaptive-bandwidth" changes during adaptive streaming, use these to
set "adaptive-start-bitrate" player property, so we do not always start streaming
from some constant bitrate value which might not be the best for everyone.

Additionally, store last value in GSettings on app exit and also add a command
line arg to set this too.
2024-11-15 23:39:00 +01:00
Rafał Dzięgiel
e4045b98b3 clapper: Add "adaptive-bandwidth" readable property
Apps can use it to determine and set an optimal value for
start bitrate instead of starting at some constant value.
2024-11-15 23:38:50 +01:00
Rafał Dzięgiel
aa819cf2d3 flatpak: Update runtime to 47 2024-11-14 23:19:38 +01:00
Rafał Dzięgiel
a065b81846 flatpak: Add GStreamer 1.24 for testing
We do not yet have GStreamer 1.24 in Flathub repo, so for testing purposes add it here temporarily
2024-11-14 23:18:16 +01:00
Rafał Dzięgiel
9fbba4d66a meson: Bump min required GStreamer version
Setting "start-bitrate" property requires at least GStreamer 1.24.

We do not want to introduce APIs that work only if user has a certain
dependency version, thus this bump instead of version check.

Related work on GStreamer side:
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3894
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3895

Since these were contributed to GStreamer almost 2 years ago with the intention
of using them in Clapper, I think its about time to start do so.
2024-11-14 22:28:21 +01:00
Rafał Dzięgiel
ab659d0951 clapper: Use playbin3 by default
New GStreamer adaptive demuxers work only within playbin3. In order to not
introduce new APIs (setting adaptive bitrate) that do not work by default
and to have the whole "clapper-enhancers" concept working correctly, its
about time to move on to playbin3.
2024-11-13 20:06:34 +01:00
Rafał Dzięgiel
bd3ce28716 clapper: Ability to request adaptive bitrates
Add APIs to allow apps to select start, min and max bitrates for adaptive streaming.

Combining min+max values can allow to implement a video quality selector,
although possible bitrates/qualities are not communicated with an app yet.
2024-11-13 20:00:59 +01:00
Rafał Dzięgiel
0a15e70d02 Merge pull request #501 from Rafostar/libpeas
Support libpeas based plugin system
2024-11-11 13:22:10 +01:00
Rafał Dzięgiel
d42b17a749 workflows: Add libpeas to windows build
Required for enhancers loader
2024-11-11 12:49:23 +01:00
Rafał Dzięgiel
719a4043b5 workflows: Disable "enhancers-loader" for docs build
Not needed to build the docs, so disable it
2024-11-11 12:49:19 +01:00
Rafał Dzięgiel
ee3d07b158 flatpak: Replace gtuber with Clapper enhancers
Also add all required dependencies
2024-11-11 12:49:17 +01:00
Rafał Dzięgiel
c8ef0f891d clapper: Support libpeas based plugin system
Allow loading external plugins called "Enhancers" that as the name suggests,
enhance Clapper library capabilities.

Currently implemented is a "ClapperExtractable" interface meant to extract
an actual media that GStreamer can later play from an initial input URI.
Additionally, an internal GStreamer elements that work with it are ported/moved
here from "gtuber" library that this functionality replaces.
2024-11-11 12:49:07 +01:00
Rafał Dzięgiel
220913de14 Merge pull request #499 from Rafostar/esc-unfullscreen
clapper-app: Add unfullscreen keyboard shortcut
2024-10-15 19:53:32 +02:00
Rafał Dzięgiel
2d1f6f471b clapper-app: Add unfullscreen keyboard shortcut
Unfullscreen with Escape key

Closes #494
2024-10-15 19:32:48 +02:00
Rafał Dzięgiel
af4a876edc New Crowdin updates (#473)
* New translations clapper-gtk.pot (Hindi)

* New translations clapper-app.pot (Russian)

* New translations clapper-gtk.pot (Czech)

* New translations clapper-gtk.pot (Persian)

* New translations clapper-gtk.pot (Norwegian)
2024-10-10 20:23:28 +02:00
Danial Behzadi
e81bcb2f9a Update src/bin/clapper-app/data/meson.build
Co-authored-by: Rafał Dzięgiel <40623528+Rafostar@users.noreply.github.com>
2024-09-28 13:02:29 +03:30
Danial Behzadi
ba64ff224e Make dektop file i18n. 2024-09-28 03:37:21 +03:30
Rafał Dzięgiel
14cdbef81c clapper-gtk: Fix metadata ignore for different languages
Since missing plugin string is translated, word describing its type
(e.g. Decoder) might come before plugin name itself, so we need to
check whole text to find substring instead of checking only prefix.

Fixes #477
2024-08-02 17:22:27 +02:00
Rafał Dzięgiel
931dc255c1 clapper-gtk: Fix some video props not being writable
They should have been writable as we even have setters for them
2024-07-23 17:55:11 +02:00
Rafał Dzięgiel
2f39fef47b readme: Update screenshots 2024-06-30 21:38:29 +02:00
Rafał Dzięgiel
c05a6361b7 clapper-app: metainfo: Add captions to screenshots 2024-06-30 21:29:26 +02:00
Rafał Dzięgiel
c152f3d791 clapper-app: Update LINGUAS file 2024-06-29 18:24:40 +02:00
Rafał Dzięgiel
f967e169b5 clapper-gtk: Update LINGUAS file 2024-06-29 18:24:26 +02:00
Rafał Dzięgiel
04a5bc8523 New Crowdin updates (#431)
* New translations clapper-gtk.pot (Portuguese, Brazilian)

* New translations clapper-app.pot (Portuguese, Brazilian)

* New translations clapper-app.pot (Catalan)

* New translations clapper-app.pot (Chinese Simplified)

* New translations clapper-gtk.pot (Chinese Simplified)

* New translations clapper-gtk.pot (Occitan)

* New translations clapper-app.pot (Occitan)
2024-06-29 18:18:06 +02:00
Rafał Dzięgiel
135be60497 clapper-gtk: billboard: Make transition a tad faster 2024-06-29 17:49:41 +02:00
Rafał Dzięgiel
736fddbe46 meson: Do not list Clapper API features when not building it
No need to list API features if API is not being built.

This avoids an issue with meson script error when Clapper API
build is skipped, since these are not declared then.

Fixes #468
2024-06-29 17:35:47 +02:00
Rafał Dzięgiel
63f2fa1946 examples: Start playback after assembling app window
This is the correct order of how things should be done, so teach what is right
2024-06-29 15:07:59 +02:00
Rafał Dzięgiel
99708e1267 clapper-gtk: status: Apply ".osd" style class
Otherwise text is invisible on light themed apps,
since it renders as black letters on a black background
2024-06-29 15:05:12 +02:00
Rafał Dzięgiel
636e61ead1 clapper-gtk: video: Use "scaletempo" by default
Do not require applications to import GStreamer and their devs to learn its
basics just to set this single element. Similarly as ClapperGtkVideo sets
"clappersink" during construction, it can also set "scaletempo" as this is
the most common choice for an audio filter.

Elements can still be changed like before if desired by setting corresponding
player properties.
2024-06-29 14:52:25 +02:00
Rafał Dzięgiel
147399afd8 clapper: media-item: Fix construct with NULL as "cache-location" 2024-06-28 19:47:07 +02:00
Rafał Dzięgiel
2843a17879 Merge pull request #467 from Rafostar/cached-items
clapper: Add media item creation with cached file
2024-06-27 22:13:36 +02:00
Rafał Dzięgiel
bf0a8b68db clapper: Add media item creation with cached file
Allow creating item with a previously downloaded cache file.
When set, file at location will be tried to be loaded first.
If this fails, URI will be used as normal.
2024-06-27 20:57:59 +02:00
Rafał Dzięgiel
af4ae2c942 clapper: Fix missing "download-complete" signal on short videos
Short video might be fully downloaded before playback starts.
This prevents us from emitting "download-complete" signal with
corresponding media item when download cache is enabled.

Check if we have pending item, as this will be the item downloaded
in such case (before it becomes playing item).
2024-06-22 11:20:57 +02:00
Rafał Dzięgiel
c0221dedc8 examples: Fix typo 2024-06-22 11:12:10 +02:00
Rafał Dzięgiel
9f54c1058c Merge pull request #463 from Rafostar/ms-win
Support MS Windows
2024-06-21 20:32:50 +02:00
Rafał Dzięgiel
07f850d58a workflows: Add windows build job 2024-06-21 18:50:24 +02:00
Rafał Dzięgiel
650b568319 clapper-app: meson: Do not install mimes on Windows
They are unsupported. We use file extensions instead.
2024-06-21 18:50:21 +02:00
Rafał Dzięgiel
abff579b70 clapper-app: Fix missing media in file dialog on Windows
Windows does not support mime-types file filters, so use file extensions instead
2024-06-21 18:50:13 +02:00
Rafał Dzięgiel
0b253b41f6 clapper-app: meson: Binaries with/without console on Windows 2024-06-20 18:32:50 +02:00
Rafał Dzięgiel
d5832bd2db gst-plugin: Improve importers lookup on Win32 2024-06-19 22:44:27 +02:00
Rafał Dzięgiel
98371e822e gst-plugin: Allow overriding importers path with env variable 2024-06-17 21:41:11 +02:00
Rafał Dzięgiel
3f2e5d569d clapper-gtk: video: Fix signals disconnection after dispose
A possibility exists that something else keeps a reference to the player
even after video is disposed. In this case signals from the player would
not be disconnected.

We have to disconnect them manually here to ensure their callbacks will
not be used after disposal.
2024-06-17 19:26:18 +02:00
Rafał Dzięgiel
f58e722002 clapper-app: Fix unused variable warning when no MPRIS
When compiling without MPRIS feature "instance_count" is left unused,
so skip it with preprocessor in order to avoid warning.
2024-06-16 17:35:06 +02:00
Rafał Dzięgiel
262983e857 clapper-app: Ensure private types for GtkBuilder
We need to ensure types that are not part of public API, otherwise GtkBuilder will fail to use them
(e81aad25a1/gtk/glade/README.glade (L15)).
2024-06-16 15:21:23 +02:00
Rafał Dzięgiel
6ca1bccd1a clapper-gtk: Ensure private types before template init
We need to ensure types that are not part of public API, otherwise GtkBuilder will fail to use them
(e81aad25a1/gtk/glade/README.glade (L15)).
2024-06-16 14:51:56 +02:00
Rafał Dzięgiel
c25cfd9598 clapper-app: meson: Do not skip whole data install on non-linux
We cannot run app without schemas, thus we need to compile and install them on any OS
2024-06-16 13:50:54 +02:00
Rafał Dzięgiel
3ce937c2b9 gst-plugin: Properly export external API symbols
We do not install headers from gst-plugin, but still need to export
symbols to compile modules that use plugin provided shared libraries.
2024-06-16 13:50:49 +02:00
Rafał Dzięgiel
521a83bad0 clapper: meson: Add additional check for gdbus-codegen
Check at meson level if "gdbus-codegen" is available and otherwise
exit cleanly, possibly building without MPRIS feature instead of failing.
2024-06-16 13:50:41 +02:00
Rafał Dzięgiel
d4598846d3 clapper-gtk: Properly export external API symbols 2024-06-16 13:48:27 +02:00
Rafał Dzięgiel
50d4fbe43b clapper: Properly export external API symbols 2024-06-16 13:48:17 +02:00
Rafał Dzięgiel
df371c698a clapper-app: Fix opened file content type detection
Fixes issues with detecting whether file has one of supported subtitles mime types
2024-06-14 17:32:03 +02:00
Rafał Dzięgiel
2eaf5032cd Merge pull request #451 from Rafostar/resize-me
Resize app window to match aspect ratio with middle click
2024-05-26 17:06:58 +02:00
Rafał Dzięgiel
28de283a98 clapper-app: Add auto window resize keyboard shortcut
In addition to middle click, also add "Super+r" keyboard shortcut to perform window resize to fit video action
2024-05-25 21:30:26 +02:00
Rafał Dzięgiel
ae6512b233 clapper-app: Resize window to match aspect ratio with middle click 2024-05-25 21:16:59 +02:00
Rafał Dzięgiel
5049f620eb Merge pull request #449 from Rafostar/new-window
Add "New Window" functionality in UI
2024-05-20 22:55:14 +02:00
Rafał Dzięgiel
439e5831e2 clapper-app: Apply options from active window to newly created one
When a new window is created, apply all current values to it (volume, speed,
set GStreamer elements, etc.). It would not be the best experience when user
opens a new window, plays something and 100% volume is used in it.
2024-05-20 22:40:28 +02:00
Rafał Dzięgiel
6484599e46 clapper-gtk: Fix GtkWindowControls style when OSD on video 2024-05-15 21:37:48 +02:00
Rafał Dzięgiel
333f8b4692 clapper-app: Make info window close with Esc key
Fixes #448
2024-05-14 21:13:02 +02:00
Rafał Dzięgiel
9b7c12c3d0 flatpak: Fix MPRIS permission
Since now we do multiple windows, an instance number is added
to owned connection name (as specified in MPRIS spec).

Update Flatpak MPRIS permission to handle that.
2024-05-13 20:32:54 +02:00
Rafał Dzięgiel
6fb25dd22b clapper-app: Add new window keyboard shortcut 2024-05-13 20:05:59 +02:00
Rafał Dzięgiel
cc5c2b2403 clapper-app: Add "New Window" menu option
Allow creating new windows from within the app
2024-05-13 19:15:31 +02:00
Rafał Dzięgiel
71142ab0c6 Merge pull request #444 from Rafostar/cmd-options
Add more command line options
2024-05-12 20:47:45 +02:00
Rafał Dzięgiel
cc8ed7b488 clapper-app: Do not store "enqueue" value in options
It is used immediately, so no need to store it.
2024-05-12 20:30:19 +02:00
Rafał Dzięgiel
6f0ed93b08 clapper-app: Only restore saved settings to new windows 2024-05-12 20:30:16 +02:00
Rafał Dzięgiel
10e0421342 clapper-app: Clamp command line args to allowed values
Instead of running into warnings or other problems when user
specifies an out of range value for command line option, just
clamp them to nearest allowed one.
2024-05-12 20:30:14 +02:00
Rafał Dzięgiel
bcd1d48922 clapper-app: Add command line context params string
Describe what kind of remaining (non-options) strings can
be passed when launching via command line.
2024-05-12 20:30:11 +02:00
Rafał Dzięgiel
aac050e252 clapper-app: Add command line option to enter fullscreen 2024-05-12 20:30:09 +02:00
Rafał Dzięgiel
1330e49ed8 clapper-app: Add command line option to set progression mode 2024-05-12 20:30:07 +02:00
Rafał Dzięgiel
22fb88d0f2 clapper-app: Support creating multiple windows 2024-05-12 20:30:01 +02:00
Rafał Dzięgiel
42b5acd967 clapper: mpris: Fix MPRIS own-name documentation 2024-05-12 20:16:28 +02:00
Rafał Dzięgiel
8e14ec1697 clapper-app: Cleanup to not store app options as global and static
Now that we are using both local and global command line vfuncs, we
can just get and apply options in them and free values later.

This avoids having options global and static.
2024-05-12 19:34:37 +02:00
Rafał Dzięgiel
a257d3f003 clapper-app: Add command line option to enqueue files 2024-05-12 19:34:33 +02:00
Rafał Dzięgiel
eb0baa6fe6 clapper-app: Add command line option to set speed 2024-05-12 16:50:04 +02:00
Rafał Dzięgiel
1001fda256 clapper-app: Add command line option to set volume 2024-05-12 16:50:02 +02:00
Rafał Dzięgiel
6edffb9a4b clapper-app: Add command line options to set GStreamer elements
Allows setting audio/video filters and sinks.
By setting value to "none" default filter can be disabled.
2024-05-12 16:49:54 +02:00
Rafał Dzięgiel
b013cb7405 Merge pull request #438 from Rafostar/download-cache
clapper: Add media caching via download to local storage
2024-05-10 00:14:28 +02:00
Rafał Dzięgiel
07ca728b5b workflows: doc: Do not error on nothing to commit
Not always there are changes to the documentation
2024-05-09 23:50:25 +02:00
Rafał Dzięgiel
938cd44d7e workflows: doc: Continue on commit/push errors 2024-05-09 23:43:30 +02:00
Rafał Dzięgiel
8f4723906f Merge pull request #447 from Rafostar/auto-doc
workflows: Add build documentation job
2024-05-09 23:15:58 +02:00
Rafał Dzięgiel
419354fe8f doc: Add "clapper" GIR path when building "clapper-gtk" doc
Fixes building of clapper-gtk documentation on a clean system
2024-05-09 22:54:08 +02:00
Rafał Dzięgiel
4ec7349a04 workflows: Add build documentation job 2024-05-09 22:53:58 +02:00
Rafał Dzięgiel
03b2cb099f examples: Add download cache code example 2024-05-07 22:15:34 +02:00
Rafał Dzięgiel
f67d5bef2e clapper: Add media caching via download to local storage
The aim here is to stream an online video/audio while also at the
same time download/cache it to disk (excluding adaptive content).

After download is complete, further playback and seeking are done using the
locally cached file. This functionality uses GStreamer "downloadbuffer" element.

Player will emit a signal with a local download location after it completes,
so application will know where downloaded file for media item is stored in
case it wants to reuse it in the future.

It is up to application to set download dir and later manage downloaded
content in it, removing files its not going to use on next application
run and any incomplete downloads.
2024-05-07 22:15:25 +02:00
Rafał Dzięgiel
8f4107aab6 examples: Add simple clapper-gtk usage example 2024-05-07 22:09:41 +02:00
Rafał Dzięgiel
6941f1b042 clapper: Small fix for "init_check" doc
The error arg was removed, but documentation was not updated then
2024-05-02 14:38:25 +02:00
Rafał Dzięgiel
df50802871 clapper-gtk: billboard: Documentation fixes
Billboard does not post automatic volume/speed announcements. It did at
some point during development, but it was scrapped in favour of letting
app use callbacks of "notify" signals to call announce speed/volume.
2024-05-02 13:17:09 +02:00
Rafał Dzięgiel
b1613273d0 gst-plugin: Avoid GTK crash after context is destroyed
It seems GTK continues using created contexts, so we cannot unref it here.
Looking at GTK sink implementation for GtkVideo, I see that they do not
unref it either, but since we use surfaceless context it would be probably
better to have a static GstDisplay and reuse the same context in future.
2024-05-02 11:14:29 +02:00
Rafał Dzięgiel
35527e5c14 clapper-gtk: Ignore missing plugins for metadata
Some media files have custom/proprietary metadata.
It should be safe to simply ignore these, since we do
not map metadata to any sort of Clapper stream anyway.

Fixes #441
2024-05-01 16:32:35 +02:00
Rafał Dzięgiel
e060048969 Merge pull request #429 from 1Maxnet1/patch-1
Complement com.github.rafostar.Clapper.metainfo.xml
2024-05-01 11:45:25 +02:00
Rafał Dzięgiel
09648bbc43 Mention Rust bindings in README.md
Closes #411
2024-04-29 21:38:37 +02:00
Max Buchholz
9e5f9e3d07 Add comment to document categories
Co-authored-by: Rafał Dzięgiel <40623528+Rafostar@users.noreply.github.com>
2024-04-29 20:19:10 +02:00
Rafał Dzięgiel
23c5e7ca65 clapper: Fix MARKER_NO_END value in GIR
Needs a cast from int, otherwise GIR is generated
incorrectly and it ends up as positive number.
2024-04-29 17:50:54 +02:00
Rafał Dzięgiel
6d47aa3c6d clapper-app: metainfo: Update branding colors
Change to values suggested by Tobias Bernard
2024-04-27 16:20:33 +02:00
Rafał Dzięgiel
ae3d75a8b5 clapper-app: metainfo: Update app summary
Change to a text suggested by Tobias Bernard
2024-04-27 16:20:17 +02:00
Rafał Dzięgiel
3561bc8c6f Update README.md 2024-04-27 15:59:28 +02:00
Rafał Dzięgiel
368a484741 flatpak: Sync with Flathub 2024-04-27 15:40:38 +02:00
Rafał Dzięgiel
b3ac64e5b1 clapper-app: Show development versions in about window
Since during development we do not put new release tag into metainfo
which about window uses to know app version, set it manually to the
library version since they are the same.
2024-04-27 14:19:45 +02:00
Rafał Dzięgiel
c873c35fa7 Back to development 2024-04-27 14:14:39 +02:00
Max Buchholz
af47dcb5e5 Complement com.github.rafostar.Clapper.metainfo.xml 2024-04-25 10:54:09 +02:00
Rafał Dzięgiel
f0f4801819 0.6.0 2024-04-22 22:27:06 +02:00
Rafał Dzięgiel
b9f3cbef7f clapper-app: metainfo: Add branding colors 2024-04-22 22:04:21 +02:00
Rafał Dzięgiel
772191a396 clapper-app: metainfo: Restore "developer_name" tag
Needed for older appstream compatibility
2024-04-22 21:52:57 +02:00
Rafał Dzięgiel
f4a766ea9d clapper-gtk: seek-bar: Fix marker popover position on RTL
On RTL we need to subtract position from upper scale value to end up at correct coordinates
2024-04-22 21:14:10 +02:00
Rafał Dzięgiel
c928e601bf clapper: Add pipeline debug graph dump support 2024-04-22 20:16:08 +02:00
Rafał Dzięgiel
8fb62d773f New Crowdin updates (#406)
* New translations clapper-app.pot (Polish)

* New translations clapper-gtk.pot (Turkish)

* New translations clapper-app.pot (Turkish)

* New translations clapper-gtk.pot (Turkish)

* New translations clapper-app.pot (Portuguese)

* New translations clapper-app.pot (Turkish)

* New translations clapper-app.pot (Catalan)

* New translations clapper-gtk.pot (Catalan)

* New translations clapper-app.pot (Catalan)

* New translations clapper-gtk.pot (Portuguese)

* New translations clapper-app.pot (Portuguese)

* New translations clapper-app.pot (Portuguese)

* New translations clapper-app.pot (Portuguese)

* New translations clapper-app.pot (Hungarian)

* New translations clapper-gtk.pot (Hungarian)

* New translations clapper-app.pot (Hungarian)

* New translations clapper-app.pot (Hungarian)

* New translations clapper-gtk.pot (Romanian)

* New translations clapper-gtk.pot (French)

* New translations clapper-gtk.pot (Spanish)

* New translations clapper-gtk.pot (Afrikaans)

* New translations clapper-gtk.pot (Arabic)

* New translations clapper-gtk.pot (Catalan)

* New translations clapper-gtk.pot (Czech)

* New translations clapper-gtk.pot (Danish)

* New translations clapper-gtk.pot (German)

* New translations clapper-gtk.pot (Greek)

* New translations clapper-gtk.pot (Basque)

* New translations clapper-gtk.pot (Finnish)

* New translations clapper-gtk.pot (Hebrew)

* New translations clapper-gtk.pot (Hungarian)

* New translations clapper-gtk.pot (Italian)

* New translations clapper-gtk.pot (Japanese)

* New translations clapper-gtk.pot (Korean)

* New translations clapper-gtk.pot (Lithuanian)

* New translations clapper-gtk.pot (Dutch)

* New translations clapper-gtk.pot (Norwegian)

* New translations clapper-gtk.pot (Polish)

* New translations clapper-gtk.pot (Portuguese)

* New translations clapper-gtk.pot (Russian)

* New translations clapper-gtk.pot (Slovak)

* New translations clapper-gtk.pot (Serbian (Cyrillic))

* New translations clapper-gtk.pot (Swedish)

* New translations clapper-gtk.pot (Turkish)

* New translations clapper-gtk.pot (Ukrainian)

* New translations clapper-gtk.pot (Chinese Simplified)

* New translations clapper-gtk.pot (Chinese Traditional)

* New translations clapper-gtk.pot (Vietnamese)

* New translations clapper-gtk.pot (Portuguese, Brazilian)

* New translations clapper-gtk.pot (Persian)

* New translations clapper-gtk.pot (Croatian)

* New translations clapper-gtk.pot (Asturian)

* New translations clapper-gtk.pot (German)

* New translations clapper-gtk.pot (Portuguese)

* New translations clapper-app.pot (German)

* New translations clapper-gtk.pot (Turkish)

* New translations clapper-gtk.pot (Catalan)

* New translations clapper-gtk.pot (Finnish)

* New translations clapper-app.pot (Finnish)

* New translations clapper-gtk.pot (Finnish)

* New translations clapper-app.pot (Finnish)

* New translations clapper-gtk.pot (Hungarian)

* New translations clapper-gtk.pot (Hungarian)

* New translations clapper-app.pot (French)

* New translations clapper-gtk.pot (French)

* New translations clapper-app.pot (French)

* New translations clapper-app.pot (Polish)

* New translations clapper-gtk.pot (Polish)

* New translations clapper-app.pot (French)

* New translations clapper-app.pot (Polish)

* New translations clapper-app.pot (Polish)

* New translations clapper-app.pot (Romanian)

* New translations clapper-app.pot (French)

* New translations clapper-app.pot (Spanish)

* New translations clapper-app.pot (Afrikaans)

* New translations clapper-app.pot (Arabic)

* New translations clapper-app.pot (Catalan)

* New translations clapper-app.pot (Czech)

* New translations clapper-app.pot (Danish)

* New translations clapper-app.pot (German)

* New translations clapper-app.pot (Greek)

* New translations clapper-app.pot (Basque)

* New translations clapper-app.pot (Finnish)

* New translations clapper-app.pot (Hebrew)

* New translations clapper-app.pot (Hungarian)

* New translations clapper-app.pot (Italian)

* New translations clapper-app.pot (Japanese)

* New translations clapper-app.pot (Korean)

* New translations clapper-app.pot (Lithuanian)

* New translations clapper-app.pot (Dutch)

* New translations clapper-app.pot (Norwegian)

* New translations clapper-app.pot (Polish)

* New translations clapper-app.pot (Portuguese)

* New translations clapper-app.pot (Russian)

* New translations clapper-app.pot (Slovak)

* New translations clapper-app.pot (Serbian (Cyrillic))

* New translations clapper-app.pot (Swedish)

* New translations clapper-app.pot (Turkish)

* New translations clapper-app.pot (Ukrainian)

* New translations clapper-app.pot (Chinese Simplified)

* New translations clapper-app.pot (Chinese Traditional)

* New translations clapper-app.pot (Vietnamese)

* New translations clapper-app.pot (Portuguese, Brazilian)

* New translations clapper-app.pot (Persian)

* New translations clapper-app.pot (Croatian)

* New translations clapper-app.pot (Asturian)
2024-04-21 23:24:54 +02:00
Rafał Dzięgiel
f299e1be57 Merge pull request #420 from Rafostar/prerelease-updates
Prerelease updates
2024-04-21 22:48:16 +02:00
Rafał Dzięgiel
9f38f527be clapper-app: Sync POT file 2024-04-21 20:25:15 +02:00
Rafał Dzięgiel
10f626637b Update install steps in README.md 2024-04-21 19:58:44 +02:00
Rafał Dzięgiel
22c93c00f7 clapper-app: gschema: Fix gettext-domain value
In rewritten code "clapper-app" is used for gettext
2024-04-21 19:50:05 +02:00
Rafał Dzięgiel
7a38b605b3 clapper-app: metainfo: Update values
Update description and some other values. Also update whatever
was nowadays considered as deprecated in metainfo guidelines.
2024-04-21 16:07:28 +02:00
Rafał Dzięgiel
5c41c3a8c7 clapper-app: metainfo: Fix invalid values
Flathub validation no longer allows words for "display_length" - should be 360.
Also all "Purism" keys are nowadays invalid. They cause problems as metainfo is
parsed into hash table, thus there cannot be multiple keys with the same name.
2024-04-21 15:22:17 +02:00
Rafał Dzięgiel
51e1dd8493 Remove .gitattributes file
All linguist-vendored stuff was removed, so this git attributes file is unused and no longer needed.
2024-04-20 12:09:41 +02:00
Rafał Dzięgiel
654e6be72a clapper-app: Be more restrictive about key modifiers
Ignore key presses with additional modifiers if we describe them
in shortcuts as sole letters. Combinations might be needed in the future.
2024-04-19 23:10:14 +02:00
Rafał Dzięgiel
681da9e2f3 clapper-gtk: video: Add workaround for better GStreamer 1.24 support 2024-04-19 16:51:44 +02:00
Rafał Dzięgiel
36c166813e clapper-gtk: video: Support finding widget within bin elements
When a video sink is set to some bin, also check sinks within it
in search for a widget that can be used as video main child
2024-04-19 16:39:08 +02:00
Rafał Dzięgiel
2aecd65735 clapper-app: help-overlay: Update progression key accelerator
We allow just "p" key (including any combination with it) for changing
progression mode. Fix its description in help overlay to be just "p" then.

Fixes #417
2024-04-17 19:11:02 +02:00
Rafał Dzięgiel
a46846c24d clapper-app: Use "GDK_MODIFIER_MASK" with key controller state
We need to use "GDK_MODIFIER_MASK" to remove all private fields from key
controller state mask, otherwise its not zero on Xorg.

Fixes #416
2024-04-17 18:26:16 +02:00
Rafał Dzięgiel
fab168283d clapper: player: Make GstElement setters nullable
Allow to set NULL in order to use default value. With this, API users
will not have to check if the element they make from registry is not NULL.
2024-04-16 19:07:16 +02:00
Rafał Dzięgiel
1b38a169dd clapper-gtk: video: Debug message with used video sink
So we can know from debug logging what sink someone is using
2024-04-16 19:03:34 +02:00
Rafał Dzięgiel
a00aea50b0 Merge pull request #413 from Rafostar/workflows
Update workflows
2024-04-15 22:46:58 +02:00
Rafał Dzięgiel
6fc2c78d59 Remove unused OBS service file
This file was referencing build scripts that are no longer in this repo.
An up-to-date OBS config is kept in my opensuse build system account itself.
2024-04-15 22:43:04 +02:00
Rafał Dzięgiel
85038a669f clapper-app: Restore "q" to quit app shortcut
We used to have this and some other players (e.g. Totem) have it too, so no harm in restoring it.
2024-04-15 20:53:32 +02:00
Rafał Dzięgiel
484f2402a3 flatpak-nightly: Update manifest
In latest git, binary name is now simply "clapper". Also we now depend on libmicrodns for the server feature to be available.
2024-04-15 20:07:07 +02:00
Rafał Dzięgiel
1a0158e775 flatpak-nightly: Build dav1d from git master 2024-04-14 20:36:25 +02:00
Rafał Dzięgiel
1d92539b76 clapper-gtk: Various documentation cleanups and fixes 2024-04-14 20:17:38 +02:00
Rafał Dzięgiel
bab3d34349 clapper: Various documentation cleanups and fixes 2024-04-14 20:17:12 +02:00
Rafał Dzięgiel
e751428d6c workflows: Update to use latest versions of actions 2024-04-14 17:23:33 +02:00
Rafał Dzięgiel
a9769f9537 gst-plugin: sink: Stop preferring GL over GLES with GStreamer 1.24+
GStreamer 1.24 have implemented DRM modifiers negotiation that its lack of we were
working around with using GL on unpatched GStreamer (non-Flatpak builds).

Since GStreamer 1.24 does this and moreover it has disabled DMABuf codepath for
non-GLES we should start preferring GLES with this version always.
2024-04-14 15:47:20 +02:00
Rafał Dzięgiel
fe6b3fcf29 clapper-app: Fix window buttons on initial state
Also handle different buttons placements on initial state, similarly as we do now in headerbar.
With this commit, application menu is replicated in initial state UI, but its actually a good thing,
since this will allow us to have more current video related items in it only in main window.
2024-04-14 15:11:18 +02:00
Rafał Dzięgiel
6447944b21 clapper-app: Handle alternative headerbar buttons placements
Handle all possible combinations of window state buttons placement.
These are "right" and "left" combined along with either LTR or RTL.

Fixes #402
2024-04-13 18:32:36 +02:00
Rafał Dzięgiel
42fa31cc4b Merge pull request #404 from Rafostar/scroll-fixes
Scroll fixes
2024-04-13 14:28:23 +02:00
Rafał Dzięgiel
4baade3b32 Merge pull request #408 from sp1ritCS/devenv
meson: Ensure clapper uses local translations within the devenv
2024-04-12 21:38:16 +02:00
Florian "sp1rit"​
bcd8e470ad po: Updated German translation
I've taken a bit of liberty with some of the translations, but I feel
like they should be fine.

Signed-off-by: Florian "sp1rit"​ <sp1rit@disroot.org>
2024-04-12 20:57:04 +02:00
Florian "sp1rit"​
3841a906fd meson: Ensure clapper uses local translations within the devenv
This patch modifies the initialization routines of clapper to check for
    CLAPPER_GTK_OVERRIDE_LOCALEDIR and
    CLAPPER_APP_OVERRIDE_LOCALEDIR
and uses that instead of the LOCALEDIR specified in the config.h.

It also fixes the bug where libclapper-gtk loads the translations for
the clapper application and the clapper application loads the
translations for the libclapper-gtk. (It took me shockingly long to
figure out why the translations weren't working 🙃)

Co-authored-by: Rafał Dzięgiel <rafostar.github@gmail.com>
Signed-off-by: Florian "sp1rit"​ <sp1rit@disroot.org>
2024-04-12 20:38:46 +02:00
Rafał Dzięgiel
5e7305516e clapper-gtk: Update POT file 2024-04-12 20:29:30 +02:00
Rafał Dzięgiel
f1ef299c10 clapper-gtk: status: Fix missing translations 2024-04-12 20:28:23 +02:00
Rafał Dzięgiel
1606a165e4 clapper-gtk: extra-menu-button: Use "Show Subtitles" text
As pointed in #410, the word "Enabled" and a checkmark next to it is a bad UX.
Change this text to "Show Subtitles" instead.
2024-04-12 20:25:49 +02:00
Rafał Dzięgiel
87f51c6755 clapper: Also update decoders after preroll
Sometimes decoders might not be active yet until media starts playing, to fix that being racy also try to update them after preroll
2024-04-12 20:22:48 +02:00
Rafał Dzięgiel
ca73b3a3ef clapper-gtk: extra-menu-button: Make text->number conversion more forgiving
Try to parse into a number as much of the string as possible, without caring
about a sign suffix. This way input will be more forgiving instead of resetting
itself to lowest allowed number.

Also when a number exceeds allowed range, set it to maximal allowed value
instead of once again resetting to minimum.
2024-04-11 20:49:36 +02:00
Rafał Dzięgiel
6f1277a2e6 server: Fix invalid JSON caused by locale decimal conversion
When creating JSON data, we must ensure that our decimal numbers are converted
to a string with a "." as separator, otherwise it would be an invalid JSON.
2024-04-11 20:20:37 +02:00
Rafał Dzięgiel
76f830fa6e Merge pull request #409 from sp1ritCS/fix_pbspeed
clapper-gtk/extra-menu: Fixed speed being forced to the lowest value
2024-04-11 20:07:44 +02:00
Florian "sp1rit"​
a63d92601f clapper-gtk/extra-menu: Fixed speed being forced to the lowest value
As the SpinButton input callback attempted to parse the value inserted
as a string by printf using g_ascii_strtod, only if the language also
used . (full stop / u002E) as decimal seperator worked correctly.
Otherwise, parsing would fail and result (after a few iterations) in the
lowest value being set.

The usually correct approach is to use g_ascii_dtostr / g_ascii_formatd
instead of printf to format a decimal number, but given that this number
is actually presented to the user, going with g_strtod seems like a
better choice (I've decided against just using the stdlib strtod as to
allow the SpinButton to also recognize manual user input containing the
full stop  instead of their languages native decimal seperator (not
that that'll ever happen, given the user can't focus the SpinButton
entry while media is running).

I've also fixed this for the volume SpinButton too, but it wasn't really
affected in the first place as it appearently always gets rounded up to
a number without decimal places.

Signed-off-by: Florian "sp1rit"​ <sp1rit@disroot.org>
2024-04-10 12:26:50 +02:00
Rafał Dzięgiel
0c9973ef85 Add .flatpak-builder to .gitignore 2024-04-09 20:02:31 +02:00
Rafał Dzięgiel
65c974d539 Merge pull request #407 from sp1ritCS/devenv
Allow clapper to be ran within the meson devenv
2024-04-09 17:21:54 +02:00
Florian "sp1rit"​
43e2e88a4c meson: Use gnome.compile_schemas()
This causes meson to automatically build the clapper gsettings schemas
and set GSETTINGS_SCHEMA_DIR to the correct location within the devenv.

This means that can now be ran without needing to install it somewhere
using:
    meson devenv -C <builddir>
    clapper
    exit

More devenv overrides should be investigated (such as automatically
adopting the correct directory for translated locales etc.)

Signed-off-by: Florian "sp1rit"​ <sp1rit@disroot.org>
2024-04-09 11:39:32 +02:00
Rafał Dzięgiel
c327734ca6 clapper-app: Do not trigger default scroll handler on GtkRange
In addition to GtkScrolledWindow, when also hovering over GtkRange
subclassing widgets like GtkScale, do not trigger accidentally
default app window scroll handler.

We want the hovered upon widget and only that widget to handle scroll
events in such case.
2024-04-08 20:37:32 +02:00
Rafał Dzięgiel
48b5a7c12a Remove TODO.md
Most of it was implemented and what is left already has an open issue which is easier to track progress
2024-04-08 19:07:21 +02:00
Rafał Dzięgiel
1dd47ad2a9 Remove old translation files
They are no longer used and translated strings from them were moved to new files
2024-04-08 19:04:35 +02:00
Rafał Dzięgiel
fbeafbccd1 crowdin: Remove legacy app translations
Now that old translated strings are moved to new .po files, remove what is left unused.
2024-04-08 18:34:12 +02:00
Rafał Dzięgiel
f391e2ea87 New Crowdin updates (#405)
* New translations clapper-gtk.pot (Romanian)

* New translations clapper-gtk.pot (French)

* New translations clapper-gtk.pot (Spanish)

* New translations clapper-gtk.pot (Afrikaans)

* New translations clapper-gtk.pot (Arabic)

* New translations clapper-gtk.pot (Catalan)

* New translations clapper-gtk.pot (Czech)

* New translations clapper-gtk.pot (Danish)

* New translations clapper-gtk.pot (German)

* New translations clapper-gtk.pot (Greek)

* New translations clapper-gtk.pot (Basque)

* New translations clapper-gtk.pot (Finnish)

* New translations clapper-gtk.pot (Hebrew)

* New translations clapper-gtk.pot (Hungarian)

* New translations clapper-gtk.pot (Italian)

* New translations clapper-gtk.pot (Japanese)

* New translations clapper-gtk.pot (Korean)

* New translations clapper-gtk.pot (Lithuanian)

* New translations clapper-gtk.pot (Dutch)

* New translations clapper-gtk.pot (Norwegian)

* New translations clapper-gtk.pot (Polish)

* New translations clapper-gtk.pot (Portuguese)

* New translations clapper-gtk.pot (Russian)

* New translations clapper-gtk.pot (Slovak)

* New translations clapper-gtk.pot (Serbian (Cyrillic))

* New translations clapper-gtk.pot (Swedish)

* New translations clapper-gtk.pot (Turkish)

* New translations clapper-gtk.pot (Ukrainian)

* New translations clapper-gtk.pot (Chinese Simplified)

* New translations clapper-gtk.pot (Chinese Traditional)

* New translations clapper-gtk.pot (Vietnamese)

* New translations clapper-gtk.pot (Portuguese, Brazilian)

* New translations clapper-gtk.pot (Persian)

* New translations clapper-gtk.pot (Croatian)

* New translations clapper-gtk.pot (Asturian)

* New translations clapper-app.pot (Romanian)

* New translations clapper-app.pot (French)

* New translations clapper-app.pot (Spanish)

* New translations clapper-app.pot (Afrikaans)

* New translations clapper-app.pot (Arabic)

* New translations clapper-app.pot (Catalan)

* New translations clapper-app.pot (Czech)

* New translations clapper-app.pot (Danish)

* New translations clapper-app.pot (German)

* New translations clapper-app.pot (Greek)

* New translations clapper-app.pot (Basque)

* New translations clapper-app.pot (Finnish)

* New translations clapper-app.pot (Hebrew)

* New translations clapper-app.pot (Hungarian)

* New translations clapper-app.pot (Italian)

* New translations clapper-app.pot (Japanese)

* New translations clapper-app.pot (Korean)

* New translations clapper-app.pot (Lithuanian)

* New translations clapper-app.pot (Dutch)

* New translations clapper-app.pot (Norwegian)

* New translations clapper-app.pot (Polish)

* New translations clapper-app.pot (Portuguese)

* New translations clapper-app.pot (Russian)

* New translations clapper-app.pot (Slovak)

* New translations clapper-app.pot (Serbian (Cyrillic))

* New translations clapper-app.pot (Swedish)

* New translations clapper-app.pot (Turkish)

* New translations clapper-app.pot (Ukrainian)

* New translations clapper-app.pot (Chinese Simplified)

* New translations clapper-app.pot (Chinese Traditional)

* New translations clapper-app.pot (Vietnamese)

* New translations clapper-app.pot (Portuguese, Brazilian)

* New translations clapper-app.pot (Persian)

* New translations clapper-app.pot (Croatian)

* New translations clapper-app.pot (Asturian)
2024-04-08 18:22:06 +02:00
Rafał Dzięgiel
37bf374283 crowdin: Add new translation paths to config 2024-04-08 17:33:41 +02:00
392 changed files with 31489 additions and 22018 deletions

3
.gitattributes vendored
View File

@@ -1,3 +0,0 @@
lib/gst/clapper/* linguist-vendored
lib/gst/clapper/gstclapper-mpris* linguist-vendored=false
lib/gst/clapper/gtk4/* linguist-vendored=false

58
.github/workflows/documentation.yml vendored Normal file
View File

@@ -0,0 +1,58 @@
on:
workflow_dispatch:
push:
branches:
- master
pull_request:
branches:
- master
name: "Documentation"
jobs:
documentation:
runs-on: ubuntu-latest
container:
image: registry.fedoraproject.org/fedora
options: --privileged
steps:
- name: Prepare
run: |
dnf -y install git gcc meson glib2-devel \
gstreamer1-devel gstreamer1-plugins-base-devel \
gtk4-devel libsoup3-devel libmicrodns-devel \
gobject-introspection-devel graphviz gi-docgen
- name: Checkout
uses: actions/checkout@v4
with:
persist-credentials: false
fetch-depth: 0
- name: Build
run: |
meson setup builddir -Dauto_features=enabled \
-Denhancers-loader=disabled \
-Dclapper-app=disabled -Dvapi=disabled -Ddoc=true \
-Dglimporter=auto -Dgluploader=auto -Drawimporter=auto
cd builddir
meson compile
- name: Commit files
if: ${{ success() && github.ref == 'refs/heads/master' }}
continue-on-error: true
run: |
git config --global --add safe.directory $GITHUB_WORKSPACE
git checkout gh-pages
rm -rf doc/clapper/*
rm -rf doc/clapper-gtk/*
mv builddir/doc/reference/clapper/clapper.toml doc/clapper/
mv builddir/doc/reference/clapper/clapper/* doc/clapper/
mv builddir/doc/reference/clapper-gtk/clapper-gtk.toml doc/clapper-gtk/
mv builddir/doc/reference/clapper-gtk/clapper-gtk/* doc/clapper-gtk/
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add doc/clapper/* doc/clapper-gtk/*
git commit -m "doc: Update" || true
- name: Push changes
uses: ad-m/github-push-action@master
if: ${{ success() && github.ref == 'refs/heads/master' }}
continue-on-error: true
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
branch: gh-pages

View File

@@ -6,33 +6,34 @@ name: "Flatpak Nightly"
jobs:
flatpak:
name: "Flatpak"
runs-on: ubuntu-latest
timeout-minutes: 600
container:
image: bilelmoussaoui/flatpak-github-actions:gnome-nightly
options: --privileged
strategy:
matrix:
arch: [x86_64, aarch64]
os: [ubuntu-24.04, ubuntu-24.04-arm]
include:
- os: ubuntu-24.04
arch: x86_64
- os: ubuntu-24.04-arm
arch: aarch64
fail-fast: false
runs-on: ${{ matrix.os }}
container:
image: registry.fedoraproject.org/fedora
options: --privileged
steps:
- uses: actions/checkout@v2
- name: Prepare
run: |
dnf install -y git git-lfs dbus-daemon flatpak flatpak-builder libappstream-glib ccache zstd xorg-x11-server-Xvfb
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo
flatpak --system install -y --noninteractive flathub org.freedesktop.Sdk.Extension.rust-stable/${{ matrix.arch }}/24.08
flatpak --system install -y --noninteractive flathub org.freedesktop.Sdk.Extension.llvm18/${{ matrix.arch }}/24.08
flatpak --system install -y --noninteractive flathub org.flatpak.Builder
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Docker
run: |
dnf -y install docker
- name: Setup QEMU
id: qemu
uses: docker/setup-qemu-action@v1
with:
platforms: arm64
- name: Prepare Runtime
run: |
flatpak --system install -y --noninteractive flathub org.freedesktop.Sdk.Extension.rust-nightly/${{ matrix.arch }}/23.08
flatpak --system install -y --noninteractive flathub org.freedesktop.Sdk.Extension.llvm16/${{ matrix.arch }}/23.08
- uses: bilelmoussaoui/flatpak-github-actions/flatpak-builder@v4
name: Build
- name: Build
uses: flatpak/flatpak-github-actions/flatpak-builder@master
with:
bundle: com.github.rafostar.Clapper.flatpak
manifest-path: pkgs/flatpak/com.github.rafostar.Clapper-nightly.json
@@ -40,3 +41,10 @@ jobs:
repository-url: https://nightly.gnome.org/gnome-nightly.flatpakrepo
cache-key: flatpak-builder-${{ github.sha }}-testing-${{ github.run_number }}
arch: ${{ matrix.arch }}
upload-artifact: false
- name: Upload
uses: actions/upload-artifact@v4
with:
name: clapper-flatpak-nightly-${{ matrix.arch }}
path: com.github.rafostar.Clapper.flatpak
if-no-files-found: error

View File

@@ -10,31 +10,40 @@ name: "Flatpak"
jobs:
flatpak:
name: "Flatpak"
runs-on: ubuntu-latest
timeout-minutes: 600
container:
image: bilelmoussaoui/flatpak-github-actions:gnome-45
options: --privileged
strategy:
matrix:
arch: [x86_64, aarch64]
os: [ubuntu-24.04, ubuntu-24.04-arm]
include:
- os: ubuntu-24.04
arch: x86_64
- os: ubuntu-24.04-arm
arch: aarch64
fail-fast: false
runs-on: ${{ matrix.os }}
container:
image: registry.fedoraproject.org/fedora
options: --privileged
steps:
- uses: actions/checkout@v2
- name: Prepare
run: |
dnf install -y git git-lfs dbus-daemon flatpak flatpak-builder libappstream-glib ccache zstd xorg-x11-server-Xvfb
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak --system install -y --noninteractive flathub org.flatpak.Builder
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Docker
run: |
dnf -y install docker
- name: Setup QEMU
id: qemu
uses: docker/setup-qemu-action@v1
with:
platforms: arm64
- uses: bilelmoussaoui/flatpak-github-actions/flatpak-builder@v4
name: "Build"
- name: Build
uses: flatpak/flatpak-github-actions/flatpak-builder@master
with:
bundle: com.github.rafostar.Clapper.flatpak
manifest-path: pkgs/flatpak/com.github.rafostar.Clapper.json
cache-key: flatpak-builder-${{ github.sha }}
arch: ${{ matrix.arch }}
upload-artifact: false
- name: Upload
uses: actions/upload-artifact@v4
with:
name: clapper-flatpak-${{ matrix.arch }}
path: com.github.rafostar.Clapper.flatpak
if-no-files-found: error

101
.github/workflows/windows.yml vendored Normal file
View File

@@ -0,0 +1,101 @@
on:
workflow_dispatch:
push:
branches:
- master
pull_request:
branches:
- master
name: "Windows"
jobs:
windows:
name: "Windows"
runs-on: windows-latest
strategy:
matrix:
arch: [x86_64]
defaults:
run:
shell: msys2 {0}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup MSYS2
uses: msys2/setup-msys2@v2
with:
msystem: MINGW64
update: true
install: |-
mingw-w64-${{ matrix.arch }}-meson
mingw-w64-${{ matrix.arch }}-gcc
mingw-w64-${{ matrix.arch }}-glib2
mingw-w64-${{ matrix.arch }}-gstreamer
mingw-w64-${{ matrix.arch }}-gst-plugins-base
mingw-w64-${{ matrix.arch }}-gst-plugins-good
mingw-w64-${{ matrix.arch }}-gst-plugins-bad
mingw-w64-${{ matrix.arch }}-gst-plugins-ugly
mingw-w64-${{ matrix.arch }}-gst-libav
mingw-w64-${{ matrix.arch }}-libpeas2
mingw-w64-${{ matrix.arch }}-libsoup3
mingw-w64-${{ matrix.arch }}-libmicrodns
mingw-w64-${{ matrix.arch }}-gtk4
mingw-w64-${{ matrix.arch }}-libadwaita
- name: Prepare
run: |
BUILD_PREFIX="$GITHUB_WORKSPACE/clapper-win-${{ matrix.arch }}"
mkdir -p $BUILD_PREFIX/bin
cp /mingw64/bin/gdbus.exe $BUILD_PREFIX/bin/
cp /mingw64/bin/gst-inspect-1.0.exe $BUILD_PREFIX/bin/
mkdir -p $BUILD_PREFIX/lib
cp -r /mingw64/lib/gio $BUILD_PREFIX/lib/
cp -r /mingw64/lib/gstreamer-1.0 $BUILD_PREFIX/lib/
cp -r /mingw64/lib/gdk-pixbuf-2.0 $BUILD_PREFIX/lib/
mkdir -p $BUILD_PREFIX/share/glib-2.0/schemas
cp -r /mingw64/share/glib-2.0/schemas/*.xml $BUILD_PREFIX/share/glib-2.0/schemas/
cp -r /mingw64/share/icons $BUILD_PREFIX/share/
mkdir -p $BUILD_PREFIX/share/xml/iso-codes
cp /mingw64/share/xml/iso-codes/iso_639.xml $BUILD_PREFIX/share/xml/iso-codes/
cd "$BUILD_PREFIX/lib/gstreamer-1.0"
rm -f \
libgstadpcmenc.dll libgstamfcodec.dll libgstdvbsubenc.dll libgstencoding.dll \
libgstfrei0r.dll libgstinter.dll libgstlame.dll libgstldac.dll libgstmpeg2enc.dll \
libgstmpegpsmux.dll libgstmpegtsmux.dll libgstmplex.dll libgstrealmedia.dll \
libgstsubenc.dll libgstsvtav1.dll libgstsvthevcenc.dll libgsttwolame.dll \
libgstvoamrwbenc.dll libgstwavenc.dll libgstx264.dll libgstx265.dll \
libgstxingmux.dll libgsty4menc.dll libgstzbar.dll
- name: Build
run: |
meson setup builddir --prefix=$GITHUB_WORKSPACE/clapper-win-${{ matrix.arch }}
cd builddir
meson compile
meson install
- name: Package
run: |
BUILD_PREFIX="$GITHUB_WORKSPACE/clapper-win-${{ matrix.arch }}"
ldd $BUILD_PREFIX/bin/clapper.exe | grep '\/mingw.*\.dll' -o | xargs -I{} cp -n "{}" $BUILD_PREFIX/bin
find $BUILD_PREFIX/lib/clapper-0.0/ -name '*\.dll' -type f -exec ldd "{}" \; | grep '\/mingw.*\.dll' -o | xargs -I{} cp -n "{}" $BUILD_PREFIX/bin
find $BUILD_PREFIX/lib/gstreamer-1.0/ -name '*\.dll' -type f -exec ldd "{}" \; | grep '\/mingw.*\.dll' -o | xargs -I{} cp -n "{}" $BUILD_PREFIX/bin
find $BUILD_PREFIX/lib/gio/ -name '*\.dll' -type f -exec ldd "{}" \; | grep '\/mingw.*\.dll' -o | xargs -I{} cp -n "{}" $BUILD_PREFIX/bin
- name: Cleanup
run: |
BUILD_PREFIX="$GITHUB_WORKSPACE/clapper-win-${{ matrix.arch }}"
rm -rf $BUILD_PREFIX/include
rm -rf $BUILD_PREFIX/lib/pkgconfig
- name: Installer
uses: Minionguyjpro/Inno-Setup-Action@v1.2.5
with:
path: builddir/pkgs/windows-installer/clapper.iss
options: /O+
- name: Upload
uses: actions/upload-artifact@v4
with:
name: clapper-win-${{ matrix.arch }}
path: builddir/pkgs/windows-installer/InstallerOutput/Clapper*.exe
if-no-files-found: error

3
.gitignore vendored
View File

@@ -2,3 +2,6 @@
build/
install/
builddir/
# flatpak
.flatpak-builder/

View File

@@ -2,7 +2,7 @@
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
<https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -55,7 +55,7 @@ modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
@@ -111,7 +111,7 @@ modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
@@ -158,7 +158,7 @@ Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
@@ -216,7 +216,7 @@ instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
@@ -267,7 +267,7 @@ Library will still fall under Section 6.)
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
@@ -329,7 +329,7 @@ restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
@@ -370,7 +370,7 @@ subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
@@ -422,7 +422,7 @@ conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
@@ -456,7 +456,7 @@ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
@@ -484,9 +484,7 @@ convey the exclusion of warranty; and each file should have at least the
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
USA
License along with this library; if not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
@@ -495,10 +493,9 @@ school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random
Hacker.
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
<signature of Moe Ghoul>, 1 April 1990
Moe Ghoul, President of Vice
That's all there is to it!

View File

@@ -11,14 +11,14 @@ desktop environment using [GTK4](https://www.gtk.org/) toolkit, it has a clean a
This application aim is to offer all the essentials features you'd expect from a video player in a simple form.
<p align="center">
<img src="https://raw.githubusercontent.com/wiki/Rafostar/clapper/media/screenshot_03.png">
<img src="https://raw.githubusercontent.com/wiki/Rafostar/clapper/media/screenshot_01.png">
</p>
Clapper uses a playback queue where you can add multiple media files. Think of it like a playlist that you can build.
You can easily reorder items or remove them from the queue with a simple drag and drop operation.
<p align="center">
<img src="https://raw.githubusercontent.com/wiki/Rafostar/clapper/media/screenshot_04.png">
<img src="https://raw.githubusercontent.com/wiki/Rafostar/clapper/media/screenshot_03.png">
</p>
### Components
@@ -31,6 +31,8 @@ Both libraries support *GObject Introspection* bindings. A simple application ex
Above libraries are licensed under `LGPL-2.1-or-later`. You are free to use them in your own projects as long as you comply with license terms.
Please note that until version 1.0 they should be considered as an unstable API (some things may change without prior notice).
Clapper `Vala` bindings are part of this repo, while `Rust` bindings can be found [here](https://gitlab.gnome.org/JanGernert/clapper-rs).
## Installation from Flatpak
The `Flatpak` package includes all required dependencies and codecs.
Additionally it also has a few patches, thus some functionalities work better in `Flatpak` version (until my changes are accepted upstream).
@@ -48,10 +50,14 @@ Those are automatically built on each git commit, thus are considered unstable.
## Installation from Source Code
```sh
meson builddir --prefix=/usr/local
sudo meson install -C builddir
meson setup builddir
cd builddir
meson compile
sudo meson install
```
If you want to compile app as `Flatpak`, remember to clone this repo with `--recurse-submodules` option.
## Questions?
Feel free to ask me any questions. Come and talk on Matrix: [#clapper-player:matrix.org](https://matrix.to/#/#clapper-player:matrix.org)
@@ -66,5 +72,6 @@ so if your language is not available, please contact me first.
Many thanks to [sp1ritCS](https://github.com/sp1ritCS) for creating and maintaining package build files.
Big thanks to [bridadan](https://github.com/bridadan) and [Uniformbuffer3](https://github.com/Uniformbuffer3) for helping
with testing V4L2 and NVDEC hardware acceleration methods.
Also words of appreciation for [JanGernert](https://gitlab.gnome.org/JanGernert) who made and is sharing Clapper Rust bindings.
Thanks a lot to all the people who are supporting the development with their anonymous donations through [Liberapay](https://liberapay.com/Clapper/). I :heart: U.

46
TODO.md
View File

@@ -1,46 +0,0 @@
- [X] Implement GstPlayer API
- [X] Update to custom GstClapper API
- [X] Inhibit screen locking
- [X] Hide cursor on video window
- Adaptive GUI:
- [X] Darker and bigger in fullscreen
- [X] Mobile/narrow widths transitions
- [ ] Mobile friendly other windows e.g. prefs window (libadwaita)
- [X] Dragging player by video (MPV)
- [X] Switching video/audio/subtitles tracks from bottom bar (MPV)
- [X] Over-amplification supported by default (VLC)
- [X] Audio visualizations (VLC)
- [X] Clock with current hour and "Ends at" time on top overlay (Kodi)
- [ ] Auto select subtitles matching OS language (Totem)
- [X] Picture-in-Picture mode window (floating window)
- [ ] Touch gestures/swipes support
- Media playlists:
- [X] Add more items to playlist via D&D
- [X] Select video from playlist
- [ ] Reorder playlist items via D&D
- [X] Load special playlist file (.claps)
- [X] Save to playlist file from GUI
- Seeking:
- [X] Customizable seek time
- [X] Set seek mode (default, accurate, fast)
- [ ] Statistics and codec info page (VLC)
- [X] Resume playback from last position
- [X] Chapters support
- [ ] Set tracks time offset
- [ ] Subtitles offset
- [X] Audio offset
- [ ] MDNS and UPNP (discovering media in local network)
- [X] DND files from Nautilus to play (ignore incompatible ones)
- [X] Support dropping whole folders
- [ ] Search for subtitles, download and activate (SMplayer)
- [ ] Auto add subtitles from same folder
- [ ] Set global subtitles folders
- [X] RSTP streaming
- [X] Playback speed
- [X] Remote playback controls via HTTP (VLC) + WebSockets
- [ ] Expand available API
- [ ] API documentation
- [X] Integration with the top bar
- [X] MPRIS support
- [X] Controls in the notifications panel
- [ ] Progress bar in the notifications panel (maybe via extension)

View File

@@ -1,14 +0,0 @@
<services>
<service name="obs_scm">
<param name="scm">git</param>
<param name="url">https://github.com/Rafostar/clapper.git</param>
<param name="extract">pkgs/rpm/clapper.spec</param>
<param name="extract">pkgs/rpm/clapper.rpmlintrc</param>
</service>
<service name="tar" mode="buildtime"/>
<service name="recompress" mode="buildtime">
<param name="compression">xz</param>
<param name="file">*.tar</param>
</service>
<service name="set_version" mode="buildtime"/>
</services>

View File

@@ -1,3 +1,5 @@
files:
- source: /po/com.github.rafostar.Clapper.pot
translation: /po/%osx_locale%.po
- source: /src/lib/clapper-gtk/po/clapper-gtk.pot
translation: /src/lib/clapper-gtk/po/%osx_locale%.po
- source: /src/bin/clapper-app/po/clapper-app.pot
translation: /src/bin/clapper-app/po/%osx_locale%.po

View File

@@ -56,6 +56,7 @@ base_url = "https://github.com/Rafostar/clapper/tree/master/"
[extra]
# The same order will be used when generating the index
content_files = [
"migrating-to-010.md",
]
content_images = [
"images/clapper-logo.svg",

View File

@@ -6,6 +6,10 @@ clappergtk_toml = configure_file(
install_dir: join_paths(datadir, 'doc', 'clapper-gtk'),
)
extra_md_files = [
'migrating-to-010.md',
]
custom_target('clapper-gtk-doc',
input: [
clappergtk_toml,
@@ -16,6 +20,7 @@ custom_target('clapper-gtk-doc',
gi_docgen,
'generate',
gi_docgen_common_args,
'--add-include-path=@0@'.format(join_paths(meson.project_build_root(), 'src', 'lib', 'clapper')),
'--add-include-path=@0@'.format(join_paths(meson.project_build_root(), 'src', 'lib', 'clapper-gtk')),
'--config=@INPUT0@',
'--output-dir=@OUTPUT@',
@@ -23,6 +28,7 @@ custom_target('clapper-gtk-doc',
'--content-dir=@0@'.format(meson.current_source_dir()),
'@INPUT1@',
],
depend_files: extra_md_files,
build_by_default: true,
install: true,
install_dir: join_paths(datadir, 'doc'),

View File

@@ -0,0 +1,22 @@
Title: Migrating to ClapperGtk 0.10
Slug: migrating-to-010
### AV widget
Code of [class@ClapperGtk.Video] was split into a base class [class@ClapperGtk.Av] from which
[class@ClapperGtk.Video] and newly added [class@ClapperGtk.Audio] widgets are made.
This code split implies following changes:
* Properties `auto-inhibit`, `inhibited` and `player` were moved into AV base class, since these
are usually used without explicit need to specify object class they belong to, this change should
not affect most use-cases.
* Methods to get above properties are now in AV, but also left in video widget for compatibility purposes.
* Built-in widget actions starting with `video.` prefix are deprecated (also left for compatibility).
Implementations that used them are encouraged to use `av.` actions now. All actions from video widget were
ported to AV widget as they were, so updating your app should be as easy as changing this action prefix.
### Other Info
Above describes changes to GTK integration library, for the playback library
check out [other migration guide](../clapper/migrating-to-010.html).

View File

@@ -0,0 +1,180 @@
Title: Clapper Enhancers
Slug: clapper-enhancers
### Overview
Clapper Enhancers are special plugins loaded through `libpeas` for Clapper library.
The idea is to enhance it (including applications that use Clapper) with new
capabilities that do stuff outside of `GStreamer` scope of things without increasing
number of dependencies of Clapper itself (especially for features that not everyone needs).
To avoid confusion with term "plugins" that `GStreamer` uses, the name "enhancers"
was choosen instead.
In addition to writing enhancers in pure `C`, they can be written in any programmable
language that is supported by `libpeas` and works with Clapper library bindings
(examples being `Python`, `GJS` and `Vala`). This makes it possible for individual users
to add their own custom functionalities that they want to use individually.
### Types
Clapper gives three interfaces for writing enhancers for different things, these are:
- [Extractable](extractable-enhancers.html)
- [Playlistable](playlistable-enhancers.html)
- [Reactable](reactable-enhancers.html)
### Basics
Each enhancer is a `libpeas` compatible module. As such it follows its requirements for
writing plugins and is a [class@GObject.Object] sublass implementing one or more of interfaces
that Clapper library provides.
Due to plugins nature, written enhancer can be either submitted to the main [Clapper Enhancers
repository](https://github.com/Rafostar/clapper-enhancers) when it seems useful for more than
a single application or it can be shipped as part your application. Users can also write their
own/custom local enhancer plugins.
### Loading Enhancers
Clapper will try to lazy load enhancer modules, meaning they will not be loaded unless they are used.
As an additional safety precaution, enhancers can be disallowed from their instances being created with
[property@Clapper.EnhancerProxy:target-creation-allowed]. Enhancers that operate on-demand
(when supported URI is given) such as [iface@Clapper.Extractable] and [iface@Clapper.Playlistable]
are allowed (enabled) by default, while [iface@Clapper.Reactable] are not.
Environment variables:
* `CLAPPER_ENHANCERS_PATH` - override for default path where Clapper loads enhancers from
* `CLAPPER_ENHANCERS_EXTRA_PATH` - additional path to scan for enhancer plugins
While both allow to specify multiple directories (with `:` separation), applications and
users should mostly use extra path in order to add their own enhancers from non-standard
installation directory. They can override default path in case where they want to forbid
using stock enhancers for some reason.
### Enhancer Proxies
In order to create enhancers when needed and use them only within thread they were created in,
Clapper manages enhancer instances on its own. It gives applications proxy objects for
browsing and configuring them.
Only after Clapper library is initialized, you can get either the global (application scope) list
([class@Clapper.EnhancerProxyList]) of enhancers proxies with [func@Clapper.get_global_enhancer_proxies]
or player scope with [method@Clapper.Player.get_enhancer_proxies].
Properties set on the global list will carry over to all created player instances afterwards.
While these set on a list from a player are applied to enhancers created by this player only.
You can use that to your advantage to only allow creation of some type of enhancer in only some
player instances.
### Properties
Some enhancers might want to expose some configuration. For this cases they should install
[class@GObject.Object] properties in their class. They must only use fundamental types from the list below:
* boolean
* int
* uint
* double
* string
They should include one or more of [flags@Clapper.EnhancerParamFlags].
Properties in object can have `global`, `local`, neither or both flags at once.
The ones with [flags@Clapper.EnhancerParamFlags.GLOBAL] are for user to configure. They should
be exposed (ideally in the UI) and used for things that make sense to be set for all
applications at once (e.g. supported media codec by user device, preferred language, etc.).
On the other hand, properties with [flags@Clapper.EnhancerParamFlags.LOCAL] are for application scope
usage only. They never carry over to other apps, nor they can be set on global enhancers list.
Instead they are configured per player instance.
When property is neither `global` or `local` it is considered to be plugin internal property.
Clapper will never access them, as such they can be of any type (not limited to above list).
This also makes properties that are already installed in base classes of subclassed object
not appear in the UI.
When both flags are set, property will initially use globally set value while still
allowing application to override it content locally per player instance.
Extra flags like [flags@Clapper.EnhancerParamFlags.FILEPATH] and [flags@Clapper.EnhancerParamFlags.DIRPATH]
can be used (usually with `string` type of property) in order to let application know that this
field holds a file/directory path and allow it to present file selection dialog to the user instead
of text entry.
### Configuring Enhancers
Applications can browse properties of enhancer via [method@Clapper.EnhancerProxy.get_target_properties]
which returns a list of [class@GObject.ParamSpec]. By inspecting their `flags` they can know whether
property is `global`, `local` or both. Properties without any of these 2 flags set (internal ones)
will not appear on this list.
Use [method@Clapper.EnhancerProxy.get_settings] to get a [class@Gio.Settings] with `global` properties
to read and write (note that only users should be able to change them, thus you might want to bind these
into some UI widgets for that). These can be (with user consent) set on either proxy from global proxies
list or the player one.
Use [method@Clapper.EnhancerProxy.set_locally] to set `local` properties. These are meant for applications
to freely customize as they please. Remember that you can only set them on a enhancer proxy object belonging
to some player instance and not the global list.
### Plugin Info File
An enhancer plugin should be placed within directory that includes its [Peas] plugin
description file. It should be a text file with a `.plugin` extension and contain at least
following content:
```
[Plugin]
Module=example_enhancer
Name=Example Enhancer
Description=This enhancer serves as an example
Version=0.0.1
```
* `Module` - module entry file name. It also acts as enhancer ID and should be unique for each.
It is recommended to use app/custom prefix in its name.
* `Name` - module friendly name for displaying in UI and such.
* `Description` - description to present to the user for what it does.
* `Version` - enhancer version. In order to lazy load enhancers, Clapper will cache each
enhancer data and olny reload it if version changes, so keep this always updated.
If module is written in interpretable programming language it must also contain `Loader` key
with interpreter name (e.g. `Loader=python`).
Some enhancer interfaces require additional fields to be put in this file. They are described
in the requirements of each one in their documentation pages that are listed in the
[Types section](clapper-enhancers.html#types).
### Adding Enhancers to Flatpak App
If you are using Clapper as part of a `Flatpak` application, you can get all the enhancers from their main repo as an extension
(info [here](https://github.com/flathub/com.github.rafostar.Clapper?tab=readme-ov-file#comgithubrafostarclapperenhancers)),
thus you do not need to build them yourself.
### Configuration Sharing in Flatpak
In native system packages/installations where property with [flags@Clapper.EnhancerParamFlags.GLOBAL] flag is set
for an enhancer, all apps get the same config values. In sandbox however, default permissions prevent access
to config of these properties, thus setting them will only affect [class@Clapper.Player] instances in this
particular application. Keep this in mind when writing your own enhancer plugin.
You can allow configuration sharing in `Flatpak` by adding below permission to each application that uses
Clapper Enhancers plugins (including Clapper itself):
```sh
--filesystem=xdg-config/clapper-0.0/enhancers:create
```
This can be done manually through either `sudo flatpak override` or tools such as
[Flatseal](https://flathub.org/apps/com.github.tchx84.Flatseal).
When this permission is set, users can configure enhancers from within Clapper application
preferences in cases when a 3rd party app does not have any UI to configure them.
Please note that when doing so, any properties storing file/directory paths as values also
need a permission override from user to access this specific file/directory. A good practice is
to create a single directory for such files and allow all `Flatpak` with enhancers to access
this directory (including subdirectories) or just store them somewhere in allowed above
user config directory (usually: `~/.config/clapper-0.0/enhancers`).

View File

@@ -66,6 +66,11 @@ base_url = "https://github.com/Rafostar/clapper/tree/master/"
[extra]
# The same order will be used when generating the index
content_files = [
"clapper-enhancers.md",
"extractable-enhancers.md",
"playlistable-enhancers.md",
"reactable-enhancers.md",
"migrating-to-010.md",
]
content_images = [
"images/clapper-logo.svg",

View File

@@ -0,0 +1,76 @@
Title: Extractable Enhancers
Slug: extractable-enhancers
### Overview
[iface@Clapper.Extractable] is an interface to implement enhancers that need to
resolve given URI into data that `GStreamer` will be able to play. While not
limited to, main use-case is for media information extraction.
While implementer is free to write whole extraction by hand, he can alternatively
integrate some 3rd party library that does most of this work. In such case, extractable
enhancer is more of a wrapper for integrating said library. This is especially useful
if library that you want to use is written in different programming language than Clapper is.
For the basics about writing enhancers see [Clapper Enhancers](clapper-enhancers.html).
### Requirements
Additional fields for `.plugin` info file: `X-Schemes` and `X-Hosts`. The former one should
hold the `;` separated list of supported URI schemes, while the latter is for hostnames.
Example:
```
X-Schemes=https;expl
X-Hosts=example.com;other.example.com
```
With this in place, enhancer will be loaded and used for URIs that match combinations
of one of the schemes and hosts. The special rule is that when using some custom URI
scheme other than `http(s)`, `X-Hosts` can be skipped since such URI explicitly
says to use this module.
Considering all of the above, this enhancer would try to extract URIs like:
* `https://example.com/video_id=ABCD`
* `expl://video.it?id=ABCD`
It would not act however for:
* `https://video.it?id=ABCD`
* `qwerty://other.example.com/video_id=ABCD`
An enhancer of this type must implement [vfunc@Clapper.Extractable.extract] virtual method.
### Harvesting data
When [vfunc@Clapper.Extractable.extract] is called, newly made [class@Clapper.Harvest]
is passed as this function argument. Implementation is responsible for filling it with
data (see [method@Clapper.Harvest.fill]) that can be played. Such content can be either
a resolved URI to actual media file or some streaming manifest (like `HLS` or `DASH`).
During extract function, implementation might optionally add media tags such as title
(which will be merged with tags of [class@Clapper.MediaItem]) and extra HTTP request
headers if any are required to access this content.
### Multiple items extraction
It is possible to handle URIs which would normally return more than one media item to play.
Examples being playlists, search queries, related videos, etc.
This can be handled in two ways, depending on set media type:
1. `text/uri-list`
2. `application/clapper-playlist`
If you use the first option, harvest should be filled with idividual URIs one per line.
Clapper will use its built-in URI list parser to create a media item for each URI and
place them in its playback queue. This is equivalent of creating [class@Clapper.MediaItem]
for each of these URIs without setting any tags in it initially.
The second option requires for this enhancer to also implement [iface@Clapper.Playlistable]
interface. In this case, you can fill harvest with ANY kind of data considering that
[vfunc@Clapper.Playlistable.parse] of your own enhancer will be used with the data you
passed. With this, you can add more info to media items such as extra tags, timeline markers
or subtitle URI. Useful if your extractor extracts both URIs and tags in one go.

View File

@@ -6,6 +6,14 @@ clapper_toml = configure_file(
install_dir: join_paths(datadir, 'doc', 'clapper'),
)
extra_md_files = [
'clapper-enhancers.md',
'extractable-enhancers.md',
'playlistable-enhancers.md',
'reactable-enhancers.md',
'migrating-to-010.md',
]
custom_target('clapper-doc',
input: [
clapper_toml,
@@ -23,6 +31,7 @@ custom_target('clapper-doc',
'--content-dir=@0@'.format(meson.current_source_dir()),
'@INPUT1@',
],
depend_files: extra_md_files,
build_by_default: true,
install: true,
install_dir: join_paths(datadir, 'doc'),

View File

@@ -0,0 +1,44 @@
Title: Migrating to Clapper 0.10
Slug: migrating-to-010
### Replace Features with Enhancers
Clapper 0.10 deprecates [class@Clapper.Feature] objects in favour [Clapper Enhancers](clapper-enhancers.html)
used via [class@Clapper.EnhancerProxy].
Old [class@Clapper.Feature] objects (including `mpris`, `discoverer` and `server`) are left for compatibility
reasons, but all apps using them are advised to migrate to enhancer plugins which already surpassed former
ones in what can be achieved with them.
Since these are in the form of plugins scanned during init, one of the differences is that you now check
their availability at runtime instead of compile time like before.
Something like this:
```c
#if CLAPPER_HAVE_MPRIS
ClapperFeature *feature = CLAPPER_FEATURE (clapper_mpris_new (
mpris_name, APP_NAME, APP_ID));
clapper_player_add_feature (player, feature);
gst_object_unref (feature);
#endif
```
Can be implemented like this:
```c
ClapperEnhancerProxyList *proxies = clapper_player_get_enhancer_proxies (player);
ClapperEnhancerProxy *proxy = clapper_enhancer_proxy_list_get_proxy_by_module (proxies, "clapper-mpris");
if (proxy) {
clapper_enhancer_proxy_set_locally (proxy,
"own-name", mpris_name,
"identity", APP_NAME,
"desktop-entry", APP_ID, NULL);
clapper_enhancer_proxy_set_target_creation_allowed (proxy, TRUE);
gst_object_unref (proxy);
}
```
For more information how to use enhancers and how to write your own,
see [Clapper Enhancers](clapper-enhancers.html) documentation.

View File

@@ -0,0 +1,39 @@
Title: Playlistable Enhancers
Slug: playlistable-enhancers
### Overview
[iface@Clapper.Playlistable] is an interface to implement playlist parsers.
Allows to expand Clapper library with an ability to read data from which one
or more media items should be created.
To load playlist within Clapper, just create a new media item which has an URI
leading to data that playlistable enhancer will act upon. After parsing, that item
will be merged with first parsed item and the rest will be inserted into queue after
its position.
Essentially, such enhancer inserts items from a playlist into playback queue upon
which Clapper operates. It can also handle nested playlits (a playlist URI within
another playlist) with unlimited amount of nested levels.
For the basics about writing enhancers see [Clapper Enhancers](clapper-enhancers.html).
### Requirements
Additional fields for `.plugin` info file:
* `X-Data-Prefix` - describe text that data should start with
* `X-Data-Contains` - data must contain given phrase
* `X-Data-Regex` - regular expression to run on data
These are used by `typefinder` to determine whether given data is a playlist for
this enhancer to handle. At least one of the above must be added to plugin info file.
An enhancer of this type must implement [vfunc@Clapper.Playlistable.parse] virtual method.
### Parsing data
When [vfunc@Clapper.Playlistable.parse] is called, an empty [class@Gio.ListStore] is
passed as this function argument. Implementation is responsible for parsing data, creating
[class@Clapper.MediaItem] objects and adding them to that list store. While doing so, it
can also populate each media item tags, timeline markers and/or set subtitle URI.

View File

@@ -0,0 +1,23 @@
Title: Reactable Enhancers
Slug: reactable-enhancers
### Overview
[iface@Clapper.Reactable] is an interface to implement enhancers that react to the
playback and/or events that should influence it.
Such enhancer can work not only in a way that triggers external actions due to some
playback events, but also in reverse - alters playback or its queue due to some
external event. It can do so by getting a hold of the player that given enhancer
instance reacts to with [method@Clapper.Reactable.get_player].
For the basics about writing enhancers see [Clapper Enhancers](clapper-enhancers.html).
### Requirements
An enhancer of this type should implement any of the [iface@Clapper.Reactable] virtual
methods that it needs.
Note that when implementing [vfunc@Clapper.Reactable.queue_item_removed] you probably
also want to implement [vfunc@Clapper.Reactable.queue_cleared] as the former is not
called for each item when clearing the whole queue for performance reasons.

View File

@@ -0,0 +1,49 @@
#!/usr/bin/env python3
import gi
gi.require_version('Adw', '1')
gi.require_version('Clapper', '0.0')
gi.require_version('ClapperGtk', '0.0')
gi.require_version('Gtk', '4.0')
from gi.repository import Adw, Clapper, ClapperGtk, Gtk
Clapper.init(None)
def on_activate(app):
# Create our widgets.
win = Gtk.ApplicationWindow(application=app, title='Clapper Audio', default_width=640, default_height=96)
audio = ClapperGtk.Audio()
box = Gtk.Box(valign=Gtk.Align.CENTER, margin_start=8, margin_end=8, spacing=4)
prev_btn = ClapperGtk.PreviousItemButton()
play_btn = ClapperGtk.TogglePlayButton()
next_btn = ClapperGtk.NextItemButton()
seek_bar = ClapperGtk.SeekBar()
# Add media for playback. First media item in queue will be automatically selected.
item = Clapper.MediaItem(uri='https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3')
audio.props.player.props.queue.add_item(item)
item = Clapper.MediaItem(uri='https://www.learningcontainer.com/wp-content/uploads/2020/02/Kalimba.mp3')
audio.props.player.props.queue.add_item(item)
# Assemble window.
box.append(prev_btn)
box.append(play_btn)
box.append(next_btn)
box.append(seek_bar)
audio.set_child(box)
win.set_child(audio)
win.present()
# Not too loud. Mind the ears.
audio.props.player.props.volume = 0.7
# Start playback.
audio.props.player.play()
# Create a new application.
app = Adw.Application(application_id='com.example.ClapperAudio')
app.connect('activate', on_activate)
# Run the application.
app.run(None)

View File

@@ -0,0 +1,57 @@
#!/usr/bin/env python3
import gi
gi.require_version('Adw', '1')
gi.require_version('Clapper', '0.0')
gi.require_version('ClapperGtk', '0.0')
gi.require_version('GLib', '2.0')
gi.require_version('Gtk', '4.0')
from gi.repository import Adw, Clapper, ClapperGtk, GLib, Gtk
import shutil
Clapper.init(None)
download_dir = GLib.build_filenamev([GLib.get_user_cache_dir(), "example_download_dir", None])
print('Using cache directory: {0}'.format(download_dir))
def on_download_complete(player, item, location):
# Media downloaded. Data from this file is still used for current playback (including seeking).
print('Download complete: {0} => {1}'.format(item.props.uri, location))
def on_activate(app):
win = Gtk.ApplicationWindow(application=app, default_width=640, default_height=396)
video = ClapperGtk.Video()
controls = ClapperGtk.SimpleControls(fullscreenable=False)
# Enable local storage caching and monitor it
video.props.player.set_download_dir(download_dir)
video.props.player.set_download_enabled(True)
video.props.player.connect('download-complete', on_download_complete)
# Configure playback
video.props.player.props.queue.set_progression_mode(Clapper.QueueProgressionMode.CAROUSEL)
video.props.player.set_autoplay(True)
# Assemble window
video.add_fading_overlay(controls)
win.set_child(video)
win.present()
# Create and add media for playback
item_1 = Clapper.MediaItem(uri='http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4')
item_2 = Clapper.MediaItem(uri='http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4')
video.props.player.props.queue.add_item(item_1)
video.props.player.props.queue.add_item(item_2)
# Create a new application
app = Adw.Application(application_id='com.example.ClapperDownloadCache')
app.connect('activate', on_activate)
# Run the application
app.run(None)
# Finally app should cleanup before exit. Possibly moving data to
# another dir if it wants to use it on next run and deleting what's
# left (so any unfinished downloads will also be removed).
print('Cleanup')
shutil.rmtree(download_dir)

View File

@@ -0,0 +1,45 @@
#!/usr/bin/env python3
import gi
gi.require_version('Adw', '1')
gi.require_version('Clapper', '0.0')
gi.require_version('ClapperGtk', '0.0')
gi.require_version('Gtk', '4.0')
from gi.repository import Adw, Clapper, ClapperGtk, Gtk
Clapper.init(None)
def on_toggle_fullscreen(video, win):
# Since this example uses only video inside normal window, all we
# need to toggle fullscreen is to invert its fullscreened property
win.props.fullscreened ^= True
def on_activate(app):
win = Gtk.ApplicationWindow(application=app, default_width=640, default_height=396)
video = ClapperGtk.Video()
controls = ClapperGtk.SimpleControls()
# This signal will be emitted when user requests fullscreen state change.
# It is app job to fullscreen video only (which might require something
# more than simply inverting fullscreen on the whole window).
video.connect('toggle-fullscreen', on_toggle_fullscreen, win)
# Create and add media for playback. First added media item to empty
# playback queue will be automatically selected.
item = Clapper.MediaItem(uri='http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4')
video.props.player.props.queue.add_item(item)
# Assemble window
video.add_fading_overlay(controls)
win.set_child(video)
win.present()
# Start playback
video.props.player.play()
# Create a new application
app = Adw.Application(application_id='com.example.ClapperSimple')
app.connect('activate', on_activate)
# Run the application
app.run(None)

View File

@@ -1,5 +1,5 @@
project('clapper', 'c',
version: '0.5.2',
version: '0.9.1',
meson_version: '>= 0.64.0',
license: 'LGPL-2.1-or-later AND GPL-3.0-or-later', # LGPL-2.1+ for libs and gst-plugin, GPL-3.0+ for app
default_options: [
@@ -9,9 +9,9 @@ project('clapper', 'c',
)
glib_req = '>= 2.76.0'
gst_req = '>= 1.20.0'
gst_req = '>= 1.24.0'
gtk4_req = '>= 4.10.0'
adw_req = '>= 1.4.0'
adw_req = '>= 1.5.0'
clapper_version = meson.project_version().split('-')[0]
version_array = clapper_version.split('.')
@@ -19,6 +19,8 @@ clapper_version_suffix = '-' + version_array[0] + '.0'
clapper_api_name = meson.project_name() + clapper_version_suffix
devenv = environment()
gnome = import('gnome')
pkgconfig = import('pkgconfig')
i18n = import('i18n')
@@ -83,6 +85,17 @@ libadwaita_dep = dependency('libadwaita-1',
required: false,
)
# Optional
peas_dep = dependency('libpeas-2',
required: false,
)
cgraph_dep = dependency('libcgraph',
required: false,
)
gvc_dep = dependency('libgvc',
required: false,
)
cc = meson.get_compiler('c')
libm = cc.find_library('m', required: false)
@@ -123,6 +136,9 @@ endif
subdir('src')
subdir('doc')
subdir('pkgs')
meson.add_devenv(devenv)
summary({
'prefix': prefix,
@@ -142,6 +158,16 @@ summary('introspection', build_gir ? 'Yes' : 'No', section: 'Build')
summary('vapi', build_vapi ? 'Yes' : 'No', section: 'Build')
summary('doc', build_doc ? 'Yes' : 'No', section: 'Build')
foreach name : clapper_possible_features
summary(name, clapper_available_features.contains(name) ? 'Yes' : 'No', section: 'Features')
endforeach
if build_clapper
foreach name : clapper_possible_functionalities
summary(name, clapper_available_functionalities.contains(name) ? 'Yes' : 'No', section: 'Functionalities')
endforeach
foreach name : clapper_possible_features
summary(name, clapper_available_features.contains(name) ? 'Yes' : 'No', section: 'Features')
endforeach
endif
if build_clapperapp
foreach name : clapperapp_possible_functionalities
summary(name, clapperapp_available_functionalities.contains(name) ? 'Yes' : 'No', section: 'Functionalities')
endforeach
endif

View File

@@ -35,6 +35,18 @@ option('doc',
description: 'Build documentation'
)
# Functionalities
option('enhancers-loader',
type: 'feature',
value: 'enabled',
description: 'Ability to load libpeas based plugins that enhance capabilities'
)
option('pipeline-preview',
type: 'feature',
value: 'auto',
description: 'Ability to preview GStreamer pipeline in clapper-app'
)
# Features
option('discoverer',
type: 'feature',

View File

@@ -4,19 +4,26 @@
"runtime-version": "master",
"sdk": "org.gnome.Sdk",
"sdk-extensions": [
"org.freedesktop.Sdk.Extension.rust-nightly",
"org.freedesktop.Sdk.Extension.llvm16"
"org.freedesktop.Sdk.Extension.rust-stable",
"org.freedesktop.Sdk.Extension.llvm18"
],
"add-extensions": {
"org.freedesktop.Platform.ffmpeg-full": {
"version": "23.08",
"version": "24.08",
"directory": "lib/ffmpeg",
"add-ld-path": ".",
"no-autodownload": false,
"autodelete": false
},
"com.github.rafostar.Clapper.Enhancers": {
"versions": "stable;test;master",
"directory": "extensions/clapper/enhancers",
"add-ld-path": "lib",
"no-autodownload": false,
"autodelete": false
}
},
"command": "com.github.rafostar.Clapper",
"command": "clapper",
"separate-locales": false,
"finish-args": [
"--share=ipc",
@@ -29,26 +36,37 @@
"--filesystem=xdg-run/pipewire-0:ro",
"--filesystem=xdg-videos",
"--filesystem=xdg-run/gvfsd",
"--own-name=org.mpris.MediaPlayer2.Clapper",
"--own-name=org.mpris.MediaPlayer2.Clapper.*",
"--talk-name=org.gtk.vfs.*",
"--env=GST_PLUGIN_SYSTEM_PATH=/app/lib/gstreamer-1.0"
"--env=GST_PLUGIN_SYSTEM_PATH=/app/lib/gstreamer-1.0",
"--env=CLAPPER_ENHANCERS_PATH=/app/extensions/clapper/enhancers/plugins",
"--env=PYTHONPATH=/app/extensions/clapper/enhancers/python/site-packages"
],
"build-options": {
"append-path": "/usr/lib/sdk/rust-nightly/bin:/usr/lib/sdk/llvm16/bin",
"prepend-ld-library-path": "/usr/lib/sdk/llvm16/lib"
"append-path": "/usr/lib/sdk/rust-stable/bin:/usr/lib/sdk/llvm18/bin",
"prepend-ld-library-path": "/usr/lib/sdk/llvm18/lib",
"env": {
"CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER": "clang",
"CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS": "-C link-arg=-fuse-ld=/usr/lib/sdk/rust-stable/bin/mold",
"CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER": "clang",
"CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS": "-C link-arg=-fuse-ld=/usr/lib/sdk/rust-stable/bin/mold"
}
},
"modules": [
"flathub/shared-modules/gudev/gudev.json",
"testing/liba52.json",
"flathub/lib/liba52.json",
"flathub/lib/libmpeg2.json",
"flathub/lib/libdv.json",
"flathub/lib/libdvdcss.json",
"flathub/lib/libdvdread.json",
"flathub/lib/libdvdnav.json",
"flathub/lib/libass.json",
"flathub/lib/libmicrodns.json",
"flathub/lib/libpeas.json",
"testing/dav1d.json",
"testing/gstreamer.json",
"testing/gst-plugins-rs.json",
"testing/gtuber.json",
"testing/graphviz.json",
{
"name": "clapper",
"buildsystem": "meson",
@@ -62,6 +80,7 @@
],
"cleanup-commands": [
"mkdir -p /app/lib/ffmpeg",
"mkdir -p /app/extensions/clapper/enhancers",
"ln -s /lib/$FLATPAK_ARCH-linux-*/gstreamer-1.0/libgstpipewire.so /app/lib/gstreamer-1.0/"
]
}

View File

@@ -1,15 +1,22 @@
{
"app-id": "com.github.rafostar.Clapper",
"runtime": "org.gnome.Platform",
"runtime-version": "45",
"runtime-version": "47",
"sdk": "org.gnome.Sdk",
"add-extensions": {
"org.freedesktop.Platform.ffmpeg-full": {
"version": "23.08",
"version": "24.08",
"directory": "lib/ffmpeg",
"add-ld-path": ".",
"no-autodownload": false,
"autodelete": false
},
"com.github.rafostar.Clapper.Enhancers": {
"versions": "stable;test;master",
"directory": "extensions/clapper/enhancers",
"add-ld-path": "lib",
"no-autodownload": false,
"autodelete": false
}
},
"command": "clapper",
@@ -25,13 +32,15 @@
"--filesystem=xdg-run/pipewire-0:ro",
"--filesystem=xdg-videos",
"--filesystem=xdg-run/gvfsd",
"--own-name=org.mpris.MediaPlayer2.Clapper",
"--own-name=org.mpris.MediaPlayer2.Clapper.*",
"--talk-name=org.gtk.vfs.*",
"--env=GST_PLUGIN_SYSTEM_PATH=/app/lib/gstreamer-1.0"
"--env=GST_PLUGIN_SYSTEM_PATH=/app/lib/gstreamer-1.0",
"--env=CLAPPER_ENHANCERS_PATH=/app/extensions/clapper/enhancers/plugins",
"--env=PYTHONPATH=/app/extensions/clapper/enhancers/python/site-packages"
],
"modules": [
"flathub/shared-modules/gudev/gudev.json",
"testing/liba52.json",
"flathub/lib/liba52.json",
"flathub/lib/libmpeg2.json",
"flathub/lib/libdv.json",
"flathub/lib/libdvdcss.json",
@@ -39,15 +48,13 @@
"flathub/lib/libdvdnav.json",
"flathub/lib/libass.json",
"flathub/lib/uchardet.json",
"testing/libmicrodns.json",
"flathub/lib/libmicrodns.json",
"flathub/lib/libpeas.json",
"flathub/gstreamer-1.0/gstreamer.json",
"testing/gtuber.json",
"testing/graphviz.json",
{
"name": "clapper",
"buildsystem": "meson",
"config-opts": [
"-Dc_args=\"-DHAVE_GST_PATCHES=1\""
],
"sources": [
{
"type": "dir",
@@ -58,6 +65,7 @@
],
"cleanup-commands": [
"mkdir -p /app/lib/ffmpeg",
"mkdir -p /app/extensions/clapper/enhancers",
"ln -s /lib/$FLATPAK_ARCH-linux-*/gstreamer-1.0/libgstpipewire.so /app/lib/gstreamer-1.0/"
]
}

View File

@@ -1,23 +0,0 @@
--- ./configure~ 2002-07-28 06:50:42.000000000 +0300
+++ ./configure 2003-04-13 17:20:53.000000000 +0300
@@ -5366,13 +5366,13 @@
case "$host" in
i?86-* | k?-*)
- case "$host" in
- i386-*) TRY_CFLAGS="$OPT_CFLAGS -mcpu=i386";;
- i486-*) TRY_CFLAGS="$OPT_CFLAGS -mcpu=i486";;
- i586-*) TRY_CFLAGS="$OPT_CFLAGS -mcpu=pentium";;
- i686-*) TRY_CFLAGS="$OPT_CFLAGS -mcpu=pentiumpro";;
- k6-*) TRY_CFLAGS="$OPT_CFLAGS -mcpu=k6";;
- esac
+# case "$host" in
+# i386-*) TRY_CFLAGS="$OPT_CFLAGS -mcpu=i386";;
+# i486-*) TRY_CFLAGS="$OPT_CFLAGS -mcpu=i486";;
+# i586-*) TRY_CFLAGS="$OPT_CFLAGS -mcpu=pentium";;
+# i686-*) TRY_CFLAGS="$OPT_CFLAGS -mcpu=pentiumpro";;
+# k6-*) TRY_CFLAGS="$OPT_CFLAGS -mcpu=k6";;
+# esac
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC supports $TRY_CFLAGS $CFLAGS flags" >&5
printf %s "checking if $CC supports $TRY_CFLAGS $CFLAGS flags... " >&6; }
SAVE_CFLAGS="$CFLAGS"

View File

@@ -0,0 +1,25 @@
{
"name": "dav1d",
"buildsystem": "meson",
"only-arches": [
"x86_64"
],
"config-opts": [
"-Denable_tools=false",
"-Denable_examples=false",
"-Denable_tests=false",
"-Denable_docs=false",
"-Dlogging=false"
],
"cleanup": [
"/include",
"/lib/pkgconfig"
],
"sources": [
{
"type": "git",
"url": "https://code.videolan.org/videolan/dav1d.git",
"branch": "master"
}
]
}

View File

@@ -0,0 +1,38 @@
{
"name": "graphviz",
"buildsystem": "autotools",
"config-opts": [
"--without-x",
"--without-gtk",
"--without-gtkgl",
"--without-gtkglext",
"--without-gdk",
"--without-gdk-pixbuf",
"--without-qt",
"--disable-static",
"--disable-sharp",
"--disable-go",
"--disable-guile",
"--disable-java",
"--disable-javascript",
"--disable-lua",
"--disable-perl",
"--disable-php",
"--disable-python",
"--disable-r",
"--disable-ruby",
"--disable-tcl"
],
"cleanup": [
"/bin",
"/share/man",
"/share/graphviz"
],
"sources": [
{
"type": "archive",
"url": "https://gitlab.com/api/v4/projects/4207231/packages/generic/graphviz-releases/12.2.1/graphviz-12.2.1.tar.gz",
"sha256": "242bc18942eebda6db4039f108f387ec97856fc91ba47f21e89341c34b554df8"
}
]
}

View File

@@ -1,20 +0,0 @@
{
"name": "gtuber",
"buildsystem": "meson",
"config-opts": [
"-Dintrospection=disabled",
"-Dvapi=disabled",
"-Dgst-gtuber=enabled"
],
"cleanup": [
"/include",
"/lib/pkgconfig"
],
"sources": [
{
"type": "git",
"url": "https://github.com/Rafostar/gtuber.git",
"branch": "main"
}
]
}

View File

@@ -1,24 +0,0 @@
{
"name": "liba52",
"config-opts": [ "--enable-shared", "--disable-static" ],
"rm-configure": true,
"cleanup": [ "/bin/*a52*" ],
"sources": [
{
"type": "archive",
"url": "https://distfiles.adelielinux.org/source/a52dec/a52dec-0.8.0.tar.gz",
"sha256": "03c181ce9c3fe0d2f5130de18dab9bd8bc63c354071515aa56983c74a9cffcc9"
},
{
"type": "patch",
"path": "a52dec-configure-optflags.patch"
},
{
"type": "script",
"commands": [
"autoreconf -fiv"
],
"dest-filename": "autogen.sh"
}
]
}

View File

@@ -1,21 +0,0 @@
{
"name": "libmicrodns",
"buildsystem": "meson",
"config-opts": [
"--buildtype=release",
"-Dtests=disabled",
"-Dexamples=disabled"
],
"cleanup": [
"/include",
"/lib/pkgconfig"
],
"sources": [
{
"type": "git",
"url": "https://github.com/videolabs/libmicrodns.git",
"tag": "0.2.0",
"commit": "deb7ed7bf05dc26802a0ca1987049b31405b8930"
}
]
}

View File

@@ -0,0 +1,21 @@
{
"name": "libpeas",
"buildsystem": "meson",
"config-opts": [
"--wrap-mode=nodownload",
"-Dgjs=false",
"-Dlua51=false",
"-Dintrospection=false"
],
"sources": [
{
"type": "archive",
"url": "https://download.gnome.org/sources/libpeas/2.0/libpeas-2.0.5.tar.xz",
"sha256": "376f2f73d731b54e13ddbab1d91b6382cf6a980524def44df62add15489de6dd",
"x-checker-data": {
"type": "gnome",
"name": "libpeas"
}
}
]
}

5
pkgs/meson.build Normal file
View File

@@ -0,0 +1,5 @@
is_windows = ['windows'].contains(host_machine.system())
if is_windows
subdir('windows-installer')
endif

View File

@@ -0,0 +1,31 @@
[Setup]
AppName=Clapper
AppVersion=@CLAPPER_APP_VERSION@
AppVerName=Clapper @CLAPPER_APP_VERSION@
VersionInfoVersion=@CLAPPER_APP_VERSION@.0
ArchitecturesAllowed=x64compatible
ArchitecturesInstallIn64BitMode=x64compatible
WizardStyle=modern
DefaultDirName={autopf}\Clapper
DefaultGroupName=Clapper
DisableProgramGroupPage=yes
ChangesAssociations=yes
Compression=lzma2
SolidCompression=yes
OutputDir=InstallerOutput
OutputBaseFilename=Clapper_@CLAPPER_APP_VERSION@
SetupIconFile=@PROJECT_ROOT@\src\bin\clapper-app\windows\clapper.ico
LicenseFile=@PROJECT_ROOT@\COPYING-GPL
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "@CLAPPER_APP_DEST@\*"; DestDir: "{app}"; Flags: recursesubdirs replacesameversion
[Icons]
Name: "{autoprograms}\Clapper"; Filename: "{app}\bin\clapper.exe"
Name: "{autodesktop}\Clapper"; Filename: "{app}\bin\clapper.exe"; Tasks: desktopicon
[Registry]
@CLAPPER_APP_REG_ENTRIES@

View File

@@ -0,0 +1,44 @@
# Same as "clapper-app-utils.c"
# FIXME: Have these in one place only
win_extensions = [
'avi', 'claps', 'm2ts', 'mkv', 'mov',
'mp4', 'webm', 'wmv'
]
reg_entries = []
foreach ext : win_extensions
ext_id = 'Clapper.' + ext
exe_path = '{app}\\bin\\clapper.exe'
subkey = 'Software\\Classes\\.' + ext + '\\OpenWithProgids'
reg_entries += 'Root: HKA; Subkey: "@0@"; ValueType: string; ValueName: "@1@"; ValueData: ""; Flags: uninsdeletevalue'.format(subkey, ext_id)
subkey = 'Software\\Classes\\' + ext_id
reg_entries += 'Root: HKA; Subkey: "@0@"; ValueType: string; ValueName: ""; ValueData: "@1@"; Flags: uninsdeletekey'.format(subkey, ext)
subkey = 'Software\\Classes\\' + ext_id + '\\DefaultIcon'
reg_entries += 'Root: HKA; Subkey: "@0@"; ValueType: string; ValueName: ""; ValueData: "@1@,0"'.format(subkey, exe_path)
subkey = 'Software\\Classes\\' + ext_id + '\\shell\\open\\command'
reg_entries += 'Root: HKA; Subkey: "@0@"; ValueType: string; ValueName: ""; ValueData: """@1@"" ""%1"""'.format(subkey, exe_path)
reg_entries += '' # Empty line for clarity
endforeach
# NOTE: In meson replacing "@@" vars after "\" sign does not work.
# For this reason we do not pass app name here.
iss_conf = configuration_data()
iss_conf.set('CLAPPER_APP_VERSION', meson.project_version())
iss_conf.set('CLAPPER_APP_REG_ENTRIES', '\n'.join(reg_entries))
iss_conf.set('PROJECT_ROOT', meson.project_source_root())
# NOTE: We also need to package other dependencies, hence using whole prefix.
# Workaround to reduce package size is to set prefix to some custom dir, install,
# then determine the rest with "ldd" and copy remaining files manually there.
iss_conf.set('CLAPPER_APP_DEST', prefix.replace('/', '\\'))
configure_file(
input: 'clapper.iss.in',
output: 'clapper.iss',
configuration: iss_conf,
)

View File

@@ -1 +0,0 @@
ar ast ca cs de es eu fa fi fr he hr hu it ja lt nl pl pt pt_BR ru sk sv tr zh_CN

View File

@@ -1,10 +0,0 @@
ui/clapper.ui
ui/elapsed-time-button.ui
ui/help-overlay.ui
ui/preferences-plugin-ranking-subpage.ui
ui/preferences-window.ui
src/buttons.js
src/dialogs.js
src/revealers.js
src/widget.js

438
po/af.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Afrikaans\n"
"Language: af_ZA\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: af\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:97
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:107
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:153
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:157
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:168
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr ""
#: src/widget.js:242
msgid "Channels"
msgstr ""
#: src/widget.js:260
msgid "Disabled"
msgstr ""

438
po/ar.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Arabic\n"
"Language: ar_SA\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: ar\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "فتح الملفات…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "فتح عنوان URL…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "الإعدادات"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "الاختصارات"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "حول Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "السرعة"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "عادي"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "عام"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "إظهار الاختصارات"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "تبديل ملء الشاشة"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "نقرة مزدوجة"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "مغادرة ملء الشاشة"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "إظهار المعلومات (ملء الشاشة فقط)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "نقرة"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "خروج"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "الوسائط"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "افتح ملفًا"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "فتح عنوان URL"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "قوائم التشغيل"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "المحتوى التالي"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "نقر مزدوج (الجانب الأيمن)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "المحتوى السابق"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "نقر مزدوج (الجانب الأيسر)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "تغيير وضع التكرار"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "التصدير إلى مِلَفّ"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "المشغل"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "بَدْءّ / إيقاف"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "اضغط مطولاً | انقر بزر الفائرة الأيمن"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "التقدم للأمام"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "مرر لليمين"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "الرجوع للوراء"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "مرر لليسار"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "رفع مستوى الصوت"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "مرر لأعلى"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "خفض مستوى الصوت"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "مرر لأسفل"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "كتم الصوت"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "الفصل التالي"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "الفصل السابق"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "برامج فك التشفير"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "العودة إلى الإعدادات"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "السلوك"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "ملء الشاشة تلقائياً"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "أدخل ملء الشاشة عند استبدال قائمة التشغيل باستثناء الوضع العائم"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "اطلب استئناف الوسائط السابقة"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "عائم في جميع مساحات العمل"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "هذا الخِيار يعمل فقط على GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "بعد انتهاء"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "لا تفعل شيئًا"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "تجميد الأخر لقطة"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "أغلق التطبيق"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "الصوت"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "قيمة الافتراضية مخصصة"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "تعيين مستوى صوت مخصص عند بَدْء التشغيل بدلاً من إعادته"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "حجم الصوت"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "الوضع"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "النمط"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "دَقيق"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "سريع"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "الوحدة"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "ثواني"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "دقائق"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "النسبة المئوية"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "القيمة"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "الصوت"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "إزاحة بالمللي ثانية"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "تنسيقات الصوت الأصلية فقط"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "التَّرْجَمَةً"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "الخط الافتراضي"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "الشبكة"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "العميل"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "التخزين المؤقت للتنزيل بالتدريج"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "الخادم"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "التحكم بالوسائط عن بعد"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "منفذ الاستماع"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "تعديلات"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "إعدادات المظهر"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "المظهر الداكن"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "عرض ظلال النافذة"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "تعطيل لزيادة الأداء عند وضع النافذة"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "أعدادات الإضافات"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "تغيير الأعدادات الافتراضية للأضافات GStreamer"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "استخدام playbin3"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "يتطلب إعادة التشغيل"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "تجريبية"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "استخدام PipeWire لإخراج الصوت"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "فك التشفير: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "أدخل أو الصق URI هنا"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "إلغاء"
#: src/dialogs.js:158
msgid "Open"
msgstr "فتح"
#: src/dialogs.js:226
msgid "Title"
msgstr "العنوان"
#: src/dialogs.js:227
msgid "Completed"
msgstr "تم مشاهدة"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "استئناف التشغيل؟"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "إصدار GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "إصدار Adwaita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "إصدار GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "إصدار GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "مشغل وسائط GNOME مدعوم من GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Yousef Fawaz"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "ينتهي في: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "غير محدّد"
#: src/widget.js:242
msgid "Channels"
msgstr "قنوات"
#: src/widget.js:260
msgid "Disabled"
msgstr "مُعطّل"

438
po/ast.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-06-26 22:43\n"
"Last-Translator: \n"
"Language-Team: Asturian\n"
"Language: ast_ES\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: ast\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Abrir ficheros…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Abrir un URI…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Preferencies"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Atayos"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Tocante a Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Velocidá"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normal"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Xenerales"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Amosar los atayos"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Colar"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Llista de reproducción"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Esta opción namái funciona en GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Zarrar laplicación"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Volume"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Porcentaxe de volume"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Mou"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Segundu"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Minutu"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Porcentaxe"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Audio"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Sotítulos"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Rede"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Veceru"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Sirvidor"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Tema escuru"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Encaboxar"
#: src/dialogs.js:158
msgid "Open"
msgstr "Abrir"
#: src/dialogs.js:226
msgid "Title"
msgstr "Títulu"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Completáu al"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "¿Quies siguir cola reproducción?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Versión de GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Versión dAdwaita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Versión de GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Versión de GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Adolfo Jayme Barrientos <fitojb@ubuntu.com>, 2022"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr ""
#: src/widget.js:242
msgid "Channels"
msgstr ""
#: src/widget.js:260
msgid "Disabled"
msgstr ""

438
po/ca.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Catalan\n"
"Language: ca_ES\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: ca\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Obre fitxers…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Obre l'URI…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Preferències"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Dreceres"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Quant al Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Velocitat"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normal"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "General"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Mostra les dreceres"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Commuta la pantalla completa"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Prem dues vegades | Doble clic"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Surt de la pantalla completa"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Mostra l'OSD (només pantalla completa)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Toca"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Surt"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Mèdia"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Obre fitxers"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Obre l'URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Llista de reproducció"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Element següent"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Prem dues vegades (part dreta)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Element anterior"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Prem dues vegades (part esquerra)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Canvia el mode de repetició"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Exporta a un fitxer"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Reproducció"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Commuta la reproducció"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Prem llarga | Clic dret"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Avança"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Llisca el dit a la dreta | Desplaça a la dreta"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Retrocedeix"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Llisca el dit a l'esquerra | Desplaça a l'esquerra"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Apuja el volum"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Llisca el dit cap amunt | Desplaça amunt"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Baixa el volum"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Llisca el dit cap avall | Desplaça cap avall"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Commuta el silenci"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Capítol següent"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Capítol anterior"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Descodificadors"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Torna a les preferències"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Comportament"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Pantalla completa automàtica"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Entra a pantalla completa quan se substitueix la llista de reproducció excepte el mode flotant"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Pregunta per reprendre recents"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Flota en tots els espais de treball"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Aquesta opció només funciona amb el GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Després de la reproducció"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "No facis res"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Congela l'últim fotograma"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Surt de l'aplicació"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Volum"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Valor inicial personalitzat"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Estableix el volum personalitzat a l'inici en lloc de restaurar-lo"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Percentatge de volum"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Cerca"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Mode"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Acurat"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Ràpid"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Unitat"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Segon"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Minut"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Percentatge"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Valor"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Àudio"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Desplaçament en mil·lisegons"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Només formats d'àudio natius"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Subtítols"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Tipus de lletra per defecte"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Xarxa"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Client"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Memòria intermèdia de baixada progressiva"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Servidor"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Controla el reproductor remotament"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Port d'escolta"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Ajustaments"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Aparença"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Tema fosc"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Renderitza les ombres de la finestra"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Inhabilita per augmentar el rendiment en mode finestra"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Classificació dels connectors"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Altera els rangs predeterminats dels connectors del GStreamer"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "Usa playbin3"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Requereix reiniciar el reproductor"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Experimental"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "Usa PipeWire per la sortida d'àudio"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Descodificador: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Escriu o deixa anar una URI aquí"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Cancel·la"
#: src/dialogs.js:158
msgid "Open"
msgstr "Obre"
#: src/dialogs.js:226
msgid "Title"
msgstr "Títol"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Completat"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Reprèn la reproducció?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Versió del GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Versió del Adwaita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Versió del GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Versió del GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Un reproductor multimèdia del GNOME que usa GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Ícar Nin Solana <icar.nin@protonmail.com>, 2021"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Acaba a la/les %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Sense determinar"
#: src/widget.js:242
msgid "Channels"
msgstr "Canals"
#: src/widget.js:260
msgid "Disabled"
msgstr "Deshabilitat"

View File

@@ -1,437 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the com.github.rafostar.Clapper package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: com.github.rafostar.Clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:97
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:107
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:153
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:157
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:168
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr ""
#: src/widget.js:242
msgid "Channels"
msgstr ""
#: src/widget.js:260
msgid "Disabled"
msgstr ""

438
po/cs.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Czech\n"
"Language: cs_CZ\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: cs\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Otevřít soubory…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Otevřít URI…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Předvolby"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Klávesové zkratky"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "O aplikaci Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Rychlost"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normální"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Obecné"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Zobrazit klávesové zkratky"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Celá obrazovka"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Dvojitým poklepáním | Dvojitým kliknutím"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Opustit režim celé obrazovky"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Odhalit OSD (pouze při zobrazení na celou obrazovku)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Klepnutím"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Ukončit"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Média"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Otevřít soubory"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Otevřít URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Playlisty"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Další položka"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Dvojité poklepání (pravá strana)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Předchozí položka"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Dvojité poklepání (levá strana)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Změnit režim opakování"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Exportovat do souboru"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Přehrávání"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Přepnout přehrávání"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Dlouhým stisknutím | Klepnutím pravým tlačítkem"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Přetočit vpřed"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Přejetím vpravo | Scrollováním vpravo"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Přetočit zpět"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Přejetím vlevo | Scrollováním vlevo"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Zesílit"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Přejetím nahoru | Scrollováním nahoru"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Zeslabit"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Přejetím dolů | Scrollováním dolů"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Vypnout/zapnout zvuk"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Další kapitola"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Předchozí kapitola"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Dekodéry"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Zpět do předvoleb"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Chování"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Automaticky na celou obrazovku"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Přejít do režimu na celou obrazovku při nahrazení seznamu skladeb s výjimkou plovoucího režimu"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Zeptat se na obnovení nedávných médií"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Plovoucí režim na všech pracovních plochách"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Tato možnost funguje pouze na GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Po skončení přehrávání"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Nedělat nic"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Zůstat na posledním snímku"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Zavřít aplikaci"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Hlasitost"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Vlastní počáteční hodnota"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Nastavit vlastní hlasitost při spuštění namísto obnovení předchozí hodnoty"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Procento hlasitosti"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Přetáčení"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Režim"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Přesný"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Rychlý"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Jednotka"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Sekundy"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Minuty"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Procenta"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Hodnota"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Zvuk"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Posunutí v milisekundách"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Pouze nativní formáty zvuku"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Titulky"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Výchozí styl písma"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Síť"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Klient"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Postupné stahování do vyrovnávací paměti"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Server"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Vzdáleně ovládat přehrávač"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Naslouchat na portu"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Vylepšení"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Vzhled"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Tmavý motiv"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Vykreslovat stíny okna"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Zakázat pro zvýšení výkonu"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Pořadí pluginů"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Změna výchozího pořadí zásuvných modulů GStreameru"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "Použít playbin3"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Vyžaduje restart přehrávače"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Experimentální"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "Použít PipeWire pro zvukový výstup"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Dekodér: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Zde zadejte nebo přetáhněte URI"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Zrušit"
#: src/dialogs.js:158
msgid "Open"
msgstr "Otevřít"
#: src/dialogs.js:226
msgid "Title"
msgstr "Název"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Přehráno"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Pokračovat v přehrávání?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Verze GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Verze Adwaita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Verze GStreameru: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Verze GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Přehrávač médií pro GNOME postavený na GStreameru"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Vojtěch Perník <translations@pervoj.cz>"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Končí v: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Neurčeno"
#: src/widget.js:242
msgid "Channels"
msgstr "Kanály"
#: src/widget.js:260
msgid "Disabled"
msgstr "Vypnuto"

438
po/da.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Danish\n"
"Language: da_DK\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: da\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:97
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:107
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:153
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:157
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:168
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr ""
#: src/widget.js:242
msgid "Channels"
msgstr ""
#: src/widget.js:260
msgid "Disabled"
msgstr ""

438
po/de.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-06-24 17:27\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Language: de_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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: de\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Dateien öffnen…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Webquelle öffnen…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Einstellungen"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Tastenkombinationen"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Über Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Wiedergabegeschwindigkeit"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normal"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Allgemein"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Tastenkombinationen zeigen"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "In Vollbildmodus wechseln"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Doppelt tippen bzw. klicken"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Vollbildmodus beenden"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "OSD zeigen (nur im Vollbildmodus)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Tippen"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Clapper beenden"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Medien"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Dateien öffnen"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Webquelle öffnen"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Wiedergabeliste"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Nächster Titel"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Doppelt auf der rechten Seite tippen"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Vorheriger Titel"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Doppelt auf der linken Seite tippen"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Wiederholmodus ändern"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Als Datei exportieren"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Wiedergabe"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Wiedergabe umschalten"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Lange Bildschirm berühren oder Rechtsklick"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Vorwärts springen"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Nach rechts wischen bzw. scrollen"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Rückwärts springen"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Nach links wischen bzw. scrollen"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Lautstärke erhöhen"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Nach oben wischen bzw. scrollen"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Lautstärke verringern"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Nach unten wischen bzw. scrollen"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Stummschaltung umschalten"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Nächstes Kapitel"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Vorheriges Kapitel"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Decodierer"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Zurück zu den Einstellungen"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Verhalten"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Automatischer Vollbildmodus"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Vollbildmodus betreten, wenn Wiedergabeliste ersetzt wird. (Außer Clapper befindet sich im Schwebemodus)"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Nachfragen ob kürzlich wiedergegebene Medien weitergespielt werden sollen"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Schwebemodus auf allen Arbeitsflächen"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Diese Option funktioniert nur auf GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Nach Wiedergabe"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Nichts tun"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Letztes Bild einfrieren"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Anwendung beenden"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Lautstärke"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Benutzerdefinierter Anfangswert"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Lautstärke auf einen fixierten Wert beim Start setzen, anstelle ihn wiederherzustellen."
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Lautstärke (in Prozent)"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Springen"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Modus"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Genau"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Schnell"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Einheit"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Sekunden"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Minuten"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Prozentsatz"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Wert"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Audio"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Verschiebung in Millisekunden"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Nur systemeigene Audioformate"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Untertitel"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Standartschriftart"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Netzwerk"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Client"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Fortschreitender Download-Puffer"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Server"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Clapper fernsteuern"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Empfangsport"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Optimierungen"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Erscheinungsbild"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Dunkler Modus"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Fensterschatten darstellen"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Deaktivieren, um Performance im Fenstermodus zu verbessern"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Plugin-Reihenfolge"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Standard GStreamer Reihenfolge verändern"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "Playbin3 benutzen"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Benötigt Neustart von Clapper"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Experimentell"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "PipeWire für Audioausgabe verwenden"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Decodierer: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "URI hier einfügen"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Abbrechen"
#: src/dialogs.js:158
msgid "Open"
msgstr "Öffnen"
#: src/dialogs.js:226
msgid "Title"
msgstr "Titel"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Abgespielt"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Wiedergabe fortfahren?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "GTK Version: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Adwaita Version: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "GStreamer Version: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "GJS Version: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Ein von GStreamer betriebener GNOME Multimedia-Player"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Florian \"sp1rit\" <sp1rit@disroot.org>"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Ended um %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Unbestimmet"
#: src/widget.js:242
msgid "Channels"
msgstr "Audio-Kanäle"
#: src/widget.js:260
msgid "Disabled"
msgstr "Deaktiviert"

438
po/el.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Greek\n"
"Language: el_GR\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: el\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:97
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:107
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:153
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:157
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:168
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr ""
#: src/widget.js:242
msgid "Channels"
msgstr ""
#: src/widget.js:260
msgid "Disabled"
msgstr ""

438
po/es.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
"Language: es_ES\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Abrir archivos…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Abrir URI…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Preferencias"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Atajos"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Acerca de Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Velocidad"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normal"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "General"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Mostrar atajos"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Fijar a pantalla completa"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Doble toque | Doble clic "
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Salir de pantalla completa"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Revelar OSD (solo pantalla completa)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Tocar"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Renunciar"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Media"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Abrir archivos"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Abrir URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Lista de reproducción"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Elemento siguiente"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Tocar doble (lado derecho)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Elemento anterior"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Tocar doble (lado izquierdo)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Cambiar a modo repetir"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Exportar a archivo"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Reproducir"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Fijar a reproducir"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Pulsación larga | Clic derecho"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Buscar siguiente"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Deslizar a derecha | Desplazar a derecha"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Buscar anterior"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Deslizar a izquierda | Desplazar a izquierda"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Volumen +"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Deslizar + | Desplazar +"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Volumen -"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Deslizar - | Desplazar -"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Fijar a mudo"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Capítulo siguiente"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Capítulo anterior"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Decodificadores"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Regresar a preferencias"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Configuraciones"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Pantalla completa automática"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Entra a pantalla completa cuando se reemplaza la lista de reproducción, excepto en modo flotante"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Preguntar al reanudar los medios recientes"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Flotar todos los espacios de trabajo"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Esta opción solo funciona en GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Después de reproducción "
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Nada por hacer"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Detener último fotograma"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Cerrar la aplicación"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Volumen"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Valor inicial personalizado"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Establece un volumen personalizado al inicio en lugar de restaurarlo"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Porcentaje de volumen"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Buscando"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Modo"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Precisión"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Rápido"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Unidad"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Segundo"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Minuto"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Porcentaje"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Valor"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Audio"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Compensación en milisegundos"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Solo formatos de audio nativos"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Subtítulos"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Fuente por defecto"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Red"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Cliente"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Bajada progresiva de búfer"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Servidor"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Controlar el reproductor remotamente"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Puerto de escucha"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Retoques"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Apariencia"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Tema oscuro"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Renderizar sombras de ventana"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Deshabilitado aumenta el rendimiento cuando se abre en ventana"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Rango de enchufes"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Altera los rangos predeterminados de los enchufes de GStreamer"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "Usar Playbin3"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Require reiniciar el reproductor"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Experimental"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "Usar PipeWire"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Decodificador: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Introducir la URI"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Cancelar"
#: src/dialogs.js:158
msgid "Open"
msgstr "Abrir"
#: src/dialogs.js:226
msgid "Title"
msgstr "Título"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Completado"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Resumir el reproductor?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Versión GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Versión LibAdwaita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Versión GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Versión GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Un reproductor multimedia de GNOME impulsado por GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "carlosgonz"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Termina en: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Indeterminado"
#: src/widget.js:242
msgid "Channels"
msgstr "Canales"
#: src/widget.js:260
msgid "Disabled"
msgstr "Deshabilitar"

438
po/eu.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Basque\n"
"Language: eu_ES\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: eu\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Artxiboak ireki…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Ireki URI…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Hobespenak"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Lasterbideak"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Clapperi buruz"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Abiadura"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normala"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Orokorra"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Erakutsi lasterbideak"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Aktibatu pantaila osoa"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Ukitu bikoitza / Bikoitza klik"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Pantaila osoa utzi"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "OSD errebelatu (pantaila osoan bakarrik)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Ukitu"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Irten"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Media"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Artxiboak ireki"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Ireki URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Erreprodukzio-zerrenda"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Hurrengo elementua"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Ukitu bikoitza (eskuineko aldea)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Aurreko elementua"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Ukitu bikoitza (ezkerreko aldea)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Errepikapen modua aldatu"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Esportatu fitxategira"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Erreprodukzioa"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Erreprodukzioa aktibatu"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Pultsazio luzea / Eskuineko klik"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Aurrerapena bilatu"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Eskuinera irristatu / Eskuinera joan"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Atzerantz bilatu"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Ezkerrera irristatu / Ezkerrera mugitu"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Bolumena igo"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Gorantz irristatu / Gorantz mugitu"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Bolumena jeitsi"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Beherantz irristatu / Beherantz mugitu"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Aktibatu isiltasuna"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Hurrengo kapitulua"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Aurreko kapitulua"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Deskodetzaileak"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Itzuli ezarpenetara"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Portaera"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Pantaila osoa automatikoa"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Pantaila osoan sartu erreprodukzio-zerrenda ordezten denean, flotatzeko modua izan ezik"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Azkenaldiko media berriro ekiteko eskatzea"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Laneko espazio guztietan flotatzea"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Aukera honek GNOMEn bakarrik funtzionatzen du"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Erreprodukzioaren ondoren"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Ez egin ezer"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Izoztu azken fotograma"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Aplikazioa itxi"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Bolumena"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Hasierako balio pertsonalizatua"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Hasieran bolumen pertsonalizatua ezartzea, lehengoratu beharrean"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Bolumenaren ehunekoa"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Bilaketa"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Modua"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Zehatza"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Azkarra"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Unitatea"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Segundu"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Minutu"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Ehunekoa"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Balioa"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Audioa"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Desplazamendua milisegundotan"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Jatorrizko audio-formatuak bakarrik"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Azpitituluak"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Hizki lehenetsia"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Sarea"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Bezeroa"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Deskargak pixkanaka bufferizatzea"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Zerbitzaria"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Urrutiko erreproduzitzailea kontrolatzea"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Entzuteko ataka"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Ukituak"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Itxura"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Gai iluna"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Leihoetako itzalak errenderizatzea"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Desaktibatu leihoa erabiltzen denean errendimendua handitzeko"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Pluginen sailkapena"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Aldatu GStreamer-en pluginen lehenetsitako mailak"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "Playbin3 erabili"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Berrabiaraztea eskatzen du"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Esperimentala"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "Erabili PipeWire audio-irteerarako"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Deskodetzailea: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Sartu edo utzi URIa erortzen hemen"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Ezeztatu"
#: src/dialogs.js:158
msgid "Open"
msgstr "Ireki"
#: src/dialogs.js:226
msgid "Title"
msgstr "Titulua"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Osatuta"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Jarraitu erreprodukzioarekin?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "GTK bertsioa: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Adwaitaren bertsioa: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "GStreamer-en bertsioa: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "GJS bertsioa: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "GNOMEren multimedia erreproduzitzaile bat GStreamer-ekin"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Sergio Varela (@IngrownMink4)"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Amaiera: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Zehaztugabea"
#: src/widget.js:242
msgid "Channels"
msgstr "Kanalak"
#: src/widget.js:260
msgid "Disabled"
msgstr "Desgaituta"

438
po/fa.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-07-23 14:14\n"
"Last-Translator: \n"
"Language-Team: Persian\n"
"Language: fa_IR\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: fa\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "گشودن پرونده‌ها…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "گشودن نشانی…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "ترجیحات"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "میان‌برها"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "دربارهٔ کلَپِر"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "سرعت"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "معمولی"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "عمومی"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "نمایش میان‌برها"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "تغییر حالت تمام‌صفحه"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "دو بار ضربه | دو بار کلیک"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "خروج از تمام‌صفحه"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "نمایش OSD (فقط تمام‌صفحه)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "ضربه"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "خروج"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "رسانه"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "گشودن پرونده‌ها"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "گشودن نشانی"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "سیاههٔ پخش"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "مورد بعدی"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "ضربه دوتایی (سمت راست)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "مورد قبل"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "ضربه دوتایی (سمت چپ)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "تغییر حالت تکرار"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "خروجی گرفتن در فایل"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "بازپخش"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "تغییر پخش"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "فشار طولانی | کلیک راست"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "پیمایش به جلو"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "کشیدن به راست | اسکرول به راست"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "پیمایش به عقب"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "کشیدن به چپ | اسکرول به چپ"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "افزایش صدا"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "کشیدن به بالا | اسکرول به بالا"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "کاهش صدا"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "کشیدن به پایین | اسکرول به پایین"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "تغییر وضعیت بیصدا"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "فصل بعدی"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "بخش قبلی"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "کد گشاها"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "بازگشت به تنظیمات"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "رفتار"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "تمام صفحه خودکار"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "ورود به تمام صفحه وقتی لیست پخش جایگزین شود به جز حالت شناور"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "پرسش برای ادامه پخش مدیا"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "حالت شناور روی همه‌ی صفحات‌کاری"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "این مورد تنها بر روی GNOME کار می‌کند"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "پس از بازپخش"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "کاری انجام نشود"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "بی‌حرکت کردن ةخرین قاب"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "بستن برنامه"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "درجه صدا"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "مقدار اولیه سفارشی"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "تنظیم صدای سفارشی در هنگام راه اندازی به جای بازیابی آن"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "درصد صدا"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "پوییدن"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "حالت"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "دقت"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "تند"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "واحد"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "ثانیه"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "دقیقه"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "درصد"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "مقدار"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "صوتی"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "جابجایی بر اساس میلی‌ثانیه"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "فقط فرمت‌های صوتی بومی"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "زیرنویس‌ها"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "قلم پیش فرض"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "شبکه"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "مشتری"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "بافرینگ دانلود مترقی"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "سرور"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "کنترل پخش‌کننده از راه دور"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "شنود پورت"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "دستكاري"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "ظاهر"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "پوسته تیره"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "رندر سایه‌ پنجره‌ها"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "غیر فعال سازی برای افزایش کارایی در حالت پنجره ای"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "پیکربندی پلاگین"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "تغییر پیکربندی پیش فرض پلاگین های GStreamer"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "استفاده از playbin3"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "نیازمند به بازشروع برنامه"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "آزمایشی"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "استفاده از PipeWire برای خروجی صدا"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "کدگشا: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "رها کردن یا واردکردن URI"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "لغو"
#: src/dialogs.js:158
msgid "Open"
msgstr "گشودن"
#: src/dialogs.js:226
msgid "Title"
msgstr "عنوان"
#: src/dialogs.js:227
msgid "Completed"
msgstr "کامل شده"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "ادامه بازپخش?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "نسخه GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "نسخه Adwita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "نسخه GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "نسخه GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "یک پخش‌کننده رسانه GNOME قدرت گرفته از GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "سجاد موسوی نژاد <ssmns@outlook.com>"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "پایان در: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "نامشخص"
#: src/widget.js:242
msgid "Channels"
msgstr "کانال‌ها"
#: src/widget.js:260
msgid "Disabled"
msgstr "غیرفعال"

438
po/fi.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2023-05-02 12:22\n"
"Last-Translator: \n"
"Language-Team: Finnish\n"
"Language: fi_FI\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: fi\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Avaa tiedostoja…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Avaa URI…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Asetukset"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Pikanäppäimet"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Tietoja - Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Nopeus"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normaali"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Yleiset"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Näytä pikanäppäimet"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Koko näyttö päälle/pois"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Napsauta tai napauta kahdesti"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Poistu koko näytön tilasta"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Näytä OSD (vain koko näytön tilassa)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Napauta"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Lopeta"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Media"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Avaa tiedostoja"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Avaa URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Soittolista"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Seuraava kohde"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Napauta kahdesti (oikea puoli)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Edellinen kohde"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Napauta kahdesti (vasen puoli)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Vaihda kertaustilaa"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Vie tiedostoon"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Toisto"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Aloita tai pysäytä toisto"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Pitkä painallus tai oikean napsautus"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Siirry eteenpäin"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Pyyhkäise oikealle - vieritä oikealle"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Siirry taaksepäin"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Pyyhkäise vasemmalle - vieritä vasemmalle"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Lisää äänenvoimakkuutta"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Vieritä tai pyyhkäise ylös"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Vähennä äänenvoimakkuutta"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Vieritä tai pyyhkäise alas"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Mykistä tai palauta ääni"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Seuraava kappale"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Edellinen kappale"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Dekooderit"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Palaa asetuksiin"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Toiminta"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Automaattinen koko näytön tila"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Siirry koko näytön tilaan, kun soittolista korvataan, paitsi kelluvassa tilassa"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Ehdota palaamista viimeisimpiin"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Pidä kelluvana kaikissa työtiloissa"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Tämä asetus toimii vain Gnomessa"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Toiston jälkeen"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Älä tee mitään"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Pysäytä viimeinen kuva"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Sulje sovellus"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Äänenvoimakkuus"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Mukautettu alkuarvo"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Aseta mukautettu äänenvoimakkuus käynnistäessä äänenvoimakkuuden palauttamisen sijaan"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Ään envoimakkuus prosentteina"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Siirtyminen"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Tila"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Tarkka"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Nopea"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Yksikkö"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Sekunti"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Minuutti"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Prosentti"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Arvo"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Ääni"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Siirtymä millisekunteina"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Vain natiivit äänimuodot"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Tekstitykset"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Oletusfontti"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Verkko"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Asiakasohjelmisto"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Progressiivinen latauspuskurointi"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Palvelin"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Hallitse videosoitinta etänä"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Kuuntele porttia"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Lisäasetukset"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Ulkoasu"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Tumma teema"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Piirrä ikkunan varjot"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Poista käytöstä parantaaksesi suorituskykyä ikkunoituna"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Liitännäisten sijoitus"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Muuta GStreamer-liitännäisten sijoitusten oletusarvoja"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "Käytä playbin3:a"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Vaatii toistimen uudelleenkäynnistyksen"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Kokeellinen"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "Käytä PipeWireä äänen ulostuloon"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Dekooderi: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Syötä tai pudota URI tähän"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Peru"
#: src/dialogs.js:158
msgid "Open"
msgstr "Avaa"
#: src/dialogs.js:226
msgid "Title"
msgstr "Nimi"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Valmiusaste"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Jatketaanko toistoa?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "GTK-versio: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Adwaita-versio: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "GStreamer-versio: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "GJS-versio: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Mediasoitin Gnomelle, jonka mahdollistaa GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Jiri Grönroos"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Päättyy: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Määrittelemätön"
#: src/widget.js:242
msgid "Channels"
msgstr "kanavaa"
#: src/widget.js:260
msgid "Disabled"
msgstr "Pois käytöstä"

438
po/fr.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: French\n"
"Language: fr_FR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: fr\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Ouvrir un fichier…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Ouvrir une URL…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Préférences"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Raccourcis clavier"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Á propos de Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Vitesse"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normal"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Général"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Montrer les raccourcis"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Basculer en plein écran"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Tapoter/cliquer deux fois"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Sortir du plein écran"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Afficher les commandes de lecture (seulement en plein écran)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Taper"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Quitter"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Média"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Ouvrir un fichier"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Ouvrir une URL"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Playlist"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Prochain média"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Tapoter deux fois (côté droit)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Média précédent"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Tapoter deux fois (côté gauche)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Changer le mode de répétition"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Exporter vers un fichier"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Lecture"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Relancer/stopper la lecture"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Longue pression | Clic droit"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Avancer dans la lecture"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Glisser/Faire défiler vers la droite"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Reculer dans la lecture"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Glisser/Faire défiler vers la gauche"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Augmenter le volume"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Glisser/Défiler vers le haut"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Baisser le volume"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Glisser/Défiler vers le bas"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Basculer le mode silencieux"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Prochain chapitre"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Chapitre précédent"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Décodeurs"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Retourner aux préférences"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Comportement"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Lecture automatique en plein écran"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Basculer en plein écran quand la playlisyt est remplacée sauf si le mode flottant est activé"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Demander pour reprendre à la position des médias récents"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Flotter sur tous les bureaux virtuels"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Cette option ne marche qu'avec GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Après la lecture"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Ne rien faire"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Geler la dernière image"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Fermer l'application"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Volume"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Valeur initiale personnalisée"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Régler une valeur personnalisée du volume au démarrage au lien de restorer la valeur précédente"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Pourcentage du volume"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Avancement"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Comportement"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Précis"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Rapide"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Unité des sauts"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Seconde"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Minute"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Pourcentage"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Longueur du saut"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Audio"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Décalage en millisecondes"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Seulement des formats audios natifs"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Sous-titres"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Police par défaut"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Réseau"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Client"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Téléchargement progressif dans le tampon"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Serveur"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Controler le lecteur à distance"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Écouter sur le port"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Réglages"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Apparence"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Thème sombre"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Afficher les ombres de la fenêtre"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Désactiver pour améliorer les performances quand fenêtré"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Liste des plugins"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Changer les options par défaut de plugins GStreamer"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "Utiliser playbin3"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Requiert le redémarrage du lecteur"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Expérimental"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "Utiliser PipeWire pour la sortie audio"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Décodeur: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Entrer ou déposer une URL ici"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Annuler"
#: src/dialogs.js:158
msgid "Open"
msgstr "Ouvrir"
#: src/dialogs.js:226
msgid "Title"
msgstr "Titre"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Terminé"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Reprendre la lecture?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Version de GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Version d'Adwaita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Version de GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Version de GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Un lecteur multimédia pour GNOME propulsé par GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Robin Verdenal-Tallieux"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Finit à: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Indéterminé"
#: src/widget.js:242
msgid "Channels"
msgstr "Chaines"
#: src/widget.js:260
msgid "Disabled"
msgstr "Désactivé"

438
po/he.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-06-01 08:42\n"
"Last-Translator: \n"
"Language-Team: Hebrew\n"
"Language: he_IL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: he\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "פתיחת קבצים…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "פתיחת כתובת…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "העדפות"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "צירופי מקשים"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "על אודות Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "מהירות"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "רגילה"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "כללי"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "הצגת צירופי מקשים"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "שינוי מצב מסך מלא"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "נגיעה כפולה | לחיצה כפולה"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "יציאה ממסך מלא"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "הצגת מידע וכפתורים (מסך מלא בלבד)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "נגיעה"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "יציאה"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "מדיה"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "פתיחת קבצים"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "פתיחת כתובת"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "רשימת השמעה"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "פריט הבא"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "נגיעה כפולה (צד ימין)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "פריט קודם"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "נגיעה כפולה (צד שמאל)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "שינוי מצב חזרה"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "ייצוא לקובץ"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "השמעה"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "הפעלה/השהיה"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "לחיצה ארוכה | לחצן ימני"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "דילוג קדימה"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "החלקה ימינה | גלילה ימינה"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "דילוג לאחור"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "החלקה שמאלה | גלילה שמאלה"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "הגברת עצמת השמע"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "החלקה למעלה | גלילה למעלה"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "הנמכת עצמת השמע"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "החלקה למעלה | גלילה למעלה"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "השתקה/ביטול השתקה"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "פרק הבא"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "פרק קודם"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "מפענחים"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "חזרה להגדרות"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "התנהגות"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "מסך מלא אוטומטי"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "כניסה למצב מסך מלא עם החלפת רשימת השמעה מלבד במצב ציפה"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "לשאול אם להפעיל מחדש את המדיה האחרונה"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "ציפה בכל מרחבי העבודה"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "אפשרות זו פועלת רק ב־GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "בסיום צפייה"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "לא לעשות דבר"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "הקפאת התמונה האחרונה"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "סגירת היישום"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "עצמת שמע"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "התאמת ערך התחלתי"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "הגדרת עצמת השמע עם ההפעלה במקום שחזור"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "עצמת שמע באחוזים"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "דילוג"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "מצב"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "מדויק"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "מהיר"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "יחידה"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "שניה"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "דקה"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "אחוז"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "ערך"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "שמע"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "היסט במילי־שניות"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "תבניות שמע רגילות בלבד"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "כתוביות"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "גופן ברירת מחדל"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "רשת"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "לקוח"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "שימוש בחוצץ הורדה"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "שרת"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "שליטה בנגן מרחוק"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "פתחת האזנה"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "התאמות"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "מראה"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "מראה כהה"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "עיבוד צל לחלון"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "השבתה לצמצום צריכת החלונות"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "דרגות תוספים"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "שינוי דירוג ברירת המחדל של תוספי GStreamer"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "שימוש ב־playbin3"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "דורש הפעלה מחדש של הנגן"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "ניסיוני"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "שימוש ב־PipeWire לפלט השמע"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "מפענח: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "יש להזין או להשליך כתובת לכאן"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "ביטול"
#: src/dialogs.js:158
msgid "Open"
msgstr "פתיחה"
#: src/dialogs.js:226
msgid "Title"
msgstr "כותרת"
#: src/dialogs.js:227
msgid "Completed"
msgstr "הושלם"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "להמשיך בצפייה?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "גרסת GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "גרסת Adwaita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "גרסת GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "גרסת GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "נגן מדיה עבור GNOME המופעל על ידי GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "יוסף אור בוצ׳קו <yoseforb@gnome.org>"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "שעת סיום: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "לא מוגדר"
#: src/widget.js:242
msgid "Channels"
msgstr "ערוצים"
#: src/widget.js:260
msgid "Disabled"
msgstr "מושבת"

438
po/hr.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2023-05-06 19:49\n"
"Last-Translator: \n"
"Language-Team: Croatian\n"
"Language: hr_HR\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: hr\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Otvori datoteke …"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Otvori URI …"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Postavke"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Prečaci"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Clapper informacije"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Brzina"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normalna"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Opće"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Prikaži prečace"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Uključi/isključi cjeloekranski prikaz"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Dodirni dvaput | Pritisni tipku miša dvaput"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Napusti cjeloekranski prikaz"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Prikaži OSD (samo u cjeloekranskom prikazu)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Dodirni"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Zatvori aplikaciju"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Mediji"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Otvori datoteke"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Otvori URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Popis za izvođenje"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Sljedeće"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Dodirni dvaput (desno)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Prethodno"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Dodirni dvaput (lijevo)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Promijeni način ponavljanja"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Izvezi u datoteku"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Reprodukcija"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Uključi/Isključi reprodukciju"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Dugi pritisak | Pritisni desnu tipku miša"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Traži prema naprijed"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Povuci udesno | Klizni udesno"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Traži prema natrag"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Povuci ulijevo | Klizni ulijevo"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Glasnije"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Povuci gore | Klizni gore"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Tiše"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Povuci dolje | Klizni dolje"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Uključi/isključi zvuk"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Sljedeće poglavlje"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Prethodno poglavlje"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Dekoderi"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Vrati se na postavke"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Ponašanje"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Automatski cjeloekranski prikaz"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Prijeđi u cjeloekranski prikaz kada se popis za reprodukciju zamijeni, osim ako je aktiviran plutajući način"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Zatraži nastavljanje nedavnih medija"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Plutaj na svim radnim prostorima"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Ova opcija radi samo na GNOME-u"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Nakon reprodukcije"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Nemoj ništa raditi"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Zamrzni zadnji kadar"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Zatvori aplikaciju"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Glasnoća"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Prilagođena početna vrijednost"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Postavi prilagođenu glasnoću pri pokretanju umjesto obnavljanja glasnoće"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Postotak glasnoće"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Pretraživanje"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Način"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Točno"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Brzo"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Jedinica"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Sekunda"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Minuta"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Postotak"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Vrijednost"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Audio"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Odmak u milisekundama"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Samo izvorni audio formati"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Titlovi"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Zadani font"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Mreža"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Klijent"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Progresivno predmemoriranje preuzimanja"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Poslužitelj"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Daljinsko upravljanje playerom"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Priključak slušanja"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Podešavanja"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Izgled"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Tamni dizajn"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Iscrtaj sjene prozora"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Deaktiviraj za povećavanje performanse u prikazu prozora"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Ocjenjivanje dodataka"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Promijeni zadane ocjene GStreamer dodataka"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "Koristi playbin3"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Zahtijeva ponovno pokretanje playera"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Eksperimentalno"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "Koristi PipeWire audio rezultat"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Dekoder: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Ovdje upiši ili ispusti URI"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Odustani"
#: src/dialogs.js:158
msgid "Open"
msgstr "Ovori"
#: src/dialogs.js:226
msgid "Title"
msgstr "Naslov"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Završeno"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Nastavi reprodukciju?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "GTK verzija: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Adwaita verzija: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "GStreamer verzija: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "GJS verzija: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "GNOME media player koji pokreće GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Milo Ivir <mail@milotype.de>"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Završava pri: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Neodređeno"
#: src/widget.js:242
msgid "Channels"
msgstr "Kanali"
#: src/widget.js:260
msgid "Disabled"
msgstr "Deaktivirani"

438
po/hu.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Hungarian\n"
"Language: hu_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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: hu\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Fájlok megnyitása…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "URI megnyitása…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Beállítások"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Gyorsbillentyűk"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "A Clapper -ről"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Sebesség"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normál"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Általános beállítások"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Gyorsbillentyűk megjelenítése"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Teljes képernyő be/ki"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Dupla koppintás | Dupla kattintás"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Teljes képernyő be/ki"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Képernyőn megjelenő kijelző (OSD) mutatása (csak teljes képernyős módban)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Koppintás"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Kilépés"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Média"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Fájlok megnyitása"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "URI megnyitása"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Lejátszólista"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Következő listaelem"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Dupla koppintás (jobb oldalon)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Előző listaelem"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Dupla koppintás (bal oldalon)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Ismétlési típus változtatása"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Exportálás fájlba"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Lejátszás"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Lejátszás indítása/megállítása"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Hosszú nyomás | Jobb kattintás"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Előretekerés"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Húzás jobbra | Görgetés jobbra"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Visszatekerés"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Húzás balra | Görgetés balra"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Hangerő növelése"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Húzás felfelé | Görgetés felfelé"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Hangerő csökkentése"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Húzás lefelé | Görgetés lefelé"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Némítás be-/kikapcsolása"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Következő jelenet"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Előző jelenet"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Dekóderek"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Visszatérés a beállításokhoz"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Viselkedés"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Automatikus teljes képernyős mód"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Teljes képernyős módra váltás a lejátszólista megváltoztatásakor (kivétel ha lebegőablakos módban vagyunk)"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Rákérdezés a legutóbbi média folytatására"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Lebegő ablak az összes munkaasztalon"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Ez az opció csak GNOME asztali környezettel működik"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Lejátszás után"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Ne csináljon semmit"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Utolsó képkocka mutatása"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Alkalmazás bezárása"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Hangerő"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Egyedi kezdeti érték"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Induláskor egyedi hangerő az utolsó visszaállítása helyett"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Hangerő százalék"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Tekerés"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Mód"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Precíz"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Gyors"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Mértékegység"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Másodperc"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Perc"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Százalék"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Érték"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Hang"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Eltolás miliszekundumban"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Csak natív hang formátumok"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Feliratok"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Alapértelmezett betűtípus"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Hálózat"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Kliens"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Progresszív letöltéspufferelés"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Szerver"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Lejátszó távirányítása"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Port figyelése"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Finomhangolások"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Megjelenés"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Sötét téma"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Ablak árnyékok renderelése"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Kikapcsolása javítja a teljesítményt ablakban futtatás esetén"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Bővítményrangsor"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Az alapértelmezett GStreamer bővítményrangsor megváltoztatása"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "A playbin3 használata"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "A lejátszó újraindítását igényli"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Kísérleti funkció"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "A PipeWire használata hang kimenetként"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Dekóder: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Adjon meg egy URI -t itt, vagy húzza és ejtse ide"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Mégsem"
#: src/dialogs.js:158
msgid "Open"
msgstr "Megnyitás"
#: src/dialogs.js:226
msgid "Title"
msgstr "Cím"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Lejátszva"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Lejátszás folytatása?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "GTK verzió: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Adwaita verzió: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "GStreamer verzió: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "GJS verzió: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "GNOME médialejátszó a GStreamer képességeivel"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Ferenc Géczi"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "%s-kor ér véget"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Meghatározatlan"
#: src/widget.js:242
msgid "Channels"
msgstr "Csatornák"
#: src/widget.js:260
msgid "Disabled"
msgstr "Kikapcsolva"

438
po/it.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-27 12:50\n"
"Last-Translator: \n"
"Language-Team: Italian\n"
"Language: it_IT\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: it\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Apri i File…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Apri URI…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Preferenze"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Scorciatoie"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Informazioni su Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Velocità"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normale"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Generale"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Mostra scorciatoie"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Attiva/Disattiva schermo intero"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Doppio tocco | Doppio click"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Disattiva schermo intero"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Rivela controlli (solo a schermo intero)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Tocco"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Esci"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Media"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Apri i file"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Apri URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Playlist"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Elemento successivo"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Doppio tocco (lato destro)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Elemento precedente"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Doppio tocco (lato sinistro)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Cambia modalità di ripetizione"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Esporta su file"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Riproduzione"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Attiva/Disattiva riproduzione"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Tocco prolungato | Click destro"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Scorri avanti"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Scorri a destra"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Scorri indietro"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Scorri a sinistra"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Aumenta volume"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Scorri in alto"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Abbassa volume"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Scorri in basso"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Attiva/Disattiva muto"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Capitolo successivo"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Capitolo precedente"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Decodificatori"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Ritorna alle preferenze"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Comportamento"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Schermo intero automatico"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Attiva schermo intero quando la playlist viene sostituita, tranne in modalità fluttuante"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Chiedi di riprendere i media recenti"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Fluttuante su tutti i workspace"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Questa opzione funziona solo su GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Dopo la riproduzione"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Non fare nulla"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Mostra l'ultimo fotogramma"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Chiudi l'app"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Volume"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Valore iniziale personalizato"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Imposta un volume all'avvio personalizzato invece di ripristinarlo"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Percentuale volume"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Scorrimento"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Modalità"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Accurata"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Veloce"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Unità"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Secondo"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Minuto"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Percentuale"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Valore"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Audio"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Ritardo/Anticipo in millisecondi"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Solo formati audio nativi"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Sottotitoli"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Carattere predefinito"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Rete"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Client"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Download buffering progressivo"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Server"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Controlla la riproduzione da remoto"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Porta in ascolto"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Aggiustamenti"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Aspetto"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Tema scuro"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Ombreggiatura della finestra"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Disabilita per aumentare le prestazioni in modalità finestra"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Ordine dei plugin"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Altera l'ordine predefinito dei plugin di GStreamer"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "Usa playbin3"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Richiede il riavvio del player"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Sperimentale"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "Usa PipeWire per l'uscita audio"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Decoder: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Inserisci o rilascia URI qui"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Cancella"
#: src/dialogs.js:158
msgid "Open"
msgstr "Apri"
#: src/dialogs.js:226
msgid "Title"
msgstr "Titolo"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Completato"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Riprendere la riproduzione?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Versione GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Versione Adwaita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Versione GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Versione GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Un riproduttore multimediale per GNOME basato su GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Uniformbuffer"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Termina alle: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Indeterminato"
#: src/widget.js:242
msgid "Channels"
msgstr "Canali"
#: src/widget.js:260
msgid "Disabled"
msgstr "Disabilitato"

438
po/ja.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Japanese\n"
"Language: ja_JP\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: ja\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "ファイルを開く…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "URIを開く…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "設定"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "ショートカット"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Clapperについて"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "速度"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "標準"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "一般"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "ショートカットを表示する"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "フルスクリーン切り替え"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "ダブルタップ | ダブルクリック"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "フルスクリーンを終了"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "OSDを表示 (全画面表示の場合のみ)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "タップ"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "終了"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "メディア"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "ファイルを開く"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "URIを開く"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "プレイリスト"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "次の項目"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "ダブルタップ(右端)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "前の項目"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "ダブルタップ(左端)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "リピートモードを変更"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "ファイルへエクスポート"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "プレイバック"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "一時停止・再生"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Long press | Right click"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "早送り"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "右スワイプ | 右スクロール"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "巻き戻し"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "左スワイプ | 左スクロール"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "音量を上げる"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "上スワイプ | 上スクロール"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "音量を下げる"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "下スワイプ | 下スクロール"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "ミュート切り替え"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "次のチャプターへ"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "前のチャプターへ\""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "デコーダー"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "設定へ戻る"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "挙動"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "自動的にフルスクリーンに切り替える"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "フローティングモードを除き、プレイリストを入れ替えた場合に自動的にフルスクリーンにする"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "前回再生したメディアを続きから再生するか尋ねる"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "すべてのワークスペースにフロートを配置する"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "このオプションはGnomeでのみ機能します"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "再生終了後"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "何もしない"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "最後のフレームで停止する"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "アプリを閉じる"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "音量"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "初期音量を設定する"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "前回使用した音量を使用するのではなく、起動時に音量をカスタム値に設定します"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "音量(%)"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "シーキング"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "モード"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "精密"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "高速"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "ユニット"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "秒"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "分"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "パーセント"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "値"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "オ−ディオ"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "オフセット(ミリ秒)"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "ネイティブオーディオフォーマットのみを使用する"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "字幕"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "既定のフォント"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "ネットワーク"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "クライアント"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "プログレッシブなバッファリングを使用する"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "サーバー"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "プレーヤーをリモートでコントロールする"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "待ち受けポート"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "詳細設定"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "外観"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "ダークテーマ"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "ウィンドウの影をレンダリングする"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "無効化するとウィンドウモードでのパフォーマンスが向上します"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "プライグインの優先順位"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "GStreamerプラグインの優先順位を変更します"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "playbin3を使用"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "プレイヤーの再起動が必要です"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "試験運用機能"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "オーディオ出力にPipeWireを使用する"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "デコーダー: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "ここにURIを入力またはドロップ"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "キャンセル"
#: src/dialogs.js:158
msgid "Open"
msgstr "開く"
#: src/dialogs.js:226
msgid "Title"
msgstr "タイトル"
#: src/dialogs.js:227
msgid "Completed"
msgstr "再生済み"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "前回の続きから再生しますか?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "GTKバージョン: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Adwaitaバージョン: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "GStreamer バージョン: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "GJS バージョン: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "GStreamerを使用したGNOME向けのメディアプレーヤー"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "翻訳者"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "再生終了時刻: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "不明"
#: src/widget.js:242
msgid "Channels"
msgstr "チャンネル"
#: src/widget.js:260
msgid "Disabled"
msgstr "Disabled"

438
po/ko.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Korean\n"
"Language: ko_KR\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: ko\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:97
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:107
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:153
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:157
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:168
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr ""
#: src/widget.js:242
msgid "Channels"
msgstr ""
#: src/widget.js:260
msgid "Disabled"
msgstr ""

438
po/lt.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2023-04-02 16:38\n"
"Last-Translator: \n"
"Language-Team: Lithuanian\n"
"Language: lt_LT\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && (n%100>19 || n%100<11) ? 0 : (n%10>=2 && n%10<=9) && (n%100>19 || n%100<11) ? 1 : n%1!=0 ? 2: 3);\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: lt\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Atverti failus…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Atverti URI…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Nustatymai"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Spartieji klavišai"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Apie Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Numatyta"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Bendri"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Įjungti visame ekrane"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Baigti"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Medija"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Atverti failus"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Atverti URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Grojaraštis"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Atkūrimas"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Pagarsinti"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Patildyti"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Užverti programą"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Garsumas"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Mat. vienetai"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Reikšmė"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Titrai"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Numatytasis šriftas"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Ryšiai"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:168
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Išvaizda"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Tamsi tema"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Atsisakyti"
#: src/dialogs.js:158
msgid "Open"
msgstr "Atverti"
#: src/dialogs.js:226
msgid "Title"
msgstr "Pavadinimas"
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Tęsti atkūrimą?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "GTK versija: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Adwaita versija: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "GStreamer versija: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "GJS versija: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Mantas Kriaučiūnas <tinklas@tinklas.eu>"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr ""
#: src/widget.js:242
msgid "Channels"
msgstr ""
#: src/widget.js:260
msgid "Disabled"
msgstr ""

View File

@@ -1 +0,0 @@
i18n.gettext(meson.project_name(), preset: 'glib')

438
po/nl.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Dutch\n"
"Language: nl_NL\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: nl\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Bestanden openen…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "URI openen…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Voorkeuren"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Sneltoetsen"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Over Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Snelheid"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normaal"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Algemeen"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Sneltoetsen tonen"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Beeldvullende modus aan/uit"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Dubbeltikken/Dubbelklikken"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Beeldvullende modus verlaten"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "OSD tonen (alleen in beeldvullende modus)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Tikken"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Afsluiten"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Media"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Bestanden openen"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "URI openen"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Afspeellijst"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Volgend item"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Dubbeltikken (rechterkant)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Vorig item"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Dubbeltikken (linkerkant)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Herhaalmodus wijzigen"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Exporteren naar bestand"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Afspelen"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Afspelen/Pauzeren"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Lang ingedrukt houden/Rechtsklikken"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Vooruitspoelen"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Naar rechts vegen/scrollen"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Terugspoelen"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Naar links vegen/scrollen"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Volume omhoog"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Omhoog vegen/scrollen"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Volume omlaag"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Omlaag vegen/scrollen"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Geluid dempen"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Volgend hoofdstuk"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Vorig hoofdstuk"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Decodering"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Terug naar voorkeuren"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Gedrag"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Beeldvullende modus automatisch inschakelen"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Schakel de beeldvullende modus automatisch in als de afspeellijst wordt vervangen (behalve in de zwevende modus)"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Vragen om onlangs afgespeelde media te hervatten"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Zweven op alle werkbladen"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Deze optie werkt alleen op GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Actie na het afspelen:"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Niets doen"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Laatste frame bevriezen"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Toepassing afsluiten"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Volume"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Aangepaste initiële waarde"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Stel een aangepast volumeniveau in bij het opstarten in plaats van het vorige te herstellen"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Volumeniveau"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Spoelen"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Modus"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Nauwkeurig"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Snel"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Eenheid"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Seconde"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Minuut"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Percentage"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Waarde"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Audio"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Verschuiving (in milliseconden)"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Alleen ingebouwde audioformaten"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Ondertiteling"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Standaardlettertype"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Netwerk"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Client"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Progressieve downloadbuffering"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Server"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Speler op afstand bedienen"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Luisteren op poort:"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Aanpassingen"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Vormgeving"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Donker thema"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Vensterschaduwen tonen"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Schakel uit om de prestaties te verbeteren in de zwevende modus"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Plug-involgorde"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Pas de standaardvolgorde van GStreamer-plug-ins aan"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "playbin3 gebruiken"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Herstart de speler om de wijziging toe te passen"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Experimenteel"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "PipeWire gebruiken voor audio-uitvoer"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Decoder: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Voer een uri in of sleep een uri hierheen"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Annuleren"
#: src/dialogs.js:158
msgid "Open"
msgstr "Openen"
#: src/dialogs.js:226
msgid "Title"
msgstr "Titel"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Voltooid"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Afspelen hervatten?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "GTK versie: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Adwaita-versie: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "GStreamer-versie: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "GJS-versie: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Een door GStreamer aangedreven GNOME-mediaspeler"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Heimen Stoffels <vistausss@fastmail.com>"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Eindigt op: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "onbekend"
#: src/widget.js:242
msgid "Channels"
msgstr "Kanalen"
#: src/widget.js:260
msgid "Disabled"
msgstr "Uitgeschakeld"

438
po/no.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Norwegian\n"
"Language: no_NO\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: no\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:97
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:107
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:153
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:157
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:168
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr ""
#: src/widget.js:242
msgid "Channels"
msgstr ""
#: src/widget.js:260
msgid "Disabled"
msgstr ""

438
po/pl.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Polish\n"
"Language: pl_PL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: pl\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Otwórz pliki…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Otwórz URI…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Preferencje"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Skróty"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "O programie"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Prędkość"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normalny"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Główne"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Pokaż skróty"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Przełącz tryb pełnoekranowy"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Podwójne dotknięcie | Podwójne kliknięcie"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Opuść pełny ekran"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Pokaż OSD (tylko w trybie pełnoekranowym)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Stuknij"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Zamknij"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Media"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Otwórz pliki"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Otwórz URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Playlista"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Następna pozycja"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Dwukrotne dotknięcie (po prawej)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Poprzednia pozycja"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Podwójne dotknięcie (po lewej stronie)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Zmień tryb powtarzania"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Eksportuj do pliku"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Odtwarzanie"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Przełącz odtwarzanie"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Długie naciśnięcie | Prawy przycisk"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Przewiń do przodu"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Przesuń w prawo | Przewiń w prawo"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Przewiń do tyłu"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Przesuń w lewo | Przewiń w lewo"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Zwiększ głośność"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Przesuń w górę | Przewiń w górę"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Zmniejsz głośność"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Przesuń w dół | Przewiń w dół"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Przełącz wyciszenie"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Następny rozdział"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Poprzedni rozdział"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Dekodery"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Wróć do preferencji"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Zachowanie"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Automatyczny tryb pełnoekranowy"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Wejdź do trybu pełnoekranowego, gdy lista odtwarzania zostanie zastąpiona z wyjątkiem trybu pływającego"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Pytaj o wznowienie ostatnich mediów"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Pływaj na wszystkich obszarach roboczych"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Ta opcja działa tylko na GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Po odtwarzaniu"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Nic nie rób"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Zamroź ostatnią klatkę"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Zamknij aplikację"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Głośność"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Wartość początkowa"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Ustaw własną głośność początkową zamiast ją przywracać"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Procent głośności"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Przewijanie"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Tryb"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Dokładny"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Szybki"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Jednostka"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Sekunda"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Minuta"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Procent"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Wartość"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Audio"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Przesunięcie w milisekundach"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Tylko natywne formaty audio"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Napisy"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Domyślna czcionka"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Sieć"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Klient"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Buforuj pobierając progresywnie"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Serwer"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Zdalne sterowanie odtwarzaczem"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Port połączeń przychodzących"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Dostrajanie"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Wygląd"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Ciemny motyw"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Renderuj cienie okna"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Wyłącz, aby zwiększyć wydajność w trybie okienkowym"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Ranking pluginów"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Zmień domyślne rangi pluginów GStreamera"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "Użyj playbin3"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Wymaga restartu odtwarzacza"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Eksperyment"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "Użyj PipeWire do wyprowadzenia dźwięku"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Dekoder: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Wprowadź lub upuść URI tutaj"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Anuluj"
#: src/dialogs.js:158
msgid "Open"
msgstr "Otwórz"
#: src/dialogs.js:226
msgid "Title"
msgstr "Tytuł"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Ukończono"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Wznowić odtwarzanie?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Wersja GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Wersja Adwaity: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Wersja GStreamera: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Wersja GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Odtwarzacz multimedialny dla GNOME zasilany przez GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Rafał Dzięgiel <rafostar.github@gmail.com>"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Koniec o: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Nieokreślony"
#: src/widget.js:242
msgid "Channels"
msgstr "Kanały"
#: src/widget.js:260
msgid "Disabled"
msgstr "Wyłączony"

438
po/pt.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Portuguese\n"
"Language: pt_PT\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: pt-PT\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Abrir ficheiros…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Abrir URI…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Preferências"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Atalhos"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Sobre o Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Velocidade"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Predefinido"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Geral"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Mostrar atalhos"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Mudar modo de ecrã"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Toque duplo duplo Clique duplo"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Sair do modo de ecrã completo"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Revelar OSD (apenas em tela cheia)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Tocar"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Sair"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Multimédia"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Abrir ficheiro"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Abrir URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Lista de reprodução"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Próximo item"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Toque duplo (lado direito)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Item anterior"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Toque duplo (lado esquerdo)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Alterar modo de repetição"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Exportar para ficheiro"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Reproduzir"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Alternar reprodução"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Toque longo | Clique com o botão direito"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Procurar para a frente"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Deslizar para a direita | Deslocar para direita"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Procurar para trás"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Deslizar para a esquerda | Deslocar para a esquerda"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Aumentar o volume"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Deslizar para cima | Deslocar para cima"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Diminuir o volume"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Deslizar para baixo | Deslocar para baixo"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Ativar/Desativar Som"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Capítulo seguinte"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Capítulo anterior"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Descodificadores"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Voltar para as preferências"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Comportamento"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Ecrã inteiro automático"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Entrar em ecrã inteiro quando a lista de reprodução é substituída, excepto no modo flutuante"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Pedir para retomar o ficheiro recente"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Flutuar em todas as áreas de trabalho"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Esta opção apenas funciona no GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Após reprodução"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Não fazer nada"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Suster o fotograma"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Fechar a aplicação"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Volume"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Valor inicial personalizado"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Definir volume personalizado no arranque ao invés de restaurá-lo"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Percentagem de volume"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Procurando"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Modo"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Preciso"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Rápido"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Unidade"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Segundo"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Minuto"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Percentagem"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Valor"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Áudio"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Deslocamento em milissegundos"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Apenas formatos de áudio nativos"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Legendas"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Tipo de letra predefinida"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Rede"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Cliente"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Buffering de transferência progressiva"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Servidor"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Controlar reprodutor remotamente"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Porta de escuta"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Ajustes"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Aparência"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Tema escuro"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Renderizar sombras das janelas"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Desativar para aumentar o desempenho quando em janela"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Classificação do plugin"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Altera as classificações predefinidas dos plugins GStreamer"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "Usar playbin3"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Requer o reinício do reprodutor"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Experimental"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "Usar o PipeWire para a saída áudio"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Descodificador: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Introduzir ou largar o URI aqui"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Cancelar"
#: src/dialogs.js:158
msgid "Open"
msgstr "Abrir"
#: src/dialogs.js:226
msgid "Title"
msgstr "Título"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Concluído"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Retomar a reprodução?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Versão do GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Versão do Adwaita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Versão do GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Versão do GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Um reprodutor multimédia GNOME desenvolvido por GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Hugo Carvalho <hugokarvalho@hotmail.com>"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Termina às: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Indeterminado"
#: src/widget.js:242
msgid "Channels"
msgstr "Canais"
#: src/widget.js:260
msgid "Disabled"
msgstr "Desativado"

View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Portuguese, Brazilian\n"
"Language: pt_BR\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: pt-BR\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Abrir Arquivos"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Abrir URI"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Preferências"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Atalhos"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Sobre o Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Velocidade"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normal"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Geral"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Mostrar atalhos"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Tela Cheia"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Toque duplo duplo Clique duplo"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Sair de tela cheia"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Revelar OSD (apenas em tela cheia)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Tocar"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Sair"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Mídia"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Abrir Arquivos"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Abrir o URL"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Lista de reprodução"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Próximo"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Toque duplo (lado direito)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Anterior"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Toque duplo (lado esquerdo)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Alternar modo de repetição"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Exportar arquivo"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Reprodução"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Alternar video"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Toque longo (Clique com o botão direito)"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Avançar para frente"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Deslizar para a Direita Scroll para Direita"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Volta video"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Deslizar para a esquerda Scroll para a Esquerda"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Aumentar o volume"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Deslizar para cima Scroll para cima"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Diminuir o volume"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Deslizar para baixo ► Rolar para baixo"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Ativar/Desativar Som"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Próximo Capítulo"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Capítulo Anterior"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Decodificadores"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Voltar para as preferências"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Comportamento"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Tela cheia automaticamente"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Insira em tela cheia quando a lista de reprodução for substituída, exceto o modo flutuante"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Pedir para retomar o video recente"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Flutuar em todas as áreas de trabalho"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Esta opção só funciona no GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Pós reprodução"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Não fazer nada"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Congelar o último quadro"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Fechar aplicativo"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Volume"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Valor inicial personalizado"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Definir volume personalizado na inicialização ao invés de restaurá-lo"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Percentual do volume"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Buscando"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Modo"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Preciso"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Rápido"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Unidade"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Segundo"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Minuto"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Porcentagem"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Valor"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Audio"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "tempo de desvanecimento em milissegundos"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Apenas formatos de áudio nativos"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Legendas"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Fonte padrão"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Rede"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Cliente"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "buffering progressivo de download"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Servidor"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Controle o video remotamente "
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Porta de escuta"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Ajustes"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Aparência"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Tema Escuro"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Renderizar sombras das janelas"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Desabilite para aumentar o desempenho em placas gráficas mais fracas."
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Classificação do plugin"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Altera os ranks padrão dos plugins do GStreamer"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "Usar playbin3"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Requer reinicialização do Clapper"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Experimental"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "Usar PipeWire para saída de áudio"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Decodificador: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Digite ou solte o URI aqui"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Cancelar"
#: src/dialogs.js:158
msgid "Open"
msgstr "Abrir"
#: src/dialogs.js:226
msgid "Title"
msgstr "Título"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Completado"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Retomar a reprodução?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Versão do GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Adwaita versão:"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Versão do GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Versão do GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Um player de mídia GNOME desenvolvido por GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "KevenDoriaLinuxBR"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "termina em %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Indeterminado"
#: src/widget.js:242
msgid "Channels"
msgstr "Canais"
#: src/widget.js:260
msgid "Disabled"
msgstr "Desabilitado"

438
po/ro.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Romanian\n"
"Language: ro_RO\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==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: ro\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:97
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:107
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:153
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:157
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:168
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr ""
#: src/widget.js:242
msgid "Channels"
msgstr ""
#: src/widget.js:260
msgid "Disabled"
msgstr ""

438
po/ru.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Russian\n"
"Language: ru_RU\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: ru\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Открыть файлы…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Открыть URI…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Параметры"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Комбинации клавиш"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "О приложении"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Скорость"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Обычная"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Общие"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Комбинации клавиш"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Включить полноэкранный режим"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Двойное нажатие | Двойной клик"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Выйти из полноэкранного режима"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Показывать OSD (только в полноэкранном режиме)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Нажатие"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Выйти из приложения"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Медиа"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Открыть файлы"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Открыть URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Плейлист"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Следующий элемент"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Двойное нажатие (правая сторона)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Предыдущий элемент"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Двойное нажатие (левая сторона)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Изменить режим повторения"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Экспорт в файл"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Воспроизведение"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Управление воспроизведением"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Длительное нажатие | Щелкните правой кнопкой мыши"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Перемотка вперед"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Проведите вправо | Прокрутите вправо"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Перемотка назад"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Проведите влево | Прокрутите влево"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Увеличить громкость"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Проведите вверх | Прокрутите вверх"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Уменьшить громкость"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Проведите вниз | Прокрутить вниз"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Отключить звук"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Следующая глава"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Предыдущая глава"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Декодеры"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Вернуться к настройкам"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Поведение"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Автоматический полноэкранный режим"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Переход в полноэкранный режим при замене списка воспроизведения, кроме плавающего режима"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Спрашивать о возобновление недавние медиа"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Показывать «плавающий режим» на всех рабочих столах"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Эта опция работает только в GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "После воспроизведения"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Ничего не делать"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Заморозить последний кадр"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Закрыть приложение"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Громкость"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Пользовательское начальное значение"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Установите настраиваемую громкость при запуске вместо ее восстановления"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Процент громкости"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Перемотка"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Режим"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Точный"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Быстрый"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Ед. изм"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Секунды"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Минуты"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Проценты"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Значение"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Аудио"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Смещение в миллисекундах"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Только нативные аудиоформаты"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Субтитры"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Шрифт по умолчанию"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Сеть"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Клиент"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Прогрессивная буферизация загрузки"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Сервер"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Удаленное управление плеером"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Порт прослушивания"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Твики"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Внешний вид"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Тёмная тема"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Рендеринг оконных теней"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Отключить, чтобы повысить производительность в оконном режиме"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Рейтинг плагинов"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Изменить ранги плагинов GStreamer по умолчанию"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "Использовать playbin3"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Требуется перезапуск плеера"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Экспериментально"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "Использовать PipeWire для вывода звука"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Декодер: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Введите URI"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Отмена"
#: src/dialogs.js:158
msgid "Open"
msgstr "Открыть"
#: src/dialogs.js:226
msgid "Title"
msgstr "Заголовок"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Завершенный"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Возобновить воспроизведение?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Версия GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Версия Adwaita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Версия GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Версия GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Медиаплеер для GNOME на базе GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Игорь Дятлов"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Окончание: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Неопределенный"
#: src/widget.js:242
msgid "Channels"
msgstr "Каналы"
#: src/widget.js:260
msgid "Disabled"
msgstr "Отключено"

438
po/sk.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2023-01-02 23:20\n"
"Last-Translator: \n"
"Language-Team: Slovak\n"
"Language: sk_SK\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: sk\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Otvoriť súbor…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Otvoriť URI…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Nastavenia"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Klávesové skratky"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "O programe Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Rýchlosť"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normálne"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Všeobecné"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Zobraziť klávesové skratky"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Na celú obrazovku"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Dvojité ťuknutie | Dvojité kliknutie"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Opustiť režim celej obrazovky"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Zobraziť OSD (iba v režime na celú obrazovku)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Ťuknutie"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Ukončiť"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Médiá"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Otvoriť súbory"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Otvoriť URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Zoznam skladieb"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Ďalšia položka"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Dvojité ťuknutie (pravá strana)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Predchádzajúca položka"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Dvojité ťuknutie (ľavá strana)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Zmeniť režim opakovania"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Exportovať do súboru"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Prehrávanie"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Vypnúť/zapnúť prehrávanie"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Dlhé ťuknutie | Klik pravým tlačidlom"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Pretočiť dopredu"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Potiahnutie doprava | Scrollovanie vpravo"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Pretočiť späť"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Potiahnutie doľava | Scrollovanie vľavo"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Zvýšiť hlasitosť"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Potiahnutie hore | Scrollovanie hore"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Znížiť hlasitosť"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Potiahnutie dole | Scrollovanie dole"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Vypnúť/zapnúť zvuk"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Ďalšia kapitola"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Predchádzajúca kapitola"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Dekodéry"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Späť do nastavení"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Správanie"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Automaticky na celú obrazovku"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Pri nahradení zoznamu skladieb prejsť do režimu na celú obrazovku (okrem plávajúceho módu)"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Spýtať sa na obnovenie prehrávania nedávnych médií"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Plávajúci režim na všetkých pracovných plochách"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Táto možnosť funguje iba v prostredí GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Po skončení prehrávania"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Nevykonať nič"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Zostať na poslednom snímku"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Zatvoriť aplikáciu"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Hlasitosť"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Vlastná počiatočná hodnota"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Nastaviť vlastnú hlasitosť pri spustení namiesto obnovenia predchádzajúcej hodnoty"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Percento hlasitosti"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Pretáčanie"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Režim"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Presné"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Rýchle"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Jednotka"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Sekunda"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Minúta"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Percento"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Hodnota"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Zvuk"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Posun v milisekundách"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Iba natívne formáty zvuku"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Titulky"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Predvolené písmo"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Sieť"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Klient"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Postupné sťahovanie do vyrovnávacej pamäte"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Server"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Ovládanie prehrávača na diaľku"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Použiť port"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Vyladenia"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Vzhľad"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Tmavý motív"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Vykresliť tiene okna"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Pre zvýšenie výkonu v režime okna vypnite túto možnosť"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Radenie zásuvných modulov"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Zmeniť predvolené radenie zásuvných modulov GStreameru"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "Použiť playbin3"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Vyžaduje sa reštart prehrávača"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Experimentálne"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "Použiť PipeWire pre zvukový výstup"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Dekodér: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Sem zadajte alebo potiahnite URI"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Zrušiť"
#: src/dialogs.js:158
msgid "Open"
msgstr "Otvoriť"
#: src/dialogs.js:226
msgid "Title"
msgstr "Názov"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Dokončené"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Pokračovať v prehrávaní?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Verzia GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Verzia Adwaita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Verzia GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Verzia GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Prehrávač médií pre prostredie GNOME postavený na GStreameri"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "tj314 <po-ca-hon-tas@tutanota.com>"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Končí o: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Neurčené"
#: src/widget.js:242
msgid "Channels"
msgstr "Kanály"
#: src/widget.js:260
msgid "Disabled"
msgstr "Vypnuté"

438
po/sr.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Serbian (Cyrillic)\n"
"Language: sr_SP\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: sr\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:97
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:107
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:153
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:157
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:168
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr ""
#: src/widget.js:242
msgid "Channels"
msgstr ""
#: src/widget.js:260
msgid "Disabled"
msgstr ""

438
po/sv.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2023-05-17 13:15\n"
"Last-Translator: \n"
"Language-Team: Swedish\n"
"Language: sv_SE\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: sv-SE\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Öppna filer…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "Öppna URI…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Inställningar"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Tangentbordsgenvägar"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Om Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Hastighet"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normal"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Allmänt"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Visa tangentbordsgenvägar"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Växla helskärmsläge"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Dubbeltryck | Dubbelklicka"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Lämna helskärmsläge"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Visa OSD (endast helskärmsläge)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Tryck"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Avsluta"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Media"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Öppna filer"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Öppna URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Spellista"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Nästa föremål"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Dubbeltryck (höger sida)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Föregående föremål"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Dubbeltryck (vänster sida)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Ändra upprepningsläge"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Exportera till fil"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Uppspelning"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Spela/pausa"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Långtryck | Högerklicka"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Spola framåt"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Svep höger | Skrolla höger"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Spola bakåt"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Svep vänster | Skrolla vänster"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Höj volymen"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Svep uppåt | Skrolla uppåt"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Sänk volymen"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Svep nedåt | Skrolla nedåt"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Växla ljudet på/av"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Nästa kapitel"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Föregående kapitel"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Avkodare"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Återgå till inställningarna"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Beteende"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Automatiskt helskärmsläge"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Växla till fullskärmsläge när en spellista ersätts, förutom i flytande läge"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Be att återuppta senaste media"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Flyt på alla arbetsytor"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Det här alternativet fungerar endast i GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Efter uppspelning"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Gör ingenting"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Frys sista bildruta"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Stäng appen"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Volym"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Anpassat startvärde"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Ställ in anpassad volym vid start istället för att återställa den"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Volymprocent"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Spolning"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Läge"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Riktig"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Snabbt"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Enhet"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Sekund"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Minut"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Procent"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Värde"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Ljud"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Förskjutning i millisekunder"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Endast inbyggda ljudformat"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Undertexter"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Standardteckensnitt"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Nätverk"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "Klient"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Progressiv nedladdningsbuffert"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Server"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Fjärrstyra spelaren"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Lyssningsport"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "Tweaks"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Utseende"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Mörkt Tema"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Rendera fönsterskuggor"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Inaktivera för att öka prestanda när fönsterläge är på"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Rangordning av plugin"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "Ändra standardrankningar för GStreamer-plugins"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "Använd playbin3"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Kräver omstart av spelaren"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Exprimentalt"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "Använd PipeWire för Ljudutgång"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Avkodare: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Ange eller släpp URI här"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Avbryt"
#: src/dialogs.js:158
msgid "Open"
msgstr "Öppna"
#: src/dialogs.js:226
msgid "Title"
msgstr "Titel"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Klar"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Återuppta uppspelningen?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "GTK version: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Adwaita version: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "GStreamer version: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "GJS version: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "En media spelare för GNOME som drivs av GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "SA ST (sastofficial)"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Slutar vid: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Obestämd"
#: src/widget.js:242
msgid "Channels"
msgstr "Kanaler"
#: src/widget.js:260
msgid "Disabled"
msgstr "Avstängd"

438
po/tr.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-06-25 12:42\n"
"Last-Translator: \n"
"Language-Team: Turkish\n"
"Language: tr_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"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: tr\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "Dosyaları Aç…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "URL Aç…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Tercihler"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Kısayollar"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Clapper Hakkında"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Hız"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "Normal"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "Genel"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Kısayolları göster"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Tam ekranı aç/kapat"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Çift dokun | Çift tıkla"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Tam ekrandan çık"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Pencere Düğmelerini Göster (yalnızca tam ekran)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Dokun"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Çık"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Ortam"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Dosyaları aç"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "URL Aç"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Oynatma listesi"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Sonraki öğe"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Çift tıkla (sağ tarafa)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Önceki öğe"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Çift tıkla (sol tarafa)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Yineleme kipini değiştir"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Dosyaya dışa aktar"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "Oynatma"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Oynatmayı başlat/durdur"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Uzun bas | Sağ tıkla"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "İleri sar"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Sağa sürükle | Sağa kaydır"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Geri sar"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Sola sürükle | Sola kaydır"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Sesi artır"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Yukarı sürükle | Yukarı kaydır"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Sesi kıs"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Aşağı sürükle | Aşağı kaydır"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Sesi kapat/aç"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Sonraki parça"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Önceki parça"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Çözücüler"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Tercihlere geri dön"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "Davranış"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "Otomatik tam ekran"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Yüzen kip dışında oynatma listesi değiştirildiğinde tam ekrana geç"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "Son ortamı devam ettirmeyi sor"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "Tüm çalışma alanlarının üstünde yüz"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "Bu seçenek sadece GNOME'da çalışır"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "Oynatma sonrası"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "Hiçbir şey yapma"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "Son kareyi dondur"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "Uygulamayı kapat"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "Ses"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "Özel başlangıç değeri"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "Başlangıçta sesi geri yüklemek yerine özel ses ayarla"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "Ses yüzdesi"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "Sarma"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "Kip"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "Hatasız"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "Hızlı"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "Birim"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "Saniye"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "Dakika"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "Yüzde"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "Değer"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "Ses"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "Milisaniye cinsinden solma süresi"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "Yalnızca yerel ses biçimleri"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "Altyazılar"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "Öntanımlı yazı tipi"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "Ağ"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "İstemci"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "Aşamalı indirme arabelleğe alma"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "Sunucu"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "Oynatıcıyı uzaktan denetle"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "Dinleme portu"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "İnce Ayarlar"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "Görünüm"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "Koyu tema"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "Pencere gölgelerini işle"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "Pencere açıldığında performansı artırmak için devre dışı bırak"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "Eklenti puanı"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "GStreamer eklentilerinin öntanımlı sıralarını değiştir"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "Playbin3 kullan"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "Çalıcının yeniden başlatılmasını gerektirir"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "Deneysel"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "Ses çıktısı için PipeWire kullan"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Çözücü: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Bağlantıyı buraya gir veya sürükle"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "İptal Et"
#: src/dialogs.js:158
msgid "Open"
msgstr "Aç"
#: src/dialogs.js:226
msgid "Title"
msgstr "Başlık"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Tamamlandı"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Oynatmaya devam edilsin mi?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "GTK sürümü: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Adwaita sürümü: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "GStreamer sürümü: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "GJS sürümü: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "GStreamer'dan gücünü alan bir GNOME ortam oynatıcısı"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Clapper Çevirilerine Katkıda Bulunan Herkese Çok Teşekkür Ederiz"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Bitiş: %s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "Belirsiz"
#: src/widget.js:242
msgid "Channels"
msgstr "Kanallar"
#: src/widget.js:260
msgid "Disabled"
msgstr "Devre dışı"

438
po/uk.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Ukrainian\n"
"Language: uk_UA\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: uk\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:97
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:107
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:153
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:157
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:168
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr ""
#: src/widget.js:242
msgid "Channels"
msgstr ""
#: src/widget.js:260
msgid "Disabled"
msgstr ""

438
po/vi.po
View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Vietnamese\n"
"Language: vi_VN\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: vi\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:97
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:107
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:153
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:157
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:168
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr ""
#: src/widget.js:242
msgid "Channels"
msgstr ""
#: src/widget.js:260
msgid "Disabled"
msgstr ""

View File

@@ -1,439 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-07-18 08:48\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: zh-CN\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr "打开文件…"
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr "打开 URI…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "首选项"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "快捷键"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "关于 Claper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "速度"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr "一般"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr "常规​​​​​"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "显示快捷键"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "切换全屏"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "轻击两次 | 双击"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "离开全屏"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "显示 OSD仅全屏"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "轻击"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "退出"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "媒体"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "打开文件"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "打开 URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "播放列表"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "下一项"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "双击(右侧)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "上一项"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "双击(左侧)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "更改循环模式"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "导出至文件"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr "播放"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "切换播放"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "长按 | 右键点击"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "快进"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "向右滑动 | 向右滚动"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "快退"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "向左滑动 | 向左滚动"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "提高音量"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "向上滑动 | 向上滚动"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "降低音量"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "向下滑动 | 向下滚动"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "切换静音"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "下一章节"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "上一章节"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "解码器"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "返回首选项"
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr "行为"
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr "自动全屏"
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "在播放列表被替换时进入全屏模式,除非悬浮模式"
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr "询问恢复播放最近的媒体"
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr "悬浮于所有工作区"
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr "此选项仅适用于 GNOME"
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr "播放结束后"
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr "不执行任何操作"
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr "停留在最后一帧"
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr "关闭应用程序"
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr "音量"
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr "自定义初始值"
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr "设置启动时的自定义音量而非恢复先前"
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr "音量百分比"
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr "定位播放"
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr "模式"
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr "精确"
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr "快速"
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr "单位"
#: ui/preferences-window.ui:97
msgid "Second"
msgstr "秒钟"
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr "分钟"
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr "百分比"
#: ui/preferences-window.ui:107
msgid "Value"
msgstr "值"
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr "音频"
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr "以毫秒为单位的偏移"
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr "仅原生音频格式"
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr "字幕"
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr "默认字体"
#: ui/preferences-window.ui:153
msgid "Network"
msgstr "网络"
#: ui/preferences-window.ui:157
msgid "Client"
msgstr "客户端"
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr "渐进式下载缓存"
#: ui/preferences-window.ui:168
msgid "Server"
msgstr "服务器"
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr "远程控制播放器"
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr "监听端口"
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr "调整"
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr "界面"
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr "暗色主题"
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr "渲染窗口阴影"
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr "禁用以提升窗口模式时的性能"
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr "插件等级"
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr "更改 GStreamer 插件的默认等级"
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr "使用 playbin3"
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr "需要重启播放器"
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr "实验性功能"
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr "使用 PipeWire 输出音频"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "解码器:%s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "输入或拖放 URI 到这里"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "取消"
#: src/dialogs.js:158
msgid "Open"
msgstr "打开"
#: src/dialogs.js:226
msgid "Title"
msgstr "标题"
#: src/dialogs.js:227
msgid "Completed"
msgstr "已播放"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "继续播放?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "GTK 版本:%s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Adwaita 版本:%s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "GStreamer 版本:%s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "GJS 版本:%s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "一款基于 GStreamer 的 GNOME 媒体播放器"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "刘韬\n"
"Tommy He"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "结束于:%s"
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr "未确定"
#: src/widget.js:242
msgid "Channels"
msgstr "声道"
#: src/widget.js:260
msgid "Disabled"
msgstr "禁用"

View File

@@ -1,438 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-26 18:41+0200\n"
"PO-Revision-Date: 2022-05-26 16:50\n"
"Last-Translator: \n"
"Language-Team: Chinese Traditional\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"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files…"
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI…"
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:82
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:11
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:118
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:15
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:18
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:25
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:31
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:32
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:38
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:43
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:55
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:58
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:63
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:74
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:77
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:83
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:92
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:97
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:107
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:122
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:125
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:132
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:140
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:143
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:153
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:157
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:160
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:168
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:171
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:175
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:188
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:192
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:195
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:201
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:202
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:213
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:214
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:219
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:220 ui/preferences-window.ui:229
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:222 ui/preferences-window.ui:231
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:226 src/widget.js:235 src/widget.js:241 src/widget.js:247
msgid "Undetermined"
msgstr ""
#: src/widget.js:242
msgid "Channels"
msgstr ""
#: src/widget.js:260
msgid "Disabled"
msgstr ""

View File

@@ -19,28 +19,27 @@
#include <glib/gi18n.h>
#include <gst/gst.h>
#include <clapper/clapper.h>
#include <adwaita.h>
#include "clapper-app-about-window.h"
#include "clapper-app-about-dialog.h"
GtkWidget *
clapper_app_about_window_new (GtkApplication *gtk_app)
clapper_app_about_dialog_new (void)
{
AdwAboutWindow *about;
GtkWindow *window;
AdwAboutDialog *about;
GString *string;
gchar *gst_ver, *debug_info;
about = ADW_ABOUT_WINDOW (adw_about_window_new_from_appdata (
about = ADW_ABOUT_DIALOG (adw_about_dialog_new_from_appdata (
CLAPPER_APP_RESOURCE_PREFIX "/data/metainfo/" CLAPPER_APP_ID ".metainfo.xml",
NULL));
window = gtk_application_get_active_window (gtk_app);
gtk_window_set_modal (GTK_WINDOW (about), TRUE);
gtk_window_set_transient_for (GTK_WINDOW (about), window);
/* Also show development versions */
adw_about_dialog_set_version (about, CLAPPER_VERSION_S);
/* TRANSLATORS: Put your name(s) here for credits or leave untranslated */
adw_about_window_set_translator_credits (about, _("translator-credits"));
adw_about_dialog_set_translator_credits (about, _("translator-credits"));
string = g_string_new (NULL);
@@ -62,7 +61,7 @@ clapper_app_about_window_new (GtkApplication *gtk_app)
g_free (gst_ver);
debug_info = g_string_free_and_steal (string);
adw_about_window_set_debug_info (about, debug_info);
adw_about_dialog_set_debug_info (about, debug_info);
g_free (debug_info);
return GTK_WIDGET (about);

View File

@@ -24,6 +24,6 @@
G_BEGIN_DECLS
G_GNUC_INTERNAL
GtkWidget * clapper_app_about_window_new (GtkApplication *gtk_app);
GtkWidget * clapper_app_about_dialog_new (void);
G_END_DECLS

View File

@@ -18,6 +18,7 @@
#include "config.h"
#include <math.h>
#include <glib/gi18n.h>
#include <gst/gst.h>
#include <clapper-gtk/clapper-gtk.h>
@@ -27,7 +28,7 @@
#include "clapper-app-uri-dialog.h"
#include "clapper-app-info-window.h"
#include "clapper-app-preferences-window.h"
#include "clapper-app-about-window.h"
#include "clapper-app-about-dialog.h"
#include "clapper-app-utils.h"
#define PERCENTAGE_ROUND(a) (round ((gdouble) a / 0.01) * 0.01)
@@ -40,10 +41,14 @@ struct _ClapperAppApplication
GtkApplication parent;
GSettings *settings;
GCancellable *cancellable;
gboolean need_init_state;
};
#define parent_class clapper_app_application_parent_class
G_DEFINE_TYPE (ClapperAppApplication, clapper_app_application, GTK_TYPE_APPLICATION);
struct ClapperPluginFeatureData
{
const gchar *name;
@@ -57,14 +62,159 @@ struct ClapperPluginData
struct ClapperPluginFeatureData features[10];
};
typedef struct
{
ClapperAppApplication *app;
guint id;
} ClapperAppWindowData;
typedef struct
{
const gchar *action;
const gchar *accels[3];
} ClapperAppShortcut;
#define parent_class clapper_app_application_parent_class
G_DEFINE_TYPE (ClapperAppApplication, clapper_app_application, GTK_TYPE_APPLICATION);
static gboolean
clapper_app_options_get (const gchar *key, const gchar *format, GVariantDict *options,
GObject *src_object, GSettings *settings, gpointer output)
{
if (options && g_variant_dict_lookup (options, key, format, output)) {
return TRUE;
} else if (src_object) {
g_object_get (src_object, key, output, NULL);
return TRUE;
} else if (settings) {
g_settings_get (settings, key, format, output);
return TRUE;
}
return FALSE;
}
static gboolean
clapper_app_options_get_extra (const gchar *key, GVariantDict *options,
const gchar *extra_value, GSettings *settings, gchar **output)
{
if (options && g_variant_dict_lookup (options, key, "s", output)) {
return TRUE;
} else if (extra_value) {
*output = g_strdup (extra_value);
return TRUE;
} else if (settings) {
*output = g_settings_get_string (settings, key);
/* Ensure non-empty string */
if (*output) {
if (strlen (*output) > 0)
return TRUE;
else
g_clear_pointer (output, g_free);
}
}
return FALSE;
}
/*
* Apply options to @dest_window. Option providers will be used in args order.
* If any arg is %NULL it will not be used. For example, passing %NULL as
* @settings will avoid restoring values to @dest_window from GSettings.
*/
static void
clapper_app_apply_options_to_window (ClapperAppWindow *dest_window, GVariantDict *options,
ClapperAppWindow *src_window, GSettings *settings)
{
ClapperPlayer *dest_player;
ClapperAppWindowExtraOptions *src_extra_opts = NULL, *dest_extra_opts = NULL;
GObject *src_player_obj = NULL;
GObject *src_queue_obj = NULL;
gchar *option_str;
gdouble option_dbl;
gint option_int;
gboolean option_bool;
GST_DEBUG ("Applying options to window: %p", dest_window);
dest_player = clapper_app_window_get_player (dest_window);
dest_extra_opts = clapper_app_window_get_extra_options (dest_window);
if (src_window) {
src_player_obj = (GObject *) clapper_app_window_get_player (src_window);
src_queue_obj = (GObject *) clapper_player_get_queue (CLAPPER_PLAYER_CAST (src_player_obj));
src_extra_opts = clapper_app_window_get_extra_options (src_window);
}
/* Apply player values, clamp them to be within allowed range */
if (clapper_app_options_get ("volume", "d", options, src_player_obj, settings, &option_dbl))
clapper_player_set_volume (dest_player, PERCENTAGE_ROUND (CLAMP (option_dbl, 0, 2.0)));
if (clapper_app_options_get ("mute", "b", NULL, src_player_obj, settings, &option_bool))
clapper_player_set_mute (dest_player, option_bool);
if (clapper_app_options_get ("speed", "d", options, src_player_obj, settings, &option_dbl))
clapper_player_set_speed (dest_player, PERCENTAGE_ROUND (CLAMP (option_dbl, 0.05, 2.0)));
if (clapper_app_options_get ("adaptive-start-bitrate", "i", options, src_player_obj, settings, &option_int))
clapper_player_set_adaptive_start_bitrate (dest_player, option_int);
if (clapper_app_options_get ("progression-mode", "i", options, src_queue_obj, settings, &option_int))
clapper_queue_set_progression_mode (clapper_player_get_queue (dest_player), CLAMP (option_int, 0, 4));
if (clapper_app_options_get ("subtitles-enabled", "b", NULL, src_player_obj, settings, &option_bool))
clapper_player_set_subtitles_enabled (dest_player, option_bool);
if (clapper_app_options_get_extra ("video-filter", options,
(src_extra_opts) ? src_extra_opts->video_filter : NULL, NULL, &option_str)) {
clapper_player_set_video_filter (dest_player, clapper_app_utils_make_element (option_str));
g_free (dest_extra_opts->video_filter);
dest_extra_opts->video_filter = option_str;
}
if (clapper_app_options_get_extra ("audio-filter", options,
(src_extra_opts) ? src_extra_opts->audio_filter : NULL, NULL, &option_str)) {
clapper_player_set_audio_filter (dest_player, clapper_app_utils_make_element (option_str));
g_free (dest_extra_opts->audio_filter);
dest_extra_opts->audio_filter = option_str;
}
if (clapper_app_options_get_extra ("video-sink", options,
(src_extra_opts) ? src_extra_opts->video_sink : NULL, NULL, &option_str)) {
clapper_player_set_video_sink (dest_player, clapper_app_utils_make_element (option_str));
g_free (dest_extra_opts->video_sink);
dest_extra_opts->video_sink = option_str;
}
if (clapper_app_options_get_extra ("audio-sink", options,
(src_extra_opts) ? src_extra_opts->audio_sink : NULL, NULL, &option_str)) {
clapper_player_set_audio_sink (dest_player, clapper_app_utils_make_element (option_str));
g_free (dest_extra_opts->audio_sink);
dest_extra_opts->audio_sink = option_str;
}
/* Apply window options */
if ((options && g_variant_dict_contains (options, "fullscreen"))
|| (settings && g_settings_get_boolean (settings, "fullscreened")))
gtk_window_fullscreen (GTK_WINDOW (dest_window));
else if (settings && g_settings_get_boolean (settings, "maximized"))
gtk_window_maximize (GTK_WINDOW (dest_window));
GST_DEBUG ("Options applied");
}
static inline void
_store_settings_from_window (ClapperAppApplication *self, ClapperAppWindow *app_window)
{
ClapperPlayer *player = clapper_app_window_get_player (app_window);
ClapperQueue *queue = clapper_player_get_queue (player);
GtkWindow *window = GTK_WINDOW (app_window);
GST_DEBUG ("Storing current configuration to GSettings");
g_settings_set_double (self->settings, "volume", clapper_player_get_volume (player));
g_settings_set_boolean (self->settings, "mute", clapper_player_get_mute (player));
g_settings_set_double (self->settings, "speed", clapper_player_get_speed (player));
g_settings_set_int (self->settings, "adaptive-start-bitrate",
CLAMP (clapper_player_get_adaptive_bandwidth (player) * 0.8, 0, G_MAXINT));
g_settings_set_boolean (self->settings, "subtitles-enabled", clapper_player_get_subtitles_enabled (player));
g_settings_set_int (self->settings, "progression-mode", clapper_queue_get_progression_mode (queue));
g_settings_set_boolean (self->settings, "maximized", gtk_window_is_maximized (window));
g_settings_set_boolean (self->settings, "fullscreened", gtk_window_is_fullscreen (window));
GST_DEBUG ("Configuration stored");
}
static inline void
_set_initial_plugin_feature_ranks (void)
@@ -174,6 +324,19 @@ _assemble_initial_state (GtkWindow *window)
g_object_unref (builder);
}
static void
_show_error_dialog (GError *error, GtkWindow *parent)
{
AdwDialog *dialog;
dialog = adw_alert_dialog_new ("Error", error->message);
adw_alert_dialog_add_response (ADW_ALERT_DIALOG (dialog), "close", _("Close"));
adw_alert_dialog_set_default_response (ADW_ALERT_DIALOG (dialog), "close");
adw_alert_dialog_set_close_response (ADW_ALERT_DIALOG (dialog), "close");
adw_dialog_present (dialog, GTK_WIDGET (parent));
}
static void
add_files (GSimpleAction *action, GVariant *param, gpointer user_data)
{
@@ -190,6 +353,43 @@ add_uri (GSimpleAction *action, GVariant *param, gpointer user_data)
clapper_app_uri_dialog_open_uri (gtk_app);
}
static void
clear_queue (GSimpleAction *action, GVariant *param, gpointer user_data)
{
GtkApplication *gtk_app = GTK_APPLICATION (user_data);
GtkWindow *window = gtk_application_get_active_window (gtk_app);
ClapperPlayer *player;
ClapperQueue *queue;
while (window && !CLAPPER_APP_IS_WINDOW (window))
window = gtk_window_get_transient_for (window);
player = clapper_app_window_get_player (CLAPPER_APP_WINDOW (window));
queue = clapper_player_get_queue (player);
clapper_queue_clear (queue);
}
static void
new_window (GSimpleAction *action, GVariant *param, gpointer user_data)
{
GtkApplication *gtk_app = GTK_APPLICATION (user_data);
GtkWidget *stack = gtk_window_get_child (gtk_application_get_active_window (gtk_app));
const gchar *child_name = gtk_stack_get_visible_child_name (GTK_STACK (stack));
/* Do not allow to open new windows during initial state,
* there already is a free one to use */
if (g_strcmp0 (child_name, "initial_state") != 0) {
ClapperAppWindow *src_window, *dest_window;
src_window = CLAPPER_APP_WINDOW_CAST (gtk_application_get_active_window (gtk_app));
dest_window = CLAPPER_APP_WINDOW_CAST (clapper_app_window_new (gtk_app));
clapper_app_apply_options_to_window (dest_window, NULL, src_window, NULL);
gtk_window_present (GTK_WINDOW (dest_window));
}
}
static void
show_preferences (GSimpleAction *action, GVariant *param, gpointer user_data)
{
@@ -215,57 +415,112 @@ show_info (GSimpleAction *action, GVariant *param, gpointer user_data)
gtk_window_present (GTK_WINDOW (info_window));
}
static void
_launch_pipeline_cb (GtkFileLauncher *launcher,
GAsyncResult *res, ClapperAppWindowData *win_data)
{
GError *error = NULL;
if (!gtk_file_launcher_launch_finish (launcher, res, &error)) {
if (error->domain != GTK_DIALOG_ERROR || error->code != GTK_DIALOG_ERROR_DISMISSED) {
GtkWindow *window;
GST_ERROR ("Could not launch pipeline preview, reason: %s",
GST_STR_NULL (error->message));
if ((window = gtk_application_get_window_by_id (
GTK_APPLICATION (win_data->app), win_data->id)))
_show_error_dialog (error, window);
}
g_error_free (error);
}
g_free (win_data);
}
static void
_show_pipeline_cb (GObject *source G_GNUC_UNUSED,
GAsyncResult *res, ClapperAppWindowData *win_data)
{
GTask *task = G_TASK (res);
GtkWindow *window;
GFile *svg_file;
GError *error = NULL;
svg_file = (GFile *) g_task_propagate_pointer (task, &error);
window = gtk_application_get_window_by_id (
GTK_APPLICATION (win_data->app), win_data->id);
if (error) {
if (error->domain != G_IO_ERROR || error->code != G_IO_ERROR_CANCELLED) {
GST_ERROR ("Could not create pipeline graph file, reason: %s",
GST_STR_NULL (error->message));
if (window)
_show_error_dialog (error, window);
}
g_error_free (error);
g_free (win_data);
return;
}
if (window) {
GtkFileLauncher *launcher = gtk_file_launcher_new (svg_file);
#if GTK_CHECK_VERSION(4,12,0)
gtk_file_launcher_set_always_ask (launcher, TRUE);
#endif
gtk_file_launcher_launch (launcher, window, NULL,
(GAsyncReadyCallback) _launch_pipeline_cb, win_data);
g_object_unref (launcher);
} else {
g_free (win_data);
}
g_object_unref (svg_file);
}
static void
show_pipeline (GSimpleAction *action, GVariant *param, gpointer user_data)
{
ClapperAppApplication *self = CLAPPER_APP_APPLICATION_CAST (user_data);
GtkApplication *gtk_app = GTK_APPLICATION (self);
GtkWindow *window;
ClapperAppWindowData *win_data;
window = gtk_application_get_active_window (gtk_app);
while (window && !CLAPPER_APP_IS_WINDOW (window))
window = gtk_window_get_transient_for (window);
if (G_UNLIKELY (window == NULL))
return;
if (self->cancellable) {
g_cancellable_cancel (self->cancellable);
g_object_unref (self->cancellable);
}
self->cancellable = g_cancellable_new ();
win_data = g_new (ClapperAppWindowData, 1);
win_data->app = self;
win_data->id = gtk_application_window_get_id (GTK_APPLICATION_WINDOW (window));
clapper_app_utils_create_pipeline_svg_file_async (
clapper_app_window_get_player (CLAPPER_APP_WINDOW (window)),
self->cancellable, (GAsyncReadyCallback) _show_pipeline_cb, win_data);
}
static void
show_about (GSimpleAction *action, GVariant *param, gpointer user_data)
{
GtkApplication *gtk_app = GTK_APPLICATION (user_data);
GtkWidget *about_window;
GtkWindow *window;
GtkWidget *about_dialog;
about_window = clapper_app_about_window_new (gtk_app);
gtk_window_present (GTK_WINDOW (about_window));
}
static inline void
_restore_settings_to_window (ClapperAppApplication *self, ClapperAppWindow *app_window)
{
ClapperPlayer *player = clapper_app_window_get_player (app_window);
ClapperQueue *queue = clapper_player_get_queue (player);
GST_DEBUG ("Restoring saved GSettings values to: %" GST_PTR_FORMAT, app_window);
clapper_player_set_volume (player, PERCENTAGE_ROUND (g_settings_get_double (self->settings, "volume")));
clapper_player_set_mute (player, g_settings_get_boolean (self->settings, "mute"));
clapper_player_set_speed (player, PERCENTAGE_ROUND (g_settings_get_double (self->settings, "speed")));
clapper_player_set_subtitles_enabled (player, g_settings_get_boolean (self->settings, "subtitles-enabled"));
clapper_queue_set_progression_mode (queue, g_settings_get_int (self->settings, "progression-mode"));
if (g_settings_get_boolean (self->settings, "fullscreened"))
gtk_window_fullscreen (GTK_WINDOW (app_window));
else if (g_settings_get_boolean (self->settings, "maximized"))
gtk_window_maximize (GTK_WINDOW (app_window));
GST_DEBUG ("Configuration restored");
}
static inline void
_store_settings_from_window (ClapperAppApplication *self, ClapperAppWindow *app_window)
{
ClapperPlayer *player = clapper_app_window_get_player (app_window);
ClapperQueue *queue = clapper_player_get_queue (player);
GtkWindow *window = GTK_WINDOW (app_window);
GST_DEBUG ("Storing current configuration to GSettings");
g_settings_set_double (self->settings, "volume", clapper_player_get_volume (player));
g_settings_set_boolean (self->settings, "mute", clapper_player_get_mute (player));
g_settings_set_double (self->settings, "speed", clapper_player_get_speed (player));
g_settings_set_boolean (self->settings, "subtitles-enabled", clapper_player_get_subtitles_enabled (player));
g_settings_set_int (self->settings, "progression-mode", clapper_queue_get_progression_mode (queue));
g_settings_set_boolean (self->settings, "maximized", gtk_window_is_maximized (window));
g_settings_set_boolean (self->settings, "fullscreened", gtk_window_is_fullscreen (window));
GST_DEBUG ("Configuration stored");
window = gtk_application_get_active_window (gtk_app);
about_dialog = clapper_app_about_dialog_new ();
adw_dialog_present (ADW_DIALOG (about_dialog), GTK_WIDGET (window));
}
GApplication *
@@ -273,7 +528,7 @@ clapper_app_application_new (void)
{
return g_object_new (CLAPPER_APP_TYPE_APPLICATION,
"application-id", CLAPPER_APP_ID,
"flags", G_APPLICATION_HANDLES_OPEN,
"flags", G_APPLICATION_HANDLES_OPEN | G_APPLICATION_HANDLES_COMMAND_LINE,
NULL);
}
@@ -306,14 +561,18 @@ static void
clapper_app_application_activate (GApplication *app)
{
ClapperAppApplication *self = CLAPPER_APP_APPLICATION_CAST (app);
GtkApplication *gtk_app = GTK_APPLICATION (app);
GtkWindow *window;
GST_INFO ("Activate");
G_APPLICATION_CLASS (parent_class)->activate (app);
if (!(window = gtk_application_get_active_window (GTK_APPLICATION (app)))) {
window = GTK_WINDOW (clapper_app_window_new (GTK_APPLICATION (app)));
_restore_settings_to_window (self, CLAPPER_APP_WINDOW_CAST (window));
/* When activated through DBus command line does not run,
* so create our first window here instead */
if (!(window = gtk_application_get_active_window (gtk_app))) {
window = GTK_WINDOW (clapper_app_window_new (gtk_app));
clapper_app_apply_options_to_window (CLAPPER_APP_WINDOW_CAST (window),
NULL, NULL, self->settings);
}
if (self->need_init_state) {
@@ -331,6 +590,8 @@ clapper_app_application_local_command_line (GApplication *app,
gchar **argv = *arguments;
guint i;
GST_INFO ("Handling local command line");
/* NOTE: argv is never NULL, so no need to check */
for (i = 0; argv[i]; ++i) {
@@ -344,16 +605,41 @@ clapper_app_application_local_command_line (GApplication *app,
return G_APPLICATION_CLASS (parent_class)->local_command_line (app, arguments, exit_status);
}
static gboolean
_is_claps_file (GFile *file)
static gint
clapper_app_application_command_line (GApplication *app, GApplicationCommandLine *cmd_line)
{
gchar *basename = g_file_get_basename (file);
gboolean is_claps;
ClapperAppApplication *self = CLAPPER_APP_APPLICATION_CAST (app);
ClapperAppWindow *src_window = NULL, *dest_window = NULL;
GtkApplication *gtk_app = GTK_APPLICATION (app);
GVariantDict *options;
GFile **files = NULL;
GSettings *settings;
gint n_files = 0;
is_claps = (basename && g_str_has_suffix (basename, ".claps"));
g_free (basename);
GST_INFO ("Handling command line");
return is_claps;
options = g_application_command_line_get_options_dict (cmd_line);
dest_window = CLAPPER_APP_WINDOW_CAST (gtk_application_get_active_window (gtk_app));
/* Restore settings only once by making them %NULL when run again */
settings = (!dest_window) ? self->settings : NULL;
if (!dest_window || g_variant_dict_contains (options, "new-window")) {
src_window = dest_window;
dest_window = CLAPPER_APP_WINDOW_CAST (clapper_app_window_new (gtk_app));
}
clapper_app_apply_options_to_window (dest_window, options, src_window, settings);
if (clapper_app_utils_files_from_command_line (cmd_line, &files, &n_files)) {
g_application_open (app, files, n_files,
(g_variant_dict_contains (options, "enqueue")) ? "add-only" : "");
clapper_app_utils_files_free (files);
} else {
g_application_activate (app);
}
return EXIT_SUCCESS;
}
static void
@@ -368,51 +654,6 @@ add_item_from_file (GFile *file, ClapperQueue *queue)
gst_object_unref (item);
}
static void
add_items_from_claps_file (GFile *file, ClapperQueue *queue)
{
GDataInputStream *dstream = NULL;
GFileInputStream *stream;
GError *error = NULL;
gchar *line;
if (!(stream = g_file_read (file, NULL, &error)))
goto finish;
dstream = g_data_input_stream_new (G_INPUT_STREAM (stream));
while ((line = g_data_input_stream_read_line (
dstream, NULL, NULL, &error))) {
g_strstrip (line);
if (strlen (line) > 0) {
GFile *tmp_file = gst_uri_is_valid (line)
? g_file_new_for_uri (line)
: g_file_new_for_path (line);
if (_is_claps_file (tmp_file))
add_items_from_claps_file (tmp_file, queue);
else
add_item_from_file (tmp_file, queue);
g_object_unref (tmp_file);
}
g_free (line);
}
finish:
if (error) {
GST_ERROR ("Could not read \".claps\" file, reason: %s", error->message);
g_error_free (error);
}
if (stream) {
g_input_stream_close (G_INPUT_STREAM (stream), NULL, NULL);
g_object_unref (stream);
}
g_clear_object (&dstream);
}
static void
add_item_with_subtitles (GFile *media_file,
GFile *subs_file, ClapperQueue *queue)
@@ -481,12 +722,8 @@ clapper_app_application_open (GApplication *app,
if (!handled) {
gint i;
for (i = 0; i < n_files; ++i) {
if (_is_claps_file (files[i]))
add_items_from_claps_file (files[i], queue);
else
add_item_from_file (files[i], queue);
}
for (i = 0; i < n_files; ++i)
add_item_from_file (files[i], queue);
}
add_only = (g_strcmp0 (hint, "add-only") == 0);
@@ -512,22 +749,43 @@ clapper_app_application_constructed (GObject *object)
GApplication *app = G_APPLICATION (self);
guint i;
static const GActionEntry app_entries[] = {
const GOptionEntry app_options[] = {
{ "new-window", 'n', 0, G_OPTION_ARG_NONE, NULL, _("Create a new window"), NULL },
{ "enqueue", 0, 0, G_OPTION_ARG_NONE, NULL, _("Add media to queue in primary application instance"), NULL },
{ "volume", 0, 0, G_OPTION_ARG_DOUBLE, NULL, _("Audio volume to set (0 - 2.0 range)"), NULL },
{ "speed", 0, 0, G_OPTION_ARG_DOUBLE, NULL, _("Playback speed to set (0.05 - 2.0 range)"), NULL },
{ "adaptive-start-bitrate", 0, 0, G_OPTION_ARG_INT, NULL, _("Initial bitrate for adaptive streaming"), NULL },
{ "progression-mode", 0, 0, G_OPTION_ARG_INT, NULL, _("Initial queue progression mode (0=none, 1=consecutive, 2=repeat-item, 3=carousel, 4=shuffle)"), NULL },
{ "fullscreen", 'f', 0, G_OPTION_ARG_NONE, NULL, _("Set window to be fullscreen"), NULL },
{ "video-filter", 0, 0, G_OPTION_ARG_STRING, NULL, _("Video filter to use (\"none\" to disable)"), NULL },
{ "audio-filter", 0, 0, G_OPTION_ARG_STRING, NULL, _("Audio filter to use (\"none\" to disable)"), NULL },
{ "video-sink", 0, 0, G_OPTION_ARG_STRING, NULL, _("Video sink to use"), NULL },
{ "audio-sink", 0, 0, G_OPTION_ARG_STRING, NULL, _("Audio sink to use"), NULL },
{ NULL }
};
static const GActionEntry app_actions[] = {
{ "add-files", add_files, NULL, NULL, NULL },
{ "add-uri", add_uri, NULL, NULL, NULL },
{ "clear-queue", clear_queue, NULL, NULL, NULL },
{ "new-window", new_window, NULL, NULL, NULL },
{ "info", show_info, NULL, NULL, NULL },
{ "pipeline", show_pipeline, NULL, NULL, NULL },
{ "preferences", show_preferences, NULL, NULL, NULL },
{ "about", show_about, NULL, NULL, NULL },
};
static const ClapperAppShortcut app_shortcuts[] = {
{ "app.add-files", { "<Control>o", NULL, NULL }},
{ "app.add-uri", { "<Control>u", NULL, NULL }},
{ "app.new-window", { "<Control>n", NULL, NULL }},
{ "app.info", { "<Control>i", NULL, NULL }},
{ "app.pipeline", { "<Control><Shift>p", NULL, NULL }},
{ "app.preferences", { "<Control>comma", NULL, NULL }},
{ "app.about", { "F1", NULL, NULL }},
{ "win.toggle-fullscreen", { "F11", "f", NULL }},
{ "win.unfullscreen", { "Escape", NULL, NULL }},
{ "win.auto-resize", { "<Super>r", NULL, NULL }},
{ "win.show-help-overlay", { "<Control>question", NULL, NULL }},
{ "window.close", { "<Control>q", NULL, NULL }},
{ "window.close", { "<Control>q", "q", NULL }},
};
/* Override initial ranks, they will be updated
@@ -542,16 +800,32 @@ clapper_app_application_constructed (GObject *object)
plugin_feature_ranks_settings_changed_cb (self->settings, NULL, NULL);
g_action_map_add_action_entries (G_ACTION_MAP (app),
app_entries, G_N_ELEMENTS (app_entries), app);
app_actions, G_N_ELEMENTS (app_actions), app);
for (i = 0; i < G_N_ELEMENTS (app_shortcuts); ++i)
gtk_application_set_accels_for_action (GTK_APPLICATION (app), app_shortcuts[i].action, app_shortcuts[i].accels);
g_application_set_option_context_parameter_string (app, "[URI1|FILE1] [URI2|FILE2] …");
g_application_add_main_option_entries (app, app_options);
g_application_add_option_group (app, gst_init_get_option_group ());
G_OBJECT_CLASS (parent_class)->constructed (object);
}
static void
clapper_app_application_dispose (GObject *object)
{
ClapperAppApplication *self = CLAPPER_APP_APPLICATION_CAST (object);
if (self->cancellable) {
g_cancellable_cancel (self->cancellable);
g_clear_object (&self->cancellable);
}
G_OBJECT_CLASS (parent_class)->dispose (object);
}
static void
clapper_app_application_finalize (GObject *object)
{
@@ -575,11 +849,13 @@ clapper_app_application_class_init (ClapperAppApplicationClass *klass)
"Clapper App Application");
gobject_class->constructed = clapper_app_application_constructed;
gobject_class->dispose = clapper_app_application_dispose;
gobject_class->finalize = clapper_app_application_finalize;
gtk_application_class->window_removed = clapper_app_application_window_removed;
application_class->activate = clapper_app_application_activate;
application_class->local_command_line = clapper_app_application_local_command_line;
application_class->command_line = clapper_app_application_command_line;
application_class->open = clapper_app_application_open;
}

View File

@@ -19,6 +19,7 @@
#include <glib.h>
#include <glib-object.h>
#include <gio/gio.h>
#include <gtk/gtk.h>
G_BEGIN_DECLS

View File

@@ -72,6 +72,43 @@ _open_subtitles_cb (GtkFileDialog *dialog, GAsyncResult *result, ClapperMediaIte
gst_object_unref (item); // Borrowed reference
}
static void
_on_select_file_dir_finish (GFile *file, AdwActionRow *action_row, GError *error)
{
if (G_LIKELY (error == NULL)) {
gchar *path = g_file_get_path (file);
adw_action_row_set_subtitle (action_row, path);
g_free (path);
} else {
if (error->domain != GTK_DIALOG_ERROR || error->code != GTK_DIALOG_ERROR_DISMISSED) {
g_printerr ("Error: %s\n",
(error->message) ? error->message : "Could not open file dialog");
}
g_error_free (error);
}
g_clear_object (&file);
g_object_unref (action_row); // Borrowed reference
}
static void
_select_file_cb (GtkFileDialog *dialog, GAsyncResult *result, AdwActionRow *action_row)
{
GError *error = NULL;
GFile *file = gtk_file_dialog_open_finish (dialog, result, &error);
_on_select_file_dir_finish (file, action_row, error);
}
static void
_select_dir_cb (GtkFileDialog *dialog, GAsyncResult *result, AdwActionRow *action_row)
{
GError *error = NULL;
GFile *file = gtk_file_dialog_select_folder_finish (dialog, result, &error);
_on_select_file_dir_finish (file, action_row, error);
}
static void
_dialog_add_mime_types (GtkFileDialog *dialog, const gchar *filter_name,
const gchar *const *mime_types)
@@ -80,8 +117,15 @@ _dialog_add_mime_types (GtkFileDialog *dialog, const gchar *filter_name,
GtkFileFilter *filter = gtk_file_filter_new ();
guint i;
for (i = 0; mime_types[i]; ++i)
/* XXX: Windows does not support mime-types file
* filters, so use file extensions instead */
for (i = 0; mime_types[i]; ++i) {
#ifndef G_OS_WIN32
gtk_file_filter_add_mime_type (filter, mime_types[i]);
#else
gtk_file_filter_add_suffix (filter, mime_types[i]);
#endif
}
gtk_file_filter_set_name (filter, filter_name);
g_list_store_append (filters, filter);
@@ -99,7 +143,11 @@ clapper_app_file_dialog_open_files (GtkApplication *gtk_app)
GtkFileDialog *dialog = gtk_file_dialog_new ();
_dialog_add_mime_types (dialog, "Media Files",
#ifndef G_OS_WIN32
clapper_app_utils_get_mime_types ());
#else
clapper_app_utils_get_extensions ());
#endif
gtk_file_dialog_set_modal (dialog, TRUE);
gtk_file_dialog_set_title (dialog, "Add Files");
@@ -118,7 +166,11 @@ clapper_app_file_dialog_open_subtitles (GtkApplication *gtk_app, ClapperMediaIte
GtkFileDialog *dialog = gtk_file_dialog_new ();
_dialog_add_mime_types (dialog, "Subtitles",
#ifndef G_OS_WIN32
clapper_app_utils_get_subtitles_mime_types ());
#else
clapper_app_utils_get_subtitles_extensions ());
#endif
gtk_file_dialog_set_modal (dialog, TRUE);
gtk_file_dialog_set_title (dialog, "Open Subtitles");
@@ -129,3 +181,35 @@ clapper_app_file_dialog_open_subtitles (GtkApplication *gtk_app, ClapperMediaIte
g_object_unref (dialog);
}
void
clapper_app_file_dialog_select_prefs_file (GtkApplication *gtk_app, AdwActionRow *action_row)
{
GtkWindow *window = gtk_application_get_active_window (gtk_app);
GtkFileDialog *dialog = gtk_file_dialog_new ();
gtk_file_dialog_set_modal (dialog, TRUE);
gtk_file_dialog_set_title (dialog, "Select File");
gtk_file_dialog_open (dialog, window, NULL,
(GAsyncReadyCallback) _select_file_cb,
g_object_ref (action_row));
g_object_unref (dialog);
}
void
clapper_app_file_dialog_select_prefs_dir (GtkApplication *gtk_app, AdwActionRow *action_row)
{
GtkWindow *window = gtk_application_get_active_window (gtk_app);
GtkFileDialog *dialog = gtk_file_dialog_new ();
gtk_file_dialog_set_modal (dialog, TRUE);
gtk_file_dialog_set_title (dialog, "Select Folder");
gtk_file_dialog_select_folder (dialog, window, NULL,
(GAsyncReadyCallback) _select_dir_cb,
g_object_ref (action_row));
g_object_unref (dialog);
}

View File

@@ -19,6 +19,7 @@
#include <glib.h>
#include <gtk/gtk.h>
#include <adwaita.h>
#include <clapper/clapper.h>
G_BEGIN_DECLS
@@ -29,4 +30,10 @@ void clapper_app_file_dialog_open_files (GtkApplication *gtk_app);
G_GNUC_INTERNAL
void clapper_app_file_dialog_open_subtitles (GtkApplication *gtk_app, ClapperMediaItem *item);
G_GNUC_INTERNAL
void clapper_app_file_dialog_select_prefs_file (GtkApplication *gtk_app, AdwActionRow *action_row);
G_GNUC_INTERNAL
void clapper_app_file_dialog_select_prefs_dir (GtkApplication *gtk_app, AdwActionRow *action_row);
G_END_DECLS

View File

@@ -36,6 +36,8 @@ struct _ClapperAppInfoWindow
GtkWidget *astreams_list;
GtkWidget *sstreams_list;
GtkWidget *pipeline_button;
ClapperPlayer *player;
};
@@ -89,6 +91,48 @@ playback_decoder_closure (ClapperAppInfoWindow *self, GstElement *decoder)
return text;
}
static gchar *
playback_sink_closure (ClapperAppInfoWindow *self, GstElement *sink)
{
GstElementFactory *factory;
GParamSpec *pspec;
gchar *text, *el_name, *child_name = NULL;
if (!sink || !(factory = gst_element_get_factory (sink)))
return NULL;
el_name = gst_object_get_name (GST_OBJECT_CAST (factory));
/* We want to show actual sink if it is configurable
* through a property (e.g. sink of "glsinkbin") */
if (GST_IS_BIN (sink)
&& ((pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (sink), "video-sink"))
|| (pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (sink), "sink")))
&& pspec->value_type == GST_TYPE_ELEMENT) {
GstElement *child = NULL;
GstElementFactory *child_factory;
g_object_get (sink, pspec->name, &child, NULL);
if (child) {
if ((child_factory = gst_element_get_factory (child)))
child_name = gst_object_get_name (GST_OBJECT_CAST (child_factory));
gst_object_unref (child);
}
}
if (child_name) {
text = g_strdup_printf ("%s + %s", el_name, child_name);
g_free (el_name);
g_free (child_name);
} else {
text = el_name;
}
return text;
}
static GtkSelectionModel *
create_no_selection_closure (ClapperAppInfoWindow *self, ClapperStreamList *stream_list)
{
@@ -101,6 +145,15 @@ has_streams_closure (ClapperAppInfoWindow *self, guint n_streams)
return (n_streams > 0);
}
static gboolean
close_cb (GtkWidget *widget, GVariant *args G_GNUC_UNUSED,
gpointer user_data G_GNUC_UNUSED)
{
gtk_window_close (GTK_WINDOW (widget));
return TRUE;
}
GtkWidget *
clapper_app_info_window_new (GtkApplication *gtk_app, ClapperPlayer *player)
{
@@ -123,6 +176,10 @@ clapper_app_info_window_init (ClapperAppInfoWindow *self)
gtk_widget_remove_css_class (self->vstreams_list, "view");
gtk_widget_remove_css_class (self->astreams_list, "view");
gtk_widget_remove_css_class (self->sstreams_list, "view");
#ifdef HAVE_GRAPHVIZ
gtk_widget_set_visible (self->pipeline_button, TRUE);
#endif
}
static void
@@ -200,13 +257,17 @@ clapper_app_info_window_class_init (ClapperAppInfoWindowClass *klass)
g_object_class_install_properties (gobject_class, PROP_LAST, param_specs);
gtk_widget_class_add_binding (widget_class, GDK_KEY_Escape, 0, close_cb, NULL);
gtk_widget_class_bind_template_child (widget_class, ClapperAppInfoWindow, vstreams_list);
gtk_widget_class_bind_template_child (widget_class, ClapperAppInfoWindow, astreams_list);
gtk_widget_class_bind_template_child (widget_class, ClapperAppInfoWindow, sstreams_list);
gtk_widget_class_bind_template_child (widget_class, ClapperAppInfoWindow, pipeline_button);
gtk_widget_class_bind_template_callback (widget_class, media_duration_closure);
gtk_widget_class_bind_template_callback (widget_class, playback_element_name_closure);
gtk_widget_class_bind_template_callback (widget_class, playback_decoder_closure);
gtk_widget_class_bind_template_callback (widget_class, playback_sink_closure);
gtk_widget_class_bind_template_callback (widget_class, create_no_selection_closure);
gtk_widget_class_bind_template_callback (widget_class, has_streams_closure);
}

View File

@@ -21,18 +21,26 @@
#include <gtk/gtk.h>
#include <clapper/clapper.h>
#include "clapper-app-internal-visibility.h"
G_BEGIN_DECLS
CLAPPER_APP_INTERNAL_API
gchar * clapper_app_list_item_make_stream_group_title (GtkListItem *list_item, ClapperStream *stream);
CLAPPER_APP_INTERNAL_API
gchar * clapper_app_list_item_make_resolution (GtkListItem *list_item, gint width, gint height);
CLAPPER_APP_INTERNAL_API
gchar * clapper_app_list_item_make_bitrate (GtkListItem *list_item, guint value);
CLAPPER_APP_INTERNAL_API
gchar * clapper_app_list_item_convert_int (GtkListItem *list_item, gint value);
CLAPPER_APP_INTERNAL_API
gchar * clapper_app_list_item_convert_uint (GtkListItem *list_item, guint value);
CLAPPER_APP_INTERNAL_API
gchar * clapper_app_list_item_convert_double (GtkListItem *list_item, gdouble value);
G_END_DECLS

View File

@@ -23,6 +23,7 @@
#include "clapper-app-preferences-window.h"
#include "clapper-app-application.h"
#include "clapper-app-file-dialog.h"
#include "clapper-app-utils.h"
#define GST_CAT_DEFAULT clapper_app_preferences_window_debug
@@ -41,6 +42,14 @@ struct _ClapperAppPreferencesWindow
AdwSpinRow *subtitle_offset_spin_row;
GtkFontDialogButton *font_dialog_button;
GtkStack *enhancers_stack;
GtkWidget *browse_enhancers_page;
GtkWidget *no_enhancers_page;
AdwNavigationPage *enhancers_subpage;
AdwComboRow *enhancers_combo_row;
AdwPreferencesGroup *enhancer_config_group;
AdwNavigationPage *plugins_subpage;
AdwComboRow *plugins_combo_row;
AdwComboRow *features_combo_row;
@@ -48,6 +57,8 @@ struct _ClapperAppPreferencesWindow
GSettings *settings;
GList *enhancer_pspec_rows;
GList *features;
GtkStringList *plugins_list;
@@ -67,6 +78,19 @@ typedef struct
gboolean updated;
} ClapperAppPreferencesIterRanksData;
typedef struct
{
GSettings *settings;
const gchar *key;
} ClapperAppPreferencesResetData;
typedef struct
{
GSettings *settings;
GParamSpec *pspec;
guint flag;
} ClapperAppPreferencesFlagMapData;
enum
{
PROP_0,
@@ -76,6 +100,347 @@ enum
static GParamSpec *param_specs[PROP_LAST] = { NULL, };
static void
_flag_map_data_free (ClapperAppPreferencesFlagMapData *data)
{
GST_TRACE ("Destroying flag map data: %p", data);
g_object_unref (data->settings);
g_free (data);
}
static void
_reset_button_closure (ClapperAppPreferencesResetData *data, GClosure *closure)
{
GST_TRACE ("Destroying reset button data: %p", data);
g_object_unref (data->settings);
g_free (data);
}
static void
_reset_button_clicked_cb (GtkButton *button, ClapperAppPreferencesResetData *data)
{
g_settings_reset (data->settings, data->key);
}
static void
file_selection_row_activated_cb (AdwActionRow *action_row, GParamSpec *pspec)
{
GtkApplication *gtk_app;
GtkWidget *window;
if (!(window = gtk_widget_get_ancestor (GTK_WIDGET (action_row), GTK_TYPE_WINDOW))) {
GST_ERROR ("Could not get a hold of parent window");
return;
}
gtk_app = gtk_window_get_application (GTK_WINDOW (window));
if (pspec->flags & CLAPPER_ENHANCER_PARAM_FILEPATH)
clapper_app_file_dialog_select_prefs_file (gtk_app, action_row);
else
clapper_app_file_dialog_select_prefs_dir (gtk_app, action_row);
}
static gboolean
_get_enum_mapping (GValue *value, GVariant *variant, GParamSpec *pspec)
{
GEnumClass *enum_class = G_ENUM_CLASS (g_type_class_peek (pspec->value_type));
const gchar *selected_str = g_variant_get_string (variant, NULL);
guint i, selected = 0;
for (i = 0; i < enum_class->n_values; ++i) {
if (g_strcmp0 (selected_str, enum_class->values[i].value_nick) == 0) {
selected = i;
break;
}
}
g_value_set_uint (value, selected);
return TRUE;
}
static GVariant *
_set_enum_mapping (GValue *value, GVariantType *exp_type, GParamSpec *pspec)
{
GEnumClass *enum_class = G_ENUM_CLASS (g_type_class_peek (pspec->value_type));
guint selected = g_value_get_uint (value);
if (G_UNLIKELY (selected == GTK_INVALID_LIST_POSITION))
selected = 0;
return g_variant_new_string (enum_class->values[selected].value_nick);
}
static gboolean
_get_flag_mapping (GValue *value, GVariant *variant, ClapperAppPreferencesFlagMapData *data)
{
guint flags = g_settings_get_flags (data->settings, data->pspec->name);
g_value_set_boolean (value, (flags & data->flag));
return TRUE;
}
static GVariant *
_set_flag_mapping (GValue *value, GVariantType *exp_type, ClapperAppPreferencesFlagMapData *data)
{
GFlagsClass *flags_class = G_FLAGS_CLASS (g_type_class_peek (data->pspec->value_type));
GStrvBuilder *builder;
GVariant *variant;
gchar **strv;
gboolean active = g_value_get_boolean (value);
guint i, flags = g_settings_get_flags (data->settings, data->pspec->name);
if (active)
flags |= data->flag;
else
flags &= ~(data->flag);
builder = g_strv_builder_new ();
for (i = 0; i < flags_class->n_values; ++i) {
if (flags & flags_class->values[i].value)
g_strv_builder_add (builder, flags_class->values[i].value_nick);
}
strv = g_strv_builder_end (builder);
g_strv_builder_unref (builder);
variant = g_variant_new_strv ((const gchar *const *) strv, -1);
g_strfreev (strv);
return variant;
}
static gboolean
_add_enhancer_config_row (ClapperAppPreferencesWindow *self, GParamSpec *pspec,
GSettings *enhancer_settings)
{
GtkWidget *row = NULL, *reset_button;
ClapperAppPreferencesResetData *reset_data;
const gchar *bind_prop = NULL;
gboolean is_enum = FALSE, is_flags = FALSE;
switch (pspec->value_type) {
case G_TYPE_BOOLEAN:{
row = adw_switch_row_new ();
break;
}
case G_TYPE_INT:{
GParamSpecInt *p = (GParamSpecInt *) pspec;
row = adw_spin_row_new_with_range (p->minimum, p->maximum, 1);
break;
}
case G_TYPE_UINT:{
GParamSpecUInt *p = (GParamSpecUInt *) pspec;
row = adw_spin_row_new_with_range (p->minimum, p->maximum, 1);
break;
}
case G_TYPE_DOUBLE:{
GParamSpecDouble *p = (GParamSpecDouble *) pspec;
row = adw_spin_row_new_with_range (p->minimum, p->maximum, 0.25);
break;
}
case G_TYPE_STRING:{
if (pspec->flags & (CLAPPER_ENHANCER_PARAM_FILEPATH | CLAPPER_ENHANCER_PARAM_DIRPATH)) {
GtkWidget *image;
image = gtk_image_new_from_icon_name ("document-open-symbolic");
gtk_widget_set_margin_end (image, 10); // matches other rows
row = adw_action_row_new ();
adw_action_row_add_suffix (ADW_ACTION_ROW (row), image);
adw_action_row_set_activatable_widget (ADW_ACTION_ROW (row), image);
g_signal_connect (row, "activated",
G_CALLBACK (file_selection_row_activated_cb), pspec);
} else {
row = adw_entry_row_new ();
}
break;
}
default:{
if ((is_enum = G_IS_PARAM_SPEC_ENUM (pspec))) {
GtkExpression *expression;
AdwEnumListModel *enum_model;
row = adw_combo_row_new ();
expression = gtk_property_expression_new (ADW_TYPE_ENUM_LIST_ITEM, NULL, "nick");
adw_combo_row_set_expression (ADW_COMBO_ROW (row), expression);
enum_model = adw_enum_list_model_new (pspec->value_type);
adw_combo_row_set_model (ADW_COMBO_ROW (row), G_LIST_MODEL (enum_model));
gtk_expression_unref (expression);
g_object_unref (enum_model);
break;
} else if ((is_flags = G_IS_PARAM_SPEC_FLAGS (pspec))) {
GFlagsClass *flags_class = G_FLAGS_CLASS (g_type_class_peek (pspec->value_type));
guint i;
row = adw_expander_row_new ();
for (i = 0; i < flags_class->n_values; ++i) {
GtkWidget *flag_row = adw_switch_row_new ();
ClapperAppPreferencesFlagMapData *fm_data;
adw_preferences_row_set_title (ADW_PREFERENCES_ROW (flag_row),
flags_class->values[i].value_nick);
fm_data = g_new (ClapperAppPreferencesFlagMapData, 1);
fm_data->settings = g_object_ref (enhancer_settings);
fm_data->pspec = pspec;
fm_data->flag = flags_class->values[i].value;
GST_TRACE ("Created flag map data: %p", fm_data);
g_settings_bind_with_mapping (enhancer_settings, pspec->name, flag_row,
"active", G_SETTINGS_BIND_DEFAULT,
(GSettingsBindGetMapping) _get_flag_mapping,
(GSettingsBindSetMapping) _set_flag_mapping,
fm_data, (GDestroyNotify) _flag_map_data_free);
adw_expander_row_add_row (ADW_EXPANDER_ROW (row), flag_row);
}
break;
}
g_warning ("Unsupported enhancer \"%s\" property type: %s",
pspec->name, g_type_name (pspec->value_type));
return FALSE;
}
}
reset_button = gtk_button_new_from_icon_name ("view-refresh-symbolic");
gtk_widget_set_tooltip_text (reset_button, _("Restore default"));
gtk_widget_set_halign (reset_button, GTK_ALIGN_CENTER);
gtk_widget_set_valign (reset_button, GTK_ALIGN_CENTER);
gtk_widget_add_css_class (reset_button, "circular");
gtk_widget_set_tooltip_text (row, g_param_spec_get_blurb (pspec));
adw_preferences_row_set_title (ADW_PREFERENCES_ROW (row), g_param_spec_get_nick (pspec));
if (ADW_IS_SWITCH_ROW (row)) {
bind_prop = "active";
} else if (ADW_IS_SPIN_ROW (row)) {
bind_prop = "value";
adw_spin_row_set_numeric (ADW_SPIN_ROW (row), TRUE);
} else if (ADW_IS_ENTRY_ROW (row)) {
bind_prop = "text";
} else if (ADW_IS_COMBO_ROW (row)) {
bind_prop = "selected";
} else if (ADW_IS_ACTION_ROW (row)) {
bind_prop = "subtitle";
} else if (!is_flags) { // In case of flags we bind individual widgets
g_assert_not_reached ();
return FALSE;
}
if (ADW_IS_ENTRY_ROW (row))
adw_entry_row_add_prefix (ADW_ENTRY_ROW (row), reset_button);
else if (ADW_IS_ACTION_ROW (row))
adw_action_row_add_prefix (ADW_ACTION_ROW (row), reset_button);
else if (ADW_IS_EXPANDER_ROW (row))
adw_expander_row_add_prefix (ADW_EXPANDER_ROW (row), reset_button);
if (is_enum) {
g_settings_bind_with_mapping (enhancer_settings, pspec->name, row,
bind_prop, G_SETTINGS_BIND_DEFAULT,
(GSettingsBindGetMapping) _get_enum_mapping,
(GSettingsBindSetMapping) _set_enum_mapping,
pspec, NULL);
} else if (!is_flags) {
g_settings_bind (enhancer_settings, pspec->name, row,
bind_prop, G_SETTINGS_BIND_DEFAULT);
}
reset_data = g_new (ClapperAppPreferencesResetData, 1);
reset_data->settings = g_object_ref (enhancer_settings);
reset_data->key = pspec->name;
GST_TRACE ("Created reset button data: %p", reset_data);
g_signal_connect_data (reset_button, "clicked",
G_CALLBACK (_reset_button_clicked_cb), reset_data,
(GClosureNotify) _reset_button_closure, G_CONNECT_DEFAULT);
adw_preferences_group_add (self->enhancer_config_group, row);
self->enhancer_pspec_rows = g_list_append (self->enhancer_pspec_rows, row);
return TRUE;
}
static void
selected_enhancer_changed_cb (AdwComboRow *combo_row,
GParamSpec *pspec G_GNUC_UNUSED, ClapperAppPreferencesWindow *self)
{
guint selected = adw_combo_row_get_selected (combo_row);
/* Remove old rows */
if (self->enhancer_pspec_rows) {
GList *el;
for (el = self->enhancer_pspec_rows; el; el = g_list_next (el))
adw_preferences_group_remove (self->enhancer_config_group, GTK_WIDGET (el->data));
g_clear_list (&self->enhancer_pspec_rows, NULL);
}
/* Add new rows */
if (selected != GTK_INVALID_LIST_POSITION) {
ClapperEnhancerProxyList *proxies = clapper_get_global_enhancer_proxies ();
ClapperEnhancerProxy *proxy = clapper_enhancer_proxy_list_peek_proxy (proxies, selected);
GParamSpec **pspecs;
guint n_pspecs;
gboolean has_props = FALSE;
if ((pspecs = clapper_enhancer_proxy_get_target_properties (proxy, &n_pspecs))) {
GSettings *enhancer_settings = NULL;
guint i;
for (i = 0; i < n_pspecs; ++i) {
if (pspecs[i]->flags & CLAPPER_ENHANCER_PARAM_GLOBAL) {
if (!enhancer_settings)
enhancer_settings = clapper_enhancer_proxy_get_settings (proxy);
if (enhancer_settings)
has_props |= _add_enhancer_config_row (self, pspecs[i], enhancer_settings);
}
}
g_clear_object (&enhancer_settings);
}
if (!has_props) {
GtkWidget *row = adw_action_row_new ();
adw_preferences_row_set_title (ADW_PREFERENCES_ROW (row), _("No configurable properties"));
adw_preferences_group_add (self->enhancer_config_group, row);
self->enhancer_pspec_rows = g_list_append (self->enhancer_pspec_rows, row);
}
}
}
static void
enhancers_config_activated_cb (AdwActionRow *action_row, ClapperAppPreferencesWindow *self)
{
/* If no model set yet */
if (!adw_combo_row_get_model (self->enhancers_combo_row)) {
ClapperEnhancerProxyList *proxies = clapper_get_global_enhancer_proxies ();
adw_combo_row_set_model (self->enhancers_combo_row, G_LIST_MODEL (proxies));
adw_combo_row_set_selected (self->enhancers_combo_row, GTK_INVALID_LIST_POSITION);
GST_DEBUG ("Populated names combo row in enhancers subpage");
if (clapper_enhancer_proxy_list_get_n_proxies (proxies) > 0)
gtk_stack_set_visible_child (self->enhancers_stack, self->browse_enhancers_page);
else
gtk_stack_set_visible_child (self->enhancers_stack, self->no_enhancers_page);
}
adw_preferences_window_push_subpage (ADW_PREFERENCES_WINDOW (self), self->enhancers_subpage);
}
/* Sort by plugin name and if the same, sort by element name */
static gint
_compare_plugins_cb (gconstpointer ptr_a, gconstpointer ptr_b)
@@ -301,6 +666,12 @@ _make_plugin_features_string_list (ClapperAppPreferencesWindow *self, const gcha
return features_list;
}
static gboolean
list_has_selection_closure (ClapperAppPreferencesWindow *self, guint selected)
{
return (selected != GTK_INVALID_LIST_POSITION);
}
static GtkStringList *
ranking_features_model_closure (ClapperAppPreferencesWindow *self, GtkStringObject *string_obj)
{
@@ -543,6 +914,7 @@ clapper_app_preferences_window_finalize (GObject *object)
g_object_unref (self->settings);
g_clear_list (&self->enhancer_pspec_rows, NULL);
g_clear_object (&self->plugins_list);
if (self->features)
@@ -598,6 +970,14 @@ clapper_app_preferences_window_class_init (ClapperAppPreferencesWindowClass *kla
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, subtitle_offset_spin_row);
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, font_dialog_button);
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, enhancers_stack);
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, browse_enhancers_page);
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, no_enhancers_page);
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, enhancers_subpage);
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, enhancers_combo_row);
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, enhancer_config_group);
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, plugins_subpage);
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, plugins_combo_row);
gtk_widget_class_bind_template_child (widget_class, ClapperAppPreferencesWindow, features_combo_row);
@@ -605,9 +985,13 @@ clapper_app_preferences_window_class_init (ClapperAppPreferencesWindowClass *kla
gtk_widget_class_bind_template_callback (widget_class, seek_method_name_closure);
gtk_widget_class_bind_template_callback (widget_class, enhancers_config_activated_cb);
gtk_widget_class_bind_template_callback (widget_class, selected_enhancer_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, plugin_ranking_activated_cb);
gtk_widget_class_bind_template_callback (widget_class, plugin_ranking_unrealize_cb);
gtk_widget_class_bind_template_callback (widget_class, list_has_selection_closure);
gtk_widget_class_bind_template_callback (widget_class, ranking_features_model_closure);
gtk_widget_class_bind_template_callback (widget_class, add_override_button_sensitive_closure);
gtk_widget_class_bind_template_callback (widget_class, add_override_button_clicked_cb);

View File

@@ -0,0 +1,42 @@
/* Clapper Application
* Copyright (C) 2024 Rafał Dzięgiel <rafostar.github@gmail.com>
*
* 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 3 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, see <https://www.gnu.org/licenses/>.
*/
#include "clapper-app-types.h"
#include "clapper-app-headerbar.h"
#include "clapper-app-media-item-box.h"
#include "clapper-app-property-row.h"
#include "clapper-app-queue-list.h"
#include "clapper-app-queue-progression-model.h"
#include "clapper-app-window-state-buttons.h"
/*
* clapper_app_types_init:
*
* Ensure private types that appear in UI files in order for
* GtkBuilder to be able to find them when building templates.
*/
inline void
clapper_app_types_init (void)
{
g_type_ensure (CLAPPER_APP_TYPE_HEADERBAR);
g_type_ensure (CLAPPER_APP_TYPE_MEDIA_ITEM_BOX);
g_type_ensure (CLAPPER_APP_TYPE_PROPERTY_ROW);
g_type_ensure (CLAPPER_APP_TYPE_QUEUE_LIST);
g_type_ensure (CLAPPER_APP_TYPE_QUEUE_PROGRESSION_MODEL);
g_type_ensure (CLAPPER_APP_TYPE_WINDOW_STATE_BUTTONS);
}

View File

@@ -0,0 +1,27 @@
/* Clapper Application
* Copyright (C) 2024 Rafał Dzięgiel <rafostar.github@gmail.com>
*
* 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 3 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, see <https://www.gnu.org/licenses/>.
*/
#pragma once
#include <glib.h>
G_BEGIN_DECLS
G_GNUC_INTERNAL
void clapper_app_types_init (void);
G_END_DECLS

View File

@@ -25,30 +25,28 @@
#include "clapper-app-utils.h"
static void
_entry_text_changed_cb (GtkEntry *entry,
GParamSpec *pspec G_GNUC_UNUSED, AdwMessageDialog *dialog)
_entry_text_changed_cb (AdwEntryRow *entry,
GParamSpec *pspec G_GNUC_UNUSED, AdwAlertDialog *dialog)
{
GtkEntryBuffer *buffer = gtk_entry_get_buffer (entry);
guint text_length = gtk_entry_buffer_get_length (buffer);
const gchar *text = gtk_editable_get_text (GTK_EDITABLE (entry));
gboolean enabled = FALSE;
if (text_length > 0) {
const gchar *text = gtk_entry_buffer_get_text (buffer);
enabled = (text && gst_uri_is_valid (text));
if (text && *text != '\0') {
enabled = gst_uri_is_valid (text);
}
adw_message_dialog_set_response_enabled (dialog, "add", enabled);
adw_alert_dialog_set_response_enabled (dialog, "add", enabled);
}
static void
_open_uri_cb (AdwMessageDialog *dialog, GAsyncResult *result, GtkApplication *gtk_app)
_open_uri_cb (AdwAlertDialog *dialog, GAsyncResult *result, GtkApplication *gtk_app)
{
const gchar *response = adw_message_dialog_choose_finish (dialog, result);
const gchar *response = adw_alert_dialog_choose_finish (dialog, result);
if (strcmp (response, "add") == 0) {
GtkWidget *extra_child = adw_message_dialog_get_extra_child (dialog);
GtkEntryBuffer *buffer = gtk_entry_get_buffer (GTK_ENTRY (extra_child));
const gchar *text = gtk_entry_buffer_get_text (buffer);
GtkWidget *extra_child = adw_alert_dialog_get_extra_child (dialog);
AdwEntryRow *entry_row = ADW_ENTRY_ROW (gtk_list_box_get_row_at_index (GTK_LIST_BOX (extra_child), 0));
const gchar *text = gtk_editable_get_text (GTK_EDITABLE (entry_row));
GFile **files = NULL;
gint n_files = 0;
@@ -60,16 +58,15 @@ _open_uri_cb (AdwMessageDialog *dialog, GAsyncResult *result, GtkApplication *gt
}
static void
_read_text_cb (GdkClipboard *clipboard, GAsyncResult *result, GtkWidget *extra_child)
_read_text_cb (GdkClipboard *clipboard, GAsyncResult *result, GtkWidget *entry_row)
{
GtkEntry *entry = GTK_ENTRY (extra_child);
GError *error = NULL;
gchar *text = gdk_clipboard_read_text_finish (clipboard, result, &error);
if (G_LIKELY (error == NULL)) {
if (gst_uri_is_valid (text)) {
gtk_editable_set_text (GTK_EDITABLE (entry), text);
gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1);
gtk_editable_set_text (GTK_EDITABLE (entry_row), text);
gtk_editable_select_region (GTK_EDITABLE (entry_row), 0, -1);
}
} else {
/* Common error when clipboard is empty or has unsupported content.
@@ -89,30 +86,28 @@ clapper_app_uri_dialog_open_uri (GtkApplication *gtk_app)
{
GtkWindow *window = gtk_application_get_active_window (gtk_app);
GtkBuilder *builder;
AdwMessageDialog *dialog;
GtkWidget *extra_child;
AdwAlertDialog *dialog;
GtkWidget *entry_row;
GdkDisplay *display;
builder = gtk_builder_new_from_resource (
CLAPPER_APP_RESOURCE_PREFIX "/ui/clapper-app-uri-dialog.ui");
dialog = ADW_MESSAGE_DIALOG (gtk_builder_get_object (builder, "dialog"));
gtk_window_set_transient_for (GTK_WINDOW (dialog), window);
dialog = ADW_ALERT_DIALOG (gtk_builder_get_object (builder, "dialog"));
entry_row = GTK_WIDGET (gtk_builder_get_object (builder, "entry_row"));
extra_child = adw_message_dialog_get_extra_child (dialog);
g_signal_connect (GTK_ENTRY (extra_child), "notify::text",
g_signal_connect (GTK_EDITABLE (entry_row), "notify::text",
G_CALLBACK (_entry_text_changed_cb), dialog);
if ((display = gdk_display_get_default ())) {
GdkClipboard *clipboard = gdk_display_get_clipboard (display);
gdk_clipboard_read_text_async (clipboard, NULL,
(GAsyncReadyCallback) _read_text_cb, extra_child);
(GAsyncReadyCallback) _read_text_cb, entry_row);
}
/* NOTE: Dialog will automatically unref itself after response */
adw_message_dialog_choose (dialog, NULL,
adw_alert_dialog_choose (dialog, GTK_WIDGET (window), NULL,
(GAsyncReadyCallback) _open_uri_cb,
gtk_app);

View File

@@ -23,6 +23,152 @@
#include "clapper-app-utils.h"
#include "clapper-app-media-item-box.h"
#ifdef HAVE_GRAPHVIZ
#include <graphviz/cgraph.h>
#include <graphviz/gvc.h>
#endif
#ifdef G_OS_WIN32
#include <windows.h>
#ifdef HAVE_WIN_PROCESS_THREADS_API
#include <processthreadsapi.h>
#endif
#ifdef HAVE_WIN_TIME_API
#include <timeapi.h>
#endif
#endif
#define GST_CAT_DEFAULT clapper_app_utils_debug
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
void
clapper_app_utils_debug_init (void)
{
GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "clapperapputils", 0,
"Clapper App Utils");
}
/* Windows specific functions */
#ifdef G_OS_WIN32
/*
* clapper_app_utils_win_enforce_hi_res_clock:
*
* Enforce high resolution clock by explicitly disabling Windows
* timer resolution power throttling. When disabled, system remembers
* and honors any previous timer resolution request by the process.
*
* By default, Windows 11 may automatically ignore the timer
* resolution requests in certain scenarios.
*/
void
clapper_app_utils_win_enforce_hi_res_clock (void)
{
#ifdef HAVE_WIN_PROCESS_THREADS_API
PROCESS_POWER_THROTTLING_STATE PowerThrottling;
gboolean success;
RtlZeroMemory (&PowerThrottling, sizeof (PowerThrottling));
PowerThrottling.Version = PROCESS_POWER_THROTTLING_CURRENT_VERSION;
PowerThrottling.ControlMask = PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION;
PowerThrottling.StateMask = 0; // Always honor timer resolution requests
success = (gboolean) SetProcessInformation(
GetCurrentProcess (),
ProcessPowerThrottling,
&PowerThrottling,
sizeof (PowerThrottling));
/* Not an error. Older Windows does not have this functionality, but
* also honor hi-res clock by default anyway, so do not print then. */
GST_INFO ("Windows hi-res clock support is %senforced",
(success) ? "" : "NOT ");
#endif
}
/*
* clapper_app_utils_win_hi_res_clock_start:
*
* Start Windows high resolution clock which will improve
* accuracy of various Windows timer APIs and precision
* of #GstSystemClock during playback.
*
* On Windows 10 version 2004 (and older), this function affects
* a global Windows setting. On any other (newer) version this
* will only affect a single process.
*
* Returns: Timer resolution period value.
*/
guint
clapper_app_utils_win_hi_res_clock_start (void)
{
guint resolution = 0;
#ifdef HAVE_WIN_TIME_API
TIMECAPS time_caps;
MMRESULT res;
if ((res = timeGetDevCaps (&time_caps, sizeof (TIMECAPS))) != TIMERR_NOERROR) {
GST_WARNING ("Could not query timer resolution, code: %u", res);
return 0;
}
resolution = MIN (MAX (time_caps.wPeriodMin, 1), time_caps.wPeriodMax);
if ((res = timeBeginPeriod (resolution)) != TIMERR_NOERROR) {
GST_WARNING ("Could not request timer resolution, code: %u", res);
return 0;
}
GST_INFO ("Started Windows hi-res clock, precision: %ums", resolution);
#endif
return resolution;
}
/*
* clapper_app_utils_win_hi_res_clock_stop:
* @resolution: started resolution value (non-zero)
*
* Stop previously started Microsoft Windows high resolution clock.
*/
void
clapper_app_utils_win_hi_res_clock_stop (guint resolution)
{
#ifdef HAVE_WIN_TIME_API
MMRESULT res;
if ((res = timeEndPeriod (resolution)) == TIMERR_NOERROR)
GST_INFO ("Stopped Windows hi-res clock");
else
GST_ERROR ("Could not stop hi-res clock, code: %u", res);
#endif
}
/* Extensions are used only on Windows */
const gchar *const *
clapper_app_utils_get_extensions (void)
{
static const gchar *const all_extensions[] = {
"avi", "claps", "m2ts", "mkv", "mov",
"mp4", "webm", "wmv", NULL
};
return all_extensions;
}
const gchar *const *
clapper_app_utils_get_subtitles_extensions (void)
{
static const gchar *const subs_extensions[] = {
"srt", "vtt", NULL
};
return subs_extensions;
}
#endif // G_OS_WIN32
const gchar *const *
clapper_app_utils_get_mime_types (void)
{
@@ -86,9 +232,21 @@ clapper_app_utils_is_subtitles_file (GFile *file)
G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE,
G_FILE_QUERY_INFO_NONE,
NULL, NULL))) {
is_subs = g_strv_contains (
const gchar *content_type = NULL;
if (g_file_info_has_attribute (info,
G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE)) {
content_type = g_file_info_get_content_type (info);
} else if (g_file_info_has_attribute (info,
G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE)) {
content_type = g_file_info_get_attribute_string (info,
G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE);
}
is_subs = (content_type && g_strv_contains (
clapper_app_utils_get_subtitles_mime_types (),
g_file_info_get_content_type (info));
content_type));
g_object_unref (info);
}
@@ -185,6 +343,30 @@ clapper_app_utils_files_from_string (const gchar *string, GFile ***files, gint *
return success;
}
gboolean
clapper_app_utils_files_from_command_line (GApplicationCommandLine *cmd_line, GFile ***files, gint *n_files)
{
GSList *slist = NULL;
gchar **argv;
gint i, argc = 0;
gboolean success;
argv = g_application_command_line_get_arguments (cmd_line, &argc);
for (i = 1; i < argc; ++i)
slist = g_slist_append (slist, g_application_command_line_create_file_for_arg (cmd_line, argv[i]));
g_strfreev (argv);
if (!slist)
return FALSE;
success = clapper_app_utils_files_from_slist (slist, files, n_files);
g_slist_free_full (slist, g_object_unref);
return success;
}
static inline gboolean
_files_from_file (GFile *file, GFile ***files, gint *n_files)
{
@@ -324,3 +506,213 @@ parse_overrides:
g_free (stored_overrides);
}
GstElement *
clapper_app_utils_make_element (const gchar *string)
{
gchar *char_loc;
if (strcmp (string, "none") == 0)
return NULL;
char_loc = strchr (string, ' ');
if (char_loc) {
GstElement *element;
GError *error = NULL;
element = gst_parse_bin_from_description (string, TRUE, &error);
if (error) {
GST_ERROR ("Bin parse error: \"%s\", reason: %s", string, error->message);
g_error_free (error);
}
return element;
}
return gst_element_factory_make (string, NULL);
}
/*
* _get_tmp_dir:
* @subdir: (nullable): an optional subdirectory
*
* Returns: (transfer full): a newly constructed #GFile
*/
static inline GFile *
_get_tmp_dir (const gchar *subdir)
{
/* XXX: System tmp directory does not work within containers such as Flatpak
* for our usage with file launcher, so make our own temp in app data dir */
return g_file_new_build_filename (
g_get_user_data_dir (), CLAPPER_APP_ID, "tmp", subdir, NULL);
}
#ifdef HAVE_GRAPHVIZ
static GFile *
_create_tmp_subdir (const gchar *subdir, GCancellable *cancellable, GError **error)
{
GFile *tmp_dir;
GError *my_error = NULL;
tmp_dir = _get_tmp_dir (subdir);
if (!g_file_make_directory_with_parents (tmp_dir, cancellable, &my_error)) {
if (my_error->domain != G_IO_ERROR || my_error->code != G_IO_ERROR_EXISTS) {
*error = g_error_copy (my_error);
g_clear_object (&tmp_dir); // return NULL
}
g_error_free (my_error);
}
return tmp_dir;
}
#endif
static void
_create_pipeline_svg_file_in_thread (GTask *task, GObject *source G_GNUC_UNUSED,
ClapperPlayer *player, GCancellable *cancellable)
{
GFile *tmp_file = NULL;
GError *error = NULL;
#ifdef HAVE_GRAPHVIZ
GFile *tmp_subdir;
Agraph_t *graph;
GVC_t *gvc;
gchar *path, *template = NULL, *dot_data = NULL, *img_data = NULL;
gint fd;
gsize size = 0;
if (!(tmp_subdir = _create_tmp_subdir ("pipelines", cancellable, &error)))
goto finish;
path = g_file_get_path (tmp_subdir);
g_object_unref (tmp_subdir);
template = g_build_filename (path, "pipeline-XXXXXX.svg", NULL);
g_free (path);
fd = g_mkstemp (template); // Modifies template to actual filename
if (G_UNLIKELY (fd == -1)) {
g_set_error (&error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
"Could not open temp file for writing");
goto finish;
}
dot_data = clapper_player_make_pipeline_graph (player, GST_DEBUG_GRAPH_SHOW_ALL);
if (g_cancellable_is_cancelled (cancellable))
goto close_and_finish;
graph = agmemread (dot_data);
gvc = gvContext ();
gvLayout (gvc, graph, "dot");
#ifdef HAVE_GVC_13
gvRenderData (gvc, graph, "svg", &img_data, &size);
#else
{
guint tmp_size = 0; // Temporary uint to satisfy older API
gvRenderData (gvc, graph, "svg", &img_data, &tmp_size);
size = tmp_size;
}
#endif
agclose (graph);
gvFreeContext (gvc);
if (g_cancellable_is_cancelled (cancellable))
goto close_and_finish;
if (write (fd, img_data, size) != -1) {
tmp_file = g_file_new_for_path (template);
} else {
g_set_error (&error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
"Could not write data to temp file");
}
close_and_finish:
/* Always close the file IO */
if (G_UNLIKELY (close (fd) == -1))
GST_ERROR ("Could not close temp file!");
finish:
g_free (template);
g_free (dot_data);
g_free (img_data);
#else
g_set_error (&error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
"Cannot create graph file when compiled without Graphviz");
#endif
if (tmp_file)
g_task_return_pointer (task, tmp_file, (GDestroyNotify) g_object_unref);
else
g_task_return_error (task, error);
}
void
clapper_app_utils_create_pipeline_svg_file_async (ClapperPlayer *player,
GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
{
GTask *task;
task = g_task_new (NULL, cancellable, callback, user_data);
g_task_set_task_data (task, gst_object_ref (player), (GDestroyNotify) gst_object_unref);
g_task_run_in_thread (task, (GTaskThreadFunc) _create_pipeline_svg_file_in_thread);
g_object_unref (task);
}
static gboolean
_delete_dir_recursive (GFile *dir, GError **error)
{
GFileEnumerator *dir_enum;
if ((dir_enum = g_file_enumerate_children (dir,
G_FILE_ATTRIBUTE_STANDARD_NAME "," G_FILE_ATTRIBUTE_STANDARD_TYPE,
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, error))) {
while (TRUE) {
GFileInfo *info = NULL;
GFile *child = NULL;
if (!g_file_enumerator_iterate (dir_enum, &info,
&child, NULL, error) || !info)
break;
if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY) {
if (!_delete_dir_recursive (child, error))
break;
} else if (!g_file_delete (child, NULL, error)) {
break;
}
}
g_object_unref (dir_enum);
}
if (*error != NULL)
return FALSE;
return g_file_delete (dir, NULL, error);
}
void
clapper_app_utils_delete_tmp_dir (void)
{
GFile *tmp_dir = _get_tmp_dir (NULL);
GError *error = NULL;
if (!_delete_dir_recursive (tmp_dir, &error)) {
if (error->domain != G_IO_ERROR || error->code != G_IO_ERROR_NOT_FOUND) {
GST_ERROR ("Could not remove temp dir, reason: %s",
GST_STR_NULL (error->message));
}
g_error_free (error);
}
g_object_unref (tmp_dir);
}

View File

@@ -26,6 +26,25 @@ G_BEGIN_DECLS
typedef void (* ClapperAppUtilsIterRanks) (const gchar *feature_name, GstRank rank, gboolean from_env, gpointer user_data);
void clapper_app_utils_debug_init (void);
#ifdef G_OS_WIN32
G_GNUC_INTERNAL
void clapper_app_utils_win_enforce_hi_res_clock (void);
G_GNUC_INTERNAL
guint clapper_app_utils_win_hi_res_clock_start (void);
G_GNUC_INTERNAL
void clapper_app_utils_win_hi_res_clock_stop (guint resolution);
G_GNUC_INTERNAL
const gchar *const * clapper_app_utils_get_extensions (void);
G_GNUC_INTERNAL
const gchar *const * clapper_app_utils_get_subtitles_extensions (void);
#endif
G_GNUC_INTERNAL
const gchar *const * clapper_app_utils_get_mime_types (void);
@@ -50,6 +69,9 @@ gboolean clapper_app_utils_files_from_slist (GSList *file_list, GFile ***files,
G_GNUC_INTERNAL
gboolean clapper_app_utils_files_from_string (const gchar *string, GFile ***files, gint *n_files);
G_GNUC_INTERNAL
gboolean clapper_app_utils_files_from_command_line (GApplicationCommandLine *cmd_line, GFile ***files, gint *n_files);
G_GNUC_INTERNAL
gboolean clapper_app_utils_files_from_value (const GValue *value, GFile ***files, gint *n_files);
@@ -59,4 +81,13 @@ void clapper_app_utils_files_free (GFile **files);
G_GNUC_INTERNAL
void clapper_app_utils_iterate_plugin_feature_ranks (GSettings *settings, ClapperAppUtilsIterRanks callback, gpointer user_data);
G_GNUC_INTERNAL
GstElement * clapper_app_utils_make_element (const gchar *string);
G_GNUC_INTERNAL
void clapper_app_utils_create_pipeline_svg_file_async (ClapperPlayer *player, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data);
G_GNUC_INTERNAL
void clapper_app_utils_delete_tmp_dir (void);
G_END_DECLS

View File

@@ -28,13 +28,19 @@ struct _ClapperAppWindowStateButtons
{
GtkBox parent;
GtkWidget *menu_button;
GtkWidget *minimize_button;
GtkWidget *maximize_button;
GtkWidget *close_button;
/* Props */
GtkWidget *menu_button;
GtkPositionType position;
gboolean has_minimize;
gboolean has_maximize;
gboolean has_close;
gboolean has_buttons;
gboolean is_maximized;
gboolean is_fullscreen;
@@ -42,9 +48,19 @@ struct _ClapperAppWindowStateButtons
GtkSettings *settings;
};
enum
{
PROP_0,
PROP_POSITION,
PROP_MENU_BUTTON,
PROP_LAST
};
#define parent_class clapper_app_window_state_buttons_parent_class
G_DEFINE_TYPE (ClapperAppWindowStateButtons, clapper_app_window_state_buttons, GTK_TYPE_BOX)
static GParamSpec *param_specs[PROP_LAST] = { NULL, };
static void
minimize_button_clicked_cb (GtkButton *button, ClapperAppWindowStateButtons *self)
{
@@ -67,12 +83,27 @@ close_button_clicked_cb (GtkButton *button, ClapperAppWindowStateButtons *self)
}
static void
_refresh_min_max_visibility (ClapperAppWindowStateButtons *self)
_refresh_buttons_visibility (ClapperAppWindowStateButtons *self)
{
gtk_widget_set_visible (self->minimize_button,
(self->has_minimize && !self->is_fullscreen));
gtk_widget_set_visible (self->maximize_button,
(self->has_maximize && !self->is_fullscreen));
gboolean show_minimize = (self->has_minimize && !self->is_fullscreen);
gboolean show_maximize = (self->has_maximize && !self->is_fullscreen);
gboolean has_buttons;
gtk_widget_set_visible (self->minimize_button, show_minimize);
gtk_widget_set_visible (self->maximize_button, show_maximize);
gtk_widget_set_visible (self->close_button, self->has_close);
has_buttons = (self->menu_button != NULL || show_minimize
|| show_maximize || self->has_close);
if (self->has_buttons != has_buttons) {
self->has_buttons = has_buttons;
if (self->has_buttons)
gtk_widget_add_css_class (GTK_WIDGET (self), "filled");
else
gtk_widget_remove_css_class (GTK_WIDGET (self), "filled");
}
}
static void
@@ -89,46 +120,57 @@ clapper_app_window_state_buttons_parse_layout (ClapperAppWindowStateButtons *sel
if (G_LIKELY (org_layout != NULL)) {
GtkWidget *last_widget = self->menu_button;
const gchar *layout = org_layout;
gboolean can_parse = (self->position == GTK_POS_LEFT);
gboolean had_sign = can_parse;
guint i;
for (i = 0; layout[i]; ++i) {
GtkWidget *widget = NULL;
const gchar *next = layout + i + 1;
for (i = 0; org_layout[i] != '\0'; ++i) {
const gchar *layout = org_layout + i;
if (next[0] != '\0' && next[0] != ',' && next[0] != ':')
if (layout[0] == ',') {
had_sign = TRUE;
continue;
GST_TRACE_OBJECT (self, "Remaining layout: %s", layout);
if (g_str_has_prefix (layout, "minimize")) {
widget = self->minimize_button;
has_minimize = TRUE;
} else if (g_str_has_prefix (layout, "maximize")) {
widget = self->maximize_button;
has_maximize = TRUE;
} else if (g_str_has_prefix (layout, "close")) {
widget = self->close_button;
has_close = TRUE;
}
if (widget) {
gtk_box_reorder_child_after (GTK_BOX (self), widget, last_widget);
last_widget = widget;
if (layout[0] == ':') {
if (self->position == GTK_POS_LEFT)
break;
else
can_parse = TRUE;
had_sign = TRUE;
continue;
}
if (next[0] == '\0')
break;
if (had_sign && can_parse) {
GtkWidget *widget = NULL;
layout = next + 1;
i = 0;
GST_TRACE_OBJECT (self, "Remaining layout: %s", layout);
if (g_str_has_prefix (layout, "minimize")) {
widget = self->minimize_button;
has_minimize = TRUE;
} else if (g_str_has_prefix (layout, "maximize")) {
widget = self->maximize_button;
has_maximize = TRUE;
} else if (g_str_has_prefix (layout, "close")) {
widget = self->close_button;
has_close = TRUE;
}
if (widget) {
gtk_box_reorder_child_after (GTK_BOX (self), widget, last_widget);
last_widget = widget;
}
had_sign = FALSE;
}
}
}
self->has_minimize = has_minimize;
self->has_maximize = has_maximize;
gtk_widget_set_visible (self->close_button, has_close);
self->has_close = has_close;
GST_DEBUG_OBJECT (self, "Buttons layout parsed");
@@ -140,7 +182,7 @@ _decoration_layout_changed_cb (GtkSettings *settings,
GParamSpec *pspec G_GNUC_UNUSED, ClapperAppWindowStateButtons *self)
{
clapper_app_window_state_buttons_parse_layout (self);
_refresh_min_max_visibility (self);
_refresh_buttons_visibility (self);
}
static void
@@ -162,16 +204,31 @@ _surface_state_changed_cb (GdkSurface *surface,
}
if (self->is_fullscreen != is_fullscreen) {
self->is_fullscreen = is_fullscreen;
_refresh_min_max_visibility (self);
_refresh_buttons_visibility (self);
}
}
static void
clapper_app_window_state_buttons_init (ClapperAppWindowStateButtons *self)
{
self->position = GTK_POS_RIGHT;
gtk_widget_init_template (GTK_WIDGET (self));
}
static void
clapper_app_window_state_buttons_constructed (GObject *object)
{
ClapperAppWindowStateButtons *self = CLAPPER_APP_WINDOW_STATE_BUTTONS_CAST (object);
if (self->position == GTK_POS_RIGHT)
gtk_widget_add_css_class (GTK_WIDGET (self), "right");
else
gtk_widget_add_css_class (GTK_WIDGET (self), "left");
G_OBJECT_CLASS (parent_class)->constructed (object);
}
static void
_clear_stored_settings (ClapperAppWindowStateButtons *self)
{
@@ -245,24 +302,57 @@ clapper_app_window_state_buttons_dispose (GObject *object)
G_OBJECT_CLASS (parent_class)->dispose (object);
}
static void
clapper_app_window_state_buttons_set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
ClapperAppWindowStateButtons *self = CLAPPER_APP_WINDOW_STATE_BUTTONS_CAST (object);
switch (prop_id) {
case PROP_POSITION:
self->position = g_value_get_enum (value);
break;
case PROP_MENU_BUTTON:
if ((self->menu_button = GTK_WIDGET (g_value_get_object (value)))) {
gtk_box_prepend (GTK_BOX (self), self->menu_button);
_refresh_buttons_visibility (self);
}
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
clapper_app_window_state_buttons_class_init (ClapperAppWindowStateButtonsClass *klass)
{
GObjectClass *gobject_class = (GObjectClass *) klass;
GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;
GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "clappergtkwindowstatebuttons", 0,
"Clapper GTK Window State Buttons");
GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "clapperappwindowstatebuttons", 0,
"Clapper App Window State Buttons");
gobject_class->constructed = clapper_app_window_state_buttons_constructed;
gobject_class->set_property = clapper_app_window_state_buttons_set_property;
gobject_class->dispose = clapper_app_window_state_buttons_dispose;
widget_class->realize = clapper_app_window_state_buttons_realize;
widget_class->unrealize = clapper_app_window_state_buttons_unrealize;
param_specs[PROP_POSITION] = g_param_spec_enum ("position",
NULL, NULL, GTK_TYPE_POSITION_TYPE, GTK_POS_RIGHT,
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
param_specs[PROP_MENU_BUTTON] = g_param_spec_object ("menu-button",
NULL, NULL, GTK_TYPE_MENU_BUTTON,
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (gobject_class, PROP_LAST, param_specs);
gtk_widget_class_set_template_from_resource (widget_class,
CLAPPER_APP_RESOURCE_PREFIX "/ui/clapper-app-window-state-buttons.ui");
gtk_widget_class_bind_template_child (widget_class, ClapperAppWindowStateButtons, menu_button);
gtk_widget_class_bind_template_child (widget_class, ClapperAppWindowStateButtons, minimize_button);
gtk_widget_class_bind_template_child (widget_class, ClapperAppWindowStateButtons, maximize_button);
gtk_widget_class_bind_template_child (widget_class, ClapperAppWindowStateButtons, close_button);

View File

@@ -28,6 +28,9 @@
#include "clapper-app-file-dialog.h"
#include "clapper-app-utils.h"
#define MIN_WINDOW_WIDTH 352
#define MIN_WINDOW_HEIGHT 198
#define DEFAULT_WINDOW_WIDTH 1024
#define DEFAULT_WINDOW_HEIGHT 576
@@ -40,6 +43,8 @@
#define PERCENTAGE_ROUND(a) (round ((gdouble) a / 0.01) * 0.01)
#define AXIS_WINS_OVER(a,b) ((a > 0 && a - 0.3 > b) || (a < 0 && a + 0.3 < b))
#define MIN_STEP_DELAY 12000
#define GST_CAT_DEFAULT clapper_app_window_debug
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
@@ -59,6 +64,7 @@ struct _ClapperAppWindow
GSettings *settings;
guint seek_timeout;
guint resize_tick_id;
gboolean key_held;
gboolean scrolling;
@@ -74,6 +80,34 @@ struct _ClapperAppWindow
#define parent_class clapper_app_window_parent_class
G_DEFINE_TYPE (ClapperAppWindow, clapper_app_window, GTK_TYPE_APPLICATION_WINDOW)
typedef struct
{
gint dest_width, dest_height;
gint64 last_tick;
} ClapperAppWindowResizeData;
static guint16 instance_count = 0;
static inline GQuark
clapper_app_window_extra_options_get_quark (void)
{
return g_quark_from_static_string ("clapper-app-window-extra-options-quark");
}
static void
clapper_app_window_extra_options_free (ClapperAppWindowExtraOptions *extra_opts)
{
GST_TRACE ("Freeing window extra options: %p", extra_opts);
g_free (extra_opts->video_filter);
g_free (extra_opts->audio_filter);
g_free (extra_opts->video_sink);
g_free (extra_opts->audio_sink);
g_free (extra_opts);
}
static void
_media_item_title_changed_cb (ClapperMediaItem *item,
GParamSpec *pspec G_GNUC_UNUSED, ClapperAppWindow *self)
@@ -115,6 +149,15 @@ _queue_current_item_changed_cb (ClapperQueue *queue,
gst_clear_object (&current_item);
}
static void
_player_adaptive_bandwidth_changed_cb (ClapperPlayer *player,
GParamSpec *pspec G_GNUC_UNUSED, gpointer *user_data G_GNUC_UNUSED)
{
/* Do not take whole bandwidth */
clapper_player_set_adaptive_start_bitrate (player,
clapper_player_get_adaptive_bandwidth (player) * 0.8);
}
static gboolean
_get_seek_method_mapping (GValue *value,
GVariant *variant, gpointer user_data G_GNUC_UNUSED)
@@ -188,7 +231,7 @@ video_map_cb (GtkWidget *widget, ClapperAppWindow *self)
GST_TRACE_OBJECT (self, "Video map");
player = clapper_gtk_video_get_player (CLAPPER_GTK_VIDEO_CAST (self->video));
player = clapper_gtk_av_get_player (CLAPPER_GTK_AV_CAST (self->video));
g_signal_connect (player, "notify::volume",
G_CALLBACK (_player_volume_changed_cb), self);
@@ -209,7 +252,7 @@ video_unmap_cb (GtkWidget *widget, ClapperAppWindow *self)
GST_TRACE_OBJECT (self, "Video unmap");
player = clapper_gtk_video_get_player (CLAPPER_GTK_VIDEO_CAST (self->video));
player = clapper_gtk_av_get_player (CLAPPER_GTK_AV_CAST (self->video));
g_signal_handlers_disconnect_by_func (player, _player_volume_changed_cb, self);
g_signal_handlers_disconnect_by_func (player, _player_speed_changed_cb, self);
@@ -224,12 +267,16 @@ _open_subtitles_cb (ClapperGtkExtraMenuButton *button G_GNUC_UNUSED,
}
static void
right_click_pressed_cb (GtkGestureClick *click, gint n_press,
click_pressed_cb (GtkGestureClick *click, gint n_press,
gdouble x, gdouble y, ClapperAppWindow *self)
{
GdkCursor *cursor;
const gchar *cursor_name = NULL;
if (gtk_gesture_single_get_current_button (
GTK_GESTURE_SINGLE (click)) != GDK_BUTTON_SECONDARY)
return;
GST_LOG_OBJECT (self, "Right click pressed");
if ((cursor = gtk_widget_get_cursor (self->video)))
@@ -244,9 +291,152 @@ right_click_pressed_cb (GtkGestureClick *click, gint n_press,
}
}
static gboolean
_resize_tick (GtkWidget *widget, GdkFrameClock *frame_clock,
ClapperAppWindowResizeData *resize_data)
{
gint64 now = gdk_frame_clock_get_frame_time (frame_clock);
if (now - resize_data->last_tick >= MIN_STEP_DELAY) {
ClapperAppWindow *self = CLAPPER_APP_WINDOW_CAST (widget);
gint win_width, win_height;
GST_LOG_OBJECT (self, "Resize step, last: %" G_GINT64_FORMAT
", now: %" G_GINT64_FORMAT, resize_data->last_tick, now);
gtk_window_get_default_size (GTK_WINDOW (self), &win_width, &win_height);
if (win_width != resize_data->dest_width) {
gint width_diff = ABS (win_width - resize_data->dest_width);
gint step_size = (width_diff > 180) ? 120 : MAX (width_diff / 4, 1);
win_width += (win_width > resize_data->dest_width) ? -step_size : step_size;
}
if (win_height != resize_data->dest_height) {
gint height_diff = ABS (win_height - resize_data->dest_height);
gint step_size = (height_diff > 180) ? 120 : MAX (height_diff / 4, 1);
win_height += (win_height > resize_data->dest_height) ? -step_size : step_size;
}
gtk_window_set_default_size (GTK_WINDOW (self), win_width, win_height);
if (win_width == resize_data->dest_width
&& win_height == resize_data->dest_height) {
GST_DEBUG_OBJECT (self, "Window resize finish");
self->resize_tick_id = 0;
return G_SOURCE_REMOVE;
}
resize_data->last_tick = now;
}
return G_SOURCE_CONTINUE;
}
static void
right_click_released_cb (GtkGestureClick *click, gint n_press,
gdouble x, gdouble y, ClapperAppWindow *self)
_calculate_win_resize (gint win_w, gint win_h,
gint vid_w, gint vid_h, gint *dest_w, gint *dest_h)
{
gdouble win_aspect = (gdouble) win_w / win_h;
gdouble vid_aspect = (gdouble) vid_w / vid_h;
if (win_aspect < vid_aspect) {
while (!G_APPROX_VALUE (fmod (win_w, vid_aspect), 0, FLT_EPSILON))
win_w++;
win_h = round ((gdouble) win_w / vid_aspect);
if (win_h < MIN_WINDOW_HEIGHT) {
_calculate_win_resize (G_MAXINT, MIN_WINDOW_HEIGHT, vid_w, vid_h, dest_w, dest_h);
return;
}
} else {
while (!G_APPROX_VALUE (fmod (win_h * vid_aspect, 1.0), 0, FLT_EPSILON))
win_h++;
win_w = round ((gdouble) win_h * vid_aspect);
if (win_w < MIN_WINDOW_WIDTH) {
_calculate_win_resize (MIN_WINDOW_WIDTH, G_MAXINT, vid_w, vid_h, dest_w, dest_h);
return;
}
}
*dest_w = win_w;
*dest_h = win_h;
}
static void
_resize_window (ClapperAppWindow *self)
{
ClapperPlayer *player;
ClapperStreamList *vstreams;
ClapperVideoStream *vstream;
GdkToplevelState toplevel_state, disallowed;
if (self->resize_tick_id != 0)
return;
toplevel_state = gdk_toplevel_get_state (GDK_TOPLEVEL (
gtk_native_get_surface (GTK_NATIVE (self))));
disallowed = (GDK_TOPLEVEL_STATE_MINIMIZED
| GDK_TOPLEVEL_STATE_MAXIMIZED
| GDK_TOPLEVEL_STATE_FULLSCREEN
| GDK_TOPLEVEL_STATE_TILED);
if ((toplevel_state & disallowed) > 0) {
GST_DEBUG_OBJECT (self, "Cannot resize window in disallowed state");
return;
}
player = clapper_app_window_get_player (self);
vstreams = clapper_player_get_video_streams (player);
vstream = CLAPPER_VIDEO_STREAM_CAST (
clapper_stream_list_get_current_stream (vstreams));
if (vstream) {
gint video_width = clapper_video_stream_get_width (vstream);
gint video_height = clapper_video_stream_get_height (vstream);
if (G_LIKELY (video_width > 0 && video_height > 0)) {
gint win_width, win_height, dest_width, dest_height;
gtk_window_get_default_size (GTK_WINDOW (self), &win_width, &win_height);
_calculate_win_resize (win_width, win_height,
video_width, video_height, &dest_width, &dest_height);
/* Only begin resize when not already at perfect size */
if (dest_width != win_width || dest_height != win_height) {
ClapperAppWindowResizeData *resize_data;
resize_data = g_new0 (ClapperAppWindowResizeData, 1);
resize_data->dest_width = dest_width;
resize_data->dest_height = dest_height;
GST_DEBUG_OBJECT (self, "Window resize start, dest: %ix%i",
resize_data->dest_width, resize_data->dest_height);
self->resize_tick_id = gtk_widget_add_tick_callback (GTK_WIDGET (self),
(GtkTickCallback) _resize_tick, resize_data, g_free);
}
}
gst_object_unref (vstream);
}
}
static void
_handle_middle_click (ClapperAppWindow *self, GtkGestureClick *click)
{
_resize_window (self);
gtk_gesture_set_state (GTK_GESTURE (click), GTK_EVENT_SEQUENCE_CLAIMED);
}
static void
_handle_right_click (ClapperAppWindow *self, GtkGestureClick *click)
{
GdkSurface *surface;
GdkEventSequence *sequence;
@@ -267,6 +457,22 @@ right_click_released_cb (GtkGestureClick *click, gint n_press,
gtk_gesture_set_state (GTK_GESTURE (click), GTK_EVENT_SEQUENCE_CLAIMED);
}
static void
click_released_cb (GtkGestureClick *click, gint n_press,
gdouble x, gdouble y, ClapperAppWindow *self)
{
switch (gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (click))) {
case GDK_BUTTON_MIDDLE:
_handle_middle_click (self, click);
break;
case GDK_BUTTON_SECONDARY:
_handle_right_click (self, click);
break;
default:
break;
}
}
static void
drag_begin_cb (GtkGestureDrag *drag,
gdouble start_x, gdouble start_y, ClapperAppWindow *self)
@@ -318,7 +524,7 @@ drag_update_cb (GtkGestureDrag *drag,
static inline void
_alter_volume (ClapperAppWindow *self, gdouble dy)
{
ClapperPlayer *player = clapper_gtk_video_get_player (CLAPPER_GTK_VIDEO_CAST (self->video));
ClapperPlayer *player = clapper_gtk_av_get_player (CLAPPER_GTK_AV_CAST (self->video));
gdouble volume = clapper_player_get_volume (player);
/* We do not want for volume to change too suddenly */
@@ -341,7 +547,7 @@ _alter_volume (ClapperAppWindow *self, gdouble dy)
static inline void
_alter_speed (ClapperAppWindow *self, gdouble dx)
{
ClapperPlayer *player = clapper_gtk_video_get_player (CLAPPER_GTK_VIDEO_CAST (self->video));
ClapperPlayer *player = clapper_gtk_av_get_player (CLAPPER_GTK_AV_CAST (self->video));
gdouble speed = clapper_player_get_speed (player);
speed -= dx * 0.02;
@@ -365,8 +571,7 @@ _begin_seek_operation (ClapperAppWindow *self)
if (self->seeking)
return FALSE;
player = clapper_gtk_video_get_player (
CLAPPER_GTK_VIDEO_CAST (self->video));
player = clapper_gtk_av_get_player (CLAPPER_GTK_AV_CAST (self->video));
queue = clapper_player_get_queue (player);
current_item = clapper_queue_get_current_item (queue);
@@ -394,8 +599,8 @@ static void
_end_seek_operation (ClapperAppWindow *self)
{
if (self->seeking && self->current_duration > 0) {
ClapperPlayer *player = clapper_gtk_video_get_player (
CLAPPER_GTK_VIDEO_CAST (self->video));
ClapperPlayer *player = clapper_gtk_av_get_player (
CLAPPER_GTK_AV_CAST (self->video));
clapper_player_seek_custom (player, self->pending_position,
g_settings_get_int (self->settings, "seek-method"));
@@ -471,11 +676,14 @@ scroll_cb (GtkEventControllerScroll *scroll,
pickup = _pick_pointer_widget (self);
/* We do not want to accidentally allow this controller
* to handle scrolls when hovering over scrolled window */
if (pickup && (GTK_IS_SCROLLED_WINDOW (pickup)
|| gtk_widget_get_ancestor (pickup, GTK_TYPE_SCROLLED_WINDOW)))
return FALSE;
/* We do not want to accidentally allow this controller to handle
* scrolls when hovering over widgets that also handle scroll */
while (pickup && !CLAPPER_GTK_IS_VIDEO (pickup)) {
if (GTK_IS_SCROLLED_WINDOW (pickup) || GTK_IS_RANGE (pickup))
return FALSE;
pickup = gtk_widget_get_parent (pickup);
}
device = gtk_event_controller_get_current_event_device (GTK_EVENT_CONTROLLER (scroll));
@@ -555,8 +763,8 @@ _handle_seek_key_press (ClapperAppWindow *self, gboolean forward)
static void
_handle_chapter_key_press (ClapperAppWindow *self, gboolean forward)
{
ClapperPlayer *player = clapper_gtk_video_get_player (
CLAPPER_GTK_VIDEO_CAST (self->video));
ClapperPlayer *player = clapper_gtk_av_get_player (
CLAPPER_GTK_AV_CAST (self->video));
ClapperQueue *queue = clapper_player_get_queue (player);
ClapperMediaItem *current_item = clapper_queue_get_current_item (queue);
ClapperTimeline *timeline;
@@ -646,8 +854,8 @@ _handle_chapter_key_press (ClapperAppWindow *self, gboolean forward)
static void
_handle_item_key_press (ClapperAppWindow *self, gboolean forward)
{
ClapperPlayer *player = clapper_gtk_video_get_player (
CLAPPER_GTK_VIDEO_CAST (self->video));
ClapperPlayer *player = clapper_gtk_av_get_player (
CLAPPER_GTK_AV_CAST (self->video));
ClapperQueue *queue = clapper_player_get_queue (player);
guint prev_index, index;
@@ -655,7 +863,7 @@ _handle_item_key_press (ClapperAppWindow *self, gboolean forward)
prev_index = clapper_queue_get_current_index (queue);
gtk_widget_activate_action (self->video,
(forward) ? "video.next-item" : "video.previous-item", NULL);
(forward) ? "av.next-item" : "av.previous-item", NULL);
index = clapper_queue_get_current_index (queue);
/* Notify only when changed */
@@ -672,14 +880,14 @@ _handle_speed_key_press (ClapperAppWindow *self, gboolean forward)
forward ^= (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL);
gtk_widget_activate_action (self->video,
(forward) ? "video.speed-up" : "video.speed-down", NULL);
(forward) ? "av.speed-up" : "av.speed-down", NULL);
}
static inline void
_handle_progression_key_press (ClapperAppWindow *self)
{
ClapperPlayer *player = clapper_gtk_video_get_player (
CLAPPER_GTK_VIDEO_CAST (self->video));
ClapperPlayer *player = clapper_gtk_av_get_player (
CLAPPER_GTK_AV_CAST (self->video));
ClapperQueue *queue = clapper_player_get_queue (player);
ClapperQueueProgressionMode mode;
const gchar *icon = NULL, *label = NULL;
@@ -698,15 +906,15 @@ key_pressed_cb (GtkEventControllerKey *controller, guint keyval,
{
switch (keyval) {
case GDK_KEY_Up:
if (state == 0)
gtk_widget_activate_action (self->video, "video.volume-up", NULL);
if ((state & GDK_MODIFIER_MASK) == 0)
gtk_widget_activate_action (self->video, "av.volume-up", NULL);
break;
case GDK_KEY_Down:
if (state == 0)
gtk_widget_activate_action (self->video, "video.volume-down", NULL);
if ((state & GDK_MODIFIER_MASK) == 0)
gtk_widget_activate_action (self->video, "av.volume-down", NULL);
break;
case GDK_KEY_Left:
if (state == 0) {
if ((state & GDK_MODIFIER_MASK) == 0) {
_handle_seek_key_press (self, FALSE);
} else if (!self->key_held && (state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK) {
_handle_chapter_key_press (self, FALSE);
@@ -715,11 +923,11 @@ key_pressed_cb (GtkEventControllerKey *controller, guint keyval,
}
break;
case GDK_KEY_j:
if (state == 0)
if ((state & GDK_MODIFIER_MASK) == 0)
_handle_seek_key_press (self, FALSE);
break;
case GDK_KEY_Right:
if (state == 0) {
if ((state & GDK_MODIFIER_MASK) == 0) {
_handle_seek_key_press (self, TRUE);
} else if (!self->key_held && (state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK) {
_handle_chapter_key_press (self, TRUE);
@@ -728,13 +936,13 @@ key_pressed_cb (GtkEventControllerKey *controller, guint keyval,
}
break;
case GDK_KEY_l:
if (state == 0)
if ((state & GDK_MODIFIER_MASK) == 0)
_handle_seek_key_press (self, TRUE);
break;
case GDK_KEY_space:
case GDK_KEY_k:
if (!self->key_held) // Disable constant toggling when key held
gtk_widget_activate_action (self->video, "video.toggle-play", NULL);
if (!self->key_held && (state & GDK_MODIFIER_MASK) == 0)
gtk_widget_activate_action (self->video, "av.toggle-play", NULL);
break;
case GDK_KEY_less:
if (!self->key_held) // Needs seek (action is slow)
@@ -745,10 +953,11 @@ key_pressed_cb (GtkEventControllerKey *controller, guint keyval,
_handle_speed_key_press (self, TRUE);
break;
case GDK_KEY_m:
gtk_widget_activate_action (self->video, "video.toggle-mute", NULL);
if (!self->key_held && (state & GDK_MODIFIER_MASK) == 0)
gtk_widget_activate_action (self->video, "av.toggle-mute", NULL);
break;
case GDK_KEY_p:
if (!self->key_held)
if (!self->key_held && (state & GDK_MODIFIER_MASK) == 0)
_handle_progression_key_press (self);
break;
default:
@@ -862,6 +1071,23 @@ toggle_fullscreen (GSimpleAction *action, GVariant *param, gpointer user_data)
video_toggle_fullscreen_cb (CLAPPER_GTK_VIDEO_CAST (self->video), self);
}
static void
unfullscreen (GSimpleAction *action, GVariant *param, gpointer user_data)
{
GtkWindow *window = GTK_WINDOW (user_data);
if (gtk_window_is_fullscreen (window)) {
ClapperAppWindow *self = CLAPPER_APP_WINDOW_CAST (window);
video_toggle_fullscreen_cb (CLAPPER_GTK_VIDEO_CAST (self->video), self);
}
}
static void
auto_resize (GSimpleAction *action, GVariant *param, gpointer user_data)
{
_resize_window (CLAPPER_APP_WINDOW_CAST (user_data));
}
static void
show_help_overlay (GSimpleAction *action, GVariant *param, gpointer user_data)
{
@@ -896,7 +1122,14 @@ clapper_app_window_get_video (ClapperAppWindow *self)
ClapperPlayer *
clapper_app_window_get_player (ClapperAppWindow *self)
{
return clapper_gtk_video_get_player (CLAPPER_GTK_VIDEO_CAST (self->video));
return clapper_gtk_av_get_player (CLAPPER_GTK_AV_CAST (self->video));
}
ClapperAppWindowExtraOptions *
clapper_app_window_get_extra_options (ClapperAppWindow *self)
{
return g_object_get_qdata ((GObject *) self,
clapper_app_window_extra_options_get_quark ());
}
void
@@ -960,9 +1193,21 @@ clapper_app_window_unrealize (GtkWidget *widget)
static void
clapper_app_window_init (ClapperAppWindow *self)
{
ClapperAppWindowExtraOptions *extra_opts;
GtkSettings *settings;
GtkWidget *dummy_titlebar;
gint distance = 0;
GtkWindowGroup *group;
gtk_widget_set_size_request (GTK_WIDGET (self),
MIN_WINDOW_WIDTH, MIN_WINDOW_HEIGHT);
extra_opts = g_new0 (ClapperAppWindowExtraOptions, 1);
GST_TRACE ("Created window extra options: %p", extra_opts);
g_object_set_qdata_full ((GObject *) self,
clapper_app_window_extra_options_get_quark (),
extra_opts, (GDestroyNotify) clapper_app_window_extra_options_free);
gtk_widget_init_template (GTK_WIDGET (self));
@@ -984,6 +1229,11 @@ clapper_app_window_init (ClapperAppWindow *self)
gtk_drop_target_set_gtypes (self->drop_target,
(GType[3]) { GDK_TYPE_FILE_LIST, G_TYPE_FILE, G_TYPE_STRING }, 3);
/* Add to window group */
group = gtk_window_group_new ();
gtk_window_group_add_window (group, GTK_WINDOW (self));
g_object_unref (group);
}
static void
@@ -992,12 +1242,15 @@ clapper_app_window_constructed (GObject *object)
ClapperAppWindow *self = CLAPPER_APP_WINDOW_CAST (object);
ClapperPlayer *player = clapper_app_window_get_player (self);
ClapperQueue *queue = clapper_player_get_queue (player);
ClapperEnhancerProxyList *proxies = clapper_player_get_enhancer_proxies (player);
ClapperEnhancerProxy *proxy;
ClapperGtkExtraMenuButton *button;
GstElement *element;
AdwStyleManager *manager;
static const GActionEntry win_entries[] = {
{ "toggle-fullscreen", toggle_fullscreen, NULL, NULL, NULL },
{ "unfullscreen", unfullscreen, NULL, NULL, NULL },
{ "auto-resize", auto_resize, NULL, NULL, NULL },
{ "show-help-overlay", show_help_overlay, NULL, NULL, NULL },
};
@@ -1005,17 +1258,29 @@ clapper_app_window_constructed (GObject *object)
ClapperFeature *feature = NULL;
#endif
gchar mpris_name[45];
g_snprintf (mpris_name, sizeof (mpris_name),
"org.mpris.MediaPlayer2.Clapper.instance%" G_GUINT16_FORMAT, instance_count++);
self->settings = g_settings_new (CLAPPER_APP_ID);
self->last_volume = PERCENTAGE_ROUND (g_settings_get_double (self->settings, "volume"));
if ((proxy = clapper_enhancer_proxy_list_get_proxy_by_module (proxies, "clapper-mpris"))) {
clapper_enhancer_proxy_set_locally (proxy,
"own-name", mpris_name,
"identity", CLAPPER_APP_NAME,
"desktop-entry", CLAPPER_APP_ID,
"queue-controllable", TRUE, NULL);
gst_object_unref (proxy);
} else {
#if CLAPPER_HAVE_MPRIS
feature = CLAPPER_FEATURE (clapper_mpris_new (
"org.mpris.MediaPlayer2.Clapper",
"Clapper", CLAPPER_APP_ID));
clapper_mpris_set_queue_controllable (CLAPPER_MPRIS (feature), TRUE);
clapper_player_add_feature (player, feature);
gst_object_unref (feature);
feature = CLAPPER_FEATURE (clapper_mpris_new (
mpris_name, CLAPPER_APP_NAME, CLAPPER_APP_ID));
clapper_mpris_set_queue_controllable (CLAPPER_MPRIS (feature), TRUE);
clapper_player_add_feature (player, feature);
gst_object_unref (feature);
#endif
}
#if CLAPPER_HAVE_SERVER
feature = CLAPPER_FEATURE (clapper_server_new ());
@@ -1034,16 +1299,15 @@ clapper_app_window_constructed (GObject *object)
/* FIXME: Allow setting sink/filter elements from prefs window
* (this should include parsing bin descriptions) */
element = gst_element_factory_make ("scaletempo", NULL);
if (G_LIKELY (element != NULL))
clapper_player_set_audio_filter (player, element);
clapper_player_set_autoplay (player, TRUE);
/* No need to also call this here, as item is selected
/* No need to also call these here, as they only change
* after application window is contructed */
g_signal_connect (queue, "notify::current-item",
G_CALLBACK (_queue_current_item_changed_cb), self);
g_signal_connect (player, "notify::adaptive-bandwidth",
G_CALLBACK (_player_adaptive_bandwidth_changed_cb), NULL);
g_settings_bind (self->settings, "audio-offset",
player, "audio-offset", G_SETTINGS_BIND_GET);
@@ -1081,6 +1345,11 @@ clapper_app_window_dispose (GObject *object)
{
ClapperAppWindow *self = CLAPPER_APP_WINDOW_CAST (object);
if (self->resize_tick_id != 0) {
gtk_widget_remove_tick_callback (GTK_WIDGET (self), self->resize_tick_id);
self->resize_tick_id = 0;
}
g_clear_handle_id (&self->seek_timeout, g_source_remove);
gtk_widget_dispose_template (GTK_WIDGET (object), CLAPPER_APP_TYPE_WINDOW);
@@ -1140,8 +1409,8 @@ clapper_app_window_class_init (ClapperAppWindowClass *klass)
gtk_widget_class_bind_template_callback (widget_class, key_pressed_cb);
gtk_widget_class_bind_template_callback (widget_class, key_released_cb);
gtk_widget_class_bind_template_callback (widget_class, right_click_pressed_cb);
gtk_widget_class_bind_template_callback (widget_class, right_click_released_cb);
gtk_widget_class_bind_template_callback (widget_class, click_pressed_cb);
gtk_widget_class_bind_template_callback (widget_class, click_released_cb);
gtk_widget_class_bind_template_callback (widget_class, drag_begin_cb);
gtk_widget_class_bind_template_callback (widget_class, drag_update_cb);

View File

@@ -27,6 +27,15 @@ G_BEGIN_DECLS
#define CLAPPER_APP_TYPE_WINDOW (clapper_app_window_get_type())
#define CLAPPER_APP_WINDOW_CAST(obj) ((ClapperAppWindow *)(obj))
typedef struct
{
gchar *video_filter;
gchar *audio_filter;
gchar *video_sink;
gchar *audio_sink;
} ClapperAppWindowExtraOptions;
G_DECLARE_FINAL_TYPE (ClapperAppWindow, clapper_app_window, CLAPPER_APP, WINDOW, GtkApplicationWindow)
G_GNUC_INTERNAL
@@ -38,6 +47,9 @@ GtkWidget * clapper_app_window_get_video (ClapperAppWindow *window);
G_GNUC_INTERNAL
ClapperPlayer * clapper_app_window_get_player (ClapperAppWindow *window);
G_GNUC_INTERNAL
ClapperAppWindowExtraOptions * clapper_app_window_get_extra_options (ClapperAppWindow *window);
G_GNUC_INTERNAL
void clapper_app_window_ensure_no_initial_state (ClapperAppWindow *window);

View File

@@ -1,8 +1,3 @@
window.app {
min-width: 352px;
min-height: 198px;
}
window .initialstate {
padding-left: 6px;
padding-right: 6px;
@@ -26,10 +21,10 @@ window.info .subcontent streamlist preferencesgroup {
window.preferences .subcontent {
margin: 16px;
}
window.preferences .pluginssubpage .subcontent popover {
window.preferences .configsubpage .subcontent popover {
min-width: 264px;
}
window.preferences .pluginssubpage .subcontent button.pill {
window.preferences .configsubpage .subcontent button.pill {
margin-top: 8px;
margin-bottom: 8px;
}
@@ -54,12 +49,18 @@ clapper-app-headerbar .titlelabel label {
clapper-app-headerbar clapper-app-window-state-buttons {
margin-top: 8px;
}
clapper-app-headerbar clapper-app-window-state-buttons:dir(ltr) {
clapper-app-headerbar clapper-app-window-state-buttons.filled.right:dir(ltr) {
padding-right: 6px;
}
clapper-app-headerbar clapper-app-window-state-buttons:dir(rtl) {
clapper-app-headerbar clapper-app-window-state-buttons.filled.right:dir(rtl) {
padding-left: 6px;
}
clapper-app-headerbar clapper-app-window-state-buttons.filled.left:dir(ltr) {
padding-left: 6px;
}
clapper-app-headerbar clapper-app-window-state-buttons.filled.left:dir(rtl) {
padding-right: 6px;
}
clapper-app-queue-list .topseparator {
margin-top: 2px;

View File

@@ -1,4 +1,5 @@
[Desktop Entry]
# Translators: Do NOT translate app name!
Name=Clapper
GenericName=Multimedia Player
Comment=Play videos and music
@@ -11,6 +12,11 @@ StartupNotify=true
Terminal=false
Type=Application
# Translators: Search terms to find this application. Do NOT translate the semicolons!
Keywords=Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;Album;Music;GNOME;Clapper;
Keywords=Video;Movie;Film;Clip;Series;Player;Playlist;DVD;TV;Disc;
# Translators: Do NOT translate or transliterate this text (these are enum types)!
X-Purism-FormFactor=Workstation;Mobile;
Actions=new-window;
[Desktop Action new-window]
Name=New Window
Exec=clapper --new-window

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<schemalist gettext-domain="com.github.rafostar.Clapper">
<schemalist gettext-domain="clapper-app">
<schema id="com.github.rafostar.Clapper" path="/com/github/rafostar/Clapper/">
<!-- General -->
<key name="seek-method" type="i">
@@ -49,6 +49,10 @@
<default>1.0</default>
<summary>Stores last speed value to apply on startup</summary>
</key>
<key name="adaptive-start-bitrate" type="i">
<default>1600000</default>
<summary>Stores initial adaptive streaming bitrate to apply on startup</summary>
</key>
<key name="progression-mode" type="i">
<default>1</default>
<summary>Stores last queue progression mode used to apply on startup</summary>

View File

@@ -0,0 +1,8 @@
gnome.compile_schemas(
build_by_default: true,
depend_files: ['com.github.rafostar.Clapper.gschema.xml']
)
install_data('com.github.rafostar.Clapper.gschema.xml',
install_dir: join_paths(prefix, datadir, 'glib-2.0', 'schemas')
)

View File

@@ -1,14 +1,11 @@
if not ['linux'].contains(host_machine.system())
subdir_done()
endif
appstream_util = find_program('appstream-util', required: false)
if appstream_util.found()
appstream_cli = find_program('appstreamcli', required: false)
if appstream_cli.found()
test('Validate appstream file',
appstream_util,
appstream_cli,
args: [
'validate-relax',
'--nonet',
'validate',
'--no-net',
'--explain',
join_paths(meson.current_source_dir(), 'metainfo', 'com.github.rafostar.Clapper.metainfo.xml'),
]
)
@@ -29,24 +26,40 @@ endif
install_subdir('icons',
install_dir: join_paths(prefix, datadir)
)
install_subdir('mime',
install_dir: join_paths(prefix, datadir)
)
install_subdir('applications',
install_dir: join_paths(prefix, datadir)
)
install_subdir('metainfo',
install_dir: join_paths(prefix, datadir)
)
install_subdir('glib-2.0',
install_dir: join_paths(prefix, datadir)
)
subdir('dbus-1')
is_linux = ['linux'].contains(host_machine.system())
is_windows = ['windows'].contains(host_machine.system())
if is_linux
desktop_file = i18n.merge_file(
input: 'applications/com.github.rafostar.Clapper.desktop.in',
output: 'com.github.rafostar.Clapper.desktop',
type: 'desktop',
po_dir: '../po',
install: true,
install_dir: join_paths(prefix, datadir, 'applications'),
)
desktop_utils = find_program('desktop-file-validate', required: false)
if desktop_utils.found()
test('Validate desktop file', desktop_utils, args: [desktop_file])
endif
subdir('dbus-1')
endif
if not is_windows
install_subdir('mime',
install_dir: join_paths(prefix, datadir)
)
endif
subdir('glib-2.0/schemas')
gnome.post_install(
glib_compile_schemas: true,
gtk_update_icon_cache: true,
update_desktop_database: true,
update_mime_database: true,
update_desktop_database: is_linux,
update_mime_database: not is_windows,
)

Some files were not shown because too many files have changed in this diff Show More