【问题标题】:joedixon/laravel-translation not updatingjoedixon/laravel 翻译未更新
【发布时间】:2021-11-19 11:28:22
【问题描述】:

我刚刚在 Laravel 版本 8 中安装了一个 Joedixon/Laravel 翻译包。 它显示了单词,但是当我想更新时它不起作用。 我做了文档中所说的所有事情,并且我已经阅读了有关它的这篇文章,但它也没有奏效。 https://github.com/joedixon/laravel-translation/issues/82

注意事项:

1:我把驱动改成数据库了。

2:添加新语言效果很好

3:在添加新翻译时,它会搜索 http://localhost/languages/en 而不是 http://localhost/project_name/languages/en

当我尝试更新一个单词时,它显示 404 not found in the console: 路线:

ticate:sanctum    |
|        | POST     | api/login                                |                               | App\Http\Controllers\Auth\AuthController@login                             | api
                  |
|        | POST     | api/register                             |                               | App\Http\Controllers\Auth\AuthController@register                          | api
                  |
|        | GET|HEAD | api/user                                 |                               | Closure                                                                    | api
                  |
|        |          |                                          |                               |                                                                            | App\Http\Middleware\Authenticate:sanctum    |
|        | GET|HEAD | home                                     | home                          | App\Http\Controllers\HomeController@index                                  | web
                  |
|        |          |                                          |                               |                                                                            | App\Http\Middleware\Authenticate            |
|        | GET|HEAD | languages                                | languages.index               | JoeDixon\Translation\Http\Controllers\LanguageController@index             | web
                  |
|        | POST     | languages                                | languages.store               | JoeDixon\Translation\Http\Controllers\LanguageController@store             | web
                  |
|        | GET|HEAD | languages/create                         | languages.create              | JoeDixon\Translation\Http\Controllers\LanguageController@create            | web
                  |
|        | POST     | languages/{language}                     | languages.translations.update | JoeDixon\Translation\Http\Controllers\LanguageTranslationController@update | web
                  |
|        | GET|HEAD | languages/{language}/translations        | languages.translations.index  | JoeDixon\Translation\Http\Controllers\LanguageTranslationController@index  | web
                  |
|        | POST     | languages/{language}/translations        | languages.translations.store  | JoeDixon\Translation\Http\Controllers\LanguageTranslationController@store  | web
                  |
|        | GET|HEAD | languages/{language}/translations/create | languages.translations.create | JoeDixon\Translation\Http\Controllers\LanguageTranslationController@create | web
                  |
|        | GET|HEAD | login                                    | login                         | App\Http\Controllers\Auth\LoginController@showLoginForm                    | web

语言翻译控制器

<?php

namespace JoeDixon\Translation\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
use JoeDixon\Translation\Drivers\Translation;
use JoeDixon\Translation\Http\Requests\TranslationRequest;

class LanguageTranslationController extends Controller
{
    private $translation;

    public function __construct(Translation $translation)
    {
        $this->translation = $translation;
    }

    public function index(Request $request, $language)
    {
        // dd($this->translation->getSingleTranslationsFor('en'));
        if ($request->has('language') && $request->get('language') !== $language) {
            return redirect()
                ->route('languages.translations.index', ['language' => $request->get('language'), 'group' => $request->get('group'), 'filter' => $request->get('filter')]);
        }

        $languages = $this->translation->allLanguages();
        $groups = $this->translation->getGroupsFor(config('app.locale'))->merge('single');
        $translations = $this->translation->filterTranslationsFor($language, $request->get('filter'));

        if ($request->has('group') && $request->get('group')) {
            if ($request->get('group') === 'single') {
                $translations = $translations->get('single');
                $translations = new Collection(['single' => $translations]);
            } else {
                $translations = $translations->get('group')->filter(function ($values, $group) use ($request) {
                    return $group === $request->get('group');
                });

                $translations = new Collection(['group' => $translations]);
            }
        }

        return view('translation::languages.translations.index', compact('language', 'languages', 'groups', 'translations'));
    }

    public function create(Request $request, $language)
    {
        return view('translation::languages.translations.create', compact('language'));
    }

    public function store(TranslationRequest $request, $language)
    {
        if ($request->filled('group')) {
            $namespace = $request->has('namespace') && $request->get('namespace') ? "{$request->get('namespace')}::" : '';
            $this->translation->addGroupTranslation($language, "{$namespace}{$request->get('group')}", $request->get('key'), $request->get('value') ?: '');
        } else {
            $this->translation->addSingleTranslation($language, 'single', $request->get('key'), $request->get('value') ?: '');
        }

        return redirect()
            ->route('languages.translations.index', $language)
            ->with('success', __('translation::translation.translation_added'));
    }

    public function update(Request $request, $language)
    {
        if (! Str::contains($request->get('group'), 'single')) {
            $this->translation->addGroupTranslation($language, $request->get('group'), $request->get('key'), $request->get('value') ?: '');
        } else {
            $this->translation->addSingleTranslation($language, $request->get('group'), $request->get('key'), $request->get('value') ?: '');
        }

        return ['success' => true];
    }
}

路线列表

<?php

Route::group(config('translation.route_group_config') + ['namespace' => 'JoeDixon\\Translation\\Http\\Controllers'], function ($router) {
    $router->get(config('translation.ui_url'), 'LanguageController@index')
        ->name('languages.index');

    $router->get(config('translation.ui_url').'/create', 'LanguageController@create')
        ->name('languages.create');

    $router->post(config('translation.ui_url'), 'LanguageController@store')
        ->name('languages.store');

    $router->get(config('translation.ui_url').'/{language}/translations', 'LanguageTranslationController@index')
        ->name('languages.translations.index');

    $router->post(config('translation.ui_url').'/{language}', 'LanguageTranslationController@update')
        ->name('languages.translations.update');

    $router->get(config('translation.ui_url').'/{language}/translations/create', 'LanguageTranslationController@create')
        ->name('languages.translations.create');

    $router->post(config('translation.ui_url').'/{language}/translations', 'LanguageTranslationController@store')
        ->name('languages.translations.store');
});

【问题讨论】:

  • 你使用的是路由模型绑定(RMB)吗?
  • 不只是普通路由
  • LanguageTranslationController@update 如何获取语言是 findOrfail 吗?
  • 我已经编辑了问题并添加了 LanguageTranslationsCONtroller

标签: php laravel laravel-artisan


【解决方案1】:

你跑了吗

php artisan optimize

自安装后清除路由缓存并允许它拾取您添加到 web.php 的新路由?

【讨论】:

  • 谢谢。是的,但仍然显示同样的问题
【解决方案2】:

我解决了完全不同地方的问题

它在 public/vendor/translation/js/app.js

        methods: {
            setActive: function () {
                this.isActive = !0, this.$refs.trans.focus()
            },
            storeTranslation: function () {
                var e = this;
                this.isActive = !1, this.hasChanged && (this.isLoading = !0, window.axios.post
                    ("/MY_PROJECT_NAME/public".concat("/").concat(this.route, "/").concat(this.language), {
                    language: this.language,
                    group: this.group,
                    key: this.translationKey,
                    value: this.translation
                }).then((function (t) {
                    e.hasSaved = !0, e.isLoading = !1, e.hasChanged = !1
                })).catch((function (t) {
                    e.hasErrored = !0, e.isLoading = !1
                })))
            }
        },

刚刚添加了("/MY_PROJECT_NAME/public".concat("/"),问题就解决了

【讨论】:

    猜你喜欢
    • 2021-10-18
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多