@prezly/theme-kit-nextjs 3.3.1 → 4.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/build/adapter-nextjs/api-handlers/fetchGalleries.js +1 -1
- package/build/adapter-nextjs/api-handlers/fetchGalleries.js.map +1 -1
- package/build/adapter-nextjs/api-handlers/fetchStories.js +1 -1
- package/build/adapter-nextjs/api-handlers/fetchStories.js.map +1 -1
- package/build/adapter-nextjs/getNewsroomServerSideProps.d.ts +1 -1
- package/build/adapter-nextjs/getNewsroomServerSideProps.js +1 -1
- package/build/adapter-nextjs/getNewsroomServerSideProps.js.map +1 -1
- package/build/adapter-nextjs/getNewsroomStaticProps.d.ts +1 -1
- package/build/adapter-nextjs/getNewsroomStaticProps.js +1 -1
- package/build/adapter-nextjs/getNewsroomStaticProps.js.map +1 -1
- package/build/adapter-nextjs/page-props/category.js +6 -7
- package/build/adapter-nextjs/page-props/category.js.map +1 -1
- package/build/adapter-nextjs/page-props/gallery.js +3 -3
- package/build/adapter-nextjs/page-props/gallery.js.map +1 -1
- package/build/adapter-nextjs/page-props/galleryAlbum.js +1 -1
- package/build/adapter-nextjs/page-props/galleryAlbum.js.map +1 -1
- package/build/adapter-nextjs/page-props/home.js +3 -3
- package/build/adapter-nextjs/page-props/home.js.map +1 -1
- package/build/adapter-nextjs/page-props/sitemap/getServerSideProps.js +1 -1
- package/build/adapter-nextjs/page-props/sitemap/getServerSideProps.js.map +1 -1
- package/build/adapter-nextjs/page-props/story.js +3 -3
- package/build/adapter-nextjs/page-props/story.js.map +1 -1
- package/build/adapter-nextjs/page-props/storyPreview.js +1 -1
- package/build/adapter-nextjs/page-props/storyPreview.js.map +1 -1
- package/build/adapter-nextjs/processRequest.js +3 -2
- package/build/adapter-nextjs/processRequest.js.map +1 -1
- package/build/components-nextjs/PageSeo/PageSeo.js +8 -10
- package/build/components-nextjs/PageSeo/PageSeo.js.map +1 -1
- package/build/components-nextjs/PageSeo/index.d.ts +0 -1
- package/build/components-nextjs/PageSeo/index.js +0 -15
- package/build/components-nextjs/PageSeo/index.js.map +1 -1
- package/build/components-nextjs/PageSeo/lib/index.d.ts +1 -0
- package/build/components-nextjs/PageSeo/lib/index.js +6 -0
- package/build/components-nextjs/PageSeo/lib/index.js.map +1 -0
- package/build/components-nextjs/document.js +4 -4
- package/build/components-nextjs/document.js.map +1 -1
- package/build/data-fetching/NextPrezlyApi.d.ts +8 -0
- package/build/data-fetching/NextPrezlyApi.js +40 -0
- package/build/data-fetching/NextPrezlyApi.js.map +1 -0
- package/build/data-fetching/getNextPrezlyApi.d.ts +4 -0
- package/build/data-fetching/getNextPrezlyApi.js +21 -0
- package/build/data-fetching/getNextPrezlyApi.js.map +1 -0
- package/build/data-fetching/index.d.ts +1 -3
- package/build/data-fetching/index.js +3 -17
- package/build/data-fetching/index.js.map +1 -1
- package/build/index.d.ts +0 -2
- package/build/index.js +0 -2
- package/build/index.js.map +1 -1
- package/build/infinite-loading/useInfiniteStoriesLoading.js.map +1 -1
- package/build/intl/index.d.ts +0 -3
- package/build/intl/index.js +0 -8
- package/build/intl/index.js.map +1 -1
- package/build/intl/languages.d.ts +1 -44
- package/build/intl/languages.js +8 -151
- package/build/intl/languages.js.map +1 -1
- package/build/intl/locale.d.ts +0 -11
- package/build/intl/locale.js +3 -93
- package/build/intl/locale.js.map +1 -1
- package/build/newsroom-context/context.d.ts +2 -2
- package/build/newsroom-context/context.js +2 -2
- package/build/newsroom-context/context.js.map +1 -1
- package/build/newsroom-context/hooks/useAlgoliaSettings.d.ts +1 -1
- package/build/newsroom-context/hooks/useCurrentLocale.d.ts +1 -1
- package/build/newsroom-context/hooks/useGetLinkLocaleSlug.d.ts +1 -1
- package/build/newsroom-context/hooks/useGetLinkLocaleSlug.js +3 -3
- package/build/newsroom-context/hooks/useGetLinkLocaleSlug.js.map +1 -1
- package/build/newsroom-context/hooks/useGetTranslationUrl.d.ts +1 -1
- package/build/newsroom-context/hooks/useGetTranslationUrl.js +3 -3
- package/build/newsroom-context/hooks/useGetTranslationUrl.js.map +1 -1
- package/build/newsroom-context/index.d.ts +1 -1
- package/build/newsroom-context/index.js.map +1 -1
- package/build/types.d.ts +0 -29
- package/package.json +18 -33
- package/src/__mocks__/languages.ts +1 -1
- package/src/adapter-nextjs/api-handlers/fetchGalleries.ts +2 -2
- package/src/adapter-nextjs/api-handlers/fetchStories.ts +2 -2
- package/src/adapter-nextjs/getNewsroomServerSideProps.ts +2 -2
- package/src/adapter-nextjs/getNewsroomStaticProps.ts +2 -2
- package/src/adapter-nextjs/page-props/category.ts +3 -4
- package/src/adapter-nextjs/page-props/gallery.ts +1 -1
- package/src/adapter-nextjs/page-props/galleryAlbum.ts +2 -2
- package/src/adapter-nextjs/page-props/home.ts +1 -1
- package/src/adapter-nextjs/page-props/sitemap/getServerSideProps.ts +2 -2
- package/src/adapter-nextjs/page-props/story.ts +4 -4
- package/src/adapter-nextjs/page-props/storyPreview.ts +2 -2
- package/src/adapter-nextjs/processRequest.ts +2 -1
- package/src/components-nextjs/PageSeo/PageSeo.tsx +7 -5
- package/src/components-nextjs/PageSeo/index.ts +0 -1
- package/src/components-nextjs/PageSeo/lib/index.ts +1 -0
- package/src/components-nextjs/document.tsx +1 -1
- package/src/data-fetching/NextPrezlyApi.ts +57 -0
- package/src/data-fetching/{api/getPrezlyApi.ts → getNextPrezlyApi.ts} +5 -6
- package/src/data-fetching/index.ts +1 -3
- package/src/index.ts +0 -2
- package/src/infinite-loading/useInfiniteStoriesLoading.ts +1 -1
- package/src/intl/index.ts +0 -3
- package/src/intl/languages.test.ts +1 -196
- package/src/intl/languages.ts +8 -201
- package/src/intl/locale.test.ts +1 -54
- package/src/intl/locale.ts +1 -106
- package/src/newsroom-context/context.tsx +2 -3
- package/src/newsroom-context/hooks/useGetLinkLocaleSlug.ts +1 -2
- package/src/newsroom-context/hooks/useGetTranslationUrl.ts +2 -3
- package/src/newsroom-context/index.ts +1 -1
- package/src/types.ts +0 -35
- package/build/components-nextjs/PageSeo/lib/types.d.ts +0 -4
- package/build/components-nextjs/PageSeo/lib/types.js +0 -3
- package/build/components-nextjs/PageSeo/lib/types.js.map +0 -1
- package/build/data-fetching/api/PrezlyApi.d.ts +0 -57
- package/build/data-fetching/api/PrezlyApi.js +0 -200
- package/build/data-fetching/api/PrezlyApi.js.map +0 -1
- package/build/data-fetching/api/getPrezlyApi.d.ts +0 -4
- package/build/data-fetching/api/getPrezlyApi.js +0 -21
- package/build/data-fetching/api/getPrezlyApi.js.map +0 -1
- package/build/data-fetching/api/index.d.ts +0 -1
- package/build/data-fetching/api/index.js +0 -18
- package/build/data-fetching/api/index.js.map +0 -1
- package/build/data-fetching/api/lib.d.ts +0 -11
- package/build/data-fetching/api/lib.js +0 -20
- package/build/data-fetching/api/lib.js.map +0 -1
- package/build/data-fetching/api/queries.d.ts +0 -46
- package/build/data-fetching/api/queries.js +0 -56
- package/build/data-fetching/api/queries.js.map +0 -1
- package/build/data-fetching/lib/getAlgoliaSettings.d.ts +0 -4
- package/build/data-fetching/lib/getAlgoliaSettings.js +0 -22
- package/build/data-fetching/lib/getAlgoliaSettings.js.map +0 -1
- package/build/data-fetching/lib/getEnvVariables.d.ts +0 -4
- package/build/data-fetching/lib/getEnvVariables.js +0 -44
- package/build/data-fetching/lib/getEnvVariables.js.map +0 -1
- package/build/data-fetching/lib/index.d.ts +0 -4
- package/build/data-fetching/lib/index.js +0 -12
- package/build/data-fetching/lib/index.js.map +0 -1
- package/build/data-fetching/lib/isSdkError.d.ts +0 -2
- package/build/data-fetching/lib/isSdkError.js +0 -8
- package/build/data-fetching/lib/isSdkError.js.map +0 -1
- package/build/data-fetching/lib/isUuid.d.ts +0 -1
- package/build/data-fetching/lib/isUuid.js +0 -9
- package/build/data-fetching/lib/isUuid.js.map +0 -1
- package/build/data-fetching/types.d.ts +0 -13
- package/build/data-fetching/types.js +0 -3
- package/build/data-fetching/types.js.map +0 -1
- package/build/intl/getFallbackLocale.d.ts +0 -10
- package/build/intl/getFallbackLocale.js +0 -24
- package/build/intl/getFallbackLocale.js.map +0 -1
- package/build/intl/localeConfig.d.ts +0 -2
- package/build/intl/localeConfig.js +0 -20
- package/build/intl/localeConfig.js.map +0 -1
- package/build/intl/localeList.d.ts +0 -2
- package/build/intl/localeList.js +0 -112
- package/build/intl/localeList.js.map +0 -1
- package/build/intl/localeObject.d.ts +0 -50
- package/build/intl/localeObject.js +0 -98
- package/build/intl/localeObject.js.map +0 -1
- package/build/seo/getAlternateLanguageLinks.d.ts +0 -4
- package/build/seo/getAlternateLanguageLinks.js +0 -84
- package/build/seo/getAlternateLanguageLinks.js.map +0 -1
- package/build/seo/index.d.ts +0 -1
- package/build/seo/index.js +0 -18
- package/build/seo/index.js.map +0 -1
- package/build/seo/utils/bindLanguagesWithLocales.d.ts +0 -11
- package/build/seo/utils/bindLanguagesWithLocales.js +0 -23
- package/build/seo/utils/bindLanguagesWithLocales.js.map +0 -1
- package/build/seo/utils/createAlternateLanguageLink.d.ts +0 -5
- package/build/seo/utils/createAlternateLanguageLink.js +0 -15
- package/build/seo/utils/createAlternateLanguageLink.js.map +0 -1
- package/build/tsconfig.tsbuildinfo +0 -1
- package/build/utils/boilerplate.d.ts +0 -4
- package/build/utils/boilerplate.js +0 -27
- package/build/utils/boilerplate.js.map +0 -1
- package/build/utils/constants.d.ts +0 -3
- package/build/utils/constants.js +0 -7
- package/build/utils/constants.js.map +0 -1
- package/build/utils/getAssetsUrl.d.ts +0 -5
- package/build/utils/getAssetsUrl.js +0 -13
- package/build/utils/getAssetsUrl.js.map +0 -1
- package/build/utils/getDataRequestLink.d.ts +0 -3
- package/build/utils/getDataRequestLink.js +0 -12
- package/build/utils/getDataRequestLink.js.map +0 -1
- package/build/utils/getLocalizedCategoryData.d.ts +0 -10
- package/build/utils/getLocalizedCategoryData.js +0 -37
- package/build/utils/getLocalizedCategoryData.js.map +0 -1
- package/build/utils/getNewsroomLogoUrl.d.ts +0 -3
- package/build/utils/getNewsroomLogoUrl.js +0 -22
- package/build/utils/getNewsroomLogoUrl.js.map +0 -1
- package/build/utils/getPrivacyPortalUrl.d.ts +0 -8
- package/build/utils/getPrivacyPortalUrl.js +0 -13
- package/build/utils/getPrivacyPortalUrl.js.map +0 -1
- package/build/utils/getStoryPublicationDate.d.ts +0 -3
- package/build/utils/getStoryPublicationDate.js +0 -14
- package/build/utils/getStoryPublicationDate.js.map +0 -1
- package/build/utils/getUploadcareGroupUrl.d.ts +0 -8
- package/build/utils/getUploadcareGroupUrl.js +0 -17
- package/build/utils/getUploadcareGroupUrl.js.map +0 -1
- package/build/utils/index.d.ts +0 -10
- package/build/utils/index.js +0 -27
- package/build/utils/index.js.map +0 -1
- package/build/utils/isEmbargoStory.d.ts +0 -6
- package/build/utils/isEmbargoStory.js +0 -8
- package/build/utils/isEmbargoStory.js.map +0 -1
- package/src/@types/global.d.ts +0 -7
- package/src/__mocks__/story.ts +0 -359
- package/src/components-nextjs/PageSeo/lib/types.ts +0 -4
- package/src/data-fetching/api/PrezlyApi.ts +0 -312
- package/src/data-fetching/api/index.ts +0 -1
- package/src/data-fetching/api/lib.ts +0 -24
- package/src/data-fetching/api/queries.ts +0 -59
- package/src/data-fetching/lib/getAlgoliaSettings.ts +0 -29
- package/src/data-fetching/lib/getEnvVariables.ts +0 -46
- package/src/data-fetching/lib/index.ts +0 -4
- package/src/data-fetching/lib/isSdkError.ts +0 -5
- package/src/data-fetching/lib/isUuid.ts +0 -5
- package/src/data-fetching/types.ts +0 -14
- package/src/intl/getFallbackLocale.ts +0 -29
- package/src/intl/localeConfig.js +0 -23
- package/src/intl/localeList.js +0 -110
- package/src/intl/localeObject.test.ts +0 -81
- package/src/intl/localeObject.ts +0 -107
- package/src/seo/getAlternateLanguageLinks.test.ts +0 -164
- package/src/seo/getAlternateLanguageLinks.ts +0 -115
- package/src/seo/index.ts +0 -1
- package/src/seo/utils/bindLanguagesWithLocales.ts +0 -31
- package/src/seo/utils/createAlternateLanguageLink.ts +0 -17
- package/src/utils/boilerplate.ts +0 -30
- package/src/utils/constants.ts +0 -3
- package/src/utils/getAssetsUrl.test.ts +0 -9
- package/src/utils/getAssetsUrl.ts +0 -9
- package/src/utils/getDataRequestLink.ts +0 -14
- package/src/utils/getLocalizedCategoryData.ts +0 -47
- package/src/utils/getNewsroomLogoUrl.ts +0 -22
- package/src/utils/getPrivacyPortalUrl.ts +0 -25
- package/src/utils/getStoryPublicationDate.tsx +0 -15
- package/src/utils/getUploadcareGroupUrl.ts +0 -13
- package/src/utils/index.ts +0 -10
- package/src/utils/isEmbargoStory.ts +0 -10
|
@@ -1,148 +1,10 @@
|
|
|
1
1
|
import { LANGUAGES } from '../__mocks__/languages';
|
|
2
|
-
import { STORY } from '../__mocks__/story';
|
|
3
2
|
|
|
4
|
-
import {
|
|
5
|
-
getCompanyInformation,
|
|
6
|
-
getDefaultLanguage,
|
|
7
|
-
getLanguageByExactLocaleCode,
|
|
8
|
-
getLanguageByNeutralLocaleCode,
|
|
9
|
-
getLanguageByShortRegionCode,
|
|
10
|
-
getLanguageDisplayName,
|
|
11
|
-
getLanguageFromNextLocaleIsoCode,
|
|
12
|
-
getLanguageFromStory,
|
|
13
|
-
getShortestLocaleCode,
|
|
14
|
-
getUsedLanguages,
|
|
15
|
-
} from './languages';
|
|
3
|
+
import { getLanguageFromNextLocaleIsoCode } from './languages';
|
|
16
4
|
import { DUMMY_DEFAULT_LOCALE } from './locale';
|
|
17
|
-
import { LocaleObject } from './localeObject';
|
|
18
5
|
|
|
19
6
|
const ALL_LANGUAGES = Object.values(LANGUAGES);
|
|
20
7
|
|
|
21
|
-
describe('getLanguageDisplayName', () => {
|
|
22
|
-
it('returns shortened name when language is the only culture', () => {
|
|
23
|
-
const languages = [LANGUAGES.en, LANGUAGES.fr];
|
|
24
|
-
|
|
25
|
-
expect(getLanguageDisplayName(LANGUAGES.en, languages)).toBe('English');
|
|
26
|
-
expect(getLanguageDisplayName(LANGUAGES.fr, languages)).toBe('Français');
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('returns full name when language is NOT the only culture', () => {
|
|
30
|
-
const languages = [LANGUAGES.nl_BE, LANGUAGES.nl_NL];
|
|
31
|
-
|
|
32
|
-
expect(getLanguageDisplayName(LANGUAGES.nl_BE, languages)).toBe('Nederlands (België)');
|
|
33
|
-
expect(getLanguageDisplayName(LANGUAGES.nl_NL, languages)).toBe('Nederlands (Nederland)');
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
describe('getDefaultLanguage', () => {
|
|
38
|
-
it('returns the actual default language', () => {
|
|
39
|
-
const languages = [LANGUAGES.en, LANGUAGES.fr];
|
|
40
|
-
|
|
41
|
-
expect(getDefaultLanguage(languages)).toEqual(LANGUAGES.en);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it('returns the first language if no default language is set', () => {
|
|
45
|
-
const languages = [LANGUAGES.nl_BE, LANGUAGES.nl_NL];
|
|
46
|
-
|
|
47
|
-
expect(getDefaultLanguage(languages)).toEqual(LANGUAGES.nl_BE);
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
describe('getUsedLanguages', () => {
|
|
52
|
-
it('filters out languages with no published stories', () => {
|
|
53
|
-
const languages = Object.values(LANGUAGES);
|
|
54
|
-
const usedLanguages = getUsedLanguages(languages);
|
|
55
|
-
|
|
56
|
-
expect(usedLanguages).toHaveLength(3);
|
|
57
|
-
expect(usedLanguages.every(({ public_stories_count }) => public_stories_count > 0)).toBe(
|
|
58
|
-
true,
|
|
59
|
-
);
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
describe('getLanguageByExactLocaleCode', () => {
|
|
64
|
-
const languages = [LANGUAGES.nl_BE, LANGUAGES.en];
|
|
65
|
-
|
|
66
|
-
it('returns a languages by its exact locale code', () => {
|
|
67
|
-
expect(getLanguageByExactLocaleCode(languages, LocaleObject.fromAnyCode('nl-BE'))).toEqual(
|
|
68
|
-
LANGUAGES.nl_BE,
|
|
69
|
-
);
|
|
70
|
-
expect(getLanguageByExactLocaleCode(languages, LocaleObject.fromAnyCode('en'))).toEqual(
|
|
71
|
-
LANGUAGES.en,
|
|
72
|
-
);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
it('returns undefined when there is no langauge with exact locale code', () => {
|
|
76
|
-
expect(getLanguageByExactLocaleCode(languages, LocaleObject.fromAnyCode('nl'))).toBe(
|
|
77
|
-
undefined,
|
|
78
|
-
);
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
describe('getLanguageByNeutralLocaleCode', () => {
|
|
83
|
-
it('prefers default language', () => {
|
|
84
|
-
const languages = [LANGUAGES.en_US, LANGUAGES.en];
|
|
85
|
-
|
|
86
|
-
expect(getLanguageByNeutralLocaleCode(languages, LocaleObject.fromAnyCode('en'))).toEqual(
|
|
87
|
-
LANGUAGES.en,
|
|
88
|
-
);
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
it('prefers used cultures', () => {
|
|
92
|
-
const languages = [
|
|
93
|
-
LANGUAGES.en,
|
|
94
|
-
{ ...LANGUAGES.nl_BE, public_stories_count: 0, stories_count: 0 },
|
|
95
|
-
LANGUAGES.nl_NL,
|
|
96
|
-
];
|
|
97
|
-
|
|
98
|
-
expect(getLanguageByNeutralLocaleCode(languages, LocaleObject.fromAnyCode('nl'))).toEqual(
|
|
99
|
-
LANGUAGES.nl_NL,
|
|
100
|
-
);
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
it('returns first fitting culture from unused cultures', () => {
|
|
104
|
-
const languages = [
|
|
105
|
-
LANGUAGES.en,
|
|
106
|
-
{ ...LANGUAGES.nl_BE, public_stories_count: 0, stories_count: 0 },
|
|
107
|
-
{ ...LANGUAGES.nl_NL, public_stories_count: 0, stories_count: 0 },
|
|
108
|
-
];
|
|
109
|
-
|
|
110
|
-
expect(getLanguageByNeutralLocaleCode(languages, LocaleObject.fromAnyCode('nl'))).toEqual(
|
|
111
|
-
languages[1],
|
|
112
|
-
);
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
describe('getLanguageByShortRegionCode', () => {
|
|
117
|
-
it('prefers default language', () => {
|
|
118
|
-
const languages = [LANGUAGES.nl_BE, { ...LANGUAGES.fr_BE, is_default: true }];
|
|
119
|
-
|
|
120
|
-
expect(getLanguageByShortRegionCode(languages, LocaleObject.fromAnyCode('be'))).toEqual(
|
|
121
|
-
languages[1],
|
|
122
|
-
);
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
it('prefers used cultures', () => {
|
|
126
|
-
const languages = [LANGUAGES.en, LANGUAGES.nl_BE, LANGUAGES.fr_BE];
|
|
127
|
-
|
|
128
|
-
expect(getLanguageByShortRegionCode(languages, LocaleObject.fromAnyCode('be'))).toEqual(
|
|
129
|
-
LANGUAGES.nl_BE,
|
|
130
|
-
);
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
it('returns first fitting culture from unused cultures', () => {
|
|
134
|
-
const languages = [
|
|
135
|
-
LANGUAGES.en,
|
|
136
|
-
LANGUAGES.fr_BE,
|
|
137
|
-
{ ...LANGUAGES.nl_BE, public_stories_count: 0, stories_count: 0 },
|
|
138
|
-
];
|
|
139
|
-
|
|
140
|
-
expect(getLanguageByShortRegionCode(languages, LocaleObject.fromAnyCode('be'))).toEqual(
|
|
141
|
-
LANGUAGES.fr_BE,
|
|
142
|
-
);
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
|
|
146
8
|
describe('getLanguageFromNextLocaleIsoCode', () => {
|
|
147
9
|
it('returns default language when no locale code provided or when dummy locale provided', () => {
|
|
148
10
|
expect(getLanguageFromNextLocaleIsoCode(ALL_LANGUAGES)).toEqual(LANGUAGES.en);
|
|
@@ -173,60 +35,3 @@ describe('getLanguageFromNextLocaleIsoCode', () => {
|
|
|
173
35
|
expect(getLanguageFromNextLocaleIsoCode(ALL_LANGUAGES, 'zh-Hant')).toEqual(undefined);
|
|
174
36
|
});
|
|
175
37
|
});
|
|
176
|
-
|
|
177
|
-
describe('getLanguageFromStory', () => {
|
|
178
|
-
it('correctly returns language from a story', () => {
|
|
179
|
-
expect(getLanguageFromStory(ALL_LANGUAGES, STORY)).toEqual(LANGUAGES.en);
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
describe('getCompanyInformation', () => {
|
|
184
|
-
it('returns company information from target language', () => {
|
|
185
|
-
expect(getCompanyInformation(ALL_LANGUAGES, LocaleObject.fromAnyCode('nl-BE'))).toEqual(
|
|
186
|
-
LANGUAGES.nl_BE.company_information,
|
|
187
|
-
);
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
it('returns company information from default language if target not found', () => {
|
|
191
|
-
expect(getCompanyInformation(ALL_LANGUAGES, LocaleObject.fromAnyCode('de-DE'))).toEqual(
|
|
192
|
-
LANGUAGES.en.company_information,
|
|
193
|
-
);
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
describe('getShortestLocaleCode', () => {
|
|
198
|
-
it('returns false for default language', () => {
|
|
199
|
-
expect(getShortestLocaleCode(ALL_LANGUAGES, LocaleObject.fromAnyCode('en'))).toBe(false);
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
it('returns neutral language code if it is the only culture with that language', () => {
|
|
203
|
-
expect(
|
|
204
|
-
getShortestLocaleCode(
|
|
205
|
-
ALL_LANGUAGES.filter(({ code }) => code !== 'es_419'),
|
|
206
|
-
LocaleObject.fromAnyCode('es-ES'),
|
|
207
|
-
),
|
|
208
|
-
).toBe('es');
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
it('returns region code if it is the only culture with that region', () => {
|
|
212
|
-
expect(getShortestLocaleCode(ALL_LANGUAGES, LocaleObject.fromAnyCode('en-US'))).toBe('US');
|
|
213
|
-
expect(getShortestLocaleCode(ALL_LANGUAGES, LocaleObject.fromAnyCode('en-GB'))).toBe('GB');
|
|
214
|
-
expect(getShortestLocaleCode(ALL_LANGUAGES, LocaleObject.fromAnyCode('nl-NL'))).toBe('NL');
|
|
215
|
-
expect(getShortestLocaleCode(ALL_LANGUAGES, LocaleObject.fromAnyCode('fr'))).toBe('FR');
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
it('returns full code if it can not be shortened', () => {
|
|
219
|
-
expect(getShortestLocaleCode(ALL_LANGUAGES, LocaleObject.fromAnyCode('fr-BE'))).toBe(
|
|
220
|
-
'fr_BE',
|
|
221
|
-
);
|
|
222
|
-
expect(getShortestLocaleCode(ALL_LANGUAGES, LocaleObject.fromAnyCode('nl-BE'))).toBe(
|
|
223
|
-
'nl_BE',
|
|
224
|
-
);
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
it('returns full code when trying to shorten to region code for es-419', () => {
|
|
228
|
-
expect(getShortestLocaleCode(ALL_LANGUAGES, LocaleObject.fromAnyCode('es-419'))).toBe(
|
|
229
|
-
'es_419',
|
|
230
|
-
);
|
|
231
|
-
});
|
|
232
|
-
});
|
package/src/intl/languages.ts
CHANGED
|
@@ -1,125 +1,13 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { NewsroomLanguageSettings } from '@prezly/sdk';
|
|
2
|
+
import {
|
|
3
|
+
getDefaultLanguage,
|
|
4
|
+
getLanguageByExactLocaleCode,
|
|
5
|
+
getLanguageByNeutralLocaleCode,
|
|
6
|
+
getLanguageByShortRegionCode,
|
|
7
|
+
LocaleObject,
|
|
8
|
+
} from '@prezly/theme-kit-core';
|
|
2
9
|
|
|
3
10
|
import { DUMMY_DEFAULT_LOCALE } from './locale';
|
|
4
|
-
import { LocaleObject } from './localeObject';
|
|
5
|
-
|
|
6
|
-
function isOnlyCulture(culture: CultureRef, languages: NewsroomLanguageSettings[]): boolean {
|
|
7
|
-
const numberOfLanguages = languages.filter(
|
|
8
|
-
({ locale: { language_code } }) => language_code === culture.language_code,
|
|
9
|
-
).length;
|
|
10
|
-
|
|
11
|
-
return numberOfLanguages === 1;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @returns the display name of the locale in its native language
|
|
16
|
-
*
|
|
17
|
-
* If there's only one culture used in a specific language,
|
|
18
|
-
* we strip the culture name completely.
|
|
19
|
-
*
|
|
20
|
-
* Examples:
|
|
21
|
-
* - English (Global), Spanish (Spain)
|
|
22
|
-
* - -> English, Spanish
|
|
23
|
-
* - English (Global), English (UK), Spanish (Spain)
|
|
24
|
-
* - -> English (Global), English (UK), Spanish
|
|
25
|
-
*/
|
|
26
|
-
export function getLanguageDisplayName(
|
|
27
|
-
language: NewsroomLanguageSettings,
|
|
28
|
-
languages: NewsroomLanguageSettings[],
|
|
29
|
-
): string {
|
|
30
|
-
const { locale } = language;
|
|
31
|
-
|
|
32
|
-
if (isOnlyCulture(locale, languages)) {
|
|
33
|
-
const cultureNameIndex = locale.native_name.indexOf('(');
|
|
34
|
-
|
|
35
|
-
if (cultureNameIndex !== -1) {
|
|
36
|
-
return locale.native_name.slice(0, cultureNameIndex - 1);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return locale.native_name;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* @returns Language set as default in the Newsroom Settings.
|
|
45
|
-
*/
|
|
46
|
-
export function getDefaultLanguage(languages: NewsroomLanguageSettings[]) {
|
|
47
|
-
return languages.find(({ is_default }) => is_default) || languages[0];
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* @returns Only languages having at least one published story
|
|
52
|
-
*/
|
|
53
|
-
export function getUsedLanguages(languages: NewsroomLanguageSettings[]) {
|
|
54
|
-
return languages.filter((language) => language.public_stories_count > 0);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export function getLanguageByExactLocaleCode(
|
|
58
|
-
languages: NewsroomLanguageSettings[],
|
|
59
|
-
locale: LocaleObject,
|
|
60
|
-
) {
|
|
61
|
-
const localeCode = locale.toUnderscoreCode();
|
|
62
|
-
return languages.find(({ code }) => code === localeCode);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// See https://github.com/prezly/prezly/blob/master/lib/model/CulturePeer.php#L123
|
|
66
|
-
export function getLanguageByNeutralLocaleCode(
|
|
67
|
-
languages: NewsroomLanguageSettings[],
|
|
68
|
-
locale: LocaleObject,
|
|
69
|
-
) {
|
|
70
|
-
const neutralLanguageCode = locale.toNeutralLanguageCode();
|
|
71
|
-
|
|
72
|
-
// Prefer default language
|
|
73
|
-
const defaultLanguage = getDefaultLanguage(languages);
|
|
74
|
-
// TODO: This doesn't align with other methods logic
|
|
75
|
-
if (defaultLanguage.code === locale.toUnderscoreCode()) {
|
|
76
|
-
return defaultLanguage;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Try to look in used cultures first (giving priority to used ones)
|
|
80
|
-
const usedLanguages = getUsedLanguages(languages);
|
|
81
|
-
const usedLanguage = usedLanguages.find(
|
|
82
|
-
({ code }) =>
|
|
83
|
-
LocaleObject.fromAnyCode(code).toNeutralLanguageCode() === neutralLanguageCode,
|
|
84
|
-
);
|
|
85
|
-
if (usedLanguage) {
|
|
86
|
-
return usedLanguage;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Search in all languages
|
|
90
|
-
return languages.find(
|
|
91
|
-
({ code }) =>
|
|
92
|
-
LocaleObject.fromAnyCode(code).toNeutralLanguageCode() === neutralLanguageCode,
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// See https://github.com/prezly/prezly/blob/master/lib/model/CulturePeer.php#L159
|
|
97
|
-
export function getLanguageByShortRegionCode(
|
|
98
|
-
languages: NewsroomLanguageSettings[],
|
|
99
|
-
locale: LocaleObject,
|
|
100
|
-
) {
|
|
101
|
-
const shortRegionCode = locale.toRegionCode();
|
|
102
|
-
|
|
103
|
-
// Prefer default language
|
|
104
|
-
const defaultLanguage = getDefaultLanguage(languages);
|
|
105
|
-
if (LocaleObject.fromAnyCode(defaultLanguage.code).toRegionCode() === shortRegionCode) {
|
|
106
|
-
return defaultLanguage;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Try to look in used cultures first (giving priority to used ones)
|
|
110
|
-
const usedLanguages = getUsedLanguages(languages);
|
|
111
|
-
const usedLanguage = usedLanguages.find(
|
|
112
|
-
({ code }) => LocaleObject.fromAnyCode(code).toRegionCode() === shortRegionCode,
|
|
113
|
-
);
|
|
114
|
-
if (usedLanguage) {
|
|
115
|
-
return usedLanguage;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Search in all languages
|
|
119
|
-
return languages.find(
|
|
120
|
-
({ code }) => LocaleObject.fromAnyCode(code).toRegionCode() === shortRegionCode,
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
11
|
|
|
124
12
|
/**
|
|
125
13
|
* Retrieve a culture with fallback to legacy codes support.
|
|
@@ -150,84 +38,3 @@ export function getLanguageFromNextLocaleIsoCode(
|
|
|
150
38
|
|
|
151
39
|
return targetLanguage;
|
|
152
40
|
}
|
|
153
|
-
|
|
154
|
-
export function getLanguageFromStory(languages: NewsroomLanguageSettings[], story: Story) {
|
|
155
|
-
const { code: storyLocaleCode } = story.culture;
|
|
156
|
-
|
|
157
|
-
return languages.find(({ code }) => code === storyLocaleCode);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Extracts company information for the selected locale
|
|
162
|
-
*/
|
|
163
|
-
export function getCompanyInformation(languages: NewsroomLanguageSettings[], locale: LocaleObject) {
|
|
164
|
-
const currentLanguage =
|
|
165
|
-
getLanguageByExactLocaleCode(languages, locale) || getDefaultLanguage(languages);
|
|
166
|
-
|
|
167
|
-
return currentLanguage.company_information;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Get newsroom notifications for the selected locale
|
|
172
|
-
*/
|
|
173
|
-
export function getNotifications(languages: NewsroomLanguageSettings[], locale: LocaleObject) {
|
|
174
|
-
const currentLanguage =
|
|
175
|
-
getLanguageByExactLocaleCode(languages, locale) || getDefaultLanguage(languages);
|
|
176
|
-
|
|
177
|
-
return currentLanguage.notifications;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Get the shortest locale code possible from full locale code
|
|
182
|
-
* First: try shorting to neutral language code (there should be no locales with the same language code)
|
|
183
|
-
* Then: try shorting to region code (there should be no locales with the same region code)
|
|
184
|
-
* Finally: return the original locale code (shorting is not possible)
|
|
185
|
-
*
|
|
186
|
-
* @param locale A LocaleObject constructed from FULL locale code (taken straight from the selected language)
|
|
187
|
-
*/
|
|
188
|
-
export function getShortestLocaleCode(
|
|
189
|
-
languages: NewsroomLanguageSettings[],
|
|
190
|
-
locale: LocaleObject,
|
|
191
|
-
): string | false {
|
|
192
|
-
const localeCode = locale.toUnderscoreCode();
|
|
193
|
-
const defaultLanguage = getDefaultLanguage(languages);
|
|
194
|
-
// If it's a default locale, return false (no locale needed in URL)
|
|
195
|
-
if (localeCode === defaultLanguage.code) {
|
|
196
|
-
return false;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// Try shorting to neutral language code
|
|
200
|
-
const neutralLanguageCode = locale.toNeutralLanguageCode();
|
|
201
|
-
const matchingLanguagesByNeutralCode = languages.filter(
|
|
202
|
-
({ code }) =>
|
|
203
|
-
LocaleObject.fromAnyCode(code).toNeutralLanguageCode() === neutralLanguageCode ||
|
|
204
|
-
code === neutralLanguageCode,
|
|
205
|
-
);
|
|
206
|
-
if (matchingLanguagesByNeutralCode.length === 1) {
|
|
207
|
-
return neutralLanguageCode;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Try shorting to region code
|
|
211
|
-
const shortRegionCode = locale.toRegionCode();
|
|
212
|
-
const matchingLanguagesByRegionCode = languages.filter(
|
|
213
|
-
({ code }) => LocaleObject.fromAnyCode(code).toRegionCode() === shortRegionCode,
|
|
214
|
-
);
|
|
215
|
-
// Prevent collision with neutral language codes
|
|
216
|
-
const lowerCasedShortRegionCode = shortRegionCode.toLowerCase();
|
|
217
|
-
const mathchingNeutralLanguagesByRegionCode = languages.filter(
|
|
218
|
-
({ code }) =>
|
|
219
|
-
LocaleObject.fromAnyCode(code).toNeutralLanguageCode() === lowerCasedShortRegionCode ||
|
|
220
|
-
code === lowerCasedShortRegionCode,
|
|
221
|
-
);
|
|
222
|
-
if (
|
|
223
|
-
matchingLanguagesByRegionCode.length === 1 &&
|
|
224
|
-
// If there are 2 or more matching neutral languages, it means that there are no languages that can be shortened to neutral code
|
|
225
|
-
mathchingNeutralLanguagesByRegionCode.length !== 1 &&
|
|
226
|
-
// We don't want just numbers in our region code
|
|
227
|
-
Number.isNaN(Number(shortRegionCode))
|
|
228
|
-
) {
|
|
229
|
-
return shortRegionCode;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
return localeCode;
|
|
233
|
-
}
|
package/src/intl/locale.test.ts
CHANGED
|
@@ -1,41 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
DEFAULT_LOCALE,
|
|
4
|
-
DUMMY_DEFAULT_LOCALE,
|
|
5
|
-
getLocaleDirection,
|
|
6
|
-
getRedirectToCanonicalLocale,
|
|
7
|
-
getSupportedLocaleIsoCode,
|
|
8
|
-
} from './locale';
|
|
9
|
-
import { LocaleObject } from './localeObject';
|
|
10
|
-
|
|
11
|
-
describe('getSupportedLocaleIsoCode', () => {
|
|
12
|
-
it('returns a code by exact match', () => {
|
|
13
|
-
expect(getSupportedLocaleIsoCode(LocaleObject.fromAnyCode('en'))).toBe('en');
|
|
14
|
-
expect(getSupportedLocaleIsoCode(LocaleObject.fromAnyCode('af'))).toBe('af');
|
|
15
|
-
expect(getSupportedLocaleIsoCode(LocaleObject.fromAnyCode('pt-BR'))).toBe('pt-BR');
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
it('returns a code by neutral language code match', () => {
|
|
19
|
-
expect(getSupportedLocaleIsoCode(LocaleObject.fromAnyCode('en-US'))).toBe('en');
|
|
20
|
-
expect(getSupportedLocaleIsoCode(LocaleObject.fromAnyCode('de-DE'))).toBe('de');
|
|
21
|
-
expect(getSupportedLocaleIsoCode(LocaleObject.fromAnyCode('uk-UA'))).toBe('uk');
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('returns custom mapped codes for Chinese locales', () => {
|
|
25
|
-
expect(getSupportedLocaleIsoCode(LocaleObject.fromAnyCode('zh-Hant'))).toBe('zh-TW');
|
|
26
|
-
expect(getSupportedLocaleIsoCode(LocaleObject.fromAnyCode('zh-HK'))).toBe('zh-CN');
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('returns default locale code for unsupported languages', () => {
|
|
30
|
-
const consoleSpy = jest.spyOn(console, 'warn');
|
|
31
|
-
|
|
32
|
-
// @ts-expect-error
|
|
33
|
-
expect(getSupportedLocaleIsoCode(new LocaleObject('aa'))).toBe(DEFAULT_LOCALE);
|
|
34
|
-
expect(consoleSpy).toHaveBeenCalledWith(
|
|
35
|
-
'Unsupported locale provided. Please use `LocaleObject.fromAnyCode` to ensure you are using a correct language code',
|
|
36
|
-
);
|
|
37
|
-
});
|
|
38
|
-
});
|
|
1
|
+
import { DUMMY_DEFAULT_LOCALE, getRedirectToCanonicalLocale } from './locale';
|
|
39
2
|
|
|
40
3
|
describe('getRedirectToCanonicalLocale', () => {
|
|
41
4
|
it('returns undefined when no locale or dummy locale is provided', () => {
|
|
@@ -77,19 +40,3 @@ describe('getRedirectToCanonicalLocale', () => {
|
|
|
77
40
|
});
|
|
78
41
|
});
|
|
79
42
|
});
|
|
80
|
-
|
|
81
|
-
describe('getLocaleDirection', () => {
|
|
82
|
-
it('returns `rtl` for right-to-left languages', () => {
|
|
83
|
-
const RTL_LANGUAGES = ['ar', 'ar-AE', 'ar-BH', 'ar-QA', 'ar-SA', 'he-IL', 'ur-PK'];
|
|
84
|
-
RTL_LANGUAGES.forEach((language) => {
|
|
85
|
-
expect(getLocaleDirection(LocaleObject.fromAnyCode(language))).toBe('rtl');
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
it('returns `ltr` for other languages', () => {
|
|
90
|
-
const LTR_LANGUAGES = ['en', 'en-US', 'fr-FR', 'fil', 'pt-BR', 'nl', 'nl-BE'];
|
|
91
|
-
LTR_LANGUAGES.forEach((language) => {
|
|
92
|
-
expect(getLocaleDirection(LocaleObject.fromAnyCode(language))).toBe('ltr');
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
});
|
package/src/intl/locale.ts
CHANGED
|
@@ -1,106 +1,11 @@
|
|
|
1
|
+
import { LocaleObject } from '@prezly/theme-kit-core';
|
|
1
2
|
import type { Redirect } from 'next';
|
|
2
3
|
import type { ParsedUrlQuery } from 'querystring';
|
|
3
4
|
import { stringify } from 'querystring';
|
|
4
5
|
|
|
5
|
-
import { LocaleObject } from './localeObject';
|
|
6
|
-
|
|
7
|
-
export const DEFAULT_LOCALE = 'en';
|
|
8
6
|
// We use pseudo locale used for localization testing, to reliably determine if we need to fallback to the default newsroom language
|
|
9
7
|
export const DUMMY_DEFAULT_LOCALE = 'qps-ploc';
|
|
10
8
|
|
|
11
|
-
export type LangCode = string;
|
|
12
|
-
export type RegionCode = string;
|
|
13
|
-
export type LocaleCode = string;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* This a list of locales that Prezly has translations for. Each code represents a language file in the `@prezly/themes-intl-messages` package.
|
|
17
|
-
* See https://github.com/prezly/themes-intl-messages for more info.
|
|
18
|
-
*/
|
|
19
|
-
const SUPPORTED_LOCALES: LocaleCode[] = [
|
|
20
|
-
'af',
|
|
21
|
-
'ar',
|
|
22
|
-
'az',
|
|
23
|
-
'be',
|
|
24
|
-
'bg',
|
|
25
|
-
'cs',
|
|
26
|
-
'da',
|
|
27
|
-
'de',
|
|
28
|
-
'el',
|
|
29
|
-
'en',
|
|
30
|
-
'es',
|
|
31
|
-
'et',
|
|
32
|
-
'fi',
|
|
33
|
-
'fil',
|
|
34
|
-
'fr',
|
|
35
|
-
'ga',
|
|
36
|
-
'he',
|
|
37
|
-
'hi',
|
|
38
|
-
'hr',
|
|
39
|
-
'hu',
|
|
40
|
-
'id',
|
|
41
|
-
'it',
|
|
42
|
-
'ja',
|
|
43
|
-
'kk',
|
|
44
|
-
'ko',
|
|
45
|
-
'lt',
|
|
46
|
-
'lv',
|
|
47
|
-
'mt',
|
|
48
|
-
'nl',
|
|
49
|
-
'no',
|
|
50
|
-
'pl',
|
|
51
|
-
'pt-BR',
|
|
52
|
-
'pt',
|
|
53
|
-
'ro',
|
|
54
|
-
'ru',
|
|
55
|
-
'sk',
|
|
56
|
-
'sl',
|
|
57
|
-
'sv',
|
|
58
|
-
'sw',
|
|
59
|
-
'th',
|
|
60
|
-
'tr',
|
|
61
|
-
'uk',
|
|
62
|
-
'ur',
|
|
63
|
-
'uz',
|
|
64
|
-
'vi',
|
|
65
|
-
'zh-CN',
|
|
66
|
-
'zh-TW',
|
|
67
|
-
];
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Use this function to determine which translations file you should load from `@prezly/themes-intl-mesages` package.
|
|
71
|
-
* See https://github.com/prezly/theme-nextjs-bea/blob/main/utils/lang.ts for a usage example.
|
|
72
|
-
*/
|
|
73
|
-
export function getSupportedLocaleIsoCode(locale: LocaleObject): string {
|
|
74
|
-
const localeIsoCode = locale.toHyphenCode();
|
|
75
|
-
|
|
76
|
-
const isSupportedLocale =
|
|
77
|
-
localeIsoCode.length >= 2 && SUPPORTED_LOCALES.includes(localeIsoCode);
|
|
78
|
-
if (isSupportedLocale) {
|
|
79
|
-
return localeIsoCode;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const language = locale.toNeutralLanguageCode();
|
|
83
|
-
const isSupportedLanguage = SUPPORTED_LOCALES.includes(language);
|
|
84
|
-
if (isSupportedLanguage) {
|
|
85
|
-
return language;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Custom mapping for Chinese locales
|
|
89
|
-
if (localeIsoCode.toLowerCase() === 'zh-hant') {
|
|
90
|
-
return 'zh-TW';
|
|
91
|
-
}
|
|
92
|
-
if (localeIsoCode.toLowerCase() === 'zh-hk') {
|
|
93
|
-
return 'zh-CN';
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// This code should never be reached, because locale code check is happening in `LocaleObject.fromAnyCode`
|
|
97
|
-
// eslint-disable-next-line no-console
|
|
98
|
-
console.warn(
|
|
99
|
-
'Unsupported locale provided. Please use `LocaleObject.fromAnyCode` to ensure you are using a correct language code',
|
|
100
|
-
);
|
|
101
|
-
return DEFAULT_LOCALE;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
9
|
export function getRedirectToCanonicalLocale(
|
|
105
10
|
shortestLocaleCode: string | false,
|
|
106
11
|
nextLocaleIsoCode: string | undefined,
|
|
@@ -132,13 +37,3 @@ export function getRedirectToCanonicalLocale(
|
|
|
132
37
|
|
|
133
38
|
return undefined;
|
|
134
39
|
}
|
|
135
|
-
|
|
136
|
-
export function getLocaleDirection(locale: LocaleObject): 'ltr' | 'rtl' {
|
|
137
|
-
const neutralLanguageCode = locale.toNeutralLanguageCode();
|
|
138
|
-
|
|
139
|
-
if (['ar', 'he', 'ur'].includes(neutralLanguageCode)) {
|
|
140
|
-
return 'rtl';
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
return 'ltr';
|
|
144
|
-
}
|
|
@@ -8,12 +8,11 @@ import type {
|
|
|
8
8
|
NewsroomThemePreset,
|
|
9
9
|
Notification,
|
|
10
10
|
} from '@prezly/sdk';
|
|
11
|
+
import type { AlgoliaSettings } from '@prezly/theme-kit-core';
|
|
12
|
+
import { DEFAULT_LOCALE, LocaleObject } from '@prezly/theme-kit-core';
|
|
11
13
|
import type { PropsWithChildren } from 'react';
|
|
12
14
|
import { createContext, useMemo } from 'react';
|
|
13
15
|
|
|
14
|
-
import type { AlgoliaSettings } from '../data-fetching';
|
|
15
|
-
import { DEFAULT_LOCALE, LocaleObject } from '../intl';
|
|
16
|
-
|
|
17
16
|
export interface NewsroomContextType {
|
|
18
17
|
/**
|
|
19
18
|
* Basic newsroom information: newsroom logos, settings, etc.
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { NewsroomLanguageSettings } from '@prezly/sdk';
|
|
2
|
+
import { getShortestLocaleCode, LocaleObject } from '@prezly/theme-kit-core';
|
|
2
3
|
import { useCallback } from 'react';
|
|
3
4
|
|
|
4
|
-
import { getShortestLocaleCode, LocaleObject } from '../../intl';
|
|
5
|
-
|
|
6
5
|
import { useCurrentLocale } from './useCurrentLocale';
|
|
7
6
|
import { useLanguages } from './useLanguages';
|
|
8
7
|
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import type { Category, ExtendedStory } from '@prezly/sdk';
|
|
2
2
|
import { Story } from '@prezly/sdk';
|
|
3
|
+
import type { LocaleObject } from '@prezly/theme-kit-core';
|
|
4
|
+
import { getCategoryHasTranslation, getCategoryUrl } from '@prezly/theme-kit-core';
|
|
3
5
|
import { useRouter } from 'next/router';
|
|
4
6
|
import { useCallback } from 'react';
|
|
5
7
|
|
|
6
|
-
import type { LocaleObject } from '../../intl';
|
|
7
|
-
import { getCategoryHasTranslation, getCategoryUrl } from '../../utils';
|
|
8
|
-
|
|
9
8
|
import { useCurrentCategory } from './useCurrentCategory';
|
|
10
9
|
import { useCurrentStory } from './useCurrentStory';
|
|
11
10
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { NewsroomContext, NewsroomContextProvider, NewsroomContextProps } from './context';
|
|
1
|
+
export { NewsroomContext, NewsroomContextProvider, type NewsroomContextProps } from './context';
|
|
2
2
|
export * from './hooks';
|