Содержание на этой странице
SpringBoot также поддерживает несколько языков. Для достижения многоязычности мы фокусируемся на 3 объектах
Краткое описание: Интерфейс Класс реализации LocaleResolver получает Объект локали,Объект локали сообщает MessageSource, из какого файла конфигурации получать сообщения!
LocaleResolver
представлятьLocaleResolver
да Spring Framework Интерфейс используется для анализа региональной информации (локали), запрошенной клиентом, то есть для определения языка пользователя и предпочтений страны/региона. Его основная функция соответствии с Запрошеноинформация Определите, какой язык и локаль следует использовать для отображения пользовательского интерфейса.。
На просторечии это да: проанализировать, какой объект локали использовать. Spring также включает в себя некоторые
Accept-Language
Информация заголовка для анализа Locale
。它会尝试从Запрошено头部информация Получите настройки предпочтительного языка клиента в。Locale
информация для анализа. Если пользователь когда-либо выбирал языковые предпочтения, эта информация сохраняется. cookie , чтобы последующие запросы могли поддерживать согласованные языковые настройки.Locale
информацияанализировать。это соответствует потребностямсуществовать Приложение, которое поддерживает согласованные языковые настройки во время пользовательских сеансов.。LocaleResolver
Реализация всегда возвращает предварительно определенный фиксированный Locale
。этотсуществовать Может быть полезно при отладке и конкретных сценариях тестирования.。Locale
Объект представляет конкретный регион и языковую комбинацию. Обычно он представлен идентификатором языка, например en
、zh_CN
)выражать,Spring Boot проходить LocaleResolver
Проанализировано Locale
Объект определяет, какой язык и формат приложение отображает в пользовательском интерфейсе.
На просторечии да: Дайте объекту MessageSource и скажите ему, какой язык использовать?
MessageSource
да Spring Framework Предоставленный международный интерфейс синтаксического анализатора сообщений отвечает за загрузку ресурсов сообщений в разных языковых средах. существовать Spring Boot , обычно используется ResourceBundleMessageSource
или ReloadableResourceBundleMessageSource
загрузить файл свойств(.properties
файлы), содержащие тексты сообщений на разных языках. проходить MessageSource
,Можетв соответствии с Locale
Объект получает текст сообщения на соответствующем языке, тем самым реализуя многоязычную поддержку интерфейса приложения.
На просторечии да: MessageSource да используется для получения сообщений.
размещение папки ресурсов
├── i18n
│ ├── msg.properties
│ ├── msg_en.properties
│ └── msg_zh.properties
msg.properties
INFO=моя конфигурация по умолчанию
NOT_NULL={0} не должно быть пустым.
msg_en.properties
INFO=моя английская конфигурация
NOT_NULL={0} не должно быть нулевым
msg_zh.properties
INFO=Моя дополнительная конфигурация
NOT_NULL={0} не должно быть пустым.
Цель да Разработать наш многоязычный пакетный путь
# Список базовых имен, начинающихся с запятой (по сути, полный путь к классам), каждое из которых соответствует соглашению ResourceBundle и легко поддерживает местоположения, основанные на косой черте. Если он не содержит квалификатор пакета (например, «org. mypackage"), который будет разрешен из корня пути к классам
spring.messages.basename=i18n.msg
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.context.MessageSource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Locale;
/**
* @author : zanglikun
* @date : 2024/6/15 22:29
* @desc : Copyright © zanglikun.com
*/
@Api(tags = "многоязычный")
@RestController
@RequestMapping("/test/api/v1/")
public class I18nController {
@Resource
// Получить многоязычный объект
private MessageSource messageSource;
@Resource
// Используйте этот объект для динамического анализа заголовков запросов. Accept-Language для достижения цели динамического переключения многоязычный
private AcceptHeaderLocaleResolver localeResolver;
@ApiOperation("Тестовое многоязычное сообщение")
@GetMapping("/getI18n")
public String testI18nMessage(HttpServletRequest request) {
// Из источника Spring.messgae.basename=i18n.msg Зайдите в папку ресурса и сделайте фото файл i18n/msg.properties NOT_NULL информация
String info = messageSource.getMessage("NOT_NULL", null, Locale.getDefault());
// Получить динамический объект локали
Locale dynamicLocale = localeResolver.resolveLocale(request);
String[] args = new String[]{"id"};
String dynamicInfo = messageSource.getMessage("NOT_NULL", args, dynamicLocale);
return dynamicInfo;
}
}
en-US
curl --location --request GET 'http://127.0.0.1:8089/test/api/v1/getI18n' \
--header 'Accept: */*' \
--header 'Accept-Language: en-US' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)'
Вывод: идентификатор не равен нулю
zh-CN
curl --location --request GET 'http://127.0.0.1:8089/test/api/v1/getI18n' \
--header 'Accept: */*' \
--header 'Accept-Language: zh-CN' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)'
Вывод: идентификатор не должен быть пустым.
Вышеупомянутое — всего лишь пример: если вам нужно больше трюков,Например, когда существование генерирует исключение глобально,Вы можете существовать на глобальном перехватчике,使用этот个многоязычный Обрабатывайте ошибки, которые вы хотите вывести на внешний интерфейс.информация。
илисуществовать обрабатывает языковые теги, согласованные с интерфейсом,Может实现LocaleResolver
получить Объект локали!
После общения с друзьями Мибатиса. Заполняя заголовок запроса, я обнаружил, что кто-то говорит даж-cn, а кто-то даж_ч.
существовать Accept-Language
HTTP в голове,Формат языкового тега указан в RFC 5646.,Это стандартный формат языковых тегов.,Используется для указания языковых предпочтений пользователя. RFC 5646 В стандарте указано, что языковые теги состоят из основного кода языка (например, zh
для китайского языка) и необязательный код страны (например, CN
представляет Китай) состоит из,Используйте дефис между двумя-
отдельный,нравиться zh-CN
。
Что касается zh_cn
или других подобных формах, которые не соответствуют RFC 5646 Стандартный формат тега текущего языка. Настройки браузера существуют Accept-Language
голова, за ней обычно следует RFC 5646 стандарты для создания языковых тегов, чтобы гарантировать, что согласование языка с сервером может проходить гладко, одновременно выражая языковые предпочтения пользователя как можно точнее.
Поэтому правильный способ использования zh-CN
Этот формат представляет собой упрощенный китайский вместо да. zh_cn
。Серверная часть должна следовать RFC 5646 Стандартный анализ Accept-Language
заголовок, чтобы получить правильную информацию о языковых предпочтениях и предоставить пользователям соответствующий контент языковой версии по мере необходимости.
不过语言你Может参考:Наш общийISO639-1:https://www.andiamo.co.uk/resources/iso-language-codes/
Особые инструкции: Все вышеперечисленные статьи созданы автором после реальных операций. Пожалуйста,Пожалуйста, не воруйте напрямую!Не забудьте отметить оригинальную ссылку при перепечатке:www.zanglikun.com Сторонние платформы не будут своевременно обновлять последнее содержание этой статьи.。нравиться果发现本文资料不全,доступныйМой Java-блогпоиск:ключевое слово заголовка。以获取全部资料 ❤