我制作了一个用于创建多语言的Spring消息属性文件的工具

总则

最近开始接触Spring Boot时,我考虑是否可以简化多语言支持部分。同时,我也想尝试使用外部API进行开发,所以我决定动起手来并将整个过程记录在文章中。

这篇文章的主题

    • Spring Bootを最近始めた方

 

    Spring Bootで多言語化してみたい人

关于Spring Boot的多语言支持

首先,在讨论我们这次创建的工具之前,我将告诉您有关Spring Boot常用的多语言支持。 (如果您已经了解,请忽略这一部分)
在Spring Boot中,通过定义消息属性(Message Properties),您可以预先定义文本,然后根据浏览器的语言设置自动更改HTML中的文本。另外,使用消息属性,在需要更改文本时,无需修改HTML文件,就可以进行相应的处理,这也是一个优点。

消息属性的使用示例 (Messāji prōpati shiyong lǐ)

作为步骤,很简单,只需创建一个名为messages.properties的文件,并根据每种语言分别存储。

我将基于之前使用Spring重新制作的内容,以一个例子介绍我以前使用Python(Flask)创建的内容。
Flask版本中创建的文章
Spring版本

首先,在HTML中准备好以下示例中想要显示的文本。

# 日本語用

greeting.heading1=☆三種の挨拶☆
greeting.description=ボタンをクリックするたびに三種類の挨拶から一つ出力されるぞ!
greeting.button=挨拶
greeting.item=挨拶:
greeting.instructions=上のボタンを押してね
# 英語用

greeting.heading1=☆Three types of greetings☆
greeting.description=Each time you click the button, one of three types of greetings will be output!
greeting.button=greeting
greeting.item=GREETING:
greeting.instructions=press the button above

只需一种方式,根据上述定义将内容嵌入到HTML中。
嵌入的方式如下所示。

<タグ th:text="#{定義した変数名}"><タグ>
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
  layout:decorate="~{layout/layout}">

<head>
  <title>RandomGreeting</title>
  <script th:src="@{/js/greeting/greeting.js}" defer></script>
</head>

<body>
  <div layout:fragment="content">
    <h1 th:text="#{greeting.heading1}"></h1>
    <p th:text="#{greeting.description}"></p>
    <button id="btn-search" type="button" th:text="#{greeting.button}"></button>
    <br>
    <span th:text="#{greeting.item}"></span>
    <span id="greeting" th:text="#{greeting.instructions}"></span>
    <br>
    <img id="greetingImage" width="256" height="256" src="http://urx3.nu/Zlxt">
    <p hidden id=greetingId th:text="#{greeting.defaultId}"></p>
  </div>
</body>

</html>
image.png
image.png

所感受到的问题

然而,如果要创建多种语言的messages.properties文件,我认为会非常麻烦。
示例中的文本量相当少,只有日语和英语,但实际上还需要显示更多的系统。
因此,我创建了一个工具,可以从基本的单语言messages.properties文件自动创建多语言版本,并在这里介绍一下。
(自动化是为了解决繁琐的问题!)

介绍所创建的工具

这次使用的东西

    • Spring Boot

 

    • H2 Database

 

    • Deepl API

 

    ※ 他ライブラリ等は気になられる方は後述のgithubリンクよりpom.xmlを拝見して見てください。

春季启动

使用Spring Boot可以轻松开始开发Spring应用程序。
Spring在初始设置时创建xml文件非常困难。
然而,使用Spring Boot只需选择要使用的功能,它会自动完成所需的初始设置。
此外,通过仅更改属性值,还可以轻松进行后续的配置更改。

使用Spring Boot可以轻松地创建可执行的独立生产级别的基于Spring的应用程序。通过遵循Spring Boot的约定,可以轻松地开始使用Spring平台和第三方库,减少了最低限度的工作量。大部分Spring Boot应用程序不需要进行Spring的配置。

H2 数据库

这是一种可在Java环境下运行的内存数据库。无需安装即可轻松嵌入和使用。适用于不需要持久保存数据的场合。

特点

非常快速的开源JDBC API
嵌入式模式和服务器模式,支持基于磁盘或内存的数据库
事务支持,同时运行多个版本
基于浏览器的控制台应用程序
加密的数据库
全文搜索
占用空间较小,纯Java:约2.5 MB的jar文件大小
ODBC驱动程序
引用来源

深度学习API

考虑到我们即将开发的应用程序需要翻译功能,我们决定使用Deepl API作为外部API来实现。

您可以通过DeepL API使用程序直接访问DeepL的机器翻译技术,以高精度地翻译网站和应用程序。

I can provide you with a paraphrase of “ソースコード” in Chinese:

1. 源代码

源代码已上传至以下的git库中。
我们使用H2数据库,所以只需克隆即可直接使用。

 

简单的结构图

image.png

应用方法

image.png
image.png
image.png

我打算尝试从本工具的日文messages.properties文件中创建英文版和中文版。
首先,本工具的日文messages.properties文件如下所示。

title=SpringMultilingualCreater
languageAuto=自動検出
languageJa=日本語
languageEn=英語
languageZh=中国語

register.heading1=API KEY 登録画面
register.description=APIキーを登録してください
register.button=登録

translate.heading1=メッセージプロパティ作成ツール
translate.description=1つのmessages.propertiesから他の言語版を作成します
translate.sourceLang=翻訳元の言語
translate.targetLang=翻訳後の言語
translate.targetTextPlace=翻訳元のメッセージプロパティを入力してください
translate.button=実行
image.png
image.png

通过确认,我们可以确定这已经成功地转换成英文了。
如果我们能够创建一个messages.properties文件,剩余的部分就可以使用自动化工具来完成。

总结

本文介绍了使用Spring Boot开发的应用程序,与外部API的Deepl API进行了集成。

实际上,我第一次意识到可以将Java类的内部变量与Json的键名进行关联。
Deepl返回的Json的返回值通常是蛇形命名法。
因此,最初我认为要将Json直接转换为Java类,就必须修改Java类的内部变量。
但是,我了解到可以通过注解“@JsonProperty(“○○_○○”)”将Json的键与类的内部变量关联起来,从而在将Json转换为类时进行关联。
这样,即使外部API使用蛇形命名法,Java端也能保持驼峰命名法。

另外,由于这次我是为自己做的,所以大部分都没有进行异常输入等处理,以后会学习并确保能够正确处理。(UI方面也会更加努力。。)

由于我刚刚开始学习Spring Boot(Java本身也几乎是初学者),所以如果以后还有可能自动化的部分,我会抓住机会去尝试并获得新的启发。

广告
将在 10 秒后关闭
bannerAds