@dwp/govuk-casa 9.4.5 → 9.5.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.
- package/dist/assets/css/casa.css +1 -1
- package/dist/assets/css/casa.css.map +1 -1
- package/dist/lib/configure.js +1 -0
- package/dist/lib/configure.js.map +1 -1
- package/dist/middleware/i18n.d.ts +3 -1
- package/dist/middleware/i18n.js +3 -2
- package/dist/middleware/i18n.js.map +1 -1
- package/dist/middleware/pre.js +1 -1
- package/dist/middleware/pre.js.map +1 -1
- package/dist/routes/static.js +1 -1
- package/dist/routes/static.js.map +1 -1
- package/locales/cy/common.json +30 -0
- package/locales/en/common.json +30 -0
- package/package.json +26 -26
- package/src/lib/configure.js +1 -0
- package/src/middleware/i18n.js +3 -1
- package/src/middleware/pre.js +1 -1
- package/src/routes/static.js +1 -1
- package/views/casa/components/character-count/README.md +62 -0
- package/views/casa/components/character-count/template.njk +34 -0
package/dist/lib/configure.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/lib/configure.js"],"names":[],"mappings":";;;;;AAgDA,
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/lib/configure.js"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @param {object} opts Options
|
|
5
5
|
* @param {string[]} [opts.languages] Language codes
|
|
6
|
+
* @param {string[]} [opts.fallbackLng] Fallback language
|
|
6
7
|
* @param {string[]} [opts.directories] Source translations directories
|
|
7
8
|
* @returns {RequestHandler[]} Middleware functions
|
|
8
9
|
*/
|
|
9
|
-
export default function i18nMiddleware({ languages, directories, }: {
|
|
10
|
+
export default function i18nMiddleware({ languages, fallbackLng, directories, }: {
|
|
10
11
|
languages?: string[] | undefined;
|
|
12
|
+
fallbackLng?: string[] | undefined;
|
|
11
13
|
directories?: string[] | undefined;
|
|
12
14
|
}): RequestHandler[];
|
|
13
15
|
export type RequestHandler = import("express").RequestHandler;
|
package/dist/middleware/i18n.js
CHANGED
|
@@ -65,10 +65,11 @@ const loadResources = (languages, directories) => {
|
|
|
65
65
|
*
|
|
66
66
|
* @param {object} opts Options
|
|
67
67
|
* @param {string[]} [opts.languages] Language codes
|
|
68
|
+
* @param {string[]} [opts.fallbackLng] Fallback language
|
|
68
69
|
* @param {string[]} [opts.directories] Source translations directories
|
|
69
70
|
* @returns {RequestHandler[]} Middleware functions
|
|
70
71
|
*/
|
|
71
|
-
function i18nMiddleware({ languages = ["en", "cy"], directories = [], }) {
|
|
72
|
+
function i18nMiddleware({ languages = ["en", "cy"], fallbackLng = false, directories = [], }) {
|
|
72
73
|
// Load _all_ translations, from all directories into memory.
|
|
73
74
|
const resources = loadResources(languages, directories);
|
|
74
75
|
// Configure i18next
|
|
@@ -76,7 +77,7 @@ function i18nMiddleware({ languages = ["en", "cy"], directories = [], }) {
|
|
|
76
77
|
i18nInstance.use(i18next_http_middleware_1.LanguageDetector).init({
|
|
77
78
|
initAsync: false, // because we need synchronous loading
|
|
78
79
|
supportedLngs: languages,
|
|
79
|
-
fallbackLng
|
|
80
|
+
fallbackLng,
|
|
80
81
|
defaultNS: "common",
|
|
81
82
|
// debug: true,
|
|
82
83
|
// All translation resources
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/middleware/i18n.js"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/middleware/i18n.js"],"names":[],"mappings":"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"}
|
package/dist/middleware/pre.js
CHANGED
|
@@ -53,7 +53,7 @@ exports.default = ({ helmetConfigurator = (config) => config } = {}) => [
|
|
|
53
53
|
// The `no-store` setting is to specifically disable the bfcache and prevent
|
|
54
54
|
// possible leakage of information.
|
|
55
55
|
(req, res, next) => {
|
|
56
|
-
res.set("cache-control", "no-
|
|
56
|
+
res.set("cache-control", "no-store");
|
|
57
57
|
res.set("expires", 0);
|
|
58
58
|
res.set("x-robots-tag", "noindex, nofollow");
|
|
59
59
|
next();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pre.js","sourceRoot":"","sources":["../../src/middleware/pre.js"],"names":[],"mappings":";;;;;AAAA,6CAA0C;AAC1C,oDAA4B;AAE5B;;;GAGG;AAEH,MAAM,SAAS,GAAG,wBAAwB,CAAC;AAC3C,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AACrD,MAAM,UAAU,GAAG,wBAAwB,CAAC;AAC5C,MAAM,kBAAkB,GAAG,+BAA+B,CAAC;AAE3D;;;;;;;;;;;GAWG;AACH,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG;IAC5B,OAAO,UAAU,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC;AAC1C,CAAC;AAED;;;;;;;GAOG;AACH,kBAAe,CAAC,EAAE,kBAAkB,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IACnE,qCAAqC;IACrC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACjB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAClD,MAAM,GAAG,GAAG,IAAI,KAAK,CACnB,+BAA+B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAClE,CAAC;YACF,GAAG,CAAC,IAAI,GAAG,2BAA2B,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;aAAM,CAAC;YACN,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,2BAA2B;IAC3B,4EAA4E;IAC5E,mCAAmC;IACnC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACjB,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"pre.js","sourceRoot":"","sources":["../../src/middleware/pre.js"],"names":[],"mappings":";;;;;AAAA,6CAA0C;AAC1C,oDAA4B;AAE5B;;;GAGG;AAEH,MAAM,SAAS,GAAG,wBAAwB,CAAC;AAC3C,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AACrD,MAAM,UAAU,GAAG,wBAAwB,CAAC;AAC5C,MAAM,kBAAkB,GAAG,+BAA+B,CAAC;AAE3D;;;;;;;;;;;GAWG;AACH,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG;IAC5B,OAAO,UAAU,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC;AAC1C,CAAC;AAED;;;;;;;GAOG;AACH,kBAAe,CAAC,EAAE,kBAAkB,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IACnE,qCAAqC;IACrC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACjB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAClD,MAAM,GAAG,GAAG,IAAI,KAAK,CACnB,+BAA+B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAClE,CAAC;YACF,GAAG,CAAC,IAAI,GAAG,2BAA2B,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;aAAM,CAAC;YACN,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,2BAA2B;IAC3B,4EAA4E;IAC5E,mCAAmC;IACnC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACjB,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QACrC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACtB,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QAC7C,IAAI,EAAE,CAAC;IACT,CAAC;IAED,sEAAsE;IACtE,yEAAyE;IACzE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACjB,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAA,yBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,EAAE,CAAC;IACT,CAAC;IAED,0BAA0B;IAC1B,IAAA,gBAAM,EACJ,kBAAkB,CAAC;QACjB,qEAAqE;QACrE,qBAAqB,EAAE;YACrB,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE;gBACV,aAAa,EAAE,CAAC,QAAQ,CAAC;gBACzB,YAAY,EAAE;oBACZ,QAAQ;oBACR,SAAS;oBACT,UAAU;oBACV,kBAAkB;oBAClB,YAAY;iBACb;gBACD,SAAS,EAAE;oBACT,QAAQ;oBACR,SAAS;oBACT,mBAAmB;oBACnB,UAAU;oBACV,yBAAyB;oBACzB,yBAAyB;iBAC1B;gBACD,aAAa,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,mBAAmB,EAAE,UAAU,CAAC;gBACrE,WAAW,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;gBACnC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;gBAC7B,aAAa,EAAE,CAAC,QAAQ,CAAC;gBACzB,WAAW,EAAE;oBACX,QAAQ;oBACR,8BAA8B;oBAC9B,kBAAkB;oBAClB,YAAY;iBACb;gBACD,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,2BAA2B,CAAC;gBAC5D,cAAc,EAAE,CAAC,QAAQ,CAAC;aAC3B;SACF;QAED,wCAAwC;QACxC,8CAA8C;KAC/C,CAAC,CACH;CACF,CAAC"}
|
package/dist/routes/static.js
CHANGED
|
@@ -27,7 +27,7 @@ const { static: ExpressStatic } = express_1.default; // CommonJS
|
|
|
27
27
|
* @returns {MutableRouter} ExpressJS Router instance
|
|
28
28
|
* @access private
|
|
29
29
|
*/
|
|
30
|
-
function staticRouter({ maxAge = 3600000, cacheControl = "private", } = {}) {
|
|
30
|
+
function staticRouter({ maxAge = 3600000, cacheControl = "no-cache, private", } = {}) {
|
|
31
31
|
const router = new MutableRouter_js_1.default();
|
|
32
32
|
const notFoundHandler = (req, res, next) => {
|
|
33
33
|
// Fall through to a general purpose error handler
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/routes/static.js"],"names":[],"mappings":";;;;;AA2BA,+BAsFC;AAjHD,sDAAgC;AAChC,qCAAuC;AACvC,uCAA+B;AAC/B,yCAAoC;AACpC,6CAA4C;AAE5C,gEAAoC;AACpC,+EAAoD;AACpD,8CAAkD;AAElD,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,iBAAS,CAAC,CAAC,WAAW;AAExD;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,SAAwB,YAAY,CAAC,EACnC,MAAM,GAAG,OAAO,EAChB,YAAY,GAAG,
|
|
1
|
+
{"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/routes/static.js"],"names":[],"mappings":"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"}
|
package/locales/cy/common.json
CHANGED
|
@@ -18,6 +18,36 @@
|
|
|
18
18
|
"next": {
|
|
19
19
|
"label": "Nesaf"
|
|
20
20
|
}
|
|
21
|
+
},
|
|
22
|
+
"characterCount": {
|
|
23
|
+
"characters": {
|
|
24
|
+
"description": "Gallwch roi hyd at %{count} nod",
|
|
25
|
+
"underLimitOne": "Mae gennych 1 nod ar ôl",
|
|
26
|
+
"underLimitTwo": "Mae gennych 2 nod ar ôl",
|
|
27
|
+
"underLimitFew": "Mae gennych 3 nod ar ôl",
|
|
28
|
+
"underLimitMany": "Mae gennych %{count} nod ar ôl",
|
|
29
|
+
"underLimitOther": "Mae gennych %{count} nod ar ôl",
|
|
30
|
+
"atLimit": "Mae gennych 0 nod ar ôl",
|
|
31
|
+
"overLimitOne": "Mae gennych 1 nod yn ormod",
|
|
32
|
+
"overLimitTwo": "Mae gennych 2 nod yn ormod",
|
|
33
|
+
"overLimitFew": "Mae gennych 3 nod yn ormod",
|
|
34
|
+
"overLimitMany": "Mae gennych %{count} nod yn ormod",
|
|
35
|
+
"overLimitOther": "Mae gennych %{count} nod yn ormod"
|
|
36
|
+
},
|
|
37
|
+
"words": {
|
|
38
|
+
"description": "Gallwch roi hyd at %{count} gair",
|
|
39
|
+
"underLimitOne": "Mae gennych 1 gair ar ôl",
|
|
40
|
+
"underLimitTwo": "Mae gennych 2 gair ar ôl",
|
|
41
|
+
"underLimitFew": "Mae gennych 3 gair ar ôl",
|
|
42
|
+
"underLimitMany": "Mae gennych %{count} gair ar ôl",
|
|
43
|
+
"underLimitOther": "Mae gennych %{count} gair ar ôl",
|
|
44
|
+
"atLimit": "Mae gennych 0 gair ar ôl",
|
|
45
|
+
"overLimitOne": "Mae gennych 1 gair yn ormod",
|
|
46
|
+
"overLimitTwo": "Mae gennych 2 gair yn ormod",
|
|
47
|
+
"overLimitFew": "Mae gennych 3 gair yn ormod",
|
|
48
|
+
"overLimitMany": "Mae gennych %{count} gair yn ormod",
|
|
49
|
+
"overLimitOther": "Mae gennych %{count} gair yn ormod"
|
|
50
|
+
}
|
|
21
51
|
}
|
|
22
52
|
}
|
|
23
53
|
}
|
package/locales/en/common.json
CHANGED
|
@@ -18,6 +18,36 @@
|
|
|
18
18
|
"next": {
|
|
19
19
|
"label": "Next"
|
|
20
20
|
}
|
|
21
|
+
},
|
|
22
|
+
"characterCount": {
|
|
23
|
+
"characters": {
|
|
24
|
+
"description": "You can enter up to %{count} characters",
|
|
25
|
+
"underLimitOne": "You have 1 character remaining",
|
|
26
|
+
"underLimitTwo": "You have 2 characters remaining",
|
|
27
|
+
"underLimitFew": "You have 3 characters remaining",
|
|
28
|
+
"underLimitMany": "You have %{count} characters remaining",
|
|
29
|
+
"underLimitOther": "You have %{count} characters remaining",
|
|
30
|
+
"atLimit": "You have 0 characters remaining",
|
|
31
|
+
"overLimitOne": "You have 1 character too many",
|
|
32
|
+
"overLimitTwo": "You have 2 characters too many",
|
|
33
|
+
"overLimitFew": "You have 3 characters too many",
|
|
34
|
+
"overLimitMany": "You have %{count} characters too many",
|
|
35
|
+
"overLimitOther": "You have %{count} characters too many"
|
|
36
|
+
},
|
|
37
|
+
"words": {
|
|
38
|
+
"description": "You can enter up to %{count} words",
|
|
39
|
+
"underLimitOne": "You have 1 word remaining",
|
|
40
|
+
"underLimitTwo": "You have 2 words remaining",
|
|
41
|
+
"underLimitFew": "You have 3 words remaining",
|
|
42
|
+
"underLimitMany": "You have %{count} words remaining",
|
|
43
|
+
"underLimitOther": "You have %{count} words remaining",
|
|
44
|
+
"atLimit": "You have 0 words remaining",
|
|
45
|
+
"overLimitOne": "You have 1 word too many",
|
|
46
|
+
"overLimitTwo": "You have 2 words too many",
|
|
47
|
+
"overLimitFew": "You have 3 words too many",
|
|
48
|
+
"overLimitMany": "You have %{count} words too many",
|
|
49
|
+
"overLimitOther": "You have %{count} words too many"
|
|
50
|
+
}
|
|
21
51
|
}
|
|
22
52
|
}
|
|
23
53
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dwp/govuk-casa",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.5.0",
|
|
4
4
|
"description": "A framework for building GOVUK Collect-And-Submit-Applications",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -54,53 +54,53 @@
|
|
|
54
54
|
"@dagrejs/graphlib": "2.2.4",
|
|
55
55
|
"bytes": "3.1.2",
|
|
56
56
|
"cookie-parser": "1.4.7",
|
|
57
|
-
"csrf-sync": "4.
|
|
58
|
-
"debug": "4.4.
|
|
57
|
+
"csrf-sync": "4.2.1",
|
|
58
|
+
"debug": "4.4.1",
|
|
59
59
|
"deepmerge": "4.3.1",
|
|
60
60
|
"express": "4.21.2",
|
|
61
61
|
"express-session": "1.18.1",
|
|
62
|
-
"govuk-frontend": "5.
|
|
63
|
-
"helmet": "8.
|
|
64
|
-
"i18next": "
|
|
65
|
-
"i18next-http-middleware": "3.7.
|
|
62
|
+
"govuk-frontend": "5.10.1",
|
|
63
|
+
"helmet": "8.1.0",
|
|
64
|
+
"i18next": "25.1.3",
|
|
65
|
+
"i18next-http-middleware": "3.7.4",
|
|
66
66
|
"js-yaml": "4.1.0",
|
|
67
67
|
"lodash": "4.17.21",
|
|
68
|
-
"luxon": "3.
|
|
68
|
+
"luxon": "3.6.1",
|
|
69
69
|
"nunjucks": "3.2.4",
|
|
70
70
|
"path-to-regexp": "8.2.0",
|
|
71
71
|
"rfdc": "1.4.1",
|
|
72
|
-
"validator": "13.
|
|
72
|
+
"validator": "13.15.0"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
75
|
"@ckeditor/jsdoc-plugins": "43.0.1",
|
|
76
|
-
"@commitlint/config-conventional": "19.
|
|
77
|
-
"@dwp/casa-spiderplan": "4.2.
|
|
78
|
-
"@dwp/casa-spiderplan-a11y-plugin": "1.0.
|
|
79
|
-
"@dwp/casa-spiderplan-zap-plugin": "1.0.
|
|
76
|
+
"@commitlint/config-conventional": "19.8.1",
|
|
77
|
+
"@dwp/casa-spiderplan": "4.2.1",
|
|
78
|
+
"@dwp/casa-spiderplan-a11y-plugin": "1.0.3",
|
|
79
|
+
"@dwp/casa-spiderplan-zap-plugin": "1.0.4",
|
|
80
80
|
"@dwp/eslint-config-base": "9.0.2",
|
|
81
81
|
"@types/express": "4.17.21",
|
|
82
|
-
"@types/luxon": "3.
|
|
83
|
-
"@types/node": "22.
|
|
82
|
+
"@types/luxon": "3.6.2",
|
|
83
|
+
"@types/node": "22.15.18",
|
|
84
84
|
"@types/nunjucks": "3.2.6",
|
|
85
85
|
"c8": "10.1.3",
|
|
86
|
-
"chai": "5.
|
|
86
|
+
"chai": "5.2.0",
|
|
87
87
|
"cheerio": "1.0.0",
|
|
88
|
-
"commitlint": "19.
|
|
88
|
+
"commitlint": "19.8.1",
|
|
89
89
|
"docdash": "2.0.2",
|
|
90
|
-
"eslint": "9.
|
|
90
|
+
"eslint": "9.26.0",
|
|
91
91
|
"eslint-plugin-import": "2.31.0",
|
|
92
|
-
"eslint-plugin-jsdoc": "50.6.
|
|
92
|
+
"eslint-plugin-jsdoc": "50.6.17",
|
|
93
93
|
"eslint-plugin-security": "3.0.1",
|
|
94
94
|
"eslint-plugin-sonarjs": "3.0.2",
|
|
95
|
-
"fast-check": "
|
|
95
|
+
"fast-check": "4.1.1",
|
|
96
96
|
"jsdoc": "4.0.4",
|
|
97
97
|
"jsdoc-tsimport-plugin": "1.0.5",
|
|
98
|
-
"mocha": "11.
|
|
99
|
-
"prettier": "3.5.
|
|
98
|
+
"mocha": "11.2.2",
|
|
99
|
+
"prettier": "3.5.3",
|
|
100
100
|
"prettier-plugin-jsdoc": "1.3.2",
|
|
101
|
-
"sass": "1.
|
|
102
|
-
"sinon": "
|
|
103
|
-
"supertest": "7.
|
|
104
|
-
"typescript": "5.
|
|
101
|
+
"sass": "1.88.0",
|
|
102
|
+
"sinon": "20.0.0",
|
|
103
|
+
"supertest": "7.1.1",
|
|
104
|
+
"typescript": "5.8.3"
|
|
105
105
|
}
|
|
106
106
|
}
|
package/src/lib/configure.js
CHANGED
package/src/middleware/i18n.js
CHANGED
|
@@ -73,11 +73,13 @@ const loadResources = (languages, directories) => {
|
|
|
73
73
|
*
|
|
74
74
|
* @param {object} opts Options
|
|
75
75
|
* @param {string[]} [opts.languages] Language codes
|
|
76
|
+
* @param {string[]} [opts.fallbackLng] Fallback language
|
|
76
77
|
* @param {string[]} [opts.directories] Source translations directories
|
|
77
78
|
* @returns {RequestHandler[]} Middleware functions
|
|
78
79
|
*/
|
|
79
80
|
export default function i18nMiddleware({
|
|
80
81
|
languages = ["en", "cy"],
|
|
82
|
+
fallbackLng = false,
|
|
81
83
|
directories = [],
|
|
82
84
|
}) {
|
|
83
85
|
// Load _all_ translations, from all directories into memory.
|
|
@@ -88,7 +90,7 @@ export default function i18nMiddleware({
|
|
|
88
90
|
i18nInstance.use(LanguageDetector).init({
|
|
89
91
|
initAsync: false, // because we need synchronous loading
|
|
90
92
|
supportedLngs: languages,
|
|
91
|
-
fallbackLng
|
|
93
|
+
fallbackLng,
|
|
92
94
|
defaultNS: "common",
|
|
93
95
|
// debug: true,
|
|
94
96
|
|
package/src/middleware/pre.js
CHANGED
|
@@ -54,7 +54,7 @@ export default ({ helmetConfigurator = (config) => config } = {}) => [
|
|
|
54
54
|
// The `no-store` setting is to specifically disable the bfcache and prevent
|
|
55
55
|
// possible leakage of information.
|
|
56
56
|
(req, res, next) => {
|
|
57
|
-
res.set("cache-control", "no-
|
|
57
|
+
res.set("cache-control", "no-store");
|
|
58
58
|
res.set("expires", 0);
|
|
59
59
|
res.set("x-robots-tag", "noindex, nofollow");
|
|
60
60
|
next();
|
package/src/routes/static.js
CHANGED
|
@@ -29,3 +29,65 @@ The following attributes will be attached to the error `<p>` tag if `casaWithAna
|
|
|
29
29
|
These are the conventions used by DWP.
|
|
30
30
|
|
|
31
31
|
> **IMPORTANT:** DO NOT ENABLE this option if the question or answer may contain personally-identifiable information as values will be pushed to Google
|
|
32
|
+
|
|
33
|
+
## Translations
|
|
34
|
+
|
|
35
|
+
CASA includes English and Welsh for the character and word count default content according to the [GOV.UK pluralisation rules](https://frontend.design-system.service.gov.uk/localise-govuk-frontend/#understanding-pluralisation-rules), but you can provide further translations or override the messages by adding the following keys to your `common.json` locale file:
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"characterCount": {
|
|
40
|
+
"characters": {
|
|
41
|
+
"description": "You can enter up to %{count} characters",
|
|
42
|
+
"underLimitOne": "You have 1 character remaining",
|
|
43
|
+
"underLimitTwo": "You have 2 characters remaining",
|
|
44
|
+
"underLimitFew": "You have 3 characters remaining",
|
|
45
|
+
"underLimitMany": "You have %{count} characters remaining",
|
|
46
|
+
"underLimitOther": "You have %{count} characters remaining",
|
|
47
|
+
"atLimit": "You have 0 characters remaining",
|
|
48
|
+
"overLimitOne": "You have 1 character too many",
|
|
49
|
+
"overLimitTwo": "You have 2 characters too many",
|
|
50
|
+
"overLimitFew": "You have 3 characters too many",
|
|
51
|
+
"overLimitMany": "You have %{count} characters too many",
|
|
52
|
+
"overLimitOther": "You have %{count} characters too many"
|
|
53
|
+
},
|
|
54
|
+
"words": {
|
|
55
|
+
"description": "You can enter up to %{count} words",
|
|
56
|
+
"underLimitOne": "You have 1 word remaining",
|
|
57
|
+
"underLimitTwo": "You have 2 words remaining",
|
|
58
|
+
"underLimitFew": "You have 3 words remaining",
|
|
59
|
+
"underLimitMany": "You have %{count} words remaining",
|
|
60
|
+
"underLimitOther": "You have %{count} words remaining",
|
|
61
|
+
"atLimit": "You have 0 words remaining",
|
|
62
|
+
"overLimitOne": "You have 1 word too many",
|
|
63
|
+
"overLimitTwo": "You have 2 words too many",
|
|
64
|
+
"overLimitFew": "You have 3 words too many",
|
|
65
|
+
"overLimitMany": "You have %{count} words too many",
|
|
66
|
+
"overLimitOther": "You have %{count} words too many"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
The character count message content can also be overridden on a per component basis using the `textareaDescriptionText`, `charactersUnderLimitText`, `charactersAtLimitText`, `charactersOverLimitText`, `wordsUnderLimitText`, `wordsAtLimitText`, and `wordsOverLimitText` parameters.
|
|
73
|
+
|
|
74
|
+
For example:
|
|
75
|
+
|
|
76
|
+
```jinja
|
|
77
|
+
{% from "govuk/components/character-count/macro.njk" import govukCharacterCount %}
|
|
78
|
+
|
|
79
|
+
{{ casaGovukCharacterCount({
|
|
80
|
+
maxlength: 200,
|
|
81
|
+
label: {
|
|
82
|
+
text: "Can you provide more detail?",
|
|
83
|
+
classes: "govuk-label--l",
|
|
84
|
+
isPageHeading: true
|
|
85
|
+
},
|
|
86
|
+
charactersOverLimitText: {
|
|
87
|
+
one: "1 character too many",
|
|
88
|
+
other: "${count} characters too many"
|
|
89
|
+
},
|
|
90
|
+
}) }}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
For more information see the [Character Count GOV.UK Design System page](https://design-system.service.gov.uk/components/character-count/).
|
|
@@ -14,6 +14,40 @@
|
|
|
14
14
|
{% set mergedParams = mergeObjects(params, {
|
|
15
15
|
id: params.id if params.id else 'f-' + params.name,
|
|
16
16
|
attributes: mergedAttributes,
|
|
17
|
+
textareaDescriptionText: params.textareaDescriptionText or (
|
|
18
|
+
t("common:form.characterCount.words.description") if params.maxwords
|
|
19
|
+
else t("common:form.characterCount.characters.description")
|
|
20
|
+
),
|
|
21
|
+
charactersUnderLimitText: params.charactersUnderLimitText or {
|
|
22
|
+
one: t("common:form.characterCount.characters.underLimitOne"),
|
|
23
|
+
two: t("common:form.characterCount.characters.underLimitTwo"),
|
|
24
|
+
few: t("common:form.characterCount.characters.underLimitFew"),
|
|
25
|
+
many: t("common:form.characterCount.characters.underLimitMany"),
|
|
26
|
+
other: t("common:form.characterCount.characters.underLimitOther")
|
|
27
|
+
} if not params.maxwords,
|
|
28
|
+
charactersAtLimitText: params.charactersAtLimitText or t("common:form.characterCount.characters.atLimit") if not params.maxwords,
|
|
29
|
+
charactersOverLimitText: params.charactersOverLimitText or {
|
|
30
|
+
one: t("common:form.characterCount.characters.overLimitOne"),
|
|
31
|
+
two: t("common:form.characterCount.characters.overLimitTwo"),
|
|
32
|
+
few: t("common:form.characterCount.characters.overLimitFew"),
|
|
33
|
+
many: t("common:form.characterCount.characters.overLimitMany"),
|
|
34
|
+
other: t("common:form.characterCount.characters.overLimitOther")
|
|
35
|
+
} if not params.maxwords,
|
|
36
|
+
wordsUnderLimitText: params.wordsUnderLimitText or {
|
|
37
|
+
one: t("common:form.characterCount.words.underLimitOne"),
|
|
38
|
+
two: t("common:form.characterCount.words.underLimitTwo"),
|
|
39
|
+
few: t("common:form.characterCount.words.underLimitFew"),
|
|
40
|
+
many: t("common:form.characterCount.words.underLimitMany"),
|
|
41
|
+
other: t("common:form.characterCount.words.underLimitOther")
|
|
42
|
+
} if params.maxwords,
|
|
43
|
+
wordsAtLimitText: params.wordsAtLimitText or t("common:form.characterCount.words.atLimit") if params.maxwords,
|
|
44
|
+
wordsOverLimitText: params.wordsOverLimitText or {
|
|
45
|
+
one: t("common:form.characterCount.words.overLimitOne"),
|
|
46
|
+
two: t("common:form.characterCount.words.overLimitTwo"),
|
|
47
|
+
few: t("common:form.characterCount.words.overLimitFew"),
|
|
48
|
+
many: t("common:form.characterCount.words.overLimitMany"),
|
|
49
|
+
other: t("common:form.characterCount.words.overLimitOther")
|
|
50
|
+
} if params.maxwords,
|
|
17
51
|
errorMessage: {
|
|
18
52
|
text: t(params.casaErrors[params.name][0].inline, params.casaErrors[params.name][0].variables),
|
|
19
53
|
attributes: {
|