【问题标题】:Laravel Nova card localizationLaravel Nova 卡片本地化
【发布时间】:2019-02-25 21:14:01
【问题描述】:

我正在尝试为为 Laravel Nova 仪表板构建的 card 添加本地化支持。

我已经在/resources/lang 中创建了一个文件夹,其中包含en.json 格式的JSON 语言文件。文件通过 publish 命令发布(复制),但 loadJsonTranslationsFrom() 似乎没有做任何事情:

class CardServiceProvider extends ServiceProvider
{
  public function boot()
  {
    $this->publishes(
      [__DIR__ . '/../resources/lang' => resource_path('lang/vendor/my-custom-card')],
      'my-custom-card-lang'
    );

    $this->loadJsonTranslationsFrom(resource_path('lang/vendor/my-custom-card'));
  }
}

Card.vue 中的标记如下所示:

{{__('Title')}}

如何测试 JSON 文件是否正确加载?我错过了什么?

问题是如何在 Laravel Nova 中支持卡片本地化?

【问题讨论】:

    标签: localization laravel-5.6 laravel-nova


    【解决方案1】:

    Laravel Nova 2 中的卡片本地化 has been solved

    要本地化字符串,请在 Vue 组件中使用 __ 帮助程序,并在 NovaServiceProvider 中加载相应的翻译文件:

    Nova::serving(function (ServingNova $event) {
        Nova::script('{{ component }}', __DIR__.'/../dist/js/card.js');
        Nova::style('{{ component }}', __DIR__.'/../dist/css/card.css');
        Nova::translations(__DIR__.'/../resources/lang/en/card.json');
    });
    

    可以在GitHub 上找到示例性实现。

    更多信息现在可在documentation 中获得。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,但对于 tool,也在 Nova 2.0 中。
      我找到了一个有点优雅的解决方案 - 也许它仍然可以帮助某人。

      • /nova-components/{your-tool}/resources/lang/中创建en.json
      • /nova-components/{your-tool}/resources/js/tool.js 中添加Vue.mixin(require('./translation'));
        它应该看起来像这样:

        Nova.booting((Vue, router, store) => {
            router.addRoutes([
                {your-routes}
            ]);
            Vue.mixin(require('./translation'));    <-------------- add this line!
        });
        
      • 创建/nova-components/{your-tool}/resources/js/translation.js,它应该是这样的:

        module.exports = {
            methods: {
                __(key, replace) {
                    var translations = _.merge(window.config.translations, window.config['tool-translations']);
                    var translation = translations[key]
                        ? translations[key]
                        : key;
        
                    _.forEach(replace, (value, key) => {
                        translation = translation.replace(':' + key, value)
                    });
        
                    return translation;
                }
            }
        };
        
      • 现在您必须在/nova-components/{your-tool}/src/ToolServicePrivoder.php 文件的boot() 函数内的Nova::serving() 函数中添加以下内容:

        Nova::provideToScript([
            'tool-translations' => $this->getTranslations(),
        ]);
        
      • 现在在下面说boot()函数下面添加:

        private static function getTranslations()
        {
            $translationFile = __DIR__ . '/../resources/lang/' . app()->getLocale() . '.json';
        
            if (!is_readable($translationFile)) {
                return [];
            }
        
            return json_decode(file_get_contents($translationFile), true);
        }
        

      【讨论】:

      • Nova 文档再次让我们失望了,在文档中他们只提到了 en.json 文件,并不是说我们需要所有这些代码才能让它工作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      相关资源
      最近更新 更多