В последнее время недавно разработанному проекту необходимо использовать функцию интернационализации.Проект разработан на основе SpringBoot.Я пользуюсь этой возможностью, чтобы организовать статью о реализации интернационализированной функции i18n в SpringBoot и поделиться ею с вами.
импорт зависимостей
Нет необходимости вводить другую специальную конфигурацию в веб-проект Spring Boot, а необходимые базовые компоненты уже включены в веб-стартер по умолчанию. Соответствующая конфигурация pom зависимостей выглядит следующим образом:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
Международная структура проекта
Проект здесь в основном для внешнего интерфейса API, то есть проект, который разделяет фронт и бэкенд. Основное внимание уделяется конфигурации интернационализации в фоновом режиме и тому, как получить соответствующий интернационализированный контент копии в соответствии с ключом использования интерфейса.
Сначала посмотрите на структуру каталогов проекта в целом:
Настроить парсер
После введения соответствующих зависимостей выше он сначала используется для инициализации класса LocaleResolver, который является распознавателем по умолчанию и используется для установки международного языка по умолчанию для текущего сеанса.
/**
* 配置国际化语言
*
**/
@Configuration
public class LocaleConfig {
/**
* 默认解析器 其中locale表示默认语言
*/
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(Locale.CHINA);
return localeResolver;
}
}
Здесь класс конфигурации создается с помощью аннотации @Configuration, а созданный SessionLocaleResolver внедряется в класс конфигурации с помощью метода аннотации @Bean.
Настроить перехватчик
В парсере также требуется перехватчик для получения языковых параметров запроса, а LocaleChangeInterceptor по умолчанию используется в качестве перехватчика для указания имени параметра для переключения интернационализированного языка. Например, когда запрошенный URL-адрес содержит ?lang=zh_CN, это означает чтение интернационализированного файла messages_zh_CN.properties.
/**
* Web相关配置
**/
@Configuration
public class WebConfig implements WebMvcConfigurer {
/**
* 默认拦截器 其中lang表示切换语言的参数名
*
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
localeInterceptor.setParamName("lang");
registry.addInterceptor(localeInterceptor);
}
}
Здесь инициализация перехватчика и настройка соответствующих параметров завершается реализацией метода addInterceptors интерфейса WebMvcConfigurer.
файл интернационализации
После завершения приведенной выше базовой настройки вам необходимо определить конкретный файл интернационализации и определить конкретные элементы параметров, которые будут интернационализированы в файле.
В Spring Boot именем файла интернационализации по умолчанию являются сообщения, и здесь мы используем сообщения для определения файла интернационализации.
Определите по очереди messages.properties, messages_en_US.properties, messages_zh_CN.properties, messages_zh_TW.properties.
Среди них messages.properties означает значение по умолчанию, в нем не может быть значения, но такой файл должен быть, а остальные три соответствуют английскому, китайскому и традиционному китайскому соответственно.
Содержимое трех файлов:
username=zhangsan
username=张三
username=張三
Здесь по-прежнему уделяется большое внимание размещению файлов интернационализации.Если вы используете путь поиска Spring Boot по умолчанию, вы можете поместить его непосредственно в каталог ресурсов верхнего уровня.
Но если вы хотите поместить его в другие каталоги, например в каталог Statistics/i18n/, вам необходимо настроить следующее в application.properties:
spring.messages.basename=statistics/i18n/messages
Обратите внимание, что перед ним нет косой черты, указывающей на относительный путь. Имя файла — messages, и нет необходимости добавлять суффикс свойств. Любой, кто использовал Spring Boot, знает, что он справится с этим за нас.
Инструменты
Если страница получает интернационализированный контент, то фоновая операция уже завершена, и передняя часть должна выполнить соответствующую обработку и отображение js. Если мы предоставляем здесь только API, для интернационализации некоторого контента в API нам все равно нужно получить соответствующее значение по ключу.
Здесь вам нужен класс инструмента для обработки:
/**
* 国际化工具类
**/
@Component
public class MessageUtils {
private static MessageSource messageSource;
public MessageUtils(MessageSource messageSource) {
MessageUtils.messageSource = messageSource;
}
/**
* 获取单个国际化翻译值
*/
public static String get(String msgKey) {
try {
return messageSource.getMessage(msgKey, null, LocaleContextHolder.getLocale());
} catch (Exception e) {
return msgKey;
}
}
}
В основном для внедрения MessageSource инструмент создается через @Component.
конкретное использование
После подготовки вышеуказанного содержимого вы можете использовать его на уровне контроллера.Давайте посмотрим непосредственно на код.
@RestController
@RequestMapping("/i18n")
public class I18nController {
@RequestMapping("/user")
public String getUserName() {
return MessageUtils.get("username");
}
}
Метод обработки запроса определяется напрямую, и соответствующее значение интернационализации получается с помощью ключа в методе.
Запрашиваемый формат URL:http://localhost:8080/i18n/user?lang=zh_TW
Теперь на странице будет отображаться:
張三
Это означает, что интернационализированный контент можно использовать в обычном режиме.
Наконец, обратите внимание на общедоступную учетную запись WeChat «Program New Vision», ответьте «009» и получите полный исходный код.
--- Программа Новые Горизонты: Захватывающие и растущие нельзя пропустить