diff --git a/client/package-lock.json b/client/package-lock.json index ae00bd7a..2239bfba 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -12,7 +12,7 @@ "dequal": "^2.0.3", "easymde": "^2.18.0", "history": "^5.3.0", - "i18next": "^23.11.5", + "i18next": "^23.12.2", "i18next-browser-languagedetector": "^8.0.0", "initials": "^3.1.2", "js-cookie": "^3.0.5", @@ -30,7 +30,7 @@ "react-datepicker": "^4.25.0", "react-dom": "^18.2.0", "react-dropzone": "^14.2.3", - "react-i18next": "^14.1.2", + "react-i18next": "^15.0.0", "react-input-mask": "^2.0.4", "react-markdown": "^8.0.7", "react-photoswipe-gallery": "^2.2.7", @@ -2007,9 +2007,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", - "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", + "integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -11975,9 +11975,9 @@ } }, "node_modules/i18next": { - "version": "23.11.5", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.11.5.tgz", - "integrity": "sha512-41pvpVbW9rhZPk5xjCX2TPJi2861LEig/YRhUkY+1FQ2IQPS0bKUDYnEqY8XPPbB48h1uIwLnP9iiEfuSl20CA==", + "version": "23.12.2", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.12.2.tgz", + "integrity": "sha512-XIeh5V+bi8SJSWGL3jqbTEBW5oD6rbP5L+E7dVQh1MNTxxYef0x15rhJVcRb7oiuq4jLtgy2SD8eFlf6P2cmqg==", "funding": [ { "type": "individual", @@ -22084,11 +22084,11 @@ "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" }, "node_modules/react-i18next": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-14.1.2.tgz", - "integrity": "sha512-FSIcJy6oauJbGEXfhUgVeLzvWBhIBIS+/9c6Lj4niwKZyGaGb4V4vUbATXSlsHJDXXB+ociNxqFNiFuV1gmoqg==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.0.0.tgz", + "integrity": "sha512-2O3IgF4zivg57Q6p6i+ChDgJ371IDcEWbuWC6gvoh5NbkDMs0Q+O7RPr4v61+Se32E0V+LmtwePAeqWZW0bi6g==", "dependencies": { - "@babel/runtime": "^7.23.9", + "@babel/runtime": "^7.24.8", "html-parse-stringify": "^3.0.1" }, "peerDependencies": { diff --git a/client/package.json b/client/package.json index 4d000f74..7e975a5f 100755 --- a/client/package.json +++ b/client/package.json @@ -65,7 +65,7 @@ "dequal": "^2.0.3", "easymde": "^2.18.0", "history": "^5.3.0", - "i18next": "^23.11.5", + "i18next": "^23.12.2", "i18next-browser-languagedetector": "^8.0.0", "initials": "^3.1.2", "js-cookie": "^3.0.5", @@ -83,7 +83,7 @@ "react-datepicker": "^4.25.0", "react-dom": "^18.2.0", "react-dropzone": "^14.2.3", - "react-i18next": "^14.1.2", + "react-i18next": "^15.0.0", "react-input-mask": "^2.0.4", "react-markdown": "^8.0.7", "react-photoswipe-gallery": "^2.2.7", diff --git a/client/src/i18n.js b/client/src/i18n.js index 4f5dda56..26dae90d 100644 --- a/client/src/i18n.js +++ b/client/src/i18n.js @@ -58,9 +58,9 @@ i18n .use(initReactI18next) .init({ resources: embeddedLocales, - fallbackLng: 'en', + fallbackLng: 'en-US', supportedLngs: languages, - load: 'languageOnly', + load: 'currentOnly', interpolation: { escapeValue: false, format(value, format, language) { @@ -80,7 +80,7 @@ i18n }); i18n.loadCoreLocale = async (language = i18n.resolvedLanguage) => { - if (language === 'en') { + if (language === i18n.options.fallbackLng[0]) { return; } diff --git a/client/src/locales/bg/core.js b/client/src/locales/bg-BG/core.js similarity index 100% rename from client/src/locales/bg/core.js rename to client/src/locales/bg-BG/core.js diff --git a/client/src/locales/bg/index.js b/client/src/locales/bg-BG/index.js similarity index 85% rename from client/src/locales/bg/index.js rename to client/src/locales/bg-BG/index.js index 95c609bf..4b1631bf 100644 --- a/client/src/locales/bg/index.js +++ b/client/src/locales/bg-BG/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'bg', + language: 'bg-BG', country: 'bg', name: 'Български', embeddedLocale: login, diff --git a/client/src/locales/bg/login.js b/client/src/locales/bg-BG/login.js similarity index 100% rename from client/src/locales/bg/login.js rename to client/src/locales/bg-BG/login.js diff --git a/client/src/locales/cs/core.js b/client/src/locales/cs-CZ/core.js similarity index 100% rename from client/src/locales/cs/core.js rename to client/src/locales/cs-CZ/core.js diff --git a/client/src/locales/cs/index.js b/client/src/locales/cs-CZ/index.js similarity index 84% rename from client/src/locales/cs/index.js rename to client/src/locales/cs-CZ/index.js index b172ade8..a8380e7c 100644 --- a/client/src/locales/cs/index.js +++ b/client/src/locales/cs-CZ/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'cs', + language: 'cs-CZ', country: 'cz', name: 'Čeština', embeddedLocale: login, diff --git a/client/src/locales/cs/login.js b/client/src/locales/cs-CZ/login.js similarity index 100% rename from client/src/locales/cs/login.js rename to client/src/locales/cs-CZ/login.js diff --git a/client/src/locales/da/core.js b/client/src/locales/da-DK/core.js similarity index 100% rename from client/src/locales/da/core.js rename to client/src/locales/da-DK/core.js diff --git a/client/src/locales/da/index.js b/client/src/locales/da-DK/index.js similarity index 83% rename from client/src/locales/da/index.js rename to client/src/locales/da-DK/index.js index 9fcfa709..937f5ae4 100644 --- a/client/src/locales/da/index.js +++ b/client/src/locales/da-DK/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'da', + language: 'da-DK', country: 'dk', name: 'Dansk', embeddedLocale: login, diff --git a/client/src/locales/da/login.js b/client/src/locales/da-DK/login.js similarity index 100% rename from client/src/locales/da/login.js rename to client/src/locales/da-DK/login.js diff --git a/client/src/locales/de/core.js b/client/src/locales/de-DE/core.js similarity index 100% rename from client/src/locales/de/core.js rename to client/src/locales/de-DE/core.js diff --git a/client/src/locales/de/index.js b/client/src/locales/de-DE/index.js similarity index 84% rename from client/src/locales/de/index.js rename to client/src/locales/de-DE/index.js index fc655946..2eb9ea7b 100644 --- a/client/src/locales/de/index.js +++ b/client/src/locales/de-DE/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'de', + language: 'de-DE', country: 'de', name: 'Deutsch', embeddedLocale: login, diff --git a/client/src/locales/de/login.js b/client/src/locales/de-DE/login.js similarity index 100% rename from client/src/locales/de/login.js rename to client/src/locales/de-DE/login.js diff --git a/client/src/locales/en/core.js b/client/src/locales/en-US/core.js similarity index 100% rename from client/src/locales/en/core.js rename to client/src/locales/en-US/core.js diff --git a/client/src/locales/en/index.js b/client/src/locales/en-US/index.js similarity index 81% rename from client/src/locales/en/index.js rename to client/src/locales/en-US/index.js index 73cf0522..3aea6da7 100644 --- a/client/src/locales/en/index.js +++ b/client/src/locales/en-US/index.js @@ -4,8 +4,8 @@ import login from './login'; import core from './core'; export default { - language: 'en', - country: 'gb', + language: 'en-US', + country: 'us', name: 'English', embeddedLocale: merge(login, core), }; diff --git a/client/src/locales/en/login.js b/client/src/locales/en-US/login.js similarity index 100% rename from client/src/locales/en/login.js rename to client/src/locales/en-US/login.js diff --git a/client/src/locales/es/core.js b/client/src/locales/es-ES/core.js similarity index 100% rename from client/src/locales/es/core.js rename to client/src/locales/es-ES/core.js diff --git a/client/src/locales/es/index.js b/client/src/locales/es-ES/index.js similarity index 84% rename from client/src/locales/es/index.js rename to client/src/locales/es-ES/index.js index bda1fe81..d853b3df 100644 --- a/client/src/locales/es/index.js +++ b/client/src/locales/es-ES/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'es', + language: 'es-ES', country: 'es', name: 'Español', embeddedLocale: login, diff --git a/client/src/locales/es/login.js b/client/src/locales/es-ES/login.js similarity index 100% rename from client/src/locales/es/login.js rename to client/src/locales/es-ES/login.js diff --git a/client/src/locales/fa/core.js b/client/src/locales/fa-IR/core.js similarity index 100% rename from client/src/locales/fa/core.js rename to client/src/locales/fa-IR/core.js diff --git a/client/src/locales/fa/index.js b/client/src/locales/fa-IR/index.js similarity index 84% rename from client/src/locales/fa/index.js rename to client/src/locales/fa-IR/index.js index a03206be..62024311 100644 --- a/client/src/locales/fa/index.js +++ b/client/src/locales/fa-IR/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'fa', + language: 'fa-IR', country: 'ir', name: 'فارسی', embeddedLocale: login, diff --git a/client/src/locales/fa/login.js b/client/src/locales/fa-IR/login.js similarity index 100% rename from client/src/locales/fa/login.js rename to client/src/locales/fa-IR/login.js diff --git a/client/src/locales/fr/core.js b/client/src/locales/fr-FR/core.js similarity index 100% rename from client/src/locales/fr/core.js rename to client/src/locales/fr-FR/core.js diff --git a/client/src/locales/fr/index.js b/client/src/locales/fr-FR/index.js similarity index 84% rename from client/src/locales/fr/index.js rename to client/src/locales/fr-FR/index.js index 945c1bc3..58933341 100644 --- a/client/src/locales/fr/index.js +++ b/client/src/locales/fr-FR/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'fr', + language: 'fr-FR', country: 'fr', name: 'Français', embeddedLocale: login, diff --git a/client/src/locales/fr/login.js b/client/src/locales/fr-FR/login.js similarity index 100% rename from client/src/locales/fr/login.js rename to client/src/locales/fr-FR/login.js diff --git a/client/src/locales/hu/core.js b/client/src/locales/hu-HU/core.js similarity index 100% rename from client/src/locales/hu/core.js rename to client/src/locales/hu-HU/core.js diff --git a/client/src/locales/hu/index.js b/client/src/locales/hu-HU/index.js similarity index 83% rename from client/src/locales/hu/index.js rename to client/src/locales/hu-HU/index.js index 17e618ee..8b0ccdb5 100644 --- a/client/src/locales/hu/index.js +++ b/client/src/locales/hu-HU/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'hu', + language: 'hu-HU', country: 'hu', name: 'Magyar', embeddedLocale: login, diff --git a/client/src/locales/hu/login.js b/client/src/locales/hu-HU/login.js similarity index 100% rename from client/src/locales/hu/login.js rename to client/src/locales/hu-HU/login.js diff --git a/client/src/locales/id/core.js b/client/src/locales/id-ID/core.js similarity index 100% rename from client/src/locales/id/core.js rename to client/src/locales/id-ID/core.js diff --git a/client/src/locales/id/index.js b/client/src/locales/id-ID/index.js similarity index 85% rename from client/src/locales/id/index.js rename to client/src/locales/id-ID/index.js index 42801f31..e739c696 100644 --- a/client/src/locales/id/index.js +++ b/client/src/locales/id-ID/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'id', + language: 'id-ID', country: 'id', name: 'Bahasa Indonesia', embeddedLocale: login, diff --git a/client/src/locales/id/login.js b/client/src/locales/id-ID/login.js similarity index 100% rename from client/src/locales/id/login.js rename to client/src/locales/id-ID/login.js diff --git a/client/src/locales/index.js b/client/src/locales/index.js index 3f8175eb..bcc7eea3 100644 --- a/client/src/locales/index.js +++ b/client/src/locales/index.js @@ -1,53 +1,53 @@ -import bg from './bg'; -import cs from './cs'; -import da from './da'; -import de from './de'; -import en from './en'; -import es from './es'; -import fa from './fa'; -import fr from './fr'; -import hu from './hu'; -import id from './id'; -import it from './it'; -import ja from './ja'; -import ko from './ko'; -import nl from './nl'; -import pl from './pl'; -import pt from './pt'; -import ro from './ro'; -import ru from './ru'; -import sk from './sk'; -import sv from './sv'; -import tr from './tr'; -import ua from './ua'; -import uz from './uz'; -import zh from './zh'; +import bgBG from './bg-BG'; +import csCZ from './cs-CZ'; +import daDK from './da-DK'; +import deDE from './de-DE'; +import enUS from './en-US'; +import esES from './es-ES'; +import faIR from './fa-IR'; +import frFR from './fr-FR'; +import huHU from './hu-HU'; +import idID from './id-ID'; +import itIT from './it-IT'; +import jaJP from './ja-JP'; +import koKR from './ko-KR'; +import nlNL from './nl-NL'; +import plPL from './pl-PL'; +import ptBR from './pt-BR'; +import roRO from './ro-RO'; +import ruRU from './ru-RU'; +import skSK from './sk-SK'; +import svSE from './sv-SE'; +import trTR from './tr-TR'; +import ukUA from './uk-UA'; +import uzUZ from './uz-UZ'; +import zhCN from './zh-CN'; const locales = [ - bg, - cs, - da, - de, - en, - es, - fa, - fr, - hu, - id, - it, - ja, - ko, - nl, - pl, - pt, - ro, - ru, - sk, - sv, - tr, - ua, - uz, - zh, + bgBG, + csCZ, + daDK, + deDE, + enUS, + esES, + faIR, + frFR, + huHU, + idID, + itIT, + jaJP, + koKR, + nlNL, + plPL, + ptBR, + roRO, + ruRU, + skSK, + svSE, + trTR, + ukUA, + uzUZ, + zhCN, ]; export default locales; diff --git a/client/src/locales/it/core.js b/client/src/locales/it-IT/core.js similarity index 99% rename from client/src/locales/it/core.js rename to client/src/locales/it-IT/core.js index 1afb8926..f503c6d0 100644 --- a/client/src/locales/it/core.js +++ b/client/src/locales/it-IT/core.js @@ -1,4 +1,8 @@ +import dateFns from 'date-fns/locale/it'; + export default { + dateFns, + format: { date: 'd/M/yyyy', time: 'p', diff --git a/client/src/locales/it/index.js b/client/src/locales/it-IT/index.js similarity index 84% rename from client/src/locales/it/index.js rename to client/src/locales/it-IT/index.js index bc01113b..8f64a9a6 100644 --- a/client/src/locales/it/index.js +++ b/client/src/locales/it-IT/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'it', + language: 'it-IT', country: 'it', name: 'Italiano', embeddedLocale: login, diff --git a/client/src/locales/it/login.js b/client/src/locales/it-IT/login.js similarity index 100% rename from client/src/locales/it/login.js rename to client/src/locales/it-IT/login.js diff --git a/client/src/locales/ja/core.js b/client/src/locales/ja-JP/core.js similarity index 100% rename from client/src/locales/ja/core.js rename to client/src/locales/ja-JP/core.js diff --git a/client/src/locales/ja/index.js b/client/src/locales/ja-JP/index.js similarity index 84% rename from client/src/locales/ja/index.js rename to client/src/locales/ja-JP/index.js index b33d7c46..a196e3ff 100644 --- a/client/src/locales/ja/index.js +++ b/client/src/locales/ja-JP/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'ja', + language: 'ja-JP', country: 'jp', name: '日本語', embeddedLocale: login, diff --git a/client/src/locales/ja/login.js b/client/src/locales/ja-JP/login.js similarity index 100% rename from client/src/locales/ja/login.js rename to client/src/locales/ja-JP/login.js diff --git a/client/src/locales/ko/core.js b/client/src/locales/ko-KR/core.js similarity index 100% rename from client/src/locales/ko/core.js rename to client/src/locales/ko-KR/core.js diff --git a/client/src/locales/ko/index.js b/client/src/locales/ko-KR/index.js similarity index 84% rename from client/src/locales/ko/index.js rename to client/src/locales/ko-KR/index.js index d0eb9bf0..55970aa5 100644 --- a/client/src/locales/ko/index.js +++ b/client/src/locales/ko-KR/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'ko', + language: 'ko-KR', country: 'kr', name: '한국어', embeddedLocale: login, diff --git a/client/src/locales/ko/login.js b/client/src/locales/ko-KR/login.js similarity index 100% rename from client/src/locales/ko/login.js rename to client/src/locales/ko-KR/login.js diff --git a/client/src/locales/nl/core.js b/client/src/locales/nl-NL/core.js similarity index 100% rename from client/src/locales/nl/core.js rename to client/src/locales/nl-NL/core.js diff --git a/client/src/locales/nl/index.js b/client/src/locales/nl-NL/index.js similarity index 84% rename from client/src/locales/nl/index.js rename to client/src/locales/nl-NL/index.js index 6e24c664..f7f03eb4 100644 --- a/client/src/locales/nl/index.js +++ b/client/src/locales/nl-NL/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'nl', + language: 'nl-NL', country: 'nl', name: 'Nederlands', embeddedLocale: login, diff --git a/client/src/locales/nl/login.js b/client/src/locales/nl-NL/login.js similarity index 100% rename from client/src/locales/nl/login.js rename to client/src/locales/nl-NL/login.js diff --git a/client/src/locales/pl/core.js b/client/src/locales/pl-PL/core.js similarity index 100% rename from client/src/locales/pl/core.js rename to client/src/locales/pl-PL/core.js diff --git a/client/src/locales/pl/index.js b/client/src/locales/pl-PL/index.js similarity index 83% rename from client/src/locales/pl/index.js rename to client/src/locales/pl-PL/index.js index 73a9a66b..33ab45c7 100644 --- a/client/src/locales/pl/index.js +++ b/client/src/locales/pl-PL/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'pl', + language: 'pl-PL', country: 'pl', name: 'Polski', embeddedLocale: login, diff --git a/client/src/locales/pl/login.js b/client/src/locales/pl-PL/login.js similarity index 100% rename from client/src/locales/pl/login.js rename to client/src/locales/pl-PL/login.js diff --git a/client/src/locales/pt/core.js b/client/src/locales/pt-BR/core.js similarity index 100% rename from client/src/locales/pt/core.js rename to client/src/locales/pt-BR/core.js diff --git a/client/src/locales/pt/index.js b/client/src/locales/pt-BR/index.js similarity index 84% rename from client/src/locales/pt/index.js rename to client/src/locales/pt-BR/index.js index b3c867f7..56bac4c7 100644 --- a/client/src/locales/pt/index.js +++ b/client/src/locales/pt-BR/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'pt', + language: 'pt-BR', country: 'br', name: 'Português', embeddedLocale: login, diff --git a/client/src/locales/pt/login.js b/client/src/locales/pt-BR/login.js similarity index 100% rename from client/src/locales/pt/login.js rename to client/src/locales/pt-BR/login.js diff --git a/client/src/locales/ro/core.js b/client/src/locales/ro-RO/core.js similarity index 100% rename from client/src/locales/ro/core.js rename to client/src/locales/ro-RO/core.js diff --git a/client/src/locales/ro/index.js b/client/src/locales/ro-RO/index.js similarity index 84% rename from client/src/locales/ro/index.js rename to client/src/locales/ro-RO/index.js index b10ed81d..b34d44ab 100644 --- a/client/src/locales/ro/index.js +++ b/client/src/locales/ro-RO/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'ro', + language: 'ro-RO', country: 'ro', name: 'Română', embeddedLocale: login, diff --git a/client/src/locales/ro/login.js b/client/src/locales/ro-RO/login.js similarity index 100% rename from client/src/locales/ro/login.js rename to client/src/locales/ro-RO/login.js diff --git a/client/src/locales/ru/core.js b/client/src/locales/ru-RU/core.js similarity index 100% rename from client/src/locales/ru/core.js rename to client/src/locales/ru-RU/core.js diff --git a/client/src/locales/ru/index.js b/client/src/locales/ru-RU/index.js similarity index 84% rename from client/src/locales/ru/index.js rename to client/src/locales/ru-RU/index.js index 1ffb7e0c..8c3b7914 100644 --- a/client/src/locales/ru/index.js +++ b/client/src/locales/ru-RU/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'ru', + language: 'ru-RU', country: 'ru', name: 'Русский', embeddedLocale: login, diff --git a/client/src/locales/ru/login.js b/client/src/locales/ru-RU/login.js similarity index 100% rename from client/src/locales/ru/login.js rename to client/src/locales/ru-RU/login.js diff --git a/client/src/locales/sk/core.js b/client/src/locales/sk-SK/core.js similarity index 100% rename from client/src/locales/sk/core.js rename to client/src/locales/sk-SK/core.js diff --git a/client/src/locales/sk/index.js b/client/src/locales/sk-SK/index.js similarity index 84% rename from client/src/locales/sk/index.js rename to client/src/locales/sk-SK/index.js index ad9c4046..3a0837b1 100644 --- a/client/src/locales/sk/index.js +++ b/client/src/locales/sk-SK/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'sk', + language: 'sk-SK', country: 'sk', name: 'Slovenčina', embeddedLocale: login, diff --git a/client/src/locales/sk/login.js b/client/src/locales/sk-SK/login.js similarity index 100% rename from client/src/locales/sk/login.js rename to client/src/locales/sk-SK/login.js diff --git a/client/src/locales/sv/core.js b/client/src/locales/sv-SE/core.js similarity index 100% rename from client/src/locales/sv/core.js rename to client/src/locales/sv-SE/core.js diff --git a/client/src/locales/sv/index.js b/client/src/locales/sv-SE/index.js similarity index 84% rename from client/src/locales/sv/index.js rename to client/src/locales/sv-SE/index.js index d3b043d0..d5459e59 100644 --- a/client/src/locales/sv/index.js +++ b/client/src/locales/sv-SE/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'sv', + language: 'sv-SE', country: 'se', name: 'Svenska', embeddedLocale: login, diff --git a/client/src/locales/sv/login.js b/client/src/locales/sv-SE/login.js similarity index 100% rename from client/src/locales/sv/login.js rename to client/src/locales/sv-SE/login.js diff --git a/client/src/locales/tr/core.js b/client/src/locales/tr-TR/core.js similarity index 100% rename from client/src/locales/tr/core.js rename to client/src/locales/tr-TR/core.js diff --git a/client/src/locales/tr/index.js b/client/src/locales/tr-TR/index.js similarity index 84% rename from client/src/locales/tr/index.js rename to client/src/locales/tr-TR/index.js index 5af65ff1..79e6c4ba 100644 --- a/client/src/locales/tr/index.js +++ b/client/src/locales/tr-TR/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'tr', + language: 'tr-TR', country: 'tr', name: 'Türkçe', embeddedLocale: login, diff --git a/client/src/locales/tr/login.js b/client/src/locales/tr-TR/login.js similarity index 100% rename from client/src/locales/tr/login.js rename to client/src/locales/tr-TR/login.js diff --git a/client/src/locales/ua/core.js b/client/src/locales/uk-UA/core.js similarity index 99% rename from client/src/locales/ua/core.js rename to client/src/locales/uk-UA/core.js index d1860325..eb3063a5 100644 --- a/client/src/locales/ua/core.js +++ b/client/src/locales/uk-UA/core.js @@ -1,4 +1,8 @@ +import dateFns from 'date-fns/locale/uk'; + export default { + dateFns, + format: { date: 'd/M/yyyy', time: 'p', diff --git a/client/src/locales/ua/index.js b/client/src/locales/uk-UA/index.js similarity index 85% rename from client/src/locales/ua/index.js rename to client/src/locales/uk-UA/index.js index 0190368d..1255afcb 100644 --- a/client/src/locales/ua/index.js +++ b/client/src/locales/uk-UA/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'ua', + language: 'uk-UA', country: 'ua', name: 'Українська', embeddedLocale: login, diff --git a/client/src/locales/ua/login.js b/client/src/locales/uk-UA/login.js similarity index 100% rename from client/src/locales/ua/login.js rename to client/src/locales/uk-UA/login.js diff --git a/client/src/locales/uz/core.js b/client/src/locales/uz-UZ/core.js similarity index 99% rename from client/src/locales/uz/core.js rename to client/src/locales/uz-UZ/core.js index 084de78e..f2d080c8 100644 --- a/client/src/locales/uz/core.js +++ b/client/src/locales/uz-UZ/core.js @@ -1,4 +1,8 @@ +import dateFns from 'date-fns/locale/uz'; + export default { + dateFns, + format: { date: 'M/d/yyyy', time: 'p', diff --git a/client/src/locales/uz/index.js b/client/src/locales/uz-UZ/index.js similarity index 83% rename from client/src/locales/uz/index.js rename to client/src/locales/uz-UZ/index.js index 6ecec3c6..a023b970 100644 --- a/client/src/locales/uz/index.js +++ b/client/src/locales/uz-UZ/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'uz', + language: 'uz-UZ', country: 'uz', name: "O'zbek", embeddedLocale: login, diff --git a/client/src/locales/uz/login.js b/client/src/locales/uz-UZ/login.js similarity index 100% rename from client/src/locales/uz/login.js rename to client/src/locales/uz-UZ/login.js diff --git a/client/src/locales/zh/core.js b/client/src/locales/zh-CN/core.js similarity index 99% rename from client/src/locales/zh/core.js rename to client/src/locales/zh-CN/core.js index 95ae46c3..58e03d86 100644 --- a/client/src/locales/zh/core.js +++ b/client/src/locales/zh-CN/core.js @@ -1,4 +1,8 @@ +import dateFns from 'date-fns/locale/zh-CN'; + export default { + dateFns, + format: { date: 'M/d/yyyy', time: 'p', diff --git a/client/src/locales/zh/index.js b/client/src/locales/zh-CN/index.js similarity index 83% rename from client/src/locales/zh/index.js rename to client/src/locales/zh-CN/index.js index aa5c15eb..892340e8 100644 --- a/client/src/locales/zh/index.js +++ b/client/src/locales/zh-CN/index.js @@ -1,7 +1,7 @@ import login from './login'; export default { - language: 'zh', + language: 'zh-CN', country: 'cn', name: '中文', embeddedLocale: login, diff --git a/client/src/locales/zh/login.js b/client/src/locales/zh-CN/login.js similarity index 100% rename from client/src/locales/zh/login.js rename to client/src/locales/zh-CN/login.js diff --git a/server/api/controllers/users/create.js b/server/api/controllers/users/create.js index d1dc4a68..dc76b31f 100755 --- a/server/api/controllers/users/create.js +++ b/server/api/controllers/users/create.js @@ -50,7 +50,7 @@ module.exports = { }, language: { type: 'string', - isNotEmptyString: true, + isIn: User.LANGUAGES, allowNull: true, }, subscribeToOwnCards: { diff --git a/server/api/controllers/users/update.js b/server/api/controllers/users/update.js index a8e6215e..a46a2f7f 100755 --- a/server/api/controllers/users/update.js +++ b/server/api/controllers/users/update.js @@ -36,7 +36,7 @@ module.exports = { }, language: { type: 'string', - isNotEmptyString: true, + isIn: User.LANGUAGES, allowNull: true, }, subscribeToOwnCards: { diff --git a/server/api/models/User.js b/server/api/models/User.js index 09034437..486a66b2 100755 --- a/server/api/models/User.js +++ b/server/api/models/User.js @@ -5,11 +5,39 @@ * @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models */ +const LANGUAGES = [ + 'bg-BG', + 'cs-CZ', + 'da-DK', + 'de-DE', + 'en-US', + 'es-ES', + 'fa-IR', + 'fr-FR', + 'hu-HU', + 'id-ID', + 'it-IT', + 'ja-JP', + 'ko-KR', + 'nl-NL', + 'pl-PL', + 'pt-BR', + 'ro-RO', + 'ru-RU', + 'sk-SK', + 'sv-SE', + 'tr-TR', + 'uk-UA', + 'uz-UZ', + 'zh-CN', +]; + const OIDC = { id: '_oidc', }; module.exports = { + LANGUAGES, OIDC, attributes: { @@ -62,7 +90,7 @@ module.exports = { }, language: { type: 'string', - isNotEmptyString: true, + isIn: LANGUAGES, allowNull: true, }, subscribeToOwnCards: { diff --git a/server/db/migrations/20220523131229_add_image_to_attachment_table.js b/server/db/migrations/20220523131229_add_image_to_attachment_table.js index 989f6957..25d6f62f 100644 --- a/server/db/migrations/20220523131229_add_image_to_attachment_table.js +++ b/server/db/migrations/20220523131229_add_image_to_attachment_table.js @@ -15,7 +15,7 @@ module.exports.up = async (knex) => { const attachments = await knex('attachment'); // eslint-disable-next-line no-restricted-syntax - for (attachment of attachments) { + for (const attachment of attachments) { if (attachment.is_image) { const image = sharp( path.join(config.custom.attachmentsPath, attachment.dirname, attachment.filename), @@ -54,7 +54,7 @@ module.exports.down = async (knex) => { const attachments = await knex('attachment'); // eslint-disable-next-line no-restricted-syntax - for (attachment of attachments) { + for (const attachment of attachments) { // eslint-disable-next-line no-await-in-loop await knex('attachment') .update({ diff --git a/server/db/migrations/20221223131625_preserve_original_format_of_images.js b/server/db/migrations/20221223131625_preserve_original_format_of_images.js index de2ec07c..f78762d2 100644 --- a/server/db/migrations/20221223131625_preserve_original_format_of_images.js +++ b/server/db/migrations/20221223131625_preserve_original_format_of_images.js @@ -93,7 +93,7 @@ module.exports.up = async (knex) => { const attachments = await knex('attachment').whereNotNull('image'); // eslint-disable-next-line no-restricted-syntax - for (attachment of attachments) { + for (const attachment of attachments) { // eslint-disable-next-line no-await-in-loop const image = await processAttachmentImage(attachment, config.custom.attachmentsPath); diff --git a/server/db/migrations/20221226210239_improve_quality_of_resized_images.js b/server/db/migrations/20221226210239_improve_quality_of_resized_images.js index fed01d40..b6e1e23c 100644 --- a/server/db/migrations/20221226210239_improve_quality_of_resized_images.js +++ b/server/db/migrations/20221226210239_improve_quality_of_resized_images.js @@ -113,7 +113,7 @@ module.exports.up = async (knex) => { const users = await knex('user_account').whereNotNull('avatar'); // eslint-disable-next-line no-restricted-syntax - for (user of users) { + for (const user of users) { // eslint-disable-next-line no-await-in-loop await processUserAvatar(user, config.custom.userAvatarsPath); } @@ -121,7 +121,7 @@ module.exports.up = async (knex) => { const projects = await knex('project').whereNotNull('background_image'); // eslint-disable-next-line no-restricted-syntax - for (project of projects) { + for (const project of projects) { // eslint-disable-next-line no-await-in-loop await processProjectBackgroundImage(project, config.custom.projectBackgroundImagesPath); } @@ -129,7 +129,7 @@ module.exports.up = async (knex) => { const attachments = await knex('attachment').whereNotNull('image'); // eslint-disable-next-line no-restricted-syntax - for (attachment of attachments) { + for (const attachment of attachments) { // eslint-disable-next-line no-await-in-loop await processAttachmentImage(attachment, config.custom.attachmentsPath); } diff --git a/server/db/migrations/20240721171239_languages_with_country_codes.js b/server/db/migrations/20240721171239_languages_with_country_codes.js new file mode 100644 index 00000000..083dae91 --- /dev/null +++ b/server/db/migrations/20240721171239_languages_with_country_codes.js @@ -0,0 +1,68 @@ +const _ = require('lodash'); + +const LANGUAGES = [ + 'bg-BG', + 'cs-CZ', + 'da-DK', + 'de-DE', + 'en-US', + 'es-ES', + 'fa-IR', + 'fr-FR', + 'hu-HU', + 'id-ID', + 'it-IT', + 'ja-JP', + 'ko-KR', + 'nl-NL', + 'pl-PL', + 'pt-BR', + 'ro-RO', + 'ru-RU', + 'sk-SK', + 'sv-SE', + 'tr-TR', + 'uz-UZ', + 'zh-CN', +]; + +const LANGUAGE_BY_PREV_LANGUAGE = LANGUAGES.reduce( + (result, language) => ({ + ...result, + [language.split('-')[0]]: language, + }), + {}, +); +LANGUAGE_BY_PREV_LANGUAGE.ua = 'uk-UA'; + +const PREV_LANGUAGE_BY_LANGUAGE = _.invert(LANGUAGE_BY_PREV_LANGUAGE); + +module.exports.up = async (knex) => { + const users = await knex('user_account').whereNotNull('language'); + const prevLanguages = [...new Set(users.map((user) => user.language))]; + + // eslint-disable-next-line no-restricted-syntax + for (const prevLanguage of prevLanguages) { + // eslint-disable-next-line no-await-in-loop + await knex('user_account') + .update({ + language: LANGUAGE_BY_PREV_LANGUAGE[prevLanguage], + }) + .where('language', prevLanguage); + } +}; + +module.exports.down = async (knex) => { + const users = await knex('user_account').whereNotNull('language'); + const languages = [...new Set(users.map((user) => user.language))]; + + // eslint-disable-next-line no-restricted-syntax + for (const language of languages) { + // eslint-disable-next-line no-await-in-loop + await knex('user_account') + .update({ + language: PREV_LANGUAGE_BY_LANGUAGE[language], + }) + .where('language', language); + } +};