diff --git a/backend/package.json b/backend/package.json index a22079287..3e15a095a 100644 --- a/backend/package.json +++ b/backend/package.json @@ -19,6 +19,7 @@ }, "dependencies": { "@types/email-templates": "^10.0.1", + "@types/i18n": "^0.13.4", "@types/jest": "^27.0.2", "@types/lodash.clonedeep": "^4.5.6", "@types/uuid": "^8.3.4", @@ -33,6 +34,7 @@ "email-templates": "^10.0.1", "express": "^4.17.1", "graphql": "^15.5.1", + "i18n": "^0.15.1", "jest": "^27.2.4", "jsonwebtoken": "^8.5.1", "lodash.clonedeep": "^4.5.0", diff --git a/backend/src/emails/accountMultiRegistration/html.pug b/backend/src/emails/accountMultiRegistration/html.pug index 615b4b03f..02e879a47 100644 --- a/backend/src/emails/accountMultiRegistration/html.pug +++ b/backend/src/emails/accountMultiRegistration/html.pug @@ -3,9 +3,10 @@ html(lang="en") head title= subject body - h1(style='margin-bottom: 24px;') Gradido: Erneuter Registrierungsversuch mit deiner E-Mail + h1(style='margin-bottom: 24px;')= t('emails.accountMultiRegistration.subject') #container.col - p(style='margin-bottom: 24px;') Hallo #{firstName} #{lastName}, + //- p(style='margin-bottom: 24px;') Hallo #{firstName} #{lastName}, + p(style='margin-bottom: 24px;')= t('emails.accountMultiRegistration.helloName', { firstName, lastName }) p Deine E-Mail-Adresse wurde soeben erneut benutzt, um bei Gradido ein Konto zu registrieren. br | Es existiert jedoch zu deiner E-Mail-Adresse schon ein Konto. diff --git a/backend/src/emails/accountMultiRegistration/subject.pug b/backend/src/emails/accountMultiRegistration/subject.pug index 03faf8e29..0ce393fd7 100644 --- a/backend/src/emails/accountMultiRegistration/subject.pug +++ b/backend/src/emails/accountMultiRegistration/subject.pug @@ -1 +1 @@ -= `Gradido: Erneuter Registrierungsversuch mit deiner E-Mail` \ No newline at end of file += `${t('emails.accountMultiRegistration.subject')}` \ No newline at end of file diff --git a/backend/src/emails/sendEmailTranslated.ts b/backend/src/emails/sendEmailTranslated.ts index 084db1232..79bfd7802 100644 --- a/backend/src/emails/sendEmailTranslated.ts +++ b/backend/src/emails/sendEmailTranslated.ts @@ -23,7 +23,8 @@ export const sendEmailTranslated = async (params: { `, subject=${params.locals.subject}`, ) // Wolle: console.log('sendEmailTranslated !!!') - // Wolle: console.log('params: ', params) + // Wolle: + console.log('params: ', params) if (!CONFIG.EMAIL) { logger.info(`Emails are disabled via config...`) @@ -64,6 +65,11 @@ export const sendEmailTranslated = async (params: { // wait: false, // }, // }, + i18n: { + locales: ['en', 'de'], + directory: '/app/src/locales', + defaultLocale: 'en', + }, }) email @@ -73,7 +79,18 @@ export const sendEmailTranslated = async (params: { ...params.receiver, }, // Wolle: locals: params.locals, - locals: { ...params.locals, locale: 'de' }, + locals: { + ...params.locals, + locale: 'de', + // eslint-disable-next-line @typescript-eslint/no-explicit-any + $t(key: any, options: any) { + // <------ THIS IS OUR OWN TRANSLATION HELPER + return options.data.root.t( + { phrase: key, locale: options.data.root.locale }, + options.hash, + ) + }, + }, }) .then((result: unknown) => { logger.info('Send email successfully.') diff --git a/backend/src/locales/de.json b/backend/src/locales/de.json index 4bb1f44e8..7d6472256 100644 --- a/backend/src/locales/de.json +++ b/backend/src/locales/de.json @@ -3,5 +3,7 @@ "accountMultiRegistration": { "subject": "Gradido: Erneuter Registrierungsversuch mit deiner E-Mail" } - } + }, + "emails.accountMultiRegistration.subject": "Gradido: Erneuter Registrierungsversuch mit deiner E-Mail", + "emails.accountMultiRegistration.helloName": "Hallo {firstName} {lastName}" } \ No newline at end of file diff --git a/backend/src/locales/en.json b/backend/src/locales/en.json index 81200ac88..617386c52 100644 --- a/backend/src/locales/en.json +++ b/backend/src/locales/en.json @@ -3,5 +3,7 @@ "accountMultiRegistration": { "subject": "Gradido: Try To Register Again With Your Email" } - } + }, + "emails.accountMultiRegistration.subject": "Gradido: Try To Register Again With Your Email", + "emails.accountMultiRegistration.helloName": "Hello {firstName} {lastName}" } \ No newline at end of file diff --git a/backend/src/server/createServer.ts b/backend/src/server/createServer.ts index d1153cdb6..feb7ef0c0 100644 --- a/backend/src/server/createServer.ts +++ b/backend/src/server/createServer.ts @@ -25,6 +25,9 @@ import { Connection } from '@dbTools/typeorm' import { apolloLogger } from './logger' import { Logger } from 'log4js' +// i18n +// Wolle: import { I18n } from 'i18n' + // TODO implement // import queryComplexity, { simpleEstimator, fieldConfigEstimator } from "graphql-query-complexity"; @@ -79,6 +82,55 @@ const createServer = async ( `running with PRODUCTION=${CONFIG.PRODUCTION}, sending EMAIL enabled=${CONFIG.EMAIL} and EMAIL_TEST_MODUS=${CONFIG.EMAIL_TEST_MODUS} ...`, ) logger.debug('createServer...successful') + + // i18n + // const i18n = new I18n({ + // locales: ['en', 'de'], + // directory: '/app/src/locales', + // }) + // Wolle: const i18n = new I18n({ + // // phrases: {}, + // logDebugFn: logger.debug, + // logWarnFn: logger.info, + // logErrorFn: logger.error, + // directory: '/app/src/locales', + // locales: ['en', 'de'], + // // cookie: 'locale', + // // cookieOptions: { + // // // Disable signed cookies in NODE_ENV=test + // // signed: process.env.NODE_ENV !== 'test' + // // }, + // // expiryMs: 31556952000, // one year in ms + // // indent: ' ', + // // defaultLocale: 'en', + // // // `process.env.I18N_SYNC_FILES` + // // syncFiles: true, + // // // `process.env.I18N_AUTO_RELOAD` + // // autoReload: false, + // // // `process.env.I18N_UPDATE_FILES` + // // updateFiles: true, + // // api: { + // // __: 't', + // // __n: 'tn', + // // __l: 'tl', + // // __h: 'th', + // // __mf: 'tmf' + // // }, + // // register: i18n.api, + // // lastLocaleField: 'last_locale', + // // ignoredRedirectGlobs: [], + // // redirectIgnoresNonGetMethods: true, + // // // + // // stringify: { + // // addQueryPrefix: true, + // // format: 'RFC1738', + // // arrayFormat: 'indices' + // // }, + // // redirectTLDS: true, + // // // function that allows using a custom logic for locale detection (can return promise) + // // detectLocale: null + // }) + return { apollo, app, con } } diff --git a/backend/yarn.lock b/backend/yarn.lock index 22db4547d..fa50a6ea7 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -972,6 +972,11 @@ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-1.8.1.tgz#e81ad28a60bee0328c6d2384e029aec626f1ae67" integrity sha512-e+2rjEwK6KDaNOm5Aa9wNGgyS9oSZU/4pfSMMPYNOfjvFI0WVXm29+ITRFr6aKDvvKo7uU1jV68MW4ScsfDi7Q== +"@types/i18n@^0.13.4": + version "0.13.4" + resolved "https://registry.yarnpkg.com/@types/i18n/-/i18n-0.13.4.tgz#fe3d27d08337f9d4a972d1f460d1471d6f79e163" + integrity sha512-PN4ZsplbpHZ2eaYixFNWkZKN51pcB02K2UKvqHVbrzq2jTO0sChPMuKKYAW1ZbElyHUvPgFeYsz9rqktChGyMw== + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" @@ -3427,6 +3432,18 @@ i18n@^0.15.0: math-interval-parser "^2.0.1" mustache "^4.2.0" +i18n@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/i18n/-/i18n-0.15.1.tgz#68fb8993c461cc440bc2485d82f72019f2b92de8" + integrity sha512-yue187t8MqUPMHdKjiZGrX+L+xcUsDClGO0Cz4loaKUOK9WrGw5pgan4bv130utOwX7fHE9w2iUeHFalVQWkXA== + dependencies: + "@messageformat/core" "^3.0.0" + debug "^4.3.3" + fast-printf "^1.6.9" + make-plural "^7.0.0" + math-interval-parser "^2.0.1" + mustache "^4.2.0" + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"