我的vue组件是这样的:
<template>
<ul class="nav nav-tabs nav-tabs-bg">
<li role="presentation" v-for="item in tabs">
1. failed -> {{ item.name }} 2.success -> {{trans('purchase.payment.tab')}}
</li>
</ul>
</template>
<script>
export default {
data() {
return {
tabs: [
{name: "trans('purchase.payment.tab')"}
]
}
}
}
</script>
我在laravel中的lang(resources / lang / en / purchase.php)是这样的:
<?php
return [
'payment' => [
'tab' => 'Payment Status',
],
...
];
如果组件vue被执行,结果如下:
- 失败 - &gt; trans('purchase.payment.tab')2.success - &gt;付款状态
醇>
因此,如果在数据中使用trans,它就不起作用
我该如何解决这个问题?
答案 0 :(得分:0)
无法在JavaScript中使用PHP帮助程序。但是,您可以创建一个翻译对象。
在AppServiceProvider
中(如果需要,可以创建一个新的):
// Don't forget to import the facade
use Illuminate\Support\Facades\Lang;
public function boot() {
$translations = [
'auth' => Lang::get('auth'),
'pagination' => Lang::get('pagination'),
'passwords' => Lang::get('passwords'),
'validation' => Lang::get('validation'),
];
view()->share('translations', json_encode($translations));
}
在您的HTML(我建议标题)中,您可以致电:
window.app = {
translations: {!! $translations !!},
}
要在JS中使用,您可以这样做,例如:
this.app.translations.auth.throttle // Too many login attempts. Please try again in :seconds seconds.
答案 1 :(得分:0)
我使用vue-i18n。这样你应该自己创建字典。
我制作了一个i18n/en.js
文件;
module.exports = {
login: {
title: 'Login',
loginButton: 'Login',
emailInput: 'email',
passwordInput: 'password',
},
Form: {
title: 'Form',
}
}
和i18n/hu.js
在匈牙利语中具有相同的变量。然后我制作了一个i18n/map.js
文件:
var en = require('./en.js');
var hu = require('./hu.js');
module.exports = {
en,
hu,
}
最后,在vue.js
中设置它,检查我的app.js
文件部分:
require('./bootstrap'); // vue comes from here
import VueI18n from 'vue-i18n'
import dictionary from './i18n/map'
var localeTmp = document.documentElement.lang;
var locale = "hu";
if(localeTmp) {
locale = localeTmp
}
const i18n = new VueI18n({
locale: locale, // set locale
dictionary, // set map of dictionary
})
....
const app = new Vue({
el: 'app',
i18n,
});
这是一种非常优雅的方式。
以及我如何在组件中使用?简单:
....
<md-input-container>
<md-icon>person</md-icon>
<label>{{ $t("loginForm.emailInput") }}</label>
<md-input email name="email" required v-model="email" />
</md-input-container>
....