{countryNames[country] || formatMessage(labels.unknown)},
+ country: (
+
+ {intl.formatDisplayName(country, { type: 'region' }) ||
+ formatMessage(labels.unknown)}
+
+ ),
browser: {BROWSERS[browser]},
os: {OS_NAMES[os] || os},
device: {formatMessage(labels[device] || labels.unknown)},
diff --git a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionInfo.tsx b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionInfo.tsx
index 66353816f..bdee0e6f6 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionInfo.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionInfo.tsx
@@ -1,4 +1,4 @@
-import { useFormat, useLocale, useMessages, useRegionNames, useTimezone } from 'components/hooks';
+import { useFormat, useMessages, useRegionNames, useTimezone } from 'components/hooks';
import TypeIcon from 'components/common/TypeIcon';
import { Icon, CopyIcon } from 'react-basics';
import Icons from 'components/icons';
@@ -7,11 +7,10 @@ import { useIntl } from 'react-intl';
export default function SessionInfo({ data }) {
const intl = useIntl();
- const { locale } = useLocale();
const { formatTimezoneDate } = useTimezone();
const { formatMessage, labels } = useMessages();
const { formatValue } = useFormat();
- const { getRegionName } = useRegionNames(locale);
+ const { getRegionName } = useRegionNames();
return (
diff --git a/src/components/hooks/index.ts b/src/components/hooks/index.ts
index 1be99732e..4578a44ad 100644
--- a/src/components/hooks/index.ts
+++ b/src/components/hooks/index.ts
@@ -28,7 +28,6 @@ export * from './queries/useWebsiteEvents';
export * from './queries/useWebsiteEventsSeries';
export * from './queries/useWebsiteMetrics';
export * from './queries/useWebsiteValues';
-export * from './useCountryNames';
export * from './useDateRange';
export * from './useDocumentClick';
export * from './useEscapeKey';
diff --git a/src/components/hooks/useCountryNames.ts b/src/components/hooks/useCountryNames.ts
deleted file mode 100644
index 2bdaa94e9..000000000
--- a/src/components/hooks/useCountryNames.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { useState, useEffect } from 'react';
-import { httpGet } from 'next-basics';
-import enUS from '../../../public/intl/country/en-US.json';
-
-const countryNames = {
- 'en-US': enUS,
-};
-
-export function useCountryNames(locale: string) {
- const [list, setList] = useState(countryNames[locale] || enUS);
-
- async function loadData(locale: string) {
- const { data } = await httpGet(`${process.env.basePath || ''}/intl/country/${locale}.json`);
-
- if (data) {
- countryNames[locale] = data;
- setList(countryNames[locale]);
- } else {
- setList(enUS);
- }
- }
-
- useEffect(() => {
- if (!countryNames[locale]) {
- loadData(locale);
- } else {
- setList(countryNames[locale]);
- }
- }, [locale]);
-
- return { countryNames: list };
-}
-
-export default useCountryNames;
diff --git a/src/components/hooks/useFormat.ts b/src/components/hooks/useFormat.ts
index 631b3f03b..ec2eac925 100644
--- a/src/components/hooks/useFormat.ts
+++ b/src/components/hooks/useFormat.ts
@@ -1,13 +1,11 @@
import useMessages from './useMessages';
import { BROWSERS, OS_NAMES } from 'lib/constants';
-import useLocale from './useLocale';
-import useCountryNames from './useCountryNames';
+import { useIntl } from 'react-intl';
import regions from '../../../public/iso-3166-2.json';
export function useFormat() {
const { formatMessage, labels } = useMessages();
- const { locale } = useLocale();
- const { countryNames } = useCountryNames(locale);
+ const intl = useIntl();
const formatOS = (value: string): string => {
return OS_NAMES[value] || value;
@@ -22,16 +20,20 @@ export function useFormat() {
};
const formatCountry = (value: string): string => {
- return countryNames[value] || value;
+ return intl.formatDisplayName(value, { type: 'region' }) || value;
};
const formatRegion = (value: string): string => {
const [country] = value.split('-');
- return regions[value] ? `${regions[value]}, ${countryNames[country]}` : value;
+ return regions[value]
+ ? `${regions[value]}, ${intl.formatDisplayName(country, { type: 'region' })}`
+ : value;
};
const formatCity = (value: string, country?: string): string => {
- return countryNames[country] ? `${value}, ${countryNames[country]}` : value;
+ return intl.formatDisplayName(country, { type: 'region' })
+ ? `${value}, ${intl.formatDisplayName(country, { type: 'region' })}`
+ : value;
};
const formatValue = (value: string, type: string, data?: { [key: string]: any }): string => {
diff --git a/src/components/hooks/useRegionNames.ts b/src/components/hooks/useRegionNames.ts
index 1ba7feaa7..c3a681015 100644
--- a/src/components/hooks/useRegionNames.ts
+++ b/src/components/hooks/useRegionNames.ts
@@ -1,8 +1,8 @@
-import useCountryNames from './useCountryNames';
+import { useIntl } from 'react-intl';
import regions from '../../../public/iso-3166-2.json';
-export function useRegionNames(locale: string) {
- const { countryNames } = useCountryNames(locale);
+export function useRegionNames() {
+ const intl = useIntl();
const getRegionName = (regionCode: string, countryCode?: string) => {
if (!countryCode) {
@@ -10,7 +10,9 @@ export function useRegionNames(locale: string) {
}
const region = regionCode.includes('-') ? regionCode : `${countryCode}-${regionCode}`;
- return regions[region] ? `${regions[region]}, ${countryNames[countryCode]}` : region;
+ return regions[region]
+ ? `${regions[region]}, ${intl.formatDisplayName(countryCode, { type: 'region' })}`
+ : region;
};
return { regionNames: regions, getRegionName };
diff --git a/src/components/metrics/CitiesTable.tsx b/src/components/metrics/CitiesTable.tsx
index b3573b5c3..18aaea092 100644
--- a/src/components/metrics/CitiesTable.tsx
+++ b/src/components/metrics/CitiesTable.tsx
@@ -2,17 +2,15 @@ import MetricsTable, { MetricsTableProps } from './MetricsTable';
import { emptyFilter } from 'lib/filters';
import FilterLink from 'components/common/FilterLink';
import TypeIcon from 'components/common/TypeIcon';
-import { useLocale } from 'components/hooks';
+import { useIntl } from 'react-intl';
import { useMessages } from 'components/hooks';
-import { useCountryNames } from 'components/hooks';
export function CitiesTable(props: MetricsTableProps) {
- const { locale } = useLocale();
+ const intl = useIntl();
const { formatMessage, labels } = useMessages();
- const { countryNames } = useCountryNames(locale);
const renderLabel = (city: string, country: string) => {
- const countryName = countryNames[country];
+ const countryName = intl.formatDisplayName(country, { type: 'region' });
return countryName ? `${city}, ${countryName}` : city;
};
diff --git a/src/components/metrics/CountriesTable.tsx b/src/components/metrics/CountriesTable.tsx
index 592ade8a0..38a0d8e15 100644
--- a/src/components/metrics/CountriesTable.tsx
+++ b/src/components/metrics/CountriesTable.tsx
@@ -1,12 +1,11 @@
import FilterLink from 'components/common/FilterLink';
-import { useCountryNames } from 'components/hooks';
-import { useLocale, useMessages, useFormat } from 'components/hooks';
+import { useIntl } from 'react-intl';
+import { useMessages, useFormat } from 'components/hooks';
import MetricsTable, { MetricsTableProps } from './MetricsTable';
import TypeIcon from 'components/common/TypeIcon';
export function CountriesTable({ ...props }: MetricsTableProps) {
- const { locale } = useLocale();
- const { countryNames } = useCountryNames(locale);
+ const intl = useIntl();
const { formatMessage, labels } = useMessages();
const { formatCountry } = useFormat();
@@ -14,8 +13,7 @@ export function CountriesTable({ ...props }: MetricsTableProps) {
return (
diff --git a/src/components/metrics/RegionsTable.tsx b/src/components/metrics/RegionsTable.tsx
index 215551af8..92869077a 100644
--- a/src/components/metrics/RegionsTable.tsx
+++ b/src/components/metrics/RegionsTable.tsx
@@ -1,17 +1,16 @@
import FilterLink from 'components/common/FilterLink';
import { emptyFilter } from 'lib/filters';
-import { useMessages, useLocale, useRegionNames } from 'components/hooks';
+import { useMessages, useRegionNames } from 'components/hooks';
import MetricsTable, { MetricsTableProps } from './MetricsTable';
import TypeIcon from 'components/common/TypeIcon';
export function RegionsTable(props: MetricsTableProps) {
- const { locale } = useLocale();
const { formatMessage, labels } = useMessages();
- const { getRegionName } = useRegionNames(locale);
+ const { getRegionName } = useRegionNames();
const renderLink = ({ x: code, country }) => {
return (
-
+
);
diff --git a/src/components/metrics/WorldMap.tsx b/src/components/metrics/WorldMap.tsx
index 4a16f98f7..bbd769709 100644
--- a/src/components/metrics/WorldMap.tsx
+++ b/src/components/metrics/WorldMap.tsx
@@ -5,7 +5,7 @@ import { colord } from 'colord';
import HoverTooltip from 'components/common/HoverTooltip';
import { ISO_COUNTRIES, MAP_FILE } from 'lib/constants';
import { useDateRange, useTheme, useWebsiteMetrics } from 'components/hooks';
-import { useCountryNames } from 'components/hooks';
+import { useIntl } from 'react-intl';
import { useLocale } from 'components/hooks';
import { useMessages } from 'components/hooks';
import { formatLongNumber } from 'lib/format';
@@ -26,7 +26,7 @@ export function WorldMap({
const { theme, colors } = useTheme();
const { locale } = useLocale();
const { formatMessage, labels } = useMessages();
- const { countryNames } = useCountryNames(locale);
+ const intl = useIntl();
const visitorsLabel = formatMessage(labels.visitors).toLocaleLowerCase(locale);
const {
dateRange: { startDate, endDate },
@@ -62,7 +62,9 @@ export function WorldMap({
if (code === 'AQ') return;
const country = metrics?.find(({ x }) => x === code);
setTooltipPopup(
- `${countryNames[code]}: ${formatLongNumber(country?.y || 0)} ${visitorsLabel}` as any,
+ `${intl.formatDisplayName(code, { type: 'region' })}: ${formatLongNumber(
+ country?.y || 0,
+ )} ${visitorsLabel}` as any,
);
};