Skip to content

support vue files for key extraction #131

Description

@noor-tg

🚀 Feature Proposal

I want to extract keys from vue file. but I see error when I run the command

Motivation

  • because vue is one of the major frameworks in js echosystem

Example

<script setup lang="ts">
import { useHead } from '@unhead/vue'
import { onMounted } from 'vue'
import { RouterView } from 'vue-router'
import { useTagsStore } from './stores/tags'
import { ref, watch } from 'vue'
import MainHeader from '@/components/MainHeader.vue'
import TopNav from './components/TopNav.vue'
import LargeNav from './components/LargeNav.vue'
import AsideCatalog from './components/AsideCatalog.vue'
import MainFooter from './components/MainFooter.vue'

useHead({
  titleTemplate: (title) => `Max Motors ${title ? ' - ' + title : ''}`,
})

const submenu = ref([])
watch(submenu, (newValue) => {
  if (newValue.length) {
    document.body.style.overflow = 'hidden'
  } else {
    document.body.style.overflow = ''
  }
})
const asideOpen = ref(false)
onMounted(async () => {
  await useTagsStore().fetchTags()
})
</script>

<template>
  <!-- class="flex relative flex-col justify-start items-stretch" -->
  <div :class="[submenu.length ? 'overflow-hidden' : '']">
    <button
      class="absolute right-0 z-50 mt-52 w-full h-full bg-gray-900/40"
      @click.prevent="submenu = []"
      v-if="submenu.length"
    />
    <TopNav />
    <MainHeader v-model:asideOpen="asideOpen" />
    <LargeNav class="relative z-50" v-model:asideOpen="asideOpen" v-model:submenu="submenu" />
    <AsideCatalog v-model:asideOpen="asideOpen" />

    <main class="relative grow">
      <RouterView />
    </main>
    <MainFooter />
  </div>
</template>

i18next.config.ts

import { defineConfig } from "i18next-cli";

export default defineConfig({
  locales: ["en"],
  extract: {
    input: [
      "./ui-vue-ssr/src/**/*.{ts,vue}",
      "./srvr-elysia/src/**/*.ts",
    ],
    output: "shared/locales/{{language}}/{{namespace}}.json",
  },
});

when run command i18next-cli extract I see

cause: [Error:   × Expression expected
       ╭─[1:1]
     1 │ <script setup lang="ts">
       · ─
     2 │ import { useHead } from '@unhead/vue'
     3 │ import { onMounted } from 'vue'
     4 │ import { RouterView } from 'vue-router'
       ╰────
      × Expected ';', '}' or <eof>
       ╭─[1:1]
     1 │ <script setup lang="ts">
       · ───┬─── ─────
       ·    ╰── This is the expression part of an expression statement
     2 │ import { useHead } from '@unhead/vue'
     3 │ import { onMounted } from 'vue'
     4 │ import { RouterView } from 'vue-router'
       ╰────


    Caused by:
        Syntax Error] {
      code: 'GenericFailure'
    }
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions