Implement switching language (but doesn't persist)

This commit is contained in:
Alf Sebastian Houge
2023-07-18 22:48:36 +02:00
parent 14968013dd
commit 302bdd2222
6 changed files with 34 additions and 16 deletions

View File

@@ -19,7 +19,7 @@ func RegisterAnonMasterConroller(router *gin.RouterGroup) {
"distanceUnits": db.DistanceUnitDetails, "distanceUnits": db.DistanceUnitDetails,
"roles": db.RoleDetails, "roles": db.RoleDetails,
"currencies": models.GetCurrencyMasterList(), "currencies": models.GetCurrencyMasterList(),
"languages": models.GetLanguageMastersList(), "languages": models.GetLanguageMastersList(),
}) })
}) })
} }
@@ -53,7 +53,7 @@ func udpateSettings(c *gin.Context) {
func udpateMySettings(c *gin.Context) { func udpateMySettings(c *gin.Context) {
var model models.UpdateSettingModel var model models.UpdateSettingModel
if err := c.ShouldBind(&model); err == nil { 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 { if err != nil {
c.JSON(http.StatusUnprocessableEntity, common.NewError("udpateMySettings", err)) c.JSON(http.StatusUnprocessableEntity, common.NewError("udpateMySettings", err))
return return

View File

@@ -29,7 +29,7 @@ var migrations = []localMigration{
}, },
{ {
Name: "2023_02_26_13_42_AddLanguage", 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'",
}, },
} }

View File

@@ -4,6 +4,7 @@ type LanguageModel struct {
Emoji string `json:"emoji"` Emoji string `json:"emoji"`
Name string `json:"name"` Name string `json:"name"`
NameNative string `json:"nameNative"` NameNative string `json:"nameNative"`
Shorthand string `json:"shorthand"`
} }
func GetLanguageMastersList() []LanguageModel { func GetLanguageMastersList() []LanguageModel {
@@ -12,10 +13,12 @@ func GetLanguageMastersList() []LanguageModel {
Emoji: "🇬🇧", Emoji: "🇬🇧",
Name: "English", Name: "English",
NameNative: "English", NameNative: "English",
Shorthand: "en",
}, { }, {
Emoji: "🇩🇪", Emoji: "🇩🇪",
Name: "German", Name: "German",
NameNative: "Deutsch", NameNative: "Deutsch",
Shorthand: "de",
}, },
} }
} }

View File

@@ -6,6 +6,7 @@ type UpdateSettingModel struct {
Currency string `json:"currency" form:"currency" query:"currency"` Currency string `json:"currency" form:"currency" query:"currency"`
DateFormat string `json:"dateFormat" form:"dateFormat" query:"dateFormat"` DateFormat string `json:"dateFormat" form:"dateFormat" query:"dateFormat"`
DistanceUnit *db.DistanceUnit `json:"distanceUnit" form:"distanceUnit" query:"distanceUnit" ` DistanceUnit *db.DistanceUnit `json:"distanceUnit" form:"distanceUnit" query:"distanceUnit" `
Language string `json:"language" form:"language" query:"language"`
} }
type ClarksonMigrationModel struct { type ClarksonMigrationModel struct {

View File

@@ -1,7 +1,9 @@
package service package service
import ( import (
"errors"
"hammond/db" "hammond/db"
"hammond/models"
) )
func CanInitializeSystem() (bool, error) { func CanInitializeSystem() (bool, error) {
@@ -14,15 +16,30 @@ func UpdateSettings(currency string, distanceUnit db.DistanceUnit) error {
setting.DistanceUnit = distanceUnit setting.DistanceUnit = distanceUnit
return db.UpdateSettings(setting) 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) user, err := db.GetUserById(userId)
if err != nil { if err != nil {
return err 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.Currency = currency
user.DistanceUnit = distanceUnit user.DistanceUnit = distanceUnit
user.DateFormat = dateFormat user.DateFormat = dateFormat
user.Language = language
return db.UpdateUser(user) return db.UpdateUser(user)
} }

View File

@@ -28,6 +28,7 @@ export default {
dateFormat: this.me.dateFormat, dateFormat: this.me.dateFormat,
}, },
tryingToSave: false, tryingToSave: false,
selectedLanguage: "",
changePassModel: { changePassModel: {
old: '', old: '',
new: '', new: '',
@@ -59,15 +60,9 @@ export default {
) )
}) })
}, },
filteredLanguageMasters() { },
return this.languageMasters.filter((option) => { mounted() {
return ( this.selectedLanguage = this.formatLanguage(this.languageMasters.filter(x => x.shorthand === this.me.language)[0])
option.nameNative
.toString()
.toLowerCase()
.indexOf(this.settingsModel.language.toLowerCase()) >= 0)
})
},
}, },
methods: { methods: {
changePassword() { changePassword() {
@@ -120,6 +115,7 @@ export default {
type: 'is-success', type: 'is-success',
duration: 3000, duration: 3000,
}) })
this.$i18n.locale = this.settingsModel.language
}) })
.catch((ex) => { .catch((ex) => {
this.$buefy.toast.open({ this.$buefy.toast.open({
@@ -151,13 +147,14 @@ export default {
<form class="box " @submit.prevent="saveSettings"> <form class="box " @submit.prevent="saveSettings">
<b-field :label="$t('language')"> <b-field :label="$t('language')">
<b-autocomplete <b-autocomplete
v-model="settingsModel.language" v-model="selectedLanguage"
:custom-formatter="formatLanguage"
:data="filteredLanguageMasters"
:placeholder="$t('language')" :placeholder="$t('language')"
:keep-first="true" :keep-first="true"
:custom-formatter="formatLanguage"
:data="languageMasters"
:open-on-focus="true" :open-on-focus="true"
required required
@select="(option) => (settingsModel.language = option.shorthand)"
/> />
</b-field> </b-field>
<b-field :label="$t('currency')"> <b-field :label="$t('currency')">