imba-localization 0.4.7 → 0.4.9
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/localization.imba +92 -23
- package/package.json +1 -1
package/localization.imba
CHANGED
|
@@ -1,3 +1,67 @@
|
|
|
1
|
+
# Emoji flags mapping - comprehensive list by region
|
|
2
|
+
export const flags = {
|
|
3
|
+
# Europe
|
|
4
|
+
'gb': '🇬🇧', 'us': '🇺🇸', 'ru': '🇷🇺', 'de': '🇩🇪', 'fr': '🇫🇷',
|
|
5
|
+
'es': '🇪🇸', 'it': '🇮🇹', 'nl': '🇳🇱', 'pl': '🇵🇱', 'ua': '🇺🇦',
|
|
6
|
+
'cz': '🇨🇿', 'gr': '🇬🇷', 'hu': '🇭🇺', 'ro': '🇷🇴', 'se': '🇸🇪',
|
|
7
|
+
'no': '🇳🇴', 'dk': '🇩🇰', 'fi': '🇫🇮', 'pt': '🇵🇹', 'ie': '🇮🇪',
|
|
8
|
+
'be': '🇧🇪', 'at': '🇦🇹', 'ch': '🇨🇭', 'sk': '🇸🇰', 'bg': '🇧🇬',
|
|
9
|
+
'hr': '🇭🇷', 'rs': '🇷🇸', 'si': '🇸🇮', 'lt': '🇱🇹', 'lv': '🇱🇻',
|
|
10
|
+
'ee': '🇪🇪', 'is': '🇮🇸', 'lu': '🇱🇺', 'mt': '🇲🇹', 'cy': '🇨🇾',
|
|
11
|
+
'ba': '🇧🇦', 'mk': '🇲🇰', 'al': '🇦🇱', 'md': '🇲🇩', 'me': '🇲🇪',
|
|
12
|
+
'by': '🇧🇾', 'ru': '🇷🇺', 'ge': '🇬🇪', 'am': '🇦🇲', 'az': '🇦🇿',
|
|
13
|
+
|
|
14
|
+
# Asia
|
|
15
|
+
'cn': '🇨🇳', 'jp': '🇯🇵', 'kr': '🇰🇷', 'in': '🇮🇳', 'id': '🇮🇩',
|
|
16
|
+
'th': '🇹🇭', 'vn': '🇻🇳', 'ph': '🇵🇭', 'sg': '🇸🇬', 'my': '🇲🇾',
|
|
17
|
+
'hk': '🇭🇰', 'tw': '🇹🇼', 'pk': '🇵🇰', 'bd': '🇧🇩', 'lk': '🇱🇰',
|
|
18
|
+
'kh': '🇰🇭', 'la': '🇱🇦', 'mm': '🇲🇲', 'bn': '🇧🇳', 'mo': '🇲🇴',
|
|
19
|
+
'mn': '🇲🇳', 'np': '🇳🇵', 'bt': '🇧🇹', 'mv': '🇲🇻', 'kz': '🇰🇿',
|
|
20
|
+
'uz': '🇺🇿', 'tm': '🇹🇲', 'kg': '🇰🇬', 'tj': '🇹🇯', 'af': '🇦🇫',
|
|
21
|
+
|
|
22
|
+
# Middle East
|
|
23
|
+
'tr': '🇹🇷', 'il': '🇮🇱', 'ae': '🇦🇪', 'sa': '🇸🇦', 'qa': '🇶🇦',
|
|
24
|
+
'kw': '🇰🇼', 'bh': '🇧🇭', 'om': '🇴🇲', 'jo': '🇯🇴', 'lb': '🇱🇧',
|
|
25
|
+
'iq': '🇮🇶', 'ir': '🇮🇷', 'sy': '🇸🇾', 'ye': '🇾🇪', 'ps': '🇵🇸',
|
|
26
|
+
|
|
27
|
+
# Americas
|
|
28
|
+
'br': '🇧🇷', 'mx': '🇲🇽', 'ca': '🇨🇦', 'ar': '🇦🇷', 'cl': '🇨🇱',
|
|
29
|
+
'co': '🇨🇴', 'pe': '🇵🇪', 've': '🇻🇪', 'ec': '🇪🇨', 'uy': '🇺🇾',
|
|
30
|
+
'py': '🇵🇾', 'bo': '🇧🇴', 'cr': '🇨🇷', 'pa': '🇵🇦', 'gt': '🇬🇹',
|
|
31
|
+
'cu': '🇨🇺', 'do': '🇩🇴', 'hn': '🇭🇳', 'sv': '🇸🇻', 'ni': '🇳🇮',
|
|
32
|
+
'jm': '🇯🇲', 'tt': '🇹🇹', 'bs': '🇧🇸', 'bb': '🇧🇧', 'pr': '🇵🇷',
|
|
33
|
+
|
|
34
|
+
# Africa
|
|
35
|
+
'za': '🇿🇦', 'eg': '🇪🇬', 'ng': '🇳🇬', 'ke': '🇰🇪', 'gh': '🇬🇭',
|
|
36
|
+
'ma': '🇲🇦', 'dz': '🇩🇿', 'tn': '🇹🇳', 'et': '🇪🇹', 'tz': '🇹🇿',
|
|
37
|
+
'ug': '🇺🇬', 'zw': '🇿🇼', 'ao': '🇦🇴', 'cm': '🇨🇲', 'ci': '🇨🇮',
|
|
38
|
+
'cd': '🇨🇩', 'sn': '🇸🇳', 'ml': '🇲🇱', 'bf': '🇧🇫', 'ne': '🇳🇪',
|
|
39
|
+
'tg': '🇹🇬', 'bw': '🇧🇼', 'na': '🇳🇦', 'mz': '🇲🇿', 'mg': '🇲🇬',
|
|
40
|
+
|
|
41
|
+
# Oceania
|
|
42
|
+
'au': '🇦🇺', 'nz': '🇳🇿', 'fj': '🇫🇯', 'pg': '🇵🇬', 'ws': '🇼🇸',
|
|
43
|
+
'to': '🇹🇴', 'vu': '🇻🇺', 'sb': '🇸🇧', 'nc': '🇳🇨', 'pf': '🇵🇫',
|
|
44
|
+
'gu': '🇬🇺', 'as': '🇦🇸', 'ck': '🇨🇰', 'nu': '🇳🇺', 'tk': '🇹🇰',
|
|
45
|
+
|
|
46
|
+
# Caribbean & Atlantic
|
|
47
|
+
'bm': '🇧🇲', 'ky': '🇰🇾', 'vi': '🇻🇮', 'ag': '🇦🇬', 'dm': '🇩🇲',
|
|
48
|
+
'gd': '🇬🇩', 'kn': '🇰🇳', 'lc': '🇱🇨', 'vc': '🇻🇨', 'ai': '🇦🇮',
|
|
49
|
+
'ms': '🇲🇸', 'gp': '🇬🇵', 'mq': '🇲🇶', 'gf': '🇬🇫', 'aw': '🇦🇼',
|
|
50
|
+
'cw': '🇨🇼', 'sx': '🇸🇽', 'bq': '🇧🇶', 'tc': '🇹🇨', 'vg': '🇻🇬',
|
|
51
|
+
|
|
52
|
+
# Indian Ocean
|
|
53
|
+
'mu': '🇲🇺', 'sc': '🇸🇨', 're': '🇷🇪', 'yt': '🇾🇹', 'km': '🇰🇲',
|
|
54
|
+
'mv': '🇲🇻', 'io': '🇮🇴', 'cx': '🇨🇽', 'cc': '🇨🇨', 'hm': '🇭🇲',
|
|
55
|
+
|
|
56
|
+
# Arctic & Antarctic
|
|
57
|
+
'gl': '🇬🇱', 'fo': '🇫🇴', 'sj': '🇸🇯', 'ax': '🇦🇽', 'tf': '🇹🇫',
|
|
58
|
+
'bv': '🇧🇻', 'gs': '🇬🇸', 'aq': '🇦🇶', 'tf': '🇹🇫',
|
|
59
|
+
|
|
60
|
+
# Special territories
|
|
61
|
+
'eu': '🇪🇺', 'un': '🇺🇳', 'ac': '🇦🇨', 'ta': '🇹🇦', 'cp': '🇨🇵',
|
|
62
|
+
'dg': '🇩🇬', 'ea': '🇪🇦', 'ic': '🇮🇨', 'xk': '🇽🇰'
|
|
63
|
+
}
|
|
64
|
+
|
|
1
65
|
export class Localization
|
|
2
66
|
onready
|
|
3
67
|
onerror
|
|
@@ -67,13 +131,10 @@ export const path-arrow-down = <path d="M213.66,165.66a8,8,0,0,1-11.32,0L128,91.
|
|
|
67
131
|
|
|
68
132
|
tag language-selector
|
|
69
133
|
state
|
|
70
|
-
icons = "https://kapowaz.github.io/square-flags/flags/##.svg"
|
|
71
134
|
#dropdown = false
|
|
72
135
|
arrow = path-arrow-down
|
|
73
136
|
passive = false
|
|
74
|
-
|
|
75
|
-
def setup
|
|
76
|
-
data = state.active
|
|
137
|
+
first = true # Show selected language first in dropdown
|
|
77
138
|
|
|
78
139
|
def onselect key
|
|
79
140
|
#dropdown = false
|
|
@@ -83,12 +144,13 @@ tag language-selector
|
|
|
83
144
|
const settings = language.$
|
|
84
145
|
if !settings
|
|
85
146
|
state.err.throw('localization-no-key', '$')
|
|
86
|
-
return
|
|
147
|
+
return '🌐'
|
|
87
148
|
const flag = settings.flag
|
|
88
149
|
if !flag
|
|
89
150
|
state.err.throw('localization-no-key', '$.flag')
|
|
90
|
-
return
|
|
91
|
-
|
|
151
|
+
return '🌐'
|
|
152
|
+
# Return emoji flag
|
|
153
|
+
return flags[flag] || '🌐'
|
|
92
154
|
|
|
93
155
|
def name language
|
|
94
156
|
const settings = language.$
|
|
@@ -116,30 +178,37 @@ tag language-selector
|
|
|
116
178
|
return if !passive
|
|
117
179
|
#dropdown = !#dropdown
|
|
118
180
|
|
|
119
|
-
css
|
|
181
|
+
css
|
|
120
182
|
$ease: 0.5s
|
|
121
183
|
.container rd:8px px:15px py:8px bgc:light-dark(#000000/10, #FFFFFF/20) fw:500 fs:13px ead:$ease bd:1px solid transparent
|
|
122
184
|
@.active bgc:light-dark(#000000/20, #FFFFFF/30) bd:1px solid transparent
|
|
123
|
-
.flag mr:10px
|
|
185
|
+
.flag mr:10px fs:20px lh:20px bd:1px solid transparent
|
|
124
186
|
.name mr:10px bd:1px solid transparent
|
|
125
187
|
.arrow w:16px h:16px fill:light-dark(#000000,#FFFFFF) ml:auto scale-y:-1 bd:1px solid transparent
|
|
126
188
|
@.active scale-y:1 bd:1px solid transparent
|
|
127
189
|
.menu t:100% l:50% x:-50% zi:999 backdrop-filter:blur(20px) mt:2px rd:8px rd:8px py:5px bgc:light-dark(#000000/5, #FFFFFF/10) fw:500 fs:13px ead:$ease bd:1px solid transparent
|
|
128
190
|
.item d:hflex ai:center px:10px py:5px rd:8px cursor:pointer bg@hover:light-dark(#000000/10, #FFFFFF/20) m:5px bd:1px solid transparent
|
|
129
|
-
.icon
|
|
191
|
+
.icon mr:10px fs:20px lh:20px bd:1px solid transparent
|
|
130
192
|
.text fs:13px bd:1px solid transparent
|
|
131
193
|
|
|
132
194
|
<self [pos:rel] @mouseenter=mouseenter @mouseleave=mouseleave @click=click>
|
|
133
|
-
|
|
134
|
-
<
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
<
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
<
|
|
195
|
+
<global @click.outside=(do #dropdown = false)>
|
|
196
|
+
<div.container [pos:rel d:hcc] .active=#dropdown [cursor:pointer]=(Object.keys(state.languages).length > 1)>
|
|
197
|
+
<span.flag> flag(state.languages[data])
|
|
198
|
+
<div.name> name(state.languages[data])
|
|
199
|
+
if Object.keys(state.languages).length > 1
|
|
200
|
+
<svg.arrow [ead:$ease] .active=#dropdown viewBox="0 0 256 256">
|
|
201
|
+
<{arrow}>
|
|
202
|
+
|
|
203
|
+
if #dropdown and Object.keys(state.languages).length > 1
|
|
204
|
+
<div$menu.menu [pos:abs w:100% > max-content o@off:0] ease>
|
|
205
|
+
# Current language first (if first is true)
|
|
206
|
+
if first
|
|
207
|
+
<div.item>
|
|
208
|
+
<span.icon> flag(state.languages[data])
|
|
209
|
+
<span.text> name(state.languages[data])
|
|
210
|
+
# Other languages
|
|
211
|
+
for own key, value of state.languages
|
|
212
|
+
<div.item @click.trap=onselect(key) [d:none]=(key == data && first)>
|
|
213
|
+
<span.icon> flag(value)
|
|
214
|
+
<span.text> name(value)
|