diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 9b6324a76..a1f0e8b88 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -475,21 +475,21 @@ Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 55 + 56 Settings saved successfully. src/app/components/manage/settings/settings.component.ts - 68 + 70 Error while storing settings on server: src/app/components/manage/settings/settings.component.ts - 80 + 86 @@ -510,7 +510,7 @@ Saved views src/app/components/manage/settings/settings.component.html - 64 + 79 @@ -520,109 +520,123 @@ 13 + + Display language + + src/app/components/manage/settings/settings.component.html + 17 + + + + You need to reload the page after applying a new language. + + src/app/components/manage/settings/settings.component.html + 25 + + Items per page src/app/components/manage/settings/settings.component.html - 17 + 32 Document editor src/app/components/manage/settings/settings.component.html - 33 + 48 Use PDF viewer provided by the browser src/app/components/manage/settings/settings.component.html - 37 + 52 This is usually faster for displaying large PDF documents, but it might not work on some browsers. src/app/components/manage/settings/settings.component.html - 37 + 52 Dark mode src/app/components/manage/settings/settings.component.html - 44 + 59 Use system settings src/app/components/manage/settings/settings.component.html - 47 + 62 Enable dark mode src/app/components/manage/settings/settings.component.html - 48 + 63 Bulk editing src/app/components/manage/settings/settings.component.html - 52 + 67 Show confirmation dialogs src/app/components/manage/settings/settings.component.html - 56 + 71 Deleting documents will always ask for confirmation. src/app/components/manage/settings/settings.component.html - 56 + 71 Apply on close src/app/components/manage/settings/settings.component.html - 57 + 72 Appears on src/app/components/manage/settings/settings.component.html - 76 + 91 Show on dashboard src/app/components/manage/settings/settings.component.html - 79 + 94 Show in sidebar src/app/components/manage/settings/settings.component.html - 83 + 98 No saved views defined. src/app/components/manage/settings/settings.component.html - 93 + 108 @@ -1400,6 +1414,41 @@ 12 + + Use system language + + src/app/services/settings.service.ts + 64 + + + + English + + src/app/services/settings.service.ts + 65 + + + + German + + src/app/services/settings.service.ts + 66 + + + + Dutch + + src/app/services/settings.service.ts + 67 + + + + French + + src/app/services/settings.service.ts + 68 + + Error diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index cc4de9bf0..e7fac646f 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -12,6 +12,21 @@

Appearance

+
+
+ Display language +
+
+ + + + You need to reload the page after applying a new language. + +
+
+
Items per page diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index 0e364e6c5..f0d83a15f 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -22,7 +22,8 @@ export class SettingsComponent implements OnInit { 'darkModeUseSystem': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_USE_SYSTEM)), 'darkModeEnabled': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_ENABLED)), 'useNativePdfViewer': new FormControl(this.settings.get(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER)), - 'savedViews': this.savedViewGroup + 'savedViews': this.savedViewGroup, + 'displayLanguage': new FormControl(this.settings.getLanguage()) }) savedViews: PaperlessSavedView[] @@ -63,11 +64,16 @@ export class SettingsComponent implements OnInit { this.settings.set(SETTINGS_KEYS.DARK_MODE_USE_SYSTEM, this.settingsForm.value.darkModeUseSystem) this.settings.set(SETTINGS_KEYS.DARK_MODE_ENABLED, (this.settingsForm.value.darkModeEnabled == true).toString()) this.settings.set(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, this.settingsForm.value.useNativePdfViewer) + this.settings.setLanguage(this.settingsForm.value.displayLanguage) this.documentListViewService.updatePageSize() this.settings.updateDarkModeSettings() this.toastService.showInfo($localize`Settings saved successfully.`) } + get languages() { + return this.settings.getLanguageOptions() + } + saveSettings() { let x = [] for (let id in this.savedViewGroup.value) { diff --git a/src-ui/src/app/services/settings.service.ts b/src-ui/src/app/services/settings.service.ts index eb533e118..50adcf5a7 100644 --- a/src-ui/src/app/services/settings.service.ts +++ b/src-ui/src/app/services/settings.service.ts @@ -1,5 +1,7 @@ import { DOCUMENT } from '@angular/common'; import { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core'; +import { Meta } from '@angular/platform-browser'; +import { CookieService } from 'ngx-cookie-service'; export interface PaperlessSettings { key: string @@ -34,7 +36,9 @@ export class SettingsService { constructor( private rendererFactory: RendererFactory2, - @Inject(DOCUMENT) private document + @Inject(DOCUMENT) private document, + private cookieService: CookieService, + private meta: Meta ) { this.renderer = rendererFactory.createRenderer(null, null); @@ -55,6 +59,36 @@ export class SettingsService { } + getLanguageOptions() { + return [ + {code: "", name: $localize`Use system language`}, + {code: "en-us", name: `${$localize`English`} (English)`}, + {code: "de", name: `${$localize`German`} (German)`}, + {code: "nl", name: `${$localize`Dutch`} (Dutch)`}, + {code: "fr", name: `${$localize`French`} (French)`} + ] + } + + private getLanguageCookieName() { + let prefix = "" + if (this.meta.getTag('name=cookie_prefix')) { + prefix = this.meta.getTag('name=cookie_prefix').content + } + return `${prefix || ''}django_language` + } + + getLanguage(): string { + return this.cookieService.get(this.getLanguageCookieName()) + } + + setLanguage(language: string) { + if (language) { + this.cookieService.set(this.getLanguageCookieName(), language) + } else { + this.cookieService.delete(this.getLanguageCookieName()) + } + } + get(key: string): any { let setting = SETTINGS.find(s => s.key == key)