Skip to main content

TranslationResource

TranslationResource is a lightweight JSON resource for serializing a single translation row. It provides toggles to include or exclude version, timestamps, and soft‑deletion metadata, so your API can shape output per use case without custom transformers.

Use Cases​

Use TranslationResource when you need:

  • Single translation row serialization: Return a single translation record in API responses
  • Flexible metadata control: Toggle version, timestamps, and soft-deletion metadata as needed
  • API consistency: Standardize translation output format across your API endpoints
  • Version history display: Show translation version information in API responses
  • Audit and tracking: Include timestamps and deletion status for translation records
  • Lightweight responses: Return minimal translation data without unnecessary metadata

Example scenarios:

  • API endpoints returning a specific translation field for a model
  • Translation management interfaces showing individual translation records
  • Version history APIs displaying specific translation versions
  • Audit logs showing translation changes with timestamps
  • Translation detail pages in admin panels
  • Single translation retrieval endpoints

This guide focuses on usage and outputs. No tests or database details are discussed.


Constructor​

use JobMetric\Translation\Http\Resources\TranslationResource;

// Wrap a single Translation model (or any object exposing the needed properties)
return new TranslationResource($translationRow);

If the underlying resource is null, the resource returns an empty array ([]).


Default Behavior​

By default:

  • version is included (if present on the resource)
  • created_at and updated_at are excluded
  • deleted_at is excluded

You can change these with chainable methods:

  • withVersion(bool $with = true)
  • withTimestamps(bool $with = true)
  • withDeletedAt(bool $with = true)

Output Shape​

Base fields (always present if available on the resource):

  • translatable_type
  • translatable_id
  • locale
  • field
  • value

Optional fields (based on toggles and availability):

  • version (integer)
  • created_at (string datetime)
  • updated_at (string datetime)
  • deleted_at (string datetime or null)

Examples​

1) Default Output (version included, timestamps & deleted_at excluded)​

Usage:

return new TranslationResource($translation);

Expected Output:

{
"translatable_type": "App\\Models\\Post",
"translatable_id": 42,
"locale": "fa",
"field": "title",
"value": "تیتر فارسی",
"version": 3
}

2) Exclude Version​

Usage:

return (new TranslationResource($translation))
->withVersion(false);

Expected Output:

{
"translatable_type": "App\\Models\\Post",
"translatable_id": 42,
"locale": "fa",
"field": "title",
"value": "تیتر فارسی"
}

3) Include Timestamps​

Usage:

return (new TranslationResource($translation))
->withTimestamps();

Expected Output:

{
"translatable_type": "App\\Models\\Post",
"translatable_id": 42,
"locale": "fa",
"field": "title",
"value": "تیتر فارسی",
"version": 3,
"created_at": "2025-08-10 12:00:00",
"updated_at": "2025-08-12 09:15:30"
}

4) Include Soft‑Deletion Metadata​

Usage:

return (new TranslationResource($translation))
->withDeletedAt();

Expected Output (soft‑deleted row example):

{
"translatable_type": "App\\Models\\Post",
"translatable_id": 42,
"locale": "fa",
"field": "summary",
"value": "خلاصه قدیمی",
"version": 2,
"deleted_at": "2025-08-10 12:34:56"
}

Expected Output (active row example):

{
"translatable_type": "App\\Models\\Post",
"translatable_id": 42,
"locale": "fa",
"field": "summary",
"value": "خلاصه جدید",
"version": 3,
"deleted_at": null
}

5) Full Metadata (Version + Timestamps + DeletedAt)​

Usage:

return (new TranslationResource($translation))
->withVersion()
->withTimestamps()
->withDeletedAt();

Expected Output:

{
"translatable_type": "App\\Models\\Post",
"translatable_id": 42,
"locale": "fa",
"field": "title",
"value": "تیتر فارسی",
"version": 3,
"created_at": "2025-08-10 12:00:00",
"updated_at": "2025-08-12 09:15:30",
"deleted_at": null
}

Chaining Patterns​

  • Minimal:

    new TranslationResource($row);
  • Without version:

    (new TranslationResource($row))->withVersion(false);
  • All metadata:

    (new TranslationResource($row))->withTimestamps()->withDeletedAt();
  • Custom combination:

    (new TranslationResource($row))->withVersion(false)->withDeletedAt();

Edge Cases​

  • Null resource → []
  • Missing version property on the resource while withVersion(true) is used → version is simply omitted.
  • Missing created_at/updated_at/deleted_at on the resource → the corresponding fields are omitted (or null if accessors return null).

Summary​

TranslationResource gives you a small, reliable surface to serialize a single translation row. Toggle version, timestamps, and soft‑deletion data as needed, keep your controllers lean, and your API responses consistent.