active_storage_validations 1.0.4 → 1.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +126 -48
- data/config/locales/de.yml +6 -1
- data/config/locales/en.yml +5 -1
- data/config/locales/es.yml +6 -1
- data/config/locales/fr.yml +6 -1
- data/config/locales/it.yml +6 -1
- data/config/locales/ja.yml +6 -1
- data/config/locales/nl.yml +6 -1
- data/config/locales/pl.yml +6 -1
- data/config/locales/pt-BR.yml +6 -1
- data/config/locales/ru.yml +7 -2
- data/config/locales/sv.yml +23 -0
- data/config/locales/tr.yml +6 -1
- data/config/locales/uk.yml +6 -1
- data/config/locales/vi.yml +6 -1
- data/config/locales/zh-CN.yml +6 -1
- data/lib/active_storage_validations/aspect_ratio_validator.rb +57 -27
- data/lib/active_storage_validations/attached_validator.rb +20 -5
- data/lib/active_storage_validations/concerns/errorable.rb +38 -0
- data/lib/active_storage_validations/concerns/symbolizable.rb +12 -0
- data/lib/active_storage_validations/content_type_validator.rb +47 -7
- data/lib/active_storage_validations/dimension_validator.rb +61 -30
- data/lib/active_storage_validations/limit_validator.rb +49 -5
- data/lib/active_storage_validations/matchers/aspect_ratio_validator_matcher.rb +128 -0
- data/lib/active_storage_validations/matchers/attached_validator_matcher.rb +54 -23
- data/lib/active_storage_validations/matchers/concerns/active_storageable.rb +17 -0
- data/lib/active_storage_validations/matchers/concerns/allow_blankable.rb +26 -0
- data/lib/active_storage_validations/matchers/concerns/contextable.rb +35 -0
- data/lib/active_storage_validations/matchers/concerns/messageable.rb +26 -0
- data/lib/active_storage_validations/matchers/concerns/rspecable.rb +25 -0
- data/lib/active_storage_validations/matchers/concerns/validatable.rb +48 -0
- data/lib/active_storage_validations/matchers/content_type_validator_matcher.rb +75 -32
- data/lib/active_storage_validations/matchers/dimension_validator_matcher.rb +99 -52
- data/lib/active_storage_validations/matchers/size_validator_matcher.rb +96 -31
- data/lib/active_storage_validations/matchers.rb +1 -0
- data/lib/active_storage_validations/metadata.rb +42 -28
- data/lib/active_storage_validations/processable_image_validator.rb +16 -10
- data/lib/active_storage_validations/size_validator.rb +32 -9
- data/lib/active_storage_validations/version.rb +1 -1
- data/lib/active_storage_validations.rb +3 -0
- metadata +29 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 305a698168303d4889b8ba6b3972201842af8679758f6f9c81140658a0abdc8a
|
4
|
+
data.tar.gz: 414b60017f2da20463daa783e56028c927c2090a80e7728877f569323ec0b60a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 48123a7a880a4f8e1b7680d3ea21b2e54c6f13b884b351e11c3f912fcdeec01efe24a0d6fc26b1021ec9b92460f6c6df321c869d9a8ce4e1848d339b1e35b0ca
|
7
|
+
data.tar.gz: faee600c94d2534a943feb4eebe14574341e3920e9bfd03fe663afad85c80e01c8cb7f95ced957ce333a323553798c6d73c0f8bffb33bdc185b922047f176b20
|
data/README.md
CHANGED
@@ -68,15 +68,14 @@ end
|
|
68
68
|
|
69
69
|
### More examples
|
70
70
|
|
71
|
-
- Content type validation using symbols
|
71
|
+
- Content type validation using symbols or regex. The symbol types must be registered by [`Marcel::EXTENSIONS`](https://github.com/rails/marcel/blob/main/lib/marcel/tables.rb) that's used by this gem to infer the full content type.
|
72
72
|
|
73
73
|
```ruby
|
74
74
|
class User < ApplicationRecord
|
75
75
|
has_one_attached :avatar
|
76
76
|
has_many_attached :photos
|
77
77
|
|
78
|
-
validates :avatar, attached: true, content_type: :png
|
79
|
-
# Rails <= 6.1.3; MimeMagic.by_extension(:png).to_s => 'image/png'
|
78
|
+
validates :avatar, attached: true, content_type: :png
|
80
79
|
# or
|
81
80
|
validates :photos, attached: true, content_type: [:png, :jpg, :jpeg]
|
82
81
|
# or
|
@@ -149,7 +148,11 @@ en:
|
|
149
148
|
errors:
|
150
149
|
messages:
|
151
150
|
content_type_invalid: "has an invalid content type"
|
152
|
-
|
151
|
+
file_size_not_less_than: "file size must be less than %{max_size} (current size is %{file_size})"
|
152
|
+
file_size_not_less_than_or_equal_to: "file size must be less than or equal to %{max_size} (current size is %{file_size})"
|
153
|
+
file_size_not_greater_than: "file size must be greater than %{min_size} (current size is %{file_size})"
|
154
|
+
file_size_not_greater_than_or_equal_to: "file size must be greater than or equal to %{min_size} (current size is %{file_size})"
|
155
|
+
file_size_not_between: "file size must be between %{min_size} and %{max_size} (current size is %{file_size})"
|
153
156
|
limit_out_of_range: "total number is out of range"
|
154
157
|
image_metadata_missing: "is not a valid image"
|
155
158
|
dimension_min_inclusion: "must be greater than or equal to %{width} x %{height} pixel."
|
@@ -170,19 +173,63 @@ en:
|
|
170
173
|
image_not_processable: "is not a valid image"
|
171
174
|
```
|
172
175
|
|
173
|
-
In
|
176
|
+
In several cases, Active Storage Validations provides variables to help you customize messages:
|
174
177
|
|
175
|
-
|
178
|
+
### Aspect ratio
|
179
|
+
The keys starting with `aspect_ratio_` support two variables that you can use:
|
180
|
+
- `aspect_ratio` containing the expected aspect ratio, especially usefull for custom aspect ratio
|
181
|
+
- `filename` containing the current file name
|
176
182
|
|
177
|
-
|
183
|
+
For example :
|
184
|
+
|
185
|
+
```yml
|
186
|
+
aspect_ratio_is_not: "must be a %{aspect_ratio} image"
|
187
|
+
```
|
188
|
+
|
189
|
+
### Content type
|
190
|
+
The `content_type_invalid` key has three variables that you can use:
|
191
|
+
- `content_type` containing the content type of the sent file
|
192
|
+
- `authorized_types` containing the list of authorized content types
|
193
|
+
- `filename` containing the current file name
|
194
|
+
|
195
|
+
For example :
|
196
|
+
|
197
|
+
```yml
|
198
|
+
content_type_invalid: "has an invalid content type : %{content_type}, authorized types are %{authorized_types}"
|
199
|
+
```
|
200
|
+
|
201
|
+
### Dimension
|
202
|
+
The keys starting with `dimension_` support six variables that you can use:
|
203
|
+
- `min` containing the minimum width or height allowed
|
204
|
+
- `max` containing the maximum width or height allowed
|
205
|
+
- `width` containing the minimum or maximum width allowed
|
206
|
+
- `height` containing the minimum or maximum width allowed
|
207
|
+
- `lenght` containing the exact width or height allowed
|
208
|
+
- `filename` containing the current file name
|
209
|
+
|
210
|
+
For example :
|
211
|
+
|
212
|
+
```yml
|
213
|
+
dimension_min_inclusion: "must be greater than or equal to %{width} x %{height} pixel."
|
214
|
+
```
|
215
|
+
|
216
|
+
### File size
|
217
|
+
The keys starting with `file_size_not_` support four variables that you can use:
|
218
|
+
- `file_size` containing the current file size
|
219
|
+
- `min` containing the minimum file size
|
220
|
+
- `max` containing the maxmimum file size
|
221
|
+
- `filename` containing the current file name
|
178
222
|
|
179
223
|
For example :
|
180
224
|
|
181
225
|
```yml
|
182
|
-
|
226
|
+
file_size_not_between: "file size must be between %{min_size} and %{max_size} (current size is %{file_size})"
|
183
227
|
```
|
184
228
|
|
185
|
-
|
229
|
+
### Number of files
|
230
|
+
The `limit_out_of_range` key supports two variables that you can use:
|
231
|
+
- `min` containing the minimum number of files
|
232
|
+
- `max` containing the maximum number of files
|
186
233
|
|
187
234
|
For example :
|
188
235
|
|
@@ -190,6 +237,16 @@ For example :
|
|
190
237
|
limit_out_of_range: "total number is out of range. range: [%{min}, %{max}]"
|
191
238
|
```
|
192
239
|
|
240
|
+
### Processable image
|
241
|
+
The `image_not_processable` key supports one variable that you can use:
|
242
|
+
- `filename` containing the current file name
|
243
|
+
|
244
|
+
For example :
|
245
|
+
|
246
|
+
```yml
|
247
|
+
image_not_processable: "is not a valid image (file: %{filename})"
|
248
|
+
```
|
249
|
+
|
193
250
|
## Installation
|
194
251
|
|
195
252
|
Add this line to your application's Gemfile:
|
@@ -217,7 +274,7 @@ Very simple example of validation with file attached, content type check and cus
|
|
217
274
|
[![Sample](https://raw.githubusercontent.com/igorkasyanchuk/active_storage_validations/master/docs/preview.png)](https://raw.githubusercontent.com/igorkasyanchuk/active_storage_validations/master/docs/preview.png)
|
218
275
|
|
219
276
|
## Test matchers
|
220
|
-
Provides RSpec-compatible and Minitest-compatible matchers for testing the validators.
|
277
|
+
Provides RSpec-compatible and Minitest-compatible matchers for testing the validators. Only `aspect_ratio`, `attached`, `content_type`, `dimension` and `size` validators currently have their matcher developped.
|
221
278
|
|
222
279
|
### RSpec
|
223
280
|
|
@@ -235,25 +292,36 @@ RSpec.configure do |config|
|
|
235
292
|
end
|
236
293
|
```
|
237
294
|
|
238
|
-
|
295
|
+
Matcher methods available:
|
239
296
|
|
240
297
|
```ruby
|
241
298
|
describe User do
|
299
|
+
# aspect_ratio:
|
300
|
+
# #allowing, #rejecting
|
301
|
+
it { is_expected.to validate_aspect_ratio_of(:avatar).allowing(:square) }
|
302
|
+
it { is_expected.to validate_aspect_ratio_of(:avatar).rejecting(:portrait) }
|
303
|
+
|
304
|
+
# attached
|
242
305
|
it { is_expected.to validate_attached_of(:avatar) }
|
243
306
|
|
307
|
+
# content_type:
|
308
|
+
# #allowing, #rejecting
|
244
309
|
it { is_expected.to validate_content_type_of(:avatar).allowing('image/png', 'image/gif') }
|
245
310
|
it { is_expected.to validate_content_type_of(:avatar).rejecting('text/plain', 'text/xml') }
|
246
311
|
|
312
|
+
# dimension:
|
313
|
+
# #width, #height, #width_min, #height_min, #width_max, #height_max, #width_between, #height_between
|
247
314
|
it { is_expected.to validate_dimensions_of(:avatar).width(250) }
|
248
315
|
it { is_expected.to validate_dimensions_of(:avatar).height(200) }
|
249
|
-
it { is_expected.to validate_dimensions_of(:avatar).width(250).height(200).with_message('Invalid dimensions.') }
|
250
316
|
it { is_expected.to validate_dimensions_of(:avatar).width_min(200) }
|
251
|
-
it { is_expected.to validate_dimensions_of(:avatar).width_max(500) }
|
252
317
|
it { is_expected.to validate_dimensions_of(:avatar).height_min(100) }
|
318
|
+
it { is_expected.to validate_dimensions_of(:avatar).width_max(500) }
|
253
319
|
it { is_expected.to validate_dimensions_of(:avatar).height_max(300) }
|
254
320
|
it { is_expected.to validate_dimensions_of(:avatar).width_between(200..500) }
|
255
321
|
it { is_expected.to validate_dimensions_of(:avatar).height_between(100..300) }
|
256
322
|
|
323
|
+
# size:
|
324
|
+
# #less_than, #less_than_or_equal_to, #greater_than, #greater_than_or_equal_to, #between
|
257
325
|
it { is_expected.to validate_size_of(:avatar).less_than(50.kilobytes) }
|
258
326
|
it { is_expected.to validate_size_of(:avatar).less_than_or_equal_to(50.kilobytes) }
|
259
327
|
it { is_expected.to validate_size_of(:avatar).greater_than(1.kilobyte) }
|
@@ -261,9 +329,28 @@ describe User do
|
|
261
329
|
it { is_expected.to validate_size_of(:avatar).between(100..500.kilobytes) }
|
262
330
|
end
|
263
331
|
```
|
332
|
+
(Note that matcher methods are chainable)
|
333
|
+
|
334
|
+
All matchers can currently be customized with Rails validation options:
|
335
|
+
|
336
|
+
```ruby
|
337
|
+
describe User do
|
338
|
+
# :allow_blank
|
339
|
+
it { is_expected.to validate_attached_of(:avatar).allow_blank }
|
340
|
+
|
341
|
+
# :on
|
342
|
+
it { is_expected.to validate_attached_of(:avatar).on(:update) }
|
343
|
+
it { is_expected.to validate_attached_of(:avatar).on(%i[update custom]) }
|
344
|
+
|
345
|
+
# :message
|
346
|
+
it { is_expected.to validate_dimensions_of(:avatar).width(250).with_message('Invalid dimensions.') }
|
347
|
+
end
|
348
|
+
```
|
264
349
|
|
265
350
|
### Minitest
|
266
|
-
To use the
|
351
|
+
To use the matchers, make sure you have the [shoulda-context](https://github.com/thoughtbot/shoulda-context) gem up and running.
|
352
|
+
|
353
|
+
You need to require the matchers:
|
267
354
|
|
268
355
|
```ruby
|
269
356
|
require 'active_storage_validations/matchers'
|
@@ -277,62 +364,41 @@ class ActiveSupport::TestCase
|
|
277
364
|
end
|
278
365
|
```
|
279
366
|
|
280
|
-
|
281
|
-
|
282
|
-
```ruby
|
283
|
-
class UserTest < ActiveSupport::TestCase
|
284
|
-
should validate_attached_of(:avatar)
|
285
|
-
|
286
|
-
should validate_content_type_of(:avatar).allowing('image/png', 'image/gif')
|
287
|
-
should validate_content_type_of(:avatar).rejecting('text/plain', 'text/xml')
|
288
|
-
|
289
|
-
should validate_dimensions_of(:avatar).width(250)
|
290
|
-
should validate_dimensions_of(:avatar).height(200)
|
291
|
-
should validate_dimensions_of(:avatar).width(250).height(200).with_message('Invalid dimensions.')
|
292
|
-
should validate_dimensions_of(:avatar).width_min(200)
|
293
|
-
should validate_dimensions_of(:avatar).width_max(500)
|
294
|
-
should validate_dimensions_of(:avatar).height_min(100)
|
295
|
-
should validate_dimensions_of(:avatar).height_max(300)
|
296
|
-
should validate_dimensions_of(:avatar).width_between(200..500)
|
297
|
-
should validate_dimensions_of(:avatar).height_between(100..300)
|
298
|
-
|
299
|
-
should validate_size_of(:avatar).less_than(50.kilobytes)
|
300
|
-
should validate_size_of(:avatar).less_than_or_equal_to(50.kilobytes)
|
301
|
-
should validate_size_of(:avatar).greater_than(1.kilobyte)
|
302
|
-
should validate_size_of(:avatar).greater_than_or_equal_to(1.kilobyte)
|
303
|
-
should validate_size_of(:avatar).between(100..500.kilobytes)
|
304
|
-
end
|
305
|
-
```
|
367
|
+
Then you can use the matchers with the syntax specified in the RSpec section, just use `should validate_method` instead of `it { is_expected_to validate_method }` as specified in the [shoulda-context](https://github.com/thoughtbot/shoulda-context) gem.
|
306
368
|
|
307
369
|
## Todo
|
308
370
|
|
309
371
|
* verify with remote storages (s3, etc)
|
310
372
|
* verify how it works with direct upload
|
311
|
-
* better error message when content_size is invalid
|
312
373
|
* add more translations
|
313
374
|
|
314
375
|
## Tests & Contributing
|
315
376
|
|
316
377
|
To run tests in root folder of gem:
|
317
378
|
|
318
|
-
* `BUNDLE_GEMFILE=gemfiles/
|
319
|
-
* `BUNDLE_GEMFILE=gemfiles/rails_6_1.gemfile bundle exec rake test` to run for Rails 6.1
|
379
|
+
* `BUNDLE_GEMFILE=gemfiles/rails_6_1_3_1.gemfile bundle exec rake test` to run for Rails 6.1
|
320
380
|
* `BUNDLE_GEMFILE=gemfiles/rails_7_0.gemfile bundle exec rake test` to run for Rails 7.0
|
381
|
+
* `BUNDLE_GEMFILE=gemfiles/rails_7_1.gemfile bundle exec rake test` to run for Rails 7.0
|
321
382
|
* `BUNDLE_GEMFILE=gemfiles/rails_next.gemfile bundle exec rake test` to run for Rails main branch
|
322
383
|
|
323
384
|
Snippet to run in console:
|
324
385
|
|
325
|
-
```
|
326
|
-
BUNDLE_GEMFILE=gemfiles/
|
327
|
-
BUNDLE_GEMFILE=gemfiles/rails_6_1.gemfile bundle
|
386
|
+
```bash
|
387
|
+
BUNDLE_GEMFILE=gemfiles/rails_6_1_3_1.gemfile bundle
|
328
388
|
BUNDLE_GEMFILE=gemfiles/rails_7_0.gemfile bundle
|
389
|
+
BUNDLE_GEMFILE=gemfiles/rails_7_1.gemfile bundle
|
329
390
|
BUNDLE_GEMFILE=gemfiles/rails_next.gemfile bundle
|
330
|
-
BUNDLE_GEMFILE=gemfiles/
|
331
|
-
BUNDLE_GEMFILE=gemfiles/rails_6_1.gemfile bundle exec rake test
|
391
|
+
BUNDLE_GEMFILE=gemfiles/rails_6_1_3_1.gemfile bundle exec rake test
|
332
392
|
BUNDLE_GEMFILE=gemfiles/rails_7_0.gemfile bundle exec rake test
|
393
|
+
BUNDLE_GEMFILE=gemfiles/rails_7_1.gemfile bundle exec rake test
|
333
394
|
BUNDLE_GEMFILE=gemfiles/rails_next.gemfile bundle exec rake test
|
334
395
|
```
|
335
396
|
|
397
|
+
Tips:
|
398
|
+
- To focus a specific test, use the `focus` class method provided by [minitest-focus](https://github.com/minitest/minitest-focus)
|
399
|
+
- To focus a specific file, use the TEST option provided by minitest, e.g. to only run size_validator_test.rb file you will execute the following command: `bundle exec rake test TEST=test/validators/size_validator_test.rb`
|
400
|
+
|
401
|
+
|
336
402
|
## Known issues
|
337
403
|
|
338
404
|
- There is an issue in Rails which it possible to get if you have added a validation and generating for example an image preview of attachments. It can be fixed with this:
|
@@ -346,8 +412,12 @@ BUNDLE_GEMFILE=gemfiles/rails_next.gemfile bundle exec rake test
|
|
346
412
|
This is a Rails issue, and is fixed in Rails 6.
|
347
413
|
|
348
414
|
## Contributing
|
415
|
+
|
349
416
|
You are welcome to contribute.
|
350
417
|
|
418
|
+
[<img src="https://opensource-heroes.com/svg/embed/igorkasyanchuk/active_storage_validations"
|
419
|
+
/>](https://opensource-heroes.com/r/igorkasyanchuk/active_storage_validations)
|
420
|
+
|
351
421
|
## Contributors (BIG THANK YOU)
|
352
422
|
- https://github.com/schweigert
|
353
423
|
- https://github.com/tleneveu
|
@@ -403,6 +473,14 @@ You are welcome to contribute.
|
|
403
473
|
- https://github.com/sobrinho
|
404
474
|
- https://github.com/iainbeeston
|
405
475
|
- https://github.com/marckohlbrugge
|
476
|
+
- https://github.com/Mth0158
|
477
|
+
- https://github.com/technicalpickles
|
478
|
+
- https://github.com/ricsdeol
|
479
|
+
- https://github.com/Fonsan
|
480
|
+
- https://github.com/tagliala
|
481
|
+
- https://github.com/ocarreterom
|
482
|
+
- https://github.com/aditya-cherukuri
|
483
|
+
|
406
484
|
|
407
485
|
## License
|
408
486
|
|
data/config/locales/de.yml
CHANGED
@@ -2,7 +2,11 @@ de:
|
|
2
2
|
errors:
|
3
3
|
messages:
|
4
4
|
content_type_invalid: "hat einen ungültigen Dateityp"
|
5
|
-
|
5
|
+
file_size_not_less_than: "Dateigröße muss kleiner als %{max_size} sein (aktuelle Dateigröße ist %{file_size})"
|
6
|
+
file_size_not_less_than_or_equal_to: "Dateigröße muss kleiner oder gleich %{max_size} sein (aktuelle Dateigröße ist %{file_size})"
|
7
|
+
file_size_not_greater_than: "Dateigröße muss größer als %{min_size} sein (aktuelle Dateigröße ist %{file_size})"
|
8
|
+
file_size_not_greater_than_or_equal_to: "Dateigröße muss größer oder gleich %{min_size} sein (aktuelle Dateigröße ist %{file_size})"
|
9
|
+
file_size_not_between: "Dateigröße muss zwischen %{min_size} und %{max_size} liegen (aktuelle Dateigröße ist %{file_size})"
|
6
10
|
limit_out_of_range: "Anzahl ist außerhalb des gültigen Bereichs"
|
7
11
|
image_metadata_missing: "ist kein gültiges Bild"
|
8
12
|
dimension_min_inclusion: "muss größer oder gleich %{width} x %{height} Pixel sein"
|
@@ -20,3 +24,4 @@ de:
|
|
20
24
|
aspect_ratio_not_landscape: "muss Querformat sein"
|
21
25
|
aspect_ratio_is_not: "muss ein Bildseitenverhältnis von %{aspect_ratio} haben"
|
22
26
|
aspect_ratio_unknown: "hat ein unbekanntes Bildseitenverhältnis"
|
27
|
+
image_not_processable: "ist kein gültiges Bild"
|
data/config/locales/en.yml
CHANGED
@@ -2,7 +2,11 @@ en:
|
|
2
2
|
errors:
|
3
3
|
messages:
|
4
4
|
content_type_invalid: "has an invalid content type"
|
5
|
-
|
5
|
+
file_size_not_less_than: "file size must be less than %{max_size} (current size is %{file_size})"
|
6
|
+
file_size_not_less_than_or_equal_to: "file size must be less than or equal to %{max_size} (current size is %{file_size})"
|
7
|
+
file_size_not_greater_than: "file size must be greater than %{min_size} (current size is %{file_size})"
|
8
|
+
file_size_not_greater_than_or_equal_to: "file size must be greater than or equal to %{min_size} (current size is %{file_size})"
|
9
|
+
file_size_not_between: "file size must be between %{min_size} and %{max_size} (current size is %{file_size})"
|
6
10
|
limit_out_of_range: "total number is out of range"
|
7
11
|
image_metadata_missing: "is not a valid image"
|
8
12
|
dimension_min_inclusion: "must be greater than or equal to %{width} x %{height} pixel"
|
data/config/locales/es.yml
CHANGED
@@ -2,7 +2,11 @@ es:
|
|
2
2
|
errors:
|
3
3
|
messages:
|
4
4
|
content_type_invalid: "tiene un tipo de contenido inválido"
|
5
|
-
|
5
|
+
file_size_not_less_than: "el tamaño del archivo debe ser inferior a %{max_size} (el tamaño actual es %{file_size})"
|
6
|
+
file_size_not_less_than_or_equal_to: "el tamaño del archivo debe ser menor o igual a %{max_size} (el tamaño actual es %{file_size})"
|
7
|
+
file_size_not_greater_than: "el tamaño del archivo debe ser mayor que %{min_size} (el tamaño actual es %{file_size})"
|
8
|
+
file_size_not_greater_than_or_equal_to: "el tamaño del archivo debe ser mayor o igual a %{min_size} (el tamaño actual es %{file_size})"
|
9
|
+
file_size_not_between: "el tamaño del archivo debe estar entre %{min_size} y %{max_size} (el tamaño actual es %{file_size})"
|
6
10
|
limit_out_of_range: "el número total está fuera de rango"
|
7
11
|
image_metadata_missing: "no es una imagen válida"
|
8
12
|
dimension_min_inclusion: "debe ser mayor o igual a %{width} x %{height} pixel"
|
@@ -20,3 +24,4 @@ es:
|
|
20
24
|
aspect_ratio_not_landscape: "debe ser una imagen apaisada"
|
21
25
|
aspect_ratio_is_not: "debe tener una relación de aspecto de %{aspect_ratio}"
|
22
26
|
aspect_ratio_unknown: "tiene una relación de aspecto desconocida"
|
27
|
+
image_not_processable: "no es una imagen válida"
|
data/config/locales/fr.yml
CHANGED
@@ -2,7 +2,11 @@ fr:
|
|
2
2
|
errors:
|
3
3
|
messages:
|
4
4
|
content_type_invalid: "a un type de contenu non valide"
|
5
|
-
|
5
|
+
file_size_not_less_than: "la taille du fichier doit être inférieure à %{max_size} (la taille actuelle est %{file_size})"
|
6
|
+
file_size_not_less_than_or_equal_to: "la taille du fichier doit être inférieure ou égale à %{max_size} (la taille actuelle est %{file_size})"
|
7
|
+
file_size_not_greater_than: "la taille du fichier doit être supérieure à %{min_size} (la taille actuelle est %{file_size})"
|
8
|
+
file_size_not_greater_than_or_equal_to: "la taille du fichier doit être supérieure ou égale à %{min_size} (la taille actuelle est %{file_size})"
|
9
|
+
file_size_not_between: "la taille du fichier doit être comprise entre %{min_size} et %{max_size} (la taille actuelle est %{file_size})"
|
6
10
|
limit_out_of_range: "le nombre total est hors limites"
|
7
11
|
image_metadata_missing: "n'est pas une image valide"
|
8
12
|
dimension_min_inclusion: "doit être supérieur ou égal à %{width} x %{height} pixels"
|
@@ -20,3 +24,4 @@ fr:
|
|
20
24
|
aspect_ratio_not_landscape: "doit être une image en format paysage"
|
21
25
|
aspect_ratio_is_not: "doit avoir un rapport hauteur / largeur de %{aspect_ratio}"
|
22
26
|
aspect_ratio_unknown: "a un rapport d'aspect inconnu"
|
27
|
+
image_not_processable: "n'est pas une image valide"
|
data/config/locales/it.yml
CHANGED
@@ -2,7 +2,11 @@ it:
|
|
2
2
|
errors:
|
3
3
|
messages:
|
4
4
|
content_type_invalid: "ha un tipo di contenuto non valido"
|
5
|
-
|
5
|
+
file_size_not_less_than: "la dimensione del file deve essere inferiore a %{max_size} (la dimensione attuale è %{file_size})"
|
6
|
+
file_size_not_less_than_or_equal_to: "la dimensione del file deve essere minore o uguale a %{max_size} (la dimensione attuale è %{file_size})"
|
7
|
+
file_size_not_greater_than: "la dimensione del file deve essere maggiore di %{min_size} (la dimensione attuale è %{file_size})"
|
8
|
+
file_size_not_greater_than_or_equal_to: "la dimensione del file deve essere maggiore o uguale a %{min_size} (la dimensione attuale è %{file_size})"
|
9
|
+
file_size_not_between: "la dimensione del file deve essere compresa tra %{min_size} e %{max_size} (la dimensione attuale è %{file_size})"
|
6
10
|
limit_out_of_range: "il valore è al di fuori dell’intervallo consentito"
|
7
11
|
image_metadata_missing: "non è un'immagine valida"
|
8
12
|
dimension_min_inclusion: "deve essere maggiore o uguale a %{width} x %{height} pixel"
|
@@ -20,3 +24,4 @@ it:
|
|
20
24
|
aspect_ratio_not_landscape: "l’orientamento dell’immagine deve essere orizzontale"
|
21
25
|
aspect_ratio_is_not: "deve avere un rapporto altezza / larghezza di %{aspect_ratio}"
|
22
26
|
aspect_ratio_unknown: "ha un rapporto altezza / larghezza sconosciuto"
|
27
|
+
image_not_processable: "non è un'immagine valida"
|
data/config/locales/ja.yml
CHANGED
@@ -2,7 +2,11 @@ ja:
|
|
2
2
|
errors:
|
3
3
|
messages:
|
4
4
|
content_type_invalid: "のContent Typeが不正です"
|
5
|
-
|
5
|
+
file_size_not_less_than: "ファイル サイズは %{max_size} 未満にする必要があります (現在のサイズは %{file_size})"
|
6
|
+
file_size_not_less_than_or_equal_to: "ファイル サイズは %{max_size} 以下である必要があります (現在のサイズは %{file_size})"
|
7
|
+
file_size_not_greater_than: "ファイル サイズは %{min_size} より大きい必要があります (現在のサイズは %{file_size} です)"
|
8
|
+
file_size_not_greater_than_or_equal_to: "ファイル サイズは %{min_size} 以上である必要があります (現在のサイズは %{file_size})"
|
9
|
+
file_size_not_between: "ファイル サイズは %{min_size} から %{max_size} の間でなければなりません (現在のサイズは %{file_size} です)"
|
6
10
|
limit_out_of_range: "の数が許容範囲外です"
|
7
11
|
image_metadata_missing: "は不正な画像です"
|
8
12
|
dimension_min_inclusion: "は %{width} x %{height} ピクセル以上の大きさにしてください"
|
@@ -20,3 +24,4 @@ ja:
|
|
20
24
|
aspect_ratio_not_landscape: "は横長にしてください"
|
21
25
|
aspect_ratio_is_not: "のアスペクト比は %{aspect_ratio} にしてください"
|
22
26
|
aspect_ratio_unknown: "のアスペクト比を取得できませんでした"
|
27
|
+
image_not_processable: "は不正な画像です"
|
data/config/locales/nl.yml
CHANGED
@@ -2,7 +2,11 @@ nl:
|
|
2
2
|
errors:
|
3
3
|
messages:
|
4
4
|
content_type_invalid: "heeft een ongeldig inhoudstype"
|
5
|
-
|
5
|
+
file_size_not_less_than: "bestandsgrootte moet kleiner zijn dan %{max_size} (huidige grootte is %{file_size})"
|
6
|
+
file_size_not_less_than_or_equal_to: "bestandsgrootte moet kleiner zijn dan of gelijk zijn aan %{max_size} (huidige grootte is %{file_size})"
|
7
|
+
file_size_not_greater_than: "bestandsgrootte moet groter zijn dan %{min_size} (huidige grootte is %{file_size})"
|
8
|
+
file_size_not_greater_than_or_equal_to: "bestandsgrootte moet groter zijn dan of gelijk zijn aan %{min_size} (huidige grootte is %{file_size})"
|
9
|
+
file_size_not_between: "bestandsgrootte moet tussen %{min_size} en %{max_size} liggen (huidige grootte is %{file_size})"
|
6
10
|
limit_out_of_range: "totaal aantal valt buiten het vereiste bereik"
|
7
11
|
image_metadata_missing: "is geen geldige afbeelding"
|
8
12
|
dimension_min_inclusion: "moet groter of gelijk zijn aan %{width} x %{height} pixels"
|
@@ -20,3 +24,4 @@ nl:
|
|
20
24
|
aspect_ratio_not_landscape: "moet een liggende afbeelding zijn"
|
21
25
|
aspect_ratio_is_not: "moet een beeldverhouding hebben van %{aspect_ratio}"
|
22
26
|
aspect_ratio_unknown: "heeft een onbekende beeldverhouding"
|
27
|
+
image_not_processable: "is geen geldige afbeelding"
|
data/config/locales/pl.yml
CHANGED
@@ -2,7 +2,11 @@ pl:
|
|
2
2
|
errors:
|
3
3
|
messages:
|
4
4
|
content_type_invalid: "jest nieprawidłowego typu"
|
5
|
-
|
5
|
+
file_size_not_less_than: "rozmiar pliku musi być mniejszy niż %{max_size} (obecny rozmiar to %{file_size})"
|
6
|
+
file_size_not_less_than_or_equal_to: "rozmiar pliku musi być mniejszy lub równy %{max_size} (obecny rozmiar to %{file_size})"
|
7
|
+
file_size_not_greater_than: "rozmiar pliku musi być większy niż %{min_size} (obecny rozmiar to %{file_size})"
|
8
|
+
file_size_not_greater_than_or_equal_to: "rozmiar pliku musi być większy lub równy %{min_size} (obecny rozmiar to %{file_size})"
|
9
|
+
file_size_not_between: "rozmiar pliku musi mieścić się w przedziale od %{min_size} do %{max_size} (obecny rozmiar to %{file_size})"
|
6
10
|
limit_out_of_range: "ilość przekracza dopuszczalny zakres"
|
7
11
|
image_metadata_missing: "nie jest prawidłowym obrazem"
|
8
12
|
dimension_min_inclusion: "musi być równe lub większe od %{width} x %{height} pixeli"
|
@@ -20,3 +24,4 @@ pl:
|
|
20
24
|
aspect_ratio_not_landscape: "musi mieć proporcje pejzażu"
|
21
25
|
aspect_ratio_is_not: "musi mieć proporcje %{aspect_ratio}"
|
22
26
|
aspect_ratio_unknown: "ma nieokreślone proporcje"
|
27
|
+
image_not_processable: "nie jest prawidłowym obrazem"
|
data/config/locales/pt-BR.yml
CHANGED
@@ -2,7 +2,11 @@ pt-BR:
|
|
2
2
|
errors:
|
3
3
|
messages:
|
4
4
|
content_type_invalid: "tem um tipo de arquivo inválido"
|
5
|
-
|
5
|
+
file_size_not_less_than: "o tamanho do arquivo deve ser menor que %{max_size} (o tamanho atual é %{file_size})"
|
6
|
+
file_size_not_less_than_or_equal_to: "o tamanho do arquivo deve ser menor ou igual a %{max_size} (o tamanho atual é %{file_size})"
|
7
|
+
file_size_not_greater_than: "o tamanho do arquivo deve ser maior que %{min_size} (o tamanho atual é %{file_size})"
|
8
|
+
file_size_not_greater_than_or_equal_to: "o tamanho do arquivo deve ser maior ou igual a %{min_size} (o tamanho atual é %{file_size})"
|
9
|
+
file_size_not_between: "o tamanho do arquivo deve estar entre %{min_size} e %{max_size} (o tamanho atual é %{file_size})"
|
6
10
|
limit_out_of_range: "o número total está fora do limite"
|
7
11
|
image_metadata_missing: "não é uma imagem válida"
|
8
12
|
dimension_min_inclusion: "deve ser maior ou igual a %{width} x %{height} pixels"
|
@@ -20,3 +24,4 @@ pt-BR:
|
|
20
24
|
aspect_ratio_not_landscape: "não está no formato paisagem"
|
21
25
|
aspect_ratio_is_not: "não contém uma proporção de %{aspect_ratio}"
|
22
26
|
aspect_ratio_unknown: "não tem uma proporção definida"
|
27
|
+
image_not_processable: "não é uma imagem válida"
|
data/config/locales/ru.yml
CHANGED
@@ -2,7 +2,11 @@ ru:
|
|
2
2
|
errors:
|
3
3
|
messages:
|
4
4
|
content_type_invalid: "имеет недопустимый тип содержимого"
|
5
|
-
|
5
|
+
file_size_not_less_than: "размер файла должен быть меньше %{max_size} (текущий размер %{file_size})"
|
6
|
+
file_size_not_less_than_or_equal_to: "размер файла должен быть меньше или равен %{max_size} (текущий размер %{file_size})"
|
7
|
+
file_size_not_greater_than: "размер файла должен быть больше %{min_size} (текущий размер %{file_size})"
|
8
|
+
file_size_not_greater_than_or_equal_to: "размер файла должен быть больше или равен %{min_size} (текущий размер %{file_size})"
|
9
|
+
file_size_not_between: "размер файла должен быть между %{min_size} и %{max_size} (текущий размер %{file_size})"
|
6
10
|
limit_out_of_range: "количество файлов больше требуемого"
|
7
11
|
image_metadata_missing: "не является допустимым изображением"
|
8
12
|
dimension_min_inclusion: "должен быть больше или равно %{width} x %{height} пикселям"
|
@@ -19,4 +23,5 @@ ru:
|
|
19
23
|
aspect_ratio_not_portrait: "должно быть портретное изображение"
|
20
24
|
aspect_ratio_not_landscape: "должно быть пейзажное изображение"
|
21
25
|
aspect_ratio_is_not: "должен иметь соотношение сторон %{aspect_ratio}"
|
22
|
-
aspect_ratio_unknown: "имеет неизвестное соотношение сторон"
|
26
|
+
aspect_ratio_unknown: "имеет неизвестное соотношение сторон"
|
27
|
+
image_not_processable: "не является допустимым изображением"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
sv:
|
2
|
+
errors:
|
3
|
+
messages:
|
4
|
+
content_type_invalid: "Har en ogiltig filtyp"
|
5
|
+
file_size_out_of_range: "storleken %{file_size} är utanför det krävda intervallet"
|
6
|
+
limit_out_of_range: "antalet filer är utanför det godkända intervallet"
|
7
|
+
image_metadata_missing: "bilden sankar metadata"
|
8
|
+
dimension_min_inclusion: "måste minst vara %{width} x %{height} pixlar"
|
9
|
+
dimension_max_inclusion: "måste vara mindre eller lika med %{width} x %{height} pixlar"
|
10
|
+
dimension_width_inclusion: "bredden är utanför %{min} till %{max} pixlar"
|
11
|
+
dimension_height_inclusion: "höjden är utanför %{min} till %{max} pixlar"
|
12
|
+
dimension_width_greater_than_or_equal_to: "bredden måste minst vara %{length} pixlar"
|
13
|
+
dimension_height_greater_than_or_equal_to: "höjden måste minst vara %{length} pixlar"
|
14
|
+
dimension_width_less_than_or_equal_to: "bredden får max vara %{length} pixlar"
|
15
|
+
dimension_height_less_than_or_equal_to: "höjden får max vara %{length} pixlar"
|
16
|
+
dimension_width_equal_to: "bredden måste vara %{length} pixlar"
|
17
|
+
dimension_height_equal_to: "höjden måste vara %{length} pixlar"
|
18
|
+
aspect_ratio_not_square: "måste vara en kvadratisk bild"
|
19
|
+
aspect_ratio_not_portrait: "måste vara en porträttorienterad bild"
|
20
|
+
aspect_ratio_not_landscape: "måste vara en landskapsorienterad bild"
|
21
|
+
aspect_ratio_is_not: "måste ha en följande aspect ratio %{aspect_ratio}"
|
22
|
+
aspect_ratio_unknown: "har en okänd aspect ratio"
|
23
|
+
image_not_processable: "är inte en giltig bild"
|
data/config/locales/tr.yml
CHANGED
@@ -2,7 +2,11 @@ tr:
|
|
2
2
|
errors:
|
3
3
|
messages:
|
4
4
|
content_type_invalid: "geçersiz dosya tipine sahip"
|
5
|
-
|
5
|
+
file_size_not_less_than: "dosya boyutu %{max_size} boyutundan küçük olmalıdır (geçerli boyut %{file_size}'dir)"
|
6
|
+
file_size_not_less_than_or_equal_to: "dosya boyutu %{max_size} değerinden küçük veya ona eşit olmalıdır (geçerli boyut %{file_size}'dir)"
|
7
|
+
file_size_not_greater_than: "dosya boyutu %{min_size} boyutundan büyük olmalıdır (geçerli boyut %{file_size}'dir)"
|
8
|
+
file_size_not_greater_than_or_equal_to: "dosya boyutu %{min_size} değerinden büyük veya eşit olmalıdır (geçerli boyut %{file_size}'dir)"
|
9
|
+
file_size_not_between: "dosya boyutu %{min_size} ile %{max_size} arasında olmalıdır (geçerli boyut %{file_size}'dir)"
|
6
10
|
limit_out_of_range: "toplam miktar aralık dışında"
|
7
11
|
image_metadata_missing: "geçerli bir imaj değil"
|
8
12
|
dimension_min_inclusion: "%{width} x %{height} piksele eşit ya da büyük olmalı"
|
@@ -20,3 +24,4 @@ tr:
|
|
20
24
|
aspect_ratio_not_landscape: "yatay bir imaj olmalı"
|
21
25
|
aspect_ratio_is_not: "%{aspect_ratio} en boy oranına sahip olmalı"
|
22
26
|
aspect_ratio_unknown: "bilinmeyen en boy oranı"
|
27
|
+
image_not_processable: "geçerli bir imaj değil"
|
data/config/locales/uk.yml
CHANGED
@@ -2,7 +2,11 @@ uk:
|
|
2
2
|
errors:
|
3
3
|
messages:
|
4
4
|
content_type_invalid: "має неприпустимий тип вмісту"
|
5
|
-
|
5
|
+
file_size_not_less_than: "розмір файлу має бути менше %{max_size} (поточний розмір %{file_size})"
|
6
|
+
file_size_not_less_than_or_equal_to: "розмір файлу має бути меншим або дорівнювати %{max_size} (поточний розмір %{file_size})"
|
7
|
+
file_size_not_greater_than: "розмір файлу має бути більшим ніж %{min_size} (поточний розмір %{file_size})"
|
8
|
+
file_size_not_greater_than_or_equal_to: "розмір файлу має бути більшим або дорівнювати %{min_size} (поточний розмір %{file_size})"
|
9
|
+
file_size_not_between: "розмір файлу має бути від %{min_size} до %{max_size} (поточний розмір %{file_size})"
|
6
10
|
limit_out_of_range: "кількість файлів більше необхідного"
|
7
11
|
image_metadata_missing: "не є допустимим зображенням"
|
8
12
|
dimension_min_inclusion: "мусить бути більше або дорівнювати %{width} x %{height} пікселям"
|
@@ -20,3 +24,4 @@ uk:
|
|
20
24
|
aspect_ratio_not_landscape: "мусить бути пейзажне зображення"
|
21
25
|
aspect_ratio_is_not: "мусить мати співвідношення сторін %{aspect_ratio}"
|
22
26
|
aspect_ratio_unknown: "має невідоме співвідношення сторін"
|
27
|
+
image_not_processable: "не є допустимим зображенням"
|
data/config/locales/vi.yml
CHANGED
@@ -2,7 +2,11 @@ vi:
|
|
2
2
|
errors:
|
3
3
|
messages:
|
4
4
|
content_type_invalid: "tệp không hợp lệ"
|
5
|
-
|
5
|
+
file_size_not_less_than: "kích thước tệp phải nhỏ hơn %{max_size} (kích thước hiện tại là %{file_size})"
|
6
|
+
file_size_not_less_than_or_equal_to: "kích thước tệp phải nhỏ hơn hoặc bằng %{max_size} (kích thước hiện tại là %{file_size})"
|
7
|
+
file_size_not_greater_than: "kích thước tệp phải lớn hơn %{min_size} (kích thước hiện tại là %{file_size})"
|
8
|
+
file_size_not_greater_than_or_equal_to: "kích thước tệp phải lớn hơn hoặc bằng %{min_size} (kích thước hiện tại là %{file_size})"
|
9
|
+
file_size_not_between: "kích thước tệp phải nằm trong khoảng từ %{min_size} đến %{max_size} (kích thước hiện tại là %{file_size})"
|
6
10
|
limit_out_of_range: "tổng số tệp vượt giới hạn"
|
7
11
|
image_metadata_missing: "không phải là ảnh"
|
8
12
|
dimension_min_inclusion: "phải lớn hơn hoặc bằng %{width} x %{height} pixel"
|
@@ -20,3 +24,4 @@ vi:
|
|
20
24
|
aspect_ratio_not_landscape: "phải là ảnh ngang"
|
21
25
|
aspect_ratio_is_not: "phải có tỉ lệ ảnh %{aspect_ratio}"
|
22
26
|
aspect_ratio_unknown: "tỉ lệ ảnh không xác định"
|
27
|
+
image_not_processable: "không phải là ảnh"
|
data/config/locales/zh-CN.yml
CHANGED
@@ -2,7 +2,11 @@ zh-CN:
|
|
2
2
|
errors:
|
3
3
|
messages:
|
4
4
|
content_type_invalid: "文件类型错误"
|
5
|
-
|
5
|
+
file_size_not_less_than: "文件大小必须小于 %{max_size}(当前大小为 %{file_size})"
|
6
|
+
file_size_not_less_than_or_equal_to: "文件大小必须小于或等于 %{max_size}(当前大小为 %{file_size})"
|
7
|
+
file_size_not_greater_than: "文件大小必须大于 %{min_size}(当前大小为 %{file_size})"
|
8
|
+
file_size_not_greater_than_or_equal_to: "文件大小必须大于或等于 %{min_size}(当前大小为 %{file_size})"
|
9
|
+
file_size_not_between: "文件大小必须介于 %{min_size} 和 %{max_size} 之间(当前大小为 %{file_size})"
|
6
10
|
limit_out_of_range: "文件数超出限定范围"
|
7
11
|
image_metadata_missing: "不是有效的图像"
|
8
12
|
dimension_min_inclusion: "必须大于或等于 %{width} x %{height} 像素"
|
@@ -20,3 +24,4 @@ zh-CN:
|
|
20
24
|
aspect_ratio_not_landscape: "必须是横屏图片"
|
21
25
|
aspect_ratio_is_not: "纵横比必须是 %{aspect_ratio}"
|
22
26
|
aspect_ratio_unknown: "未知的纵横比"
|
27
|
+
image_not_processable: "不是有效的图像"
|