@asafarim/shared-i18n 0.8.0 → 0.9.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 +266 -280
- package/demo/README.md +119 -0
- package/demo/index.html +12 -1
- package/demo/node_modules/.bin/kill-port +17 -0
- package/demo/node_modules/.bin/tsc +5 -9
- package/demo/node_modules/.bin/tsserver +5 -9
- package/demo/node_modules/.bin/vite +5 -9
- package/demo/package.json +7 -4
- package/demo/public/404.html +24 -0
- package/demo/public/favicon.svg +4 -4
- package/demo/public/logo.svg +24 -24
- package/demo/src/App.tsx +178 -129
- package/demo/src/components/CountryLanguageSelectorsPage.tsx +240 -0
- package/demo/src/components/GetStartedSection.tsx +56 -56
- package/demo/src/components/KeyTable.tsx +29 -29
- package/demo/src/components/LanguageBar.tsx +145 -103
- package/demo/src/components/LanguageSwitcherDemo.module.css +114 -114
- package/demo/src/components/LanguageSwitchersPage.tsx +245 -0
- package/demo/src/components/Logo.tsx +6 -6
- package/demo/src/components/OverviewSection.tsx +58 -43
- package/demo/src/components/Panel.tsx +15 -15
- package/demo/src/components/RoutingLabPage.tsx +147 -0
- package/demo/src/components/StatusCard.tsx +109 -109
- package/demo/src/data/countries.ts +48 -0
- package/demo/src/i18n/localeAdapter.ts +91 -0
- package/demo/src/i18n/localeRouting.ts +77 -0
- package/demo/src/index.css +1075 -644
- package/demo/src/locales/de/demo.json +202 -84
- package/demo/src/locales/en/demo.json +201 -85
- package/demo/src/locales/fr/demo.json +203 -85
- package/demo/src/locales/it/demo.json +202 -84
- package/demo/src/locales/lb/demo.json +201 -0
- package/demo/src/locales/nl/demo.json +203 -85
- package/demo/src/main.tsx +32 -29
- package/demo/tsconfig.json +18 -18
- package/demo/tsconfig.node.json +10 -10
- package/demo/tsconfig.tsbuildinfo +1 -1
- package/demo/vite-env.d.ts +7 -7
- package/demo/vite.config.d.ts +2 -2
- package/demo/vite.config.js +10 -10
- package/dist/components/LanguageSwitcher.module.css +303 -303
- package/dist/country-language-selector.css +431 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +87 -85
- package/demo/dist/Icon Dropdown_Limited Languages.png +0 -0
- package/demo/dist/Select Dropdown_Text Only.png +0 -0
- package/demo/dist/assets/favicon-BZYZvBLo.svg +0 -4
- package/demo/dist/assets/index-BdjqKw_N.css +0 -1
- package/demo/dist/assets/index-C1Tq1uEr.js +0 -191
- package/demo/dist/favicon.svg +0 -4
- package/demo/dist/index.html +0 -27
- package/demo/dist/logo.svg +0 -24
- package/demo/node_modules/.bin/browserslist +0 -21
- package/demo/node_modules/.bin/browserslist.CMD +0 -12
- package/demo/node_modules/.bin/browserslist.ps1 +0 -41
- package/demo/node_modules/.bin/tsc.CMD +0 -12
- package/demo/node_modules/.bin/tsc.ps1 +0 -41
- package/demo/node_modules/.bin/tsserver.CMD +0 -12
- package/demo/node_modules/.bin/tsserver.ps1 +0 -41
- package/demo/node_modules/.bin/vite.CMD +0 -12
- package/demo/node_modules/.bin/vite.ps1 +0 -41
- package/demo/node_modules/.vite/deps/@asafarim_country-language-selector.js +0 -848
- package/demo/node_modules/.vite/deps/@asafarim_country-language-selector.js.map +0 -7
- package/demo/node_modules/.vite/deps/_metadata.json +0 -76
- package/demo/node_modules/.vite/deps/chunk-5WRI5ZAA.js +0 -30
- package/demo/node_modules/.vite/deps/chunk-5WRI5ZAA.js.map +0 -7
- package/demo/node_modules/.vite/deps/chunk-B3AHR5EX.js +0 -1004
- package/demo/node_modules/.vite/deps/chunk-B3AHR5EX.js.map +0 -7
- package/demo/node_modules/.vite/deps/chunk-E6BG6WAU.js +0 -292
- package/demo/node_modules/.vite/deps/chunk-E6BG6WAU.js.map +0 -7
- package/demo/node_modules/.vite/deps/chunk-MVARZQEG.js +0 -280
- package/demo/node_modules/.vite/deps/chunk-MVARZQEG.js.map +0 -7
- package/demo/node_modules/.vite/deps/i18next-browser-languagedetector.js +0 -400
- package/demo/node_modules/.vite/deps/i18next-browser-languagedetector.js.map +0 -7
- package/demo/node_modules/.vite/deps/i18next.js +0 -2392
- package/demo/node_modules/.vite/deps/i18next.js.map +0 -7
- package/demo/node_modules/.vite/deps/package.json +0 -3
- package/demo/node_modules/.vite/deps/react-dom.js +0 -6
- package/demo/node_modules/.vite/deps/react-dom.js.map +0 -7
- package/demo/node_modules/.vite/deps/react-dom_client.js +0 -20217
- package/demo/node_modules/.vite/deps/react-dom_client.js.map +0 -7
- package/demo/node_modules/.vite/deps/react-i18next.js +0 -869
- package/demo/node_modules/.vite/deps/react-i18next.js.map +0 -7
- package/demo/node_modules/.vite/deps/react.js +0 -5
- package/demo/node_modules/.vite/deps/react.js.map +0 -7
- package/demo/node_modules/.vite/deps/react_jsx-dev-runtime.js +0 -278
- package/demo/node_modules/.vite/deps/react_jsx-dev-runtime.js.map +0 -7
- package/demo/node_modules/.vite/deps/react_jsx-runtime.js +0 -6
- package/demo/node_modules/.vite/deps/react_jsx-runtime.js.map +0 -7
- package/demo/src/components/CountryLanguageDemo.tsx +0 -140
- package/demo/src/components/LanguageSwitcherDemo.tsx +0 -256
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { useState } from 'react'
|
|
2
|
-
import type { ReactNode } from 'react'
|
|
3
|
-
import { CountryLanguageSelector } from '@asafarim/country-language-selector'
|
|
4
|
-
import styles from './LanguageSwitcherDemo.module.css'
|
|
5
|
-
|
|
6
|
-
interface DemoItemProps {
|
|
7
|
-
title: string
|
|
8
|
-
description: string
|
|
9
|
-
code: string
|
|
10
|
-
children: ReactNode
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
function DemoItem({ title, description, code, children }: DemoItemProps) {
|
|
14
|
-
return (
|
|
15
|
-
<div className={styles.demoItem}>
|
|
16
|
-
<div className={styles.demoHeader}>
|
|
17
|
-
<h4 className={styles.demoTitle}>{title}</h4>
|
|
18
|
-
<p className={styles.demoDescription}>{description}</p>
|
|
19
|
-
</div>
|
|
20
|
-
<div className={styles.demoContent}>
|
|
21
|
-
<div className={styles.demoPreview}>
|
|
22
|
-
<div className={styles.previewLabel}>Preview</div>
|
|
23
|
-
{children}
|
|
24
|
-
</div>
|
|
25
|
-
<div className={styles.demoCode}>
|
|
26
|
-
<div className={styles.codeLabel}>Code</div>
|
|
27
|
-
<pre className={styles.codeBlock}>{code}</pre>
|
|
28
|
-
</div>
|
|
29
|
-
</div>
|
|
30
|
-
</div>
|
|
31
|
-
)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const countries = [
|
|
35
|
-
{
|
|
36
|
-
code: 'BE',
|
|
37
|
-
name: 'Belgium',
|
|
38
|
-
nativeName: 'België',
|
|
39
|
-
flag: '🇧🇪',
|
|
40
|
-
languages: [
|
|
41
|
-
{ code: 'nl', label: 'Dutch', nativeLabel: 'Nederlands' },
|
|
42
|
-
{ code: 'fr', label: 'French', nativeLabel: 'Français' },
|
|
43
|
-
{ code: 'de', label: 'German', nativeLabel: 'Deutsch' }
|
|
44
|
-
]
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
code: 'CH',
|
|
48
|
-
name: 'Switzerland',
|
|
49
|
-
nativeName: 'Schweiz',
|
|
50
|
-
flag: '🇨🇭',
|
|
51
|
-
languages: [
|
|
52
|
-
{ code: 'de', label: 'German', nativeLabel: 'Deutsch' },
|
|
53
|
-
{ code: 'fr', label: 'French', nativeLabel: 'Français' },
|
|
54
|
-
{ code: 'it', label: 'Italian', nativeLabel: 'Italiano' },
|
|
55
|
-
{ code: 'rm', label: 'Romansh', nativeLabel: 'Rumantsch' }
|
|
56
|
-
]
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
code: 'CA',
|
|
60
|
-
name: 'Canada',
|
|
61
|
-
nativeName: 'Canada',
|
|
62
|
-
flag: '🇨🇦',
|
|
63
|
-
languages: [
|
|
64
|
-
{ code: 'en', label: 'English' },
|
|
65
|
-
{ code: 'fr', label: 'French', nativeLabel: 'Français' }
|
|
66
|
-
]
|
|
67
|
-
}
|
|
68
|
-
]
|
|
69
|
-
|
|
70
|
-
export default function CountryLanguageDemo() {
|
|
71
|
-
const [selectedLocale, setSelectedLocale] = useState({ country: 'BE', language: 'nl' })
|
|
72
|
-
const [customLocale, setCustomLocale] = useState({ country: 'CH', language: 'it' })
|
|
73
|
-
|
|
74
|
-
return (
|
|
75
|
-
<div className={styles.container}>
|
|
76
|
-
<DemoItem
|
|
77
|
-
title="Default Selector"
|
|
78
|
-
description="A standard country-language selector with compact trigger mode and persistence."
|
|
79
|
-
code={`<CountryLanguageSelector
|
|
80
|
-
countries={countries}
|
|
81
|
-
defaultValue={{ country: 'BE', language: 'nl' }}
|
|
82
|
-
persistKey="country-locale"
|
|
83
|
-
/>`}
|
|
84
|
-
>
|
|
85
|
-
<CountryLanguageSelector
|
|
86
|
-
countries={countries}
|
|
87
|
-
defaultValue={{ country: 'BE', language: 'nl' }}
|
|
88
|
-
persistKey="country-locale"
|
|
89
|
-
onChange={(locale) => setSelectedLocale(locale)}
|
|
90
|
-
/>
|
|
91
|
-
<p style={{ marginTop: '1rem' }}>
|
|
92
|
-
Selected locale: <strong>{selectedLocale.country}</strong> / <strong>{selectedLocale.language}</strong>
|
|
93
|
-
</p>
|
|
94
|
-
</DemoItem>
|
|
95
|
-
|
|
96
|
-
<DemoItem
|
|
97
|
-
title="Full Trigger Variant"
|
|
98
|
-
description="Render the current selection using full country and language names."
|
|
99
|
-
code={`<CountryLanguageSelector
|
|
100
|
-
countries={countries}
|
|
101
|
-
defaultValue={{ country: 'CA', language: 'fr' }}
|
|
102
|
-
triggerVariant="full"
|
|
103
|
-
/>`}
|
|
104
|
-
>
|
|
105
|
-
<CountryLanguageSelector
|
|
106
|
-
countries={countries}
|
|
107
|
-
defaultValue={{ country: 'CA', language: 'fr' }}
|
|
108
|
-
triggerVariant="full"
|
|
109
|
-
onChange={(locale) => setSelectedLocale(locale)}
|
|
110
|
-
/>
|
|
111
|
-
</DemoItem>
|
|
112
|
-
|
|
113
|
-
<DemoItem
|
|
114
|
-
title="Custom Trigger"
|
|
115
|
-
description="Use a custom trigger renderer to show selected country and language in your own button style."
|
|
116
|
-
code={`<CountryLanguageSelector
|
|
117
|
-
countries={countries}
|
|
118
|
-
defaultValue={{ country: 'CH', language: 'it' }}
|
|
119
|
-
renderTrigger={({ country, language, open }) => (
|
|
120
|
-
<button>{open ? 'Close' : 'Open'} {country.code} · {language.code}</button>
|
|
121
|
-
)}
|
|
122
|
-
/>`}
|
|
123
|
-
>
|
|
124
|
-
<CountryLanguageSelector
|
|
125
|
-
countries={countries}
|
|
126
|
-
defaultValue={{ country: 'CH', language: 'it' }}
|
|
127
|
-
renderTrigger={({ country, language, open }) => (
|
|
128
|
-
<button type="button" style={{ padding: '0.75rem 1rem', borderRadius: 8, border: '1px solid #ccc', background: open ? '#f0f4ff' : '#fff' }}>
|
|
129
|
-
{open ? 'Close' : 'Open'} {country.flag} {country.name} · {language.nativeLabel ?? language.label}
|
|
130
|
-
</button>
|
|
131
|
-
)}
|
|
132
|
-
onChange={(locale) => setCustomLocale(locale)}
|
|
133
|
-
/>
|
|
134
|
-
<p style={{ marginTop: '1rem' }}>
|
|
135
|
-
Custom trigger locale: <strong>{customLocale.country}</strong> / <strong>{customLocale.language}</strong>
|
|
136
|
-
</p>
|
|
137
|
-
</DemoItem>
|
|
138
|
-
</div>
|
|
139
|
-
)
|
|
140
|
-
}
|
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
import { LanguageSwitcher } from '@asafarim/shared-i18n'
|
|
2
|
-
import { CountryLanguageSelector } from '@asafarim/country-language-selector'
|
|
3
|
-
import styles from './LanguageSwitcherDemo.module.css'
|
|
4
|
-
|
|
5
|
-
interface DemoItemProps {
|
|
6
|
-
title: string
|
|
7
|
-
description: string
|
|
8
|
-
code: string
|
|
9
|
-
children: React.ReactNode
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function DemoItem({ title, description, code, children }: DemoItemProps) {
|
|
13
|
-
return (
|
|
14
|
-
<div className={styles.demoItem}>
|
|
15
|
-
<div className={styles.demoHeader}>
|
|
16
|
-
<h4 className={styles.demoTitle}>{title}</h4>
|
|
17
|
-
<p className={styles.demoDescription}>{description}</p>
|
|
18
|
-
</div>
|
|
19
|
-
<div className={styles.demoContent}>
|
|
20
|
-
<div className={styles.demoPreview}>
|
|
21
|
-
<div className={styles.previewLabel}>Preview</div>
|
|
22
|
-
{children}
|
|
23
|
-
</div>
|
|
24
|
-
<div className={styles.demoCode}>
|
|
25
|
-
<div className={styles.codeLabel}>Code</div>
|
|
26
|
-
<pre className={styles.codeBlock}>{code}</pre>
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
29
|
-
</div>
|
|
30
|
-
)
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export default function LanguageSwitcherDemo() {
|
|
34
|
-
const countries = [
|
|
35
|
-
{
|
|
36
|
-
code: 'BE',
|
|
37
|
-
name: 'Belgium',
|
|
38
|
-
nativeName: 'België',
|
|
39
|
-
flag: '🇧🇪',
|
|
40
|
-
languages: [
|
|
41
|
-
{ code: 'nl', label: 'Dutch', nativeLabel: 'Nederlands' },
|
|
42
|
-
{ code: 'fr', label: 'French', nativeLabel: 'Français' },
|
|
43
|
-
{ code: 'de', label: 'German', nativeLabel: 'Deutsch' }
|
|
44
|
-
]
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
code: 'CH',
|
|
48
|
-
name: 'Switzerland',
|
|
49
|
-
nativeName: 'Schweiz',
|
|
50
|
-
flag: '🇨🇭',
|
|
51
|
-
languages: [
|
|
52
|
-
{ code: 'de', label: 'German', nativeLabel: 'Deutsch' },
|
|
53
|
-
{ code: 'fr', label: 'French', nativeLabel: 'Français' },
|
|
54
|
-
{ code: 'it', label: 'Italian', nativeLabel: 'Italiano' },
|
|
55
|
-
{ code: 'rm', label: 'Romansh', nativeLabel: 'Rumantsch' }
|
|
56
|
-
]
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
code: 'CA',
|
|
60
|
-
name: 'Canada',
|
|
61
|
-
nativeName: 'Canada',
|
|
62
|
-
flag: '🇨🇦',
|
|
63
|
-
languages: [
|
|
64
|
-
{ code: 'en', label: 'English' },
|
|
65
|
-
{ code: 'fr', label: 'French', nativeLabel: 'Français' }
|
|
66
|
-
]
|
|
67
|
-
}
|
|
68
|
-
]
|
|
69
|
-
|
|
70
|
-
return (
|
|
71
|
-
<div className={styles.container}>
|
|
72
|
-
<DemoItem
|
|
73
|
-
title="Buttons Variant"
|
|
74
|
-
description="Display all languages as individual button options"
|
|
75
|
-
code={`<LanguageSwitcher
|
|
76
|
-
variant="buttons"
|
|
77
|
-
buttonClassName="lang-button"
|
|
78
|
-
unstyled={false}
|
|
79
|
-
/>`}
|
|
80
|
-
>
|
|
81
|
-
<LanguageSwitcher
|
|
82
|
-
variant="buttons"
|
|
83
|
-
buttonClassName="lang-button"
|
|
84
|
-
unstyled={false}
|
|
85
|
-
/>
|
|
86
|
-
</DemoItem>
|
|
87
|
-
|
|
88
|
-
<DemoItem
|
|
89
|
-
title="Select Dropdown - Text Only"
|
|
90
|
-
description="Dropdown with language names, no emojis"
|
|
91
|
-
code={`<LanguageSwitcher
|
|
92
|
-
variant="select"
|
|
93
|
-
selectClassName="lang-select"
|
|
94
|
-
unstyled={false}
|
|
95
|
-
showEmoji={false}
|
|
96
|
-
/>`}
|
|
97
|
-
>
|
|
98
|
-
<LanguageSwitcher
|
|
99
|
-
variant="select"
|
|
100
|
-
unstyled={true}
|
|
101
|
-
showEmoji={false}
|
|
102
|
-
showLabel={true}
|
|
103
|
-
/>
|
|
104
|
-
</DemoItem>
|
|
105
|
-
|
|
106
|
-
<DemoItem
|
|
107
|
-
title="Select Dropdown - Emoji Only (2 Languages)"
|
|
108
|
-
description="Compact dropdown showing only emojis for language selection"
|
|
109
|
-
code={`<LanguageSwitcher
|
|
110
|
-
variant="select"
|
|
111
|
-
selectClassName="lang-select"
|
|
112
|
-
unstyled={true}
|
|
113
|
-
showEmoji={true}
|
|
114
|
-
languages={['en', 'nl']}
|
|
115
|
-
isToggler={false}
|
|
116
|
-
/>`}
|
|
117
|
-
>
|
|
118
|
-
<LanguageSwitcher
|
|
119
|
-
variant="select"
|
|
120
|
-
selectClassName="lang-select"
|
|
121
|
-
unstyled={true}
|
|
122
|
-
showEmoji={true}
|
|
123
|
-
languages={['en', 'nl']}
|
|
124
|
-
isToggler={false}
|
|
125
|
-
/>
|
|
126
|
-
</DemoItem>
|
|
127
|
-
|
|
128
|
-
<DemoItem
|
|
129
|
-
title="Toggle Button (2 Languages)"
|
|
130
|
-
description="Automatic toggle button when exactly 2 languages are provided"
|
|
131
|
-
code={`<LanguageSwitcher
|
|
132
|
-
variant="select"
|
|
133
|
-
selectClassName="lang-select"
|
|
134
|
-
unstyled={true}
|
|
135
|
-
showEmoji={true}
|
|
136
|
-
languages={['en', 'nl']}
|
|
137
|
-
isToggler={true}
|
|
138
|
-
/>`}
|
|
139
|
-
>
|
|
140
|
-
<LanguageSwitcher
|
|
141
|
-
variant="select"
|
|
142
|
-
selectClassName="lang-select"
|
|
143
|
-
unstyled={true}
|
|
144
|
-
showEmoji={true}
|
|
145
|
-
languages={['en', 'nl']}
|
|
146
|
-
isToggler={true}
|
|
147
|
-
/>
|
|
148
|
-
</DemoItem>
|
|
149
|
-
|
|
150
|
-
<DemoItem
|
|
151
|
-
title="Icon Dropdown"
|
|
152
|
-
description="Minimal icon-based dropdown for all languages"
|
|
153
|
-
code={`<LanguageSwitcher
|
|
154
|
-
variant="icon-dropdown"
|
|
155
|
-
unstyled={false}
|
|
156
|
-
/>`}
|
|
157
|
-
>
|
|
158
|
-
<LanguageSwitcher
|
|
159
|
-
variant="icon-dropdown"
|
|
160
|
-
unstyled={false}
|
|
161
|
-
/>
|
|
162
|
-
</DemoItem>
|
|
163
|
-
|
|
164
|
-
<DemoItem
|
|
165
|
-
title="Icon Dropdown - Limited Languages"
|
|
166
|
-
description="Icon dropdown restricted to specific languages"
|
|
167
|
-
code={`<LanguageSwitcher
|
|
168
|
-
variant="icon-dropdown"
|
|
169
|
-
languages={['en', 'nl']}
|
|
170
|
-
unstyled={false}
|
|
171
|
-
/>`}
|
|
172
|
-
>
|
|
173
|
-
<LanguageSwitcher
|
|
174
|
-
variant="icon-dropdown"
|
|
175
|
-
languages={['en', 'nl']}
|
|
176
|
-
unstyled={false}
|
|
177
|
-
/>
|
|
178
|
-
</DemoItem>
|
|
179
|
-
|
|
180
|
-
<DemoItem
|
|
181
|
-
title="Icon Dropdown - Limited Languages with Labels"
|
|
182
|
-
description="Icon dropdown with language names displayed next to flags"
|
|
183
|
-
code={`<LanguageSwitcher
|
|
184
|
-
variant="icon-dropdown"
|
|
185
|
-
languages={['en', 'nl']}
|
|
186
|
-
unstyled={false}
|
|
187
|
-
showLabelInIconDropdown={true}
|
|
188
|
-
/>`}
|
|
189
|
-
>
|
|
190
|
-
<LanguageSwitcher
|
|
191
|
-
variant="icon-dropdown"
|
|
192
|
-
languages={['en', 'nl']}
|
|
193
|
-
unstyled={false}
|
|
194
|
-
showLabelInIconDropdown={true}
|
|
195
|
-
/>
|
|
196
|
-
</DemoItem>
|
|
197
|
-
|
|
198
|
-
<DemoItem
|
|
199
|
-
title="Select Dropdown - Text Only (2 Languages)"
|
|
200
|
-
description="Standard dropdown with text labels for 2 languages"
|
|
201
|
-
code={`<LanguageSwitcher
|
|
202
|
-
variant="select"
|
|
203
|
-
selectClassName="lang-select"
|
|
204
|
-
unstyled={false}
|
|
205
|
-
showEmoji={false}
|
|
206
|
-
languages={['en', 'nl']}
|
|
207
|
-
isToggler={false}
|
|
208
|
-
/>`}
|
|
209
|
-
>
|
|
210
|
-
<LanguageSwitcher
|
|
211
|
-
variant="select"
|
|
212
|
-
selectClassName="lang-select"
|
|
213
|
-
unstyled={false}
|
|
214
|
-
showEmoji={false}
|
|
215
|
-
languages={['en', 'nl']}
|
|
216
|
-
isToggler={false}
|
|
217
|
-
/>
|
|
218
|
-
</DemoItem>
|
|
219
|
-
|
|
220
|
-
<DemoItem
|
|
221
|
-
title="Buttons Variant - Limited Languages"
|
|
222
|
-
description="Button variant restricted to specific languages"
|
|
223
|
-
code={`<LanguageSwitcher
|
|
224
|
-
variant="buttons"
|
|
225
|
-
buttonClassName="lang-button"
|
|
226
|
-
unstyled={false}
|
|
227
|
-
languages={['en', 'nl']}
|
|
228
|
-
/>`}
|
|
229
|
-
>
|
|
230
|
-
<LanguageSwitcher
|
|
231
|
-
variant="buttons"
|
|
232
|
-
buttonClassName="lang-button"
|
|
233
|
-
unstyled={false}
|
|
234
|
-
languages={['en', 'nl']}
|
|
235
|
-
/>
|
|
236
|
-
</DemoItem>
|
|
237
|
-
|
|
238
|
-
<DemoItem
|
|
239
|
-
title="Country-Language Selector (Header)"
|
|
240
|
-
description="The header now uses CountryLanguageSelector for Belgium, Switzerland, and Canada with their official languages"
|
|
241
|
-
code={`<CountryLanguageSelector
|
|
242
|
-
countries={countries}
|
|
243
|
-
defaultValue={{ country: 'BE', language: 'nl' }}
|
|
244
|
-
persistKey="demo-locale"
|
|
245
|
-
triggerVariant="compact"
|
|
246
|
-
onChange={(locale) => i18n.changeLanguage(locale.language)}
|
|
247
|
-
/>`}
|
|
248
|
-
>
|
|
249
|
-
<div style={{ padding: '1rem', border: '1px solid #ccc', borderRadius: '4px' }}>
|
|
250
|
-
<p>The country-language selector is now in the header above.</p>
|
|
251
|
-
<p>Try selecting different countries and languages to see the interface change!</p>
|
|
252
|
-
</div>
|
|
253
|
-
</DemoItem>
|
|
254
|
-
</div>
|
|
255
|
-
)
|
|
256
|
-
}
|