Rumah  >  Artikel  >  Java  >  Mencapai sokongan berbilang bahasa dan aplikasi antarabangsa melalui Spring Boot

Mencapai sokongan berbilang bahasa dan aplikasi antarabangsa melalui Spring Boot

PHPz
PHPzasal
2023-06-23 09:09:062211semak imbas

Dengan perkembangan globalisasi, semakin banyak laman web dan aplikasi perlu menyediakan sokongan berbilang bahasa dan fungsi pengantarabangsaan. Bagi pembangun, melaksanakan fungsi ini bukanlah tugas yang mudah kerana ia memerlukan pertimbangan dari banyak aspek, seperti terjemahan bahasa, tarikh, masa dan format mata wang, dsb. Walau bagaimanapun, menggunakan rangka kerja Spring Boot, kami boleh melaksanakan sokongan berbilang bahasa dan aplikasi antarabangsa dengan mudah.

Pertama, marilah kita memahami antara muka LocaleResolver yang disediakan oleh Spring Boot. Antara muka LocaleResolver ialah antara muka yang digunakan untuk menghuraikan dan mengembalikan objek Locale. Objek Tempatan mewakili bahasa, rantau dan maklumat berkaitan yang digunakan oleh pengguna. Dalam Spring Boot, antara muka LocaleResolver mempunyai dua pelaksanaan: CookieLocaleResolver dan AcceptHeaderLocaleResolver.

CookieLocaleResolver menghuraikan objek Locale melalui kuki penyemak imbas. Apabila pengguna memilih bahasa, objek Tempatan akan ditetapkan kepada penyemak imbas dan disimpan dalam kuki. Oleh itu, pada kali berikutnya pengguna melawat tapak web, CookieLocaleResolver dapat membaca objek Tempatan daripada kuki.

AcceptHeaderLocaleResolver menyelesaikan objek Tempatan melalui medan Accept-Language dalam pengepala permintaan HTTP. Apabila pengguna menghantar permintaan dengan pengepala Accept-Language, AcceptHeaderLocaleResolver akan menghuraikan objek Locale dan mengembalikannya.

Selain antara muka LocaleResolver, Spring Boot juga menyediakan antara muka MessageSource. Antara muka MessageSource digunakan untuk menghuraikan dan memproses mesej berbilang bahasa. Dalam Spring Boot, antara muka MessageSource mempunyai dua pelaksanaan: ResourceBundleMessageSource dan ReloadableResourceBundleMessageSource.

ResourceBundleMessageSource ialah pelaksanaan mudah yang menghuraikan mesej berbilang bahasa daripada fail sifat yang disediakan. Fail sifat mengandungi pasangan nilai kunci, dengan kuncinya ialah pengecam mesej dan nilainya ialah mesej itu sendiri. Contohnya, untuk mesej Inggeris dan Cina, fail sifat mungkin kelihatan seperti ini:

# messages_en_US.properties
hello=Hello world!

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

Apabila kami perlu memaparkan mesej kepada pengguna, kami boleh menggunakan antara muka MessageSource untuk mendapatkan mesej yang sepadan, dan kemudian memaparkan ia kepada pengguna.

ReloadableResourceBundleMessageSource sangat serupa dengan ResourceBundleMessageSource, tetapi ia membolehkan kami memuatkan semula fail sifat semasa aplikasi sedang berjalan. Ini berguna untuk aplikasi yang memerlukan mesej yang kerap dikemas kini.

Apabila melaksanakan sokongan berbilang bahasa dan aplikasi antarabangsa, kami biasanya perlu mempertimbangkan isu format tarikh, masa dan mata wang. Spring Boot menyediakan kelas FormattingConversionServiceFactoryBean untuk menyelesaikan masalah ini. Kami boleh menggunakannya untuk menentukan tarikh, masa dan format mata wang dan menjadikannya sah dalam aplikasi berbilang bahasa.

Berikut ialah contoh penggunaan kelas FormattingConversionServiceFactoryBean untuk menentukan format tarikh, masa dan mata wang:

@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()));
  }
}

Dalam kod di atas, kami mencipta FormattingConversionServiceFactoryBean untuk menentukan format tarikh, masa dan mata wang. Kami menggunakan DateTimeFormatter dan NumberFormatter untuk menentukan masa tarikh dan format mata wang, dan menggunakan kaedah LocaleContextHolder.getLocale() untuk mendapatkan objek Locale pengguna semasa.

Akhir sekali, kami perlu menyediakan LocaleResolver dan MessageSource dalam aplikasi kami untuk menyokong berbilang bahasa. Kita boleh mencapai ini menggunakan anotasi @EnableWebMvc dan @Configuration yang disediakan oleh Spring Boot. Berikut ialah contoh kelas konfigurasi:

@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);
  }
}

Dalam kod di atas, kami telah mencipta kelas konfigurasi WebConfig dan mendayakan ciri Spring MVC menggunakan anotasi @EnableWebMvc. Kami menggunakan localeResolver() Bean dan messageSource() Bean untuk menetapkan LocaleResolver dan MessageSource. Kami juga menambah LocaleChangeInterceptor menggunakan kaedah addInterceptors(), dan dalam pemintas ini kami menggunakan parameter "lang" untuk menukar bahasa pengguna.

Ringkasnya, kami boleh melaksanakan sokongan berbilang bahasa dan aplikasi antarabangsa dengan mudah melalui antara muka LocaleResolver, antara muka MessageSource dan kelas FormattingConversionServiceFactoryBean yang disediakan oleh Spring Boot. Menggunakan kaedah di atas, kami boleh membina aplikasi global dengan lebih mudah dan mudah yang memenuhi keperluan bahasa, budaya dan serantau pengguna yang berbeza.

Atas ialah kandungan terperinci Mencapai sokongan berbilang bahasa dan aplikasi antarabangsa melalui Spring Boot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn