@shift72/core-template 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/kibble.json +2 -2
  3. package/package.json +7 -4
  4. package/scripts/css-local-get.js +34 -0
  5. package/scripts/css-local-put.js +110 -0
  6. package/scripts/language-file-validator.js +16 -2
  7. package/site/ar_LB.all.json +19 -17
  8. package/site/ca_ES.all.json +13 -32
  9. package/site/da_DK.all.json +44 -32
  10. package/site/de_DE.all.json +127 -2
  11. package/site/ee_EE.all.json +87 -22
  12. package/site/el_EL.all.json +86 -17
  13. package/site/en_AU.all.json +24 -23
  14. package/site/es_ES.all.json +125 -2
  15. package/site/es_MX.all.json +162 -2
  16. package/site/fi_FI.all.json +161 -2
  17. package/site/fr_FR.all.json +128 -2
  18. package/site/hr_HR.all.json +61 -4
  19. package/site/hu_HU.all.json +87 -22
  20. package/site/it_IT.all.json +124 -2
  21. package/site/ja_JP.all.json +160 -2
  22. package/site/lt_LT.all.json +47 -14
  23. package/site/nl_BE.all.json +49 -15
  24. package/site/no_NO.all.json +84 -22
  25. package/site/pl_PL.all.json +159 -2
  26. package/site/pt_BR.all.json +21 -32
  27. package/site/pt_PT.all.json +90 -18
  28. package/site/ru_RU.all.json +82 -15
  29. package/site/se_SE.all.json +61 -30
  30. package/site/styles/_awards.scss +6 -6
  31. package/site/styles/_bootstrap4.scss +90 -0
  32. package/site/styles/_buttons.scss +5 -4
  33. package/site/styles/_can-be-watched-button.scss +2 -0
  34. package/site/styles/_card.scss +2 -2
  35. package/site/styles/_carousel.scss +43 -28
  36. package/site/styles/_collections.scss +4 -4
  37. package/site/styles/_cookie-consent.scss +1 -1
  38. package/site/styles/_devices.scss +3 -3
  39. package/site/styles/_footer.scss +6 -6
  40. package/site/styles/_forms.scss +6 -6
  41. package/site/styles/_globals.scss +1 -1
  42. package/site/styles/_icons.scss +2 -2
  43. package/site/styles/_language-selector.scss +2 -2
  44. package/site/styles/_legacy.scss +3 -3
  45. package/site/styles/_meta-detail.scss +44 -24
  46. package/site/styles/_mixins.scss +2 -2
  47. package/site/styles/_nav.scss +40 -40
  48. package/site/styles/_pages.scss +12 -12
  49. package/site/styles/_pin-codes.scss +2 -2
  50. package/site/styles/_plans.scss +1 -1
  51. package/site/styles/_poster.scss +5 -4
  52. package/site/styles/_shift72.scss +22 -22
  53. package/site/styles/_shopping.scss +8 -8
  54. package/site/styles/_slider.scss +4 -10
  55. package/site/styles/_social-media-buttons.scss +20 -20
  56. package/site/styles/_swiper.scss +2 -2
  57. package/site/styles/_variables.scss +107 -82
  58. package/site/styles/_wishlist.scss +2 -2
  59. package/site/styles/main.scss +1 -3
  60. package/site/templates/application/application.jet +13 -1
  61. package/site/templates/bundle/buttons.jet +2 -1
  62. package/site/templates/bundle/item.jet +1 -2
  63. package/site/templates/collection/carousel_item.jet +12 -13
  64. package/site/templates/common/awards/item.jet +1 -1
  65. package/site/templates/film/item.jet +36 -12
  66. package/site/templates/tv/detail.jet +7 -7
  67. package/site/tr_TR.all.json +85 -21
  68. package/site/uk_UA.all.json +47 -34
  69. package/site/zh_TW.all.json +16 -36
  70. package/site/styles/_functions.scss +0 -8
package/CHANGELOG.md CHANGED
@@ -2,6 +2,21 @@
2
2
 
3
3
  ## [Unreleased](https://github.com/shift72/core-template/compare/0.4.2...HEAD)
4
4
 
5
+ ## [0.4.3](https://github.com/shift72/core-template/compare/0.4.2...0.4.3)
6
+
7
+ ### Added
8
+ - Awards categories
9
+ - Floating donate button
10
+ - External custom CSS link in head.
11
+ - Scripts for downloading/uploading custom CSS files for use with local development.
12
+
13
+ ### Changed
14
+ - Replaced various SASS variables with CSS variables.
15
+ - Added workarounds for SASS and Bootstrap functions that don't understand CSS variables.
16
+ - Kibble 0.16.4
17
+ - Split CC and Subtitles
18
+ - Moved engagement icons
19
+
5
20
  ## [0.4.2](https://github.com/shift72/core-template/compare/0.4.1...0.4.2)
6
21
 
7
22
  ### Added
package/kibble.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "core-template",
3
3
  "version": "0.0.1",
4
4
  "siteUrl": "https://abccinemas.screenplus.co",
5
- "builderVersion": "0.15.22",
5
+ "builderVersion": "0.16.4",
6
6
  "defaultLanguage": "en",
7
7
  "languages": {
8
8
  "ar": { "code": "ar_LB", "name": "عربى" },
@@ -107,4 +107,4 @@
107
107
  "pageSize": 0
108
108
  }
109
109
  ]
110
- }
110
+ }
package/package.json CHANGED
@@ -1,15 +1,17 @@
1
1
  {
2
2
  "name": "@shift72/core-template",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "description": "Shift72 core template",
5
5
  "license": "MIT",
6
6
  "scripts": {
7
7
  "start": "npm run init && npm-run-all --parallel css:watch js:watch kibble:watch",
8
- "init": "npm-run-all css js",
8
+ "init": "npm-run-all css css:local:get js",
9
9
  "css": "sass ./site/styles/main.scss ./site/static/styles/main.css --load-path=node_modules",
10
10
  "css:lint": "prettier 'site/styles/*.scss' --write && stylelint ./site/styles/*.scss --fix",
11
11
  "css:watch": "npm run css -- --watch",
12
12
  "css:build": "postcss ./site/static/styles/main.css --use autoprefixer --use cssnano -r",
13
+ "css:local:get": "node scripts/css-local-get.js",
14
+ "css:local:put": "node scripts/css-local-put.js",
13
15
  "js": "rollup -c",
14
16
  "js:lint": "prettier '{scripts,site/static/js}/**/!(modernizr-custom).js' --write && eslint ./site/static/js/*.js ./scripts --fix",
15
17
  "js:watch": "rollup -c -w",
@@ -34,7 +36,7 @@
34
36
  "dependencies": {
35
37
  "@rollup/plugin-buble": "^0.21.3",
36
38
  "autoprefixer": "^7.1.2",
37
- "bootstrap": "^4.0.0",
39
+ "bootstrap": "^4.6.1",
38
40
  "concat": "^1.0.3",
39
41
  "cssnano": "^5.0.8",
40
42
  "del": "^6.0.0",
@@ -45,7 +47,7 @@
45
47
  "postcss-cli": "^9.0.1",
46
48
  "rollup": "^2.23.0",
47
49
  "rollup-plugin-terser": "^6.1.0",
48
- "s72-kibble": "^0.15.22",
50
+ "s72-kibble": "^0.16.4",
49
51
  "sass": "^1.36.0"
50
52
  },
51
53
  "devDependencies": {
@@ -55,6 +57,7 @@
55
57
  "eslint-plugin-compat": "^3.13.0",
56
58
  "eslint-plugin-react": "^7.26.1",
57
59
  "eslint-plugin-react-hooks": "^4.2.0",
60
+ "form-data": "^4.0.0",
58
61
  "prettier": "^2.3.2",
59
62
  "stylelint": "^13.13.1",
60
63
  "stylelint-config-prettier": "^8.0.2",
@@ -0,0 +1,34 @@
1
+ const https = require('https');
2
+ const fs = require('fs');
3
+
4
+ const siteUrl = readJsonValueFromRawData('siteUrl', fs.readFileSync('kibble.json'));
5
+ const file = fs.createWriteStream('site/static/styles/local.css');
6
+
7
+ https.get(`${siteUrl}/services/users/v1/css`, handleFilenameResponse).on('error', handleError);
8
+
9
+ ///////////////////////////////////////////////////////////////////////////////////////////////
10
+
11
+ function readJsonValueFromRawData(key, rawJson) {
12
+ let json = JSON.parse(rawJson);
13
+ return json[key];
14
+ }
15
+
16
+ function handleFilenameResponse(res) {
17
+ res.on('data', d => {
18
+ const filename = readJsonValueFromRawData('css_filename', d);
19
+
20
+ if (filename) {
21
+ https.get(`${siteUrl}/styles/${filename}`, handleFileResponse).on('error', handleError);
22
+ } else {
23
+ console.log('Custom CSS not found');
24
+ }
25
+ });
26
+ }
27
+
28
+ function handleFileResponse(res) {
29
+ res.pipe(file);
30
+ }
31
+
32
+ function handleError(e) {
33
+ console.error(e);
34
+ }
@@ -0,0 +1,110 @@
1
+ const https = require('https');
2
+ const fs = require('fs');
3
+ const FormData = require('form-data');
4
+ const rl = require('readline').createInterface({
5
+ input: process.stdin,
6
+ output: process.stdout,
7
+ });
8
+
9
+ const siteUrl = readJsonValueFromRawData('siteUrl', fs.readFileSync('kibble.json'));
10
+ const url = new URL(siteUrl);
11
+
12
+ rl.question(`Enter Username for ${siteUrl}: `, username => {
13
+ rl.question('Enter Password: ', password => {
14
+ rl.close();
15
+
16
+ return signin(username, password)
17
+ .then(authToken => {
18
+ return uploadCSS(authToken);
19
+ })
20
+ .then(filename => {
21
+ console.log(`CSS file upload success: https://${url.hostname}/styles/${filename}`);
22
+ })
23
+ .catch(handleError);
24
+ });
25
+ });
26
+
27
+ ///////////////////////////////////////////////////////////////////////////////////////////////
28
+
29
+ function uploadCSS(authToken) {
30
+ return new Promise((resolve, reject) => {
31
+ let form = new FormData();
32
+ form.append('file', fs.createReadStream('site/static/styles/local.css'), {
33
+ filename: 'local.css',
34
+ contentType: 'text/css',
35
+ });
36
+
37
+ let headers = form.getHeaders();
38
+ headers['x-auth-token'] = authToken;
39
+
40
+ let options = {
41
+ hostname: url.hostname,
42
+ path: '/services/users/v1/css',
43
+ method: 'PUT',
44
+ headers,
45
+ };
46
+
47
+ const req = https.request(options);
48
+
49
+ form.pipe(req);
50
+ form.on('end', () => {
51
+ req.end();
52
+ });
53
+
54
+ req.on('response', res => {
55
+ if (res.statusCode < 200 || res.statusCode >= 300) {
56
+ return reject(new Error(`statusCode=${res.statusCode}`));
57
+ }
58
+
59
+ res.on('data', d => {
60
+ let filename = readJsonValueFromRawData('css_filename', d);
61
+ return resolve(filename);
62
+ });
63
+ });
64
+
65
+ req.on('error', e => {
66
+ return reject(e);
67
+ });
68
+ });
69
+ }
70
+
71
+ function signin(username, password) {
72
+ return new Promise((resolve, reject) => {
73
+ let options = {
74
+ hostname: url.hostname,
75
+ path: '/services/users/auth/sign_in',
76
+ method: 'POST',
77
+ headers: { 'Content-Type': 'application/json' },
78
+ };
79
+
80
+ const req = https.request(options);
81
+
82
+ req.on('response', res => {
83
+ if (res.statusCode < 200 || res.statusCode >= 300) {
84
+ return reject(new Error(`statusCode=${res.statusCode}`));
85
+ }
86
+
87
+ res.on('data', d => {
88
+ let authToken = readJsonValueFromRawData('auth_token', d);
89
+ return resolve(authToken);
90
+ });
91
+ });
92
+
93
+ req.on('error', e => {
94
+ return reject(e);
95
+ });
96
+
97
+ req.write(JSON.stringify({ user: { email: username, password } }));
98
+
99
+ req.end();
100
+ });
101
+ }
102
+
103
+ function readJsonValueFromRawData(key, rawJson) {
104
+ let json = JSON.parse(rawJson);
105
+ return json[key];
106
+ }
107
+
108
+ function handleError(e) {
109
+ console.error(e);
110
+ }
@@ -10,7 +10,6 @@ const languageFiles = openFiles(languageFilenames);
10
10
  let errors = [];
11
11
 
12
12
  const whitespacePaddedKeys = [
13
- 'accept_invite_page_header',
14
13
  'shopping_info_release_date_title',
15
14
  'shopping_info_available_until_date_title',
16
15
  'shopping_info_rental_period_duration',
@@ -18,7 +17,7 @@ const whitespacePaddedKeys = [
18
17
  'classification_intro',
19
18
  'classification_divider',
20
19
  ];
21
- const emptyKeys = ['classification_outro', 'plan_label_owned'];
20
+ const emptyKeys = ['classification_outro'];
22
21
 
23
22
  languageFilenames.forEach(language => {
24
23
  console.log(`===== TESTING: ${language} =====`);
@@ -39,6 +38,7 @@ languageFilenames.forEach(language => {
39
38
 
40
39
  if (keys.includes(key)) {
41
40
  testKeyNotEnglish(masterFile[key], file[key], key);
41
+ testValueNotKey(file[key], key);
42
42
  }
43
43
  });
44
44
 
@@ -103,3 +103,17 @@ function testKeyNotEnglish(englishValue, translatedValue, key) {
103
103
  errors.push(e);
104
104
  }
105
105
  }
106
+
107
+ function testValueNotKey(translation, key) {
108
+ try {
109
+ assert.ok(translation['zero'] != key);
110
+ assert.ok(translation['one'] != key);
111
+ assert.ok(translation['two'] != key);
112
+ assert.ok(translation['few'] != key);
113
+ assert.ok(translation['many'] != key);
114
+ assert.ok(translation['other'] != key);
115
+ } catch(e) {
116
+ console.error(`${key} - key is value.`);
117
+ errors.push(e);
118
+ }
119
+ }
@@ -348,6 +348,7 @@
348
348
  "meta_detail_studios": { "one": "الاستديو", "other": "الاستوديوهات" },
349
349
  "meta_detail_countries": { "one": "البلد", "other": "البلدان" },
350
350
  "meta_detail_subtitles": { "other": "الترجمة" },
351
+ "meta_detail_captions": { "other": "الترجمة [CC]" },
351
352
  "meta_detail_episodes_title": { "other": "الحلفات" },
352
353
  "meta_detail_bonus_title": { "other": "محتوى إضافي" },
353
354
  "meta_detail_recommendations_title": { "other": "قد يعجبك أيضا" },
@@ -413,7 +414,6 @@
413
414
  "users_gender_diverse": { "other": "مختلف" },
414
415
  "users_gender_other": { "other": "غير محدد" },
415
416
 
416
- "plan_label_owned": { "other": "" },
417
417
 
418
418
  "pricing_quality_hd": { "other": "pricing_quality_hd" },
419
419
  "pricing_quality_sd": { "other": "pricing_quality_sd" },
@@ -433,22 +433,8 @@
433
433
 
434
434
  "shopping_info_ownership_plan": { "other": "shopping_info_ownership_plan" },
435
435
 
436
- "shopping_price_title_plan": { "other": "shopping_price_title_plan" },
437
- "shopping_price_plan_note": { "other": "shopping_price_plan_note" },
438
- "shopping_price_plan_note_interval": { "other": "shopping_price_plan_note_interval" },
439
-
440
- "shopping_enter_card_prompt_plan": { "other": "shopping_enter_card_prompt_plan" },
441
-
442
- "shopping_action_credit": { "other": "shopping_action_credit" },
443
- "shopping_action_plan": { "other": "shopping_action_plan" },
444
-
445
- "shopping_complete_subscription": { "other": "shopping_complete_subscription" },
446
- "shopping_complete_subscription_browse": { "other": "shopping_complete_subscription_browse" },
447
-
448
436
  "shopping_info_rental_period_coming_soon": { "other": "من تاريخ ووقت الإصدار." },
449
- "shopping_info_plan_offer": { "other": "shopping_info_plan_offer" },
450
- "shopping_info_trial_period_offer": { "other": "shopping_info_trial_period_offer" },
451
-
437
+
452
438
  "usersubscriptions_change_payment_method_change": { "other": "usersubscriptions_change_payment_method_change" },
453
439
  "usersubscriptions_change_payment_method_modal_title": { "other": "usersubscriptions_change_payment_method_modal_title" },
454
440
  "usersubscriptions_change_payment_method_modal_submit": { "other": "usersubscriptions_change_payment_method_modal_submit" },
@@ -540,6 +526,7 @@
540
526
  "shopping_action_plan": {
541
527
  "other": "مكتمل"
542
528
  },
529
+ "shopping_action_credit": { "other": "shopping_action_credit" },
543
530
  "shopping_complete_subscription": {
544
531
  "other": "تم شراء اشتراكك بنجاح. أنت الآن مشترك في {{ .Title }} ."
545
532
  },
@@ -590,5 +577,20 @@
590
577
  },
591
578
  "awards_in_competition": {
592
579
  "other": "في المنافسة"
593
- }
580
+ },
581
+ "donate_button_text": {
582
+ "other": "يتبرع"
583
+ },
584
+ "shopping_error_plan_already_owned": { "other": "You already have this plan." },
585
+ "shopping_error_plan_expired": { "other": "This plan is no longer available." },
586
+
587
+ "wcag_aria_label_letterboxd": { "other": "View on Letterboxd" },
588
+
589
+ "header_banner": { "other": "ABC Cinemas – 21st Film Festival, June 1 – 6, 2021" },
590
+ "app_badge_title": { "other": "Download the app to view your purchased content!" },
591
+ "app_badge_ios": { "other": "Download on the App Store" },
592
+ "app_badge_android": { "other": "Get it on Google Play" },
593
+
594
+ "awards_winner_of": { "other": "Winner of" }
595
+
594
596
  }
@@ -147,7 +147,7 @@
147
147
  "social_media_buttons_copied_link": { "other": "S'ha copiat l'enllaç al porta-retalls!" },
148
148
  "social_media_buttons_copy_link": { "other": "Copiar al portapapers" },
149
149
  "accept_invite_page_header": {
150
- "other": "Benvingut"
150
+ "other": "Benvingut "
151
151
  },
152
152
  "acceptinvite_form_invalid_reset_password_token": {
153
153
  "other": "Sembla que ja heu reclamat aquesta invitació, haureu de fer <a href=\"{{.SigninURL}}\">inicia la sessió</a> en canvi. Si heu oblidat la vostra contrasenya, també podeu <a href=\"{{.ForgotPasswordURL}}\">restablir la contrasenya</a>."
@@ -760,6 +760,7 @@
760
760
  "meta_detail_subtitles": {
761
761
  "other": "Subtítols"
762
762
  },
763
+ "meta_detail_captions": { "other": "Subtítols [CC]" },
763
764
  "meta_detail_episodes_title": {
764
765
  "other": "Episodis"
765
766
  },
@@ -917,9 +918,6 @@
917
918
  "users_gender_other": {
918
919
  "other": "Altre"
919
920
  },
920
- "plan_label_owned": {
921
- "other": ""
922
- },
923
921
  "pricing_quality_hd": {
924
922
  "other": "pricing_quality_hd"
925
923
  },
@@ -965,39 +963,12 @@
965
963
  "shopping_info_ownership_plan": {
966
964
  "other": "shopping_info_ownership_plan"
967
965
  },
968
- "shopping_price_title_plan": {
969
- "other": "shopping_price_title_plan"
970
- },
971
- "shopping_price_plan_note": {
972
- "other": "shopping_price_plan_note"
973
- },
974
- "shopping_price_plan_note_interval": {
975
- "other": "shopping_price_plan_note_interval"
976
- },
977
- "shopping_enter_card_prompt_plan": {
978
- "other": "shopping_enter_card_prompt_plan"
979
- },
980
966
  "shopping_action_credit": {
981
967
  "other": "shopping_action_credit"
982
968
  },
983
- "shopping_action_plan": {
984
- "other": "shopping_action_plan"
985
- },
986
- "shopping_complete_subscription": {
987
- "other": "shopping_complete_subscription"
988
- },
989
- "shopping_complete_subscription_browse": {
990
- "other": "shopping_complete_subscription_browse"
991
- },
992
969
  "shopping_info_rental_period_coming_soon": {
993
970
  "other": "des de la data i l'hora de l'alliberament."
994
971
  },
995
- "shopping_info_plan_offer": {
996
- "other": "shopping_info_plan_offer"
997
- },
998
- "shopping_info_trial_period_offer": {
999
- "other": "shopping_info_trial_period_offer"
1000
- },
1001
972
  "usersubscriptions_change_payment_method_change": {
1002
973
  "other": "usersubscriptions_change_payment_method_change"
1003
974
  },
@@ -1258,5 +1229,15 @@
1258
1229
  },
1259
1230
  "awards_in_competition": {
1260
1231
  "other": "En Competició"
1261
- }
1232
+ },
1233
+ "awards_winner_of": {
1234
+ "other": "Guanyador de"
1235
+ },
1236
+ "donate_button_text": {
1237
+ "other": "Donar"
1238
+ },
1239
+ "shopping_error_plan_already_owned": { "other": "You already have this plan." },
1240
+ "shopping_error_plan_expired": { "other": "This plan is no longer available." },
1241
+
1242
+ "wcag_aria_label_letterboxd": { "other": "View on Letterboxd" }
1262
1243
  }
@@ -132,7 +132,7 @@
132
132
  "social_media_buttons_copied_link": { "other": "Link kopieret til udklipsholder!" },
133
133
  "social_media_buttons_copy_link": { "other": "Kopier til udklipsholder" },
134
134
  "accept_invite_page_header": {
135
- "other": "Velkommen"
135
+ "other": "Velkommen "
136
136
  },
137
137
  "acceptinvite_form_invalid_reset_password_token": {
138
138
  "other": "Det ser ud som om du allerede har accepteret denne invitation, du skal derfor <a href=\"signin.html\">logge ind</a> i stedet Hvis du har glemt dit kodeord, kan du også <a href=\"forgotpassword.html\">nulstille dit kodeord</a>."
@@ -725,6 +725,7 @@
725
725
  "meta_detail_subtitles": {
726
726
  "other": "Undertekster"
727
727
  },
728
+ "meta_detail_captions": { "other": "Undertekster [CC]" },
728
729
  "meta_detail_episodes_title": {
729
730
  "other": "Episodes"
730
731
  },
@@ -882,9 +883,6 @@
882
883
  "users_gender_other": {
883
884
  "other": "Andet"
884
885
  },
885
- "plan_label_owned": {
886
- "other": ""
887
- },
888
886
  "pricing_quality_hd": {
889
887
  "other": "pricing_quality_hd"
890
888
  },
@@ -930,39 +928,12 @@
930
928
  "shopping_info_ownership_plan": {
931
929
  "other": "shopping_info_ownership_plan"
932
930
  },
933
- "shopping_price_title_plan": {
934
- "other": "shopping_price_title_plan"
935
- },
936
- "shopping_price_plan_note": {
937
- "other": "shopping_price_plan_note"
938
- },
939
- "shopping_price_plan_note_interval": {
940
- "other": "shopping_price_plan_note_interval"
941
- },
942
- "shopping_enter_card_prompt_plan": {
943
- "other": "shopping_enter_card_prompt_plan"
944
- },
945
931
  "shopping_action_credit": {
946
932
  "other": "shopping_action_credit"
947
933
  },
948
- "shopping_action_plan": {
949
- "other": "shopping_action_plan"
950
- },
951
- "shopping_complete_subscription": {
952
- "other": "shopping_complete_subscription"
953
- },
954
- "shopping_complete_subscription_browse": {
955
- "other": "shopping_complete_subscription_browse"
956
- },
957
934
  "shopping_info_rental_period_coming_soon": {
958
935
  "other": "fra premieredatoen og -tidspunktet."
959
936
  },
960
- "shopping_info_plan_offer": {
961
- "other": "shopping_info_plan_offer"
962
- },
963
- "shopping_info_trial_period_offer": {
964
- "other": "shopping_info_trial_period_offer"
965
- },
966
937
  "usersubscriptions_change_payment_method_change": {
967
938
  "other": "usersubscriptions_change_payment_method_change"
968
939
  },
@@ -1161,5 +1132,46 @@
1161
1132
  },
1162
1133
  "awards_in_competition": {
1163
1134
  "other": "I Konkurrence"
1164
- }
1135
+ },
1136
+ "awards_winner_of": {
1137
+ "other": "Vinder af"
1138
+ },
1139
+ "donate_button_text": {
1140
+ "other": "Doner"
1141
+ },
1142
+
1143
+ "shopping_error_plan_already_owned": { "other": "You already have this plan." },
1144
+ "shopping_error_plan_expired": { "other": "This plan is no longer available." },
1145
+ "shopping_payment_method_header": { "other": "Payment methods" },
1146
+ "shopping_payment_method_credit_card": { "other": "Credit card" },
1147
+ "shopping_payment_method_giropay": { "other": "Giropay" },
1148
+ "shopping_error_stripe_unknown_error": { "other": "Something went wrong with this payment. Please try again later." },
1149
+ "shopping_error_payment_complete_failed": { "other": "The payment was declined. Close this window and try again." },
1150
+
1151
+ "wcag_skip_links_header": { "other": "Accessibility Links" },
1152
+ "wcag_skip_links_content": { "other": "Skip to Content" },
1153
+ "wcag_skip_links_footer": { "other": "Skip to Footer" },
1154
+
1155
+ "wcag_homepage_h1": { "other": "Homepage" },
1156
+ "wcag_carousel_h2": { "other": "Carousel" },
1157
+ "wcag_collections_h2": { "other": "Collections" },
1158
+
1159
+ "wcag_aria_label_footer": { "other": "Footer" },
1160
+ "wcag_aria_label_nav_main": { "other": "Main" },
1161
+ "wcag_aria_label_nav_sub": { "other": "Sub" },
1162
+ "wcag_aria_label_toggle_nav": { "other": "Toggle Navigation" },
1163
+ "wcag_aria_label_bundle_items": { "other": "Bundle Items" },
1164
+ "wcag_aria_label_carousel": { "other": "Carousel" },
1165
+ "wcag_aria_label_page_collection": { "other": "Page Collection" },
1166
+ "wcag_aria_label_collection_list": { "other": "Collection List" },
1167
+ "wcag_aria_label_collection_slider": { "other": "Collection Slider" },
1168
+ "wcag_aria_label_wishlist": { "other": "Wishlist" },
1169
+ "wcag_aria_label_facebook": { "other": "Share on Facebook" },
1170
+ "wcag_aria_label_twitter": { "other": "Share on Twitter" },
1171
+ "wcag_aria_label_linkedin": { "other": "Share on LinkedIn" },
1172
+ "wcag_aria_label_letterboxd": { "other": "View on Letterboxd" },
1173
+
1174
+ "header_banner": { "other": "ABC Cinemas – 21st Film Festival, June 1 – 6, 2021" }
1175
+
1176
+
1165
1177
  }