Skip to content

Commit 4ce2392

Browse files
committed
Expand multilingual support to SaaS locales
1 parent 9902f23 commit 4ce2392

10 files changed

Lines changed: 640 additions & 43 deletions

File tree

README.md

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,36 @@ Current first-class language coverage:
2727

2828
- English
2929
- Spanish
30-
- Portuguese
3130
- German
31+
- Japanese
3232
- French
33+
- Portuguese
34+
- Russian
3335
- Italian
3436
- Dutch
35-
- Swedish
36-
- Danish
37-
- Norwegian
3837
- Polish
39-
- Russian
40-
- Hindi
41-
- Indonesian
4238
- Turkish
43-
- Arabic
44-
- Japanese
45-
- Korean
4639
- Chinese (Simplified)
4740
- Chinese (Traditional)
41+
- Persian
42+
- Vietnamese
43+
- Czech
44+
- Indonesian
45+
- Korean
46+
- Ukrainian
47+
- Hungarian
48+
- Arabic
49+
- Swedish
50+
- Romanian
51+
- Greek
52+
- Danish
53+
- Finnish
54+
- Hebrew
55+
- Slovak
56+
- Thai
57+
- Bulgarian
58+
- Norwegian Bokmål
59+
- Hindi
4860

4961
## Installation
5062

src/extraction/embeddings/index.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,10 @@ describe('Embeddings Module', () => {
453453
expect(DEFAULT_ACTIVITY_QUERIES.some((q) => q.includes('deberíamos'))).toBe(true)
454454
expect(DEFAULT_ACTIVITY_QUERIES.some((q) => q.includes('行ってみたい'))).toBe(true)
455455
expect(DEFAULT_ACTIVITY_QUERIES.some((q) => q.includes('我們應該'))).toBe(true)
456+
expect(DEFAULT_ACTIVITY_QUERIES.some((q) => q.includes('باید برویم'))).toBe(true)
457+
expect(DEFAULT_ACTIVITY_QUERIES.some((q) => q.includes('chúng ta nên'))).toBe(true)
458+
expect(DEFAULT_ACTIVITY_QUERIES.some((q) => q.includes('כדאי שנלך'))).toBe(true)
459+
expect(DEFAULT_ACTIVITY_QUERIES.some((q) => q.includes('เราควรไป'))).toBe(true)
456460
})
457461
})
458462
})

src/extraction/embeddings/queries/activity-types.json

Lines changed: 133 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,21 @@
3939
"レストラン カフェ 居酒屋",
4040
"식당 카페 술집",
4141
"餐厅 咖啡馆 酒吧",
42-
"餐廳 咖啡館 酒吧"
42+
"餐廳 咖啡館 酒吧",
43+
"رستوران کافه غذا",
44+
"nhà hàng quán cà phê đồ ăn",
45+
"restaurace kavárna bar",
46+
"ресторан кав'ярня бар",
47+
"étterem kávézó bár",
48+
"restaurant cafenea bar",
49+
"εστιατόριο καφέ μπαρ",
50+
"ravintola kahvila baari",
51+
"מסעדה בית קפה בר",
52+
"reštaurácia kaviareň bar",
53+
"ร้านอาหาร คาเฟ่ บาร์",
54+
"ресторант кафене бар",
55+
"restaurang kafé bar",
56+
"restaurant kafé bar"
4357
],
4458
"nature_outdoors": [
4559
"we should go hiking",
@@ -85,7 +99,21 @@
8599
"ハイキング ビーチ 山 公園",
86100
"등산 해변 산 공원",
87101
"徒步 海滩 山 公园",
88-
"徒步 海灘 山 公園"
102+
"徒步 海灘 山 公園",
103+
"پیاده‌روی ساحل کوه پارک",
104+
"đi bộ đường dài bãi biển núi công viên",
105+
"turistika pláž hora park",
106+
"похід пляж гори парк",
107+
"túra strand hegy park",
108+
"drumeție plajă munte parc",
109+
"πεζοπορία παραλία βουνό πάρκο",
110+
"vaellus ranta vuori puisto",
111+
"טיול חוף הר פארק",
112+
"turistika pláž hory park",
113+
"เดินป่า ชายหาด ภูเขา สวน",
114+
"поход плаж планина парк",
115+
"vandring strand berg park",
116+
"fottur strand fjell park"
89117
],
90118
"entertainment": [
91119
"we should go to that concert",
@@ -130,7 +158,20 @@
130158
"コンサート 映画 フェス",
131159
"콘서트 영화 축제 공연",
132160
"演唱会 电影 节日 演出",
133-
"演唱會 電影 節日 表演"
161+
"演唱會 電影 節日 表演",
162+
"کنسرت سینما جشنواره تئاتر",
163+
"buổi hòa nhạc phim lễ hội nhà hát",
164+
"koncert kino festival predstavenie",
165+
"концерт кіно фестиваль театр",
166+
"koncert mozi fesztivál színház",
167+
"concert cinema festival teatru",
168+
"συναυλία σινεμά φεστιβάλ θέατρο",
169+
"konsertti elokuva festivaali teatteri",
170+
"הופעה קולנוע פסטיבל תיאטרון",
171+
"koncert kino festival divadlo",
172+
"คอนเสิร์ต หนัง เทศกาล โรงละคร",
173+
"концерт кино фестивал театър",
174+
"konsert bio festival teater"
134175
],
135176
"culture_arts": [
136177
"we should visit the museum",
@@ -175,7 +216,20 @@
175216
"美術館 博物館 展覧会",
176217
"박물관 미술관 전시",
177218
"博物馆 美术馆 展览",
178-
"博物館 美術館 展覽"
219+
"博物館 美術館 展覽",
220+
"موزه گالری نمایشگاه",
221+
"bảo tàng phòng tranh triển lãm",
222+
"muzeum galerie výstava",
223+
"музей галерея виставка",
224+
"múzeum galéria kiállítás",
225+
"muzeu galerie expoziție",
226+
"μουσείο γκαλερί έκθεση",
227+
"museo galleria näyttely",
228+
"מוזיאון גלריה תערוכה",
229+
"múzeum galéria výstava",
230+
"พิพิธภัณฑ์ แกลเลอรี นิทรรศการ",
231+
"музей галерия изложба",
232+
"museum galleri utstilling"
179233
],
180234
"travel_accommodation": [
181235
"let's book an airbnb",
@@ -208,7 +262,21 @@
208262
"رحلة فندق عطلة",
209263
"旅行 ホテル 休暇",
210264
"여행 호텔 휴가",
211-
"旅行 酒店 假期"
265+
"旅行 酒店 假期",
266+
"سفر هتل تعطیلات",
267+
"du lịch khách sạn kỳ nghỉ",
268+
"cesta hotel dovolená",
269+
"подорож готель відпустка",
270+
"utazás hotel nyaralás",
271+
"călătorie hotel vacanță",
272+
"ταξίδι ξενοδοχείο διακοπές",
273+
"matka hotelli loma",
274+
"נסיעה מלון חופשה",
275+
"cestovanie hotel dovolenka",
276+
"เที่ยว โรงแรม วันหยุด",
277+
"пътуване хотел ваканция",
278+
"resa hotell semester",
279+
"reise hotell ferie"
212280
],
213281
"sports_adventure": [
214282
"we should go skiing",
@@ -255,7 +323,21 @@
255323
"スキー サーフィン ダイビング",
256324
"스키 서핑 다이빙 클라이밍",
257325
"滑雪 冲浪 潜水 攀岩",
258-
"滑雪 衝浪 潛水 攀岩"
326+
"滑雪 衝浪 潛水 攀岩",
327+
"اسکی موج‌سواری غواصی صخره‌نوردی",
328+
"trượt tuyết lướt sóng lặn leo núi",
329+
"lyžování surfování potápění lezení",
330+
"лижі серфінг дайвінг скелелазіння",
331+
"síelés szörf búvárkodás mászás",
332+
"schi surf scufundări escaladă",
333+
"σκι σερφ κατάδυση αναρρίχηση",
334+
"hiihto surffaus sukellus kiipeily",
335+
"סקי גלישה צלילה טיפוס",
336+
"lyžovanie surfovanie potápanie lezenie",
337+
"สกี โต้คลื่น ดำน้ำ ปีนเขา",
338+
"ски сърф гмуркане катерене",
339+
"skidåkning surfing dykning klättring",
340+
"ski surfing dykking klatring"
259341
],
260342
"social_events": [
261343
"let's throw a party",
@@ -291,7 +373,21 @@
291373
"パーティー ワークショップ 誕生日",
292374
"파티 생일 워크숍",
293375
"派对 生日 工作坊",
294-
"派對 生日 工作坊"
376+
"派對 生日 工作坊",
377+
"مهمانی تولد کارگاه",
378+
"tiệc sinh nhật hội thảo",
379+
"oslava narozeniny workshop",
380+
"вечірка день народження майстерня",
381+
"buli születésnap workshop",
382+
"petrecere aniversare atelier",
383+
"πάρτι γενέθλια εργαστήριο",
384+
"juhlat syntymäpäivä työpaja",
385+
"מסיבה יום הולדת סדנה",
386+
"oslava narodeniny workshop",
387+
"ปาร์ตี้ วันเกิด เวิร์กช็อป",
388+
"парти рожден ден работилница",
389+
"fest födelsedag workshop",
390+
"fest bursdag verksted"
295391
],
296392
"shopping": [
297393
"let's go to the mall",
@@ -315,7 +411,21 @@
315411
"市場 ショッピング お土産",
316412
"시장 쇼핑 기념품",
317413
"市场 商店 纪念品",
318-
"市場 商店 紀念品"
414+
"市場 商店 紀念品",
415+
"بازار فروشگاه سوغاتی",
416+
"chợ cửa hàng quà lưu niệm",
417+
"trh obchod suvenýry",
418+
"ринок магазин сувеніри",
419+
"piac bolt szuvenír",
420+
"piață magazin suveniruri",
421+
"αγορά κατάστημα σουβενίρ",
422+
"markkinat kauppa matkamuisto",
423+
"שוק חנות מזכרות",
424+
"trh obchod suveníry",
425+
"ตลาด ร้านค้า ของที่ระลึก",
426+
"пазар магазин сувенири",
427+
"marknad butik souvenir",
428+
"marked butikk suvenirer"
319429
],
320430
"family_kids": [
321431
"let's go to the playground",
@@ -340,6 +450,20 @@
340450
"動物園 水族館 遊園地",
341451
"동물원 수족관 놀이터",
342452
"动物园 水族馆 游乐园",
343-
"動物園 水族館 遊樂園"
453+
"動物園 水族館 遊樂園",
454+
"باغ وحش آکواریوم زمین بازی",
455+
"sở thú thủy cung sân chơi",
456+
"zoo akvárium hřiště",
457+
"зоопарк акваріум дитячий майданчик",
458+
"állatkert akvárium játszótér",
459+
"grădină zoologică acvariu loc de joacă",
460+
"ζωολογικός κήπος ενυδρείο παιδική χαρά",
461+
"eläintarha akvaario leikkipuisto",
462+
"גן חיות אקווריום גן משחקים",
463+
"zoo akvárium ihrisko",
464+
"สวนสัตว์ พิพิธภัณฑ์สัตว์น้ำ สนามเด็กเล่น",
465+
"зоопарк аквариум детска площадка",
466+
"djurpark akvarium lekplats",
467+
"dyrehage akvarium lekeplass"
344468
]
345469
}

src/extraction/embeddings/queries/agreement.json

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,42 @@
6262
"聽起來不錯",
6363
"看起来很好",
6464
"看起來很好",
65-
"好主意"
65+
"好主意",
66+
"به نظر خوبه",
67+
"ایده خوبیه",
68+
"من هستم",
69+
"nghe hay đó",
70+
"mình tham gia",
71+
"ý hay",
72+
"zní to dobře",
73+
"jdu do toho",
74+
"dobrý nápad",
75+
"звучить добре",
76+
"я підтримую",
77+
"гарна ідея",
78+
"jól hangzik",
79+
"benne vagyok",
80+
"jó ötlet",
81+
"sună bine",
82+
"mă bag",
83+
"idee bună",
84+
"ακούγεται καλό",
85+
"είμαι μέσα",
86+
"καλή ιδέα",
87+
"kuulostaa hyvältä",
88+
"olen mukana",
89+
"hyvä idea",
90+
"נשמע טוב",
91+
"אני בפנים",
92+
"רעיון טוב",
93+
"znie to dobre",
94+
"idem do toho",
95+
"vyzerá to dobre",
96+
"ฟังดูดี",
97+
"ไปด้วย",
98+
"ไอเดียดี",
99+
"звучи добре",
100+
"аз съм за",
101+
"добра идея",
102+
"god idé"
66103
]
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:7cc1019f6519505f38a4815fef9393b3814fe0b5ca8bf46f3906a5c8ccb9a046
3-
size 6982893
2+
oid sha256:8b2a895004454777b62a35ac739abeb4cbfe4dd9bbffc865c8ca644c7a738cb5
3+
size 9774143

src/extraction/embeddings/queries/suggestions.json

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,5 +103,42 @@
103103
"我們應該去那裡",
104104
"一起去看看",
105105
"想去这个地方",
106-
"想去這個地方"
106+
"想去這個地方",
107+
"باید برویم آنجا",
108+
"بریم آن رستوران",
109+
"می‌خوام آنجا را ببینم",
110+
"chúng ta nên đi chỗ đó",
111+
"mình nên ghé thăm",
112+
"đi thử nhà hàng đó",
113+
"měli bychom tam jít",
114+
"pojďme tam",
115+
"stojí za návštěvu",
116+
"нам варто туди піти",
117+
"давай сходимо туди",
118+
"треба відвідати це місце",
119+
"el kellene mennünk oda",
120+
"menjünk oda",
121+
"próbáljuk ki azt a helyet",
122+
"ar trebui să mergem acolo",
123+
"hai să mergem acolo",
124+
"merită vizitat",
125+
"πρέπει να πάμε εκεί",
126+
"να πάμε εκεί",
127+
"αξίζει να το επισκεφτούμε",
128+
"meidän pitäisi mennä sinne",
129+
"mennään sinne",
130+
"kannattaa käydä siellä",
131+
"כדאי שנלך לשם",
132+
"בוא נלך לשם",
133+
"כדאי לבקר שם",
134+
"mali by sme tam ísť",
135+
"poďme tam",
136+
"stojí za návštevu",
137+
"เราควรไปที่นั่น",
138+
"ไปกันเถอะ",
139+
"น่าไปลอง",
140+
"трябва да отидем там",
141+
"хайде да отидем там",
142+
"струва си да посетим",
143+
"vi bør besøke dette stedet"
107144
]

src/extraction/heuristics/activity-links.test.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,23 @@ describe('extractActivityLinks', () => {
227227
expect(link.inferredType).toBe('place')
228228
})
229229

230+
it('detects SaaS locale intent keywords around links', () => {
231+
const messages = [
232+
createMessage(0, 'เราควรไปที่ร้านอาหารนั้น', 'Alice', []),
233+
createMessage(1, 'https://instagram.com/reel/xyz', 'Bob', [
234+
'https://instagram.com/reel/xyz'
235+
]),
236+
createMessage(2, 'ฟังดูดี', 'Alice', [])
237+
]
238+
239+
const result = extractActivityLinks(messages)
240+
241+
expect(result.links).toHaveLength(1)
242+
const link = getFirstLink(result)
243+
expect(link.intent.keywords).toEqual(expect.arrayContaining(['เราควรไป', 'ฟังดูดี']))
244+
expect(link.inferredType).toBe('place')
245+
})
246+
230247
it('detects high-signal emojis', () => {
231248
const messages = [
232249
createMessage(0, 'This restaurant looks incredible! \u{1F525}\u{1F60D}', 'Alice', []),

0 commit comments

Comments
 (0)