|
|
@@ -135,6 +135,44 @@
|
|
|
/>
|
|
|
</div>
|
|
|
|
|
|
+ <div>
|
|
|
+ <div class="font12 fontbold q-mb-sm text-grey-8">
|
|
|
+ {{ $t("profile.language") }}
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="row">
|
|
|
+ <q-radio
|
|
|
+ v-model="selectedLocale"
|
|
|
+ class="text-text col-4 font10 fontmedium"
|
|
|
+ color="primary"
|
|
|
+ keep-color
|
|
|
+ val="pt"
|
|
|
+ :label="$t('profile.lang_pt')"
|
|
|
+ @update:model-value="onLocaleChange"
|
|
|
+ />
|
|
|
+
|
|
|
+ <q-radio
|
|
|
+ v-model="selectedLocale"
|
|
|
+ class="text-text col-4 font10 fontmedium"
|
|
|
+ color="primary"
|
|
|
+ keep-color
|
|
|
+ val="en"
|
|
|
+ :label="$t('profile.lang_en')"
|
|
|
+ @update:model-value="onLocaleChange"
|
|
|
+ />
|
|
|
+
|
|
|
+ <q-radio
|
|
|
+ v-model="selectedLocale"
|
|
|
+ class="text-text col-4 font10 fontmedium"
|
|
|
+ color="primary"
|
|
|
+ keep-color
|
|
|
+ val="es"
|
|
|
+ :label="$t('profile.lang_es')"
|
|
|
+ @update:model-value="onLocaleChange"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
<!-- NOVA SEÇÃO -->
|
|
|
<div>
|
|
|
<div class="font12 fontbold q-mb-sm text-grey-8">
|
|
|
@@ -184,11 +222,12 @@ import {
|
|
|
CameraSource,
|
|
|
} from "@capacitor/camera";
|
|
|
|
|
|
+import { Cookies, useDialogPluginComponent, useQuasar } from "quasar";
|
|
|
import { computed, onMounted, ref } from "vue";
|
|
|
import { genderOptions } from "src/helpers/genderOptions";
|
|
|
import { getUser, updateUser } from "src/api/user";
|
|
|
+import { i18n } from "src/boot/i18n";
|
|
|
import { updateProviderWithFiles } from "src/api/provider";
|
|
|
-import { useDialogPluginComponent, useQuasar } from "quasar";
|
|
|
import { useFormUpdateTracker } from "src/composables/useFormUpdateTracker";
|
|
|
import { useI18n } from "vue-i18n";
|
|
|
|
|
|
@@ -223,6 +262,22 @@ const selfieFile = ref(null);
|
|
|
const submitting = ref(false);
|
|
|
const userId = ref(null);
|
|
|
|
|
|
+const normalizeLocale = (loc) => {
|
|
|
+ if (!loc) return "pt";
|
|
|
+
|
|
|
+ const l = String(loc).toLowerCase();
|
|
|
+
|
|
|
+ if (l.startsWith("pt")) return "pt";
|
|
|
+ if (l.startsWith("en")) return "en";
|
|
|
+ if (l.startsWith("es")) return "es";
|
|
|
+
|
|
|
+ return "pt";
|
|
|
+};
|
|
|
+
|
|
|
+const selectedLocale = ref(
|
|
|
+ normalizeLocale(i18n.global.locale.value ?? i18n.global.locale),
|
|
|
+);
|
|
|
+
|
|
|
const hasChanges = computed(
|
|
|
() => hasUpdatedFields.value || !!selfieFile.value,
|
|
|
);
|
|
|
@@ -300,6 +355,12 @@ const takeSelfie = async () => {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+const onLocaleChange = (val) => {
|
|
|
+ i18n.global.locale.value = val;
|
|
|
+
|
|
|
+ Cookies.set("locale", val, { expires: 365, path: "/" });
|
|
|
+};
|
|
|
+
|
|
|
const submitUpdate = async () => {
|
|
|
if (!hasChanges.value) return;
|
|
|
|