Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

V2 #310

Open
wants to merge 68 commits into
base: master
Choose a base branch
from
Open

V2 #310

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
274bcad
[Analyzer] Refacto our image analyzers to further expand the gem (#254)
Mth0158 Nov 24, 2024
d8c0e60
[Analyzer] Improve tempfile usage and remove useless code
Mth0158 Nov 25, 2024
15524f2
[Analyzer] Add test for rotated image
Mth0158 Nov 25, 2024
0ef64e4
[Analyzer] Fix issue with tempfile (#266)
Mth0158 Nov 25, 2024
77491c6
[Analyzer] Ensure tempfile is always closed
Mth0158 Nov 25, 2024
96033ed
[Analyzer] Correct rotated image test
Mth0158 Nov 25, 2024
46bb703
[Readme] Rework additional info section
Mth0158 Nov 30, 2024
4b4936a
[Readme] Reword installation section
Mth0158 Nov 30, 2024
5b9338f
[Readme] Reword title section
Mth0158 Nov 30, 2024
029e143
[Readme] Reword validator section and its first 2 validators
Mth0158 Nov 30, 2024
7a43abd
[Readme] Reword size validator section
Mth0158 Nov 30, 2024
aaead6a
[Readme] Reword total_size validator section
Mth0158 Nov 30, 2024
cc8e597
[Readme] Reword dimension validator section
Mth0158 Nov 30, 2024
789e65f
[Readme] Add upgrading from 1.x to 2.x section
Mth0158 Nov 30, 2024
85f7988
[Readme] Reword limit validator section
Mth0158 Nov 30, 2024
0f6540c
[Readme] Reword aspect_ratio validator section
Mth0158 Nov 30, 2024
04f2704
[Readme] Reword processable_image validator section
Mth0158 Nov 30, 2024
b16c8af
[Readme] Remove usage section
Mth0158 Nov 30, 2024
d882cb2
[Readme] Rework contributing section
Mth0158 Nov 30, 2024
3c3bed1
[Readme] Rework test matchers section
Mth0158 Nov 30, 2024
8bb8d10
[Readme] Remove sample section
Mth0158 Nov 30, 2024
9d645d0
[Readme] Rework I18n section
Mth0158 Nov 30, 2024
c0bf0d8
[Readme] Rework content_type spoofing section
Mth0158 Dec 2, 2024
02ba89d
[Readme] Add best practices for content_type validator
Mth0158 Dec 3, 2024
d7d8c19
[Readme] Add best practices for size validator
Mth0158 Dec 3, 2024
73c2397
[Readme] Add pending TODOs
Mth0158 Dec 3, 2024
dab037e
Fixed typo in README in test matcher section.
Nov 24, 2024
6b3e679
[Analyzer] Add video analyzer (#255)
Mth0158 Nov 25, 2024
667ffee
[ContentSpoof] Slight refacto for open3 command
Mth0158 Nov 26, 2024
44623cd
[Analyzer] Add explicit open3 require
Mth0158 Dec 2, 2024
0deda22
[CI] Add FFmpeg install in CI
Mth0158 Dec 2, 2024
3402fca
Merge pull request #311 from igorkasyanchuk/255-handle-video-media
Mth0158 Dec 4, 2024
a40dc82
Merge pull request #312 from igorkasyanchuk/264-rewrite-the-readme-to…
Mth0158 Dec 4, 2024
b2b4467
[Validator/Matcher] Add most_common_mime_types tests for content_type…
Mth0158 Nov 13, 2024
059f5f8
[Validator] Correct failing ensure_content_types_validity
Mth0158 Nov 14, 2024
3fb3ce8
[Validator] Add dedicated error for 'image/jpg' content type
Mth0158 Dec 4, 2024
d3cd270
Merge pull request #313 from igorkasyanchuk/292-validate_content_type…
Mth0158 Dec 4, 2024
88eb0f6
[Readme] Improve size validator best practices section (#317)
Mth0158 Dec 5, 2024
86a09a9
Merge pull request #318 from igorkasyanchuk/317-readme-add-explanatio…
Mth0158 Dec 5, 2024
6050552
Merge branch 'master' into v2
Mth0158 Dec 21, 2024
2aa783b
[Merge] Correct merge issues
Mth0158 Dec 21, 2024
89c24ba
[Merge] Correct merge issues
Mth0158 Dec 21, 2024
9747d97
[Readme] Update aspect_ratio validator part
Mth0158 Dec 21, 2024
10c6e72
[Analyzer] Add audio analyzer (#301)
Mth0158 Dec 21, 2024
42252fd
[Analyzer] Round video duration like audio one
Mth0158 Dec 26, 2024
6bb9b54
Merge pull request #333 from igorkasyanchuk/301-handle-audio-media
Mth0158 Dec 26, 2024
792fcec
[Error] Change image_metadata_missing to media_metadata_missing
Mth0158 Dec 26, 2024
7dc55c0
[Error] Update aspect_ratio error messages
Mth0158 Dec 26, 2024
1723adc
[Error] Update content_type spoofed error messages
Mth0158 Dec 27, 2024
a2154d8
[Error] Update content_type error messages
Mth0158 Dec 27, 2024
150eba7
[Error] Update limit error messages
Mth0158 Dec 27, 2024
05d7ac2
[Error] Update dimension error messages
Mth0158 Dec 29, 2024
4fd2728
[Error] Fix failing test for limit validator
Mth0158 Dec 29, 2024
75cc1c0
[Test] Change to right order for assert_equal
Mth0158 Dec 29, 2024
192a2bc
Merge pull request #335 from igorkasyanchuk/302-rework-error-messages…
Mth0158 Dec 29, 2024
12bea24
[Validator] Replace processable_image validator to processable_file (…
Mth0158 Dec 29, 2024
e051623
Merge pull request #336 from igorkasyanchuk/314-validator-refacto-pro…
Mth0158 Dec 29, 2024
02e4d48
[Validator] Refacto BaseComparisonValidator
Mth0158 Dec 29, 2024
b1c2ce2
[Validator] Add duration validator (#304)
Mth0158 Dec 29, 2024
8673a02
[Matcher] Add duration validator matcher
Mth0158 Dec 29, 2024
340dfe8
[Analyzer] Fix failing test
Mth0158 Dec 29, 2024
9a0172b
Merge pull request #337 from igorkasyanchuk/304-validator-add-a-durat…
Mth0158 Dec 30, 2024
da685bb
Merge branch 'master' into v2
Mth0158 Dec 30, 2024
b57b5ef
[Analyzer] Refacto content_type_spoof_detector into an analyzer (#334)
Mth0158 Jan 2, 2025
8dae99c
[Validator] Enhance content_type spoof errors
Mth0158 Jan 2, 2025
8723f45
[Analyzer] Fix failing tests
Mth0158 Jan 2, 2025
c39c9d8
Merge pull request #342 from igorkasyanchuk/334-analyzer-refacto-the-…
Mth0158 Jan 2, 2025
fd00852
[Validator] Handle content_type with parameters properly
Mth0158 Jan 2, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/minitest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ jobs:
- name: Install libvips
run: sudo apt-get update && sudo apt-get -y install libvips

- name: Install FFmpeg
run: sudo apt-get update && sudo apt-get -y install ffmpeg

- name: Check out code
uses: actions/checkout@v4

Expand Down
817 changes: 605 additions & 212 deletions README.md

Large diffs are not rendered by default.

80 changes: 50 additions & 30 deletions config/locales/da.yml
Original file line number Diff line number Diff line change
@@ -1,33 +1,53 @@
da:
errors:
messages:
content_type_invalid: "har en ugyldig indholdstype"
spoofed_content_type: "har en indholdstype, der ikke er, hvad den erklæres gennem sit indhold, filnavn og udvidelse"
file_size_not_less_than: "filstørrelsen skal være mindre end %{max_size} (den nuværende størrelse er %{file_size})"
file_size_not_less_than_or_equal_to: "filstørrelsen skal være mindre end eller lig med %{max_size} (den nuværende størrelse er %{file_size})"
file_size_not_greater_than: "filstørrelsen skal være større end %{min_size} (den nuværende størrelse er %{file_size})"
file_size_not_greater_than_or_equal_to: "filstørrelsen skal være større end eller lig med %{min_size} (den nuværende størrelse er %{file_size})"
file_size_not_between: "filstørrelsen skal være mellem %{min_size} og %{max_size} (den nuværende størrelse er %{file_size})"
total_file_size_not_less_than: "den samlede filstørrelse skal være mindre end %{max_size} (aktuel størrelse er %{total_file_size})"
total_file_size_not_less_than_or_equal_to: "den samlede filstørrelse skal være mindre end eller lig med %{max_size} (aktuel størrelse er %{total_file_size})"
total_file_size_not_greater_than: "den samlede filstørrelse skal være større end %{min_size} (aktuel størrelse er %{total_file_size})"
total_file_size_not_greater_than_or_equal_to: "den samlede filstørrelse skal være større end eller lig med %{min_size} (aktuel størrelse er %{total_file_size})"
total_file_size_not_between: "den samlede filstørrelse skal være mellem %{min_size} og %{max_size} (aktuel størrelse er %{total_file_size})"
limit_out_of_range: "det samlede antal er uden for rækkevidde"
image_metadata_missing: "er ikke et gyldigt billede"
dimension_min_inclusion: "skal være større end eller lig med %{width} x %{height} pixel"
dimension_max_inclusion: "skal være mindre end eller lig med %{width} x %{height} pixel"
dimension_width_inclusion: "bredden er ikke inkluderet mellem %{min} og %{max} pixel"
dimension_height_inclusion: "højden er ikke inkluderet mellem %{min} og %{max} pixel"
dimension_width_greater_than_or_equal_to: "bredden skal være større end eller lig med %{length} pixel"
dimension_height_greater_than_or_equal_to: "højden skal være større end eller lig med %{length} pixel"
dimension_width_less_than_or_equal_to: "bredden skal være mindre end eller lig med %{length} pixel"
dimension_height_less_than_or_equal_to: "højden skal være mindre end eller lig med %{length} pixel"
dimension_width_equal_to: "bredden skal være lig med %{length} pixel"
dimension_height_equal_to: "højden skal være lig med %{length} pixel"
aspect_ratio_not_square: "skal være et kvadratisk billede"
aspect_ratio_not_portrait: "skal være et portrætbillede"
aspect_ratio_not_landscape: "skal være et landskabsbillede"
aspect_ratio_is_not: "skal have et størrelsesforhold på %{aspect_ratio}"
image_not_processable: "er ikke et gyldigt billede"
aspect_ratio_invalid: "har et ugyldigt billedformat"
content_type_invalid:
one: "har en ugyldig indholdstype (autoriseret indholdstype er %{authorized_human_content_types})"
other: "har en ugyldig indholdstype (autoriserede indholdstyper er %{authorized_human_content_types})"
content_type_spoofed:
one: "har en indholdstype, der ikke svarer til den, der registreres gennem dens indhold (autoriseret indholdstype er %{authorized_human_content_types})"
other: "har en indholdstype, der ikke svarer til den, der registreres gennem dens indhold (autoriserede indholdstyper er %{authorized_human_content_types})"
file_size_not_less_than: "filstørrelsen skal være mindre end %{max} (den nuværende størrelse er %{file_size})"
file_size_not_less_than_or_equal_to: "filstørrelsen skal være mindre end eller lig med %{max} (den nuværende størrelse er %{file_size})"
file_size_not_greater_than: "filstørrelsen skal være større end %{min} (den nuværende størrelse er %{file_size})"
file_size_not_greater_than_or_equal_to: "filstørrelsen skal være større end eller lig med %{min} (den nuværende størrelse er %{file_size})"
file_size_not_between: "filstørrelsen skal være mellem %{min} og %{max} (den nuværende størrelse er %{file_size})"
total_file_size_not_less_than: "den samlede filstørrelse skal være mindre end %{max} (aktuel størrelse er %{total_file_size})"
total_file_size_not_less_than_or_equal_to: "den samlede filstørrelse skal være mindre end eller lig med %{max} (aktuel størrelse er %{total_file_size})"
total_file_size_not_greater_than: "den samlede filstørrelse skal være større end %{min} (aktuel størrelse er %{total_file_size})"
total_file_size_not_greater_than_or_equal_to: "den samlede filstørrelse skal være større end eller lig med %{min} (aktuel størrelse er %{total_file_size})"
total_file_size_not_between: "den samlede filstørrelse skal være mellem %{min} og %{max} (aktuel størrelse er %{total_file_size})"
duration_not_less_than: "varighed skal være mindre end %{max} (nuværende varighed er %{duration})"
duration_not_less_than_or_equal_to: "varighed skal være mindre end eller lig med %{max} (nuværende varighed er %{duration})"
duration_not_greater_than: "varigheden skal være større end %{min} (den aktuelle varighed er %{duration})"
duration_not_greater_than_or_equal_to: "varigheden skal være større end eller lig med %{min} (den aktuelle varighed er %{duration})"
duration_not_between: "varighed skal være mellem %{min} og %{max} (den aktuelle varighed er %{duration})"
limit_out_of_range:
zero: "ingen filer vedhæftet (skal have mellem %{min} og %{max} filer)"
one: "kun 1 fil vedhæftet (skal have mellem %{min} og %{max} filer)"
other: "det samlede antal filer skal være mellem %{min} og %{max} filer (der er %{count} filer vedhæftet)"
limit_min_not_reached:
zero: "ingen filer vedhæftet (skal have mindst %{min} filer)"
one: "kun 1 fil vedhæftet (skal have mindst %{min} filer)"
other: "%{count} filer vedhæftet (skal have mindst %{min} filer)"
limit_max_exceeded:
zero: "ingen filer vedhæftet (maks. er %{max} filer)"
one: "for mange vedhæftede filer (maks. er %{max} filer, fik %{count})"
other: "for mange vedhæftede filer (maks. er %{max} filer, fik %{count})"
media_metadata_missing: "er ikke en gyldig mediefil"
dimension_min_not_included_in: "skal være større end eller lig med %{width} x %{height} pixel"
dimension_max_not_included_in: "skal være mindre end eller lig med %{width} x %{height} pixel"
dimension_width_not_included_in: "bredden er ikke inkluderet mellem %{min} og %{max} pixel"
dimension_height_not_included_in: "højden er ikke inkluderet mellem %{min} og %{max} pixel"
dimension_width_not_greater_than_or_equal_to: "bredden skal være større end eller lig med %{length} pixel"
dimension_height_not_greater_than_or_equal_to: "højden skal være større end eller lig med %{length} pixel"
dimension_width_not_less_than_or_equal_to: "bredden skal være mindre end eller lig med %{length} pixel"
dimension_height_not_less_than_or_equal_to: "højden skal være mindre end eller lig med %{length} pixel"
dimension_width_not_equal_to: "bredden skal være lig med %{length} pixel"
dimension_height_not_equal_to: "højden skal være lig med %{length} pixel"
aspect_ratio_not_square: "skal være firkantet (nuværende fil er %{width}x%{height}px)"
aspect_ratio_not_portrait: "skal være portræt (nuværende fil er %{width}x%{height}px)"
aspect_ratio_not_landscape: "skal være landskab (nuværende fil er %{width}x%{height}px)"
aspect_ratio_not_x_y: "skal være %{authorized_aspect_ratios} (nuværende fil er %{width}x%{height}px)"
aspect_ratio_invalid: "har et ugyldigt aspektforhold (gyldige aspektforhold er %{authorized_aspect_ratios})"
file_not_processable: "identificeres ikke som en gyldig mediefil"
80 changes: 50 additions & 30 deletions config/locales/de.yml
Original file line number Diff line number Diff line change
@@ -1,33 +1,53 @@
de:
errors:
messages:
content_type_invalid: "hat einen ungültigen Dateityp"
spoofed_content_type: "hat einen Inhaltstyp, der nicht dem entspricht, was durch Inhalt, Dateinamen und Erweiterung deklariert wird"
file_size_not_less_than: "Dateigröße muss kleiner als %{max_size} sein (aktuelle Dateigröße ist %{file_size})"
file_size_not_less_than_or_equal_to: "Dateigröße muss kleiner oder gleich %{max_size} sein (aktuelle Dateigröße ist %{file_size})"
file_size_not_greater_than: "Dateigröße muss größer als %{min_size} sein (aktuelle Dateigröße ist %{file_size})"
file_size_not_greater_than_or_equal_to: "Dateigröße muss größer oder gleich %{min_size} sein (aktuelle Dateigröße ist %{file_size})"
file_size_not_between: "Dateigröße muss zwischen %{min_size} und %{max_size} liegen (aktuelle Dateigröße ist %{file_size})"
total_file_size_not_less_than: "Die gesamte Dateigröße muss kleiner als %{max_size} sein (aktuelle Dateigröße ist %{total_file_size})"
total_file_size_not_less_than_or_equal_to: "Die gesamte Dateigröße muss kleiner oder gleich %{max_size} sein (aktuelle Dateigröße ist %{total_file_size})"
total_file_size_not_greater_than: "Die gesamte Dateigröße muss größer als %{min_size} sein (aktuelle Dateigröße ist %{total_file_size})"
total_file_size_not_greater_than_or_equal_to: "Die gesamte Dateigröße muss größer oder gleich %{min_size} sein (aktuelle Dateigröße ist %{total_file_size})"
total_file_size_not_between: "Die gesamte Dateigröße muss zwischen %{min_size} und %{max_size} liegen (aktuelle Dateigröße ist %{total_file_size})"
limit_out_of_range: "Anzahl ist außerhalb des gültigen Bereichs"
image_metadata_missing: "ist kein gültiges Bild"
dimension_min_inclusion: "muss größer oder gleich %{width} x %{height} Pixel sein"
dimension_max_inclusion: "muss kleiner oder gleich %{width} x %{height} Pixel sein"
dimension_width_inclusion: "Bildbreite muss zwischen %{min} und %{max} Pixel liegen"
dimension_height_inclusion: "Bildhöhe muss zwischen %{min} und %{max} Pixel liegen"
dimension_width_greater_than_or_equal_to: "Bildbreite muss größer oder gleich %{length} Pixel sein"
dimension_height_greater_than_or_equal_to: "Bildhöhe muss größer oder gleich %{length} Pixel sein"
dimension_width_less_than_or_equal_to: "Breite muss kleiner oder gleich %{length} Pixel sein"
dimension_height_less_than_or_equal_to: "Höhe muss kleiner oder gleich %{length} Pixel sein"
dimension_width_equal_to: "Bildbreite muss genau %{length} Pixel sein"
dimension_height_equal_to: "Bildhöhe muss genau %{length} Pixel sein"
aspect_ratio_not_square: "muss quadratisch sein"
aspect_ratio_not_portrait: "muss Hochformat sein"
aspect_ratio_not_landscape: "muss Querformat sein"
aspect_ratio_is_not: "muss ein Bildseitenverhältnis von %{aspect_ratio} haben"
image_not_processable: "ist kein gültiges Bild"
aspect_ratio_invalid: "hat ein ungültiges Seitenverhältnis"
content_type_invalid:
one: "hat einen ungültigen Inhaltstyp (autorisierter Inhaltstyp ist %{authorized_human_content_types})"
other: "hat einen ungültigen Inhaltstyp (autorisierte Inhaltstypen sind %{authorized_human_content_types})"
content_type_spoofed:
one: "hat einen Inhaltstyp, der nicht dem entspricht, der durch seinen Inhalt erkannt wird (autorisierter Inhaltstyp ist %{authorized_human_content_types})"
other: "hat einen Inhaltstyp, der nicht dem entspricht, der durch seinen Inhalt erkannt wird (autorisierte Inhaltstypen sind %{authorized_human_content_types})"
file_size_not_less_than: "Dateigröße muss kleiner als %{max} sein (aktuelle Dateigröße ist %{file_size})"
file_size_not_less_than_or_equal_to: "Dateigröße muss kleiner oder gleich %{max} sein (aktuelle Dateigröße ist %{file_size})"
file_size_not_greater_than: "Dateigröße muss größer als %{min} sein (aktuelle Dateigröße ist %{file_size})"
file_size_not_greater_than_or_equal_to: "Dateigröße muss größer oder gleich %{min} sein (aktuelle Dateigröße ist %{file_size})"
file_size_not_between: "Dateigröße muss zwischen %{min} und %{max} liegen (aktuelle Dateigröße ist %{file_size})"
total_file_size_not_less_than: "Die gesamte Dateigröße muss kleiner als %{max} sein (aktuelle Dateigröße ist %{total_file_size})"
total_file_size_not_less_than_or_equal_to: "Die gesamte Dateigröße muss kleiner oder gleich %{max} sein (aktuelle Dateigröße ist %{total_file_size})"
total_file_size_not_greater_than: "Die gesamte Dateigröße muss größer als %{min} sein (aktuelle Dateigröße ist %{total_file_size})"
total_file_size_not_greater_than_or_equal_to: "Die gesamte Dateigröße muss größer oder gleich %{min} sein (aktuelle Dateigröße ist %{total_file_size})"
total_file_size_not_between: "Die gesamte Dateigröße muss zwischen %{min} und %{max} liegen (aktuelle Dateigröße ist %{total_file_size})"
duration_not_less_than: "Die Dauer muss kleiner als %{max} sein (die aktuelle Dauer beträgt %{duration})"
duration_not_less_than_or_equal_to: "Die Dauer muss kleiner oder gleich %{max} sein (die aktuelle Dauer beträgt %{duration})"
duration_not_greater_than: "Die Dauer muss größer als %{min} sein (die aktuelle Dauer beträgt %{duration})"
duration_not_greater_than_or_equal_to: "Die Dauer muss größer oder gleich %{min} sein (die aktuelle Dauer beträgt %{duration})"
duration_not_between: "Die Dauer muss zwischen %{min} und %{max} liegen (die aktuelle Dauer beträgt %{duration})"
limit_out_of_range:
zero: "Keine Dateien angehängt (müssen zwischen %{min} und %{max} Dateien haben)"
one: "Nur 1 Datei ist angehängt (müssen zwischen %{min} und %{max} Dateien haben)"
other: "Die Gesamtzahl der Dateien muss zwischen %{min} und %{max} liegen (es sind Dateien mit %{count} angehängt)."
limit_min_not_reached:
zero: "Keine Dateien angehängt (müssen mindestens %{min} Dateien haben)"
one: "Nur 1 Datei ist angehängt (müssen mindestens %{min} Dateien haben)"
other: "%{count} Dateien angehängt (müssen mindestens %{min} Dateien haben)"
limit_max_exceeded:
zero: "Keine Dateien angehängt (maximal %{max} Dateien)"
one: "zu viele angehängte Dateien (maximal %{max} Dateien, %{count})"
other: "Zu viele angehängte Dateien (maximal %{max} Dateien, %{count})"
media_metadata_missing: "ist keine gültige Mediendatei"
dimension_min_not_included_in: "muss größer oder gleich %{width} x %{height} Pixel sein"
dimension_max_not_included_in: "muss kleiner oder gleich %{width} x %{height} Pixel sein"
dimension_width_not_included_in: "Bildbreite muss zwischen %{min} und %{max} Pixel liegen"
dimension_height_not_included_in: "Bildhöhe muss zwischen %{min} und %{max} Pixel liegen"
dimension_width_not_greater_than_or_equal_to: "Bildbreite muss größer oder gleich %{length} Pixel sein"
dimension_height_not_greater_than_or_equal_to: "Bildhöhe muss größer oder gleich %{length} Pixel sein"
dimension_width_not_less_than_or_equal_to: "Breite muss kleiner oder gleich %{length} Pixel sein"
dimension_height_not_less_than_or_equal_to: "Höhe muss kleiner oder gleich %{length} Pixel sein"
dimension_width_not_equal_to: "Bildbreite muss genau %{length} Pixel sein"
dimension_height_not_equal_to: "Bildhöhe muss genau %{length} Pixel sein"
aspect_ratio_not_square: "muss quadratisch sein (aktuelle Datei ist %{width}x%{height}px)"
aspect_ratio_not_portrait: "muss Porträt sein (aktuelle Datei ist %{width}x%{height}px)"
aspect_ratio_not_landscape: "muss landschaftlich sein (aktuelle Datei ist %{width}x%{height}px)"
aspect_ratio_not_x_y: "muss %{authorized_aspect_ratios} sein (aktuelle Datei ist %{width}x%{height}px)"
aspect_ratio_invalid: "hat ein ungültiges Seitenverhältnis (gültige Seitenverhältnisse sind %{authorized_aspect_ratios})"
file_not_processable: "wird nicht als gültige Mediendatei identifiziert"
Loading
Loading