我制作了一个用于创建多语言的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>
所感受到的问题
然而,如果要创建多种语言的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数据库,所以只需克隆即可直接使用。
简单的结构图
应用方法
我打算尝试从本工具的日文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=実行
通过确认,我们可以确定这已经成功地转换成英文了。
如果我们能够创建一个messages.properties文件,剩余的部分就可以使用自动化工具来完成。
总结
本文介绍了使用Spring Boot开发的应用程序,与外部API的Deepl API进行了集成。
实际上,我第一次意识到可以将Java类的内部变量与Json的键名进行关联。
Deepl返回的Json的返回值通常是蛇形命名法。
因此,最初我认为要将Json直接转换为Java类,就必须修改Java类的内部变量。
但是,我了解到可以通过注解“@JsonProperty(“○○_○○”)”将Json的键与类的内部变量关联起来,从而在将Json转换为类时进行关联。
这样,即使外部API使用蛇形命名法,Java端也能保持驼峰命名法。
另外,由于这次我是为自己做的,所以大部分都没有进行异常输入等处理,以后会学习并确保能够正确处理。(UI方面也会更加努力。。)
由于我刚刚开始学习Spring Boot(Java本身也几乎是初学者),所以如果以后还有可能自动化的部分,我会抓住机会去尝试并获得新的启发。