mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-03 16:23:58 +00:00
language in webapp stored in local storage
This commit is contained in:
@@ -42,7 +42,7 @@
|
|||||||
import { safeFormatDate } from 'dbgate-tools';
|
import { safeFormatDate } from 'dbgate-tools';
|
||||||
import FormDefaultActionField from './FormDefaultActionField.svelte';
|
import FormDefaultActionField from './FormDefaultActionField.svelte';
|
||||||
import AiSettingsTab from './AiSettingsTab.svelte';
|
import AiSettingsTab from './AiSettingsTab.svelte';
|
||||||
import { _t } from '../translations';
|
import { _t, setSelectedLanguage } from '../translations';
|
||||||
import hasPermission from '../utility/hasPermission';
|
import hasPermission from '../utility/hasPermission';
|
||||||
import ConfirmModal from '../modals/ConfirmModal.svelte';
|
import ConfirmModal from '../modals/ConfirmModal.svelte';
|
||||||
import { showModal } from '../modals/modalTools';
|
import { showModal } from '../modals/modalTools';
|
||||||
@@ -180,34 +180,40 @@ ORDER BY
|
|||||||
defaultValue={false}
|
defaultValue={false}
|
||||||
/>
|
/>
|
||||||
<div class="heading">{_t('settings.localization', { defaultMessage: 'Localization' })}</div>
|
<div class="heading">{_t('settings.localization', { defaultMessage: 'Localization' })}</div>
|
||||||
<FormSelectField
|
|
||||||
|
<FormFieldTemplateLarge
|
||||||
label={_t('settings.localization.language', { defaultMessage: 'Language' })}
|
label={_t('settings.localization.language', { defaultMessage: 'Language' })}
|
||||||
name="localization.language"
|
type="combo"
|
||||||
defaultValue={getSelectedLanguage()}
|
>
|
||||||
data-testid="SettingsModal_languageSelect"
|
<SelectField
|
||||||
isNative
|
isNative
|
||||||
options={[
|
data-testid="SettingsModal_languageSelect"
|
||||||
{ value: 'cs', label: 'Čeština' },
|
options={[
|
||||||
{ value: 'de', label: 'Deutsch' },
|
{ value: 'cs', label: 'Čeština' },
|
||||||
{ value: 'en', label: 'English' },
|
{ value: 'de', label: 'Deutsch' },
|
||||||
{ value: 'es', label: 'Español' },
|
{ value: 'en', label: 'English' },
|
||||||
{ value: 'fr', label: 'Français' },
|
{ value: 'es', label: 'Español' },
|
||||||
{ value: 'sk', label: 'Slovenčina' },
|
{ value: 'fr', label: 'Français' },
|
||||||
{ value: 'zh', label: '中文' },
|
{ value: 'sk', label: 'Slovenčina' },
|
||||||
]}
|
{ value: 'zh', label: '中文' },
|
||||||
on:change={() => {
|
]}
|
||||||
showModal(ConfirmModal, {
|
defaultValue={getSelectedLanguage()}
|
||||||
message: _t('settings.localization.reloadWarning', {
|
value={getSelectedLanguage()}
|
||||||
defaultMessage: 'Application will be reloaded to apply new language settings',
|
on:change={e => {
|
||||||
}),
|
setSelectedLanguage(e.detail);
|
||||||
onConfirm: () => {
|
showModal(ConfirmModal, {
|
||||||
setTimeout(() => {
|
message: _t('settings.localization.reloadWarning', {
|
||||||
internalRedirectTo(electron ? '/index.html' : '/');
|
defaultMessage: 'Application will be reloaded to apply new language settings',
|
||||||
}, 100);
|
}),
|
||||||
},
|
onConfirm: () => {
|
||||||
});
|
setTimeout(() => {
|
||||||
}}
|
internalRedirectTo(electron ? '/index.html' : '/');
|
||||||
/>
|
}, 100);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</FormFieldTemplateLarge>
|
||||||
|
|
||||||
<div class="heading">{_t('settings.dataGrid.title', { defaultMessage: 'Data grid' })}</div>
|
<div class="heading">{_t('settings.dataGrid.title', { defaultMessage: 'Data grid' })}</div>
|
||||||
<FormTextField
|
<FormTextField
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ import zh from '../../../translations/zh.json';
|
|||||||
|
|
||||||
import MessageFormat, { MessageFunction } from '@messageformat/core';
|
import MessageFormat, { MessageFunction } from '@messageformat/core';
|
||||||
import { getStringSettingsValue } from './settings/settingsTools';
|
import { getStringSettingsValue } from './settings/settingsTools';
|
||||||
|
import getElectron from './utility/getElectron';
|
||||||
|
import { apiCall } from './utility/api';
|
||||||
|
|
||||||
const translations = {
|
const translations = {
|
||||||
en: {},
|
en: {},
|
||||||
@@ -28,25 +30,34 @@ let selectedLanguageCache: string | null = null;
|
|||||||
export function getSelectedLanguage(): string {
|
export function getSelectedLanguage(): string {
|
||||||
if (selectedLanguageCache) return selectedLanguageCache;
|
if (selectedLanguageCache) return selectedLanguageCache;
|
||||||
|
|
||||||
const browserLanguage = getBrowserLanguage();
|
// const browserLanguage = getBrowserLanguage();
|
||||||
const selectedLanguage = getStringSettingsValue('localization.language', browserLanguage);
|
const selectedLanguage = getElectron()
|
||||||
|
? getStringSettingsValue('localization.language', null)
|
||||||
|
: localStorage.getItem('selectedLanguage');
|
||||||
|
|
||||||
if (!supportedLanguages.includes(selectedLanguage)) return defaultLanguage;
|
if (!selectedLanguage || !supportedLanguages.includes(selectedLanguage)) return defaultLanguage;
|
||||||
return selectedLanguage;
|
return selectedLanguage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function setSelectedLanguage(language: string) {
|
||||||
|
if (getElectron()) {
|
||||||
|
await apiCall('config/update-settings', { 'localization.language': language });
|
||||||
|
} else {
|
||||||
|
localStorage.setItem('selectedLanguage', language);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function saveSelectedLanguageToCache() {
|
export function saveSelectedLanguageToCache() {
|
||||||
selectedLanguageCache = getSelectedLanguage();
|
selectedLanguageCache = getSelectedLanguage();
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getBrowserLanguage(): string {
|
export function getBrowserLanguage(): string {
|
||||||
return 'en';
|
if (typeof window !== 'undefined') {
|
||||||
// if (typeof window !== 'undefined') {
|
return (
|
||||||
// return (
|
(navigator.languages && navigator.languages[0]).slice(0, 2) || navigator.language.slice(0, 2) || defaultLanguage
|
||||||
// (navigator.languages && navigator.languages[0]).slice(0, 2) || navigator.language.slice(0, 2) || defaultLanguage
|
);
|
||||||
// );
|
}
|
||||||
// }
|
return defaultLanguage;
|
||||||
// return defaultLanguage;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type TranslateOptions = {
|
type TranslateOptions = {
|
||||||
|
|||||||
Reference in New Issue
Block a user