banner
jzman

jzman

Coding、思考、自觉。
github

Spring Bootシリーズのプロジェクトの国際化

PS:21 号、中行原油宝は史上最低の決済価格に遭遇し、-37.63 ドル / バレルで決済されました。投資家は - 266.12 元 / バレルの決済価格でクローズする必要があり、後でメッセージを送って投資家に即座に納品金を補充するよう要求しました。これは投資家が保証金を失うだけでなく、残りの部分を - 266 元 / バレルで支払わなければならないことを意味します。ここには投資の常識があり、理解していない人は必ず投資しないでください。安値を探すことに盲目的にならないでください。

以前の記事では、インターフェース開発、Thymeleaf テンプレート、一般的な構文とテンプレートレイアウトについて試してみました。この記事を読む前に、次の記事を読んでみてください:

Spring Boot プロジェクトの国際化は非常に簡単に実装できます。Spring Boot シリーズの連続性を確保するために、プロジェクトの国際化については別の記事にまとめました。主な内容は以下の通りです:

  1. ロケールリゾルバ
  2. 国際化設定ファイルの作成
  3. 設定クラスの作成
  4. テストの実行

ロケールリゾルバ#

Spring では、ユーザーのロケールを識別し、Web アプリケーションの国際化を実現するためにロケールリゾルバが提供されています。ロケールリゾルバはLocalResolverインターフェースを実装する必要がありますが、このインターフェースを実装して独自のロケールリゾルバを作成することもできます。

  • AcceptHeaderLocaleResolver:デフォルトのロケールリゾルバで、HTTP リクエストの accept-language パラメータを使用してロケールを解析します。
  • SessionLocaleResolver:現在のセッションで有効であり、それ以外の場合はデフォルトの状態に戻ります。
  • CookieLocaleResolver:現在の Cookie の有効期間内で有効であり、それ以外の場合はデフォルトの状態に戻ります。
  • FixedLocaleResolver:固定のLocalを設定しますが、動的に変更することはできません。
  • LocaleChangeInterceptorインターセプターを使用してユーザーのロケールを解析します。

次に、LocaleChangeInterceptorインターセプターとSessionLocaleResolverを例にして、Spring Boot プロジェクトの国際化を実装します。

国際化設定ファイルの作成#

Spring Boot は国際化をサポートしており、使用も比較的簡単です。Spring Boot プロジェクトを作成し、resources フォルダの下に名前が i18n のフォルダを作成し、右クリックして New->Resource Bundle を選択し、各言語に対応する設定ファイル home.properties を作成します。

躬行之

次に、application.properties ファイルでMessageパスを設定します。

# Messageパス
spring.messages.basename=i18n.home

home.properties ファイルの値は次のように取得します。

mMessageSource.getMessage("home.title", null, LocaleContextHolder.getLocale());

設定クラスの作成#

LocaleChangeInterceptorインターセプターとSessionLocaleResolverを使用する場合、パラメータは対応するLocalになります。

/**
 * I18nConfig
 */
@Configuration
public class I18nConfig {

    @Bean
    public LocaleResolver localeResolver (){
        return new SessionLocaleResolver();
    }

    @Bean
    public WebMvcConfigurer webMvcConfigurer(){
        return new WebMvcConfigurer() {
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                LocaleChangeInterceptor changeInterceptor = new LocaleChangeInterceptor();
                changeInterceptor.setParamName("lang");
                registry.addInterceptor(changeInterceptor);
            }
        };
    }
}

サンプルコード#

I18nControllerは次のようになります。

@Controller
public class I18nController {
    
    @GetMapping(value = "/i18n")
    public String il8n() {
        return "i18n";
    }
}

テンプレートファイルは次のようになります。

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
	<head>
		<meta charset="UTF-8">
		<title>Spring Boot I18n Sample.</title>

		<script>
			/**
			 * ページの読み込みが完了したら呼び出されます。
			 */
			onload = function() {
				let href = window.location.toString();
				let suffix = href.substring(href.length - 2, href.length);
				let lang = document.getElementsByClassName("lang");
				console.log("--suffix--" + suffix);
				switch (suffix) {
					case "CN":
						setStatus(lang[0], lang[1], lang[2]);
						break;
					case "TW":
						setStatus(lang[1], lang[0], lang[2]);
						break;
					case "US":
						setStatus(lang[2], lang[1], lang[0]);
						break;
					default:
						setStatus(lang[0], lang[1], lang[2]);
				}
			};

			/**
			 * 言語タグの状態を設定します。
			 * @param show 選択された言語タグ
			 * @param def1 選択されていない言語タグ
			 * @param def2 選択されていない言語タグ
			 */
			function setStatus(show, def1, def2) {
				show.style.color = "rgb(0,0,255)";
				def1.style.color = "rgb(0,0,0)";
				def2.style.color = "rgb(0,0,0)";
			}
		</script>
	</head>
	<body>
		<h3 th:text="#{home.title}">default</h3>
		<p style="font-size: 12px">
			<a class="lang" href="i18n?lang=zh_CN"> 简体中文 </a>|
			<a class="lang" href="i18n?lang=zh_TW"> 繁体中文 </a>|
			<a class="lang" href="i18n?lang=en_US"> English</a>
		</p>
	</body>
</html>

テストの実行#

実行結果は次のようになります。

image

公式アカウントでキーワード「加群」を返信すると、WeChat の交流グループに招待されます。キーワード「Spring Boot」を返信すると、対応するサンプルコードのリンクを取得できます。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。