avo 4.1.6 → 4.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/app/assets/builds/avo.base.css +12609 -0
- data/app/assets/builds/avo.base.js +166402 -0
- data/app/assets/builds/avo.base.js.map +7 -0
- data/app/assets/builds/avo.custom.js +6 -0
- data/app/assets/builds/avo.custom.js.map +7 -0
- data/app/assets/builds/late-registration.js +10 -0
- data/app/assets/builds/late-registration.js.map +7 -0
- data/app/controllers/avo/media_library_controller.rb +7 -0
- data/lib/avo/skills/avo-i18n/SKILL.md +41 -4
- data/lib/avo/skills/avo-media-library/SKILL.md +5 -5
- data/lib/avo/skills/index.md +1 -1
- data/lib/avo/version.rb +1 -1
- data/lib/generators/avo/templates/locales/avo.ar.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.de.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.en.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.es.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.fr.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.it.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.ja.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.nb.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.nl.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.nn.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.pl.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.pt-BR.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.pt.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.ro.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.ru.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.tr.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.ua.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.zh-TW.yml +4 -0
- data/lib/generators/avo/templates/locales/avo.zh.yml +4 -0
- metadata +8 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: avo-i18n
|
|
3
|
-
description: Translate and localize the Avo admin — resource, action, and field labels, tab and panel titles, field help/placeholder/include_blank text, save-button labels, the interface language, and right-to-left layout — via `config/locales/avo.<locale>.yml`, `self.translation_key`, and `config.locale`. Use when the user wants to translate the admin to another language (French/Spanish/German/Arabic/…), localize or rename resource/field/action labels, translate tab or panel titles, make the admin multilingual, support RTL languages, change or force the admin's interface language,
|
|
3
|
+
description: Translate and localize the Avo admin — resource, action, and field labels, scope/card/dashboard titles, tab and panel titles, field help/placeholder/include_blank text, save-button labels, the interface language, and right-to-left layout — via `config/locales/avo.<locale>.yml`, `self.translation_key`, and `config.locale`. Use when the user wants to translate the admin to another language (French/Spanish/German/Arabic/…), localize or rename resource/field/action/scope/card/dashboard labels, translate tab or panel titles, make the admin multilingual, support RTL languages, change or force the admin's interface language, show a different label per language, or work out which keys are safe to add under `avo.`.
|
|
4
4
|
allowed-tools: Read, Edit, Write, Glob, Grep, Bash, WebFetch
|
|
5
5
|
metadata:
|
|
6
6
|
requires-gem: none — Community
|
|
@@ -18,6 +18,7 @@ Authoritative docs — fetch on demand rather than guessing, and verify every op
|
|
|
18
18
|
|
|
19
19
|
- Docs map (start here to discover pages): https://docs.avohq.io/4.0/docs-map.md
|
|
20
20
|
- Localization (i18n) guide: https://docs.avohq.io/4.0/i18n.md
|
|
21
|
+
- Which `avo.*` keys are reserved and which roots are yours to fill: https://docs.avohq.io/4.0/i18n.md#safe-keys
|
|
21
22
|
- Multi-language URLs guide (locale in the route, e.g. `/de/resources/users`): https://docs.avohq.io/4.0/guides/multi-language-urls.md
|
|
22
23
|
- Multilingual records guide (translating the *data*, not the chrome): https://docs.avohq.io/4.0/guides/multilingual-content.md
|
|
23
24
|
|
|
@@ -196,7 +197,21 @@ en:
|
|
|
196
197
|
save: "Save the product!"
|
|
197
198
|
```
|
|
198
199
|
|
|
199
|
-
### 7.
|
|
200
|
+
### 7. Localize scopes, cards, and dashboards
|
|
201
|
+
|
|
202
|
+
Three more roots follow the same convention, derived by the **add-on gems** that provide those entities — so they only exist in an app that has the gem installed:
|
|
203
|
+
|
|
204
|
+
| Entity | Key | Attributes | Derived by |
|
|
205
|
+
| --- | --- | --- | --- |
|
|
206
|
+
| Scope | `avo.scope_translations.<class_path>` | `name`, `description` | `avo-scopes` |
|
|
207
|
+
| Card | `avo.card_translations.<class_path>` | `label`, `description`, `discreet_description` | `avo-dashboards` |
|
|
208
|
+
| Dashboard | `avo.dashboard_translations.<class_path>` | `name`, `description` | `avo-dashboards` |
|
|
209
|
+
|
|
210
|
+
Namespaced classes use the same slash-joined path as resources (`avo.card_translations.sales/monthly`), `self.translation_key` overrides the derived path, and the class attribute stays the fallback. Detail: https://docs.avohq.io/4.0/i18n.md#localizing-scopes-cards-and-dashboards — and read the gem's own skill before writing the YAML, since each gem owns how its labels resolve.
|
|
211
|
+
|
|
212
|
+
Don't confuse these with the gems' **own** chrome (the refresh control, the count pill), which lives under `avo.scopes.*` and `avo.cards.*` — deliberately separate namespaces.
|
|
213
|
+
|
|
214
|
+
### 8. Set or switch the interface language
|
|
200
215
|
|
|
201
216
|
`config.locale` sets Avo's locale for **Avo requests only** — the rest of the app keeps `config.i18n.default_locale`. Default is `nil` (falls back to the app default):
|
|
202
217
|
|
|
@@ -212,10 +227,28 @@ Two request params switch language on the fly:
|
|
|
212
227
|
- **`?set_locale=pt-BR`** — sets Avo's default locale process-wide **until the server restarts** (it mutates `Avo.configuration.locale`). Affects every user; use it as a switch, not per-user preference.
|
|
213
228
|
- **`?force_locale=pt-BR`** — sets the locale for that request only, but Avo **keeps the param in every link** while you navigate. Remove it to return to the configured locale. Good for previewing a translation without changing config.
|
|
214
229
|
|
|
215
|
-
###
|
|
230
|
+
### 9. Right-to-left languages
|
|
216
231
|
|
|
217
232
|
RTL is **automatic** — Avo detects it from the active locale and flips the layout (`dir="rtl"`, mirrored chrome) with no configuration. Built-in RTL locales: `ar`, `he`, `fa`, `ur`, `yi`, `ps`, `sd`, `ku`, `ckb`, `ug`, `dv`. Matching is on the **language segment**, so regional variants like `ar-EG` count as RTL too. To ship an Arabic admin, translate into `avo.ar.yml` and set the locale — the layout follows.
|
|
218
233
|
|
|
234
|
+
## What you can safely put under `avo.`
|
|
235
|
+
|
|
236
|
+
Avo's locale files, every add-on gem's, and the app's own deep-merge into **one `avo` tree per locale**, and `config/locales` loads **last**. Overriding Avo's strings is supported — it is most of what this skill does. What silently breaks an app is changing a key's **shape**:
|
|
237
|
+
|
|
238
|
+
- **Replace a string with a string; never nest beneath one.** A String and a Hash cannot merge, so the file that loads last replaces the other outright — no error, no warning, the label just stops rendering.
|
|
239
|
+
- **Strings that read like namespaces are the live hazard.** `avo.actions`, `avo.resources`, `avo.dashboards`, `avo.dashboard`, `avo.filters`, `avo.pages` and `avo.tools` are labels Avo renders, as are one-word keys like `avo.copy`, `avo.confirm`, `avo.new`, `avo.edit`, `avo.delete`, `avo.save` and `avo.close`. Treat them as taken.
|
|
240
|
+
- **Pluralization hashes are the exception.** A sibling beside `one:`/`other:` under `avo.file`, `avo.record`, `avo.number_of_items` or `avo.x_items_more` is safe — pluralization reads only the plural keys. That is exactly why `avo.resource_translations.<r>` is legitimately both a plural leaf **and** a subtree root carrying `.fields`/`.tabs`/`.panels`/`.save`.
|
|
241
|
+
- **Six derived roots are yours to fill.** `resource_translations`, `action_translations`, `field_translations` (core), `scope_translations` (`avo-scopes`), `card_translations` and `dashboard_translations` (`avo-dashboards`). Avo ships nothing under them.
|
|
242
|
+
- **`avo.filter_translations` is not a root** — no code derives it. Filters have no derived translation root today; localize one by calling `I18n.t` from its `self.name` block with a key of your own choosing.
|
|
243
|
+
|
|
244
|
+
List what is currently taken, **without** mutating the app:
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
bin/rails runner 'puts I18n.t("avo").select { |_, v| v.is_a?(String) }.keys.sort'
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
Don't reach for `bin/rails generate avo:locales` just to look — it copies Avo's locale files into `config/locales`, pinning today's wording into the app. Run it only when editable copies are actually wanted. Full rule and the worked collision: https://docs.avohq.io/4.0/i18n.md#safe-keys
|
|
251
|
+
|
|
219
252
|
## Key options
|
|
220
253
|
|
|
221
254
|
| Hook | Where | Does |
|
|
@@ -228,6 +261,9 @@ RTL is **automatic** — Avo detects it from the active locale and flips the lay
|
|
|
228
261
|
| `avo.resource_translations.<r>.tabs.<t>` | YAML | Tab title, keyed on the parameterized `title:`. Pin a different key with `translation_key:` on the `tab`. |
|
|
229
262
|
| `avo.resource_translations.<r>.panels.<p>` | YAML | Panel title, same convention as tabs; `translation_key:` on the `panel` overrides it. |
|
|
230
263
|
| `avo.resource_translations.<r>.save` | YAML | Per-resource Save-button text (else global `avo.save`). |
|
|
264
|
+
| `avo.scope_translations.<s>` | YAML | Scope `name`/`description`. Root derived by `avo-scopes`. |
|
|
265
|
+
| `avo.card_translations.<c>` | YAML | Card `label`/`description`/`discreet_description`. Root derived by `avo-dashboards`. |
|
|
266
|
+
| `avo.dashboard_translations.<d>` | YAML | Dashboard `name`/`description`. Root derived by `avo-dashboards`. |
|
|
231
267
|
| `config.locale` | Initializer | Avo's interface language for Avo requests only. Default `nil` → app default. |
|
|
232
268
|
| `?set_locale=` param | URL | Switches Avo's default locale process-wide until restart. |
|
|
233
269
|
| `?force_locale=` param | URL | Switches locale for the current navigation only; sticks in links until removed. |
|
|
@@ -239,6 +275,7 @@ RTL is **automatic** — Avo detects it from the active locale and flips the lay
|
|
|
239
275
|
- **Explicit `translation_key:` on a field bypasses the cascade.** You lose the resource-scoped → shared → humanized fallback and the automatic `help`/`placeholder`/`include_blank` sibling lookup. Only pin a key when you want exactly that key.
|
|
240
276
|
- **Default keys include the namespace.** `Avo::Resources::Galaxy::Planet` → `avo.resource_translations.galaxy/planet`; `Avo::Actions::City::Update` → `avo.action_translations.city/update` (underscored, slash-joined). Match that path in YAML or the lookup misses and you fall back to the humanized name.
|
|
241
277
|
- **Pluralization keys are required.** Resource/field name lookups run `I18n.t(key, count:, default:)`, so provide `one`/`other` (and `zero` where relevant). A bare string can raise `I18n::InvalidPluralizationData` or silently fall back to the computed name.
|
|
278
|
+
- **Nesting under a path Avo holds as a string destroys that string.** The tree deep-merges per locale and the app's `config/locales` loads last, so `avo.dashboards.my_dashboard.name` turns the sidebar's "Dashboards" heading into a Hash and it stops rendering — silently. Use the derived root instead (`avo.dashboard_translations.my_dashboard.name`), and check `I18n.t("avo")` for strings before inventing a namespace.
|
|
242
279
|
- **`set_locale` is global and sticky.** It mutates `Avo.configuration.locale` and persists until the server restarts, affecting all users — it is not a per-user preference. Use `force_locale` for a scoped, reversible switch (it rides along in every link until removed).
|
|
243
280
|
- **RTL is automatic and matches on the language segment.** `ar`, `he`, `fa`, `ur`, `yi`, `ps`, `sd`, `ku`, `ckb`, `ug`, `dv` — and regional variants (`ar-EG`) — flip the layout with no config. Don't hand-roll a direction toggle.
|
|
244
281
|
- **Don't confuse chrome with data.** This skill localizes labels/buttons/help (the admin UI). Translating record *content* is the multilingual-records guide; putting the locale in the URL is the multi-language-URLs guide.
|
|
@@ -249,6 +286,6 @@ RTL is **automatic** — Avo detects it from the active locale and flips the lay
|
|
|
249
286
|
When done, tell the user:
|
|
250
287
|
|
|
251
288
|
- Which locale file(s) you created or edited (full paths) and any resource/action/field file(s) where you set `translation_key`, plus any generator command run (`bin/rails g avo:locales`).
|
|
252
|
-
- The translation keys you added and the resource/action/field each targets — call out where you relied on the field cascade vs. an explicit `translation_key:`.
|
|
289
|
+
- The translation keys you added and the resource/action/field/scope/card/dashboard each targets — call out where you relied on the field cascade vs. an explicit `translation_key:`.
|
|
253
290
|
- The active-locale change, if any (`config.locale`, or that they can preview with `?force_locale=`), and whether RTL will engage for the chosen language.
|
|
254
291
|
- Anything still needed: add the remaining `one`/`other` plural forms, translate the other bundled strings, restart the server after a `config.locale` change, or move to the multilingual-records / multi-language-URLs guide if the real goal was record content or locale-in-URL.
|
|
@@ -56,7 +56,7 @@ end
|
|
|
56
56
|
|
|
57
57
|
2. **Turn it on** with the `Enable it` snippet above. This is the only step needed for "let users upload/manage assets" or "add an asset gallery". Mention the Alpha status.
|
|
58
58
|
|
|
59
|
-
3. **Control the sidebar item
|
|
59
|
+
3. **Control who may use it.** `visible` is the per-user gate for the whole feature — it decides both whether the sidebar item shows *and* whether that user may reach any Media Library route. By default an enabled Media Library is visible to everyone who can sign in to Avo.
|
|
60
60
|
- Hide it outright with a Boolean:
|
|
61
61
|
```ruby
|
|
62
62
|
if defined?(Avo::MediaLibrary)
|
|
@@ -73,7 +73,7 @@ end
|
|
|
73
73
|
end
|
|
74
74
|
end
|
|
75
75
|
```
|
|
76
|
-
`visible`
|
|
76
|
+
A user for whom `visible` returns `false` gets a 404 on every Media Library route. It is access control, not just a menu toggle: it already hid the sidebar item and the media-library button in the `trix` toolbar, and it now closes the routes those point at. Leave it at its default `true` only if every Avo user is allowed to browse, rename and delete every uploaded asset. (When `enabled` is `false`, `visible` is moot — the killswitch already hides everything.)
|
|
77
77
|
|
|
78
78
|
4. **Re-add it to a customized menu (if needed).** If the app defines a custom `config.main_menu` (see **avo-navigation-search**), the Media Library item does **not** appear automatically. Add it back as a `link_to` (or `link`) pointing at `avo.media_library_index_path`, inside the normal `Avo.configure` block:
|
|
79
79
|
```ruby
|
|
@@ -106,8 +106,8 @@ end
|
|
|
106
106
|
|
|
107
107
|
- **Alpha feature.** It's still in alpha and future releases may include breaking changes. Say so, and tell the user to watch the upgrade guide. Don't present it as stable.
|
|
108
108
|
- **Always guard with `if defined?(Avo::MediaLibrary)`.** The docs wrap every `Avo::MediaLibrary.configure` call this way. Without the guard, an environment where the constant isn't present would raise on boot.
|
|
109
|
-
- **`config.enabled` is an all-or-nothing killswitch.** Flipping it off hides the menu item, blocks the routes, *and* hides the editor icons — for everyone.
|
|
110
|
-
- **`enabled` and `visible` are different levers.** `enabled` = whole feature on/off. `visible` =
|
|
109
|
+
- **`config.enabled` is an all-or-nothing killswitch.** Flipping it off hides the menu item, blocks the routes, *and* hides the editor icons — for everyone. For per-user access use a `config.visible` block.
|
|
110
|
+
- **`enabled` and `visible` are different levers.** `enabled` = whole feature on/off, for everyone. `visible` = who may use it (Boolean or block, evaluated per request). `visible` covers the sidebar item, the `trix` toolbar button, and the routes — so don't reach for it to "tidy up the sidebar" and expect the feature to stay reachable.
|
|
111
111
|
- **A customized menu drops the item.** If `config.main_menu` is defined, the Media Library sidebar item won't appear on its own — re-add it manually with `link_to "Media Library", avo.media_library_index_path`.
|
|
112
112
|
- **`media_library: false` is markdown-only.** `trix` and `rhino` don't support per-field toggling; the killswitch is the only way to remove their buttons. `lexxy` follows its own `attachments_disabled` option.
|
|
113
113
|
- **It's `Avo::MediaLibrary.configure`, not `Avo.configure`.** The enable/visible settings live on their own configuration object. Only the menu `link_to` goes inside the main `Avo.configure` block.
|
|
@@ -119,5 +119,5 @@ After editing, tell the user:
|
|
|
119
119
|
- The file you changed (`config/initializers/avo.rb`) and which block (`Avo::MediaLibrary.configure` and/or `Avo.configure`).
|
|
120
120
|
- What you set: `config.enabled`, `config.visible` (Boolean or block), any `link_to` menu item, and any `media_library: false` on a markdown field.
|
|
121
121
|
- That the feature is **Community-licensed** but in **Alpha**, so breaking changes are possible — watch the upgrade guide.
|
|
122
|
-
- Whether the sidebar item will show, and for whom (if you used a `visible` block).
|
|
122
|
+
- Whether the sidebar item will show, and for whom (if you used a `visible` block) — and that the same block now decides who may reach the Media Library at all.
|
|
123
123
|
- If they customized their menu: remind them the item only appears because you re-added the `link_to`.
|
data/lib/avo/skills/index.md
CHANGED
|
@@ -36,7 +36,7 @@ Each entry is a directory beside this file: `<skill>/SKILL.md`.
|
|
|
36
36
|
| `avo-menu-icons` | Pick the right Tabler icon and apply it to resources. The menu DSL is `avo-menu`'s own skill |
|
|
37
37
|
| `avo-navigation-search` | Per-resource search, breadcrumbs, keyboard shortcuts, the auto-generated sidebar |
|
|
38
38
|
| `avo-custom-ui` | Custom pages, embedded panels, dynamic/nested forms, ejected views, Stimulus, Tailwind |
|
|
39
|
-
| `avo-i18n` | Translate and localize the admin — labels, locale switching, RTL |
|
|
39
|
+
| `avo-i18n` | Translate and localize the admin — labels, scope/card/dashboard keys, which `avo.*` keys are safe to add, locale switching, RTL |
|
|
40
40
|
| `avo-controllers` | Override per-resource CRUD controller hooks and safely extend Avo's ApplicationController |
|
|
41
41
|
| `avo-engine-internals` | `main_app`/`avo` helpers, `Avo::Current`, `ExecutionContext`, reserved names |
|
|
42
42
|
| `avo-media-library` | Central asset browser and a picker inside rich-text editors |
|
data/lib/avo/version.rb
CHANGED
|
@@ -4,6 +4,7 @@ ar:
|
|
|
4
4
|
action_ran_successfully: تم تنفيذ الأمر بنجاح!
|
|
5
5
|
actions: أوامر
|
|
6
6
|
add_filter: إضافة عامل تصفية
|
|
7
|
+
all: الكل
|
|
7
8
|
and_x_other_resources: و %{count} موارد أخرى
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: لون مميز
|
|
@@ -122,6 +123,7 @@ ar:
|
|
|
122
123
|
filter_by: تصفية حسب
|
|
123
124
|
filters: مرشحات
|
|
124
125
|
global_search:
|
|
126
|
+
direct_match: تطابق مباشر
|
|
125
127
|
empty_state:
|
|
126
128
|
no_results_for_query: لم نتمكن من العثور على أي شيء يتطابق مع "%{query}"
|
|
127
129
|
no_results_found: لم يتم العثور على نتائج
|
|
@@ -137,6 +139,8 @@ ar:
|
|
|
137
139
|
select: اختيار
|
|
138
140
|
results:
|
|
139
141
|
count_of_total: "%{count} من %{total}"
|
|
142
|
+
search_results: نتائج البحث
|
|
143
|
+
searching_on: 'البحث في:'
|
|
140
144
|
show_all_results_for: عرض جميع النتائج لـ
|
|
141
145
|
go_back: العودة للخلف
|
|
142
146
|
grid_view: عرض الشبكة
|
|
@@ -4,6 +4,7 @@ de:
|
|
|
4
4
|
action_ran_successfully: Aktion erfolgreich durchgeführt!
|
|
5
5
|
actions: Aktionen
|
|
6
6
|
add_filter: Filter hinzufügen
|
|
7
|
+
all: Alle
|
|
7
8
|
and_x_other_resources: und %{count} weitere Ressourcen
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: Akzentfarbe
|
|
@@ -108,6 +109,7 @@ de:
|
|
|
108
109
|
filter_by: Filtern nach
|
|
109
110
|
filters: Filter
|
|
110
111
|
global_search:
|
|
112
|
+
direct_match: Direkter Treffer
|
|
111
113
|
empty_state:
|
|
112
114
|
no_results_for_query: Wir konnten nichts finden, das "%{query}" entspricht
|
|
113
115
|
no_results_found: Keine Ergebnisse gefunden
|
|
@@ -123,6 +125,8 @@ de:
|
|
|
123
125
|
select: Auswählen
|
|
124
126
|
results:
|
|
125
127
|
count_of_total: "%{count} von %{total}"
|
|
128
|
+
search_results: Suchergebnisse
|
|
129
|
+
searching_on: 'Suche in:'
|
|
126
130
|
show_all_results_for: Alle Ergebnisse für anzeigen
|
|
127
131
|
go_back: Zurück
|
|
128
132
|
grid_view: Rasteransicht
|
|
@@ -4,6 +4,7 @@ en:
|
|
|
4
4
|
action_ran_successfully: Action ran successfully!
|
|
5
5
|
actions: Actions
|
|
6
6
|
add_filter: Add filter
|
|
7
|
+
all: All
|
|
7
8
|
and_x_other_resources: and %{count} other resources
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: Select accent color
|
|
@@ -108,6 +109,7 @@ en:
|
|
|
108
109
|
filter_by: Filter by
|
|
109
110
|
filters: Filters
|
|
110
111
|
global_search:
|
|
112
|
+
direct_match: Direct match
|
|
111
113
|
empty_state:
|
|
112
114
|
no_results_for_query: We couldn't find anything matching "%{query}"
|
|
113
115
|
no_results_found: No results found
|
|
@@ -123,6 +125,8 @@ en:
|
|
|
123
125
|
select: Select
|
|
124
126
|
results:
|
|
125
127
|
count_of_total: "%{count} of %{total}"
|
|
128
|
+
search_results: Search Results
|
|
129
|
+
searching_on: 'Searching on:'
|
|
126
130
|
show_all_results_for: Show all results for
|
|
127
131
|
go_back: Go back
|
|
128
132
|
grid_view: Grid view
|
|
@@ -4,6 +4,7 @@ es:
|
|
|
4
4
|
action_ran_successfully: "¡Acción ejecutada con éxito!"
|
|
5
5
|
actions: Acciones
|
|
6
6
|
add_filter: Añadir filtro
|
|
7
|
+
all: Todo
|
|
7
8
|
and_x_other_resources: y %{count} otros recursos
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: Color de acento
|
|
@@ -110,6 +111,7 @@ es:
|
|
|
110
111
|
filter_by: Filtrar por
|
|
111
112
|
filters: Filtros
|
|
112
113
|
global_search:
|
|
114
|
+
direct_match: Coincidencia directa
|
|
113
115
|
empty_state:
|
|
114
116
|
no_results_for_query: No pudimos encontrar nada que coincida con "%{query}"
|
|
115
117
|
no_results_found: No se encontraron resultados
|
|
@@ -125,6 +127,8 @@ es:
|
|
|
125
127
|
select: Seleccionar
|
|
126
128
|
results:
|
|
127
129
|
count_of_total: "%{count} de %{total}"
|
|
130
|
+
search_results: Resultados de búsqueda
|
|
131
|
+
searching_on: 'Buscando en:'
|
|
128
132
|
show_all_results_for: Mostrar todos los resultados para
|
|
129
133
|
go_back: Volver
|
|
130
134
|
grid_view: Vista en cuardrícula
|
|
@@ -4,6 +4,7 @@ fr:
|
|
|
4
4
|
action_ran_successfully: L'action s'est exécutée avec succès !
|
|
5
5
|
actions: Actions
|
|
6
6
|
add_filter: Ajouter un filtre
|
|
7
|
+
all: Tout
|
|
7
8
|
and_x_other_resources: et %{count} autres ressources
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: Couleur d'accent
|
|
@@ -110,6 +111,7 @@ fr:
|
|
|
110
111
|
filter_by: Filtrer par
|
|
111
112
|
filters: Filtres
|
|
112
113
|
global_search:
|
|
114
|
+
direct_match: Correspondance directe
|
|
113
115
|
empty_state:
|
|
114
116
|
no_results_for_query: Nous n'avons trouvé aucun élément correspondant à "%{query}"
|
|
115
117
|
no_results_found: Aucun résultat trouvé
|
|
@@ -125,6 +127,8 @@ fr:
|
|
|
125
127
|
select: Sélectionner
|
|
126
128
|
results:
|
|
127
129
|
count_of_total: "%{count} sur %{total}"
|
|
130
|
+
search_results: Résultats de recherche
|
|
131
|
+
searching_on: 'Recherche dans :'
|
|
128
132
|
show_all_results_for: Afficher tous les résultats pour
|
|
129
133
|
go_back: Retourner en arrière
|
|
130
134
|
grid_view: Vue grille
|
|
@@ -4,6 +4,7 @@ it:
|
|
|
4
4
|
action_ran_successfully: L'azione è stata eseguita con successo!
|
|
5
5
|
actions: Azioni
|
|
6
6
|
add_filter: Aggiungi filtro
|
|
7
|
+
all: Tutto
|
|
7
8
|
and_x_other_resources: e altri %{count} risorse
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: Colore accento
|
|
@@ -108,6 +109,7 @@ it:
|
|
|
108
109
|
filter_by: Filtra per
|
|
109
110
|
filters: Filtri
|
|
110
111
|
global_search:
|
|
112
|
+
direct_match: Corrispondenza diretta
|
|
111
113
|
empty_state:
|
|
112
114
|
no_results_for_query: Non siamo riusciti a trovare nulla che corrisponda a "%{query}"
|
|
113
115
|
no_results_found: Nessun risultato trovato
|
|
@@ -123,6 +125,8 @@ it:
|
|
|
123
125
|
select: Seleziona
|
|
124
126
|
results:
|
|
125
127
|
count_of_total: "%{count} di %{total}"
|
|
128
|
+
search_results: Risultati della ricerca
|
|
129
|
+
searching_on: 'Ricerca in:'
|
|
126
130
|
show_all_results_for: Mostra tutti i risultati per
|
|
127
131
|
go_back: Torna indietro
|
|
128
132
|
grid_view: Vista griglia
|
|
@@ -4,6 +4,7 @@ ja:
|
|
|
4
4
|
action_ran_successfully: アクションは正常に実行されました!
|
|
5
5
|
actions: アクション
|
|
6
6
|
add_filter: フィルターの追加
|
|
7
|
+
all: すべて
|
|
7
8
|
and_x_other_resources: その他%{count}件のリソース
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: アクセントカラー
|
|
@@ -110,6 +111,7 @@ ja:
|
|
|
110
111
|
filter_by: フィルター条件
|
|
111
112
|
filters: フィルター
|
|
112
113
|
global_search:
|
|
114
|
+
direct_match: 完全一致
|
|
113
115
|
empty_state:
|
|
114
116
|
no_results_for_query: '"%{query}" に一致するものが見つかりませんでした'
|
|
115
117
|
no_results_found: 結果が見つかりませんでした
|
|
@@ -125,6 +127,8 @@ ja:
|
|
|
125
127
|
select: 選択
|
|
126
128
|
results:
|
|
127
129
|
count_of_total: "%{count} / %{total}"
|
|
130
|
+
search_results: 検索結果
|
|
131
|
+
searching_on: '検索対象:'
|
|
128
132
|
show_all_results_for: すべての結果を表示
|
|
129
133
|
go_back: 戻る
|
|
130
134
|
grid_view: グリッドビュー
|
|
@@ -4,6 +4,7 @@ nb:
|
|
|
4
4
|
action_ran_successfully: Suksess!
|
|
5
5
|
actions: Handlinger
|
|
6
6
|
add_filter: Legg til filter
|
|
7
|
+
all: Alle
|
|
7
8
|
and_x_other_resources: og %{count} andre ressurser
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: Aksentfarge
|
|
@@ -110,6 +111,7 @@ nb:
|
|
|
110
111
|
filter_by: Filtrer etter
|
|
111
112
|
filters: Filter
|
|
112
113
|
global_search:
|
|
114
|
+
direct_match: Direkte treff
|
|
113
115
|
empty_state:
|
|
114
116
|
no_results_for_query: Vi kunne ikke finne noe som matcher "%{query}"
|
|
115
117
|
no_results_found: Ingen resultater funnet
|
|
@@ -125,6 +127,8 @@ nb:
|
|
|
125
127
|
select: Velg
|
|
126
128
|
results:
|
|
127
129
|
count_of_total: "%{count} av %{total}"
|
|
130
|
+
search_results: Søkeresultater
|
|
131
|
+
searching_on: 'Søker i:'
|
|
128
132
|
show_all_results_for: Vis alle resultater for
|
|
129
133
|
go_back: Gå tilbake
|
|
130
134
|
grid_view: Grid visning
|
|
@@ -4,6 +4,7 @@ nl:
|
|
|
4
4
|
action_ran_successfully: Actie succesvol uitgevoerd!
|
|
5
5
|
actions: Acties
|
|
6
6
|
add_filter: Filter toevoegen
|
|
7
|
+
all: Alles
|
|
7
8
|
and_x_other_resources: en %{count} andere bronnen
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: Accentkleur
|
|
@@ -108,6 +109,7 @@ nl:
|
|
|
108
109
|
filter_by: Filteren op
|
|
109
110
|
filters: Filters
|
|
110
111
|
global_search:
|
|
112
|
+
direct_match: Directe overeenkomst
|
|
111
113
|
empty_state:
|
|
112
114
|
no_results_for_query: We konden niets vinden dat overeenkomt met "%{query}"
|
|
113
115
|
no_results_found: Geen resultaten gevonden
|
|
@@ -123,6 +125,8 @@ nl:
|
|
|
123
125
|
select: Selecteren
|
|
124
126
|
results:
|
|
125
127
|
count_of_total: "%{count} van %{total}"
|
|
128
|
+
search_results: Zoekresultaten
|
|
129
|
+
searching_on: 'Zoeken in:'
|
|
126
130
|
show_all_results_for: Toon alle resultaten voor
|
|
127
131
|
go_back: Terug
|
|
128
132
|
grid_view: Rasterweergave
|
|
@@ -4,6 +4,7 @@ nn:
|
|
|
4
4
|
action_ran_successfully: Suksess!
|
|
5
5
|
actions: Handlingar
|
|
6
6
|
add_filter: Legg til filter
|
|
7
|
+
all: Alle
|
|
7
8
|
and_x_other_resources: og %{count} andre ressursar
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: Aksentfarge
|
|
@@ -110,6 +111,7 @@ nn:
|
|
|
110
111
|
filter_by: Filtrer etter
|
|
111
112
|
filters: Filter
|
|
112
113
|
global_search:
|
|
114
|
+
direct_match: Direkte treff
|
|
113
115
|
empty_state:
|
|
114
116
|
no_results_for_query: Vi kunne ikke finne noe som matcher "%{query}"
|
|
115
117
|
no_results_found: Ingen resultat funnet
|
|
@@ -125,6 +127,8 @@ nn:
|
|
|
125
127
|
select: Vel
|
|
126
128
|
results:
|
|
127
129
|
count_of_total: "%{count} av %{total}"
|
|
130
|
+
search_results: Søkeresultat
|
|
131
|
+
searching_on: 'Søkjer i:'
|
|
128
132
|
show_all_results_for: Vis alle resultater for
|
|
129
133
|
go_back: Gå tilbake
|
|
130
134
|
grid_view: Gridvisning
|
|
@@ -4,6 +4,7 @@ pl:
|
|
|
4
4
|
action_ran_successfully: Akcja została pomyślnie wykonana!
|
|
5
5
|
actions: Akcje
|
|
6
6
|
add_filter: Dodaj filtr
|
|
7
|
+
all: Wszystko
|
|
7
8
|
and_x_other_resources: i %{count} innych zasobów
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: Kolor akcentu
|
|
@@ -112,6 +113,7 @@ pl:
|
|
|
112
113
|
filter_by: Filtruj według
|
|
113
114
|
filters: Filtry
|
|
114
115
|
global_search:
|
|
116
|
+
direct_match: Bezpośrednie dopasowanie
|
|
115
117
|
empty_state:
|
|
116
118
|
no_results_for_query: Nie mogliśmy znaleźć niczego pasującego do "%{query}"
|
|
117
119
|
no_results_found: Nie znaleziono wyników
|
|
@@ -127,6 +129,8 @@ pl:
|
|
|
127
129
|
select: Wybierz
|
|
128
130
|
results:
|
|
129
131
|
count_of_total: "%{count} z %{total}"
|
|
132
|
+
search_results: Wyniki wyszukiwania
|
|
133
|
+
searching_on: 'Szukanie w:'
|
|
130
134
|
show_all_results_for: Pokaż wszystkie wyniki dla
|
|
131
135
|
go_back: Wróć
|
|
132
136
|
grid_view: Widok siatki
|
|
@@ -4,6 +4,7 @@ pt-BR:
|
|
|
4
4
|
action_ran_successfully: Ação executada com sucesso!
|
|
5
5
|
actions: Ações
|
|
6
6
|
add_filter: Adicionar filtro
|
|
7
|
+
all: Tudo
|
|
7
8
|
and_x_other_resources: e %{count} outros recursos
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: Cor de Acento
|
|
@@ -110,6 +111,7 @@ pt-BR:
|
|
|
110
111
|
filter_by: Filtrar por
|
|
111
112
|
filters: Filtros
|
|
112
113
|
global_search:
|
|
114
|
+
direct_match: Correspondência direta
|
|
113
115
|
empty_state:
|
|
114
116
|
no_results_for_query: Não conseguimos encontrar nada correspondente a "%{query}"
|
|
115
117
|
no_results_found: Nenhum resultado encontrado
|
|
@@ -125,6 +127,8 @@ pt-BR:
|
|
|
125
127
|
select: Selecionar
|
|
126
128
|
results:
|
|
127
129
|
count_of_total: "%{count} de %{total}"
|
|
130
|
+
search_results: Resultados da busca
|
|
131
|
+
searching_on: 'Buscando em:'
|
|
128
132
|
show_all_results_for: Mostrar todos os resultados para
|
|
129
133
|
go_back: Voltar
|
|
130
134
|
grid_view: Visualização em grade
|
|
@@ -4,6 +4,7 @@ pt:
|
|
|
4
4
|
action_ran_successfully: Ação executada com sucesso!
|
|
5
5
|
actions: Ações
|
|
6
6
|
add_filter: Adicionar filtro
|
|
7
|
+
all: Tudo
|
|
7
8
|
and_x_other_resources: e %{count} outros recursos
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: Cor de Acento
|
|
@@ -110,6 +111,7 @@ pt:
|
|
|
110
111
|
filter_by: Filtrar por
|
|
111
112
|
filters: Filtros
|
|
112
113
|
global_search:
|
|
114
|
+
direct_match: Correspondência direta
|
|
113
115
|
empty_state:
|
|
114
116
|
no_results_for_query: Não conseguimos encontrar nada correspondente a "%{query}"
|
|
115
117
|
no_results_found: Nenhum resultado encontrado
|
|
@@ -125,6 +127,8 @@ pt:
|
|
|
125
127
|
select: Selecionar
|
|
126
128
|
results:
|
|
127
129
|
count_of_total: "%{count} de %{total}"
|
|
130
|
+
search_results: Resultados da pesquisa
|
|
131
|
+
searching_on: 'A pesquisar em:'
|
|
128
132
|
show_all_results_for: Mostrar todos os resultados para
|
|
129
133
|
go_back: Voltar
|
|
130
134
|
grid_view: Visualização em grelha
|
|
@@ -4,6 +4,7 @@ ro:
|
|
|
4
4
|
action_ran_successfully: Acțiunea a rulat cu succes!
|
|
5
5
|
actions: Acțiuni
|
|
6
6
|
add_filter: Adăugați filtru
|
|
7
|
+
all: Toate
|
|
7
8
|
and_x_other_resources: plus alte %{count} recorduri
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: Culoare accent
|
|
@@ -113,6 +114,7 @@ ro:
|
|
|
113
114
|
filter_by: Filtează după
|
|
114
115
|
filters: Filtre
|
|
115
116
|
global_search:
|
|
117
|
+
direct_match: Potrivire directă
|
|
116
118
|
empty_state:
|
|
117
119
|
no_results_for_query: Nu am putut găsi nimic care să se potrivească cu "%{query}"
|
|
118
120
|
no_results_found: Nu s-au găsit rezultate
|
|
@@ -128,6 +130,8 @@ ro:
|
|
|
128
130
|
select: Selectează
|
|
129
131
|
results:
|
|
130
132
|
count_of_total: "%{count} din %{total}"
|
|
133
|
+
search_results: Rezultatele căutării
|
|
134
|
+
searching_on: 'Se caută în:'
|
|
131
135
|
show_all_results_for: Arată toate rezultatele pentru
|
|
132
136
|
go_back: Înapoi
|
|
133
137
|
grid_view: Vezi sub formă de grid
|
|
@@ -4,6 +4,7 @@ ru:
|
|
|
4
4
|
action_ran_successfully: Действие успешно выполнено!
|
|
5
5
|
actions: Действия
|
|
6
6
|
add_filter: Добавить фильтр
|
|
7
|
+
all: Все
|
|
7
8
|
and_x_other_resources: и %{count} других ресурсов
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: Цвет акцента
|
|
@@ -112,6 +113,7 @@ ru:
|
|
|
112
113
|
filter_by: Фильтровать по
|
|
113
114
|
filters: Фильтры
|
|
114
115
|
global_search:
|
|
116
|
+
direct_match: Прямое совпадение
|
|
115
117
|
empty_state:
|
|
116
118
|
no_results_for_query: Мы не смогли найти ничего, соответствующего "%{query}"
|
|
117
119
|
no_results_found: Результатов не найдено
|
|
@@ -127,6 +129,8 @@ ru:
|
|
|
127
129
|
select: Выбрать
|
|
128
130
|
results:
|
|
129
131
|
count_of_total: "%{count} из %{total}"
|
|
132
|
+
search_results: Результаты поиска
|
|
133
|
+
searching_on: 'Поиск по:'
|
|
130
134
|
show_all_results_for: Показать все результаты для
|
|
131
135
|
go_back: Назад
|
|
132
136
|
grid_view: Сетка
|
|
@@ -4,6 +4,7 @@ tr:
|
|
|
4
4
|
action_ran_successfully: Eylem başarıyla gerçekleşti!
|
|
5
5
|
actions: Aksiyonlar
|
|
6
6
|
add_filter: Filtre ekle
|
|
7
|
+
all: Tümü
|
|
7
8
|
and_x_other_resources: ve %{count} diğer kaynak
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: Vurgu rengi
|
|
@@ -110,6 +111,7 @@ tr:
|
|
|
110
111
|
filter_by: Tarafından filtre
|
|
111
112
|
filters: Filtreler
|
|
112
113
|
global_search:
|
|
114
|
+
direct_match: Doğrudan eşleşme
|
|
113
115
|
empty_state:
|
|
114
116
|
no_results_for_query: '"%{query}" ile eşleşen hiçbir şey bulamadık'
|
|
115
117
|
no_results_found: Sonuç bulunamadı
|
|
@@ -125,6 +127,8 @@ tr:
|
|
|
125
127
|
select: Seç
|
|
126
128
|
results:
|
|
127
129
|
count_of_total: "%{count} / %{total}"
|
|
130
|
+
search_results: Arama sonuçları
|
|
131
|
+
searching_on: 'Şurada aranıyor:'
|
|
128
132
|
show_all_results_for: Tüm sonuçları göster
|
|
129
133
|
go_back: Geri dön
|
|
130
134
|
grid_view: Grid görünümü
|
|
@@ -4,6 +4,7 @@ ua:
|
|
|
4
4
|
action_ran_successfully: Дія успішно виконана!
|
|
5
5
|
actions: Дії
|
|
6
6
|
add_filter: Додати фільтр
|
|
7
|
+
all: Усе
|
|
7
8
|
and_x_other_resources: і ще %{count} інших ресурсів
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: Колір акценту
|
|
@@ -110,6 +111,7 @@ ua:
|
|
|
110
111
|
filter_by: Фільтрувати за
|
|
111
112
|
filters: Фільтри
|
|
112
113
|
global_search:
|
|
114
|
+
direct_match: Пряме співпадіння
|
|
113
115
|
empty_state:
|
|
114
116
|
no_results_for_query: We couldn't find anything matching "%{query}"
|
|
115
117
|
no_results_found: No results found
|
|
@@ -125,6 +127,8 @@ ua:
|
|
|
125
127
|
select: Вибрати
|
|
126
128
|
results:
|
|
127
129
|
count_of_total: "%{count} of %{total}"
|
|
130
|
+
search_results: Результати пошуку
|
|
131
|
+
searching_on: 'Пошук у:'
|
|
128
132
|
show_all_results_for: Show all results for
|
|
129
133
|
go_back: Назад
|
|
130
134
|
grid_view: Плитка
|
|
@@ -4,6 +4,7 @@ zh-TW:
|
|
|
4
4
|
action_ran_successfully: 操作成功執行!
|
|
5
5
|
actions: 操作
|
|
6
6
|
add_filter: 新增篩選器
|
|
7
|
+
all: 全部
|
|
7
8
|
and_x_other_resources: 和 %{count} 個其他資源
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: 重點顏色
|
|
@@ -108,6 +109,7 @@ zh-TW:
|
|
|
108
109
|
filter_by: 按...篩選
|
|
109
110
|
filters: 篩選器
|
|
110
111
|
global_search:
|
|
112
|
+
direct_match: 精確匹配
|
|
111
113
|
empty_state:
|
|
112
114
|
no_results_for_query: 我們找不到任何與 "%{query}" 匹配的內容
|
|
113
115
|
no_results_found: 未找到結果
|
|
@@ -123,6 +125,8 @@ zh-TW:
|
|
|
123
125
|
select: 選擇
|
|
124
126
|
results:
|
|
125
127
|
count_of_total: "%{count} / %{total}"
|
|
128
|
+
search_results: 搜尋結果
|
|
129
|
+
searching_on: 搜尋範圍:
|
|
126
130
|
show_all_results_for: 顯示所有結果
|
|
127
131
|
go_back: 返回
|
|
128
132
|
grid_view: 網格視圖
|
|
@@ -4,6 +4,7 @@ zh:
|
|
|
4
4
|
action_ran_successfully: 操作成功执行!
|
|
5
5
|
actions: 操作
|
|
6
6
|
add_filter: 添加筛选器
|
|
7
|
+
all: 全部
|
|
7
8
|
and_x_other_resources: 和 %{count} 个其他资源
|
|
8
9
|
appearance:
|
|
9
10
|
accent_picker: 强调色
|
|
@@ -108,6 +109,7 @@ zh:
|
|
|
108
109
|
filter_by: 按...筛选
|
|
109
110
|
filters: 筛选器
|
|
110
111
|
global_search:
|
|
112
|
+
direct_match: 精确匹配
|
|
111
113
|
empty_state:
|
|
112
114
|
no_results_for_query: 我们找不到与 "%{query}" 匹配的任何内容
|
|
113
115
|
no_results_found: 未找到结果
|
|
@@ -123,6 +125,8 @@ zh:
|
|
|
123
125
|
select: 选择
|
|
124
126
|
results:
|
|
125
127
|
count_of_total: "%{count} / %{total}"
|
|
128
|
+
search_results: 搜索结果
|
|
129
|
+
searching_on: 搜索范围:
|
|
126
130
|
show_all_results_for: 显示所有结果
|
|
127
131
|
go_back: 返回
|
|
128
132
|
grid_view: 网格视图
|