Skip to content

Commit a9e5cef

Browse files
feat: add support for i18n
1 parent 4b9db74 commit a9e5cef

File tree

7 files changed

+103
-2
lines changed

7 files changed

+103
-2
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ A basic starter for a web app with node, express and mongoose -->
7979
- Support for circuit breakers
8080
- Autogenerated swagger documentation
8181
- Load testing using k6
82+
- Support for i18n
8283

8384
## Running Load tests
8485

jest.config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"!**/node_modules/**",
77
"!**/dist/**",
88
"!**/models/**",
9+
"!**/server/translations/**",
910
"!__tests__/__load__/libs/**/*.*"
1011
],
1112
"testRegex": "(/__tests__/.*\\.test)\\.js$",

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
"express-validator": "^6.14.0",
6060
"helmet": "^5.0.1",
6161
"husky": "^8.0.1",
62+
"i18n": "^0.15.1",
6263
"ioredis": "^5.0.5",
6364
"jwks-rsa": "^2.0.5",
6465
"kill-port": "^1.6.1",

server/index.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import http from 'http';
2+
import i18n from 'i18n';
3+
import path from 'path';
24
import express from 'express';
35
import helmet from 'helmet';
46
import responseTime from 'response-time';
@@ -13,12 +15,17 @@ import { initQueues } from 'utils/queue';
1315
import { injectRequestId } from 'middlewares/injectRequestId';
1416
import { checkJwt } from 'middlewares/auth';
1517
import { middleware as contextMiddleware } from 'express-http-context';
16-
1718
/**
1819
* Create express server
1920
*/
2021

22+
i18n.configure({
23+
locales: ['en', 'hi'],
24+
directory: path.join(__dirname, './translations')
25+
});
26+
2127
const app = express();
28+
app.use(i18n.init);
2229
app.use(responseTime());
2330
app.set('port', process.env.PORT || 9000);
2431
app.use(helmet());
@@ -42,7 +49,7 @@ if (!isTestEnv()) {
4249
}
4350

4451
app.get('/', (req, res) => {
45-
apiSuccess(res, 'node-express-mongo server at your service🖖');
52+
apiSuccess(res, res.locals.__('response.health_check'));
4653
});
4754
list(app);
4855

server/translations/en.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"response.health_check": "node-express-mongo server at your service🖖"
3+
}

server/translations/hi.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"response.health_check": "नोड-एक्सप्रेस-मोंगो सर्वर आपकी सेवा में🖖"
3+
}

yarn.lock

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1451,6 +1451,42 @@
14511451
"@jridgewell/resolve-uri" "^3.0.3"
14521452
"@jridgewell/sourcemap-codec" "^1.4.10"
14531453

1454+
"@messageformat/core@^3.0.0":
1455+
version "3.3.0"
1456+
resolved "https://registry.yarnpkg.com/@messageformat/core/-/core-3.3.0.tgz#31edd52a5f7d017adad85c929809f07741dcfd3f"
1457+
integrity sha512-YcXd3remTDdeMxAlbvW6oV9d/01/DZ8DHUFwSttO3LMzIZj3iO0NRw+u1xlsNNORFI+u0EQzD52ZX3+Udi0T3g==
1458+
dependencies:
1459+
"@messageformat/date-skeleton" "^1.0.0"
1460+
"@messageformat/number-skeleton" "^1.0.0"
1461+
"@messageformat/parser" "^5.1.0"
1462+
"@messageformat/runtime" "^3.0.1"
1463+
make-plural "^7.0.0"
1464+
safe-identifier "^0.4.1"
1465+
1466+
"@messageformat/date-skeleton@^1.0.0":
1467+
version "1.0.1"
1468+
resolved "https://registry.yarnpkg.com/@messageformat/date-skeleton/-/date-skeleton-1.0.1.tgz#980b8babe21a11433b6e1e8f6dc8c4cae4f5f56b"
1469+
integrity sha512-jPXy8fg+WMPIgmGjxSlnGJn68h/2InfT0TNSkVx0IGXgp4ynnvYkbZ51dGWmGySEK+pBiYUttbQdu5XEqX5CRg==
1470+
1471+
"@messageformat/number-skeleton@^1.0.0":
1472+
version "1.2.0"
1473+
resolved "https://registry.yarnpkg.com/@messageformat/number-skeleton/-/number-skeleton-1.2.0.tgz#e7c245c41a1b2722bc59dad68f4d454f761bc9b4"
1474+
integrity sha512-xsgwcL7J7WhlHJ3RNbaVgssaIwcEyFkBqxHdcdaiJzwTZAWEOD8BuUFxnxV9k5S0qHN3v/KzUpq0IUpjH1seRg==
1475+
1476+
"@messageformat/parser@^5.1.0":
1477+
version "5.1.0"
1478+
resolved "https://registry.yarnpkg.com/@messageformat/parser/-/parser-5.1.0.tgz#05e4851c782d633ad735791dd0a68ee65d2a7201"
1479+
integrity sha512-jKlkls3Gewgw6qMjKZ9SFfHUpdzEVdovKFtW1qRhJ3WI4FW5R/NnGDqr8SDGz+krWDO3ki94boMmQvGke1HwUQ==
1480+
dependencies:
1481+
moo "^0.5.1"
1482+
1483+
"@messageformat/runtime@^3.0.1":
1484+
version "3.0.1"
1485+
resolved "https://registry.yarnpkg.com/@messageformat/runtime/-/runtime-3.0.1.tgz#94d1f6c43265c28ef7aed98ecfcc0968c6c849ac"
1486+
integrity sha512-6RU5ol2lDtO8bD9Yxe6CZkl0DArdv0qkuoZC+ZwowU+cdRlVE1157wjCmlA5Rsf1Xc/brACnsZa5PZpEDfTFFg==
1487+
dependencies:
1488+
make-plural "^7.0.0"
1489+
14541490
"@nodelib/fs.scandir@2.1.5":
14551491
version "2.1.5"
14561492
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@@ -2354,6 +2390,11 @@ body-parser@1.19.1, body-parser@^1.19.1:
23542390
raw-body "2.4.2"
23552391
type-is "~1.6.18"
23562392

2393+
boolean@^3.1.4:
2394+
version "3.2.0"
2395+
resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b"
2396+
integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==
2397+
23572398
boxen@^5.0.0:
23582399
version "5.1.2"
23592400
resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50"
@@ -3785,6 +3826,13 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
37853826
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
37863827
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
37873828

3829+
fast-printf@^1.6.9:
3830+
version "1.6.9"
3831+
resolved "https://registry.yarnpkg.com/fast-printf/-/fast-printf-1.6.9.tgz#212f56570d2dc8ccdd057ee93d50dd414d07d676"
3832+
integrity sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==
3833+
dependencies:
3834+
boolean "^3.1.4"
3835+
37883836
fast-safe-stringify@^2.0.7, fast-safe-stringify@^2.1.1:
37893837
version "2.1.1"
37903838
resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884"
@@ -4374,6 +4422,18 @@ husky@^8.0.1:
43744422
resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.1.tgz#511cb3e57de3e3190514ae49ed50f6bc3f50b3e9"
43754423
integrity sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==
43764424

4425+
i18n@^0.15.1:
4426+
version "0.15.1"
4427+
resolved "https://registry.yarnpkg.com/i18n/-/i18n-0.15.1.tgz#68fb8993c461cc440bc2485d82f72019f2b92de8"
4428+
integrity sha512-yue187t8MqUPMHdKjiZGrX+L+xcUsDClGO0Cz4loaKUOK9WrGw5pgan4bv130utOwX7fHE9w2iUeHFalVQWkXA==
4429+
dependencies:
4430+
"@messageformat/core" "^3.0.0"
4431+
debug "^4.3.3"
4432+
fast-printf "^1.6.9"
4433+
make-plural "^7.0.0"
4434+
math-interval-parser "^2.0.1"
4435+
mustache "^4.2.0"
4436+
43774437
iconv-lite@0.4.24, iconv-lite@^0.4.24:
43784438
version "0.4.24"
43794439
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -5881,6 +5941,11 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
58815941
dependencies:
58825942
semver "^6.0.0"
58835943

5944+
make-plural@^7.0.0:
5945+
version "7.3.0"
5946+
resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-7.3.0.tgz#2889dbafca2fb097037c47967d3e3afa7e48a52c"
5947+
integrity sha512-/K3BC0KIsO+WK2i94LkMPv3wslMrazrQhfi5We9fMbLlLjzoOSJWr7TAdupLlDWaJcWxwoNosBkhFDejiu5VDw==
5948+
58845949
makeerror@1.0.12:
58855950
version "1.0.12"
58865951
resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
@@ -5900,6 +5965,11 @@ markdown-escapes@^1.0.0:
59005965
resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535"
59015966
integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==
59025967

5968+
math-interval-parser@^2.0.1:
5969+
version "2.0.1"
5970+
resolved "https://registry.yarnpkg.com/math-interval-parser/-/math-interval-parser-2.0.1.tgz#e22cd6d15a0a7f4c03aec560db76513da615bed4"
5971+
integrity sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==
5972+
59035973
media-typer@0.3.0:
59045974
version "0.3.0"
59055975
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
@@ -6075,6 +6145,11 @@ mongoose@6.2.4:
60756145
ms "2.1.3"
60766146
sift "16.0.0"
60776147

6148+
moo@^0.5.1:
6149+
version "0.5.2"
6150+
resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c"
6151+
integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==
6152+
60786153
mpath@0.8.4:
60796154
version "0.8.4"
60806155
resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.8.4.tgz#6b566d9581621d9e931dd3b142ed3618e7599313"
@@ -6132,6 +6207,11 @@ multimatch@^3.0.0:
61326207
arrify "^1.0.1"
61336208
minimatch "^3.0.4"
61346209

6210+
mustache@^4.2.0:
6211+
version "4.2.0"
6212+
resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64"
6213+
integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==
6214+
61356215
mute-stream@0.0.8:
61366216
version "0.0.8"
61376217
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
@@ -7280,6 +7360,11 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1:
72807360
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
72817361
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
72827362

7363+
safe-identifier@^0.4.1:
7364+
version "0.4.2"
7365+
resolved "https://registry.yarnpkg.com/safe-identifier/-/safe-identifier-0.4.2.tgz#cf6bfca31c2897c588092d1750d30ef501d59fcb"
7366+
integrity sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==
7367+
72837368
safe-json-stringify@~1:
72847369
version "1.2.0"
72857370
resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd"

0 commit comments

Comments
 (0)