---
url: /reference/concerns/translatable.md
---
# Trek::Translatable

Multi-language attributes, backed by [Mobility](https://github.com/shioyama/mobility). Translated values are stored in `jsonb` columns keyed by locale.

## API

```ruby
class Page < ApplicationRecord
  include Trek::Translatable
  translate_attributes :title, :description
end
```

`translate_attributes(*attr_names)` declares the translatable attributes (it delegates to Mobility's `translates`).

## Usage

```ruby
page = Page.create(title: "Home")
I18n.with_locale(:fr) { page.update(title: "Accueil") }

page.title                              # => "Home" (current locale)
I18n.with_locale(:fr) { page.title }    # => "Accueil"
```

Stored as:

```json
{ "en": "Home", "fr": "Accueil" }
```

## Requirements

* A `jsonb` column per translated attribute (default `{}`)
* Used by [Page](/reference/models/page), [PagePath](/reference/models/page-path), [Fragment](/reference/models/fragment) and [MenuNode](/reference/models/menu-node)
