ホームページ  >  記事  >  Java  >  Spring Boot を通じて多言語サポートと国際アプリケーションを実現

Spring Boot を通じて多言語サポートと国際アプリケーションを実現

PHPz
PHPzオリジナル
2023-06-23 09:09:062156ブラウズ

グローバリゼーションの進展に伴い、多言語サポートと国際化機能を提供する必要のある Web サイトやアプリケーションがますます増えています。開発者にとって、これらの機能を実装することは、言語翻訳、日付、時刻、通貨の形式など、多くの側面を考慮する必要があるため、簡単な作業ではありません。ただし、Spring Boot フレームワークを使用すると、多言語サポートと国際アプリケーションを簡単に実装できます。

まず、Spring Boot が提供する LocaleResolver インターフェイスについて理解しましょう。 LocaleResolver インターフェイスは、Locale オブジェクトを解析して返すために使用されるインターフェイスです。 Locale オブジェクトは、ユーザーが使用する言語、地域、および関連情報を表します。 Spring Boot では、LocaleResolver インターフェイスには CookieLocaleResolver と AcceptHeaderLocaleResolver の 2 つの実装があります。

CookieLocaleResolver は、ブラウザーの Cookie を通じて Locale オブジェクトを解析します。ユーザーが言語を選択すると、Locale オブジェクトがブラウザに設定され、Cookie に保存されます。したがって、次回ユーザーが Web サイトにアクセスすると、CookieLocaleResolver は Cookie から Locale オブジェクトを読み取ることができます。

AcceptHeaderLocaleResolver は、HTTP 要求ヘッダーの Accept-Language フィールドを通じて Locale オブジェクトを解析します。ユーザーが Accept-Language ヘッダーを含むリクエストを送信すると、AcceptHeaderLocaleResolver は Locale オブジェクトを解析して返します。

LocaleResolver インターフェイスに加えて、Spring Boot は MessageSource インターフェイスも提供します。 MessageSource インターフェイスは、多言語メッセージを解析して処理するために使用されます。 Spring Boot では、MessageSource インターフェイスには ResourceBundleMessageSource と ReloadableResourceBundleMessageSource という 2 つの実装があります。

ResourceBundleMessageSource は、提供されたプロパティ ファイルから多言語メッセージを解析する単純な実装です。プロパティ ファイルにはキーと値のペアが含まれており、キーはメッセージ識別子、値はメッセージ自体です。たとえば、英語と中国語のメッセージの場合、プロパティ ファイルは次のようになります。

# messages_en_US.properties
hello=Hello world!

# messages_zh_CN.properties
hello=你好,世界!

ユーザーにメッセージを表示する必要がある場合、MessageSource インターフェイスを使用して対応するメッセージを取得し、表示します。それをユーザーに伝えます。

ReloadableResourceBundleMessageSource は ResourceBundleMessageSource に非常に似ていますが、アプリケーションの実行中にプロパティ ファイルを再ロードできます。これは、メッセージを頻繁に更新する必要があるアプリケーションに役立ちます。

多言語サポートと国際アプリケーションを実装する場合、通常、日付、時刻、通貨の形式の問題を考慮する必要があります。 Spring Boot は、これらの問題を解決するために FormattingConversionServiceFactoryBean クラスを提供します。これを使用して日付、時刻、通貨の形式を定義し、多言語アプリケーションで有効にすることができます。

以下は、FormatttingConversionServiceFactoryBean クラスを使用して日付、時刻、および通貨の形式を定義する例です。

@Configuration
public class AppConfig {
  @Bean
  public FormattingConversionServiceFactoryBean formattingConversionServiceFactoryBean() {
    FormattingConversionServiceFactoryBean factoryBean = new FormattingConversionServiceFactoryBean();
    factoryBean.setRegisterDefaultFormatters(false);
    factoryBean.setFormatters(Set.of(dateTimeFormatter(), dateFormatter(), numberFormatter()));
    return factoryBean;
  }

  private DateTimeFormatter dateTimeFormatter() {
    return DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(LocaleContextHolder.getLocale());
  }

  private DateTimeFormatter dateFormatter() {
    return DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(LocaleContextHolder.getLocale());
  }

  private NumberFormatter numberFormatter() {
    return new NumberFormatter(NumberFormat.getCurrencyInstance(LocaleContextHolder.getLocale()));
  }
}

上記のコードでは、日付、時刻、および通貨の形式を定義するために FormattingConversionServiceFactoryBean を作成します。 DateTimeFormatter と NumberFormatter を使用して日時と通貨の形式を定義し、LocaleContextHolder.getLocale() メソッドを使用して現在のユーザーの Locale オブジェクトを取得します。

最後に、複数の言語をサポートするためにアプリケーションで LocaleResolver と MessageSource を設定する必要があります。これは、Spring Boot によって提供される @EnableWebMvc および @Configuration アノテーションを使用して実現できます。以下は構成クラスのサンプルです:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
  @Bean
  public LocaleResolver localeResolver() {
    AcceptHeaderLocaleResolver resolver = new AcceptHeaderLocaleResolver();
    resolver.setDefaultLocale(Locale.US);
    return resolver;
  }

  @Bean
  public MessageSource messageSource() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasenames("messages");
    messageSource.setFallbackToSystemLocale(false);
    return messageSource;
  }

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
    localeChangeInterceptor.setParamName("lang");
    registry.addInterceptor(localeChangeInterceptor);
  }
}

上記のコードでは、WebConfig 構成クラスを作成し、@EnableWebMvc アノテーションを使用して Spring MVC 機能を有効にします。 LocaleResolver() Bean と messageSource() Bean を使用して LocaleResolver と MessageSource を設定します。また、addInterceptors() メソッドを使用して LocaleChangeInterceptor を追加しました。このインターセプターでは、「lang」パラメーターを使用してユーザーの言語を切り替えました。

要約すると、Spring Boot が提供する LocaleResolver インターフェイス、MessageSource インターフェイス、および FormattingConversionServiceFactoryBean クラスを通じて、多言語サポートと国際アプリケーションを簡単に実装できます。上記の方法を使用すると、ユーザーのさまざまな言語、文化、地域のニーズを満たすグローバル アプリケーションをより簡単かつ便利に構築できます。

以上がSpring Boot を通じて多言語サポートと国際アプリケーションを実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。