@shift72/core-template 0.4.2 → 0.4.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.
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
  }