diff --git a/app/Http/Controllers/Api/Client/AccountController.php b/app/Http/Controllers/Api/Client/AccountController.php index 49f64bed61..8804d8c7bb 100644 --- a/app/Http/Controllers/Api/Client/AccountController.php +++ b/app/Http/Controllers/Api/Client/AccountController.php @@ -72,4 +72,14 @@ public function updatePassword(UpdatePasswordRequest $request): JsonResponse return new JsonResponse([], Response::HTTP_NO_CONTENT); } + + /** + * Get user language + */ + public function getLocale(Request $request): JsonResponse + { + $original = $request->user()->language; + + return new JsonResponse($original); + } } diff --git a/resources/scripts/api/account/language.ts b/resources/scripts/api/account/language.ts new file mode 100644 index 0000000000..cbc7891551 --- /dev/null +++ b/resources/scripts/api/account/language.ts @@ -0,0 +1,17 @@ +import http from '@/api/http'; +import i18next from 'i18next'; +function getLanguage(): Promise { + return new Promise((resolve, reject) => { + if (location.pathname.includes('/auth/')) return resolve(navigator.language.replace(/-.*/, '')); + http.get('/api/client/account/language') + .then(({ data }) => resolve((data || 'en'))) + .catch(reject); + }); +} +function setLanguageInI18n(i18n: typeof i18next): Promise { + return new Promise(async (resolve, reject) => { + const lng = await getLanguage(); + i18n.changeLanguage(lng, resolve); + }); +} +export { getLanguage, setLanguageInI18n } diff --git a/resources/scripts/i18n.ts b/resources/scripts/i18n.ts index c36879eab3..41b68dfadd 100644 --- a/resources/scripts/i18n.ts +++ b/resources/scripts/i18n.ts @@ -2,6 +2,7 @@ import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; import I18NextHttpBackend, { BackendOptions } from 'i18next-http-backend'; import I18NextMultiloadBackendAdapter from 'i18next-multiload-backend-adapter'; +import { setLanguageInI18n } from '@/api/account/language'; // If we're using HMR use a unique hash per page reload so that we're always // doing cache busting. Otherwise just use the builder provided hash value in @@ -15,6 +16,8 @@ i18n.use(I18NextMultiloadBackendAdapter) lng: 'en', fallbackLng: 'en', keySeparator: '.', + ns: ['strings'], + defaultNS: 'strings', backend: { backend: I18NextHttpBackend, backendOption: { @@ -30,4 +33,6 @@ i18n.use(I18NextMultiloadBackendAdapter) }, }); +setLanguageInI18n(i18n); + export default i18n; diff --git a/routes/api-client.php b/routes/api-client.php index ed1190af64..5643073599 100644 --- a/routes/api-client.php +++ b/routes/api-client.php @@ -29,6 +29,7 @@ Route::put('/email', [Client\AccountController::class, 'updateEmail'])->name('api:client.account.update-email'); Route::put('/password', [Client\AccountController::class, 'updatePassword'])->name('api:client.account.update-password'); + Route::get('/language', [Client\AccountController::class, 'getLocale']); Route::get('/activity', Client\ActivityLogController::class)->name('api:client.account.activity');