laravel 转换输入的最佳方式

bqujaahr  于 2023-02-10  发布在  其他
关注(0)|答案(2)|浏览(101)

晚上好,今天我遇到了一个问题。我将直接进入它。所以基本上我有一个用来创建膳食的表单。膳食表(迁移)看起来像这样:

$table->uuid('id')->primary();
$table->uuid('restaurant_id')->nullable();
$table->string('name_lt', 100);
$table->string('name_en', 100);
$table->string('name_ru', 100);
$table->smallInteger('prep_time');
$table->string('image', 150);
$table->boolean('visibility')->default(0);
$table->boolean('deleted')->default(0);
$table->timestamps();

$table->foreign('restaurant_id')->references('id')->on('restaurants')->onDelete('cascade');

除此之外,还有很多其他的东西,比如配料和其他的东西,它们都与特定的一餐有关。在表单页面中,我有3种不同的语言表单,分别是我的母语立陶宛语、英语和俄语。有一些选项卡按钮可以将表单更改为其他语言,它所做的只是隐藏当前的表单并显示另一个(一页中有3个相同的表单)。
我想要实现的是,如果我填写立陶宛语的输入,我希望英语和俄语的输入也被填写(这可以用jquery或javascript change函数实现),但它应该填写翻译文本。
简单举例:
在第一个表单中,我填写了文本name_lt = 'Obuolys',因此name_enname_ru也应该填写,但使用不同的语言,在本例中为name_en = 'Apple'name_ru = 'яблоко'
我从来没有使用过翻译API的,所以我想知道什么是最好的方式,我在考虑使用DeepL,因为它是相当便宜。
如果有人能给我一些建议或简单的例子会很好,我可以从这一点继续下去。

wfsdck30

wfsdck301#

如果你想使用javascript,你可以在提交表单之前使用一个按钮的click事件来填写其他字段。如果我理解正确的话,你有3个表单(每个标签1个)。
您可以对每个表单执行类似的操作。

<form id="form-lt" method="post">
    @csrf
    <input name="name_lt">
    <input type="hidden" name="name_en">
    <input type="hidden" name="name_ru">

    {{-- Not a true submit button --}}
    <button id="button-lt type="button">Submit</button>
</form>

给定一个接受文本输入的函数,原始语言和要翻译的语言

async function translate(text, from_language, to_language) {
    const response = await fetch(...);
    const data = await response.json();
    // get translated text from data
    return translated_text;
}

js部分可能如下所示

const button_lt = document.getElementById('button-lt');

button_lt.addEventListener('click', async event => {
    const form = event.target.form;
    const lt_value = form.querySelector('[name=name_lt]').value;
    const en_input = form.querySelector('[name=name_en]');
    const ru_input = form.querySelector('[name=name_ru]');

    en_input.value = await translate(lt_value, 'lt', 'en');
    ru_input.value = await translate(lt_value, 'lt', 'ru');

    form.submit();
});

或者,如果您想在服务器端执行,您可以尝试在验证输入数据或将模型保存到数据库之前,使用laravel提供的Http facade调用最终使用的任何转换API。

khbbv19g

khbbv19g2#

您使用的是PHP还是JavaScript?
DeepL提供了一个NodeJS library(用于后端)和一个PHP library,以方便您进行翻译。例如,要在PHP中进行翻译,您可以在安装库后使用以下代码片段:

$authKey = "f63c02c5-f056-..."; // Replace with your key
$translator = new \DeepL\Translator($authKey);

$result = $translator->translateText('Hello, world!', null, 'fr');
echo $result->text; // Bonjour, le monde!

要在用户填写一些文本时执行此操作,您需要编写适当的Laravel代码。请注意,在前端执行此操作是不安全的,因为它需要您公开您的$authKey

相关问题