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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/app/assets/builds/avo.base.css +12609 -0
  4. data/app/assets/builds/avo.base.js +166402 -0
  5. data/app/assets/builds/avo.base.js.map +7 -0
  6. data/app/assets/builds/avo.custom.js +6 -0
  7. data/app/assets/builds/avo.custom.js.map +7 -0
  8. data/app/assets/builds/late-registration.js +10 -0
  9. data/app/assets/builds/late-registration.js.map +7 -0
  10. data/app/controllers/avo/media_library_controller.rb +7 -0
  11. data/lib/avo/skills/avo-i18n/SKILL.md +41 -4
  12. data/lib/avo/skills/avo-media-library/SKILL.md +5 -5
  13. data/lib/avo/skills/index.md +1 -1
  14. data/lib/avo/version.rb +1 -1
  15. data/lib/generators/avo/templates/locales/avo.ar.yml +4 -0
  16. data/lib/generators/avo/templates/locales/avo.de.yml +4 -0
  17. data/lib/generators/avo/templates/locales/avo.en.yml +4 -0
  18. data/lib/generators/avo/templates/locales/avo.es.yml +4 -0
  19. data/lib/generators/avo/templates/locales/avo.fr.yml +4 -0
  20. data/lib/generators/avo/templates/locales/avo.it.yml +4 -0
  21. data/lib/generators/avo/templates/locales/avo.ja.yml +4 -0
  22. data/lib/generators/avo/templates/locales/avo.nb.yml +4 -0
  23. data/lib/generators/avo/templates/locales/avo.nl.yml +4 -0
  24. data/lib/generators/avo/templates/locales/avo.nn.yml +4 -0
  25. data/lib/generators/avo/templates/locales/avo.pl.yml +4 -0
  26. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +4 -0
  27. data/lib/generators/avo/templates/locales/avo.pt.yml +4 -0
  28. data/lib/generators/avo/templates/locales/avo.ro.yml +4 -0
  29. data/lib/generators/avo/templates/locales/avo.ru.yml +4 -0
  30. data/lib/generators/avo/templates/locales/avo.tr.yml +4 -0
  31. data/lib/generators/avo/templates/locales/avo.ua.yml +4 -0
  32. data/lib/generators/avo/templates/locales/avo.zh-TW.yml +4 -0
  33. data/lib/generators/avo/templates/locales/avo.zh.yml +4 -0
  34. 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, or show a different label per 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. Set or switch the interface language
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
- ### 8. Right-to-left languages
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 (optional).** By default an enabled Media Library adds a 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` only affects the menu item; it does not disable the feature. (When `enabled` is `false`, `visible` is moot — the killswitch already hides everything.)
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. There is no per-user or per-resource enable; use `config.visible` (a block) if you only want to gate who *sees the menu item*.
110
- - **`enabled` and `visible` are different levers.** `enabled` = whole feature on/off. `visible` = just the sidebar item (Boolean or block). Hiding the item with `visible = false` does not disable uploads or the editor picker.
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`.
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Avo
2
- VERSION = "4.1.6" unless const_defined?(:VERSION)
2
+ VERSION = "4.1.7" unless const_defined?(:VERSION)
3
3
  end
@@ -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: 网格视图