在vuejs和blade.php中使用i18n

时间:2019-07-02 14:45:17

标签: laravel vue.js internationalization

我想在Blade.php和vuejs视图中都使用i18n。可能吗? 我已经为i18n制作了json文件,它看起来像这样:

export default {
    "en": {
        "menu": {
             "home":"Home",
             "example":"Example"
        }
    }
}

它可以与vuejs一起使用,但我想知道如何在laravel中使用它...这可能吗?

否则,有没有办法在laravel和vuejs中访问cookie,还是我需要使用axios请求存储它并在vue中获取它? (我想存储和阅读使用lang)。

这是我要使用i18n的blade.php视图

@if (Route::has('register'))
      <li class="nav-item">
             <a class="nav-link" href="{{ route('register') }}">{{ __('home.example') }}</a>
      </li>
@endif

在vue.js文件中,我要做的就是 {{$ t('home.example')}}

我使用这个库:https://github.com/kazupon/vue-i18n

非常感谢您!

1 个答案:

答案 0 :(得分:1)

我认为在Blade模板中使用vue-i18n很容易。

刀片模板allow,您可以在花括号(@{{)前使用}}符号,以指示该表达式不应由Blade求值。我想建议您利用它来发挥自己的优势,并在Blade中使用@ {{ $t('home.example') }}。我认为它必须在Vue挂载的元素内,Vue-i18n才能将其拿起。但是,Vue replaces是Vue 2.x以后的已安装元素,因此Vue已安装元素中的Blade模板可能会丢失。

我认为最好的选择是使用生成器将所有Laravel翻译字符串复制到Vue-i18n。 laravel-vue-i18n-generator 看起来是一个不错的软件包。

基本上,您可以将翻译字符串存储在Laravel中,并能够像平常一样在Blade中使用它们。每次更新这些字符串时,都将不得不再次运行生成器以使其在Vue-i18n中可用,您可以在其中使用Vue-i18n照常访问它们。