使用 i18n 和 Nuxt 时设置语言属性?

Posted

技术标签:

【中文标题】使用 i18n 和 Nuxt 时设置语言属性?【英文标题】:Setting the language attribute when using i18n and Nuxt? 【发布时间】:2018-11-12 08:11:18 【问题描述】:

使用 Nuxt,您可以在 nuxt.config.js 文件中设置语言 html 属性,如下所示:

module.exports = 
  head: 
    htmlAttrs: 
      lang: 'en-GB',
,
... etc etc

但是,如果您有一个多语言应用程序,您应该怎么做?有没有办法根据语言环境设置语言属性?

我认为document.documentElement.setSttribute('lang', 'language-code') 可能会起作用,但由于 nuxt 是在服务器端呈现的,它似乎无法访问 documentElement 对象。

谢谢

【问题讨论】:

【参考方案1】:

如果您使用的是 nuxt-i18n,您可以在默认布局中使用 addSeoAttributes: true 调用 $nuxtI18nHead。这将设置 lang 属性以及其他一些特定于语言的标题属性,以实现更好的 SEO。

export default 
    head() 
        return this.$nuxtI18nHead( addSeoAttributes: true )   
    ,

来源:https://i18n.nuxtjs.org/seo#improving-performance

【讨论】:

【参考方案2】:

也许我迟到了,但这就像你layouts/default.vue 中的这段代码一样简单:

export default 
    // other code...
    head() 
        return 
            htmlAttrs: 
                lang: this.$i18n.locale
            
        
    ,
    // other code...

【讨论】:

【参考方案3】:
    安装 vue-i18n npm
 npm install vue-i18n
    在插件目录中创建一个插件并添加以下代码。例如:i18n.js
import Vue from 'vue' 

import VueI18n from 'vue-i18n'

Vue.use(VueI18n)

export default (app) => 
    app.i18n = new ueI18n(
        locate: 'ja',
        fallbackLocale: 'en',
        silentTranslationWarn: true,
        message: 
            'ja': require('~/locale/ja/translations.json'),
             'en': require('~/locale/en/translations.json')
        
    )

    将此插件包含在您的 nuxt.config.js 文件中并设置语言
module.exports = 
    plugins: [src: '~plugins/i18n.js', injectAs: 'i18n'],
    head: 
        htmlAttrs: 
            lang: this.$i18n.locale,
        
    

    translations.json 文件包含您的 json 格式翻译

    "hello": "Hello World"

    在组件文件中,您可以访问如下翻译
<p> $t("hello") </p>

注意:我没有测试代码

【讨论】:

谢谢,虽然我不认为这实际上设置了 标记中的 Language 属性。我问是因为这似乎对屏幕阅读器等很重要(Wave 将其显示为错误)。 这不是 OP 要求的 如何在 nuxt.config.js 中使用 this.$i18n?这对我不起作用。 好的。您可以将 this.$i18n 用于 head,但 head 必须是返回对象的函数,而不仅仅是一个对象。 正如@remino 之前所说,$i18n 无法通过nuxt.config.js 获得,因此答案不会按预期工作。

以上是关于使用 i18n 和 Nuxt 时设置语言属性?的主要内容,如果未能解决你的问题,请参考以下文章

vue-cli之路由独立成JS文件之后,如何在路由中获取vuex属性或者设置国际化i18n的当前使用语言

当 Flickity 使用轮播渲染子组件时,Nuxt 应用程序抛出“无法读取未定义的属性”

用于测试 i18n 属性的 Maven 插件

Vue-Router 和 i18n 与 Nuxt

将 Jest 与 Nuxt 组件一起使用时无法读取未定义的属性 $loading

在 Vue / Nuxt(打字稿)中改变本地属性