Laravel在JavaScript变量上的本地化

时间:2019-03-20 13:58:32

标签: laravel laravel-5.1 laravel-localization

我有一些JavaScript变量,它们按等级显示,如下所示。

我现在想实现Laravel的本地化,因此在将变量输出到浏览器之前先对其进行翻译。

我该如何实现?我尝试了如下操作,但没有得到转换。

var ratingScale = {1: 'Terrible, 2: 'Poor', 3: 'Average', 4: 'Good', 5: 'Excellent'}; 

我想对变量TerriblePoorAverageGoodExcellent进行本地化。

我尝试过

var one = "<?php echo trans('form.one'); ?>";

var ratingScale = {1: one, 2: 'Poor', 3: 'Average', 4: 'Good', 5: 'Excellent'};

但是在浏览器上,这是输出的<?php echo trans('form.one'); ?>

有人带领我来这里吗?

3 个答案:

答案 0 :(得分:0)

您正在创建一个包含它的垃圾字符串。您可能想要做的是将转换结果输出为JSON或DOM属性中的数据属性。然后使用JavaScript提取这些变量。

DOM中的JSON

在您的刀片服务器输出中,在脚本标记内对翻译进行json_encoded。

例如example.blade.php

<script>
    var ratingScale = {!! $ratingScale !!}
</script>

数据属性

在某些html元素中将字符串作为数据属性输出

例如example.blade.php

<form data-scale1="{{ratingScale[1]}}"> 

通过xhr / ajax调用服务器

 axios.get('/ratingScales');

创建一个额外的端点以将这些翻译作为json检索。

答案 1 :(得分:0)

请尝试以下代码,如果您在刀片文件中,它将起作用。(您可以将您的js代码移到刀片文件中,也可以尝试)

var one = {{ trans('form.one') }};

答案 2 :(得分:0)

我要做的是像往常一样在刀片模板中包含这样的javascript文件:

@extends('adminlte::layouts.app')

@section('htmlheader_title')
Viajes en curso
@stop

@section('links')
@include('zendesk.widget')
<meta name="csrf-token" content="{{ csrf_token() }}">
    <link rel="stylesheet" type="text/css" href="{{ asset('/css/app_adminlte_custom.css') }}"/>
    <script type="text/javascript" src="{{ asset('/js/bower_components/jquery/dist/jquery.min.js') }}"></script>
    <script type="text/javascript" src="{{ asset('/js/sweetalert.min.js') }}"></script>
    <script type="text/javascript" src="{!! asset('js/app/trips.js') !!}"></script>
    @stop

    @section('notifications_menu')
    @include('app.partials.notifications_menu')
    @stop
    ........ big etc ....

但是,有时我会从此刀片文件本身初始化所需的变量:

@section('extra-js')

<script type="text/javascript">
    var myTranslatedTitle = {{ trans('whatever') }};
    var numAcceptedTrips = {{ $numAcceptedTrips }};
</script>

@yield('extra-js')

请记住,这些变量是全局变量。