@live-change/user-frontend 0.9.131 → 0.9.133

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@
3
3
  <div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border">
4
4
  <div class="text-center mb-8">
5
5
  <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">
6
- Profile
6
+ {{ t('settings.profile') }}
7
7
  </div>
8
8
  </div>
9
9
 
@@ -29,12 +29,12 @@
29
29
  <div class="p-field flex flex-col">
30
30
  <InputText type="text" v-model="data.name"
31
31
  :invalid="!!data.nameError"
32
- class="p-inputtext-lg" placeholder="Your name" />
32
+ class="p-inputtext-lg" :placeholder="t('settings.yourName')" />
33
33
  <Message v-if="data.nameError" severity="error" variant="simple" size="small">
34
34
  {{ t(`errors.${data.nameError}`) }}
35
35
  </Message>
36
36
  </div>
37
- <Button type="submit" label="Save name" class="mt-4" icon="pi pi-save" />
37
+ <Button type="submit" :label="t('settings.saveName')" class="mt-4" icon="pi pi-save" />
38
38
  </command-form>
39
39
  </div>
40
40
 
@@ -83,7 +83,7 @@
83
83
  function openImageEditor() {
84
84
  dialog.open(ComponentDialog, {
85
85
  props: {
86
- header: 'Image Editor',
86
+ header: t('settings.imageEditor'),
87
87
  style: {
88
88
  width: '50vw',
89
89
  },
@@ -107,14 +107,14 @@
107
107
  console.log("WZ", workingZone)
108
108
  workingZone.addPromise('update user image', (async () => {
109
109
  await api.command(['userIdentification', updateMethod.value], { image: data?.value })
110
- toast.add({ severity:'info', summary: 'User image saved', life: 1500 })
110
+ toast.add({ severity:'info', summary: t('settings.userImageSaved'), life: 1500 })
111
111
  })())
112
112
  }
113
113
  })
114
114
  }
115
115
 
116
116
  function handleNameSaved() {
117
- toast.add({ severity:'info', summary: 'User name saved', life: 1500 })
117
+ toast.add({ severity:'info', summary: t('settings.userNameSaved'), life: 1500 })
118
118
  }
119
119
 
120
120
 
@@ -2,7 +2,7 @@
2
2
  <div class="w-full lg:w-6/12 md:w-9/12">
3
3
 
4
4
  <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6" v-if="localeSettings">
5
- <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">Locale settings</div>
5
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">{{ t('settings.localeSettings') }}</div>
6
6
 
7
7
  <command-form service="localeSettings" action="setOrUpdateMyLocaleSettings"
8
8
  :initialValues="{
@@ -17,19 +17,19 @@
17
17
 
18
18
  <div class="p-field mb-4">
19
19
  <label for="title" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
20
- Language
20
+ {{ t('settings.language') }}
21
21
  </label>
22
22
  <Dropdown v-model="data.language" :options="availableLocales"
23
23
  :optionLabel="languageLabel" showClear
24
24
  :filter="availableLocales.length > 10"
25
- placeholder="Auto-detect"
25
+ :placeholder="t('settings.autoDetect')"
26
26
  class="w-full" />
27
27
  <Message v-if="data.languageError" severity="error" variant="simple" size="small">
28
28
  {{ t(`errors.${data.languageError}`) }}
29
29
  </Message>
30
30
  </div>
31
31
 
32
- <Button type="submit" label="Apply" class="mt-1" icon="pi pi-save" />
32
+ <Button type="submit" :label="t('settings.apply')" class="mt-1" icon="pi pi-save" />
33
33
 
34
34
  </command-form>
35
35
 
@@ -57,8 +57,8 @@
57
57
  const { t, availableLocales, getLocaleMessage } = useI18n()
58
58
 
59
59
  function languageLabel(option) {
60
- console.log("LANGUAGE LABEL", option)
61
- if(!option) return `Auto-detect (${navigator.language})`
60
+ //console.log("LANGUAGE LABEL", option)
61
+ if(!option) return `${t('settings.autoDetect')} (${navigator.language})`
62
62
  return getLocaleMessage(option).languageName ?? option
63
63
  }
64
64
 
@@ -69,7 +69,7 @@
69
69
  const [localeSettings] = await Promise.all([live(localePath)])
70
70
 
71
71
  function handleSettingsUpdated({ parameters, result }) {
72
- toast.add({ severity: 'success', summary: 'Settings updated', detail: 'Your locale settings have been saved' })
72
+ toast.add({ severity: 'success', summary: t('settings.settingsUpdated'), detail: t('settings.localeSettingsSaved') })
73
73
  }
74
74
 
75
75
  </script>
@@ -2,25 +2,25 @@
2
2
  <div class="w-full lg:w-6/12 md:w-9/12 max-w-[32rem]" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
3
 
4
4
  <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6" v-if="isUnknown && !isRedirecting">
5
- <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">Unknown link</div>
5
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">{{ t('auth.unknownLink') }}</div>
6
6
  <p class="mt-0 mb-2 p-0 leading-normal">
7
- We can't find your secret link. Check if you copied the address correctly.
7
+ {{ t('auth.unknownLinkDesc') }}
8
8
  </p>
9
9
  </div>
10
10
 
11
11
  <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6" v-if="isUsed && !isRedirecting">
12
- <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">Link used</div>
12
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">{{ t('auth.linkUsed') }}</div>
13
13
  <p class="mt-0 mb-2 p-0 leading-normal">
14
- This link was already used.
14
+ {{ t('auth.linkUsedDesc') }}
15
15
  </p>
16
16
  </div>
17
17
 
18
18
  <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6" v-if="isExpired && !isUsed && !isRedirecting">
19
- <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">Link expired</div>
19
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">{{ t('auth.linkExpired') }}</div>
20
20
  <p class="mt-0 mb-6 p-0 leading-normal">
21
- Your secret link already expired. To send another link click button below.
21
+ {{ t('messageAuth.linkExpiredDesc') }}
22
22
  </p>
23
- <Button label="Resend" class="p-button-lg" @click="resend"></Button>
23
+ <Button :label="t('messageAuth.resend')" class="p-button-lg" @click="resend"></Button>
24
24
  </div>
25
25
 
26
26
  <div v-if="isReady || isRedirecting"
@@ -39,6 +39,9 @@
39
39
  import { useNow } from '@vueuse/core'
40
40
  import { path, live, actions } from '@live-change/vue3-ssr'
41
41
 
42
+ import { useI18n } from 'vue-i18n'
43
+ const { t } = useI18n()
44
+
42
45
  const { secretCode } = defineProps({
43
46
  secretCode: {
44
47
  type: String,
@@ -2,13 +2,13 @@
2
2
  <div class="w-full lg:w-6/12 md:w-9/12 max-w-[32rem]" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
3
  <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6"
4
4
  v-if="authenticationData?.state === 'used' && !submitted">
5
- <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">Authentication done</div>
6
- <p class="mt-0 mb-1 p-0 leading-normal">You authenticated in a different tab.</p>
5
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">{{ t('messageAuth.authenticationDone') }}</div>
6
+ <p class="mt-0 mb-1 p-0 leading-normal">{{ t('messageAuth.authenticatedInDifferentTab') }}</p>
7
7
  </div>
8
8
  <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6" v-else>
9
- <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">{{ title }}</div>
10
- <p class="mt-0 mb-1 p-0 leading-normal">{{ description }}</p>
11
- <p class="mt-0 mb-6 p-0 leading-normal">{{ callToAction }}</p>
9
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">{{ localizedTitle }}</div>
10
+ <p class="mt-0 mb-1 p-0 leading-normal">{{ localizedDescription }}</p>
11
+ <p class="mt-0 mb-6 p-0 leading-normal">{{ localizedCallToAction }}</p>
12
12
  <Secured :events="['wrong-secret-code']" :actions="['checkSecretCode']">
13
13
  <command-form service="messageAuthentication" action="finishMessageAuthentication"
14
14
  :parameters="{ secretType: 'code', authentication }" :key="authentication"
@@ -17,11 +17,11 @@
17
17
  v-slot="{ data }">
18
18
  <div class="flex justify-center flex-col items-center">
19
19
  <div class="p-field mx-1 flex flex-col items-center mb-4">
20
- <label for="code" class="sr-only">Code</label>
20
+ <label for="code" class="sr-only">{{ t('messageAuth.code') }}</label>
21
21
  <!-- <InputOtp id="code" :length="6" class="mb-2"
22
22
  v-model="data.secret"
23
23
  aria-describedby="code-help" :invalid="!!data.secretError" /> -->
24
- <InputMask id="code" class="p-inputtext-lg w-[7rem] text-center" mask="999999" slotChar="######" placeholder="Code"
24
+ <InputMask id="code" class="p-inputtext-lg w-[7rem] text-center" mask="999999" slotChar="######" :placeholder="t('messageAuth.code')"
25
25
  v-model="data.secret"
26
26
  aria-describedby="code-help" :invalid="!!data.secretError" />
27
27
  <Message v-if="data.secretError" severity="error" variant="simple">
@@ -29,13 +29,13 @@
29
29
  </Message>
30
30
  </div>
31
31
  <div class="flex flex-col">
32
- <Button label="OK" type="submit" class="p-button-lg grow-0"
32
+ <Button :label="t('common.ok')" type="submit" class="p-button-lg grow-0"
33
33
  :disableda="data.secret?.length < 6" />
34
34
  </div>
35
35
  </div>
36
36
  <div v-if="data.secretError === 'codeExpired'" class="mt-4 text-center">
37
- <p class="mt-0 mb-2 p-0 leading-normal">To send another code click button below.</p>
38
- <Button label="Resend secret code" class="p-button-lg" @click="resend" />
37
+ <p class="mt-0 mb-2 p-0 leading-normal">{{ t('messageAuth.toSendAnotherCode') }}</p>
38
+ <Button :label="t('messageAuth.resendSecretCode')" class="p-button-lg" @click="resend" />
39
39
  </div>
40
40
  </command-form>
41
41
  </Secured>
@@ -52,7 +52,7 @@
52
52
 
53
53
  import { useRouter } from 'vue-router'
54
54
  const router = useRouter()
55
- import { ref } from 'vue'
55
+ import { ref, computed } from 'vue'
56
56
 
57
57
  import { useToast } from 'primevue/usetoast'
58
58
  const toast = useToast()
@@ -60,25 +60,32 @@
60
60
  import { useI18n } from 'vue-i18n'
61
61
  const { t } = useI18n()
62
62
 
63
- const { authentication } = defineProps({
63
+ const props = defineProps({
64
64
  authentication: {
65
65
  type: String,
66
66
  required: true
67
67
  },
68
68
  title: {
69
69
  type: String,
70
- default: 'Message sent',
70
+ default: null,
71
71
  },
72
72
  description: {
73
73
  type: String,
74
- default: 'We sent special secret message to the contact you already provided.',
74
+ default: null,
75
75
  },
76
76
  callToAction: {
77
77
  type: String,
78
- default: 'Click on the link or enter the code you found in that message.',
78
+ default: null,
79
79
  },
80
80
  })
81
81
 
82
+ const { authentication } = props
83
+
84
+ // Computed properties for localized texts
85
+ const localizedTitle = computed(() => props.title || t('messageAuth.messageSent'))
86
+ const localizedDescription = computed(() => props.description || t('messageAuth.messageSentDescription'))
87
+ const localizedCallToAction = computed(() => props.callToAction || t('messageAuth.callToAction'))
88
+
82
89
  function handleAuthenticated({ parameters, result }) {
83
90
  const { targetPage } = result
84
91
  console.log("TARGET ROUTE", targetPage)
@@ -107,7 +114,7 @@
107
114
  authentication
108
115
  })
109
116
  if(form.value) form.value.reset()
110
- toast.add({ severity: 'success', summary: 'Code sent', detail: 'New code sent to you' })
117
+ toast.add({ severity: 'success', summary: t('messageAuth.codeSent'), detail: t('messageAuth.newCodeSent') })
111
118
 
112
119
  router.push({
113
120
  name: 'user:sent',
@@ -4,7 +4,7 @@
4
4
  <div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border">
5
5
  <div class="text-center mb-8">
6
6
  <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">
7
- {{ passwordExists ? 'Change password' : 'Set password' }}
7
+ {{ passwordExists ? t('auth.changePassword') : t('auth.setPassword') }}
8
8
  </div>
9
9
  </div>
10
10
 
@@ -15,7 +15,7 @@
15
15
  <template v-if="isMounted">
16
16
 
17
17
  <div class="p-field mb-4" v-if="passwordExists">
18
- <label for="currentPassword" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">Current password</label>
18
+ <label for="currentPassword" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">{{ t('auth.currentPassword') }}</label>
19
19
  <Password id="currentPassword" class="w-full" inputClass="w-full"
20
20
  toggle-mask v-model:masked="masked"
21
21
  :invalid="!!data.currentPasswordHashError"
@@ -26,19 +26,19 @@
26
26
  </div>
27
27
 
28
28
  <div class="p-field mb-4">
29
- <label for="newPassword" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">New password</label>
29
+ <label for="newPassword" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">{{ t('auth.newPassword') }}</label>
30
30
  <Password id="newPassword" class="w-full" inputClass="w-full"
31
31
  toggle-mask v-model:masked="masked"
32
32
  :invalid="!!data.passwordHashError"
33
33
  v-model="data.passwordHash">
34
34
  <template #footer>
35
35
  <Divider />
36
- <p class="p-mt-2">Suggestions</p>
36
+ <p class="p-mt-2">{{ t('auth.passwordSuggestions') }}</p>
37
37
  <ul class="p-pl-2 p-ml-2 p-mt-0" style="line-height: 1.5">
38
- <li>At least one lowercase</li>
39
- <li>At least one uppercase</li>
40
- <li>At least one numeric</li>
41
- <li>Minimum 8 characters</li>
38
+ <li>{{ t('auth.suggestionLowercase') }}</li>
39
+ <li>{{ t('auth.suggestionUppercase') }}</li>
40
+ <li>{{ t('auth.suggestionNumeric') }}</li>
41
+ <li>{{ t('auth.suggestionMinLength') }}</li>
42
42
  </ul>
43
43
  </template>
44
44
  </Password>
@@ -48,7 +48,7 @@
48
48
  </div>
49
49
 
50
50
  <div class="p-field mb-4">
51
- <label for="reenterPassword" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">Re-enter password</label>
51
+ <label for="reenterPassword" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">{{ t('auth.reenterPassword') }}</label>
52
52
  <Password id="reenterPassword" class="w-full" inputClass="w-full"
53
53
  toggle-mask v-model:masked="masked"
54
54
  v-model="secondPassword"
@@ -57,7 +57,7 @@
57
57
 
58
58
  </template>
59
59
 
60
- <Button :label="passwordExists ? 'Change password' : 'Set password'"
60
+ <Button :label="passwordExists ? t('auth.changePassword') : t('auth.setPassword')"
61
61
  type="submit"
62
62
  icon="pi pi-key" class="w-full"></Button>
63
63
 
@@ -1,14 +1,15 @@
1
1
  <template>
2
2
  <div class="w-full lg:w-6/12 md:w-9/12 max-w-[32rem]" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
3
  <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6">
4
- <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl mb-6">Password changed</div>
5
- <p class="mt-0 p-0 leading-normal">You have successfully set your password.</p>
4
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl mb-6">{{ t('auth.passwordChanged') }}</div>
5
+ <p class="mt-0 p-0 leading-normal">{{ t('auth.passwordChangedSuccess') }}</p>
6
6
  </div>
7
7
  </div>
8
8
  </template>
9
9
 
10
10
  <script setup>
11
-
11
+ import { useI18n } from 'vue-i18n'
12
+ const { t } = useI18n()
12
13
  </script>
13
14
 
14
15
  <style>
@@ -2,7 +2,7 @@
2
2
  <div class="w-full lg:w-6/12 md:w-9/12 max-w-[32rem]" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
3
  <div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border">
4
4
  <div class="text-center mb-8">
5
- <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">Reset password</div>
5
+ <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">{{ t('auth.resetPassword') }}</div>
6
6
  </div>
7
7
 
8
8
  <command-form service="passwordAuthentication" action="resetPasswordEmail" v-slot="{ data }"
@@ -20,7 +20,7 @@
20
20
  </Message>
21
21
  </div>
22
22
 
23
- <Button type="submit" label="Reset password" icon="pi pi-key" class="w-full"></Button>
23
+ <Button type="submit" :label="t('auth.resetPassword')" icon="pi pi-key" class="w-full"></Button>
24
24
 
25
25
  </command-form>
26
26
  </div>
@@ -1,14 +1,15 @@
1
1
  <template>
2
2
  <div class="w-full lg:w-6/12 md:w-9/12 max-w-[32rem]" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
3
  <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6">
4
- <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl mb-6">Password changed</div>
5
- <p class="mt-0 p-0 leading-normal">You have successfully changed your password.</p>
4
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl mb-6">{{ t('auth.passwordChanged') }}</div>
5
+ <p class="mt-0 p-0 leading-normal">{{ t('auth.passwordResetSuccess') }}</p>
6
6
  </div>
7
7
  </div>
8
8
  </template>
9
9
 
10
10
  <script setup>
11
-
11
+ import { useI18n } from 'vue-i18n'
12
+ const { t } = useI18n()
12
13
  </script>
13
14
 
14
15
  <style>
@@ -1,23 +1,23 @@
1
1
  <template>
2
2
  <div class="w-full lg:w-6/12 md:w-9/12 max-w-[32rem]" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
3
  <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6" v-if="isUnknown">
4
- <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">Unknown link</div>
5
- <p class="mt-0 mb-2 p-0 leading-normal">We can't find your secret link. Check if you copied the address correctly.</p>
4
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">{{ t('auth.unknownLink') }}</div>
5
+ <p class="mt-0 mb-2 p-0 leading-normal">{{ t('auth.unknownLinkDesc') }}</p>
6
6
  </div>
7
7
 
8
8
  <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6" v-if="isUsed">
9
- <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">Link used</div>
10
- <p class="mt-0 mb-2 p-0 leading-normal">This link was already used.</p>
9
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">{{ t('auth.linkUsed') }}</div>
10
+ <p class="mt-0 mb-2 p-0 leading-normal">{{ t('auth.linkUsedDesc') }}</p>
11
11
  </div>
12
12
 
13
13
  <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6" v-if="isExpired && !isUsed">
14
- <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">Link expired</div>
15
- <p class="mt-0 mb-6 p-0 leading-normal">Your password reset authentication already expired.</p>
14
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">{{ t('auth.linkExpired') }}</div>
15
+ <p class="mt-0 mb-6 p-0 leading-normal">{{ t('auth.linkExpiredDesc') }}</p>
16
16
  </div>
17
17
 
18
18
  <div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border" v-if="isReady || working">
19
19
  <div class="text-center mb-8">
20
- <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">Reset password</div>
20
+ <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">{{ t('auth.resetPassword') }}</div>
21
21
  </div>
22
22
 
23
23
  <command-form service="passwordAuthentication" action="finishResetPassword" v-slot="{ data }"
@@ -27,7 +27,7 @@
27
27
 
28
28
  <template v-if="isMounted">
29
29
  <div class="p-field mb-4">
30
- <label for="newPassword" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">New password</label>
30
+ <label for="newPassword" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">{{ t('auth.newPassword') }}</label>
31
31
  <Password id="newPassword" class="w-full" inputClass="w-full" toggleMask
32
32
  :invalid="!!data.passwordHashError"
33
33
  v-model="data.passwordHash">
@@ -48,7 +48,7 @@
48
48
  </div>
49
49
 
50
50
  <div class="p-field mb-4">
51
- <label for="reenterPassword" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">Re-enter password</label>
51
+ <label for="reenterPassword" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">{{ t('auth.reenterPassword') }}</label>
52
52
  <Password id="reenterPassword" class="w-full" inputClass="w-full"
53
53
  v-model="secondPassword"
54
54
  :feedback="false" toggleMask />
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div class="flex relative lg:static bg-surface-50 dark:bg-surface-950"
3
- style="height: calc(100vh - 88px)">
3
+ style="min-height: calc(100vh - 88px)">
4
4
  <div id="settings-menu"
5
5
  class="bg-surface-0 dark:bg-surface-950 flex-shrink-0 absolute left-0 h-full
6
6
  top-0 z-1 border-r-1 border-r-surface-300 dark:border-r-surface-700 select-none
@@ -3,36 +3,36 @@
3
3
  <div class="overflow-y-auto">
4
4
  <ul class="list-none p-2 m-0">
5
5
  <li>
6
- <div class="p-4 text-surface-500 dark:text-surface-300 font-medium">SETTINGS</div>
6
+ <div class="p-4 text-surface-500 dark:text-surface-300 font-medium">{{ t('settings.settings') }}</div>
7
7
  </li>
8
8
 
9
- <SettingsMenuItem name="user:identification" icon="id-card" label="Identification" class="hidden md:block" />
9
+ <SettingsMenuItem name="user:identification" icon="id-card" :label="t('settings.identification')" class="hidden md:block" />
10
10
 
11
11
  <SettingsMenuItem v-if="client.user"
12
- name="user:settings" icon="cog" label="General Settings" class="hidden md:block" />
12
+ name="user:settings" icon="cog" :label="t('settings.generalSettings')" class="hidden md:block" />
13
13
 
14
14
  <SettingsMenuItem v-if="(availableLocales?.length ?? 0) > 1"
15
- name="user:locale" icon="language" label="Language and Locale" class="hidden md:block" />
15
+ name="user:locale" icon="language" :label="t('settings.languageAndLocale')" class="hidden md:block" />
16
16
 
17
17
  <SettingsMenuItem v-if="clientConfig.notifications?.length"
18
- name="user:notificationsSettings" icon="exclamation-circle" label="Notifications" />
18
+ name="user:notificationsSettings" icon="exclamation-circle" :label="t('settings.notifications')" />
19
19
 
20
20
  </ul>
21
21
 
22
22
  <ul v-if="client.user" class="list-none p-2 m-0 border-t border-surface">
23
23
  <li>
24
- <div class="p-4 text-surface-500 dark:text-surface-300 font-medium">AUTHORIZATION</div>
24
+ <div class="p-4 text-surface-500 dark:text-surface-300 font-medium">{{ t('settings.authorization') }}</div>
25
25
  </li>
26
26
 
27
- <SettingsMenuItem v-if="client.user" name="user:connected" icon="users" label="Connected Accounts" />
27
+ <SettingsMenuItem v-if="client.user" name="user:connected" icon="users" :label="t('settings.connectedAccounts')" />
28
28
 
29
- <SettingsMenuItem v-if="client.user" name="user:changePassword" icon="key" label="Change Password" />
29
+ <SettingsMenuItem v-if="client.user" name="user:changePassword" icon="key" :label="t('settings.changePassword')" />
30
30
 
31
31
  </ul>
32
32
 
33
33
  <ul v-if="client.user" class="list-none p-2 m-0 border-t border-surface">
34
34
 
35
- <SettingsMenuItem v-if="client.user" name="user:delete" icon="trash" label="Delete Account" />
35
+ <SettingsMenuItem v-if="client.user" name="user:delete" icon="trash" :label="t('settings.deleteAccount')" />
36
36
 
37
37
  </ul>
38
38
  </div>
@@ -3,11 +3,11 @@
3
3
  <div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border">
4
4
 
5
5
  <div class="text-center mb-8">
6
- <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">Welcome Back</div>
7
- <span class="text-surface-600 dark:text-surface-200 font-medium leading-normal">Don't have an account?</span>
6
+ <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">{{ t('auth.welcomeBack') }}</div>
7
+ <span class="text-surface-600 dark:text-surface-200 font-medium leading-normal">{{ t('auth.dontHaveAccount') }}</span>
8
8
  <router-link :to="{ name: 'user:signUpEmail' }"
9
9
  class="font-medium no-underline ml-2 text-blue-500 cursor-pointer">
10
- Create today!</router-link>
10
+ {{ t('auth.createToday') }}</router-link>
11
11
  </div>
12
12
 
13
13
  <command-form service="passwordAuthentication" action="signInEmail" v-slot="{ data }"
@@ -15,7 +15,7 @@
15
15
 
16
16
  <div class="p-field mb-4">
17
17
  <label for="email" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
18
- Email address
18
+ {{ t('auth.emailAddress') }}
19
19
  </label>
20
20
  <InputText id="email" type="text" class="w-full"
21
21
  aria-describedby="email-help" :invalid="data.emailError"
@@ -26,7 +26,7 @@
26
26
  </div>
27
27
 
28
28
  <div class="p-field mb-4">
29
- <label for="password" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">Password (optional)</label>
29
+ <label for="password" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">{{ t('auth.passwordOptional') }}</label>
30
30
  <Password id="password" class="w-full" inputClass="w-full" toggleMask :feedback="false"
31
31
  aria-describedby="password-help" :invalid="data.passwordHashError"
32
32
  v-model="data.passwordHash" />
@@ -43,23 +43,23 @@
43
43
  </div>-->
44
44
  <router-link :to="{ name: 'user:resetPassword' }"
45
45
  class="font-medium no-underline ml-2 text-blue-500 text-right cursor-pointer">
46
- Forgot password?
46
+ {{ t('auth.forgotPassword') }}
47
47
  </router-link>
48
48
  </div>
49
49
 
50
- <Button label="Sign In" icon="pi pi-user" class="w-full" type="submit"></Button>
50
+ <Button :label="t('auth.signIn')" icon="pi pi-user" class="w-full" type="submit"></Button>
51
51
 
52
52
  </command-form>
53
53
 
54
54
  <Divider v-if="availableAccountTypes.length > 0" align="center" class="my-6">
55
- <span class="text-surface-600 dark:text-surface-200 font-normal text-sm">OR</span>
55
+ <span class="text-surface-600 dark:text-surface-200 font-normal text-sm">{{ t('common.or') }}</span>
56
56
  </Divider>
57
57
 
58
58
  <router-link v-for="accountType in availableAccountTypes"
59
59
  :to="accountType.connectRoute"
60
60
  class="no-underline">
61
61
  <Button
62
- :label="`Sign In with ${accountType.accountType[0].toUpperCase()}${accountType.accountType.slice(1)}`"
62
+ :label="t('auth.signInWith', { provider: accountType.accountType[0].toUpperCase() + accountType.accountType.slice(1) })"
63
63
  :icon="`pi pi-${accountType.accountType}`"
64
64
  class="w-full p-button-secondary mb-1"
65
65
  />
@@ -2,11 +2,11 @@
2
2
  <div class="w-full lg:w-6/12 md:w-9/12 max-w-[32rem]" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
3
  <div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border">
4
4
  <div class="text-center mb-8">
5
- <div class="text-surface-900 dark:text-surface-200 text-3xl font-medium mb-4">Sign Up</div>
6
- <span class="text-surface-600 dark:text-surface-200 font-medium leading-normal">Already have an account?</span>
5
+ <div class="text-surface-900 dark:text-surface-200 text-3xl font-medium mb-4">{{ t('auth.signUp') }}</div>
6
+ <span class="text-surface-600 dark:text-surface-200 font-medium leading-normal">{{ t('auth.alreadyHaveAccount') }}</span>
7
7
  <router-link :to="{ name: 'user:signInEmail' }"
8
8
  class="font-medium no-underline ml-2 text-blue-500 cursor-pointer">
9
- Sign in</router-link>
9
+ {{ t('auth.signInToday') }}</router-link>
10
10
  </div>
11
11
 
12
12
  <command-form service="messageAuthentication" action="signUpEmail" v-slot="{ data, submit }"
@@ -14,7 +14,7 @@
14
14
 
15
15
  <div class="p-field mb-4">
16
16
  <label for="email" class="block text-surface-900 dark:text-surface-200 font-medium mb-2">
17
- Email address
17
+ {{ t('auth.emailAddress') }}
18
18
  </label>
19
19
  <InputText id="email" type="text" class="w-full"
20
20
  aria-describedby="email-help" :invalid="!!data.emailError"
@@ -24,27 +24,26 @@
24
24
  </Message>
25
25
  </div>
26
26
 
27
- <Button label="Sign Up with email" icon="pi pi-user" class="w-full" type="submit" />
27
+ <Button :label="t('auth.signUpWithEmail')" icon="pi pi-user" class="w-full" type="submit" />
28
28
  </command-form>
29
29
 
30
30
  <Divider v-if="availableAccountTypes.length > 0" align="center" class="my-6">
31
- <b>OR</b>
31
+ <b>{{ t('common.or') }}</b>
32
32
  </Divider>
33
33
 
34
34
  <router-link v-for="accountType in availableAccountTypes"
35
35
  :to="accountType.connectRoute"
36
36
  class="no-underline">
37
37
  <Button
38
- :label="`Sign Up with ${accountType.accountType[0].toUpperCase()}${accountType.accountType.slice(1)}`"
38
+ :label="t('auth.signUpWith', { provider: accountType.accountType[0].toUpperCase() + accountType.accountType.slice(1) })"
39
39
  :icon="`pi pi-${accountType.accountType}`"
40
40
  class="w-full p-button-secondary mb-1"
41
41
  />
42
42
  </router-link>
43
43
 
44
44
  <div class="mt-4 text-surface-600 dark:text-surface-200">
45
- By providing your email address or google account, you consent to its processing solely
46
- for registration and account verification purposes, in accordance with our
47
- <router-link to="/privacy-policy">Privacy Policy</router-link>.
45
+ {{ t('auth.privacyConsent') }}
46
+ <router-link to="/privacy-policy">{{ t('auth.privacyPolicy') }}</router-link>.
48
47
  </div>
49
48
 
50
49
  </div>
package/index.js CHANGED
@@ -30,6 +30,12 @@ export * from './front/src/connected/connected.js'
30
30
  export * from "./front/src/router.js"
31
31
 
32
32
  import en from "./front/locales/en.json"
33
- const locales = { en }
34
- export { locales }
33
+ import pl from "./front/locales/pl.json"
34
+ const locales = { en, pl }
35
+
36
+ import * as enLocale from "./front/locales/en.js"
37
+ import * as plLocale from "./front/locales/pl.js"
38
+ const localeStructures = { en: enLocale, pl: plLocale }
39
+
40
+ export { locales, localeStructures }
35
41