首页 > 解决方案 > springboot web应用程序中的语言翻译

问题描述

我是 springboot 的新手,我正在尝试创建一个 Web 应用程序来翻译正在呈现的页面的语言。

我知道其中一种方法是创建LocaleResolverLocaleChangeInterceptor的bean,并将此拦截器添加到WebMvcConfigurer的已实现方法中。这个过程非常繁琐和忙碌,因为它需要对页面上显示的每个单词进行每次翻译。这是一个例子:

我正在尝试翻译的网页;

<!DOCTYPE html>
<html lang="en" xmlns:th="https://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Teacher page</title>
    <link rel="stylesheet" th:href="@{~/css/landing.css}">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
          integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
</head>
<body>

<div th:replace="fragments/frag :: header"></div>

        <div class="container">
    <div class="row">
        <div class="col-md-4">

            <h2 th:text="#{form}"></h2>

            <form th:action="@{/teacher/save}" method="post" th:object="${teacher}">
                <input th:field="*{id}" hidden>

                <div class="form-group">
                    <label for="name" th:text="#{name}"></label>
                    <input type="text" class="form-control" id="name" th:field="*{name}">
                    <span class="class_css" th:text="${teacherError.nameError}"></span>
                </div>

                <div class="form-group">
                    <label for="mobileNumber" th:text="#{mobile}"></label>
                    <input type="text" class="form-control" id="mobileNumber" th:field="*{mobileNumber}">
                    <span class="class_css" th:text="${teacherError.mobileNumberError}"></span>
                </div>

                <div class="form-group">
                    <label for="exampleInputEmail1" th:text="#{email}"></label>
                    <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" th:field="*{email}">
                    <span class="class_css" th:text="${teacherError.emailError}"></span>
                    <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
                </div>


                <button type="submit" class="btn btn-dark" th:text="#{submit}"></button>
            </form>
            <span th:text="${message}"></span>

        </div>

        <div class="col-md-8">
            <h3 th:text="#{display}"></h3>

            <table class="table">
                <thead class="thead-dark">
                <tr>
                    <th scope="col" th:text="#{serial}"></th>
                    <th scope="col" th:text="#{name}"></th>
                    <th scope="col" th:text="#{mobile}"></th>
                    <th scope="col" th:text="#{email}"></th>
                    <th scope="col" th:text="#{status}"></th>
                    <th scope="col" th:text="#{action}"></th>
                </tr>
                </thead>
                <tbody>
                <tr th:each="teacher, istat: ${teacherList}">
                    <td th:text="${istat.index + 1}"></td>
                    <td th:text="${teacher.name}"></td>
                    <td th:text="${teacher.mobileNumber}"></td>
                    <td th:text="${teacher.email}"></td>
                    <td>ACTIVE</td>
                    <td><a th:href="@{/teacher/edit}+${teacher.id}"><button class="btn btn-warning">Edit</button></a></td>

                </tr>

                </tbody>
            </table>

        </div>

    </div>
</div>

<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"
        integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"
        crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
        integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
        crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"
        integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"
        crossorigin="anonymous"></script>

</body>
</html>

仅针对此页面,我创建了 messages.properties、messages_np.propertoies(将其转换为尼泊尔语)和 messages_fr.properties 将其转换为法语。

institute=Institute
info=Info
teacher=Teacher
departments=Departments
form=Form
display=Display Data
name=Name
mobile=Mobile Number
email=Email Address
address=Address
status=Status
action=Action
submit=Submit
serial=S No.

消息属性

institute=संस्थान
info=जानकारी
teacher=शिक्षक
departments=विभागहरु
form=फारम
display=प्रदर्शन
name=नाम
mobile=मोबाइल
email=ईमेल
address=ठेगाना
status=स्थिति
action=कार्य
submit=बुझाउनुहोस्
serial=सिरियल

messages_np.properties

institute=Institut
info=Info
teacher=Prof
departments=Départements
form=Forme
display=Afficher
name=Nom
mobile=Mobile
email=Email
address=Adresse
status=Statut
action=Action
submit=Soumettre
serial=En série

messages_fr.properties

现在,我想做的是,我不想自己编写所有这些翻译,而是想将这些英文数据/单词传递给一些现有的翻译,例如谷歌翻译,取回这些数据并在同一页面上重新呈现。

有没有办法我可以做到这一点?

或者有什么更好的方法来做到这一点,我不必自己翻译网页上的所有这些词?

标签: javaspring-bootmavenlanguage-translation

解决方案


翻译者会出现很多错误,从长远来看,这是一个坏主意。

我在职业生涯中遇到过这种情况。

您必须在不同的属性文件中维护所有语言文本,这也是有效的。


推荐阅读