shopify_app 9.0.3 → 11.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +37 -0
- data/README.md +32 -22
- data/app/assets/javascripts/shopify_app/storage_access.js +1 -1
- data/app/controllers/shopify_app/callback_controller.rb +6 -3
- data/app/controllers/shopify_app/sessions_controller.rb +27 -14
- data/app/views/shopify_app/sessions/enable_cookies.html.erb +1 -0
- data/config/locales/cs.yml +23 -0
- data/config/locales/da.yml +20 -0
- data/config/locales/de.yml +2 -2
- data/config/locales/es.yml +2 -2
- data/config/locales/fi.yml +20 -0
- data/config/locales/fr.yml +3 -3
- data/config/locales/hi.yml +23 -0
- data/config/locales/it.yml +2 -3
- data/config/locales/ja.yml +1 -1
- data/config/locales/ko.yml +19 -0
- data/config/locales/ms.yml +22 -0
- data/config/locales/nb.yml +21 -0
- data/config/locales/nl.yml +7 -7
- data/config/locales/pl.yml +21 -0
- data/config/locales/pt-BR.yml +2 -2
- data/config/locales/pt-PT.yml +22 -0
- data/config/locales/sv.yml +21 -0
- data/config/locales/th.yml +20 -0
- data/config/locales/tr.yml +22 -0
- data/config/locales/zh-CN.yml +2 -2
- data/config/locales/zh-TW.yml +1 -2
- data/lib/generators/shopify_app/add_after_authenticate_job/add_after_authenticate_job_generator.rb +1 -1
- data/lib/generators/shopify_app/install/install_generator.rb +8 -6
- data/lib/generators/shopify_app/install/templates/flash_messages.js +5 -5
- data/lib/generators/shopify_app/install/templates/shopify_app.rb +2 -2
- data/lib/generators/shopify_app/install/templates/user_agent.rb +5 -0
- data/lib/shopify_app/controller_concerns/login_protection.rb +12 -3
- data/lib/shopify_app/version.rb +1 -1
- data/package-lock.json +1144 -1164
- data/package.json +1 -1
- data/shopify_app.gemspec +3 -3
- metadata +26 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f0170c03ef99e998f8f72f402e5030ff5a10bdbb2ab32c7a3256116491942cb
|
4
|
+
data.tar.gz: fdbac9da84bd4154fbbfacbb99b3b2839514c6850a2ec9d118c431e7ac28d160
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d5bbbeee0bd987e50845b1798de6114dc7921c186cfe371addc5530311dbb0d8332123302349e7ac85f711f6fc427f4992cf454622a0542b543a70705c140d5
|
7
|
+
data.tar.gz: d80715be9995c0e9e0f732a269f77f3931794f84fc95689c1103ad785eaa675fd213f6b13af0f6e35bf7dbbfc23ee0c202cd5510ac3851367fe1fd2913cfd184
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,40 @@
|
|
1
|
+
11.0.2
|
2
|
+
-----
|
3
|
+
|
4
|
+
* Lock shopify_api gem dependency to `~> 7.0` from `>= 7.0.0`.
|
5
|
+
* Remove flakey JS Tests
|
6
|
+
* bump sqlite3 development dependency to `~>1.4` from `~> 1.3.6`. [#789](https://github.com/Shopify/shopify_app/pull/789)
|
7
|
+
|
8
|
+
11.0.1
|
9
|
+
-----
|
10
|
+
|
11
|
+
* Add dotenv-rails gem to install generator, so apps fetch credentials from `.env` by default: [#776](https://github.com/Shopify/shopify_app/pull/776)
|
12
|
+
|
13
|
+
11.0.0
|
14
|
+
-----
|
15
|
+
|
16
|
+
* Rename `login_url` method to `login_url_with_optional_shop` to avoid ambiguity with Rails' route helper method of the
|
17
|
+
same name (see [#585](https://github.com/Shopify/shopify_app/pull/585)).
|
18
|
+
|
19
|
+
10.0.0
|
20
|
+
-----
|
21
|
+
|
22
|
+
* Make sure OAuth-related redirects return user to originally requested URL once authenticated
|
23
|
+
* Add/update translations
|
24
|
+
* Update README to clarify nested routes
|
25
|
+
* Remove example app. Users should instead use the generators to scaffold an example app.
|
26
|
+
* Bump required Rails version to `> 5.2.1` to ensure `5.2.1.1` or greater is used. This ensures two things:
|
27
|
+
* Apps are not vulnerable to [CVE-2018-16476](https://nvd.nist.gov/vuln/detail/CVE-2018-16476)
|
28
|
+
* Webhook payloads, from Shopify for API version 2019-07, which are processed in ActiveJob background jobs (the
|
29
|
+
default behaviour of shopify_app's WebhooksController) are compatible, due to how ActiveJob versions prior to
|
30
|
+
5.2.1.1 process GlobalIDs encoded as string in job parameters. This prevents the
|
31
|
+
[exceptions reported previously](https://github.com/Shopify/shopify_app/issues/600).
|
32
|
+
|
33
|
+
9.0.4
|
34
|
+
-----
|
35
|
+
|
36
|
+
* Fix returning to a deep link after authentication [#746](https://github.com/Shopify/shopify_app/pull/746)
|
37
|
+
|
1
38
|
9.0.3
|
2
39
|
-----
|
3
40
|
|
data/README.md
CHANGED
@@ -26,7 +26,6 @@ Table of Contents
|
|
26
26
|
* [App Proxy Controller Generator](#app-proxy-controller-generator)
|
27
27
|
* [Controllers, Routes and Views](#controllers-routes-and-views)
|
28
28
|
* [**Mounting the Engine**](#mounting-the-engine)
|
29
|
-
* [**Managing Api Keys**](#managing-api-keys)
|
30
29
|
* [**WebhooksManager**](#webhooksmanager)
|
31
30
|
* [**ScripttagsManager**](#scripttagsmanager)
|
32
31
|
* [**AfterAuthenticate Job**](#afterauthenticate-job)
|
@@ -45,8 +44,6 @@ Description
|
|
45
44
|
-----------
|
46
45
|
This gem includes a Rails Engine and generators for writing Rails applications using the Shopify API. The Engine provides a SessionsController and all the required code for authenticating with a shop via Oauth (other authentication methods are not supported).
|
47
46
|
|
48
|
-
The [example](https://github.com/Shopify/shopify_app/tree/master/example) directory contains an app that was generated with this gem. It also contains sample code demonstrating the usage of the embedded app sdk.
|
49
|
-
|
50
47
|
*Note: It's recommended to use this on a new Rails project, so that the generator won't overwrite/delete some of your files.*
|
51
48
|
|
52
49
|
|
@@ -106,11 +103,22 @@ Generators
|
|
106
103
|
The default generator will run the `install`, `shop`, and `home_controller` generators. This is the recommended way to start your app.
|
107
104
|
|
108
105
|
```sh
|
109
|
-
$ rails generate shopify_app
|
106
|
+
$ rails generate shopify_app
|
110
107
|
```
|
111
108
|
|
112
109
|
After running the generator, you will need to run `rake db:migrate` to add tables to your database. You can start your app with `bundle exec rails server` and install your app by visiting localhost.
|
113
110
|
|
111
|
+
### API Keys
|
112
|
+
|
113
|
+
The default and install generators have been updated to source Shopify API key and secret from a `.env` file, which you will need to create with the following format:
|
114
|
+
|
115
|
+
```
|
116
|
+
SHOPIFY_API_KEY=your api key
|
117
|
+
SHOPIFY_API_SECRET=your api secret
|
118
|
+
```
|
119
|
+
|
120
|
+
These values can be found on the "App Setup" page in the [Shopify Partners Dashboard][dashboard].
|
121
|
+
|
114
122
|
### Install Generator
|
115
123
|
|
116
124
|
```sh
|
@@ -118,7 +126,7 @@ $ rails generate shopify_app:install
|
|
118
126
|
|
119
127
|
# or optionally with arguments:
|
120
128
|
|
121
|
-
$ rails generate shopify_app:install
|
129
|
+
$ rails generate shopify_app:install
|
122
130
|
```
|
123
131
|
|
124
132
|
Other options include:
|
@@ -207,6 +215,19 @@ provider :shopify,
|
|
207
215
|
callback_path: '/nested/auth/shopify/callback'
|
208
216
|
```
|
209
217
|
|
218
|
+
You may also need to change your `config/routes.rb` to render a view for `/nested`, since this is what will be rendered in the Shopify Admin of any shops that have installed your app. The engine itself doesn't have a view for this, so you'll need something like this:
|
219
|
+
|
220
|
+
```ruby
|
221
|
+
# config/routes.rb
|
222
|
+
Rails.application.routes.draw do
|
223
|
+
root :to => 'something_else#index'
|
224
|
+
get "/nested", to: "home#index"
|
225
|
+
mount ShopifyApp::Engine, at: '/nested'
|
226
|
+
end
|
227
|
+
```
|
228
|
+
|
229
|
+
Finally, note that if you do this, to add your app to a store, you must navigate to `/nested` in order to render the `Enter your shop domain to log in or install this app.` UI.
|
230
|
+
|
210
231
|
### Custom login URL
|
211
232
|
|
212
233
|
While you can customize the login view by creating a `/app/views/shopify_app/sessions/new.html.erb` file, you may also want to customize the URL entirely. You can modify your `shopify_app.rb` initializer to provide a custom `login_url` e.g.:
|
@@ -233,21 +254,6 @@ The current Shopify user will be stored in the rails session at `session[:shopif
|
|
233
254
|
|
234
255
|
This will change the type of token that Shopify returns and it will only be valid for a short time. Read more about `Online access` [here](https://help.shopify.com/api/getting-started/authentication/oauth). Note that this means you won't be able to use this token to respond to Webhooks.
|
235
256
|
|
236
|
-
Managing Api Keys
|
237
|
-
-----------------
|
238
|
-
|
239
|
-
The `install` generator places your Api credentials directly into the shopify_app initializer which is convenient and fine for development but once your app goes into production **your api credentials should not be in source control**. When we develop apps we keep our keys in environment variables so a production shopify_app initializer would look like this:
|
240
|
-
|
241
|
-
```ruby
|
242
|
-
ShopifyApp.configure do |config|
|
243
|
-
config.application_name = 'Your app name' # Optional
|
244
|
-
config.api_key = ENV['SHOPIFY_CLIENT_API_KEY']
|
245
|
-
config.secret = ENV['SHOPIFY_CLIENT_API_SECRET']
|
246
|
-
config.scope = 'read_customers, write_products'
|
247
|
-
config.embedded_app = true
|
248
|
-
end
|
249
|
-
```
|
250
|
-
|
251
257
|
|
252
258
|
WebhooksManager
|
253
259
|
---------------
|
@@ -347,10 +353,12 @@ If your app needs to perform specific actions after the user is authenticated su
|
|
347
353
|
|
348
354
|
```ruby
|
349
355
|
ShopifyApp.configure do |config|
|
350
|
-
config.after_authenticate_job = { job: Shopify::AfterAuthenticateJob }
|
356
|
+
config.after_authenticate_job = { job: "Shopify::AfterAuthenticateJob" }
|
351
357
|
end
|
352
358
|
```
|
353
359
|
|
360
|
+
The job can be configured as either a class or a class name string.
|
361
|
+
|
354
362
|
If you need the job to run synchronously add the `inline` flag:
|
355
363
|
|
356
364
|
```ruby
|
@@ -426,7 +434,7 @@ class ReviewsController < ApplicationController
|
|
426
434
|
end
|
427
435
|
```
|
428
436
|
|
429
|
-
Create your app proxy url in the [Shopify Partners' Dashboard]
|
437
|
+
Create your app proxy url in the [Shopify Partners' Dashboard][dashboard], making sure to point it to `https://your_app_website.com/app_proxy`.
|
430
438
|
![Creating an App Proxy](/images/app-proxy-screenshot.png)
|
431
439
|
|
432
440
|
Troubleshooting
|
@@ -502,3 +510,5 @@ is changed to
|
|
502
510
|
### ShopifyAPI changes
|
503
511
|
|
504
512
|
You will need to also follow the ShopifyAPI [upgrade guide](https://github.com/Shopify/shopify_api/blob/master/README.md#-breaking-change-notice-for-version-700-) to ensure your app is ready to work with api versioning.
|
513
|
+
|
514
|
+
[dashboard]:https://partners.shopify.com
|
@@ -103,7 +103,7 @@
|
|
103
103
|
|
104
104
|
/* ITP 2.0 solution: handles cookie partitioning */
|
105
105
|
StorageAccessHelper.prototype.setUpHelper = function() {
|
106
|
-
return new ITPHelper({redirectUrl: window.shopOrigin + "/admin/apps/" + window.apiKey});
|
106
|
+
return new ITPHelper({redirectUrl: window.shopOrigin + "/admin/apps/" + window.apiKey + window.returnTo});
|
107
107
|
}
|
108
108
|
|
109
109
|
StorageAccessHelper.prototype.setCookieAndRedirect = function() {
|
@@ -15,7 +15,7 @@ module ShopifyApp
|
|
15
15
|
redirect_to return_address
|
16
16
|
else
|
17
17
|
flash[:error] = I18n.t('could_not_log_in')
|
18
|
-
redirect_to
|
18
|
+
redirect_to(login_url_with_optional_shop)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -86,10 +86,13 @@ module ShopifyApp
|
|
86
86
|
|
87
87
|
return unless config && config[:job].present?
|
88
88
|
|
89
|
+
job = config[:job]
|
90
|
+
job = job.constantize if job.is_a?(String)
|
91
|
+
|
89
92
|
if config[:inline] == true
|
90
|
-
|
93
|
+
job.perform_now(shop_domain: session[:shopify_domain])
|
91
94
|
else
|
92
|
-
|
95
|
+
job.perform_later(shop_domain: session[:shopify_domain])
|
93
96
|
end
|
94
97
|
end
|
95
98
|
end
|
@@ -22,14 +22,14 @@ module ShopifyApp
|
|
22
22
|
does_not_have_storage_access_url: top_level_interaction_path(
|
23
23
|
shop: sanitized_shop_name
|
24
24
|
),
|
25
|
-
has_storage_access_url:
|
25
|
+
has_storage_access_url: login_url_with_optional_shop(top_level: true),
|
26
26
|
app_home_url: granted_storage_access_path(shop: sanitized_shop_name),
|
27
27
|
current_shopify_domain: current_shopify_domain,
|
28
28
|
})
|
29
29
|
end
|
30
30
|
|
31
31
|
def top_level_interaction
|
32
|
-
@url =
|
32
|
+
@url = login_url_with_optional_shop(top_level: true)
|
33
33
|
validate_shop
|
34
34
|
end
|
35
35
|
|
@@ -39,13 +39,13 @@ module ShopifyApp
|
|
39
39
|
session['shopify.granted_storage_access'] = true
|
40
40
|
|
41
41
|
params = { shop: @shop }
|
42
|
-
redirect_to
|
42
|
+
redirect_to("#{return_address}?#{params.to_query}")
|
43
43
|
end
|
44
44
|
|
45
45
|
def destroy
|
46
46
|
reset_session
|
47
47
|
flash[:notice] = I18n.t('.logged_out')
|
48
|
-
redirect_to
|
48
|
+
redirect_to(login_url_with_optional_shop)
|
49
49
|
end
|
50
50
|
|
51
51
|
private
|
@@ -54,6 +54,8 @@ module ShopifyApp
|
|
54
54
|
return render_invalid_shop_error unless sanitized_shop_name.present?
|
55
55
|
session['shopify.omniauth_params'] = { shop: sanitized_shop_name }
|
56
56
|
|
57
|
+
session[:return_to] = params[:return_to] if params[:return_to]
|
58
|
+
|
57
59
|
if user_agent_can_partition_cookies
|
58
60
|
authenticate_with_partitioning
|
59
61
|
else
|
@@ -77,7 +79,7 @@ module ShopifyApp
|
|
77
79
|
authenticate_in_context
|
78
80
|
else
|
79
81
|
set_top_level_oauth_cookie
|
80
|
-
|
82
|
+
enable_cookie_access
|
81
83
|
end
|
82
84
|
end
|
83
85
|
|
@@ -96,12 +98,19 @@ module ShopifyApp
|
|
96
98
|
redirect_to return_address
|
97
99
|
end
|
98
100
|
|
101
|
+
def enable_cookie_access
|
102
|
+
fullpage_redirect_to(enable_cookies_path(
|
103
|
+
shop: sanitized_shop_name,
|
104
|
+
return_to: session[:return_to]
|
105
|
+
))
|
106
|
+
end
|
107
|
+
|
99
108
|
def authenticate_in_context
|
100
109
|
redirect_to "#{main_app.root_path}auth/shopify"
|
101
110
|
end
|
102
111
|
|
103
112
|
def authenticate_at_top_level
|
104
|
-
fullpage_redirect_to
|
113
|
+
fullpage_redirect_to(login_url_with_optional_shop(top_level: true))
|
105
114
|
end
|
106
115
|
|
107
116
|
def authenticate_in_context?
|
@@ -119,14 +128,18 @@ module ShopifyApp
|
|
119
128
|
end
|
120
129
|
|
121
130
|
def redirect_to_request_storage_access
|
122
|
-
render
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
131
|
+
render(
|
132
|
+
:request_storage_access,
|
133
|
+
layout: false,
|
134
|
+
locals: {
|
135
|
+
does_not_have_storage_access_url: top_level_interaction_path(
|
136
|
+
shop: sanitized_shop_name
|
137
|
+
),
|
138
|
+
has_storage_access_url: login_url_with_optional_shop(top_level: true),
|
139
|
+
app_home_url: granted_storage_access_path(shop: sanitized_shop_name),
|
140
|
+
current_shopify_domain: current_shopify_domain,
|
141
|
+
}
|
142
|
+
)
|
130
143
|
end
|
131
144
|
end
|
132
145
|
end
|
@@ -17,6 +17,7 @@
|
|
17
17
|
<script>
|
18
18
|
window.apiKey = "<%= ShopifyApp.configuration.api_key %>";
|
19
19
|
window.shopOrigin = "https://<%= @shop %>";
|
20
|
+
window.returnTo = "<%= params[:return_to] %>"
|
20
21
|
</script>
|
21
22
|
|
22
23
|
<%= javascript_include_tag('shopify_app/enable_cookies', crossorigin: 'anonymous', integrity: true) %>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
---
|
2
|
+
cs:
|
3
|
+
logged_out: Odhlášení proběhlo úspěšně
|
4
|
+
could_not_log_in: Nelze se přihlásit do obchodu Shopify
|
5
|
+
invalid_shop_url: Neplatná doména obchodu
|
6
|
+
enable_cookies_heading: Zapnout soubory cookie z aplikace %{app}
|
7
|
+
enable_cookies_body: Pokud chceš v Shopify používat aplikaci %{app}, musíš soubory
|
8
|
+
cookie v tomto prohlížeči povolit ručně.
|
9
|
+
enable_cookies_footer: Soubory cookie umožňují, aby tě aplikace ověřila pomocí dočasného
|
10
|
+
uchování preferencí a osobních údajů. Jejich platnost vyprší po 30 dnech.
|
11
|
+
enable_cookies_action: Povolit soubory cookie
|
12
|
+
top_level_interaction_heading: Tvůj prohlížeč potřebuje ověřit aplikaci %{app}
|
13
|
+
top_level_interaction_body: Tvůj prohlížeč vyžaduje, aby si od tebe aplikace, jako
|
14
|
+
je %{app}, nejdřív vyžádaly přístup k souborům cookie, než je pro tebe Shopify
|
15
|
+
otevře.
|
16
|
+
top_level_interaction_action: Pokračovat
|
17
|
+
request_storage_access_heading: Aplikace %{app} potřebuje získat přístup k souborům
|
18
|
+
cookie
|
19
|
+
request_storage_access_body: Tato aplikace ti umožní ověření prostřednictvím dočasného
|
20
|
+
uchování tvých osobních údajů. Pokud chceš používat tuto aplikaci, klikni na tlačítko
|
21
|
+
Pokračovat a povol soubory cookie.
|
22
|
+
request_storage_access_footer: Platnost souborů cookie vyprší po 30 dnech.
|
23
|
+
request_storage_access_action: Pokračovat
|
@@ -0,0 +1,20 @@
|
|
1
|
+
---
|
2
|
+
da:
|
3
|
+
logged_out: Logget ud
|
4
|
+
could_not_log_in: Kunne ikke logge ind på Shopify-butik
|
5
|
+
invalid_shop_url: Ugyldig butiksdomæne
|
6
|
+
enable_cookies_heading: Aktivér cookies fra %{app}
|
7
|
+
enable_cookies_body: Du skal manuelt aktivere cookies i denne browser for at kunne
|
8
|
+
bruge %{app} i Shopify.
|
9
|
+
enable_cookies_footer: Cookies lader appen godkende dig ved at gemme dine præferencer
|
10
|
+
og personlige oplysninger midlertidigt. De udløber efter 30 dage.
|
11
|
+
enable_cookies_action: Aktivér cookies
|
12
|
+
top_level_interaction_heading: Din browser skal godkende %{app}
|
13
|
+
top_level_interaction_body: Din browser kræver, at apps som f.eks. %{app} spørger
|
14
|
+
dig om adgang til cookies, inden Shopify kan åbne den for dig.
|
15
|
+
top_level_interaction_action: Fortsæt
|
16
|
+
request_storage_access_heading: "%{app} skal have adgang til cookies"
|
17
|
+
request_storage_access_body: Det lader appen godkende dig ved at gemme dine personlige
|
18
|
+
oplysninger midlertidigt. Klik på forsæt, og tillad cookies for at bruge appen.
|
19
|
+
request_storage_access_footer: Cookies udløber efter 30 dage.
|
20
|
+
request_storage_access_action: Fortsæt
|
data/config/locales/de.yml
CHANGED
@@ -11,8 +11,8 @@ de:
|
|
11
11
|
Sie laufen nach 30 Tagen ab.
|
12
12
|
enable_cookies_action: Cookies aktivieren
|
13
13
|
top_level_interaction_heading: Ihr Browser muss %{app} authentifizieren
|
14
|
-
top_level_interaction_body: Ihr Browser verlangt, dass Apps
|
15
|
-
|
14
|
+
top_level_interaction_body: Ihr Browser verlangt, dass Apps wie %{app} Sie um Zugriff
|
15
|
+
auf Cookies bitten, bevor Shopify sie für Sie öffnen kann.
|
16
16
|
top_level_interaction_action: Weiter
|
17
17
|
request_storage_access_heading: "%{app} braucht Zugriff auf Cookies"
|
18
18
|
request_storage_access_body: Damit kann die App Sie authentifizieren, indem Ihre
|
data/config/locales/es.yml
CHANGED
@@ -11,8 +11,8 @@ es:
|
|
11
11
|
de 30 días.
|
12
12
|
enable_cookies_action: Habilitar cookies
|
13
13
|
top_level_interaction_heading: Tu navegador necesita autenticar %{app}
|
14
|
-
top_level_interaction_body: Tu navegador requiere aplicaciones
|
15
|
-
|
14
|
+
top_level_interaction_body: Tu navegador requiere aplicaciones como %{app} para
|
15
|
+
solicitarte acceso a cookies antes de que Shopify pueda abrirlo por ti.
|
16
16
|
top_level_interaction_action: Continuar
|
17
17
|
request_storage_access_heading: "%{app} necesita acceso a las cookies"
|
18
18
|
request_storage_access_body: Esto permite que la aplicación te autentique almacenando
|
@@ -0,0 +1,20 @@
|
|
1
|
+
---
|
2
|
+
fi:
|
3
|
+
logged_out: Olet kirjautunut ulos
|
4
|
+
could_not_log_in: Kirjautuminen Shopify-kauppaan ei onnistunut
|
5
|
+
invalid_shop_url: Virheellinen kaupan verkkotunnus
|
6
|
+
enable_cookies_heading: Ota käyttöön sovelluksen %{app} evästeet
|
7
|
+
enable_cookies_body: Sinun on otettava evästeet käyttöön manuaalisesti tässä selaimessa,
|
8
|
+
jotta voit käyttää sovellusta %{app} Shopifyssa.
|
9
|
+
enable_cookies_footer: Evästeiden avulla sovellus voi todentaa sinut tallentamalla
|
10
|
+
asetuksesi ja henkilötietosi tilapäisesti. Ne vanhenevat 30 päivän kuluttua.
|
11
|
+
enable_cookies_action: Ota evästeet käyttöön
|
12
|
+
top_level_interaction_heading: Selaimesi täytyy todentaa %{app}
|
13
|
+
top_level_interaction_body: Selaimesi vaatii sovelluksia, kuten %{app}, pyytämään
|
14
|
+
sinulta luvan evästeiden käyttöön, ennen kuin Shopify voi avata sovelluksen.
|
15
|
+
top_level_interaction_action: Jatka
|
16
|
+
request_storage_access_heading: "%{app} edellyttää evästeiden käyttöä"
|
17
|
+
request_storage_access_body: Näin sovellus voi todentaa sinut tallentamalla henkilötietosi
|
18
|
+
tilapäisesti. Napsauta Jatka ja salli evästeet sovelluksen käyttämiseksi.
|
19
|
+
request_storage_access_footer: Evästeet vanhenevat 30 päivän kuluttua.
|
20
|
+
request_storage_access_action: Jatka
|
data/config/locales/fr.yml
CHANGED
@@ -11,9 +11,9 @@ fr:
|
|
11
11
|
expirent après 30 jours.
|
12
12
|
enable_cookies_action: Activer les cookies
|
13
13
|
top_level_interaction_heading: Votre navigateur doit s'authentifier %{app}
|
14
|
-
top_level_interaction_body: Votre navigateur nécessite des applications
|
15
|
-
|
16
|
-
|
14
|
+
top_level_interaction_body: Votre navigateur nécessite des applications telles que
|
15
|
+
%{app} pour vous demander l'accès aux cookies avant que Shopify ne puisse l'ouvrir
|
16
|
+
pour vous.
|
17
17
|
top_level_interaction_action: Continuer
|
18
18
|
request_storage_access_heading: "%{app} a besoin d'accéder aux cookies"
|
19
19
|
request_storage_access_body: Cela permet à l'application de vous authentifier en
|
@@ -0,0 +1,23 @@
|
|
1
|
+
---
|
2
|
+
hi:
|
3
|
+
logged_out: सफलतापूर्वक लॉग आउट कर दिया
|
4
|
+
could_not_log_in: Shopify स्टोर में लॉग इन नहीं किया जा सका
|
5
|
+
invalid_shop_url: अमान्य शॉप डोमेन
|
6
|
+
enable_cookies_heading: "%{app} के कुकीज़ सक्षम करें"
|
7
|
+
enable_cookies_body: आपको %{app} का उपयोग Shopify में करने के लिए इस ब्राउज़र में
|
8
|
+
कुकीज़ मैन्युअल रूप से सक्षम करने चाहिए.
|
9
|
+
enable_cookies_footer: कुकीज़ अस्थायी रूप से आपकी वरीयताएं और व्यक्तिगत जानकारी स्टोर
|
10
|
+
कर ऐप को आपको प्रमाणित करने देते हैं. इनकी समय-सीमा 30 दिनों बाद समाप्त हो जाती
|
11
|
+
है.
|
12
|
+
enable_cookies_action: कुकीज़ को सक्षम करें
|
13
|
+
top_level_interaction_heading: आपके ब्राउज़र को %{app} प्रमाणित करने की आवश्यकता
|
14
|
+
है
|
15
|
+
top_level_interaction_body: आपके ब्राउज़र को %{app} जैसे ऐप की ज़रूरत होती है, जो
|
16
|
+
Shopify द्वारा आपके लिए उसे खोलने से पहले कुकीज़ पर पहुंचने करने की अनुमति मांगे.
|
17
|
+
top_level_interaction_action: जारी रखें
|
18
|
+
request_storage_access_heading: "%{app} को कुकीज़ पर पहुंच करने की आवश्यकता है"
|
19
|
+
request_storage_access_body: यह आपकी व्यक्तिगत जानकारी अस्थायी रूप से स्टोर कर ऐप
|
20
|
+
को आपको प्रमाणित करने देता है. जारी रखें पर क्लिक करें और कुकीज़ को ऐप उपयोग करने
|
21
|
+
की अनुमति दें.
|
22
|
+
request_storage_access_footer: कुकीज़ की समय-सीमा 30 दिनों बाद समाप्त हो जाती है.
|
23
|
+
request_storage_access_action: जारी रखें
|
data/config/locales/it.yml
CHANGED
@@ -10,9 +10,8 @@ it:
|
|
10
10
|
temporaneamente le tue preferenze e informazioni personali. Scadono dopo 30 giorni.
|
11
11
|
enable_cookies_action: Abilita i cookie
|
12
12
|
top_level_interaction_heading: Il tuo browser deve autenticare %{app}
|
13
|
-
top_level_interaction_body: Il tuo browser richiede che app
|
14
|
-
|
15
|
-
di Shopify.
|
13
|
+
top_level_interaction_body: Il tuo browser richiede che app come %{app} ti chiedano
|
14
|
+
l'accesso ai cookie prima dell'apertura automatica da parte di Shopify.
|
16
15
|
top_level_interaction_action: Continua
|
17
16
|
request_storage_access_heading: "%{app} deve accedere ai cookie"
|
18
17
|
request_storage_access_body: L'app potrà così autenticarti memorizzando temporaneamente
|