PS:21 号、中行原油宝は史上最低の決済価格に遭遇し、-37.63 ドル / バレルで決済されました。投資家は - 266.12 元 / バレルの決済価格でクローズする必要があり、後でメッセージを送って投資家に即座に納品金を補充するよう要求しました。これは投資家が保証金を失うだけでなく、残りの部分を - 266 元 / バレルで支払わなければならないことを意味します。ここには投資の常識があり、理解していない人は必ず投資しないでください。安値を探すことに盲目的にならないでください。
以前の記事では、インターフェース開発、Thymeleaf テンプレート、一般的な構文とテンプレートレイアウトについて試してみました。この記事を読む前に、次の記事を読んでみてください:
- Spring Boot シリーズ:インターフェースの開発
- Spring Boot シリーズ:Thymeleaf テンプレートの基本
- Spring Boot シリーズ:Thymeleaf の一般的な構文
- Spring Boot シリーズ:Thymeleaf テンプレートのレイアウト
Spring Boot プロジェクトの国際化は非常に簡単に実装できます。Spring Boot シリーズの連続性を確保するために、プロジェクトの国際化については別の記事にまとめました。主な内容は以下の通りです:
- ロケールリゾルバ
- 国際化設定ファイルの作成
- 設定クラスの作成
- テストの実行
ロケールリゾルバ#
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>
テストの実行#
実行結果は次のようになります。
公式アカウントでキーワード「加群」を返信すると、WeChat の交流グループに招待されます。キーワード「Spring Boot」を返信すると、対応するサンプルコードのリンクを取得できます。