Nuxt + Laravel 上的多语言站点,带有来自后端的语言环境

Posted

技术标签:

【中文标题】Nuxt + Laravel 上的多语言站点,带有来自后端的语言环境【英文标题】:Multilingual site on Nuxt + Laravel with locales from backend 【发布时间】:2020-03-21 23:08:37 【问题描述】:

我正在Nuxt + Laravel 上创建一个多语言网站。我希望有一个选项可以在数据库中设置语言环境并将这些语言环境共享到Nuxt 前面。有可能吗?

我发现Nuxt 插件nuxt-i18n 看起来不错,但是语言环境是在nuxt.config.js 文件中设置的,您无法在此文件中设置来自api 响应的数据。

【问题讨论】:

【参考方案1】:

您可以在 nuxt-i18n

中使用延迟加载翻译

首先,为类似这样的语言创建一个结构:

nuxt-project/
├── lang/
│   ├── en-US.js
│   ├── es-ES.js
│   ├── fr-FR.js
├── nuxt.config.js

然后设置nuxt.config 配置。请注意,您需要设置lazy: truelangDir

// nuxt.config.js

['nuxt-i18n', 
  locales: [
    
      code: 'en',
      file: 'en-US.js'
    ,
    
      code: 'es',
      file: 'es-ES.js'
    ,
    
      code: 'fr',
      file: 'fr-FR.js'
    
  ],
  lazy: true,
  langDir: 'lang/'
]

然后,在 lang 文件中,您可以调用 API 并返回带有翻译消息的 json,如下所示:

// lang/[lang].js

export default (context) => 
  return new Promise(function (resolve) 
    //Call your API and resolve the content here
    resolve(
      //The JSON return from your API
    )
  );

您可以在documentation找到更多详细信息

【讨论】:

缺乏示例但提供了线索,不知何故:***.com/questions/62529529/… 可能有帮助【参考方案2】:

基于此答案:https://***.com/a/62534495/889126

我已经做到了

export default async function (context) 
  // axios is derived directly from lib instead of context
  const axios = require('axios').default;

  let localeMessages = null

  await axios.get(
    'http://127.0.0.1:8000/api/js/lang-km.json'
  ).then((result) => 
    localeMessages = result.data
  ).catch(() => 
    localeMessages = 
  );

  return localeMessages

它正在工作,您可以在控制台和 NuxtJS 应用上显示:

备注:我响应的API是JSON字符串,你可以使用任何前缀,我只是做了:/api/js/lang-km.json(只是一个名字)

【讨论】:

以上是关于Nuxt + Laravel 上的多语言站点,带有来自后端的语言环境的主要内容,如果未能解决你的问题,请参考以下文章

htaccess 带有子目录的多语言站点,默认为 301

使用 Laravel 进行多语言数据库管理

多语言 django 网站上的搜索功能

如何处理 Codeigniter 上的多语言 uri 重定向?

markdown 在CodeIgniter中开发多语言站点

德尔福。使用 idHTTP 显示获取。在多语言 Windows 中获取 Unicode 文本