From 302bdd2222391c1a077e925f13ddf8b67a95d261 Mon Sep 17 00:00:00 2001 From: Alf Sebastian Houge Date: Tue, 18 Jul 2023 22:48:36 +0200 Subject: [PATCH] Implement switching language (but doesn't persist) --- server/controllers/masters.go | 4 ++-- server/db/migrations.go | 2 +- server/models/language.go | 3 +++ server/models/misc.go | 1 + server/service/miscService.go | 19 ++++++++++++++++++- ui/src/router/views/settings.vue | 21 +++++++++------------ 6 files changed, 34 insertions(+), 16 deletions(-) diff --git a/server/controllers/masters.go b/server/controllers/masters.go index 8c1f2e2..835d85b 100644 --- a/server/controllers/masters.go +++ b/server/controllers/masters.go @@ -19,7 +19,7 @@ func RegisterAnonMasterConroller(router *gin.RouterGroup) { "distanceUnits": db.DistanceUnitDetails, "roles": db.RoleDetails, "currencies": models.GetCurrencyMasterList(), - "languages": models.GetLanguageMastersList(), + "languages": models.GetLanguageMastersList(), }) }) } @@ -53,7 +53,7 @@ func udpateSettings(c *gin.Context) { func udpateMySettings(c *gin.Context) { var model models.UpdateSettingModel if err := c.ShouldBind(&model); err == nil { - err := service.UpdateUserSettings(c.MustGet("userId").(string), model.Currency, *model.DistanceUnit, model.DateFormat) + err := service.UpdateUserSettings(c.MustGet("userId").(string), model.Currency, *model.DistanceUnit, model.DateFormat, model.Language) if err != nil { c.JSON(http.StatusUnprocessableEntity, common.NewError("udpateMySettings", err)) return diff --git a/server/db/migrations.go b/server/db/migrations.go index b2f4112..347648d 100644 --- a/server/db/migrations.go +++ b/server/db/migrations.go @@ -29,7 +29,7 @@ var migrations = []localMigration{ }, { Name: "2023_02_26_13_42_AddLanguage", - Query: "ALTER TABLE users ADD COLUMN language text default 'English 🇬🇧'", + Query: "ALTER TABLE users ADD COLUMN language text default 'en'", }, } diff --git a/server/models/language.go b/server/models/language.go index b373d01..c8e655f 100644 --- a/server/models/language.go +++ b/server/models/language.go @@ -4,6 +4,7 @@ type LanguageModel struct { Emoji string `json:"emoji"` Name string `json:"name"` NameNative string `json:"nameNative"` + Shorthand string `json:"shorthand"` } func GetLanguageMastersList() []LanguageModel { @@ -12,10 +13,12 @@ func GetLanguageMastersList() []LanguageModel { Emoji: "🇬🇧", Name: "English", NameNative: "English", + Shorthand: "en", }, { Emoji: "🇩🇪", Name: "German", NameNative: "Deutsch", + Shorthand: "de", }, } } \ No newline at end of file diff --git a/server/models/misc.go b/server/models/misc.go index 3171db2..5356617 100644 --- a/server/models/misc.go +++ b/server/models/misc.go @@ -6,6 +6,7 @@ type UpdateSettingModel struct { Currency string `json:"currency" form:"currency" query:"currency"` DateFormat string `json:"dateFormat" form:"dateFormat" query:"dateFormat"` DistanceUnit *db.DistanceUnit `json:"distanceUnit" form:"distanceUnit" query:"distanceUnit" ` + Language string `json:"language" form:"language" query:"language"` } type ClarksonMigrationModel struct { diff --git a/server/service/miscService.go b/server/service/miscService.go index ef344a3..3705878 100644 --- a/server/service/miscService.go +++ b/server/service/miscService.go @@ -1,7 +1,9 @@ package service import ( + "errors" "hammond/db" + "hammond/models" ) func CanInitializeSystem() (bool, error) { @@ -14,15 +16,30 @@ func UpdateSettings(currency string, distanceUnit db.DistanceUnit) error { setting.DistanceUnit = distanceUnit return db.UpdateSettings(setting) } -func UpdateUserSettings(userId, currency string, distanceUnit db.DistanceUnit, dateFormat string) error { +func UpdateUserSettings(userId, currency string, distanceUnit db.DistanceUnit, dateFormat string, language string) error { user, err := db.GetUserById(userId) if err != nil { return err } + // TODO: Pull into function + languageExists := false + languages := models.GetLanguageMastersList(); + for _, lang := range languages { + if (language == lang.Shorthand){ + languageExists = true + } + } + + if (!languageExists) { + return errors.New("Language not in masters list") + } + + user.Currency = currency user.DistanceUnit = distanceUnit user.DateFormat = dateFormat + user.Language = language return db.UpdateUser(user) } diff --git a/ui/src/router/views/settings.vue b/ui/src/router/views/settings.vue index 768bace..1c5c822 100644 --- a/ui/src/router/views/settings.vue +++ b/ui/src/router/views/settings.vue @@ -28,6 +28,7 @@ export default { dateFormat: this.me.dateFormat, }, tryingToSave: false, + selectedLanguage: "", changePassModel: { old: '', new: '', @@ -59,15 +60,9 @@ export default { ) }) }, - filteredLanguageMasters() { - return this.languageMasters.filter((option) => { - return ( - option.nameNative - .toString() - .toLowerCase() - .indexOf(this.settingsModel.language.toLowerCase()) >= 0) - }) - }, + }, + mounted() { + this.selectedLanguage = this.formatLanguage(this.languageMasters.filter(x => x.shorthand === this.me.language)[0]) }, methods: { changePassword() { @@ -120,6 +115,7 @@ export default { type: 'is-success', duration: 3000, }) + this.$i18n.locale = this.settingsModel.language }) .catch((ex) => { this.$buefy.toast.open({ @@ -151,13 +147,14 @@ export default {