Java.util.Locale возвращает формат локали "en_GB" для Великобритании. когда я использую ту же локаль в этой функции Date.toLocaleString(), которая возвращает неверный языковой тег: en_GB. Я просто хочу знать, почему java и javascript ведут себя по-разному и какое лучшее решение для этого



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


I just want to know why java and javascript behaving differently
Потому что это разные языки, каждый из которых принимает собственные решения.
По общему признанию, существует стандартный BCP 47 для идентификации языков, и очень жаль, что Java предпочла его не использовать.
Однако java.util.Locale — это класс, и поэтому он ничего не «возвращает» сам по себе. То, что вы наблюдаете, является результатом автоматического преобразования объекта класса java.util.Locale в String. Это делается путем вызова метода toString() класса, который дает результат en_GB.
Опять же, жаль, что метод toString() был бы реализован для получения чего-то другого, кроме стандарта BCP 47, но BCP 47 был опубликован в 2009 году, а Java java.util.Locale в 1997 году. Некоторые программы были созданы для его использования. с момента его существования, и никто не хотел, чтобы эти программы ломались из-за произвольного изменения поведения методов.
В заключение, хотя есть смысл ожидать максимальных усилий по реализации принципа наименьшего удивления, слепо полагаться на автоматически выбранные преобразования по умолчанию при ожидании определенного формата все же довольно плохая практика. (В конце концов, это обсуждение касается указания языка, чтобы дата форматировалась правильно с использованием этого языка.)
and what is the best solution for this
Звоните toLanguageTag()