Skip to content

Commit

Permalink
feat: 🎸 chatbubble internationalization (#236)
Browse files Browse the repository at this point in the history
* feat: 🎸 chatbubble internationalization

* feat: 🎸 support all languages
  • Loading branch information
OdapX authored Nov 10, 2023
1 parent 7be4959 commit 42ca6ef
Show file tree
Hide file tree
Showing 167 changed files with 1,274 additions and 27 deletions.
4 changes: 2 additions & 2 deletions apps/dashboard/components/ChatBox.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -554,7 +554,7 @@ function ChatBox({
flexDirection: 'row',
alignItems: 'center',
'.MuiTextarea-endDecorator': {
'margin-block-start': 'auto',
marginBlockStart: 'auto',
},
}}
// disabled={!state.currentDatastoreId || state.loading}
Expand Down Expand Up @@ -598,7 +598,7 @@ function ChatBox({
justifyContent: 'space-between',
width: '100%',
maxWidth: '100%',
overflowX: 'hidden',
overflowX: 'auto',
}}
>
{renderBottom}
Expand Down
8 changes: 5 additions & 3 deletions apps/dashboard/components/CustomerSupportActions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ import { Button, ColorPaletteProp } from '@mui/joy';
import Stack from '@mui/joy/Stack';
import React, { useContext } from 'react';
import { useFrame } from 'react-frame-component';
import { useTranslation } from 'react-i18next';

import { ChatContext, ChatMessage } from '@app/hooks/useChat';
import useStateReducer from '@app/hooks/useStateReducer';
import i18n from '@app/locales/i18next';

import { AgentInterfaceConfig } from '@chaindesk/lib/types/models';
import type { ConversationStatus } from '@chaindesk/prisma';
Expand All @@ -25,7 +27,7 @@ function CustomerSupportActions({ config }: Props) {
createNewConversation,
refreshConversation,
} = useContext(ChatContext);

const { t } = useTranslation();
const { document } = useFrame();

const [state, setState] = useStateReducer({
Expand Down Expand Up @@ -132,8 +134,8 @@ function CustomerSupportActions({ config }: Props) {
(
{
['HUMAN_REQUESTED']: 'Human Requested',
['RESOLVED']: 'Request Human',
['UNRESOLVED']: 'Request Human',
['RESOLVED']: `${t('chatbubble:actions.request')}`,
['UNRESOLVED']: `${t('chatbubble:actions.request')}`,
} as Record<ConversationStatus, string>
)[conversationStatus]
}
Expand Down
10 changes: 6 additions & 4 deletions apps/dashboard/components/LeadForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ import Input from '@mui/joy/Input';
import Stack from '@mui/joy/Stack';
import Typography from '@mui/joy/Typography';
import React, { useContext, useEffect, useMemo, useRef } from 'react';
import { useTranslation } from 'react-i18next';
import { visit } from 'yaml/dist/parse/cst-visit';

import { ChatContext, ChatMessage } from '@app/hooks/useChat';
import useStateReducer from '@app/hooks/useStateReducer';
import i18n from '@app/locales/i18next';

import { API_URL } from './ChatBubble';

Expand All @@ -25,7 +27,7 @@ export default function LeadForm(props: {
onSubmitSucess?: (email: string) => any;
}) {
const ref = useRef<HTMLInputElement>(null);

const { t } = useTranslation('', { i18n });
const [state, setState] = useStateReducer({
isCaptureLoading: false,
isCaptureSuccess: false,
Expand Down Expand Up @@ -78,7 +80,7 @@ export default function LeadForm(props: {
level="body-sm"
fontWeight={600}
>
Let us know how to contact you
{t('chatbubble:lead.instruction')}
</Typography>
<Input
slotProps={{
Expand All @@ -91,7 +93,7 @@ export default function LeadForm(props: {
size="sm"
name="email"
type="email"
placeholder="Email"
placeholder={t('chatbubble:lead.email')}
required
// startDecorator={<AlternateEmailRoundedIcon />}
onChange={(e) => setState({ emailInputValue: e.target.value })}
Expand Down Expand Up @@ -131,7 +133,7 @@ export default function LeadForm(props: {
></Input>

<FormHelperText sx={{ fontSize: 'xs', fontStyle: 'italic' }}>
Required to request a human operator
{t('chatbubble:lead.required')}
</FormHelperText>

{/* <Button
Expand Down
6 changes: 4 additions & 2 deletions apps/dashboard/components/ResolveButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ import CheckCircleIcon from '@mui/icons-material/CheckCircle';
import { Button, Chip, CircularProgress, ExtendButton } from '@mui/joy';
import { SxProps } from '@mui/joy/styles/types';
import { useState } from 'react';
import { useTranslation } from 'react-i18next';

import useConfetti from '@app/hooks/useConfetti';
import i18n from '@app/locales/i18next';

import type { ConversationStatus } from '@chaindesk/prisma';

Expand Down Expand Up @@ -43,7 +45,7 @@ const ResolveButton = ({
sx?: SxProps;
}) => {
const [pending, setPending] = useState(false);

const { t } = useTranslation('', { i18n });
const triggerConfetti = useConfetti({
zIndex: 10000000000,
});
Expand Down Expand Up @@ -87,7 +89,7 @@ const ResolveButton = ({
}
>
{conversationStatus === 'RESOLVED' && 'Mark as Unresolved'}
{conversationStatus !== 'RESOLVED' && 'Mark As Resolved'}
{conversationStatus !== 'RESOLVED' && t('chatbubble:actions:resolve')}
</Button>
);
};
Expand Down
1 change: 1 addition & 0 deletions apps/dashboard/locales/aa/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"حدد كمحلول","request":"اطلب مشغل بشري","enableAi":"تفعيل الذكاء الاصطناعي"},"instructions":{"callback":"سيتصل بك مشغل قريبًا.","unavailable":"عذرًا، لا يتوفر حاليًا أي مشغلين."}},"chatbubble":{"actions":{"resolve":"حدد كمحلول","request":"اطلب مشغل بشري"},"lead":{"instruction":"اعطنا كيفية التواصل معك","email":"بريد إلكتروني","required":"مطلوب لطلب مشغل بشري"}}}
1 change: 1 addition & 0 deletions apps/dashboard/locales/ab/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"أشر على أنه تم حله","request":"طلب مشغل بشري","enableAi":"تمكين الذكاء الاصطناعي"},"instructions":{"callback":"سيتصل بك مشغل في وقت قريب.","unavailable":"عذرًا، لا توجد مشغلات متاحة حاليًا."}},"chatbubble":{"actions":{"resolve":"أشر على أنه تم حله","request":"طلب مشغل بشري"},"lead":{"instruction":"أخبرنا كيفية الاتصال بك","email":"البريد الإلكتروني","required":"مطلوب لطلب مشغل بشري"}}}
1 change: 1 addition & 0 deletions apps/dashboard/locales/ae/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"𐬟𐬭𐬀𐬪 𐬨𐬭 𐬬𐬀𐬥𐬭𐬁𐬙𐬪𐬀𐬗𐬁𐬢𐬀𐬭","request":"𐬭𐬀𐬪𐬡𐬀𐬁 𐬧𐬀𐬎𐬭𐬚𐬭 𐬘𐬭𐬨𐬀𐬨𐬲𐬀𐬙𐬪𐬀𐬗𐬁𐬢𐬀𐬭","enableAi":"𐬈𐬭𐬀𐬨𐬭 𐬡𐬀𐬥𐬭𐬁 AI"},"instructions":{"callback":"𐬡𐬀𐬁 𐬪𐬮𐬭𐬀𐬪𐬭𐬁𐬙𐬪 𐬀𐬥𐬭𐬁𐬢𐬀𐬭 𐬪𐬮𐬭𐬀𐬪𐬭𐬁𐬙𐬪","unavailable":"𐬄𐬢𐬀𐬈𐬀𐬭𐬨𐬭𐬨𐬲𐬭𐬁 𐬨𐬀𐬪𐬭𐬪𐬀𐬈𐬶𐬀𐬙𐬪 𐬀𐬥𐬭𐬄𐬢𐬀𐬄𐬧𐬭𐬲𐬀𐬯𐬸𐬀."}},"chatbubble":{"actions":{"resolve":"𐬟𐬭𐬀𐬪 𐬨𐬭 𐬬𐬀𐬥𐬭𐬁𐬙𐬪𐬀𐬗𐬁𐬢𐬀𐬭","request":"𐬭𐬀𐬪𐬡𐬀𐬁 𐬧𐬀𐬎𐬭𐬚𐬭 𐬘𐬭𐬨𐬀𐬨𐬲𐬀𐬙𐬪"},"lead":{"instruction":"𐬧𐬭𐬸𐬀 𐬢𐬯𐬀𐬭 𐬄𐬀𐬟𐬀𐬰 𐬦𐬀𐬲𐬀𐬦𐬀𐬮𐬶𐬎𐬀 𐬪𐬮𐬭𐬀𐬪𐬭𐬁𐬙𐬪","email":"𐬄𐬀𐬙𐬭𐬀𐬢𐬭𐬚𐬭𐬁","required":"𐬢𐬮𐬭𐬄𐬧𐬭𐬲𐬀𐬯𐬸𐬀 𐬡𐬀𐬥𐬭𐬁𐬢𐬀𐬭 𐬪𐬡𐬀𐬥𐬭𐬨𐬀𐬬𐬲𐬀𐬥𐬭𐬀𐬎𐬭𐬚𐬀𐬙𐬪"}}}
1 change: 1 addition & 0 deletions apps/dashboard/locales/af/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"Merk as opgelos","request":"Versoek 'n menslike operateur","enableAi":"Heraktiveer AI"},"instructions":{"callback":"'n Operateur sal binnekort terugkom.","unavailable":"Ongelukkig is daar tans geen operateurs beskikbaar nie."}},"chatbubble":{"actions":{"resolve":"Merk As Opgelos","request":"Versoek Mens"},"lead":{"instruction":"Laat ons weet hoe om u te kontak","email":"e-pos","required":"Vereis om 'n menslike operateur aan te vra"}}}
1 change: 1 addition & 0 deletions apps/dashboard/locales/ak/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":" حل ","request":"طلب مشغل إنساني","enableAi":"تمكين الذكاء الاصطناعي"},"instructions":{"callback":"سيعاود المشغل الاتصال بك قريبًا.","unavailable":"عذرًا، لا تتوفر مشغلات حاليًا."}},"chatbubble":{"actions":{"resolve":"وضع علامة كمحلول","request":"طلب مشغل إنساني"},"lead":{"instruction":"أخبرنا كيفية الاتصال بك","email":"بريد إلكتروني","required":"مطلوب لطلب مشغل إنساني"}}}
1 change: 1 addition & 0 deletions apps/dashboard/locales/am/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"እውቀት ተያያዥ","request":"ሰልፍ ፈጥረን ተጠይቅ","enableAi":"አጽድቅ AI እንዲያስረዳ"},"instructions":{"callback":"በቀጣይነት ለመወዳደር ሰላም ይላኩልን","unavailable":"ይህንን ጊዜ አይራራለሁ ተስተካክልን"}},"chatbubble":{"actions":{"resolve":"ተያያዥ ማስተላለፍ","request":"ሰልፍ ወረድ"},"lead":{"instruction":"እኛን ለማንበብ ይህንን ማሳያ ይስጡ","email":"ኢሜል","required":"የሚሠራው ነው ለምሳሌ"}}}
1 change: 1 addition & 0 deletions apps/dashboard/locales/an/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"تم الحل","request":"طلب مشغل بشري","enableAi":"تفعيل الذكاء الاصطناعي"},"instructions":{"callback":"سيقوم المشغل بالرد عليك في أقرب وقت ممكن.","unavailable":"عذرًا، لا يوجد مشغلين متاحين في الوقت الحالي."}},"chatbubble":{"actions":{"resolve":"تم الحل","request":"طلب بشري"},"lead":{"instruction":"أخبرنا كيف نتصل بك","email":"البريد الإلكتروني","required":"مطلوب لطلب مشغل بشري"}}}
1 change: 1 addition & 0 deletions apps/dashboard/locales/ar/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"تحديد كمحلول","request":"طلب مشغل بشري","enableAi":"تمكين الذكاء الاصطناعي"},"instructions":{"callback":"سيتصل بك مشغل قريبًا.","unavailable":"عذرًا، لا تتوفر مشغلين في الوقت الحالي."}},"chatbubble":{"actions":{"resolve":"تحديد كمحلول","request":"طلب مشغل بشري"},"lead":{"instruction":"أخبرنا كيف يمكننا التواصل معك","email":"البريد الإلكتروني","required":"مطلوب لطلب مشغل بشري"}}}
1 change: 1 addition & 0 deletions apps/dashboard/locales/as/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"সমাধান হিসাবে চিহ্নিত করো","request":"একজন মানুষ অপারেটরের অনুরোধ করো","enableAi":"এইচ এই সক্ষম করো"},"instructions":{"callback":"একজন অপারেটর শীঘ্রই আপনার পাশে থাকবেন।","unavailable":"দুঃখিতভাবে বর্তমানে কোন অপারেটর উপলব্ধ নেই।"}},"chatbubble":{"actions":{"resolve":"সমাধান হিসাবে চিহ্নিত করো","request":"মানুষ অনুরোধ করো"},"lead":{"instruction":"আমাদেরকে জানানো হবে যে কিভাবে আপনি যোগাযোগ করতে চান","email":"ইমেইল","required":"মানুষ অপারেটর অনুরোধ করার জন্য প্রয়োজনীয়"}}}
1 change: 1 addition & 0 deletions apps/dashboard/locales/av/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"تحديد كمحلول","request":"طلب من مشغل بشري","enableAi":"تمكين الذكاء الاصطناعي"},"instructions":{"callback":"سوف يتصل بك مشغل قريباً.","unavailable":"للأسف، لا توجد مشغلات متاحة في الوقت الحالي."}},"chatbubble":{"actions":{"resolve":"تحديد كمحلول","request":"طلب من مشغل بشري"},"lead":{"instruction":"أخبرنا كيفية الاتصال بك","email":"البريد الإلكتروني","required":"مطلوب لطلب مشغل بشري"}}}
1 change: 1 addition & 0 deletions apps/dashboard/locales/ay/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"تحديد كمحلول","request":"طلب مشغل إنساني","enableAi":"تمكين الذكاء الاصطناعي"},"instructions":{"callback":"سيتصل بك مشغل في أقرب وقت ممكن.","unavailable":"عذرًا، لا توجد مشغلات متاحة في الوقت الحالي."}},"chatbubble":{"actions":{"resolve":"تحديد كمحلول","request":"طلب مشغل إنساني"},"lead":{"instruction":"أخبرنا كيف يمكننا الاتصال بك","email":"البريد الإلكتروني","required":"مطلوب لطلب مشغل إنساني"}}}
24 changes: 24 additions & 0 deletions apps/dashboard/locales/az/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"crisp": {
"choices": {
"resolve": "Həll edildi kimi qeyd edin",
"request": "İnsan operator istəyin",
"enableAi": "AI-nı yenidən aktivləşdirin"
},
"instructions": {
"callback": "Bir operator sizə tezliklə geri dönəcək.",
"unavailable": "Təəssüf ki, indi heç bir operator mövcud deyil."
}
},
"chatbubble": {
"actions": {
"resolve": "Həll edildi kimi qeyd edin",
"request": "İnsan istəyin"
},
"lead": {
"instruction": "Bizimlə əlaqə qurma yolunu bildirin",
"email": "Email",
"required": "İnsan operatorunu taleb etmək üçün vacibdir"
}
}
}
24 changes: 24 additions & 0 deletions apps/dashboard/locales/ba/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"crisp": {
"choices": {
"resolve": "Познаменовать сугуп",
"request": "Талапкахармызды һамә һөҙәлдерге төшәе",
"enableAi": "AI-ға рәвештә һөзәрләегезгә"
},
"instructions": {
"callback": "Эшләми күперәк вакыт итегез ундай оператор белән темасланасыз.",
"unavailable": "Киң тулыбезде операторлар яңарак өч."
}
},
"chatbubble": {
"actions": {
"resolve": "Познаменовать сугуп",
"request": "Талапкаһыны һамә һөҙәлде"
},
"lead": {
"instruction": "Безне яҡтырмай булманызга тейешеләр сагынсыз",
"email": "электрон почта",
"required": "Операторны талап итәргә күрсәтеләнер"
}
}
}
1 change: 1 addition & 0 deletions apps/dashboard/locales/be/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"Oзначыць як вырашанае","request":"Запытаць чалавек-аператара","enableAi":"Уключыць Интэлект штучнага разуму"},"instructions":{"callback":"Аператар звярнеецца да вас незабаром.","unavailable":"На жаль, ў дадзены момант няма даступных аператараў."}},"chatbubble":{"actions":{"resolve":"Пазначыць як вырашанае","request":"Запытаць чалавека"},"lead":{"instruction":"Паведаміце нам, як з вамі звязацца","email":"электронная пошта","required":"Патрабуецца, каб запытаць чалавека-аператара"}}}
1 change: 1 addition & 0 deletions apps/dashboard/locales/bg/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"Маркирай като решено","request":"Заяви човешки оператор","enableAi":"Включи AI"},"instructions":{"callback":"Оператор ще се свърже с вас скоро.","unavailable":"За съжаление, в момента няма налични оператори."}},"chatbubble":{"actions":{"resolve":"Маркирай като решено","request":"Заяви човешки оператор"},"lead":{"instruction":"Кажете ни как да се свържем с вас","email":"електронна поща","required":"Задължително, за да заявите човешки оператор"}}}
1 change: 1 addition & 0 deletions apps/dashboard/locales/bh/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"أشر على أنه تم حله","request":"طلب لمشغّل بشري","enableAi":"تمكين الذكاء الاصطناعي"},"instructions":{"callback":"سيقوم أحد المشغّلين بالرد عليك قريبًا.","unavailable":"للأسف، لا يتوفر حاليًا أي مشغّلين."}},"chatbubble":{"actions":{"resolve":"أشر على أنه تم حله","request":"طلب مشغّل بشري"},"lead":{"instruction":"أخبرنا كيف يمكن الاتصال بك","email":"البريد الإلكتروني","required":"مطلوب لطلب مشغّل بشري"}}}
1 change: 1 addition & 0 deletions apps/dashboard/locales/bi/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"Mark as resolved","request":"Request a human operator","enableAi":"Re-enable AI"},"instructions":{"callback":"An operator will get back to you shortly.","unavailable":"Unfortunately, no operators are available at the moment."}},"chatbubble":{"actions":{"resolve":"Mark As Resolved","request":"Request Human"},"lead":{"instruction":"Let us know how to contact you","email":"email","required":"Required to request a human operator"}}}
1 change: 1 addition & 0 deletions apps/dashboard/locales/bm/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"تمييز كمحلول","request":"طلب مشغّل بشري","enableAi":"تمكين الذكاء الاصطناعي"},"instructions":{"callback":"سيقوم المشغل بالرد عليك قريبًا.","unavailable":"عذرًا، لا تتوفر مشغلات في الوقت الحالي."}},"chatbubble":{"actions":{"resolve":"تمييز كمحلول","request":"طلب مشغّل بشري"},"lead":{"instruction":"أخبرنا كيفية التواصل معك","email":"البريد الإلكتروني","required":"مطلوب لطلب مشغّل بشري"}}}
1 change: 1 addition & 0 deletions apps/dashboard/locales/bn/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"সংশোধন হিসাবে চিহ্নিত করুন","request":"কেউ মানুষের অপারেটরের অনুরোধ করুন","enableAi":"এই পুনরায় সক্ষম করুন"},"instructions":{"callback":"একটি অপারেটর আপনার কাছে শীঘ্রই ফিরিয়ে আসবেন।","unavailable":"দুঃখিত, এখনও কোনও অপারেটর উপলব্ধ নেই।"}},"chatbubble":{"actions":{"resolve":"সংশোধন হিসাবে চিহ্নিত করুন","request":"মানুষের অনুরোধ করুন"},"lead":{"instruction":"আমাদের জানান কীভাবে আপনাকে যোগাযোগ করতে হবে","email":"ইমেইল","required":"মানুষের অপারেটরের অনুরোধ করতে প্রয়োজন"}}}
1 change: 1 addition & 0 deletions apps/dashboard/locales/bo/translations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"crisp":{"choices":{"resolve":"འགྲོ་གཏུག་བྱིན་གྱིས་","request":"མན་ངག་ཆུ་ཚོད་ཏེ་ཡོད་བྱེད་པའི་མགོན་པོ་རེད་གཏང་","enableAi":"AIགི་ལག་ཆས་བྱིན་གྱིས་"},"instructions":{"callback":"འཛུགས་སྦེ་དེའི་པང་ཁྱེད་རང་ཕོངམ་པ་ལས་གཏང་","unavailable":"ཁྱོད་ལམ་སྟོན་པའི་མི་ཚིག་མེད་པ་ཅིན་གྱིས་མེད་པར་བྱིན་པས་འཛུགས་སྦེ་གནད་དོན་པས་གཟིགས་ཡོད་པའི་ནང་འཁོད་རིང་།"}},"chatbubble":{"actions":{"resolve":"འགྲོ་གཏུག་བྱིན་གྱིས་","request":"མན་ངག་ཆུ་ཚོད་ཏེ་ཡོད་བྱེད་པའི་"},"lead":{"instruction":"ཁྱེད་ཀྱི་འགྲོ་ཚུ་འདི་ལག་འགྱེད་འཇུག་རིང་།","email":"ཡི་རུ་སྤྱོད་མི།","required":"ཡོད་མི་འགོག་འོང་গྲཇ།"}}}
Loading

0 comments on commit 42ca6ef

Please sign in to comment.