@@ -18,8 +18,8 @@ def errors
1818
1919 [ JSONAPI ::Error . new ( code : JSONAPI ::INTERNAL_SERVER_ERROR ,
2020 status : :internal_server_error ,
21- title : 'Internal Server Error' ,
22- detail : 'Internal Server Error' ,
21+ title : I18n . translate ( 'exceptions.internal_server_error.title' ) ,
22+ detail : I18n . translate ( 'exceptions.internal_server_error.detail' ) ,
2323 meta : meta ) ]
2424 end
2525 end
@@ -33,8 +33,8 @@ def initialize(resource)
3333 def errors
3434 [ JSONAPI ::Error . new ( code : JSONAPI ::INVALID_RESOURCE ,
3535 status : :bad_request ,
36- title : 'Invalid resource' ,
37- detail : " #{ resource } is not a valid resource." ) ]
36+ title : I18n . translate ( 'exceptions.invalid_resource.title' ) ,
37+ detail : I18n . translate ( 'exceptions.invalid_resource.detail' , resource : resource ) ) ]
3838 end
3939 end
4040
@@ -47,8 +47,8 @@ def initialize(id)
4747 def errors
4848 [ JSONAPI ::Error . new ( code : JSONAPI ::RECORD_NOT_FOUND ,
4949 status : :not_found ,
50- title : 'Record not found' ,
51- detail : "The record identified by #{ id } could not be found." ) ]
50+ title : I18n . translate ( 'exceptions.record_not_found.title' ) ,
51+ detail : I18n . translate ( 'exceptions.record_not_found.detail' , id : id ) ) ]
5252 end
5353 end
5454
@@ -61,8 +61,10 @@ def initialize(media_type)
6161 def errors
6262 [ JSONAPI ::Error . new ( code : JSONAPI ::UNSUPPORTED_MEDIA_TYPE ,
6363 status : :unsupported_media_type ,
64- title : 'Unsupported media type' ,
65- detail : "All requests that create or update resources must use the '#{ JSONAPI ::MEDIA_TYPE } ' Content-Type. This request specified '#{ media_type } .'" ) ]
64+ title : I18n . translate ( 'exceptions.unsupported_media_type.title' ) ,
65+ detail : I18n . translate ( "exceptions.unsupported_media_type.detail" ,
66+ needed_media_type : JSONAPI ::MEDIA_TYPE ,
67+ media_type : media_type ) ) ]
6668 end
6769 end
6870
@@ -75,17 +77,17 @@ def initialize(id)
7577 def errors
7678 [ JSONAPI ::Error . new ( code : JSONAPI ::RELATION_EXISTS ,
7779 status : :bad_request ,
78- title : 'Relation exists' ,
79- detail : "The relation to #{ id } already exists." ) ]
80+ title : I18n . translate ( 'exceptions.has_many_relation.title' ) ,
81+ detail : I18n . translate ( 'exceptions.has_many_relation.detail' , id : id ) ) ]
8082 end
8183 end
8284
8385 class ToManySetReplacementForbidden < Error
8486 def errors
8587 [ JSONAPI ::Error . new ( code : JSONAPI ::FORBIDDEN ,
8688 status : :forbidden ,
87- title : 'Complete replacement forbidden' ,
88- detail : 'Complete replacement forbidden for this relationship' ) ]
89+ title : I18n . translate ( 'exceptions.to_many_set_replacement_forbidden.title' ) ,
90+ detail : I18n . translate ( 'exceptions.to_many_set_replacement_forbidden.detail' ) ) ]
8991 end
9092 end
9193
@@ -98,8 +100,8 @@ def initialize(filters)
98100 def errors
99101 [ JSONAPI ::Error . new ( code : JSONAPI ::INVALID_FILTERS_SYNTAX ,
100102 status : :bad_request ,
101- title : 'Invalid filters syntax' ,
102- detail : " #{ filters } is not a valid syntax for filtering." ) ]
103+ title : I18n . translate ( 'exceptions.invalid_filter_syntax.title' ) ,
104+ detail : I18n . translate ( 'exceptions.invalid_filter_syntax.title' ) ) ]
103105 end
104106 end
105107
@@ -112,8 +114,8 @@ def initialize(filter)
112114 def errors
113115 [ JSONAPI ::Error . new ( code : JSONAPI ::FILTER_NOT_ALLOWED ,
114116 status : :bad_request ,
115- title : 'Filter not allowed' ,
116- detail : " #{ filter } is not allowed." ) ]
117+ title : I18n . translate ( 'exceptions.filter_not_allowed.title' ) ,
118+ detail : I18n . translate ( 'exceptions.filter_not_allowed.detail' , filter : filter ) ) ]
117119 end
118120 end
119121
@@ -127,8 +129,9 @@ def initialize(filter, value)
127129 def errors
128130 [ JSONAPI ::Error . new ( code : JSONAPI ::INVALID_FILTER_VALUE ,
129131 status : :bad_request ,
130- title : 'Invalid filter value' ,
131- detail : "#{ value } is not a valid value for #{ filter } ." ) ]
132+ title : I18n . translate ( 'exceptions.invalid_filter_value.title' ) ,
133+ detail : I18n . translate ( 'exceptions.invalid_filter_value.detail' ) ,
134+ value : value , filter : filter ) ]
132135 end
133136 end
134137
@@ -142,26 +145,27 @@ def initialize(field, value)
142145 def errors
143146 [ JSONAPI ::Error . new ( code : JSONAPI ::INVALID_FIELD_VALUE ,
144147 status : :bad_request ,
145- title : 'Invalid field value' ,
146- detail : "#{ value } is not a valid value for #{ field } ." ) ]
148+ title : I18n . translate ( 'exceptions.invalid_field_value.title' ) ,
149+ detail : I18n . translate ( 'exceptions.invalid_field_value.detail' ,
150+ value : value , field : field ) ) ]
147151 end
148152 end
149153
150154 class InvalidFieldFormat < Error
151155 def errors
152156 [ JSONAPI ::Error . new ( code : JSONAPI ::INVALID_FIELD_FORMAT ,
153157 status : :bad_request ,
154- title : 'Invalid field format' ,
155- detail : 'Fields must specify a type.' ) ]
158+ title : I18n . translate ( 'exceptions.invalid_field_format.title' ) ,
159+ detail : I18n . translate ( 'exceptions.invalid_field_format.detail' ) ) ]
156160 end
157161 end
158162
159163 class InvalidLinksObject < Error
160164 def errors
161165 [ JSONAPI ::Error . new ( code : JSONAPI ::INVALID_LINKS_OBJECT ,
162166 status : :bad_request ,
163- title : 'Invalid Links Object' ,
164- detail : 'Data is not a valid Links Object.' ) ]
167+ title : I18n . translate ( 'exceptions.invalid_links_object.title' ) ,
168+ detail : I18n . translate ( 'exceptions.invalid_links_object.detail' ) ) ]
165169 end
166170 end
167171
@@ -174,8 +178,8 @@ def initialize(type)
174178 def errors
175179 [ JSONAPI ::Error . new ( code : JSONAPI ::TYPE_MISMATCH ,
176180 status : :bad_request ,
177- title : 'Type Mismatch' ,
178- detail : " #{ type } is not a valid type for this operation." ) ]
181+ title : I18n . translate ( 'exceptions.type_mismatch.title' ) ,
182+ detail : I18n . translate ( 'exceptions.type_mismatch.detail' , type : type ) ) ]
179183 end
180184 end
181185
@@ -189,8 +193,9 @@ def initialize(type, field)
189193 def errors
190194 [ JSONAPI ::Error . new ( code : JSONAPI ::INVALID_FIELD ,
191195 status : :bad_request ,
192- title : 'Invalid field' ,
193- detail : "#{ field } is not a valid field for #{ type } ." ) ]
196+ title : I18n . translate ( 'exceptions.invalid_field.title' ) ,
197+ detail : I18n . translate ( 'exceptions.invalid_field.detail' ,
198+ field : field , type : type ) ) ]
194199 end
195200 end
196201
@@ -204,8 +209,9 @@ def initialize(resource, relationship)
204209 def errors
205210 [ JSONAPI ::Error . new ( code : JSONAPI ::INVALID_INCLUDE ,
206211 status : :bad_request ,
207- title : 'Invalid field' ,
208- detail : "#{ relationship } is not a valid relationship of #{ resource } " ) ]
212+ title : I18n . translate ( 'exceptions.invalid_include.title' ) ,
213+ detail : I18n . translate ( 'exceptions.invalid_include.detail' ,
214+ relationship : relationship , resource : resource ) ) ]
209215 end
210216 end
211217
@@ -219,8 +225,9 @@ def initialize(resource, sort_criteria)
219225 def errors
220226 [ JSONAPI ::Error . new ( code : JSONAPI ::INVALID_SORT_CRITERIA ,
221227 status : :bad_request ,
222- title : 'Invalid sort criteria' ,
223- detail : "#{ sort_criteria } is not a valid sort criteria for #{ resource } " ) ]
228+ title : I18n . translate ( 'exceptions.invalid_sort_criteria.title' ) ,
229+ detail : I18n . translate ( 'exceptions.invalid_sort_criteria.detail' ,
230+ sort_criteria : sort_criteria , resource : resource ) ) ]
224231 end
225232 end
226233
@@ -234,8 +241,9 @@ def errors
234241 params . collect do |param |
235242 JSONAPI ::Error . new ( code : JSONAPI ::PARAM_NOT_ALLOWED ,
236243 status : :bad_request ,
237- title : 'Param not allowed' ,
238- detail : "#{ param } is not allowed." )
244+ title : I18n . translate ( 'exceptions.parameters_not_allowed.title' ) ,
245+ detail : I18n . translate ( 'exceptions.parameters_not_allowed.detail' , param : param ) )
246+
239247 end
240248 end
241249 end
@@ -249,17 +257,17 @@ def initialize(param)
249257 def errors
250258 [ JSONAPI ::Error . new ( code : JSONAPI ::PARAM_MISSING ,
251259 status : :bad_request ,
252- title : 'Missing Parameter' ,
253- detail : "The required parameter, #{ param } , is missing." ) ]
260+ title : I18n . translate ( 'exceptions.parameter_missing.title' ) ,
261+ detail : I18n . translate ( 'exceptions.parameter_missing.detail' , param : param ) ) ]
254262 end
255263 end
256264
257265 class CountMismatch < Error
258266 def errors
259267 [ JSONAPI ::Error . new ( code : JSONAPI ::COUNT_MISMATCH ,
260268 status : :bad_request ,
261- title : 'Count to key mismatch' ,
262- detail : 'The resource collection does not contain the same number of objects as the number of keys.' ) ]
269+ title : I18n . translate ( 'exceptions.count_mismatch.title' ) ,
270+ detail : I18n . translate ( 'exceptions.count_mismatch.detail' ) ) ]
263271 end
264272 end
265273
@@ -272,17 +280,18 @@ def initialize(key)
272280 def errors
273281 [ JSONAPI ::Error . new ( code : JSONAPI ::KEY_NOT_INCLUDED_IN_URL ,
274282 status : :bad_request ,
275- title : 'Key is not included in URL' ,
276- detail : "The URL does not support the key #{ key } " ) ]
283+ title : I18n . translate ( 'exceptions.key_not_included_in_url.title' ) ,
284+ detail : I18n . translate ( 'exceptions.key_not_included_in_url.detail' ,
285+ key : key ) ) ]
277286 end
278287 end
279288
280289 class MissingKey < Error
281290 def errors
282291 [ JSONAPI ::Error . new ( code : JSONAPI ::KEY_ORDER_MISMATCH ,
283292 status : :bad_request ,
284- title : 'A key is required' ,
285- detail : 'The resource object does not contain a key.' ) ]
293+ title : I18n . translate ( 'exceptions.missing_key.title' ) ,
294+ detail : I18n . translate ( 'exceptions.missing_key.detail' ) ) ]
286295 end
287296 end
288297
@@ -295,7 +304,7 @@ def initialize(message)
295304 def errors
296305 [ JSONAPI ::Error . new ( code : JSONAPI ::LOCKED ,
297306 status : :locked ,
298- title : 'Locked resource' ,
307+ title : I18n . translate ( 'exceptions.record_locked.title' ) ,
299308 detail : "#{ message } " ) ]
300309 end
301310 end
@@ -343,17 +352,17 @@ class SaveFailed < Error
343352 def errors
344353 [ JSONAPI ::Error . new ( code : JSONAPI ::SAVE_FAILED ,
345354 status : :unprocessable_entity ,
346- title : 'Save failed or was cancelled' ,
347- detail : 'Save failed or was cancelled' ) ]
355+ title : I18n . translate ( 'exceptions.save_failed.title' ) ,
356+ detail : I18n . translate ( 'exceptions.save_failed.detail' ) ) ]
348357 end
349358 end
350359
351360 class InvalidPageObject < Error
352361 def errors
353362 [ JSONAPI ::Error . new ( code : JSONAPI ::INVALID_PAGE_OBJECT ,
354363 status : :bad_request ,
355- title : 'Invalid Page Object' ,
356- detail : 'Invalid Page Object.' ) ]
364+ title : I18n . translate ( 'exceptions.invalid_page_object.title' ) ,
365+ detail : I18n . translate ( 'exceptions.invalid_page_object.detail' ) ) ]
357366 end
358367 end
359368
@@ -367,8 +376,8 @@ def errors
367376 params . collect do |param |
368377 JSONAPI ::Error . new ( code : JSONAPI ::PARAM_NOT_ALLOWED ,
369378 status : :bad_request ,
370- title : 'Page parameter not allowed' ,
371- detail : " #{ param } is not an allowed page parameter." )
379+ title : I18n . translate ( 'exceptions.page_parameters_not_allowed.title' ) ,
380+ detail : I18n . translate ( 'exceptions.page_parameters_not_allowed.detail' , param : param ) )
372381 end
373382 end
374383 end
@@ -378,13 +387,13 @@ class InvalidPageValue < Error
378387 def initialize ( page , value , msg = nil )
379388 @page = page
380389 @value = value
381- @msg = msg || " #{ value } is not a valid value for #{ page } page parameter."
390+ @msg = msg || I18n . translate ( 'exceptions.invalid_page_value.detail' , value : value , page : page )
382391 end
383392
384393 def errors
385394 [ JSONAPI ::Error . new ( code : JSONAPI ::INVALID_PAGE_VALUE ,
386395 status : :bad_request ,
387- title : 'Invalid page value' ,
396+ title : I18n . translate ( 'exceptions.invalid_page_value.title' ) ,
388397 detail : @msg ) ]
389398 end
390399 end
0 commit comments