i18n_feedback 0.8.2 → 0.8.3
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/README.md +6 -319
- data/lib/i18n_feedback.rb +12 -35
- metadata +14 -62
- data/CHANGELOG.md +0 -191
- data/MIT-LICENSE +0 -21
- data/Rakefile +0 -14
- data/app/controllers/i18n_feedback/application_controller.rb +0 -32
- data/app/controllers/i18n_feedback/suggestions_controller.rb +0 -92
- data/app/helpers/i18n_feedback/tag_helper.rb +0 -19
- data/app/models/i18n_feedback/application_record.rb +0 -7
- data/app/models/i18n_feedback/suggestion.rb +0 -27
- data/app/views/i18n_feedback/suggestions/index.html.erb +0 -77
- data/app/views/layouts/i18n_feedback/application.html.erb +0 -96
- data/config/locales/i18n_feedback.ar.yml +0 -16
- data/config/locales/i18n_feedback.bg.yml +0 -16
- data/config/locales/i18n_feedback.bn.yml +0 -16
- data/config/locales/i18n_feedback.de.yml +0 -16
- data/config/locales/i18n_feedback.el.yml +0 -16
- data/config/locales/i18n_feedback.en.yml +0 -35
- data/config/locales/i18n_feedback.es.yml +0 -16
- data/config/locales/i18n_feedback.fr.yml +0 -16
- data/config/locales/i18n_feedback.hi.yml +0 -16
- data/config/locales/i18n_feedback.hr.yml +0 -16
- data/config/locales/i18n_feedback.id.yml +0 -16
- data/config/locales/i18n_feedback.it.yml +0 -16
- data/config/locales/i18n_feedback.ja.yml +0 -16
- data/config/locales/i18n_feedback.ko.yml +0 -16
- data/config/locales/i18n_feedback.lb.yml +0 -16
- data/config/locales/i18n_feedback.nl.yml +0 -16
- data/config/locales/i18n_feedback.pl.yml +0 -16
- data/config/locales/i18n_feedback.pt.yml +0 -16
- data/config/locales/i18n_feedback.ro.yml +0 -16
- data/config/locales/i18n_feedback.ru.yml +0 -16
- data/config/locales/i18n_feedback.th.yml +0 -16
- data/config/locales/i18n_feedback.tr.yml +0 -16
- data/config/locales/i18n_feedback.uk.yml +0 -16
- data/config/locales/i18n_feedback.ur.yml +0 -16
- data/config/locales/i18n_feedback.vi.yml +0 -16
- data/config/locales/i18n_feedback.zh-CN.yml +0 -16
- data/config/routes.rb +0 -13
- data/lib/generators/i18n_feedback/install/install_generator.rb +0 -40
- data/lib/generators/i18n_feedback/install/templates/create_i18n_feedback_suggestions.rb.tt +0 -22
- data/lib/generators/i18n_feedback/install/templates/initializer.rb +0 -56
- data/lib/i18n_feedback/configuration.rb +0 -91
- data/lib/i18n_feedback/engine.rb +0 -26
- data/lib/i18n_feedback/marking.rb +0 -46
- data/lib/i18n_feedback/middleware.rb +0 -145
- data/lib/i18n_feedback/version.rb +0 -5
- data/lib/i18n_feedback/widget.js +0 -443
- data/lib/i18n_feedback/widget.rb +0 -96
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0d466682f391a59b8b4751f604ff96350c6b8303a039935d8d7f74a0624e8f65
|
|
4
|
+
data.tar.gz: 056cd9b86d9eacb2e68fbb1f56369f3cff265c46034f23f51c046c9eb3cc9bfa
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3b6976dd2c6fa4e64aa5678d7572b7684d3d1b66d7c37d8fabcceab47220a0e2f92bf512eeffdbcd490b456e800df4c8cfdc86ad5f7592325fee02589c3957fe
|
|
7
|
+
data.tar.gz: 2d139080e8f3e9fbf5be9b2c842c4bf63e99897f1eb1b3d1836aa0ab5b8624b874d5309690478399a4bf4af44c6441c1f790b225fcc3455c09c4fd1410137c9c
|
data/README.md
CHANGED
|
@@ -1,325 +1,12 @@
|
|
|
1
|
-
# i18n_feedback
|
|
1
|
+
# i18n_feedback (renamed)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
[](https://rubygems.org/gems/i18n_feedback)
|
|
5
|
-
[](https://github.com/yshmarov/i18n-feedback/actions/workflows/ci.yml)
|
|
6
|
-
[](MIT-LICENSE)
|
|
7
|
-
|
|
8
|
-
In-context translation proofreading for Rails.
|
|
9
|
-
|
|
10
|
-
`i18n_feedback` renders every translated string alongside its i18n key in the
|
|
11
|
-
environments you choose, lets a reviewer click any string in the running app and
|
|
12
|
-
suggest a better wording, and stores those suggestions for a developer to apply.
|
|
13
|
-
It is meant for development and staging, never production.
|
|
14
|
-
|
|
15
|
-

|
|
16
|
-
|
|
17
|
-
<video src="https://github.com/yshmarov/i18n-feedback/raw/main/i18n-feedback-demo-640-high.mp4" controls muted playsinline width="640">
|
|
18
|
-
Your browser can't play this video —
|
|
19
|
-
<a href="https://github.com/yshmarov/i18n-feedback/raw/main/i18n-feedback-demo-640-high.mp4">download it here</a>.
|
|
20
|
-
</video>
|
|
21
|
-
|
|
22
|
-
- **Zero UI dependencies.** The widget is plain JavaScript and styles itself. No
|
|
23
|
-
Tailwind, no daisyUI, no Stimulus, no importmap, no build step.
|
|
24
|
-
- **Zero layout changes.** The widget is injected into HTML responses
|
|
25
|
-
automatically (opt out and place it yourself if you prefer).
|
|
26
|
-
- **Trigger it your way.** Use the built-in floating pill, or hide it and switch
|
|
27
|
-
suggest mode on from your own link (a nav item, a menu, anywhere).
|
|
28
|
-
- **Pluggable gating and attribution.** You decide which environments and which
|
|
29
|
-
users see the tool, and how a suggestion is attributed.
|
|
30
|
-
|
|
31
|
-
## How it works
|
|
32
|
-
|
|
33
|
-
1. In an enabled environment, the I18n backend appends a hidden `⟦some.key⟧`
|
|
34
|
-
marker to each translated string. Markers are only emitted while a reviewer
|
|
35
|
-
has the tool switched on (a cookie), so pages are clean by default.
|
|
36
|
-
2. The browser widget strips every marker out of the DOM on load and remembers
|
|
37
|
-
which key produced each piece of text.
|
|
38
|
-
3. Clicking a string opens a popover showing the current text, any pending
|
|
39
|
-
suggestions, and a field to propose a new wording.
|
|
40
|
-
4. Suggestions are `POST`ed to the mounted engine and stored in the
|
|
41
|
-
`i18n_feedback_suggestions` table for you to review and apply.
|
|
42
|
-
|
|
43
|
-
## Turbo
|
|
44
|
-
|
|
45
|
-
Works with Turbo Drive out of the box. Turbo replaces `<body>` on every visit,
|
|
46
|
-
which would take the pill and the active-mode highlighting with it, so the
|
|
47
|
-
widget registers its document-level listeners once and re-renders on
|
|
48
|
-
`turbo:load`. The pill survives navigation without a full reload.
|
|
49
|
-
|
|
50
|
-
## Requirements
|
|
51
|
-
|
|
52
|
-
- Ruby >= 3.2
|
|
53
|
-
- Rails >= 7.1
|
|
54
|
-
|
|
55
|
-
## Installation
|
|
56
|
-
|
|
57
|
-
Add the gem:
|
|
3
|
+
This gem has been **renamed to [`i18n_proofreading`](https://rubygems.org/gems/i18n_proofreading)**.
|
|
58
4
|
|
|
59
5
|
```ruby
|
|
60
6
|
# Gemfile
|
|
61
|
-
gem "
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
bundle install
|
|
66
|
-
bin/rails generate i18n_feedback:install
|
|
67
|
-
bin/rails db:migrate
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
The generator:
|
|
71
|
-
|
|
72
|
-
- writes `config/initializers/i18n_feedback.rb`,
|
|
73
|
-
- creates the `i18n_feedback_suggestions` migration,
|
|
74
|
-
- mounts the engine in `config/routes.rb`:
|
|
75
|
-
|
|
76
|
-
```ruby
|
|
77
|
-
mount I18nFeedback::Engine => "/i18n_feedback"
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
Boot the app in development and look for the **“Suggest edits”** pill in the
|
|
81
|
-
bottom-left corner. Click it to turn on suggest mode, then click any text to
|
|
82
|
-
propose a fix. Press `Esc` (or the pill) to exit.
|
|
83
|
-
|
|
84
|
-
> The widget reads the CSRF token from `<meta name="csrf-token">`, which
|
|
85
|
-
> `csrf_meta_tags` in your layout already provides in a standard Rails app.
|
|
86
|
-
|
|
87
|
-
## Configuration
|
|
88
|
-
|
|
89
|
-
Everything is optional; the defaults work out of the box in development.
|
|
90
|
-
|
|
91
|
-
```ruby
|
|
92
|
-
# config/initializers/i18n_feedback.rb
|
|
93
|
-
I18nFeedback.configure do |config|
|
|
94
|
-
# Environments the tool is active in.
|
|
95
|
-
config.enabled_environments = %w[development staging]
|
|
96
|
-
|
|
97
|
-
# Extra per-request gate. Return false to hide the tool. Receives the request.
|
|
98
|
-
config.enabled = ->(request) { true }
|
|
99
|
-
|
|
100
|
-
# Who may open the triage dashboard. Independent of the gates above; defaults
|
|
101
|
-
# to development only. Wire it to your own admin check to open it elsewhere.
|
|
102
|
-
config.authorize_admin = ->(request) { Rails.env.development? }
|
|
103
|
-
|
|
104
|
-
# Attribute a suggestion to a user (optional). Return an object responding to
|
|
105
|
-
# #id, or nil. Receives the request.
|
|
106
|
-
config.current_user = ->(request) { nil }
|
|
107
|
-
|
|
108
|
-
# Label shown for the author in the "already suggested" list.
|
|
109
|
-
config.author_label = ->(user) { user.try(:email) }
|
|
110
|
-
|
|
111
|
-
# Inject the widget automatically. Set false to place it yourself.
|
|
112
|
-
config.auto_inject = true
|
|
113
|
-
|
|
114
|
-
# Show the floating "Suggest edits" pill. Set false to drive suggest mode from
|
|
115
|
-
# your own link instead (see below).
|
|
116
|
-
config.show_pill = true
|
|
117
|
-
|
|
118
|
-
# Query parameter that toggles suggest mode.
|
|
119
|
-
config.toggle_param = "i18n_feedback"
|
|
120
|
-
|
|
121
|
-
# Keep in sync with the `mount` in config/routes.rb.
|
|
122
|
-
config.mount_path = "/i18n_feedback"
|
|
123
|
-
|
|
124
|
-
# Per-IP throttle on the submission endpoint, passed to Rails' built-in rate
|
|
125
|
-
# limiter (Rails 7.2+; ignored on 7.1). Set nil to disable.
|
|
126
|
-
config.rate_limit = { to: 30, within: 60 }
|
|
127
|
-
end
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### Toggling suggest mode from your own link
|
|
131
|
-
|
|
132
|
-
Prefer a menu item over the floating pill? You can drive suggest mode from any
|
|
133
|
-
link in your own UI — a nav item, a sidebar entry, a footer — and optionally hide
|
|
134
|
-
the pill (the two can also coexist):
|
|
135
|
-
|
|
136
|
-
```ruby
|
|
137
|
-
config.show_pill = false # optional
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
A one-way "turn it on" link is just the toggle parameter:
|
|
141
|
-
|
|
142
|
-
```erb
|
|
143
|
-
<%= link_to t("i18n_feedback.start"), "?i18n_feedback=true" %>
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
For a single control that flips both ways, read the current state from the
|
|
147
|
-
`i18n_feedback` cookie and point at the opposite state. The gem ships `start`
|
|
148
|
-
and `stop` labels under the `i18n_feedback.*` scope in every bundled language,
|
|
149
|
-
so a localized toggle needs no keys of your own:
|
|
150
|
-
|
|
151
|
-
```erb
|
|
152
|
-
<% if I18nFeedback.available?(request) %>
|
|
153
|
-
<% suggesting = cookies[:i18n_feedback].present? %>
|
|
154
|
-
<%= link_to (suggesting ? t("i18n_feedback.stop") : t("i18n_feedback.start")),
|
|
155
|
-
"?#{I18nFeedback.config.toggle_param}=#{!suggesting}" %>
|
|
156
|
-
<% end %>
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
Good to know:
|
|
160
|
-
|
|
161
|
-
- `?i18n_feedback=true` turns suggest mode on, `false` turns it off. The state is
|
|
162
|
-
stored in the `i18n_feedback` cookie, and the middleware then redirects to the
|
|
163
|
-
same URL without the parameter — so it never sticks in the address bar and the
|
|
164
|
-
cookie stays the single source of truth. `Esc` (or the pill) also exits.
|
|
165
|
-
- These links keep working **while suggest mode is active**. The widget freezes
|
|
166
|
-
ordinary navigation during proofreading (so a stray click can't leave the page
|
|
167
|
-
mid-edit), but any link carrying the toggle parameter is exempt — so a "Disable"
|
|
168
|
-
item in your nav always gets you out.
|
|
169
|
-
- The `i18n_feedback.*` keys are **safe to run through `I18n.t`** — that scope is
|
|
170
|
-
exempt from key-marking, so the tool never flags its own controls as editable.
|
|
171
|
-
Use the bundled `i18n_feedback.start` / `i18n_feedback.stop` labels (or your own
|
|
172
|
-
keys); either way, no plain-literal workaround is needed.
|
|
173
|
-
|
|
174
|
-
### Gating examples
|
|
175
|
-
|
|
176
|
-
```ruby
|
|
177
|
-
# Only signed-in staff (however your app resolves that):
|
|
178
|
-
config.enabled = ->(request) { request.env["warden"]&.user&.staff? }
|
|
179
|
-
|
|
180
|
-
# Behind a feature flag:
|
|
181
|
-
config.enabled = ->(request) { Flipper.enabled?(:i18n_feedback) }
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
### Placing the widget yourself
|
|
185
|
-
|
|
186
|
-
Set `config.auto_inject = false` and drop the helper at the end of your layout:
|
|
187
|
-
|
|
188
|
-
```erb
|
|
189
|
-
<%= i18n_feedback_tag %>
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
It renders nothing unless the tool is available for the request.
|
|
193
|
-
|
|
194
|
-
### Localizing the widget UI
|
|
195
|
-
|
|
196
|
-
The pill and the suggestion popover speak the app's language: every string
|
|
197
|
-
resolves through Rails I18n under the `i18n_feedback.*` scope and follows the
|
|
198
|
-
language the page was rendered in (its `<html lang>`, falling back to
|
|
199
|
-
`I18n.locale`). Translations ship out of the box for English plus 25 more
|
|
200
|
-
languages — Arabic, Bengali, Bulgarian, Chinese (Simplified), Croatian, Dutch,
|
|
201
|
-
French, German, Greek, Hindi, Indonesian, Italian, Japanese, Korean,
|
|
202
|
-
Luxembourgish, Polish, Portuguese, Romanian, Russian, Spanish, Thai, Turkish,
|
|
203
|
-
Ukrainian, Urdu and Vietnamese — so the tool is already localized for most apps.
|
|
204
|
-
RTL locales (Arabic, Urdu, …) render the popover right-to-left automatically.
|
|
205
|
-
|
|
206
|
-
Any key you haven't translated falls back to English, so a partially translated
|
|
207
|
-
locale never leaves a control blank. To add a language, or reword the bundled
|
|
208
|
-
copy, define the keys in your own locale files (yours win over the gem's):
|
|
209
|
-
|
|
210
|
-
```yaml
|
|
211
|
-
# config/locales/fr.yml
|
|
212
|
-
fr:
|
|
213
|
-
i18n_feedback:
|
|
214
|
-
pill: "Proposer des corrections"
|
|
215
|
-
pill_active: "En cours — appuyez pour quitter (Échap)"
|
|
216
|
-
title: "Proposer une correction de traduction"
|
|
217
|
-
current_text: "Texte actuel"
|
|
218
|
-
suggested_text: "Texte proposé"
|
|
219
|
-
comment: "Commentaire"
|
|
220
|
-
comment_placeholder: "Note facultative pour le développeur"
|
|
221
|
-
prior_title: "Déjà proposé (en attente)"
|
|
222
|
-
cancel: "Annuler"
|
|
223
|
-
save: "Envoyer la suggestion"
|
|
224
|
-
error_blank: "Veuillez saisir une suggestion."
|
|
225
|
-
error_save: "Impossible d'enregistrer la suggestion."
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
`config.pill_label` still overrides the pill text with a fixed string if you set
|
|
229
|
-
it; leave it `nil` (the default) to use the localized `i18n_feedback.pill` key.
|
|
230
|
-
|
|
231
|
-
### Light / dark / system appearance
|
|
232
|
-
|
|
233
|
-
The widget follows the reviewer's operating-system appearance via
|
|
234
|
-
`prefers-color-scheme` — no configuration needed. The pill and popover render on a
|
|
235
|
-
dark surface when the system is in dark mode and a light surface otherwise; the
|
|
236
|
-
blue accent stays the same in both.
|
|
237
|
-
|
|
238
|
-
## Reviewing suggestions
|
|
239
|
-
|
|
240
|
-
### Review dashboard
|
|
241
|
-
|
|
242
|
-
Mounted at your `mount_path` (default `/i18n_feedback`), the engine root is a
|
|
243
|
-
built-in **read-only** review board: pending / applied / rejected tabs with
|
|
244
|
-
counts, a per-locale filter, and each suggestion shown as current-vs-proposed
|
|
245
|
-
with its comment and author. It's plain server-rendered HTML with its own
|
|
246
|
-
styling — no host assets or JS framework needed.
|
|
247
|
-
|
|
248
|
-
It is deliberately read-only. The gem never writes to your locale files, so it
|
|
249
|
-
doesn't pretend to: you review the suggestions here, then make the edits in your
|
|
250
|
-
own `config/locales/*.yml`. (A suggestion's `status` still exists on the model
|
|
251
|
-
for your own tracking — set it from the console — and is the groundwork for a
|
|
252
|
-
future "apply to locale file" feature.)
|
|
253
|
-
|
|
254
|
-
It has its own gate, `config.authorize_admin`, **defaulting to development
|
|
255
|
-
only** — so a fresh install never exposes it in production. Point it at your own
|
|
256
|
-
admin check to open it elsewhere:
|
|
257
|
-
|
|
258
|
-
```ruby
|
|
259
|
-
config.authorize_admin = ->(request) { request.env["warden"]&.user&.admin? }
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
The gate is independent of `enabled` / `enabled_environments`: the widget can be
|
|
263
|
-
dev/staging-only while a maintainer still triages from production.
|
|
264
|
-
|
|
265
|
-
### From the console
|
|
266
|
-
|
|
267
|
-
Suggestions are also ordinary records:
|
|
268
|
-
|
|
269
|
-
```ruby
|
|
270
|
-
I18nFeedback::Suggestion.where(status: "pending").newest_first.each do |s|
|
|
271
|
-
puts "#{s.locale} #{s.translation_key}: #{s.old_value.inspect} -> #{s.proposed_value.inspect}"
|
|
272
|
-
end
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
Each row stores `translation_key`, `locale`, `old_value`, `proposed_value`,
|
|
276
|
-
`comment`, `page_url`, `status`, and optional `author_id` / `author_label`.
|
|
277
|
-
|
|
278
|
-
Every suggestion has a `status` — one of `pending`, `applied`, or `rejected`
|
|
279
|
-
(`I18nFeedback::Suggestion::STATUSES`), backed by an Active Record enum. New
|
|
280
|
-
suggestions start `pending`; once you apply a wording to your locale files or
|
|
281
|
-
decide against it, set the status accordingly so the popover stops offering it
|
|
282
|
-
as pending context:
|
|
283
|
-
|
|
284
|
-
```ruby
|
|
285
|
-
suggestion.status_applied! # bang setter
|
|
286
|
-
suggestion.status_applied? # => true
|
|
287
|
-
I18nFeedback::Suggestion.status_pending.newest_first # scope per status
|
|
7
|
+
gem "i18n_proofreading"
|
|
288
8
|
```
|
|
289
9
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
saved `Suggestion` right after it's stored — notify Slack, send an email, open a
|
|
294
|
-
ticket. It runs inline in the request, so keep it fast or hand off to a job:
|
|
295
|
-
|
|
296
|
-
```ruby
|
|
297
|
-
config.on_submit = ->(suggestion) { SuggestionMailer.with(suggestion:).created.deliver_later }
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
## Security
|
|
301
|
-
|
|
302
|
-
- The tool is gated **on the server** for every marker, endpoint, and injection.
|
|
303
|
-
Setting the cookie by hand does nothing outside an enabled environment where
|
|
304
|
-
`config.enabled` returns true.
|
|
305
|
-
- Format and lookup namespaces (`number.*`, `date.*`, `*_html` formats, etc.) are
|
|
306
|
-
never marked, so currency and date formatting are unaffected.
|
|
307
|
-
- The injected widget code carries the request's Content-Security-Policy nonce
|
|
308
|
-
(the same one `ActionDispatch` emits), so it runs under a nonce-based
|
|
309
|
-
`script-src` policy — including `strict-dynamic` — with no configuration. It is
|
|
310
|
-
a no-op when the app sets no CSP nonce. The runtime config is shipped as a
|
|
311
|
-
`<script type="application/json">` block (data, not code), so it needs no nonce
|
|
312
|
-
and stays correct across Turbo visits.
|
|
313
|
-
|
|
314
|
-
## Development
|
|
315
|
-
|
|
316
|
-
```bash
|
|
317
|
-
bin/setup # or: bundle install
|
|
318
|
-
bundle exec rspec
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
Tests run against a dummy Rails app under `spec/dummy`.
|
|
322
|
-
|
|
323
|
-
## License
|
|
324
|
-
|
|
325
|
-
Released under the [MIT License](MIT-LICENSE).
|
|
10
|
+
Installing `i18n_feedback` now just pulls in `i18n_proofreading` and prints a
|
|
11
|
+
deprecation notice. Migration guide:
|
|
12
|
+
https://github.com/yshmarov/i18n_proofreading
|
data/lib/i18n_feedback.rb
CHANGED
|
@@ -1,37 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
require
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
def config
|
|
16
|
-
@config ||= Configuration.new
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def configure
|
|
20
|
-
yield config
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Is the tool available for this request? True only in an enabled environment
|
|
24
|
-
# and when the host's `enabled` predicate passes. Checked on the server for
|
|
25
|
-
# every marker, endpoint, and injection, so the client can never turn it on.
|
|
26
|
-
def available?(request)
|
|
27
|
-
config.environment_enabled? && !!config.enabled.call(request)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# May this request browse and triage the dashboard? Independent of
|
|
31
|
-
# `available?` — the dashboard has its own gate so maintainers can review
|
|
32
|
-
# suggestions from production even where the widget itself is off.
|
|
33
|
-
def admin?(request)
|
|
34
|
-
!!config.authorize_admin.call(request)
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
3
|
+
# i18n_feedback was renamed to i18n_proofreading. This gem is a thin pointer:
|
|
4
|
+
# it loads the new gem and aliases the constant so an existing app still boots,
|
|
5
|
+
# while nudging you to migrate. See https://github.com/yshmarov/i18n_proofreading
|
|
6
|
+
require "i18n_proofreading"
|
|
7
|
+
|
|
8
|
+
I18nFeedback = I18nProofreading unless defined?(I18nFeedback)
|
|
9
|
+
|
|
10
|
+
warn "[i18n_feedback] This gem has been renamed to `i18n_proofreading`. " \
|
|
11
|
+
"Update your Gemfile to `gem \"i18n_proofreading\"` and follow the migration " \
|
|
12
|
+
"notes (module, mount path, locale scope, cookie, and the " \
|
|
13
|
+
"`i18n_feedback_suggestions` -> `i18n_proofreading_suggestions` table): " \
|
|
14
|
+
"https://github.com/yshmarov/i18n_proofreading"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: i18n_feedback
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.8.
|
|
4
|
+
version: 0.8.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Yaroslav Shmarov
|
|
@@ -10,86 +10,39 @@ cert_chain: []
|
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
|
-
name:
|
|
13
|
+
name: i18n_proofreading
|
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
|
15
15
|
requirements:
|
|
16
16
|
- - ">="
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: '
|
|
18
|
+
version: '0.9'
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - ">="
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: '
|
|
26
|
-
description:
|
|
27
|
-
|
|
28
|
-
in development and staging, lets reviewers click any string in the running app
|
|
29
|
-
and propose a better wording, and stores those suggestions for a developer to
|
|
30
|
-
apply. Framework-agnostic: no CSS or JS framework required.
|
|
25
|
+
version: '0.9'
|
|
26
|
+
description: i18n_feedback has been renamed to i18n_proofreading. This release is
|
|
27
|
+
a deprecation pointer that loads i18n_proofreading.
|
|
31
28
|
email:
|
|
32
29
|
- yaroslav.shmarov@clickfunnels.com
|
|
33
30
|
executables: []
|
|
34
31
|
extensions: []
|
|
35
32
|
extra_rdoc_files: []
|
|
36
33
|
files:
|
|
37
|
-
- CHANGELOG.md
|
|
38
|
-
- MIT-LICENSE
|
|
39
34
|
- README.md
|
|
40
|
-
- Rakefile
|
|
41
|
-
- app/controllers/i18n_feedback/application_controller.rb
|
|
42
|
-
- app/controllers/i18n_feedback/suggestions_controller.rb
|
|
43
|
-
- app/helpers/i18n_feedback/tag_helper.rb
|
|
44
|
-
- app/models/i18n_feedback/application_record.rb
|
|
45
|
-
- app/models/i18n_feedback/suggestion.rb
|
|
46
|
-
- app/views/i18n_feedback/suggestions/index.html.erb
|
|
47
|
-
- app/views/layouts/i18n_feedback/application.html.erb
|
|
48
|
-
- config/locales/i18n_feedback.ar.yml
|
|
49
|
-
- config/locales/i18n_feedback.bg.yml
|
|
50
|
-
- config/locales/i18n_feedback.bn.yml
|
|
51
|
-
- config/locales/i18n_feedback.de.yml
|
|
52
|
-
- config/locales/i18n_feedback.el.yml
|
|
53
|
-
- config/locales/i18n_feedback.en.yml
|
|
54
|
-
- config/locales/i18n_feedback.es.yml
|
|
55
|
-
- config/locales/i18n_feedback.fr.yml
|
|
56
|
-
- config/locales/i18n_feedback.hi.yml
|
|
57
|
-
- config/locales/i18n_feedback.hr.yml
|
|
58
|
-
- config/locales/i18n_feedback.id.yml
|
|
59
|
-
- config/locales/i18n_feedback.it.yml
|
|
60
|
-
- config/locales/i18n_feedback.ja.yml
|
|
61
|
-
- config/locales/i18n_feedback.ko.yml
|
|
62
|
-
- config/locales/i18n_feedback.lb.yml
|
|
63
|
-
- config/locales/i18n_feedback.nl.yml
|
|
64
|
-
- config/locales/i18n_feedback.pl.yml
|
|
65
|
-
- config/locales/i18n_feedback.pt.yml
|
|
66
|
-
- config/locales/i18n_feedback.ro.yml
|
|
67
|
-
- config/locales/i18n_feedback.ru.yml
|
|
68
|
-
- config/locales/i18n_feedback.th.yml
|
|
69
|
-
- config/locales/i18n_feedback.tr.yml
|
|
70
|
-
- config/locales/i18n_feedback.uk.yml
|
|
71
|
-
- config/locales/i18n_feedback.ur.yml
|
|
72
|
-
- config/locales/i18n_feedback.vi.yml
|
|
73
|
-
- config/locales/i18n_feedback.zh-CN.yml
|
|
74
|
-
- config/routes.rb
|
|
75
|
-
- lib/generators/i18n_feedback/install/install_generator.rb
|
|
76
|
-
- lib/generators/i18n_feedback/install/templates/create_i18n_feedback_suggestions.rb.tt
|
|
77
|
-
- lib/generators/i18n_feedback/install/templates/initializer.rb
|
|
78
35
|
- lib/i18n_feedback.rb
|
|
79
|
-
|
|
80
|
-
- lib/i18n_feedback/engine.rb
|
|
81
|
-
- lib/i18n_feedback/marking.rb
|
|
82
|
-
- lib/i18n_feedback/middleware.rb
|
|
83
|
-
- lib/i18n_feedback/version.rb
|
|
84
|
-
- lib/i18n_feedback/widget.js
|
|
85
|
-
- lib/i18n_feedback/widget.rb
|
|
86
|
-
homepage: https://github.com/yshmarov/i18n-feedback
|
|
36
|
+
homepage: https://github.com/yshmarov/i18n_proofreading
|
|
87
37
|
licenses:
|
|
88
38
|
- MIT
|
|
89
39
|
metadata:
|
|
90
|
-
source_code_uri: https://github.com/yshmarov/
|
|
91
|
-
changelog_uri: https://github.com/yshmarov/i18n-feedback/blob/main/CHANGELOG.md
|
|
40
|
+
source_code_uri: https://github.com/yshmarov/i18n_proofreading
|
|
92
41
|
rubygems_mfa_required: 'true'
|
|
42
|
+
post_install_message: |
|
|
43
|
+
i18n_feedback has been renamed to i18n_proofreading.
|
|
44
|
+
Update your Gemfile: gem "i18n_proofreading"
|
|
45
|
+
Migration notes: https://github.com/yshmarov/i18n_proofreading
|
|
93
46
|
rdoc_options: []
|
|
94
47
|
require_paths:
|
|
95
48
|
- lib
|
|
@@ -104,8 +57,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
104
57
|
- !ruby/object:Gem::Version
|
|
105
58
|
version: '0'
|
|
106
59
|
requirements: []
|
|
107
|
-
rubygems_version:
|
|
60
|
+
rubygems_version: 4.0.10
|
|
108
61
|
specification_version: 4
|
|
109
|
-
summary:
|
|
110
|
-
suggest a fix.'
|
|
62
|
+
summary: Renamed to i18n_proofreading — install that gem instead.
|
|
111
63
|
test_files: []
|