@shift72/core-template 1.3.0 → 1.4.0

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 (61) hide show
  1. package/CHANGELOG.md +25 -1
  2. package/kibble.json +3 -3
  3. package/package.json +2 -2
  4. package/scripts/core-template-version.js +4 -4
  5. package/scripts/css-local-get.js +12 -5
  6. package/scripts/css-local-put.js +3 -3
  7. package/scripts/language-file-validator.js +1 -1
  8. package/scripts/translate.mjs +2 -3
  9. package/site/ar_LB.all.json +83 -10
  10. package/site/ca_ES.all.json +53 -8
  11. package/site/da_DK.all.json +55 -10
  12. package/site/de_DE.all.json +53 -8
  13. package/site/el_EL.all.json +58 -4
  14. package/site/en_AU.all.json +58 -4
  15. package/site/es_ES.all.json +58 -4
  16. package/site/es_MX.all.json +60 -6
  17. package/site/et_ET.all.json +52 -7
  18. package/site/fi_FI.all.json +56 -2
  19. package/site/fr_FR.all.json +59 -5
  20. package/site/hr_HR.all.json +64 -9
  21. package/site/hu_HU.all.json +52 -7
  22. package/site/it_IT.all.json +58 -4
  23. package/site/ja_JP.all.json +50 -0
  24. package/site/lt_LT.all.json +71 -3
  25. package/site/manifest.json.jet +4 -2
  26. package/site/nl_BE.all.json +54 -0
  27. package/site/no_NO.all.json +59 -5
  28. package/site/pl_PL.all.json +71 -3
  29. package/site/plans.html.jet +12 -2
  30. package/site/pt_BR.all.json +58 -4
  31. package/site/pt_PT.all.json +57 -3
  32. package/site/ru_RU.all.json +72 -4
  33. package/site/search.html.jet +3 -1
  34. package/site/sr_SR.all.json +64 -3
  35. package/site/static/js/main.js +1 -0
  36. package/site/static/scripts/main.js.map +1 -1
  37. package/site/styles/_buttons.scss +20 -10
  38. package/site/styles/_carousel.scss +7 -3
  39. package/site/styles/_cookie-consent.scss +1 -0
  40. package/site/styles/_footer.scss +10 -31
  41. package/site/styles/_forms.scss +11 -0
  42. package/site/styles/_meta-detail.scss +26 -28
  43. package/site/styles/_mixins.scss +23 -1
  44. package/site/styles/_nav.scss +49 -65
  45. package/site/styles/_share-modal.scss +12 -7
  46. package/site/styles/_shopping.scss +5 -0
  47. package/site/styles/_typography.scss +30 -22
  48. package/site/styles/_variables.scss +93 -46
  49. package/site/subscriptions.html.jet +1 -1
  50. package/site/templates/application/application.jet +10 -12
  51. package/site/templates/application/brand/logo.jet +11 -0
  52. package/site/templates/application/brand/sponsors.jet +11 -0
  53. package/site/templates/application/footer/brand.jet +3 -1
  54. package/site/templates/application/footer/sponsor-banner.jet +3 -3
  55. package/site/templates/application/head/seo.jet +1 -1
  56. package/site/templates/application/nav/nav.jet +5 -4
  57. package/site/templates/collection/carousel/carousel.jet +4 -1
  58. package/site/templates/collection/carousel/item.jet +3 -1
  59. package/site/tr_TR.all.json +58 -4
  60. package/site/uk_UA.all.json +72 -4
  61. package/site/zh_TW.all.json +52 -2
@@ -4,14 +4,11 @@
4
4
  {{import "./google.jet" }}
5
5
  {{import "./footer/footer.jet" }}
6
6
 
7
- {{CDN := "//cdn.shift72.com/1.3"}}
7
+ {{CDN := "//cdn.shift72.com/latest"}}
8
8
  {*{CDN := "//localhost:3000"}*}
9
9
 
10
- {{CSSFilename := ""}}
11
- {{if isEnabled("self_service_css") && site.CSSFilename != "" }}
12
- {{CSSFilename = site.CSSFilename}}
13
- {{end}}
14
- {*{CSSFilename = "local.css"}*}
10
+ {{CSSFileURL := site.SiteBrand.GetLink("css", "")}}
11
+ {*{CSSFileURL := "/styles/local.css"}*}
15
12
 
16
13
  <!DOCTYPE html>
17
14
  <html lang="{{lang.Code}}">
@@ -34,22 +31,23 @@
34
31
 
35
32
  {{yield font()}}
36
33
  <link rel="stylesheet" href="/styles/main.css">
37
- {{if CSSFilename != "" }}
38
- <link rel="stylesheet" href="/styles/{{CSSFilename}}">
34
+ {{if CSSFileURL != "" }}
35
+ <link rel="stylesheet" href="{{CSSFileURL}}">
39
36
  {{end}}
40
37
 
41
- <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
42
- <link rel="icon" href="/favicon.ico" type="image/x-icon">
38
+ {{faviconURL := site.SiteBrand.GetImage("favicon", "/favicon.ico")}}
39
+ <link rel="shortcut icon" href="{{faviconURL}}" type="image/x-icon">
40
+ <link rel="icon" href="{{faviconURL}}" type="image/x-icon">
43
41
 
44
42
  {{block head()}}
45
43
  {{yield seo()}}
46
44
  {{end}}
47
45
 
48
- <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=default,fetch" defer></script>
46
+ <script src="https://polyfill.io/v3/polyfill.min.js?features=Intl%2Cdefault%2Cfetch" defer></script>
49
47
  <script src="{{CDN}}/s72.core.js" defer></script>
50
48
  <script src="{{CDN}}/s72.ui.js" defer></script>
51
49
 
52
- <script src="/scripts/main.js" defer></script>
50
+ <script src="/scripts/main.js" defer></script>
53
51
 
54
52
  <script src="{{CDN}}/s72.transactional.js" defer></script>
55
53
  <script src="https://js.stripe.com/v3/" defer></script>
@@ -0,0 +1,11 @@
1
+ {{block logo(class="")}}
2
+ {{logo1x := site.SiteBrand.GetImage("logo@1x", "/images/common/logo.png")}}
3
+ {{logo2x := site.SiteBrand.GetImage("logo@2x", "/images/common/logo@2x.png")}}
4
+ {{siteName := site.Config.GetSiteName()}}
5
+
6
+ <img class="{{class}}"
7
+ srcset="{{logo1x}} 300w, {{logo2x}} 600w"
8
+ sizes="(max-width: 768px) 300px, 600px"
9
+ src="{{logo2x}}"
10
+ alt="{{siteName}}">
11
+ {{end}}
@@ -0,0 +1,11 @@
1
+ {{block sponsors(class="")}}
2
+ {{sponsorsXXXS := site.SiteBrand.GetImage("sponsors-xxxs", "/images/common/sponsors-xxxs.png")}}
3
+ {{sponsorsXS := site.SiteBrand.GetImage("sponsors-xs", "/images/common/sponsors-xs.png")}}
4
+ {{sponsorsMD := site.SiteBrand.GetImage("sponsors-md", "/images/common/sponsors-md.png")}}
5
+
6
+ <picture class="{{class}}">
7
+ <source class="sponsor-image" srcset="{{sponsorsMD}}" media="(min-width: 768px)">
8
+ <source class="sponsor-image" srcset="{{sponsorsXS}}" media="(min-width: 475px)">
9
+ <img class="sponsor-image" src="{{sponsorsXXXS}}">
10
+ </picture>
11
+ {{end}}
@@ -1,5 +1,7 @@
1
+ {{import "../brand/logo.jet"}}
2
+
1
3
  {{block footerBrand()}}
2
4
  <a class="footer-brand-link" href="{{routeToPath("/")}}" aria-label="{{site.Config.GetSiteName()}}">
3
- <s72-image class="footer-brand-image" src="/images/common/logo.png" alt="{{site.Config.GetSiteName()}}"></s72-image>
5
+ {{yield logo(class="footer-brand-image")}}
4
6
  </a>
5
7
  {{end}}
@@ -1,9 +1,9 @@
1
+ {{import "../brand/sponsors.jet"}}
2
+
1
3
  {{block sponsorBanner()}}
2
4
  {{if config("show_sponsor_banner") == "true"}}
3
5
  <div class="sponsor-banner">
4
- <s72-image class="sponsors-xxxs" src="/images/common/sponsors-xxxs.png"></s72-image>
5
- <s72-image class="sponsors-xs" src="/images/common/sponsors-xs.png"></s72-image>
6
- <s72-image class="sponsors-md" src="/images/common/sponsors-md.png"></s72-image>
6
+ {{yield sponsors(class="sponsor-picture")}}
7
7
  </div>
8
8
  {{end}}
9
9
  {{end}}
@@ -9,7 +9,7 @@
9
9
  {{end}}
10
10
 
11
11
  {* Set this to be a local file path to have a default SEO sharing image e.g. "/images/common/logo.png" *}
12
- {{seoImage := site.SiteConfig.SiteURL + "/images/common/facebook-image.png"}}
12
+ {{seoImage := site.SiteBrand.GetImage("facebook-image", site.SiteConfig.SiteURL + "/images/common/facebook-image.png")}}
13
13
  {{if isset(.Seo) && len(.Seo.Image) > 0}}
14
14
  {{seoImage = .Seo.Image}}
15
15
  {{end}}
@@ -1,16 +1,17 @@
1
1
  {{import "./user_logged_out.jet"}}
2
2
  {{import "./user_logged_in.jet"}}
3
3
  {{import "./header-banner.jet"}}
4
+ {{import "../brand/logo.jet"}}
4
5
 
5
6
  {{block nav(showSubNav=true)}}
6
7
  <header class="navigation" data-toggle="affix">
7
8
  {{yield headerBanner()}}
8
9
  <div class="navbar-brand-container-tablet">
9
- <a class="navbar-brand" href="{{routeToPath("/")}}">{{site.Config.GetSiteName()}}</a>
10
+ <a class="navbar-brand-logo" href="{{routeToPath("/")}}">{{yield logo()}}</a>
10
11
  </div>
11
12
  <div class="navbar" aria-label="{{i18n("wcag_aria_label_nav_main")}}">
12
13
  <div class="navbar-brand-container">
13
- <a class="navbar-brand" href="{{routeToPath("/")}}">{{site.Config.GetSiteName()}}</a>
14
+ <a class="navbar-brand-logo" href="{{routeToPath("/")}}">{{yield logo()}}</a>
14
15
  </div>
15
16
 
16
17
  {{if config("search_disabled") != "true"}}
@@ -18,8 +19,8 @@
18
19
  <button type="button" class="btn-search-open" aria-label="open search" tabindex="-1">
19
20
  <i class="fa fa-search search-icon"></i>
20
21
  </button>
21
- <input class="form-control form-control-search" type="search" placeholder="{{i18n("search_control_placeholder")}}" name="q" aria-label="{{i18n("search_control_placeholder")}}">
22
- <button class="sr-only" type="submit">{{i18n("search_control_submit")}}</button>
22
+ <input class="form-control form-control-search" type="search" placeholder="{{i18n("nav_search_control_placeholder")}}" name="q" aria-label="{{i18n("nav_search_control_placeholder")}}">
23
+ <button class="sr-only" type="submit">{{i18n("nav_search_control_sr_submit")}}</button>
23
24
  <button type="button" class="btn-search-close" aria-label="close search" tabindex="-1">
24
25
  <i class="fa fa-times"></i>
25
26
  </button>
@@ -8,8 +8,11 @@
8
8
  {{end}}
9
9
  {{items := .Items[0:maxSlides]}}
10
10
 
11
+ {{playSpeed := config("carousel_play_speed")}}
12
+ {{fadeTime := config("carousel_fade_time")}}
13
+
11
14
  {{if len(items) > 0}}
12
- <s72-carousel>
15
+ <s72-carousel play-speed="{{playSpeed}}" fade-time="{{fadeTime}}">
13
16
  <section class="page-collection page-collection-carousel" aria-label="{{i18n("wcag_aria_label_carousel")}}">
14
17
  <h2 class="sr-only">{{i18n("wcag_carousel_h2")}}</h2>
15
18
 
@@ -33,9 +33,11 @@
33
33
  {{yield carouselItemSynopsis(synopsis=item.InnerItem.Tagline)}}
34
34
  {{end}}
35
35
 
36
+ <s72-availability-label data-slug="{{item.Slug}}"></s72-availability-label>
37
+
36
38
  {{yield ctaButtons(itemType=item.ItemType) item.InnerItem}}
37
39
 
38
- <s72-availability-label data-slug="{{item.Slug}}"></s72-availability-label>
40
+
39
41
  </div>
40
42
  </div>
41
43
  {{end}}
@@ -551,10 +551,10 @@
551
551
  "other": "İlginiz için teşekkür ederiz."
552
552
  },
553
553
  "shopping_error_incorrect_cvc": {
554
- "other": "Lütfen geçerli bir CVV girin."
554
+ "other": "Lütfen geçerli bir CVC girin."
555
555
  },
556
556
  "shopping_error_invalid_cvc": {
557
- "other": "Lütfen geçerli bir CVV girin."
557
+ "other": "Lütfen geçerli bir CVC girin."
558
558
  },
559
559
  "shopping_error_incorrect_number": {
560
560
  "other": "Lütfen geçerli bir Kredi Kart Numarası girin."
@@ -631,6 +631,9 @@
631
631
  "shopping_error_payment_intent_authentication_failure": {
632
632
  "other": "Kredi Kartınız reddedildi. Lütfen tekrar deneyin."
633
633
  },
634
+ "shopping_error_card_not_supported": {
635
+ "other": "Kartınız desteklenmiyor."
636
+ },
634
637
  "shopping_complete_rental": {
635
638
  "other": "Başardınız!"
636
639
  },
@@ -980,7 +983,7 @@
980
983
  "other": "Hüküm ve şartları kabul etmelisiniz."
981
984
  },
982
985
  "shopping_error_item_limit_exceeded": {
983
- "other": " Ne yazık ki{{.Title}} tükendi. ."
986
+ "other": " Ne yazık ki{{.Title}} tükendi."
984
987
  },
985
988
  "shopping_card_change": {
986
989
  "other": "Kredi kartı doğru değil? <a href=\"{{.SubscriptionsURL}}\">Kartınızı güncellemek için buraya tıklayın.</a>"
@@ -1005,7 +1008,7 @@
1005
1008
  "other": "Her Ücretli {{.Interval}} sizin sonra {{.Count}} günlük ücretsiz deneme sürümü bitmeden."
1006
1009
  },
1007
1010
  "shopping_price_plan_note_without_trial": {
1008
- "other": "Her {{.Interval}} ."
1011
+ "other": "Her {{.Interval}}."
1009
1012
  },
1010
1013
  "shopping_price_plan_note_interval": {
1011
1014
  "one": "{{.Interval}}",
@@ -1358,5 +1361,56 @@
1358
1361
  },
1359
1362
  "stripe_card_not_supported": {
1360
1363
  "other": "Kartınız desteklenmiyor."
1364
+ },
1365
+ "nav_search_control_placeholder": {
1366
+ "other": "Arama"
1367
+ },
1368
+ "nav_search_control_sr_submit": {
1369
+ "other": "Aramayı gönder"
1370
+ },
1371
+ "shopping_info_plan_interval": {
1372
+ "one": "{{.Interval}} otomatik olarak yeniler",
1373
+ "other": "Otomatik olarak her yeniler {{.Count}} {{.Interval}}"
1374
+ },
1375
+ "shopping_info_trial_period": {
1376
+ "one": "24 saatlik ücretsiz denemenizi şimdi deneyin!",
1377
+ "other": "Ücretsiz {{.Count}} günlük denemenizi deneyin!"
1378
+ },
1379
+ "usersubscriptions_page_header_seo": {
1380
+ "other": "Abonelikler ve Faturalandırma"
1381
+ },
1382
+ "usersubscriptions_subscription_status_past_due": {
1383
+ "other": "vadesi geçmiş"
1384
+ },
1385
+ "usersubscriptions_subscription_status_unpaid": {
1386
+ "other": "ödenmemiş"
1387
+ },
1388
+ "usersubscriptions_subscription_status_cancelled": {
1389
+ "other": "İptal edildi"
1390
+ },
1391
+ "usersubscriptions_subscription_status_cancelling": {
1392
+ "other": "İptal"
1393
+ },
1394
+ "interval_day": {
1395
+ "one": "gün",
1396
+ "other": "günler"
1397
+ },
1398
+ "interval_week": {
1399
+ "one": "hafta",
1400
+ "other": "haftalar"
1401
+ },
1402
+ "interval_month": {
1403
+ "one": "ay",
1404
+ "other": "aylar"
1405
+ },
1406
+ "interval_year": {
1407
+ "one": "yıl",
1408
+ "other": "yıllar"
1409
+ },
1410
+ "shopping_error_processing_error": {
1411
+ "other": "Kartınız işlenirken bir hata oluştu. Daha sonra veya farklı bir ödeme yöntemiyle tekrar deneyin."
1412
+ },
1413
+ "shopping_error_invalid_session_token": {
1414
+ "other": "Alışveriş oturumunun süresi doldu, lütfen tekrar deneyin."
1361
1415
  }
1362
1416
  }
@@ -615,10 +615,10 @@
615
615
  "other": "Сталася помилка."
616
616
  },
617
617
  "shopping_error_incorrect_cvc": {
618
- "other": "Будь ласка, введіть дійсний CVV."
618
+ "other": "Будь ласка, введіть дійсний CVC."
619
619
  },
620
620
  "shopping_error_invalid_cvc": {
621
- "other": "Будь ласка, введіть дійсний CVV."
621
+ "other": "Будь ласка, введіть дійсний CVC."
622
622
  },
623
623
  "shopping_error_incorrect_number": {
624
624
  "other": "Будь ласка, введіть дійсний номер банківської картки."
@@ -695,6 +695,9 @@
695
695
  "shopping_error_payment_intent_authentication_failure": {
696
696
  "other": "Банківську картку відхилено. Спробуйте ще раз."
697
697
  },
698
+ "shopping_error_card_not_supported": {
699
+ "other": "Ваша картка не підтримується."
700
+ },
698
701
  "shopping_complete_rental": {
699
702
  "other": "Успішно!"
700
703
  },
@@ -1125,7 +1128,7 @@
1125
1128
  "other": "Заряджені кожен {{.Interval}} після вашого {{.Count}} дня закінчується безкоштовно суд."
1126
1129
  },
1127
1130
  "shopping_price_plan_note_without_trial": {
1128
- "other": "Стягується через кожний {{.Interval}} ."
1131
+ "other": "Стягується через кожний {{.Interval}}."
1129
1132
  },
1130
1133
  "shopping_price_plan_note_interval": {
1131
1134
  "one": "{{.Interval}}",
@@ -1154,7 +1157,9 @@
1154
1157
  },
1155
1158
  "shopping_info_trial_period_offer": {
1156
1159
  "one": "Спробуйте безкоштовну 24-годинну пробну версію зараз!",
1157
- "other": "Спробуйте безкоштовну пробну версію {{.Count}}"
1160
+ "few": "Спробуйте {{.Count}}-денну безкоштовну пробну версію!",
1161
+ "many": "Спробуйте {{.Count}}-денну безкоштовну пробну версію!",
1162
+ "other": "Спробуйте {{.Count}}-денну безкоштовну пробну версію!"
1158
1163
  },
1159
1164
  "plans_page_header": {
1160
1165
  "other": "Доступні плани"
@@ -1398,5 +1403,68 @@
1398
1403
  },
1399
1404
  "stripe_card_not_supported": {
1400
1405
  "other": "Ваша картка не підтримується."
1406
+ },
1407
+ "nav_search_control_placeholder": {
1408
+ "other": "Пошук"
1409
+ },
1410
+ "nav_search_control_sr_submit": {
1411
+ "other": "Шукати"
1412
+ },
1413
+ "shopping_info_plan_interval": {
1414
+ "one": "Автоматично поновлюється через кожний {{.Interval}}",
1415
+ "few": "Автоматично оновлює кожні {{.Count}} {{.Interval}} сек",
1416
+ "many": "Автоматично оновлює кожні {{.Count}} {{.Interval}} сек",
1417
+ "other": "Автоматично оновлює кожні {{.Count}} {{.Interval}} сек"
1418
+ },
1419
+ "shopping_info_trial_period": {
1420
+ "one": "Спробуйте безкоштовну 24-годинну пробну версію зараз!",
1421
+ "few": "Спробуйте {{.Count}}-денну безкоштовну пробну версію!",
1422
+ "many": "Спробуйте {{.Count}}-денну безкоштовну пробну версію!",
1423
+ "other": "Спробуйте {{.Count}}-денну безкоштовну пробну версію!"
1424
+ },
1425
+ "usersubscriptions_page_header_seo": {
1426
+ "other": "Підписки та виставлення рахунків"
1427
+ },
1428
+ "usersubscriptions_subscription_status_past_due": {
1429
+ "other": "Прострочено"
1430
+ },
1431
+ "usersubscriptions_subscription_status_unpaid": {
1432
+ "other": "Неоплачений"
1433
+ },
1434
+ "usersubscriptions_subscription_status_cancelled": {
1435
+ "other": "Скасовано"
1436
+ },
1437
+ "usersubscriptions_subscription_status_cancelling": {
1438
+ "other": "Скасування"
1439
+ },
1440
+ "interval_day": {
1441
+ "one": "день",
1442
+ "few": "днів",
1443
+ "many": "днів",
1444
+ "other": "днів"
1445
+ },
1446
+ "interval_week": {
1447
+ "one": "тиждень",
1448
+ "few": "тижнів",
1449
+ "many": "тижнів",
1450
+ "other": "тижнів"
1451
+ },
1452
+ "interval_month": {
1453
+ "one": "місяць",
1454
+ "few": "місяців",
1455
+ "many": "місяців",
1456
+ "other": "місяців"
1457
+ },
1458
+ "interval_year": {
1459
+ "one": "рік",
1460
+ "few": "років",
1461
+ "many": "років",
1462
+ "other": "років"
1463
+ },
1464
+ "shopping_error_processing_error": {
1465
+ "other": "Під час обробки вашої картки сталася помилка. Спробуйте пізніше або іншим способом оплати."
1466
+ },
1467
+ "shopping_error_invalid_session_token": {
1468
+ "other": "Сеанс покупки закінчився, повторіть спробу."
1401
1469
  }
1402
1470
  }
@@ -605,10 +605,10 @@
605
605
  "other": "發生錯誤"
606
606
  },
607
607
  "shopping_error_incorrect_cvc": {
608
- "other": "請輸入有效的CVV"
608
+ "other": "請輸入有效的CVC"
609
609
  },
610
610
  "shopping_error_invalid_cvc": {
611
- "other": "請輸入有效的CVV"
611
+ "other": "請輸入有效的CVC"
612
612
  },
613
613
  "shopping_error_incorrect_number": {
614
614
  "other": "請輸入有效的信用卡卡號"
@@ -685,6 +685,9 @@
685
685
  "shopping_error_payment_intent_authentication_failure": {
686
686
  "other": "輸入的信用卡遭拒絕。請再試一次。"
687
687
  },
688
+ "shopping_error_card_not_supported": {
689
+ "other": "不支持您的卡。"
690
+ },
688
691
  "shopping_complete_rental": {
689
692
  "other": "付費成功!"
690
693
  },
@@ -1352,5 +1355,52 @@
1352
1355
  },
1353
1356
  "stripe_card_not_supported": {
1354
1357
  "other": "不支持您的卡。"
1358
+ },
1359
+ "nav_search_control_placeholder": {
1360
+ "other": "關鍵字搜尋"
1361
+ },
1362
+ "nav_search_control_sr_submit": {
1363
+ "other": "送出"
1364
+ },
1365
+ "shopping_info_plan_interval": {
1366
+ "one": "{{.Interval}}自動更新",
1367
+ "other": "自動更新每個{{.Count}} {{.Interval}}"
1368
+ },
1369
+ "shopping_info_trial_period": {
1370
+ "one": "立即試用您的 24 小時免費試用版!",
1371
+ "other": "免費{{.Count}}天!"
1372
+ },
1373
+ "usersubscriptions_page_header_seo": {
1374
+ "other": "订阅和计费"
1375
+ },
1376
+ "usersubscriptions_subscription_status_past_due": {
1377
+ "other": "逾期"
1378
+ },
1379
+ "usersubscriptions_subscription_status_unpaid": {
1380
+ "other": "未付"
1381
+ },
1382
+ "usersubscriptions_subscription_status_cancelled": {
1383
+ "other": "取消"
1384
+ },
1385
+ "usersubscriptions_subscription_status_cancelling": {
1386
+ "other": "取消"
1387
+ },
1388
+ "interval_day": {
1389
+ "other": "天"
1390
+ },
1391
+ "interval_week": {
1392
+ "other": "週"
1393
+ },
1394
+ "interval_month": {
1395
+ "other": "月"
1396
+ },
1397
+ "interval_year": {
1398
+ "other": "年"
1399
+ },
1400
+ "shopping_error_processing_error": {
1401
+ "other": "處理您的卡時發生錯誤。請稍後重試或使用其他付款方式。"
1402
+ },
1403
+ "shopping_error_invalid_session_token": {
1404
+ "other": "購物會話已過期,請重試。"
1355
1405
  }
1356
1406
  }