diff --git a/client/src/components/users/UserSettingsModal/AccountPane/AccountPane.jsx b/client/src/components/users/UserSettingsModal/AccountPane/AccountPane.jsx index b7ecceff..d9a2907d 100644 --- a/client/src/components/users/UserSettingsModal/AccountPane/AccountPane.jsx +++ b/client/src/components/users/UserSettingsModal/AccountPane/AccountPane.jsx @@ -29,8 +29,7 @@ const AccountPane = React.memo(() => { const handleLanguageChange = useCallback( (_, { value }) => { - // FIXME: hack - dispatch(entryActions.updateCurrentUserLanguage(value === 'auto' ? null : value)); + dispatch(entryActions.updateCurrentUserLanguage(value)); }, [dispatch], ); @@ -62,18 +61,12 @@ const AccountPane = React.memo(() => { ({ - value: locale.language, - flag: locale.country, - text: locale.name, - })), - ]} - value={user.language || 'auto'} + options={locales.map((locale) => ({ + value: locale.language, + flag: locale.country, + text: locale.name, + }))} + value={user.language} onChange={handleLanguageChange} /> {(isUsernameEditable || isEmailEditable || isPasswordEditable) && ( diff --git a/client/src/i18n.js b/client/src/i18n.js index b91e469f..8e32e97e 100644 --- a/client/src/i18n.js +++ b/client/src/i18n.js @@ -151,7 +151,7 @@ i18n.loadCoreLocale = async (language = i18n.resolvedLanguage) => { }); }; -i18n.detectLanguage = () => { +/* i18n.detectLanguage = () => { const { services: { languageDetector, languageUtils }, } = i18n; @@ -164,6 +164,6 @@ i18n.detectLanguage = () => { i18n.resolvedLanguage = undefined; i18n.setResolvedLanguage(i18n.language); -}; +}; */ export default i18n; diff --git a/client/src/locales/ar-YE/core.js b/client/src/locales/ar-YE/core.js index baebbb90..da5902f1 100644 --- a/client/src/locales/ar-YE/core.js +++ b/client/src/locales/ar-YE/core.js @@ -142,7 +142,6 @@ export default { deleteWebhook_title: null, deletedUser_title: null, description: 'الوصف', - detectAutomatically: 'الكشف تلقائياً', display: null, dropFileToUpload: 'أفلت الملف لرفعه', dueDate_title: 'تاريخ الاستحقاق', diff --git a/client/src/locales/bg-BG/core.js b/client/src/locales/bg-BG/core.js index daad8787..4acd67d6 100644 --- a/client/src/locales/bg-BG/core.js +++ b/client/src/locales/bg-BG/core.js @@ -146,7 +146,6 @@ export default { deleteWebhook_title: null, deletedUser_title: null, description: 'Описание', - detectAutomatically: 'Aвтоматично откриване', display: null, dropFileToUpload: 'Пуснете файл за качване', dueDate_title: 'Краен срок', diff --git a/client/src/locales/cs-CZ/core.js b/client/src/locales/cs-CZ/core.js index 32596553..9b10a9e7 100644 --- a/client/src/locales/cs-CZ/core.js +++ b/client/src/locales/cs-CZ/core.js @@ -156,7 +156,6 @@ export default { deleteWebhook_title: 'Smazat webhook', deletedUser_title: 'Smazaný uživatel', description: 'Popis', - detectAutomatically: 'Automatická detekce', display: 'Zobrazit', dropFileToUpload: 'Přetažením nahrát soubor', dueDate_title: 'Termín', diff --git a/client/src/locales/da-DK/core.js b/client/src/locales/da-DK/core.js index a6573252..b946657e 100644 --- a/client/src/locales/da-DK/core.js +++ b/client/src/locales/da-DK/core.js @@ -161,7 +161,6 @@ export default { deleteWebhook_title: null, deletedUser_title: 'Slettet bruger', description: 'Beskrivelse', - detectAutomatically: 'Registrer automatisk', display: 'Vis', dropFileToUpload: 'Slip fil for at uploade', dueDate_title: 'Frist', diff --git a/client/src/locales/de-DE/core.js b/client/src/locales/de-DE/core.js index 3d6ba762..1fd7d43b 100644 --- a/client/src/locales/de-DE/core.js +++ b/client/src/locales/de-DE/core.js @@ -170,7 +170,6 @@ export default { deleteWebhook_title: null, deletedUser_title: 'Gelöschter Benutzer', description: 'Beschreibung', - detectAutomatically: 'Automatisch erkennen', display: 'Anzeige', dropFileToUpload: 'Datei für Upload ablegen', dueDate_title: 'Fälligkeitsdatum', diff --git a/client/src/locales/el-GR/core.js b/client/src/locales/el-GR/core.js index a41e2ea0..34078f4e 100644 --- a/client/src/locales/el-GR/core.js +++ b/client/src/locales/el-GR/core.js @@ -171,7 +171,6 @@ export default { deleteWebhook_title: null, deletedUser_title: 'Διαγραμμένος χρήστης', description: 'Περιγραφή', - detectAutomatically: 'Αυτόματη ανίχνευση', display: 'Εμφάνιση', dropFileToUpload: 'Σύρετε το αρχείο για μεταφόρτωση', dueDate_title: 'Ημερομηνία λήξης', diff --git a/client/src/locales/en-GB/core.js b/client/src/locales/en-GB/core.js index 7029887a..e6d11407 100644 --- a/client/src/locales/en-GB/core.js +++ b/client/src/locales/en-GB/core.js @@ -160,7 +160,6 @@ export default { deleteWebhook_title: 'Delete Webhook', deletedUser_title: 'Deleted User', description: 'Description', - detectAutomatically: 'Detect automatically', display: 'Display', dropFileToUpload: 'Drop file to upload', dueDate_title: 'Due Date', diff --git a/client/src/locales/en-US/core.js b/client/src/locales/en-US/core.js index 7caa7655..c207e379 100644 --- a/client/src/locales/en-US/core.js +++ b/client/src/locales/en-US/core.js @@ -155,7 +155,6 @@ export default { deleteWebhook_title: 'Delete Webhook', deletedUser_title: 'Deleted User', description: 'Description', - detectAutomatically: 'Detect automatically', display: 'Display', dropFileToUpload: 'Drop file to upload', dueDate_title: 'Due Date', diff --git a/client/src/locales/es-ES/core.js b/client/src/locales/es-ES/core.js index d3b43f3a..ca6f59b7 100644 --- a/client/src/locales/es-ES/core.js +++ b/client/src/locales/es-ES/core.js @@ -166,7 +166,6 @@ export default { deleteWebhook_title: 'Eliminar webhook', deletedUser_title: 'Usuario eliminado', description: 'Descripción', - detectAutomatically: 'Detectar automáticamente', display: 'Mostrar', dropFileToUpload: 'Arrastra archivo para subir', dueDate_title: 'Fecha de vencimiento', diff --git a/client/src/locales/et-EE/core.js b/client/src/locales/et-EE/core.js index c3f91371..5d8da310 100644 --- a/client/src/locales/et-EE/core.js +++ b/client/src/locales/et-EE/core.js @@ -160,7 +160,6 @@ export default { deleteWebhook_title: null, deletedUser_title: 'Kustutatud kasutaja', description: 'Kirjeldus', - detectAutomatically: 'Tuletage automaatselt', display: 'Kuva', dropFileToUpload: 'Lase faili üleslaadida', dueDate_title: 'Tähtaeg', diff --git a/client/src/locales/fa-IR/core.js b/client/src/locales/fa-IR/core.js index c13777d4..1376702d 100644 --- a/client/src/locales/fa-IR/core.js +++ b/client/src/locales/fa-IR/core.js @@ -143,7 +143,6 @@ export default { deleteWebhook_title: null, deletedUser_title: null, description: 'توضیحات', - detectAutomatically: 'تشخیص خودکار', display: null, dropFileToUpload: 'فایل را برای آپلود بکشید', dueDate_title: 'تاریخ سررسید', diff --git a/client/src/locales/fi-FI/core.js b/client/src/locales/fi-FI/core.js index 2789a3b6..84bdfe29 100644 --- a/client/src/locales/fi-FI/core.js +++ b/client/src/locales/fi-FI/core.js @@ -156,7 +156,6 @@ export default { deleteWebhook_title: null, deletedUser_title: 'Poistettu käyttäjä', description: 'Kuvaus', - detectAutomatically: 'Tunnista automaattisesti', display: 'Näyttö', dropFileToUpload: 'Pudota tiedosto ladattavaksi', dueDate_title: 'Määräpäivä', diff --git a/client/src/locales/fr-FR/core.js b/client/src/locales/fr-FR/core.js index 9d6652bb..d616bd97 100644 --- a/client/src/locales/fr-FR/core.js +++ b/client/src/locales/fr-FR/core.js @@ -164,7 +164,6 @@ export default { deleteWebhook_title: 'Supprimer le webhook', deletedUser_title: 'Utilisateur supprimé', description: 'Description', - detectAutomatically: 'Détecter automatiquement', display: 'Affichage', dropFileToUpload: 'Déposer le fichier à télécharger', dueDate_title: "Date d'échéance", diff --git a/client/src/locales/hu-HU/core.js b/client/src/locales/hu-HU/core.js index e6481d34..643af174 100644 --- a/client/src/locales/hu-HU/core.js +++ b/client/src/locales/hu-HU/core.js @@ -153,7 +153,6 @@ export default { deleteWebhook_title: 'Webhook törlése', deletedUser_title: 'Törölt felhasználó', description: 'Leírás', - detectAutomatically: 'Automatikus érzékelés', display: 'Megjelenítés', dropFileToUpload: 'Dobja ide a fájlt a feltöltéshez', dueDate_title: 'Esedékesség dátuma', diff --git a/client/src/locales/id-ID/core.js b/client/src/locales/id-ID/core.js index 56409dc5..969ed16a 100644 --- a/client/src/locales/id-ID/core.js +++ b/client/src/locales/id-ID/core.js @@ -145,7 +145,6 @@ export default { deleteWebhook_title: null, deletedUser_title: null, description: 'Deskripsi', - detectAutomatically: 'Deteksi otomatis', display: null, dropFileToUpload: 'Tarik berkas untuk menggungah', dueDate_title: 'Tenggat Waktu', diff --git a/client/src/locales/it-IT/core.js b/client/src/locales/it-IT/core.js index 2e7e9d75..62f83807 100644 --- a/client/src/locales/it-IT/core.js +++ b/client/src/locales/it-IT/core.js @@ -162,7 +162,6 @@ export default { deleteWebhook_title: 'Elimina webhook', deletedUser_title: 'Utente eliminato', description: 'Descrizione', - detectAutomatically: 'Rileva automaticamente', display: 'Mostra', dropFileToUpload: 'Trascina il file da caricare', dueDate_title: 'Data di scadenza', diff --git a/client/src/locales/ja-JP/core.js b/client/src/locales/ja-JP/core.js index 29692950..755c9a2d 100644 --- a/client/src/locales/ja-JP/core.js +++ b/client/src/locales/ja-JP/core.js @@ -145,7 +145,6 @@ export default { deleteWebhook_title: null, deletedUser_title: null, description: '説明', - detectAutomatically: '自動的に検知', display: null, dropFileToUpload: 'ファイルをドロップしてアップロード', dueDate_title: '期限', diff --git a/client/src/locales/ko-KR/core.js b/client/src/locales/ko-KR/core.js index 11e1c0d9..4aca3976 100644 --- a/client/src/locales/ko-KR/core.js +++ b/client/src/locales/ko-KR/core.js @@ -143,7 +143,6 @@ export default { deleteWebhook_title: null, deletedUser_title: null, description: '설명', - detectAutomatically: '자동 감지', display: null, dropFileToUpload: '업로드할 파일을 드롭하세요', dueDate_title: '마감일', diff --git a/client/src/locales/nl-NL/core.js b/client/src/locales/nl-NL/core.js index 537ddbc4..97874641 100644 --- a/client/src/locales/nl-NL/core.js +++ b/client/src/locales/nl-NL/core.js @@ -145,7 +145,6 @@ export default { deleteWebhook_title: null, deletedUser_title: null, description: 'Beschrijving', - detectAutomatically: 'Automatisch detecteren', display: null, dropFileToUpload: 'Sleep bestand om te uploaden', dueDate_title: 'Vervaldatum', diff --git a/client/src/locales/pl-PL/core.js b/client/src/locales/pl-PL/core.js index a1a1f364..9c7410b4 100644 --- a/client/src/locales/pl-PL/core.js +++ b/client/src/locales/pl-PL/core.js @@ -152,7 +152,6 @@ export default { deleteWebhook_title: null, deletedUser_title: 'Usunięty Użytkownik', description: 'Opis', - detectAutomatically: 'Wykryj automatycznie', display: 'Wyświetlanie', dropFileToUpload: 'Upuść plik aby wgrać', dueDate_title: 'Termin', diff --git a/client/src/locales/pt-BR/core.js b/client/src/locales/pt-BR/core.js index 7f4d55f6..c094284e 100644 --- a/client/src/locales/pt-BR/core.js +++ b/client/src/locales/pt-BR/core.js @@ -162,7 +162,6 @@ export default { deleteWebhook_title: 'Excluir Webhook', deletedUser_title: 'Usuário Excluído', description: 'Descrição', - detectAutomatically: 'Detectar automaticamente', display: 'Exibir', dropFileToUpload: 'Solte o arquivo para enviar', dueDate_title: 'Data de Vencimento', diff --git a/client/src/locales/pt-PT/core.js b/client/src/locales/pt-PT/core.js index 10b52760..311b9ef0 100644 --- a/client/src/locales/pt-PT/core.js +++ b/client/src/locales/pt-PT/core.js @@ -146,7 +146,6 @@ export default { deleteWebhook_title: null, deletedUser_title: null, description: 'Descrição', - detectAutomatically: 'Detetar automaticamente', display: null, dropFileToUpload: 'Largue o ficheiro para carregar', dueDate_title: 'Data de Vencimento', diff --git a/client/src/locales/ro-RO/core.js b/client/src/locales/ro-RO/core.js index 4e85d53d..b3b18962 100644 --- a/client/src/locales/ro-RO/core.js +++ b/client/src/locales/ro-RO/core.js @@ -145,7 +145,6 @@ export default { deleteWebhook_title: null, deletedUser_title: null, description: 'Descriere', - detectAutomatically: 'Detectează automat', display: null, dropFileToUpload: 'Aruncă fișierul pentru a încărca', dueDate_title: 'Data scadentă', diff --git a/client/src/locales/ru-RU/core.js b/client/src/locales/ru-RU/core.js index 62b946ed..eeadec79 100644 --- a/client/src/locales/ru-RU/core.js +++ b/client/src/locales/ru-RU/core.js @@ -159,7 +159,6 @@ export default { deleteWebhook_title: null, deletedUser_title: 'Удалённый пользователь', description: 'Описание', - detectAutomatically: 'Определить автоматически', display: 'Отображение', dropFileToUpload: 'Перетяните файл, чтобы загрузить', dueDate_title: 'Срок исполнения', diff --git a/client/src/locales/sk-SK/core.js b/client/src/locales/sk-SK/core.js index de45ee96..33a8f5dc 100644 --- a/client/src/locales/sk-SK/core.js +++ b/client/src/locales/sk-SK/core.js @@ -145,7 +145,6 @@ export default { deleteWebhook_title: null, deletedUser_title: null, description: 'Popis', - detectAutomatically: null, display: null, dropFileToUpload: 'Potiahnutím nahraj súbor', dueDate_title: 'Termín do', diff --git a/client/src/locales/sr-Cyrl-RS/core.js b/client/src/locales/sr-Cyrl-RS/core.js index 3677bc05..38db32e5 100644 --- a/client/src/locales/sr-Cyrl-RS/core.js +++ b/client/src/locales/sr-Cyrl-RS/core.js @@ -145,7 +145,6 @@ export default { deleteWebhook_title: null, deletedUser_title: null, description: 'Опис', - detectAutomatically: 'Детектуј аутоматски', display: null, dropFileToUpload: 'Превуци датотеку за слање', dueDate_title: 'Рок', diff --git a/client/src/locales/sr-Latn-RS/core.js b/client/src/locales/sr-Latn-RS/core.js index 8e1a316e..e8cbb777 100644 --- a/client/src/locales/sr-Latn-RS/core.js +++ b/client/src/locales/sr-Latn-RS/core.js @@ -142,7 +142,6 @@ export default { deleteWebhook_title: null, deletedUser_title: null, description: 'Opis', - detectAutomatically: 'Detektuj automatski', display: null, dropFileToUpload: 'Prevuci datoteku za slanje', dueDate_title: 'Rok', diff --git a/client/src/locales/sv-SE/core.js b/client/src/locales/sv-SE/core.js index 5d91193c..c8ec4b36 100644 --- a/client/src/locales/sv-SE/core.js +++ b/client/src/locales/sv-SE/core.js @@ -144,7 +144,6 @@ export default { deleteWebhook_title: null, deletedUser_title: null, description: 'Beskrivning', - detectAutomatically: null, display: null, dropFileToUpload: 'Släpp en fil för att ladda upp', dueDate_title: 'Förfallodatum', diff --git a/client/src/locales/tr-TR/core.js b/client/src/locales/tr-TR/core.js index 81d0da6e..5e6cb934 100644 --- a/client/src/locales/tr-TR/core.js +++ b/client/src/locales/tr-TR/core.js @@ -142,7 +142,6 @@ export default { deleteWebhook_title: null, deletedUser_title: null, description: 'açıklama', - detectAutomatically: 'Otomatik olarak algıla', display: null, dropFileToUpload: 'Yüklenecek dosyayı buraya bırakın', dueDate_title: 'Termin Tarihi', diff --git a/client/src/locales/uk-UA/core.js b/client/src/locales/uk-UA/core.js index 791236a4..4cd4bb07 100644 --- a/client/src/locales/uk-UA/core.js +++ b/client/src/locales/uk-UA/core.js @@ -157,7 +157,6 @@ export default { deleteWebhook_title: 'Видалити вебхук', deletedUser_title: 'Видалений користувач', description: 'Опис', - detectAutomatically: 'Визначити автоматично', display: 'Дисплей', dropFileToUpload: 'Перетягніть файл для завантаження', dueDate_title: 'Крайній Термін', diff --git a/client/src/locales/uz-UZ/core.js b/client/src/locales/uz-UZ/core.js index 8f753b38..bd33dd06 100644 --- a/client/src/locales/uz-UZ/core.js +++ b/client/src/locales/uz-UZ/core.js @@ -141,7 +141,6 @@ export default { deleteWebhook_title: null, deletedUser_title: null, description: 'Tavsif', - detectAutomatically: null, display: null, dropFileToUpload: 'Faylni yuklash uchun qoldiring', dueDate_title: 'Muddati', diff --git a/client/src/locales/zh-CN/core.js b/client/src/locales/zh-CN/core.js index 5b75f221..dce498de 100644 --- a/client/src/locales/zh-CN/core.js +++ b/client/src/locales/zh-CN/core.js @@ -142,7 +142,6 @@ export default { deleteWebhook_title: '删除Webhook', deletedUser_title: '已删除用户', description: '描述', - detectAutomatically: '自动检测', display: '显示', dropFileToUpload: '拖放文件以上传', dueDate_title: '截止日期', diff --git a/client/src/locales/zh-TW/core.js b/client/src/locales/zh-TW/core.js index 80f80186..7463891b 100644 --- a/client/src/locales/zh-TW/core.js +++ b/client/src/locales/zh-TW/core.js @@ -139,7 +139,6 @@ export default { deleteWebhook_title: null, deletedUser_title: null, description: '描述', - detectAutomatically: '自動偵測', display: null, dropFileToUpload: '拖放文件以上傳', dueDate_title: '截止日期', diff --git a/client/src/sagas/core/services/core.js b/client/src/sagas/core/services/core.js index 39a6c800..7f2e7bb3 100644 --- a/client/src/sagas/core/services/core.js +++ b/client/src/sagas/core/services/core.js @@ -79,14 +79,8 @@ export function* initializeCore() { } export function* changeCoreLanguage(language) { - if (language === null) { - yield call(i18n.detectLanguage); - yield call(i18n.loadCoreLocale); - yield call(i18n.changeLanguage, i18n.resolvedLanguage); - } else { - yield call(i18n.loadCoreLocale, language); - yield call(i18n.changeLanguage, language); - } + yield call(i18n.loadCoreLocale, language); + yield call(i18n.changeLanguage, language); } export function* toggleFavorites(isEnabled) { diff --git a/client/src/sagas/login/services/login.js b/client/src/sagas/login/services/login.js index 1dbdbf2e..40634419 100644 --- a/client/src/sagas/login/services/login.js +++ b/client/src/sagas/login/services/login.js @@ -140,6 +140,7 @@ export function* acceptTerms(signature) { ({ item: accessToken } = yield call(api.acceptTerms, { pendingToken, signature, + initialLanguage: i18n.resolvedLanguage, })); } catch (error) { yield put(actions.acceptTerms.failure(error)); diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index e462b281..d2cb1713 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -30,7 +30,8 @@ services: # Configure knex to accept SSL certificates # - KNEX_REJECT_UNAUTHORIZED_SSL_CERTIFICATE=false - # Used for per-board notifications + # The default application language used as a fallback when a user's language is not set. + # This language is also used for per-board notifications. # - DEFAULT_LANGUAGE=en-US # Do not comment out DEFAULT_ADMIN_EMAIL if you want to prevent this user from being edited/deleted diff --git a/docker-compose.yml b/docker-compose.yml index 7bbe3079..efc63430 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -42,7 +42,8 @@ services: # Configure knex to accept SSL certificates # - KNEX_REJECT_UNAUTHORIZED_SSL_CERTIFICATE=false - # Used for per-board notifications + # The default application language used as a fallback when a user's language is not set. + # This language is also used for per-board notifications. # - DEFAULT_LANGUAGE=en-US # Do not comment out DEFAULT_ADMIN_EMAIL if you want to prevent this user from being edited/deleted diff --git a/server/.env.sample b/server/.env.sample index 9caafaa0..7eafae58 100644 --- a/server/.env.sample +++ b/server/.env.sample @@ -21,7 +21,8 @@ SECRET_KEY=notsecretkey # Configure knex to accept SSL certificates # KNEX_REJECT_UNAUTHORIZED_SSL_CERTIFICATE=false -# Used for per-board notifications +# The default application language used as a fallback when a user's language is not set. +# This language is also used for per-board notifications. # DEFAULT_LANGUAGE=en-US # Do not comment out DEFAULT_ADMIN_EMAIL if you want to prevent this user from being edited/deleted diff --git a/server/api/controllers/access-tokens/accept-terms.js b/server/api/controllers/access-tokens/accept-terms.js index 51bfcc4f..fb407d52 100644 --- a/server/api/controllers/access-tokens/accept-terms.js +++ b/server/api/controllers/access-tokens/accept-terms.js @@ -33,6 +33,12 @@ * maxLength: 64 * description: Terms signature hash based on user role * example: 940226c4c41f51afe3980ceb63704e752636526f4c52a4ea579e85b247493d94 + * initialLanguage: + * type: string + * enum: [ar-YE, bg-BG, cs-CZ, da-DK, de-DE, el-GR, en-GB, en-US, es-ES, et-EE, fa-IR, fi-FI, fr-FR, hu-HU, id-ID, it-IT, ja-JP, ko-KR, nl-NL, pl-PL, pt-BR, pt-PT, ro-RO, ru-RU, sk-SK, sr-Cyrl-RS, sr-Latn-RS, sv-SE, tr-TR, uk-UA, uz-UZ, zh-CN, zh-TW] + * nullable: true + * description: Preferred language for user interface and notifications (used only if user language is not set) + * example: en-US * responses: * 200: * description: Terms accepted successfully @@ -120,6 +126,11 @@ module.exports = { maxLength: 64, required: true, }, + initialLanguage: { + type: 'string', + isIn: User.LANGUAGES, + allowNull: true, + }, }, exits: { @@ -179,10 +190,16 @@ module.exports = { throw Errors.INVALID_SIGNATURE; } - ({ user } = await User.qm.updateOne(user.id, { + const values = { termsSignature, termsAcceptedAt: new Date().toISOString(), - })); + }; + + if (!user.language && inputs.initialLanguage) { + values.language = inputs.initialLanguage; + } + + ({ user } = await User.qm.updateOne(user.id, values)); } const config = await Config.qm.getOneMain(); diff --git a/server/api/controllers/users/create.js b/server/api/controllers/users/create.js index fbe1d4f8..cc1366f2 100755 --- a/server/api/controllers/users/create.js +++ b/server/api/controllers/users/create.js @@ -69,7 +69,7 @@ * type: string * enum: [ar-YE, bg-BG, cs-CZ, da-DK, de-DE, el-GR, en-GB, en-US, es-ES, et-EE, fa-IR, fi-FI, fr-FR, hu-HU, id-ID, it-IT, ja-JP, ko-KR, nl-NL, pl-PL, pt-BR, pt-PT, ro-RO, ru-RU, sk-SK, sr-Cyrl-RS, sr-Latn-RS, sv-SE, tr-TR, uk-UA, uz-UZ, zh-CN, zh-TW] * nullable: true - * description: Preferred language for user interface and notifications + * description: Preferred language for user interface and notifications (if null - will be set automatically on the first login) * example: en-US * subscribeToOwnCards: * type: boolean diff --git a/server/api/controllers/users/update.js b/server/api/controllers/users/update.js index f26cc43a..bc3982ab 100755 --- a/server/api/controllers/users/update.js +++ b/server/api/controllers/users/update.js @@ -57,7 +57,6 @@ * language: * type: string * enum: [ar-YE, bg-BG, cs-CZ, da-DK, de-DE, el-GR, en-GB, en-US, es-ES, et-EE, fa-IR, fi-FI, fr-FR, hu-HU, id-ID, it-IT, ja-JP, ko-KR, nl-NL, pl-PL, pt-BR, pt-PT, ro-RO, ru-RU, sk-SK, sr-Cyrl-RS, sr-Latn-RS, sv-SE, tr-TR, uk-UA, uz-UZ, zh-CN, zh-TW] - * nullable: true * description: Preferred language for user interface and notifications * example: en-US * subscribeToOwnCards: @@ -167,7 +166,6 @@ module.exports = { language: { type: 'string', isIn: User.LANGUAGES, - allowNull: true, }, subscribeToOwnCards: { type: 'boolean', diff --git a/server/api/helpers/users/present-one.js b/server/api/helpers/users/present-one.js index 226df8d9..480f3e37 100644 --- a/server/api/helpers/users/present-one.js +++ b/server/api/helpers/users/present-one.js @@ -33,6 +33,7 @@ module.exports = { cover180: `${fileManager.buildUrl(`${sails.config.custom.userAvatarsPathSegment}/${inputs.record.avatar.uploadedFileId}/cover-180.${inputs.record.avatar.extension}`)}`, }, }, + language: inputs.record.language || sails.config.i18n.defaultLocale, termsType: sails.hooks.terms.getTypeByUserRole(inputs.record.role), };