【问题标题】:Laravel Vuejs - translations store in database along with lang folder translationsLaravel Vuejs - 翻译与 lang 文件夹翻译一起存储在数据库中
【发布时间】:2018-08-25 16:08:50
【问题描述】:

我在 laravel 5.6 上使用 "vue-i18n": "^7.6.0",vuejs 将网站翻译成 16 种语言。

我在 config/app.php 中提到了所有语言,并且在 resources/assets/js/lang 中创建了一个文件夹 lang,其中包含所有语言文件(例如,en.json、es.json 等) )。我创建了一个下拉列表,一切正常。

现在我需要创建文章表。我正在寻找的是用多种语言创建文章并存储在数据库中,例如

文章(表格) article_languages(id, article_id lang content) 类似这样的东西

并将这些翻译与我使用 json 文件创建的主要翻译一起使用。如何做到这一点?

文章控制器

<?php

namespace App\Http\Controllers\Articles;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\ArticleCategory;
use App\Models\Article;
use App\Models\ArticleTranslation;

class ArticleController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index($language)
    {
        $articles = Article::withTranslations($language)->get();
        return $articles;
    }

我已经安装了this 软件包并按照他们的说明进行操作

ArtcileComponent

<template>
<div>
  <ul>
    <li>{ article.title }</li>
    <li>{ article.subtitle }</li>
    <li>{ article.content }</li>
  </ul>
</div>
<template>

<script>
    export default {
        data: function () {
            return {
                articles: []
            }
        },
        mounted() {
            var app = this;
            axios.get('/api/articles/' + self.$i18n.locale + '/')
                .then(function (response) {
                    self.articleText = response.data.article;
                })
                .catch(function (error) {
                    console.log(error);
                });
        }
    }
</script>

【问题讨论】:

  • 你的文章是来自 VueJS 还是来自 Laravel 刀片系统?如果您使用 vue 检索文章,您可以将 this.$i18n.locale 作为变量发送到 Laravel 以检索翻译的文章。
  • 它们来自 vue。你能否举一个简短的例子来帮助我启动。请留下答案,以便我打勾

标签: laravel vue.js


【解决方案1】:

在 Vue 中,您通过 API 向 Laravel 发送一个获取请求。 self.$i18n.locale 变量保存库语言环境。

let self = this;

axios.get('/articles/' + self.$i18n.locale + '/' + article.id)
  .then(function (response) {
    self.articleText = response.data.article
  })
  .catch(function (error) {
    // Do something with the error
    console.log(error)
  });

你的 Laravel 路由看起来像这样:

use App\AppArticle;
Route::get('articles/{language}/{id}', function ($language, $id) {
        return App\ArticleLanguage::where('article_id', $id)->where('lang', $language)->firstOrFail();
});

【讨论】:

  • 我尝试了您的建议,但 npm run watch compile 显示错误。我已经更新了上面的组件代码。你能检查一下我犯了什么错误吗?
  • [Vue 警告]:挂载钩子中的错误:“TypeError:无法读取未定义的属性 'locale'”在 ---> 中的 resources\assets\js\pages\articles\ Index.vue at resources\assets\js\components\Child.vue at resources\assets\js\layouts\default.vue warn @ vue.common.js?2371:593
  • 编译成功后出现上述错误。这是我使用的模板github.com/cretueusebiu/laravel-vue-spa
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 2011-12-05
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多