為何捐款
API 瀏覽器
Quasar 語言包

Quasar 語言包指的是 Quasar 自身元件的國際化,其中一些元件帶有標籤。

載入 Lang API...
設定

// quasar.config file

return {
  framework: {
    config: {
      lang: /* look at QuasarConfOptions from the API card */
    }
  }
}

警告

應注意以下描述僅為 Quasar 元件的國際化。如果您需要國際化自己的元件,請閱讀 App 國際化 文件頁面。

如上所述,某些 Quasar 元件有自己的標籤。在國際化方面,一種選擇是透過 Quasar 元件(例如 QTable)每個實例上的標籤屬性來設定標籤。這是您自訂文字以符合所選語言的方式。然而,這會花費時間並增加網站/應用程式不必要的複雜性。相反地,您可以使用 Quasar 語言包,其中包含許多為您翻譯的標準標籤定義,例如「取消」、「清除」、「選擇」、「更新」等等。無需再次翻譯這些!而且它是開箱即用的。

提示

如需可用 Quasar 語言的完整列表,請查看 GitHub 上的 Quasar Languages

如果您的目標語言不在該列表中,請隨時提交 PR 來新增它。最多只需 5 到 10 分鐘。我們誠摯歡迎任何語言!

設定預設語言包

除非另有設定(請參閱下文),否則 Quasar 預設使用 en-US 語言包。

硬式編碼

如果預設 Quasar 語言包不是動態決定的(例如,不依賴 Cookie),那麼您可以

Quasar CLI

編輯 /quasar.config 檔案

/quasar.config 檔案

framework: {
  lang: 'de'
}

Quasar Vite 插件

編輯您的 main.js

// ...
import { Quasar } from 'quasar'
// ...
import langDe from 'quasar/lang/de'
// ...
app.use(Quasar, {
  // ...,
  lang: langDe
})

Vue CLI

編輯您的 main.js

// ...
import { Quasar } from 'quasar'
// ...
import langDe from 'quasar/lang/de'
// ...
app.use(Quasar, {
  // ...,
  lang: langDe
})

Quasar UMD

包含您的 Quasar 版本的語言包 JS 標籤,並告知 Quasar 使用它。範例

<!-- include this after Quasar JS tag -->
<script src="https://cdn.jsdelivr.net/npm/quasar@2/dist/lang/de.umd.prod.js"></script>
<script>
  Quasar.Lang.set(Quasar.Lang.de)
</script>

查看 UMD / Standalone 頁面上您需要在 HTML 檔案中包含哪些標籤。

動態 (非 SSR)

Quasar CLI:如果您的目標 Quasar 語言包必須動態選擇(範例:依賴 Cookie),那麼您需要建立一個啟動檔案:$ quasar new boot quasar-lang-pack [--format ts]。這將建立 /src/boot/quasar-lang-pack.js 檔案。編輯它以


import { Lang } from 'quasar'

// relative path to your node_modules/quasar/..
// change to YOUR path
const langList = import.meta.glob('../../node_modules/quasar/lang/*.js')
// or just a select few (example below with only DE and FR):
// import.meta.glob('../../node_modules/quasar/lang/(de|fr).js')

export default async () => {
  const langIso = 'de' // ... some logic to determine it (use Cookies Plugin?)

  try {
    langList[ `../../node_modules/quasar/lang/${ langIso }.js` ]().then(lang => {
      Lang.set(lang.default)
    })
  }
  catch (err) {
    console.error(err)
    // Requested Quasar Language Pack does not exist,
    // let's not break the app, so catching error
  }
}

然後將此啟動檔案註冊到 /quasar.config 檔案中

boot: [
  'quasar-lang-pack'
]

始終約束動態匯入

請注意 Webpack magic comment - webpackInclude 的使用。否則,所有可用的語言包都將被捆綁,導致編譯時間和捆綁包大小增加。請參閱 動態匯入的注意事項

動態 (SSR)

在處理 SSR 時,我們不能使用單例物件,因為那會污染會話。因此,與上面的動態範例相反(請先閱讀!),您還必須從啟動檔案中指定 ssrContext


import { Lang } from 'quasar'

// relative path to your node_modules/quasar/..
// change to YOUR path
const langList = import.meta.glob('../../node_modules/quasar/lang/*.js')
// or just a select few (example below with only DE and FR):
// import.meta.glob('../../node_modules/quasar/lang/(de|fr).js')

// ! NOTICE ssrContext param:
export default async ({ ssrContext }) => {
  const langIso = 'de' // ... some logic to determine it (use Cookies Plugin?)

  try {
    langList[ `../../node_modules/quasar/lang/${ langIso }.js` ]().then(lang => {
      Lang.set(lang.default, ssrContext)
    })
  }
  catch (err) {
    console.error(err)
    // Requested Quasar Language Pack does not exist,
    // let's not break the app, so catching error
  }
}

在執行時變更 Quasar 語言包

變更語言包

使用 QSelect 動態變更 Quasar 元件語言的範例


<template>
  <q-select
    v-model="lang"
    :options="langOptions"
    label="Quasar Language"
    dense
    borderless
    emit-value
    map-options
    options-dense
    style="min-width: 150px"
  />
  <div>{{ $q.lang.label.close }}</div>
</template>

<script>
import { useQuasar } from 'quasar'
import languages from 'quasar/lang/index.json'
import { ref, watch } from 'vue'

const modules = import.meta.glob('../../node_modules/quasar/lang/(de|en-US|es).js')

const appLanguages = languages.filter(lang =>
  ['de', 'en-US', 'es'].includes(lang.isoName)
)

const langOptions = appLanguages.map(lang => ({
  label: lang.nativeName, value: lang.isoName
}))

export default {
  setup () {
    const $q = useQuasar()
    const lang = ref($q.lang.isoName)

    watch(lang, val => {
      modules[`../../node_modules/quasar/lang/${val}.js`]().then(lang => {
        $q.lang.set(lang.default)
      })
    })

    return {
      lang,
      langOptions
    }
  }
}
</script>

在執行時變更特定標籤

如果您想將特定標籤變更為另一個,您可以。這是一個範例


import { useQuasar } from 'quasar'

setup () {
  const $q = useQuasar()

  function changeLabel () {
    $q.lang.table.noData = 'Hey... there is no data...'
  }

  return { changeLabel }
}

如果您想在 .vue 檔案之外執行此操作(而且您不在 SSR 模式下),那麼您可以

/src/boot/some-boot-file.js

import { Lang } from 'quasar'

export default () {
  Lang.props.table.noData = 'Hey... there is no data...'
}

在應用程式空間中使用 Quasar 語言包

儘管 Quasar 語言包僅設計用於 Quasar 元件的內部使用,但您仍然可以將其標籤用於您自己的網站/應用程式元件。

"Close" label in current Quasar Language Pack is:
{{ $q.lang.label.close }}

查看 GitHub 上的 Quasar 語言包,以查看 $q.lang 的結構。

偵測語系

還有一個方法可以確定使用者語系,Quasar 開箱即用提供此方法

// outside of a Vue file
import { Lang } from 'quasar'
Lang.getLocale() // returns a string

// inside of a Vue file
import { useQuasar } from 'quasar'

setup () {
  const $q = useQuasar()
  $q.lang.getLocale() // returns a string
}