Micronaut 資源包

2023-03-14 17:06 更新

資源包是一個(gè) Java .properties 文件,其中包含特定于語言環(huán)境的數(shù)據(jù)。

鑒于此資源包:

src/main/resources/io/micronaut/docs/i18n/messages_en.properties

hello=Hello
hello.name=Hello {0}

src/main/resources/io/micronaut/docs/i18n/messages_es.properties

hello=Hola
hello.name=Hola {0}

您可以使用 ResourceBundleMessageSource,它是 MessageSource 的一個(gè)實(shí)現(xiàn),它簡化了對資源包的訪問并提供緩存功能,以訪問以前的消息。

不要在每次檢索消息時(shí)都實(shí)例化一個(gè)新的 ResourceBundleMessageSource。實(shí)例化一次,例如在工廠中。

MessageSource Factory Example

 Java Groovy  Kotlin 
import io.micronaut.context.MessageSource;
import io.micronaut.context.annotation.Factory;
import io.micronaut.context.i18n.ResourceBundleMessageSource;
import jakarta.inject.Singleton;

@Factory
class MessageSourceFactory {
    @Singleton
    MessageSource createMessageSource() {
        return new ResourceBundleMessageSource("io.micronaut.docs.i18n.messages");
    }
}
import io.micronaut.context.MessageSource
import io.micronaut.context.annotation.Factory
import io.micronaut.context.i18n.ResourceBundleMessageSource
import jakarta.inject.Singleton

@Factory
class MessageSourceFactory {
    @Singleton
    MessageSource createMessageSource() {
        new ResourceBundleMessageSource("io.micronaut.docs.i18n.messages")
    }
}
import io.micronaut.context.MessageSource
import io.micronaut.context.annotation.Factory
import io.micronaut.context.i18n.ResourceBundleMessageSource
import jakarta.inject.Singleton

@Factory
internal class MessageSourceFactory {
    @Singleton
    fun createMessageSource(): MessageSource = ResourceBundleMessageSource("io.micronaut.docs.i18n.messages")
}

然后您可以檢索提供語言環(huán)境的消息:

ResourceBundleMessageSource Example

 Java Groovy  Kotlin 
assertEquals("Hola", messageSource.getMessage("hello", MessageContext.of(new Locale("es"))).get());
assertEquals("Hello", messageSource.getMessage("hello", MessageContext.of(Locale.ENGLISH)).get());
expect:
messageSource.getMessage("hello", MessageContext.of(new Locale("es"))).get() == 'Hola'

and:
messageSource.getMessage("hello", MessageContext.of(Locale.ENGLISH)).get() == 'Hello'
Assertions.assertEquals("Hola", messageSource.getMessage("hello", MessageSource.MessageContext.of(Locale("es"))).get())
Assertions.assertEquals("Hello", messageSource.getMessage("hello", MessageSource.MessageContext.of(Locale.ENGLISH)).get())


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號