Laravel, InertiaJS, make translate from Database function gl



我已经使这个辅助函数从数据库(MySQL)翻译适当的列。数据库是这样的

Id     name_en     name_fr    name_de
1      Car         Auto       Auto
2      Plane       Avion      Ebene

我的辅助函数是这样的

import { Inertia } from "@inertiajs/inertia";
export default function translate(array, column) {
let locale = Inertia.page.props.locale;
let value = array[column + '_' + locale];
return value ?? 'Missing Translation';
}

在我的组件中,我这样调用这个函数,它工作得很好。

<script setup>
import translate from "@/Helpers/translateFromDb";
defineProps({
object: {
type: Object,
},
});
</script>
<template>
<ul class="flex justify-start space-x-6">
<li v-for="item in object" :key="item.id">
{{ translate(item, "name") }}
</li>
</ul>
</template>
<style scoped>
</style>

是否有一种方法可以全局导入这个辅助函数,而不是在每个组件上调用它?

编辑:是的,我知道同样的结果可以通过在ObjectResource中使用Trait来获得,但我正在学习Vue,我希望用它来做到这一点。

你可以写一个插件,然后用这个插件初始化你的应用。

助手/translateFromDb.js:

import { Inertia } from "@inertiajs/inertia";
export default{
install: (app, options) => {
app.config.globalProperties.translate = (array, column) => {
let locale = Inertia.page.props.locale;
let value = array[column + '_' + locale];
return value ?? 'Missing Translation';
}
}
}

app.js:

import translateFromDb from "./Helpers/translateFromDb";
createInertiaApp({
resolve: name => require(`./Pages/${name}`),
setup({ el, App, props, plugin }) {
Vue.use(plugin)
Vue.use(translateFromDb) // inject plugin here
new Vue({
render: h => h(App, props),
}).$mount(el)
}
})

阅读更多信息:

https://vuejs.org/guide/reusability/plugins.html writing-a-plugin

在app.js laravel上创建全局方法值

相关内容