CodeBold
+ -
+
- Visit the preferences centre here > https://external.com +
commit 092fb2e083b2a3d1c6d4a612a9dcdb8465f215d2
Author: Liang XJ
+ {{ description }}
+ {{ description }}
+ {{ description }}
+
+ {{
+ t(
+ 'ASSIGNMENT_POLICY.AGENT_CAPACITY_POLICY.FORM.EXCLUSION_RULES.DESCRIPTION'
+ )
+ }}
+
+ {{ description }}
+
+ {{ t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.NO_ATTRIBUTES') }}
+
+ {{ t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.EMPTY_STATE') }}
+
+ {{ t('CONTACTS_LAYOUT.SIDEBAR.HISTORY.EMPTY_STATE') }}
+
+ {{ t('CONTACTS_LAYOUT.SIDEBAR.MERGE.DESCRIPTION') }}
+
+ {{ t('CONTACTS_LAYOUT.SIDEBAR.NOTES.EMPTY_STATE') }}
+
+
+
+ {{ lastNonActivityMessageContent }}
+
+ {{ lastNonActivityMessageContent }}
+
+ {{ attribute.attribute_description || attribute.description || '' }}
+
+ {{ message }}
+
+ {{ subtitle }}
+
+ {{ t('HELP_CENTER.PORTAL_SWITCHER.CREATE_PORTAL') }}
+
+ {{ template.body || t('CONTENT_TEMPLATES.PICKER.NO_CONTENT') }}
+
+ {{ t('COMPOSE_NEW_CONVERSATION.FORM.TWILIO_OPTIONS.EMPTY_STATE') }}
+
+ {{ getTemplateBody(template) }}
+
+ {{ t('COMPOSE_NEW_CONVERSATION.FORM.WHATSAPP_OPTIONS.EMPTY_STATE') }}
+ {{ count }} {{ count }}
+ {{ t('CAPTAIN.PLAYGROUND.DESCRIPTION') }}
+
+ {{ t('CAPTAIN.PLAYGROUND.CREDIT_NOTE') }}
+
+ {{ t('CAPTAIN.ASSISTANTS.FORM.TEMPERATURE.DESCRIPTION') }}
+ {{ description }}
+ {{ t('CAPTAIN.ASSISTANT_SWITCHER.SWITCH_ASSISTANT') }}
+
+ {{ t('CAPTAIN.ASSISTANT_SWITCHER.EMPTY_LIST') }}
+
+ {{ card.meta_description }}
+ Selected value: {{ selectedValue }}
+ {{ message }}
+
+ {{ message }}
+ Selected values: {{ selectedValues }}
+ {{ $t('CONTENT_TEMPLATES.PARSER.MEDIA_URL_LABEL') }}
+
+ {{ $t('CONTENT_TEMPLATES.PARSER.VARIABLES_LABEL') }}
+
+ {{ $t('CONTENT_TEMPLATES.PARSER.FORM_ERROR_MESSAGE') }}
+
+ {{ $t('CAPTAIN.COPILOT.KICK_OFF_MESSAGE') }}
+
+ {{ $t('CAPTAIN.ASSISTANTS.NO_ASSISTANTS_AVAILABLE') }}
+
+ {{ section.title }}
+ {{ note }}
+ {{ note }}
+ {{ file.name }}
+ {{ message }}
+
+ {{ $t('COMPONENTS.MEDIA.IMAGE_UNAVAILABLE') }}
+
+ {{ $t('COMPONENTS.FILE_BUBBLE.INSTAGRAM_STORY_UNAVAILABLE') }}
+
+ {{ trackingNumber }} • Step {{ currentStep + 1 }}/4
+
+ Order: {{ orderId }} • {{ itemCount }} items
+
+ {{ itemCount }} 个商品
+
+ {{ rowCount }} 行表格数据
+ Dear Sam, We are looking for high-quality cotton fabric for our T-shirt production. Please find attached a document with our specifications and requirements. Could you provide us with a quotation and lead time? Looking forward to your response. Best regards, Dear Sam, Thank you for the quotation. Could you share images or samples of the fabric for us to review before proceeding? Best, Dear Alex, Thank you for your inquiry. Please find attached our quotation based on your requirements. Let us know if you need further details or wish to discuss specific customizations. Best regards, Dear Alex, Please find attached images of our cotton fabric samples. Let us know if you'd like physical samples sent to you. Warm regards, Hello! Here we are again, ready to share some scintillating updates from Cloud Provider Land. All the real humans behind this newsletter hope you're doing well, and ask that you holler if we can help with something. Onward! You can always check out the Fresh Produce page to see what we've been fiddling with lately. Here are some of the highlights since we last checked in: A big internal focus right now is making our Support as…supportive (sorry) as it can possibly be. So, we've made some improvements to the Support portal that are available to anyone with paid support. We've also just shipped "impact levels" on Support tickets, so you can indicate the urgency and severity of your support request or escalate an existing ticket. As always, we're curious to know what you think, so hit us with your feedback. When you're looking for a platform to host your app, one of the first questions you'll ask is: "how much is this gonna cost me?" Oh, how we wish we could boil things down to one number to rule them all, but Legal refuses to let us put a "42" on the pricing page and leave it at that. Users are doing all kinds of things on Fly.io—like sorting through the US Patent system and helping teenagers in New Zealand learn outside of school—and therefore using wildly varying kinds and amounts of resources. That means the (infuriating) answer to cost questions is always: "it depends." Plus, there are a few different ways to structure pricing from the company side: you can either group certain resources together based on what you think different groups of customers might want (like a prix fix menu), or you can price each individual resource and let folks order á la carte. In the beginning, there was usage based pricing. Fly.io actually launched on the "á la carte" side of things, charging just for usage. At that point, we were just inflating Frankie the hot air balloon, and Support did not yet exist. Users told us they wanted Support, so we said "You bet!" But instead of just building paid Support options, we thought about other elements that users would want (like BAAs, SOC2 reports, etc) and packaged it all together. We ended up with plans we called Hobby, Launch, Scale, and Enterprise. Each one had some built-in "allowances" (free resources), some had Support, and all of them were anchored to different types of users. For example, the Scale plan was for users who needed to run multi-region, high-availability workloads, had specific compliance requirements (like needing to be in line with HIPAA), and wanted priority email support. This worked for a while. But over time, we started getting feedback from prospective users (and comments on Reddit, we won't lie) about how our pricing felt unclear. Folks were thinking about using us, but couldn't get a sense for how much it would cost. We also realized that the groupings we came up with might not actually make sense for some of Fly.io's users. For example: some folks might want ultra-available Support, but not care at all about compliance. And once we started digging into it, we started asking: why build a company around primitives that are really simple and swappable, and then make a payment structure that requires picking Option A, B, or C? "There must be consistency!" we said. (We were getting pretty fired up at this point.) So, we got rid of Plans. Instead of grouping resources together, we've gone pure "pay as you go." We want you to be able to take a glance at our compute costs, do some back of the envelope math, and rest easy that you know what you're in for. You don't even have to do the math! We made this calculator so you can just plug in what you need and have it spit out an approximate total. In this brave new world, your invoice will be: To be super clear: this new á la carte set-up is just for new accounts. Anyone who was already on a plan still has it, no sweat. Our aim in getting rid of plans here was to make pricing simpler. Some folks have pointed out that separating out Support and Compliance as "add-ons" means that after this change (which went live October 7th) people who sign up for new accounts could end up paying more than their historical counterparts, depending on what they choose. For example, our previous "Launch" plan was $29/month, and it came with Standard Support and some free compute allowances. Today, Standard Support is $29/month by itself. Given that, was this the right call, on balance? We think so, since we figure: If you unsubscribe, you will not receive any email communication on your WeWork transactions and benefits from the myHQ team click here . I hope this email finds you well! I wanted to share some updates regarding our integration with Chatwoot and outline some key features we’ve explored. Integration Status: Upcoming Tasks: Note: Here’s what stood out so far: Here’s a quick overview of our conversation stats this week: Do let me know if you have additional feedback or ideas to improve our workflows. Here’s an image of how our Chatwoot dashboard looks with recent changes: Looking forward to hearing your thoughts! Best regards,
+ {{ name }}
+
+ {{ title }}
+
+
+
+
+ {{ name }}
+
+
+ {{ label }}
+
+ Current Limits:
+ {{
+ JSON.stringify(inboxCapacityLimitsEmpty, null, 2)
+ }}
+
+ {{ t(`CAMPAIGN.LIVE_CHAT.CREATE.TITLE`) }}
+
+
+ {{ t(`CAMPAIGN.SMS.CREATE.TITLE`) }}
+
+
+ {{ t(`CAMPAIGN.WHATSAPP.CREATE.TITLE`) }}
+
+
+ {{ t('CONTACTS_LAYOUT.SIDEBAR.MERGE.TITLE') }}
+
+
+ {{ selectedContact?.name }}
+
+
+ {{ t('CONTACTS_LAYOUT.DETAILS.DELETE_CONTACT') }}
+
+
+ {{ t('CONTACTS_LAYOUT.DETAILS.DELETE_CONTACT_DESCRIPTION') }}
+
+
+ {{ currentContactName }}
+
+
+ {{ attribute.label }}
+
+
+
+ {{ title }}
+
+
+ {{
+ t(
+ 'HELP_CENTER.EDIT_ARTICLE_PAGE.ARTICLE_PROPERTIES.ARTICLE_PROPERTIES'
+ )
+ }}
+
+
+
+ {{
+ t(
+ `HELP_CENTER.CATEGORY_PAGE.CATEGORY_DIALOG.HEADER.${mode.toUpperCase()}`
+ )
+ }}
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/HelpCenter/Pages/CategoryPage/EditCategoryDialog.vue b/app/javascript/dashboard/components-next/HelpCenter/Pages/CategoryPage/EditCategoryDialog.vue
new file mode 100644
index 0000000..5b339e5
--- /dev/null
+++ b/app/javascript/dashboard/components-next/HelpCenter/Pages/CategoryPage/EditCategoryDialog.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/HelpCenter/Pages/LocalePage/AddLocaleDialog.vue b/app/javascript/dashboard/components-next/HelpCenter/Pages/LocalePage/AddLocaleDialog.vue
new file mode 100644
index 0000000..696cc83
--- /dev/null
+++ b/app/javascript/dashboard/components-next/HelpCenter/Pages/LocalePage/AddLocaleDialog.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/HelpCenter/Pages/LocalePage/LocaleList.vue b/app/javascript/dashboard/components-next/HelpCenter/Pages/LocalePage/LocaleList.vue
new file mode 100644
index 0000000..9f72b1a
--- /dev/null
+++ b/app/javascript/dashboard/components-next/HelpCenter/Pages/LocalePage/LocaleList.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/HelpCenter/Pages/LocalePage/LocalesPage.story.vue b/app/javascript/dashboard/components-next/HelpCenter/Pages/LocalePage/LocalesPage.story.vue
new file mode 100644
index 0000000..54adbcb
--- /dev/null
+++ b/app/javascript/dashboard/components-next/HelpCenter/Pages/LocalePage/LocalesPage.story.vue
@@ -0,0 +1,52 @@
+
+
+
+
+ {{
+ t(
+ 'HELP_CENTER.PORTAL_SETTINGS.CONFIGURATION_FORM.CUSTOM_DOMAIN.HEADER'
+ )
+ }}
+
+
+ {{
+ t(
+ 'HELP_CENTER.PORTAL_SETTINGS.CONFIGURATION_FORM.CUSTOM_DOMAIN.DESCRIPTION'
+ )
+ }}
+
+
+ {{
+ t(
+ 'HELP_CENTER.PORTAL_SETTINGS.CONFIGURATION_FORM.DELETE_PORTAL.HEADER'
+ )
+ }}
+
+
+ {{
+ t(
+ 'HELP_CENTER.PORTAL_SETTINGS.CONFIGURATION_FORM.DELETE_PORTAL.DESCRIPTION'
+ )
+ }}
+
+
+ {{ t('HELP_CENTER.PORTAL_SWITCHER.PORTALS') }}
+
+
+
+
+
+
+
+
+
+ {{ t(`CAPTAIN.ASSISTANTS.SCENARIOS.ADD.NEW.TITLE`) }}
+
+
+
+ {{ name }}
+
+
+ {{ t('CAPTAIN.PLAYGROUND.HEADER') }}
+
+ {{ title }}
+
+
+ {{ heading }}
+
+ {{ t('CAPTAIN.ASSISTANT_SWITCHER.ASSISTANTS') }}
+
+
+ {{ card.meta_title }}
+
+
+
+
+
+
+ {{ template.friendly_name }}
+
+
+ {{ languageLabel }}
+
+
+ {{ $t('CAPTAIN.COPILOT.PANEL_TITLE') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ filterModalHeaderTitle }}
+
+
+
+
+
+ {{ filterModalHeaderTitle }}
+
+
+
+
+
+ {{ $t('FILTER.CUSTOM_VIEWS.ADD.TITLE') }}
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/icon/provider.js b/app/javascript/dashboard/components-next/icon/provider.js
new file mode 100644
index 0000000..25b54d1
--- /dev/null
+++ b/app/javascript/dashboard/components-next/icon/provider.js
@@ -0,0 +1,45 @@
+import { computed } from 'vue';
+
+export function useChannelIcon(inbox) {
+ const channelTypeIconMap = {
+ 'Channel::Api': 'i-woot-api',
+ 'Channel::Email': 'i-woot-mail',
+ 'Channel::FacebookPage': 'i-woot-messenger',
+ 'Channel::Line': 'i-woot-line',
+ 'Channel::Sms': 'i-woot-sms',
+ 'Channel::Telegram': 'i-woot-telegram',
+ 'Channel::TwilioSms': 'i-woot-sms',
+ 'Channel::TwitterProfile': 'i-ri-twitter-x-fill',
+ 'Channel::WebWidget': 'i-woot-website',
+ 'Channel::Whatsapp': 'i-woot-whatsapp',
+ 'Channel::Instagram': 'i-woot-instagram',
+ 'Channel::Tiktok': 'i-woot-tiktok',
+ 'Channel::Voice': 'i-ri-phone-fill',
+ };
+
+ const providerIconMap = {
+ microsoft: 'i-woot-outlook',
+ google: 'i-woot-gmail',
+ };
+
+ const channelIcon = computed(() => {
+ const inboxDetails = inbox.value || inbox;
+ const type = inboxDetails.channel_type;
+ let icon = channelTypeIconMap[type];
+
+ if (type === 'Channel::Email' && inboxDetails.provider) {
+ if (Object.keys(providerIconMap).includes(inboxDetails.provider)) {
+ icon = providerIconMap[inboxDetails.provider];
+ }
+ }
+
+ // Special case for Twilio whatsapp
+ if (type === 'Channel::TwilioSms' && inboxDetails.medium === 'whatsapp') {
+ icon = 'i-woot-whatsapp';
+ }
+
+ return icon ?? 'i-ri-global-fill';
+ });
+
+ return channelIcon;
+}
diff --git a/app/javascript/dashboard/components-next/icon/specs/provider.spec.js b/app/javascript/dashboard/components-next/icon/specs/provider.spec.js
new file mode 100644
index 0000000..7f2319b
--- /dev/null
+++ b/app/javascript/dashboard/components-next/icon/specs/provider.spec.js
@@ -0,0 +1,142 @@
+import { useChannelIcon } from '../provider';
+
+describe('useChannelIcon', () => {
+ it('returns correct icon for API channel', () => {
+ const inbox = { channel_type: 'Channel::Api' };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-woot-api');
+ });
+
+ it('returns correct icon for Facebook channel', () => {
+ const inbox = { channel_type: 'Channel::FacebookPage' };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-woot-messenger');
+ });
+
+ it('returns correct icon for WhatsApp channel', () => {
+ const inbox = { channel_type: 'Channel::Whatsapp' };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-woot-whatsapp');
+ });
+
+ it('returns correct icon for Voice channel', () => {
+ const inbox = { channel_type: 'Channel::Voice' };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-ri-phone-fill');
+ });
+
+ it('returns correct icon for Line channel', () => {
+ const inbox = { channel_type: 'Channel::Line' };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-woot-line');
+ });
+
+ it('returns correct icon for SMS channel', () => {
+ const inbox = { channel_type: 'Channel::Sms' };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-woot-sms');
+ });
+
+ it('returns correct icon for Telegram channel', () => {
+ const inbox = { channel_type: 'Channel::Telegram' };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-woot-telegram');
+ });
+
+ it('returns correct icon for Twitter channel', () => {
+ const inbox = { channel_type: 'Channel::TwitterProfile' };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-ri-twitter-x-fill');
+ });
+
+ it('returns correct icon for WebWidget channel', () => {
+ const inbox = { channel_type: 'Channel::WebWidget' };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-woot-website');
+ });
+
+ it('returns correct icon for Instagram channel', () => {
+ const inbox = { channel_type: 'Channel::Instagram' };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-woot-instagram');
+ });
+
+ it('returns correct icon for TikTok channel', () => {
+ const inbox = { channel_type: 'Channel::Tiktok' };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-woot-tiktok');
+ });
+
+ describe('TwilioSms channel', () => {
+ it('returns chat icon for regular Twilio SMS channel', () => {
+ const inbox = { channel_type: 'Channel::TwilioSms' };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-woot-sms');
+ });
+
+ it('returns WhatsApp icon for Twilio SMS with WhatsApp medium', () => {
+ const inbox = {
+ channel_type: 'Channel::TwilioSms',
+ medium: 'whatsapp',
+ };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-woot-whatsapp');
+ });
+
+ it('returns chat icon for Twilio SMS with non-WhatsApp medium', () => {
+ const inbox = {
+ channel_type: 'Channel::TwilioSms',
+ medium: 'sms',
+ };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-woot-sms');
+ });
+
+ it('returns chat icon for Twilio SMS with undefined medium', () => {
+ const inbox = {
+ channel_type: 'Channel::TwilioSms',
+ medium: undefined,
+ };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-woot-sms');
+ });
+ });
+
+ describe('Email channel', () => {
+ it('returns mail icon for generic email channel', () => {
+ const inbox = { channel_type: 'Channel::Email' };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-woot-mail');
+ });
+
+ it('returns Microsoft icon for Microsoft email provider', () => {
+ const inbox = {
+ channel_type: 'Channel::Email',
+ provider: 'microsoft',
+ };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-woot-outlook');
+ });
+
+ it('returns Google icon for Google email provider', () => {
+ const inbox = {
+ channel_type: 'Channel::Email',
+ provider: 'google',
+ };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-woot-gmail');
+ });
+ });
+
+ it('returns default icon for unknown channel type', () => {
+ const inbox = { channel_type: 'Channel::Unknown' };
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-ri-global-fill');
+ });
+
+ it('returns default icon when channel type is undefined', () => {
+ const inbox = {};
+ const { value: icon } = useChannelIcon(inbox);
+ expect(icon).toBe('i-ri-global-fill');
+ });
+});
diff --git a/app/javascript/dashboard/components-next/inline-input/InlineInput.story.vue b/app/javascript/dashboard/components-next/inline-input/InlineInput.story.vue
new file mode 100644
index 0000000..2d013f0
--- /dev/null
+++ b/app/javascript/dashboard/components-next/inline-input/InlineInput.story.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/message/MessageMeta.vue b/app/javascript/dashboard/components-next/message/MessageMeta.vue
new file mode 100644
index 0000000..e633d7c
--- /dev/null
+++ b/app/javascript/dashboard/components-next/message/MessageMeta.vue
@@ -0,0 +1,137 @@
+
+
+
+ {{ content || t('CONVERSATION.CSAT_REPLY_MESSAGE') }}
+
+
+
+
+
+
+
+
+
+
+
Logistics
+ Order Details
+ {{ title }}
+ {{ title }}
+
+
{{ message.title }}
+
+
+
+
+
Alex
T-Shirt Co.
Alex
\nSam
\nFabricMart
Best Regards
\nSam
\r\n \r\n
\r\nProduct updates
\r\n\r\n\r\n
\r\n\r\nInside Flyball
\r\n\r\nFeature story: why we got rid of plans
\r\n\r\n\r\n
\r\n\r\n\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\nYour 5 day bundle is coming to an end.
\r\nTo get access to more productive days at WeWork, upgrade to 10 day pass bundles and save flat 30%.
\r\n
\r\nBook day pass bundles of 10 at 30% off
\r\nUse code: BUNDLE30 \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n Book now\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n Book now\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n `,
+ reply: `[]\n[]\n\nGet more productive days at a better price\n\nHey there,\nYour 5 day bundle is coming to an end.\nTo get access to more productive days at WeWork, upgrade to 10 day pass bundles and save flat 30%.\nBook day pass bundles of 10 at 30% off Use code: BUNDLE30\n\n[Book now](http://url492.myhq.in/ls/click?upn=)\n\nWhy book a day pass bundle?\n\nExplore deep focus zones, fresh micro-brewed coffee, uninterrupted Wi-Fi and paid printing & on-site parking for multiple productive days in a row.\n\n[]\n\n[Book now](http://url492.myhq.in/ls/click?upn=)\n\n*T&Cs apply \n\n- Offer applicable at all locations across India\n- Offer only applicable on 5 and 10 day pass bundles of WeWork on-demand\n- Offer valid for one time use only\n\n[]\n\n[Unsubscribe](<%asm_group_unsubscribe_raw_url%>)\n\nIf you unsubscribe, you will not receive any email communication on your WeWork transactions and benefits from the myHQ team [click here](http://url492.myhq.in/wf/unsubscribe?upn=).\n\n[]`,
+ quoted: `[]\n[]\n\nGet more productive days at a better price\n\nHey there,\nYour 5 day bundle is coming to an end.\nTo get access to more productive days at WeWork, upgrade to 10 day pass bundles and save flat 30%.\nBook day pass bundles of 10 at 30% off Use code: BUNDLE30\n\n[Book now](http://url492.myhq.in/ls/click?upn=)\n\nWhy book a day pass bundle?\n\nExplore deep focus zones, fresh micro-brewed coffee, uninterrupted Wi-Fi and paid printing & on-site parking for multiple productive days in a row.\n\n[]\n\n[Book now](http://url492.myhq.in/ls/click?upn=)\n\n*T&Cs apply \n\n- Offer applicable at all locations across India\n- Offer only applicable on 5 and 10 day pass bundles of WeWork on-demand\n- Offer valid for one time use only\n\n[]\n\n[Unsubscribe](<%asm_group_unsubscribe_raw_url%>)\n\nIf you unsubscribe, you will not receive any email communication on your WeWork transactions and benefits from the myHQ team [click here](http://url492.myhq.in/wf/unsubscribe?upn=).\n\n[]`,
+ },
+ in_reply_to: null,
+ message_id: '7baNGWOeR1CfiWUWYlMXow@geopod-ismtpd-2',
+ multipart: true,
+ number_of_attachments: 0,
+ subject: 'Book your favourite workspaces at discounted prices',
+ text_content: {
+ full: 'Get *more productive days* at a better price\n\nHey there,\n\nYour 5 day bundle is coming to an end.\n\nTo get access to more productive days at WeWork, upgrade to 10 day pass bundles and save flat 30%.\n\nBook day pass bundles of 10 at *30% off*\nUse code: *BUNDLE30* **\n\nBook now ( http://url492.myhq.in/ls/click?upn= bundle_upsell_CTA )\n\nWhy book a day pass bundle?\n\nExplore deep focus zones, fresh micro-brewed coffee, uninterrupted Wi-Fi and paid printing & on-site parking for multiple productive days in a row.\n\nBook now ( http://url492.myhq.in/ls/click?upn= bundle_upsell_CTA )\n\n*T&Cs apply\n\n* Offer applicable at all locations across India\n* Offer only applicable on 5 and 10 day pass bundles of WeWork on-demand\n* Offer valid for one time use only\n\nUnsubscribe ( <%asm_group_unsubscribe_raw_url%> )',
+ reply:
+ 'Get *more productive days* at a better price\n\nHey there,\n\nYour 5 day bundle is coming to an end.\n\nTo get access to more productive days at WeWork, upgrade to 10 day pass bundles and save flat 30%.\n\nBook day pass bundles of 10 at *30% off*\nUse code: *BUNDLE30* **\n\nBook now ( http://url492.myhq.in/ls/click?upn= bundle_upsell_CTA )\n\nWhy book a day pass bundle?\n\nExplore deep focus zones, fresh micro-brewed coffee, uninterrupted Wi-Fi and paid printing & on-site parking for multiple productive days in a row.\n\nBook now ( http://url492.myhq.in/ls/click?upn= bundle_upsell_CTA )\n\n*T&Cs apply\n\n* Offer applicable at all locations across India\n* Offer only applicable on 5 and 10 day pass bundles of WeWork on-demand\n* Offer valid for one time use only\n\nUnsubscribe ( <%asm_group_unsubscribe_raw_url%> )',
+ quoted:
+ 'Get *more productive days* at a better price\n\nHey there,\n\nYour 5 day bundle is coming to an end.\n\nTo get access to more productive days at WeWork, upgrade to 10 day pass bundles and save flat 30%.\n\nBook day pass bundles of 10 at *30% off*\nUse code: *BUNDLE30* **\n\nBook now ( http://url492.myhq.in/ls/click?upn= bundle_upsell_CTA )\n\nWhy book a day pass bundle?\n\nExplore deep focus zones, fresh micro-brewed coffee, uninterrupted Wi-Fi and paid printing & on-site parking for multiple productive days in a row.\n\nBook now ( http://url492.myhq.in/ls/click?upn= bundle_upsell_CTA )\n\n*T&Cs apply\n\n* Offer applicable at all locations across India\n* Offer only applicable on 5 and 10 day pass bundles of WeWork on-demand\n* Offer valid for one time use only\n\nUnsubscribe ( <%asm_group_unsubscribe_raw_url%> )',
+ },
+ to: ['shivam@chatwoot.com'],
+ },
+ cc_email: null,
+ bcc_email: null,
+ },
+ sender_type: 'Contact',
+ sender_id: 111254,
+ external_source_ids: {},
+ additional_attributes: {},
+ processed_message_content:
+ 'Get *more productive days* at a better price\n\nHey there,\n\nYour 5 day bundle is coming to an end.\n\nTo get access to more productive days at WeWork, upgrade to 10 day pass bundles and save flat 30%.\n\nBook day pass bundles of 10 at *30% off*\nUse code: *BUNDLE30* **\n\nBook now ( http://url492.myhq.in/ls/click?upn= bundle_upsell_CTA )\n\nWhy book a day pass bundle?\n\nExplore deep focus zones, fresh micro-brewed coffee, uninterrupted Wi-Fi and paid printing & on-site parking for multiple productive days in a row.\n\nBook now ( http://url492.myhq.in/ls/click?upn= bundle_upsell_CTA )\n\n*T&Cs apply\n\n* Offer applicable at all locations across India\n* Offer only applicable on 5 and 10 day pass bundles of WeWork on-demand\n* Offer valid for one time use only\n\nUnsubscribe ( <%asm_group_unsubscribe_raw_url%> )',
+ sentiment: {},
+ conversation: {
+ assignee_id: null,
+ unread_count: 0,
+ last_activity_at: 1733141025,
+ contact_inbox: {
+ source_id: 'contactwwod@myhq.in',
+ },
+ },
+ sender: {
+ additional_attributes: {
+ source_id: 'email:7baNGWOeR1CfiWUWYlMXow@geopod-ismtpd-2',
+ },
+ custom_attributes: {},
+ email: 'contactwwod@myhq.in',
+ id: 111254,
+ identifier: null,
+ name: 'WeWork India',
+ phone_number: null,
+ thumbnail: '',
+ type: 'contact',
+ },
+ },
+ ],
+ { deep: true }
+);
diff --git a/app/javascript/dashboard/components-next/message/fixtures/simpleEmail.js b/app/javascript/dashboard/components-next/message/fixtures/simpleEmail.js
new file mode 100644
index 0000000..c6aaf76
--- /dev/null
+++ b/app/javascript/dashboard/components-next/message/fixtures/simpleEmail.js
@@ -0,0 +1,85 @@
+import camelcaseKeys from 'camelcase-keys';
+
+export default camelcaseKeys(
+ [
+ {
+ id: 60716,
+ content:
+ "Hi Team,\n\nI hope this email finds you well! I wanted to share some updates regarding\nour integration with *Chatwoot* and outline some key features we’ve\nexplored.\n------------------------------\nKey Updates\n\n 1.\n\n *Integration Status*:\n The initial integration with Chatwoot has been successful. We've tested:\n - API connectivity\n - Multi-channel messaging\n - Real-time chat updates\n 2.\n\n *Upcoming Tasks*:\n - Streamlining notification workflows\n - Enhancing webhook reliability\n - Testing team collaboration features\n\n*Note:*\nDon’t forget to check out the automation capabilities in Chatwoot for\nhandling repetitive queries. It can save a ton of time!\n\n------------------------------\nFeatures We Love\n\nHere’s what stood out so far:\n\n - *Unified Inbox*: All customer conversations in one place.\n - *Customizable Workflows*: Tailored to our team’s unique needs.\n - *Integrations*: Works seamlessly with CRM and Slack.\n\n------------------------------\nAction Items For Next Week:\n\n 1. Implement the webhook for *ticket prioritization*.\n 2. Test *CSAT surveys* post-chat sessions.\n 3. Review *analytics dashboard* insights.\n\n------------------------------\nData Snapshot\n\nHere’s a quick overview of our conversation stats this week:\nMetric Value Change (%)\nTotal Conversations 350 +25%\nAverage Response Time 3 minutes -15%\nCSAT Score 92% +10%\n------------------------------\nFeedback\n\n*Do let me know if you have additional feedback or ideas to improve our\nworkflows. Here’s an image of how our Chatwoot dashboard looks with recent\nchanges:*\n\n[image: Chatwoot Dashboard Screenshot]\n------------------------------\n\nLooking forward to hearing your thoughts!\n\nBest regards,\n~ Shivam Mishra",
+ account_id: 51,
+ inbox_id: 991,
+ conversation_id: 46,
+ message_type: 0,
+ created_at: 1733141025,
+ updated_at: '2024-12-02T12:03:45.663Z',
+ private: false,
+ status: 'sent',
+ source_id:
+ 'CAM_Qp+8bpiT5xFL7HmVL4a9RD0TmdYw7Lu6ZV02yu=eyon41DA@mail.gmail.com',
+ content_type: 'incoming_email',
+ content_attributes: {
+ email: {
+ bcc: null,
+ cc: null,
+ content_type:
+ 'multipart/alternative; boundary=0000000000009d889e0628477235',
+ date: '2024-12-02T16:29:39+05:30',
+ from: ['hey@shivam.dev'],
+ html_content: {
+ full: '
Hi Team,
\r\n
\r\nKey Updates
\r\n\r\n
\r\n
\r\nThe initial integration with Chatwoot has been successful. We've tested:\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\nDon’t forget to check out the automation capabilities in Chatwoot for handling repetitive queries. It can save a ton of time!
\r\nFeatures We Love
\r\n\r\n
\r\n
\r\nAction Items
\r\nFor Next Week:
\r\n\r\n
\r\n
\r\nData Snapshot
\r\n\r\n\r\n
\r\n\r\n \r\n\r\n\r\nMetric \r\nValue \r\nChange (%) \r\n\r\n \r\nTotal Conversations \r\n350 \r\n+25% \r\n\r\n \r\nAverage Response Time \r\n3 minutes \r\n-15% \r\n\r\n \r\n\r\nCSAT Score \r\n92% \r\n+10% \r\n
\r\nFeedback
\r\n
\r\n
~ Shivam Mishra
Les journaux d'audit contiennent des événements et des actions associés un système Chatwoot.
", + "LIST": { + "404": "Il n'y a aucun journal d'audit disponible dans ce compte.", + "TITLE": "Gérer les journaux d’audit", + "DESC": "Les journaux d'audit sont des traces pour les événements et les actions dans un système Chatwoot.", + "TABLE_HEADER": { + "ACTIVITY": "User", + "TIME": "Action", + "IP_ADDRESS": "Adresse IP" + } + }, + "API": { + "SUCCESS_MESSAGE": "Les journaux d'audit ont bien été récupérés", + "ERROR_MESSAGE": "Impossible de se connecter au serveur Woot, veuillez réessayer plus tard" + }, + "DEFAULT_USER": "Système", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} a invité {invitee} à rejoindre le compte en tant que {role}", + "EDIT": { + "SELF": "{agentName} a changé sa {attributes} en {values}", + "OTHER": "{agentName} a changé {attributes} de {user} en {values}", + "DELETED": "{agentName} changed {attributes} of a deleted user to {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} s'est connecté", + "SIGN_OUT": "{agentName} s'est déconnecté" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} a supprimé la conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/automation.json b/app/javascript/dashboard/i18n/locale/fr/automation.json new file mode 100644 index 0000000..985f9f3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automatisations", + "DESCRIPTION": "Automation can replace and streamline existing processes that require manual effort, such as adding labels and assigning conversations to the most suitable agent. This allows the team to focus on their strengths while reducing time spent on routine tasks.", + "LEARN_MORE": "Learn more about automation", + "HEADER_BTN_TXT": "Ajouter une règle d'automatisation", + "LOADING": "Récupération des règles d'automatisation", + "ADD": { + "TITLE": "Ajouter une règle d'automatisation", + "SUBMIT": "Créer", + "CANCEL_BUTTON_TEXT": "Annuler", + "FORM": { + "NAME": { + "LABEL": "Nom de la règle", + "PLACEHOLDER": "Entrez le nom de la règle", + "ERROR": "Le nom est requis" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Entrez la description de la règle", + "ERROR": "La description est requise" + }, + "EVENT": { + "LABEL": "Événement", + "PLACEHOLDER": "Veuillez en sélectionner un", + "ERROR": "L'événement est requis" + }, + "CONDITIONS": { + "LABEL": "Condition" + }, + "ACTIONS": { + "LABEL": "Actions" + } + }, + "CONDITION_BUTTON_LABEL": "Ajouter une condition", + "ACTION_BUTTON_LABEL": "Ajouter une action", + "API": { + "SUCCESS_MESSAGE": "Règle d'automatisation ajoutée avec succès", + "ERROR_MESSAGE": "Impossible de créer une règle d'automatisation, veuillez réessayer plus tard" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nom", + "DESCRIPTION": "Description", + "ACTIVE": "Actif", + "CREATED_ON": "Créé le" + }, + "404": "Aucune règle d'automatisation trouvée" + }, + "DELETE": { + "TITLE": "Supprimer la règle d'automatisation", + "SUBMIT": "Supprimer", + "CANCEL_BUTTON_TEXT": "Annuler", + "CONFIRM": { + "TITLE": "Confirmer la suppression", + "MESSAGE": "Êtes-vous sûr de vouloir supprimer ", + "YES": "Oui, supprimer ", + "NO": "Non, Conserver " + }, + "API": { + "SUCCESS_MESSAGE": "Intégration supprimée avec succès", + "ERROR_MESSAGE": "Impossible de créer une règle d'automatisation, veuillez réessayer plus tard" + } + }, + "EDIT": { + "TITLE": "Modifier la règle d'automatisation", + "SUBMIT": "Mettre à jour", + "CANCEL_BUTTON_TEXT": "Annuler", + "API": { + "SUCCESS_MESSAGE": "Règle d'automatisation mise à jour avec succès", + "ERROR_MESSAGE": "Impossible de mettre à jour la règle d'automatisation, veuillez réessayer plus tard" + } + }, + "CLONE": { + "TOOLTIP": "Cloner", + "API": { + "SUCCESS_MESSAGE": "Automation clonée avec succès", + "ERROR_MESSAGE": "Impossible de cloner la règle d'automatisation, veuillez réessayer plus tard" + } + }, + "FORM": { + "EDIT": "Modifier", + "CREATE": "Créer", + "DELETE": "Supprimer", + "CANCEL": "Annuler", + "RESET_MESSAGE": "Changer le type d'événement réinitialisera les conditions et les événements que vous avez ajoutés ci-dessous" + }, + "CONDITION": { + "DELETE_MESSAGE": "Vous devez avoir au moins une condition pour enregistrer", + "CONTACT_CUSTOM_ATTR_LABEL": "Attributs personnalisés des contacts", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Attributs personnalisés de la conversation" + }, + "ACTION": { + "DELETE_MESSAGE": "Vous devez avoir au moins une action pour enregistrer", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Saisissez votre message ici", + "TEAM_DROPDOWN_PLACEHOLDER": "Sélectionner une équipe", + "EMAIL_INPUT_PLACEHOLDER": "Enter email", + "URL_INPUT_PLACEHOLDER": "Enter URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Activer la règle d'automatisation", + "DEACTIVATION_TITLE": "Activer la règle d'automatisation", + "ACTIVATION_DESCRIPTION": "Cette action activera la règle d'automatisation '{automationName}'. Êtes-vous sur de vouloir continuer?", + "DEACTIVATION_DESCRIPTION": "Cette action activera la règle d'automatisation '{automationName}'. Êtes-vous sur de vouloir continuer?", + "ACTIVATION_SUCCESFUL": "Règle d'automatisation activée avec succès", + "DEACTIVATION_SUCCESFUL": "Règle d'automatisation désactivée avec succès", + "ACTIVATION_ERROR": "Impossible d'activer l'automatisation, veuillez réessayer plus tard", + "DEACTIVATION_ERROR": "Impossible de désactiver l'automatisation, veuillez réessayer plus tard", + "CONFIRMATION_LABEL": "Oui", + "CANCEL_LABEL": "Non" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Impossible d'envoyer la pièce jointe, veuillez réessayer", + "LABEL_IDLE": "Charger une pièce jointe", + "LABEL_UPLOADING": "Téléversement...", + "LABEL_UPLOADED": "Téléchargé avec succès", + "LABEL_UPLOAD_FAILED": "Échec de l'envoi" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "La valeur est requise", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "NONE_OPTION": "Aucun", + "EVENTS": { + "CONVERSATION_CREATED": "Conversation créée", + "CONVERSATION_UPDATED": "Conversation mise à jour", + "MESSAGE_CREATED": "Message créé", + "CONVERSATION_RESOLVED": "Conversation terminée", + "CONVERSATION_OPENED": "Conversation ouverte" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assigner à un agent", + "ASSIGN_TEAM": "Assigner une équipe", + "ADD_LABEL": "Ajouter une étiquette", + "REMOVE_LABEL": "Supprimer une étiquette", + "SEND_EMAIL_TO_TEAM": "Envoyer un e-mail à l'équipe", + "SEND_EMAIL_TRANSCRIPT": "Envoyer une transcription par e-mail", + "MUTE_CONVERSATION": "Mettre la conversation en sourdine", + "SNOOZE_CONVERSATION": "Clôturer la conversation", + "RESOLVE_CONVERSATION": "Résoudre la conversation", + "SEND_WEBHOOK_EVENT": "Envoyer un événement Webhook", + "SEND_ATTACHMENT": "Envoyer la pièce jointe", + "SEND_MESSAGE": "Envoyer un message", + "ADD_PRIVATE_NOTE": "Ajouter une note privée", + "CHANGE_PRIORITY": "Modifier la priorité", + "ADD_SLA": "Add SLA", + "OPEN_CONVERSATION": "Ouvrir la conversation" + }, + "MESSAGE_TYPES": { + "INCOMING": "Boite de réception", + "OUTGOING": "Message envoyé" + }, + "PRIORITY_TYPES": { + "NONE": "Aucun", + "LOW": "Faible", + "MEDIUM": "Moyenne", + "HIGH": "Élevé", + "URGENT": "Urgent" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Type de message", + "MESSAGE_CONTAINS": "Le message contient", + "EMAIL": "Courriel", + "INBOX": "Boîte de réception", + "CONVERSATION_LANGUAGE": "Langue de la conversation", + "PHONE_NUMBER": "Numéro de téléphone", + "STATUS": "État", + "BROWSER_LANGUAGE": "Langue du navigateur", + "MAIL_SUBJECT": "Objet de l'email", + "COUNTRY_NAME": "Pays", + "REFERER_LINK": "Lien de référence", + "ASSIGNEE_NAME": "Assignee", + "TEAM_NAME": "Équipes", + "PRIORITY": "Priorité", + "LABELS": "Étiquettes" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/bulkActions.json b/app/javascript/dashboard/i18n/locale/fr/bulkActions.json new file mode 100644 index 0000000..772e00f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} conversations sélectionnées", + "AGENT_SELECT_LABEL": "Sélectionner un agent", + "ASSIGN_CONFIRMATION_LABEL": "Êtes-vous sûr de vouloir assigner {conversationCount} {conversationLabel} à", + "UNASSIGN_CONFIRMATION_LABEL": "Êtes-vous sûr de vouloir retirer l'affectation de {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Retour", + "ASSIGN_LABEL": "Assigner", + "YES": "Oui", + "SEARCH_INPUT_PLACEHOLDER": "Rechercher", + "ASSIGN_AGENT_TOOLTIP": "Assigner un agent", + "ASSIGN_TEAM_TOOLTIP": "Assigner une équipe", + "ASSIGN_SUCCESFUL": "Conversations assignées avec succès.", + "ASSIGN_FAILED": "Échec de l'attribution des conversations, veuillez réessayer.", + "RESOLVE_SUCCESFUL": "Conversations résolues avec succès.", + "RESOLVE_FAILED": "Impossible de résoudre les conversations, veuillez réessayer.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Sont uniquement sélectionnées les conversations visibles sur cette page.", + "AGENT_LIST_LOADING": "Chargement des agents", + "UPDATE": { + "CHANGE_STATUS": "Changer le statut", + "SNOOZE_UNTIL": "Reporter", + "UPDATE_SUCCESFUL": "Le statut de la conversation a été mis à jour avec succès.", + "UPDATE_FAILED": "Impossible de mettre à jour les conversations, veuillez réessayer." + }, + "LABELS": { + "ASSIGN_LABELS": "Assigner une étiquette", + "NO_LABELS_FOUND": "Aucune étiquette trouvée", + "ASSIGN_SELECTED_LABELS": "Assigner les étiquettes sélectionnées", + "ASSIGN_SUCCESFUL": "Étiquettes attribuées avec succès.", + "ASSIGN_FAILED": "Impossible d'attribuer les étiquettes, veuillez réessayer." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Sélectionner une équipe", + "NONE": "Aucun", + "NO_TEAMS_AVAILABLE": "Aucune équipe n'a encore été ajoutée à ce compte.", + "ASSIGN_SELECTED_TEAMS": "Assigner à l'équipe sélectionnée.", + "ASSIGN_SUCCESFUL": "Teams assigned successfully.", + "ASSIGN_FAILED": "Impossible d'assigner l'équipe, veuillez réessayer." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/campaign.json b/app/javascript/dashboard/i18n/locale/fr/campaign.json new file mode 100644 index 0000000..b2bbede --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "Activé", + "DISABLED": "Désactivé" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Envoyé par", + "BOT": "Bot", + "FROM": "de", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "Annuler", + "CREATE_BUTTON_TEXT": "Créer", + "FORM": { + "TITLE": { + "LABEL": "Titre", + "PLACEHOLDER": "Veuillez entrer le titre de la campagne", + "ERROR": "Le titre est requis" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Veuillez entrer le titre de la campagne", + "ERROR": "Le message est obligatoire" + }, + "INBOX": { + "LABEL": "Sélectionner la boîte de réception", + "PLACEHOLDER": "Sélectionner la boîte de réception", + "ERROR": "La boîte de réception est requise" + }, + "SENT_BY": { + "LABEL": "Envoyé par", + "PLACEHOLDER": "Please select sender", + "ERROR": "L'expéditeur est requis" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Veuillez saisir l'URL", + "ERROR": "Veuillez entrer une URL valide" + }, + "TIME_ON_PAGE": { + "LABEL": "Temps sur la page (secondes)", + "PLACEHOLDER": "Veuillez indiquer le temps", + "ERROR": "Le temps sur la page est requis" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "Activer la campagne", + "TRIGGER_ONLY_BUSINESS_HOURS": "Déclencher uniquement pendant les heures d'ouverture" + }, + "BUTTONS": { + "CREATE": "Créer", + "CANCEL": "Annuler" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "Une erreur est survenue, veuillez réessayer." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "Une erreur est survenue, veuillez réessayer." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Terminé", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "Annuler", + "CREATE_BUTTON_TEXT": "Créer", + "FORM": { + "TITLE": { + "LABEL": "Titre", + "PLACEHOLDER": "Veuillez entrer le titre de la campagne", + "ERROR": "Le titre est requis" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Veuillez entrer le titre de la campagne", + "ERROR": "Le message est obligatoire" + }, + "INBOX": { + "LABEL": "Sélectionner la boîte de réception", + "PLACEHOLDER": "Sélectionner la boîte de réception", + "ERROR": "La boîte de réception est requise" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Sélectionnez les étiquettes des clients", + "ERROR": "L'auditoire est requis" + }, + "SCHEDULED_AT": { + "LABEL": "Heure prévue", + "PLACEHOLDER": "Veuillez sélectionner l'heure", + "ERROR": "L'heure programmée est requise" + }, + "BUTTONS": { + "CREATE": "Créer", + "CANCEL": "Annuler" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "Une erreur est survenue, veuillez réessayer." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "Campagnes WhatsApp", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "Aucune campagne WhatsApp n’est disponible", + "SUBTITLE": "Lancez une campagne WhatsApp pour toucher directement vos clients. Envoyez des offres ou faites des annonces en toute simplicité. Cliquez sur “Créer une campagne” pour commencer." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Terminé", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Créer une campagne WhatsApp", + "CANCEL_BUTTON_TEXT": "Annuler", + "CREATE_BUTTON_TEXT": "Créer", + "FORM": { + "TITLE": { + "LABEL": "Titre", + "PLACEHOLDER": "Veuillez entrer le titre de la campagne", + "ERROR": "Le titre est requis" + }, + "INBOX": { + "LABEL": "Sélectionner la boîte de réception", + "PLACEHOLDER": "Sélectionner la boîte de réception", + "ERROR": "La boîte de réception est requise" + }, + "TEMPLATE": { + "LABEL": "Modèle WhatsApp", + "PLACEHOLDER": "Sélectionner un modèle", + "INFO": "Sélectionnez un modèle pour cette campagne.", + "ERROR": "Un modèle est requis", + "PREVIEW_TITLE": "Traiter {templateName}", + "LANGUAGE": "Langue", + "CATEGORY": "Catégorie", + "VARIABLES_LABEL": "Variables", + "VARIABLE_PLACEHOLDER": "Entrez une valeur pour {variable}" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Sélectionnez les étiquettes des clients", + "ERROR": "L'auditoire est requis" + }, + "SCHEDULED_AT": { + "LABEL": "Heure prévue", + "PLACEHOLDER": "Veuillez sélectionner l'heure", + "ERROR": "L'heure programmée est requise" + }, + "BUTTONS": { + "CREATE": "Créer", + "CANCEL": "Annuler" + }, + "API": { + "SUCCESS_MESSAGE": "Campagne WhatsApp créée avec succès", + "ERROR_MESSAGE": "Une erreur est survenue, veuillez réessayer." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Êtes-vous sûr de vouloir supprimer?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "Supprimer", + "API": { + "SUCCESS_MESSAGE": "La campagne a bien été supprimée", + "ERROR_MESSAGE": "Une erreur est survenue, veuillez réessayer." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/fr/cannedMgmt.json new file mode 100644 index 0000000..28c2930 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Réponses standardisées", + "LEARN_MORE": "Learn more about canned responses", + "DESCRIPTION": "Canned Responses are pre-written reply templates that help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a canned response during a conversation. ", + "HEADER_BTN_TXT": "Ajouter une réponse prédéfinie", + "LOADING": "Récupération des réponses prédéfinies...", + "SEARCH_404": "Il n'y a aucun élément correspondant à cette requête.", + "LIST": { + "404": "Il n'y a aucune réponse standardisée disponible dans ce compte.", + "TITLE": "Gérer les réponses standardisées", + "DESC": "Les réponses prédéfinies sont des modèles de réponse prédéfinis qui peuvent être utilisés pour envoyer rapidement des réponses aux conversations.", + "TABLE_HEADER": { + "SHORT_CODE": "Code court", + "CONTENT": "Contenu", + "ACTIONS": "Actions" + } + }, + "ADD": { + "TITLE": "Ajouter une réponse prédéfinie", + "DESC": "Les réponses prédéfinies sont des modèles de réponse prédéfinis qui peuvent être utilisés pour envoyer rapidement des réponses aux conversations.", + "CANCEL_BUTTON_TEXT": "Annuler", + "FORM": { + "SHORT_CODE": { + "LABEL": "Code court", + "PLACEHOLDER": "Veuillez entrer un code court.", + "ERROR": "Le code court est requis." + }, + "CONTENT": { + "LABEL": "Message", + "PLACEHOLDER": "Veuillez écrire le message que vous voulez enregistrer comme modèle à utiliser plus tard.", + "ERROR": "Le message est obligatoire." + }, + "SUBMIT": "Envoyer" + }, + "API": { + "SUCCESS_MESSAGE": "La réponse prédéfinie a été ajoutée.", + "ERROR_MESSAGE": "Impossible de se connecter au serveur Woot, veuillez réessayer plus tard" + } + }, + "EDIT": { + "TITLE": "Éditer la réponse prédéfinie", + "CANCEL_BUTTON_TEXT": "Annuler", + "FORM": { + "SHORT_CODE": { + "LABEL": "Code court", + "PLACEHOLDER": "Veuillez entrer un code court.", + "ERROR": "Le code court est requis." + }, + "CONTENT": { + "LABEL": "Message", + "PLACEHOLDER": "Veuillez écrire le message que vous voulez enregistrer comme modèle à utiliser plus tard.", + "ERROR": "Le message est obligatoire." + }, + "SUBMIT": "Envoyer" + }, + "BUTTON_TEXT": "Modifier", + "API": { + "SUCCESS_MESSAGE": "Réponse prédéfinie mise à jour.", + "ERROR_MESSAGE": "Impossible de se connecter au serveur Woot, veuillez réessayer plus tard" + } + }, + "DELETE": { + "BUTTON_TEXT": "Supprimer", + "API": { + "SUCCESS_MESSAGE": "Réponse prédéfinie supprimée.", + "ERROR_MESSAGE": "Impossible de se connecter au serveur Woot, veuillez réessayer plus tard" + }, + "CONFIRM": { + "TITLE": "Confirmer la suppression", + "MESSAGE": "Êtes-vous sûr de vouloir supprimer ", + "YES": "Oui, supprimer ", + "NO": "Non, Conserver " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/chatlist.json b/app/javascript/dashboard/i18n/locale/fr/chatlist.json new file mode 100644 index 0000000..dcaf268 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Récupération des conversations", + "LOAD_MORE_CONVERSATIONS": "Charger plus de conversations", + "EOF": "Toutes les conversations sont chargées 🎉", + "LIST": { + "404": "Il n'y a aucune conversation active dans ce groupe." + }, + "FAILED_TO_SEND": "Failed to send", + "TAB_HEADING": "Conversations", + "MENTION_HEADING": "Mentions", + "UNATTENDED_HEADING": "Sans suivi", + "SEARCH": { + "INPUT": "Rechercher des personnes, des conversations, des réponses standardisées ..." + }, + "FILTER_ALL": "Tous", + "ASSIGNEE_TYPE_TABS": { + "me": "Les miens", + "unassigned": "Non assigné", + "all": "Tous" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Ouvert" + }, + "resolved": { + "TEXT": "Résolu" + }, + "pending": { + "TEXT": "En attente" + }, + "snoozed": { + "TEXT": "Reporté" + }, + "all": { + "TEXT": "Tous" + } + }, + "VIEW_FILTER": "Voir", + "SORT_TOOLTIP_LABEL": "Trier les conversations", + "CHAT_SORT": { + "STATUS": "État", + "ORDER_BY": "Trier par" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Créé", + "OLDEST": "Créé le:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Dernière activité:", + "ACTIVE": "Dernière activité" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Dernière activité : la plus ancienne en premier" + }, + "last_activity_at_desc": { + "TEXT": "Dernière activité : la plus récente en premier" + }, + "created_at_desc": { + "TEXT": "Créé le : le plus récent en premier" + }, + "created_at_asc": { + "TEXT": "Créé le : le plus ancien en premier" + }, + "priority_desc": { + "TEXT": "Priorité: le plus important en premier" + }, + "priority_asc": { + "TEXT": "Priorité : le moins important en premier" + }, + "waiting_since_asc": { + "TEXT": "Réponse en attente : La plus longue en premier" + }, + "waiting_since_desc": { + "TEXT": "Réponse en attente : La plus courte en premier" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Message image" + }, + "audio": { + "CONTENT": "Message audio" + }, + "video": { + "CONTENT": "Message vidéo" + }, + "file": { + "CONTENT": "Pièce jointe" + }, + "location": { + "CONTENT": "Localisation" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "a partagé une URL" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Trier la conversation", + "DROPDOWN_TITLE": "Trier par", + "ITEMS": { + "LATEST": { + "NAME": "Dernière activité à", + "LABEL": "Dernière activité" + }, + "CREATED_AT": { + "NAME": "Créé le", + "LABEL": "Créé le" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Dernier message utilisateur à", + "LABEL": "Dernier message" + } + } + }, + "RECEIVED_VIA_EMAIL": "Reçu par courriel", + "VIEW_TWEET_IN_TWITTER": "Voir le tweet sur Twitter", + "REPLY_TO_TWEET": "Répondre à ce tweet", + "LINK_TO_STORY": "Aller à l'histoire instagram", + "SENT": "Envoyé avec succès", + "READ": "Lu", + "DELIVERED": "Reçu", + "NO_MESSAGES": "Pas de messages", + "NO_CONTENT": "Aucun contenu disponible", + "HIDE_QUOTED_TEXT": "Masquer le texte cité", + "SHOW_QUOTED_TEXT": "Afficher le texte cité", + "MESSAGE_READ": "Lu", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/companies.json b/app/javascript/dashboard/i18n/locale/fr/companies.json new file mode 100644 index 0000000..3f9c1fc --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Trier par", + "OPTIONS": { + "NAME": "Nom", + "DOMAIN": "Domaine", + "CREATED_AT": "Créé le", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Décroissant" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/components.json b/app/javascript/dashboard/i18n/locale/fr/components.json new file mode 100644 index 0000000..49535ef --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} of {totalPages} pages" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "Aucun résultat trouvé.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} more" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "Aucun résultat trouvé.", + "SEARCHING": "Recherche en cours..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Annuler", + "CONFIRM": "Confirmer" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Search country", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Veuillez sélectionner un code d'appel dans la liste" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "L'auteur n'est pas disponible" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "En savoir plus", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Heures", + "DAYS": "Jours", + "PLACEHOLDER": "Entrez la durée" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Bientôt disponible !" + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/contact.json b/app/javascript/dashboard/i18n/locale/fr/contact.json new file mode 100644 index 0000000..22684d6 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Non disponible", + "EMAIL_ADDRESS": "Adresse de courriel", + "PHONE_NUMBER": "Numéro de téléphone", + "IDENTIFIER": "Identifier", + "COPY_SUCCESSFUL": "Copié dans le presse-papiers avec succès", + "COMPANY": "Société", + "LOCATION": "Localisation", + "BROWSER_LANGUAGE": "Langue du navigateur", + "CONVERSATION_TITLE": "Détails de la conversation", + "VIEW_PROFILE": "Voir le profil", + "BROWSER": "Navigateur", + "OS": "Système d'exploitation", + "INITIATED_FROM": "Initié depuis", + "INITIATED_AT": "Initié à", + "IP_ADDRESS": "Adresse IP", + "CREATED_AT_LABEL": "Créé", + "NEW_MESSAGE": "Nouveau message", + "CALL": "Appel", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choisir une boîte de réception vocale" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "Il n'y a aucune conversation précédente associée à ce contact.", + "TITLE": "Conversations précédentes" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Libellés des contacts", + "ERROR": "Impossible de mettre à jour les étiquettes" + }, + "CONVERSATION": { + "TITLE": "Étiquettes de conversation", + "ADD_BUTTON": "Ajouter des étiquettes" + }, + "LABEL_SELECT": { + "TITLE": "Ajouter une étiquette", + "PLACEHOLDER": "Rechercher des étiquettes", + "NO_RESULT": "Aucune étiquette trouvée", + "CREATE_LABEL": "Créer une nouvelle étiquette" + } + }, + "MERGE_CONTACT": "Fusionner le contact", + "CONTACT_ACTIONS": "Actions du contact", + "MUTE_CONTACT": "Block Contact", + "UNMUTE_CONTACT": "Unblock Contact", + "MUTED_SUCCESS": "This contact is blocked successfully. You will not be notified of any future conversations.", + "UNMUTED_SUCCESS": "This contact is unblocked successfully.", + "SEND_TRANSCRIPT": "Envoyer la transcription", + "EDIT_LABEL": "Modifier", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Attributs personnalisés", + "CONTACT_LABELS": "Libellés des contacts", + "PREVIOUS_CONVERSATIONS": "Conversations précédentes", + "NO_RECORDS_FOUND": "Aucun attribut trouvé" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Modifier le contact", + "TITLE": "Modifier le contact", + "DESC": "Modifier les informations de contact" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Supprimer le contact", + "TITLE": "Supprimer le contact", + "DESC": "Supprimer les données de contact", + "CONFIRM": { + "TITLE": "Confirmer la suppression", + "MESSAGE": "Êtes-vous sûr de vouloir supprimer ", + "YES": "Oui, supprimer", + "NO": "Non, Conserver" + }, + "API": { + "SUCCESS_MESSAGE": "Contact supprimé avec succès", + "ERROR_MESSAGE": "Impossible de supprimer le contact. Veuillez réessayer plus tard." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Envoyer", + "CANCEL": "Annuler", + "AVATAR": { + "LABEL": "Avatar du contact" + }, + "NAME": { + "PLACEHOLDER": "Entrez le nom complet du contact", + "LABEL": "Nom complet" + }, + "BIO": { + "PLACEHOLDER": "Entrez la biographie du contact", + "LABEL": "Biographie" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Entrez l'adresse de courriel du contact", + "LABEL": "Adresse de courriel", + "DUPLICATE": "Cette adresse de courriel est déjà utilisée pour un autre contact.", + "ERROR": "Veuillez saisir une adresse de courriel valide." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Entrez le numéro de téléphone du contact", + "LABEL": "Numéro de téléphone", + "HELP": "Le numéro de téléphone doit être au format E.164. Ex. : +1415555555 [+][code pays][code régional][numéro de téléphone local]", + "ERROR": "Le numéro de téléphone doit être soit vide soit au format E.164", + "DIAL_CODE_ERROR": "Veuillez sélectionner un code d'appel dans la liste", + "DUPLICATE": "Ce numéro de téléphone est utilisé par un autre contact." + }, + "LOCATION": { + "PLACEHOLDER": "Entrez l'emplacement du contact", + "LABEL": "Localisation" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Entrez le nom de la société", + "LABEL": "Nom de la société" + }, + "COUNTRY": { + "PLACEHOLDER": "Entrez le nom du pays", + "LABEL": "Nom du pays", + "SELECT_PLACEHOLDER": "Sélectionner", + "REMOVE": "Supprimer", + "SELECT_COUNTRY": "Sélectionner un pays" + }, + "CITY": { + "PLACEHOLDER": "Entrez le nom de la ville", + "LABEL": "Nom de la Ville" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Entrez le nom d'utilisateur Facebook", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Entrez le nom d'utilisateur Twitter", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Entrez le nom d'utilisateur LinkedIn", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Entrez le nom d'utilisateur Github", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Avatar du contact supprimé avec succès", + "ERROR_MESSAGE": "Impossible de supprimer l'avatar du contact. Veuillez réessayer plus tard." + } + }, + "SUCCESS_MESSAGE": "Contact enregistré avec succès", + "ERROR_MESSAGE": "Une erreur est survenue, veuillez réessayer" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Nouvelle conversation", + "TITLE": "Nouvelle conversation", + "DESC": "Commencez une nouvelle conversation en envoyant un nouveau message.", + "NO_INBOX": "Impossible de trouver une boîte de réception pour lancer une nouvelle conversation avec ce contact.", + "FORM": { + "TO": { + "LABEL": "À" + }, + "INBOX": { + "LABEL": "Boîte de réception", + "PLACEHOLDER": "Choisir la boîte de réception source", + "ERROR": "Sélectionner une boîte de réception" + }, + "SUBJECT": { + "LABEL": "Objet", + "PLACEHOLDER": "Objet", + "ERROR": "Le sujet ne peut pas être vide" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Ecrivez votre message ici", + "ERROR": "Le message ne peut être vide" + }, + "ATTACHMENTS": { + "SELECT": "Choisir les fichiers", + "HELP_TEXT": "Glissez et déposez des fichiers ici ou choisissez les fichiers à joindre" + }, + "SUBMIT": "Envoyer un message", + "CANCEL": "Annuler", + "SUCCESS_MESSAGE": "Message envoyé !", + "GO_TO_CONVERSATION": "Voir", + "ERROR_MESSAGE": "Impossible d'envoyer ! Veuillez réessayer" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Comptes réseaux sociaux" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Ajouter un attribut personnalisé", + "COPY_SUCCESSFUL": "Copié dans le presse-papiers avec succès", + "SHOW_MORE": "Show all attributes", + "SHOW_LESS": "Show less attributes", + "ACTIONS": { + "COPY": "Copier l'attribut", + "DELETE": "Supprimer l'attribut", + "EDIT": "Modifier l'attribut" + }, + "ADD": { + "TITLE": "Créer un attribut personnalisé", + "DESC": "Ajouter des informations personnalisées à ce contact." + }, + "FORM": { + "CREATE": "Ajouter un attribut", + "CANCEL": "Annuler", + "NAME": { + "LABEL": "Nom de l'attribut personnalisé", + "PLACEHOLDER": "Ex. : id shopify", + "ERROR": "Nom de l'attribut personnalisé invalide" + }, + "VALUE": { + "LABEL": "Valeur de l'attribut", + "PLACEHOLDER": "Ex.: 11901 " + }, + "ADD": { + "TITLE": "Créer un nouvel attribut ", + "SUCCESS": "Attribut ajouté avec succès", + "ERROR": "Impossible d'ajouter l'attribut. Veuillez réessayer plus tard" + }, + "UPDATE": { + "SUCCESS": "Attribut mis à jour avec succès", + "ERROR": "Impossible de mettre à jour l'attribut. Veuillez réessayer plus tard" + }, + "DELETE": { + "SUCCESS": "Attribut supprimé avec succès", + "ERROR": "Impossible de supprimer l'attribut. Veuillez réessayer plus tard" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Ajouter des attributs", + "PLACEHOLDER": "Rechercher des attributs", + "NO_RESULT": "Aucun attribut trouvé" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Sélectionner une valeur", + "SEARCH_INPUT_PLACEHOLDER": "Valeur de recherche", + "NO_RESULT": "Aucun résultat trouvé" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Une valeur valide est requise", + "INVALID_URL": "URL invalide", + "INVALID_INPUT": "Entrée invalide" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Fusionner les contacts", + "DESCRIPTION": "Fusionner les contacts pour combiner deux profils en un, y compris tous les attributs et conversations. En cas de conflit, les attributs du contact principal auront priorité.", + "PRIMARY": { + "TITLE": "Contact principal", + "HELP_LABEL": "A supprimer" + }, + "PARENT": { + "TITLE": "Contact à fusionner", + "PLACEHOLDER": "Rechercher un contact", + "HELP_LABEL": "À conserver" + }, + "SUMMARY": { + "TITLE": "Résumé", + "DELETE_WARNING": "Le contact de {primaryContactName} sera supprimé.", + "ATTRIBUTE_WARNING": "Les coordonnées de {primaryContactName} seront copiées vers {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": " Fusionner les contacts", + "CANCEL": "Annuler", + "CHILD_CONTACT": { + "ERROR": "Sélectionner un contact enfant à fusionner" + }, + "SUCCESS_MESSAGE": "Contact fusionné avec succès", + "ERROR_MESSAGE": "Impossible de fusionner les contacts, essayez à nouveau !" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Contacts", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "Contacts actifs", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "Message", + "SEND_MESSAGE": "Envoyer un message", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "Contacts" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Add contact", + "EXPORT_CONTACT": "Export contacts", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Save contact", + "EMAIL_ADDRESS_DUPLICATE": "Cette adresse de courriel est déjà utilisée pour un autre contact.", + "PHONE_NUMBER_DUPLICATE": "Ce numéro de téléphone est utilisé par un autre contact.", + "SUCCESS_MESSAGE": "Contact enregistré avec succès", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "This contact is unblocked successfully", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Import contacts", + "DESCRIPTION": "Importer des contacts via un fichier CSV.", + "DOWNLOAD_LABEL": "Télécharger un exemple de CSV.", + "LABEL": "Fichier CSV:", + "CHOOSE_FILE": "Choose file", + "CHANGE": "Modifier", + "CANCEL": "Annuler", + "IMPORT": "Importer", + "SUCCESS_MESSAGE": "Vous serez notifié par e-mail lorsque l'importation sera terminée.", + "ERROR_MESSAGE": "Une erreur est survenue, veuillez réessayer" + }, + "EXPORT_CONTACT": { + "TITLE": "Export contacts", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Exporter", + "SUCCESS_MESSAGE": "Export is in progress, You will be notified via email when export file is ready to dowanlod.", + "ERROR_MESSAGE": "Une erreur est survenue, veuillez réessayer" + }, + "SORT_BY": { + "LABEL": "Trier par", + "OPTIONS": { + "NAME": "Nom", + "EMAIL": "Courriel", + "PHONE_NUMBER": "Numéro de téléphone", + "COMPANY": "Société", + "COUNTRY": "Pays", + "CITY": "Ville", + "LAST_ACTIVITY": "Dernière activité", + "CREATED_AT": "Créé le" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Voulez-vous enregistrer ce filtre ?", + "CONFIRM": "Enregistrer le filtre", + "LABEL": "Nom", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "Confirmer la suppression", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "Oui, supprimer", + "CANCEL": "No, Cancel", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "Nom", + "EMAIL": "Courriel", + "PHONE_NUMBER": "Numéro de téléphone", + "IDENTIFIER": "Identifiant", + "COUNTRY": "Pays", + "CITY": "Ville", + "CREATED_AT": "Créé le", + "LAST_ACTIVITY": "Dernière activité", + "REFERER_LINK": "Lien de référence", + "BLOCKED": "Blocked", + "BLOCKED_TRUE": "Vrai", + "BLOCKED_FALSE": "Faux", + "BUTTONS": { + "CLEAR_FILTERS": "Effacer les filtres", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "Appliquer les filtres", + "ADD_FILTER": "Ajouter un filtre" + }, + "TITLE": "Filtrer les contacts", + "EDIT_SEGMENT": "Modifier le segment", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Effacer les filtres" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "Voir les détails", + "EDIT_DETAILS_FORM": { + "TITLE": "Modifier les informations de contact", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "Cette adresse de courriel est déjà utilisée pour un autre contact." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "Ce numéro de téléphone est utilisé par un autre contact." + }, + "CITY": { + "PLACEHOLDER": "Entrez le nom de la ville" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Entrez le nom de la société" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "Cette action est permanente et irréversible.", + "BUTTON": "Supprimer maintenant" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "Supprimer le contact", + "DELETE_DIALOG": { + "TITLE": "Confirmer la suppression", + "DESCRIPTION": "Êtes-vous sûr de vouloir supprimer ce contact ?", + "CONFIRM": "Oui, supprimer", + "API": { + "SUCCESS_MESSAGE": "Contact supprimé avec succès", + "ERROR_MESSAGE": "Impossible de supprimer le contact. Veuillez réessayer plus tard." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatar supprimé avec succès", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributs", + "HISTORY": "History", + "NOTES": "Notes", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "Il n'y a aucune conversation précédente associée à ce contact" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "Oui", + "NO": "Non", + "TRIGGER": { + "SELECT": "Sélectionner une valeur", + "INPUT": "Enter value" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "Une valeur valide est requise", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "URL invalide", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "Aucun attribut trouvé", + "API": { + "SUCCESS_MESSAGE": "Attribut mis à jour avec succès", + "DELETE_SUCCESS_MESSAGE": "Attribut supprimé avec succès", + "UPDATE_ERROR": "Impossible de mettre à jour l'attribut. Veuillez réessayer plus tard", + "DELETE_ERROR": "Impossible de supprimer l'attribut. Veuillez réessayer plus tard" + } + }, + "MERGE": { + "TITLE": "Fusionner le contact", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Contact principal", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "A supprimer", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Rechercher un contact", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Contact fusionné avec succès", + "ERROR_MESSAGE": "Impossible de fusionner les contacts, essayez à nouveau !", + "IS_SEARCHING": "Recherche en cours...", + "BUTTONS": { + "CANCEL": "Annuler", + "CONFIRM": "Fusionner le contact" + } + }, + "NOTES": { + "PLACEHOLDER": "Ajouter une note", + "WROTE": "wrote", + "YOU": "Vous", + "SAVE": "Save note", + "ADD_NOTE": "Add contact note", + "EXPAND": "Développer", + "COLLAPSE": "Réduire", + "NO_NOTES": "Pas de notes, vous pouvez en ajouter depuis la page des détails du contact.", + "EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "No contacts found in this account", + "SUBTITLE": "Start adding new contacts by clicking on the button below", + "BUTTON_LABEL": "Add contact", + "SEARCH_EMPTY_STATE_TITLE": "Aucun contact ne correspond à votre recherche 🔍", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "Aucun contact n'est actif pour le moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Assigner des étiquettes", + "ASSIGN_LABELS_SUCCESS": "Étiquettes attribuées avec succès.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "Supprimer", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Supprimer le contact" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "Voir", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "À:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Objet :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "Cci:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "Cci" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Ecrivez votre message ici..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Variables", + "BACK": "Retour", + "SEND_MESSAGE": "Envoyer un message" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Retour", + "SEND_MESSAGE": "Envoyer un message" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/contactFilters.json b/app/javascript/dashboard/i18n/locale/fr/contactFilters.json new file mode 100644 index 0000000..414ea94 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filtrer les Contacts", + "SUBTITLE": "Ajouter des filtres ci-dessous et appuyez sur « Soumettre » pour filtrer les contacts.", + "EDIT_CUSTOM_SEGMENT": "Modifier le segment", + "CUSTOM_VIEWS_SUBTITLE": "Ajoutez ou supprimez des filtres et mettez votre segment à jour.", + "ADD_NEW_FILTER": "Ajouter un filtre", + "CLEAR_ALL_FILTERS": "Effacer Tous les Filtres", + "FILTER_DELETE_ERROR": "Vous devriez avoir au moins un filtre afin d'enregistrer", + "SUBMIT_BUTTON_LABEL": "Envoyer", + "UPDATE_BUTTON_LABEL": "Mettre à jour le segment", + "CANCEL_BUTTON_LABEL": "Annuler", + "CLEAR_BUTTON_LABEL": "Effacer les filtres", + "EMPTY_VALUE_ERROR": "La valeur est requise", + "SEGMENT_LABEL": "Nom du segment", + "SEGMENT_QUERY_LABEL": "Requête de segment", + "TOOLTIP_LABEL": "Filtrer les contacts", + "QUERY_DROPDOWN_LABELS": { + "AND": "ET", + "OR": "OU" + }, + "OPERATOR_LABELS": { + "equal_to": "Égal à", + "not_equal_to": "Pas égal à", + "contains": "Contient", + "does_not_contain": "Ne contient pas", + "is_present": "Est présent", + "is_not_present": "N'est pas présent", + "is_greater_than": "Est plus grand que", + "is_lesser_than": "Est inférieur à", + "days_before": "Est x jours avant" + }, + "ERRORS": { + "VALUE_REQUIRED": "La valeur est requise" + }, + "ATTRIBUTES": { + "NAME": "Nom", + "EMAIL": "Courriel", + "PHONE_NUMBER": "Numéro de téléphone", + "IDENTIFIER": "Identifiant", + "CITY": "Ville", + "COUNTRY": "Pays", + "CUSTOM_ATTRIBUTE_LIST": "Liste", + "CUSTOM_ATTRIBUTE_TEXT": "Texte", + "CUSTOM_ATTRIBUTE_NUMBER": "Nombre", + "CUSTOM_ATTRIBUTE_LINK": "Lien", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Case à cocher", + "CREATED_AT": "Créé le", + "LAST_ACTIVITY": "Dernière activité", + "REFERER_LINK": "Lien de référence", + "BLOCKED": "Blocked", + "LABELS": "Étiquettes" + }, + "GROUPS": { + "STANDARD_FILTERS": "Filtres standards", + "ADDITIONAL_FILTERS": "Filtres supplémentaires", + "CUSTOM_ATTRIBUTES": "Attributs personnalisés" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/contentTemplates.json b/app/javascript/dashboard/i18n/locale/fr/contentTemplates.json new file mode 100644 index 0000000..a5ca74d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Modèles Twilio", + "SUBTITLE": "Sélectionnez le modèle Twilio que vous souhaitez envoyer", + "TEMPLATE_SELECTED_SUBTITLE": "Configurer le modèle : {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Rechercher des modèles", + "NO_TEMPLATES_FOUND": "Aucun modèle trouvé pour", + "NO_CONTENT": "No content", + "HEADER": "En-tête", + "BODY": "Corps", + "FOOTER": "Pied de page", + "BUTTONS": "Boutons", + "CATEGORY": "Catégorie", + "MEDIA_CONTENT": "Contenu média", + "MEDIA_CONTENT_FALLBACK": "contenu multimédia", + "NO_TEMPLATES_AVAILABLE": "Aucun modèle Twilio disponible. Cliquez sur Actualiser pour synchroniser les modèles de Twilio.", + "REFRESH_BUTTON": "Rafraîchir les modèles", + "REFRESH_SUCCESS": "Mise à jour des modèles. La mise à jour peut prendre quelques minutes.", + "REFRESH_ERROR": "Échec de la mise à jour des modèles. Veuillez réessayer.", + "LABELS": { + "LANGUAGE": "Langue", + "TEMPLATE_BODY": "Corps du modèle", + "CATEGORY": "Catégorie" + }, + "TYPES": { + "MEDIA": "Média", + "QUICK_REPLY": "Réponse rapide", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Texte" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Langue", + "CATEGORY": "Catégorie", + "VARIABLE_PLACEHOLDER": "Entrez la valeur de {variable}", + "GO_BACK_LABEL": "Retour", + "SEND_MESSAGE_LABEL": "Envoyer un message", + "FORM_ERROR_MESSAGE": "Veuillez remplir toutes les variables avant d'envoyer", + "MEDIA_HEADER_LABEL": "En-tête {type}", + "MEDIA_URL_LABEL": "Saisissez l'URL complète du média", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Précédent", + "SEND_MESSAGE_BUTTON": "Envoyer un message" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/conversation.json b/app/javascript/dashboard/i18n/locale/fr/conversation.json new file mode 100644 index 0000000..da74fce --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Veuillez sélectionner une conversation à partir du panneau de gauche", + "CSAT_REPLY_MESSAGE": "Veuillez évaluer la conversation", + "404": "Désolé, nous ne pouvons pas trouver la conversation. Veuillez réessayer", + "SWITCH_VIEW_LAYOUT": "Changer la mise en page", + "DASHBOARD_APP_TAB_MESSAGES": "Messages", + "UNVERIFIED_SESSION": "L'identité de cet utilisateur n'est pas vérifiée", + "NO_MESSAGE_1": "Oh oh ! Il semble qu'il n'y ait aucun message de clients dans votre boîte de réception.", + "NO_MESSAGE_2": " pour envoyer un message à votre page !", + "NO_INBOX_1": "Oh ! On dirait que vous n'avez pas encore ajouté de boîte de réception.", + "NO_INBOX_2": " pour commencer", + "NO_INBOX_AGENT": "Oh Oh ! Il semble que vous ne faites parti d'aucune boîte de réception. Veuillez contacter votre administrateur", + "SEARCH_MESSAGES": "Rechercher des messages dans les conversations", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "pour ouvrir le menu de commande", + "KEYBOARD_SHORTCUTS": "pour afficher les raccourcis clavier" + }, + "SEARCH": { + "TITLE": "Rechercher des messages", + "RESULT_TITLE": "Résultats de recherche", + "LOADING_MESSAGE": "Traitement des données ...", + "PLACEHOLDER": "Saisissez n'importe quel texte pour rechercher des messages", + "NO_MATCHING_RESULTS": "Aucun résultat trouvé." + }, + "UNREAD_MESSAGES": "Messages non lus", + "UNREAD_MESSAGE": "Message non lu", + "CLICK_HERE": "Cliquez ici", + "LOADING_INBOXES": "Chargement des boîtes de réception", + "LOADING_CONVERSATIONS": "Chargement des conversations", + "CANNOT_REPLY": "Vous ne pouvez pas répondre en raison de", + "24_HOURS_WINDOW": "Restriction de fenêtre de message de 24 heures", + "48_HOURS_WINDOW": "Restriction de fenêtre de message de 48 heures", + "API_HOURS_WINDOW": "Vous ne pouvez répondre à cette conversation que dans un délai de {hours} heures", + "NOT_ASSIGNED_TO_YOU": "Cette conversation ne vous est pas assignée. Voulez-vous vous assigner cette conversation ?", + "ASSIGN_TO_ME": "M’assigner la conversation", + "BOT_HANDOFF_MESSAGE": "Vous répondez à une conversation actuellement gérée par un assistant ou un bot.", + "BOT_HANDOFF_ACTION": "Ouvrir et m’attribuer", + "BOT_HANDOFF_REOPEN_ACTION": "Marquer la conversation comme ouverte", + "BOT_HANDOFF_SUCCESS": "La conversation vous a été attribuée", + "BOT_HANDOFF_ERROR": "Impossible de reprendre la conversation. Veuillez réessayer.", + "TWILIO_WHATSAPP_CAN_REPLY": "Vous pouvez seulement répondre à cette conversation en utilisant un modèle de message en raison de", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "Restriction de fenêtre de message de 24 heures", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "Ce compte Instagram a été migré vers la nouvelle boîte de réception du canal Instagram. Tous les nouveaux messages y apparaîtront. Vous ne pourrez plus envoyer de messages depuis cette conversation.", + "REPLYING_TO": "Vous répondez à :", + "REMOVE_SELECTION": "Supprimer la sélection", + "DOWNLOAD": "Télécharger", + "UNKNOWN_FILE_TYPE": "Fichier inconnu", + "SAVE_CONTACT": "Save Contact", + "NO_CONTENT": "No content to display", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} has shared a contact", + "LOCATION": "{sender} has shared a location", + "FILE": "{sender} has shared a file", + "MEETING": "{sender} a démarré une réunion" + }, + "UPLOADING_ATTACHMENTS": "Envoi des pièces jointes...", + "REPLIED_TO_STORY": "A répondu à votre histoire", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "Ce message n'est pas pris en charge. Vous pouvez voir ce message sur l'application Facebook Messenger.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "Ce message n'est pas pris en charge. Vous pouvez voir ce message sur l'application Instagram.", + "SUCCESS_DELETE_MESSAGE": "Le message a bien été supprimé", + "FAIL_DELETE_MESSSAGE": "Impossible de supprimer le message ! Veuillez réessayez", + "NO_RESPONSE": "Pas de réponse", + "RESPONSE": "Response", + "RATING_TITLE": "Note", + "FEEDBACK_TITLE": "Commentaires", + "REPLY_MESSAGE_NOT_FOUND": "Message indisponible", + "CARD": { + "SHOW_LABELS": "Afficher les étiquettes", + "HIDE_LABELS": "Masquer les étiquettes" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Appel entrant", + "OUTGOING_CALL": "Appel sortant", + "CALL_IN_PROGRESS": "Appel en cours", + "NO_ANSWER": "Pas de réponse", + "MISSED_CALL": "Appel manqué", + "CALL_ENDED": "Appel terminé", + "NOT_ANSWERED_YET": "Pas encore répondu", + "THEY_ANSWERED": "Il a répondu", + "YOU_ANSWERED": "Vous avez répondu" + }, + "HEADER": { + "RESOLVE_ACTION": "Résoudre", + "REOPEN_ACTION": "Ré-ouvrir", + "OPEN_ACTION": "Ouvert", + "MORE_ACTIONS": "Plus d'actions", + "OPEN": "Plus", + "CLOSE": "Fermer", + "DETAILS": "détails", + "SNOOZED_UNTIL": "Reporter jusqu'à", + "SNOOZED_UNTIL_TOMORROW": "Reporté jusqu'à demain", + "SNOOZED_UNTIL_NEXT_WEEK": "Reporté jusqu'à la semaine prochaine", + "SNOOZED_UNTIL_NEXT_REPLY": "Reporté jusqu'à la prochaine réponse", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "manqué", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Marquer comme en attente", + "SNOOZE_UNTIL": "Reporter", + "SNOOZE": { + "TITLE": "Reporter jusqu'à", + "NEXT_REPLY": "Réponse suivante", + "TOMORROW": "Demain", + "NEXT_WEEK": "Semaine prochaine" + } + }, + "MENTION": { + "AGENTS": "Agents", + "TEAMS": "Équipes" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Reporter jusqu'à", + "APPLY": "Reporter", + "CANCEL": "Annuler" + }, + "PRIORITY": { + "TITLE": "Priorité", + "OPTIONS": { + "NONE": "Aucun", + "URGENT": "Urgent", + "HIGH": "Élevé", + "MEDIUM": "Moyenne", + "LOW": "Faible" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "Aucun", + "INPUT_PLACEHOLDER": "Sélectionner la priorité", + "NO_RESULTS": "Aucun résultat trouvé", + "SUCCESSFUL": "La priorité de la conversation id {conversationId} a été changée en {priority}", + "FAILED": "Impossible de modifier la priorité. Veuillez réessayer." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Supprimer la conversation #{conversationId}", + "DESCRIPTION": "Êtes-vous sûr de vouloir supprimer cette conversation ?", + "CONFIRM": "Supprimer" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Marquer comme en attente", + "RESOLVED": "Marquer comme résolu", + "MARK_AS_UNREAD": "Marquer comme non lu", + "MARK_AS_READ": "Marquer comme lu", + "REOPEN": "Reprendre la conversation", + "SNOOZE": { + "TITLE": "Reporter", + "NEXT_REPLY": "Jusqu’à la prochaine réponse", + "TOMORROW": "Jusqu'à demain", + "NEXT_WEEK": "Jusqu'à la semaine prochaine" + }, + "ASSIGN_AGENT": "Assigner un agent", + "ASSIGN_LABEL": "Assigner une étiquette", + "AGENTS_LOADING": "Chargement des agents...", + "ASSIGN_TEAM": "Assigner une équipe", + "DELETE": "Supprimer la conversation", + "OPEN_IN_NEW_TAB": "Ouvrir dans un nouvel onglet", + "COPY_LINK": "Copier le lien de la conversation", + "COPY_LINK_SUCCESS": "Le lien de conversation a été copié dans le presse-papiers", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Conversation id {conversationId} assignée à \"{agentName}\"", + "FAILED": "Impossible d'assigner l'agent. Veuillez réessayer." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Impossible d'assigner l'étiquette. Veuillez réessayer." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Équipe assignée «{team}» à la conversation id {conversationId}", + "FAILED": "Impossible d'assigner l'équipe. Veuillez réessayer." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Signature du message", + "ENABLE_SIGN_TOOLTIP": "Activer la signature", + "DISABLE_SIGN_TOOLTIP": "Désactiver la signature", + "MSG_INPUT": "Maj + entrée pour une nouvelle ligne. Commencez par '/' pour sélectionner une réponse standardisée.", + "PRIVATE_MSG_INPUT": "Maj + entrée pour une nouvelle ligne. Cela ne sera visible que par les agents", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "La signature du message n'est pas configurée, veuillez le configurer dans les paramètres du profil.", + "CLICK_HERE": "Cliquez ici pour mettre à jour", + "WHATSAPP_TEMPLATES": "Modèles WhatsApp" + }, + "REPLYBOX": { + "REPLY": "Répondre", + "PRIVATE_NOTE": "Note privée", + "SEND": "Envoyer", + "CREATE": "Ajouter une note", + "INSERT_READ_MORE": "En savoir plus", + "DISMISS_REPLY": "Annuler la réponse", + "REPLYING_TO": "Répondre à:", + "TIP_EMOJI_ICON": "Montrer le sélecteur d'émoji", + "TIP_ATTACH_ICON": "Joindre des fichiers", + "TIP_AUDIORECORDER_ICON": "Enregistrer l'audio", + "TIP_AUDIORECORDER_PERMISSION": "Autoriser l'accès à l'audio", + "TIP_AUDIORECORDER_ERROR": "Impossible d'ouvrir l'audio", + "DRAG_DROP": "Glissez et déposez ici pour lier", + "START_AUDIO_RECORDING": "Démarrer l'enregistrement audio", + "STOP_AUDIO_RECORDING": "Arrêter l'enregistrement audio", + "": "", + "EMAIL_HEAD": { + "TO": "À", + "ADD_BCC": "Ajouter cci", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "E-mails séparés par des virgules", + "ERROR": "Veuillez saisir une adresse de courriel valide" + }, + "BCC": { + "LABEL": "CCI", + "PLACEHOLDER": "E-mails séparés par des virgules", + "ERROR": "Veuillez saisir une adresse de courriel valide" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Variables indéfinies", + "MESSAGE": "Vous avez {undefinedVariablesCount} variables indéfinies dans votre message : {undefinedVariables}. Voulez-vous quand même envoyer le message ?", + "CONFIRM": { + "YES": "Envoyer", + "CANCEL": "Annuler" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "Note privée : uniquement visible par vous et votre équipe", + "CHANGE_STATUS": "Statut de la conversation modifié", + "CHANGE_STATUS_FAILED": "Le changement de statut de la conversation a échoué", + "CHANGE_AGENT": "Responsable de la conversation modifié", + "CHANGE_AGENT_FAILED": "Échec du changement de responsable", + "ASSIGN_LABEL_SUCCESFUL": "Étiquette attribuée avec succès", + "ASSIGN_LABEL_FAILED": "Échec de l'attribution de l'étiquette", + "CHANGE_TEAM": "L'équipe de conversation a été modifiée", + "SUCCESS_DELETE_CONVERSATION": "Conversation supprimée avec succès", + "FAIL_DELETE_CONVERSATION": "Impossible de supprimer la conversation ! Veuillez réessayer", + "FILE_SIZE_LIMIT": "Le fichier dépasse la limite de {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} pour les pièces jointes", + "MESSAGE_ERROR": "Impossible d'envoyer ce message, veuillez réessayer plus tard", + "SENT_BY": "Envoyé par:", + "BOT": "Bot", + "SEND_FAILED": "Impossible d'envoyer le message ! Réessayez", + "TRY_AGAIN": "Réessayer", + "ASSIGNMENT": { + "SELECT_AGENT": "Sélectionner un agent", + "REMOVE": "Supprimer", + "ASSIGN": "Assigner" + }, + "CONTEXT_MENU": { + "COPY": "Copier", + "REPLY_TO": "Répondre à ce message", + "DELETE": "Supprimer", + "CREATE_A_CANNED_RESPONSE": "Ajouter aux réponses préenregistrées", + "TRANSLATE": "Traduire", + "COPY_PERMALINK": "Copier le lien vers le message", + "LINK_COPIED": "URL du message copiée dans le presse-papiers", + "DELETE_CONFIRMATION": { + "TITLE": "Êtes-vous sûr de vouloir supprimer ce message ?", + "MESSAGE": "Vous ne pouvez pas annuler cette action", + "DELETE": "Supprimer", + "CANCEL": "Annuler" + } + }, + "SIDEBAR": { + "CONTACT": "Contact", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Appel entrant", + "OUTGOING_CALL": "Appel sortant", + "CALL_IN_PROGRESS": "Appel en cours", + "NOT_ANSWERED_YET": "Pas encore répondu", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Envoyer la transcription de la conversation", + "DESC": "Envoyer une copie de la transcription de la conversation à l'adresse de courriel spécifiée", + "SUBMIT": "Envoyer", + "CANCEL": "Annuler", + "SEND_EMAIL_SUCCESS": "La transcription du chat a été envoyée avec succès", + "SEND_EMAIL_ERROR": "Une erreur est survenue, veuillez réessayer", + "FORM": { + "SEND_TO_CONTACT": "Envoyer la transcription au client", + "SEND_TO_AGENT": "Envoyer la transcription à l'agent assigné", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Envoyer la transcription à une autre adresse de courriel", + "EMAIL": { + "PLACEHOLDER": "Entrez une adresse de courriel", + "ERROR": "Veuillez saisir une adresse de courriel valide" + } + } + }, + "ONBOARDING": { + "TITLE": "Salut 👋, Bienvenue sur {installationName}!", + "DESCRIPTION": "Merci pour votre inscription. Nous souhaitons que vous tiriez le meilleur parti de {installationName}. Voici quelques actions que vous pouvez effectuer dans {installationName} pour rendre votre expérience agréable.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "Consultez nos dernières mises à jour", + "ALL_CONVERSATION": { + "TITLE": "Toutes vos conversations en un seul lieu", + "DESCRIPTION": "Visualisez toutes les conversations de vos clients dans un seul tableau de bord. Vous pouvez filtrer les conversations par le canal entrant, l'étiquette et le statut.", + "NEW_LINK": "Cliquez ici pour créer une boîte de réception" + }, + "TEAM_MEMBERS": { + "TITLE": "Invitez les membres de votre équipe", + "DESCRIPTION": "Puisque vous vous apprêtez à parler à votre client, amenez vos coéquipiers pour vous aider. Vous pouvez inviter vos coéquipiers en ajoutant leurs adresses e-mail à la liste des agents.", + "NEW_LINK": "Cliquez ici pour inviter un membre de l'équipe" + }, + "LABELS": { + "TITLE": "Organiser les conversations avec des labels", + "DESCRIPTION": "Les labels fournissent un moyen plus facile de catégoriser votre conversation. Créez des étiquettes comme #demande-support, #question-facturation etc., afin que vous puissiez les utiliser dans une conversation plus tard.", + "NEW_LINK": "Cliquez ici pour créer des tags" + }, + "CANNED_RESPONSES": { + "TITLE": "Create canned responses", + "DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.", + "NEW_LINK": "Click here to create a canned response" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Agent Assigné", + "SELF_ASSIGN": "M’assigner la conversation", + "TEAM_LABEL": "Équipe assignée", + "SELECT": { + "PLACEHOLDER": "Aucun" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Détails du contact", + "CONVERSATION_ACTIONS": "Actions de conversation", + "CONVERSATION_LABELS": "Étiquettes de conversation", + "CONVERSATION_INFO": "Informations de la conversation", + "CONTACT_NOTES": "Notes du contact", + "CONTACT_ATTRIBUTES": "Attributs du contact", + "PREVIOUS_CONVERSATION": "Conversations précédentes", + "MACROS": "Macros", + "LINEAR_ISSUES": "Problèmes Linear liés", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "En attente", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Créer un attribut", + "NO_RECORDS_FOUND": "Aucun attribut trouvé", + "UPDATE": { + "SUCCESS": "Attribut mis à jour avec succès", + "ERROR": "Impossible de mettre à jour l'attribut. Veuillez réessayer plus tard" + }, + "ADD": { + "TITLE": "Ajouter", + "SUCCESS": "Attribut ajouté avec succès", + "ERROR": "Impossible d'ajouter l'attribut. Veuillez réessayer plus tard" + }, + "DELETE": { + "SUCCESS": "Attribut supprimé avec succès", + "ERROR": "Impossible de supprimer l'attribut. Veuillez réessayer plus tard" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Ajouter des attributs", + "PLACEHOLDER": "Rechercher des attributs", + "NO_RESULT": "Aucun attribut trouvé" + } + }, + "EMAIL_HEADER": { + "FROM": "De", + "TO": "À", + "BCC": "Cci", + "CC": "Cc", + "SUBJECT": "Objet", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Participe", + "SIDEBAR_TITLE": "Participants à une conversation", + "NO_RECORDS_FOUND": "Aucun résultat trouvé", + "ADD_PARTICIPANTS": "Sélectionner des participants", + "REMANING_PARTICIPANTS_TEXT": "+{count} autres utilisateurs", + "REMANING_PARTICIPANT_TEXT": "+{count} autre", + "TOTAL_PARTICIPANTS_TEXT": "{count} personnes participent.", + "TOTAL_PARTICIPANT_TEXT": "{count} personne participe.", + "NO_PARTICIPANTS_TEXT": "Personne ne participe !.", + "WATCH_CONVERSATION": "Rejoindre une conversation", + "YOU_ARE_WATCHING": "Vous participez", + "API": { + "ERROR_MESSAGE": "Impossible de mettre à jour, essayez à nouveau !", + "SUCCESS_MESSAGE": "Participants mis à jour !" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "Voir le contenu traduit", + "DESC": "Vous pouvez voir le contenu traduit dans chaque langue.", + "ORIGINAL_CONTENT": "Contenu original", + "TRANSLATED_CONTENT": "Contenu traduit", + "NO_TRANSLATIONS_AVAILABLE": "Aucune traduction n'est disponible pour ce contenu" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/csatMgmt.json b/app/javascript/dashboard/i18n/locale/fr/csatMgmt.json new file mode 100644 index 0000000..fbabeab --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Évaluer votre conversation", + "PLACEHOLDER": "Dites-nous en plus...", + "RATINGS": { + "POOR": "😞 Mauvais", + "FAIR": "😑 Passable", + "AVERAGE": "😐 Moyenne", + "GOOD": "😀 Bon", + "EXCELLENT": "😍 Excellent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/customRole.json b/app/javascript/dashboard/i18n/locale/fr/customRole.json new file mode 100644 index 0000000..32b7c9f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Custom Roles", + "LEARN_MORE": "Learn more about custom roles", + "DESCRIPTION": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "HEADER_BTN_TXT": "Add custom role", + "LOADING": "Fetching custom roles...", + "SEARCH_404": "Il n'y a aucun élément correspondant à cette requête.", + "PAYWALL": { + "TITLE": "Upgrade to create custom roles", + "AVAILABLE_ON": "The custom role feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The custom role feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Manage custom roles", + "DESC": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "TABLE_HEADER": { + "NAME": "Nom", + "DESCRIPTION": "Description", + "PERMISSIONS": "Permissions", + "ACTIONS": "Actions" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "Nom", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "Le nom est requis." + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "La description est requise." + }, + "PERMISSIONS": { + "LABEL": "Permissions", + "ERROR": "Permissions are required." + }, + "CANCEL_BUTTON_TEXT": "Annuler", + "API": { + "ERROR_MESSAGE": "Impossible de se connecter au serveur Woot, veuillez réessayer plus tard" + } + }, + "ADD": { + "TITLE": "Add custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Envoyer", + "API": { + "SUCCESS_MESSAGE": "Custom role added successfully." + } + }, + "EDIT": { + "BUTTON_TEXT": "Modifier", + "TITLE": "Edit custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Mettre à jour", + "API": { + "SUCCESS_MESSAGE": "Custom role updated successfully." + } + }, + "DELETE": { + "BUTTON_TEXT": "Supprimer", + "API": { + "SUCCESS_MESSAGE": "Custom role deleted successfully.", + "ERROR_MESSAGE": "Impossible de se connecter au serveur Woot, veuillez réessayer plus tard" + }, + "CONFIRM": { + "TITLE": "Confirmer la suppression", + "MESSAGE": "Êtes-vous sûr de vouloir supprimer ", + "YES": "Oui, supprimer ", + "NO": "Non, Conserver " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/datePicker.json b/app/javascript/dashboard/i18n/locale/fr/datePicker.json new file mode 100644 index 0000000..bdec999 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Appliquer", + "CLEAR_BUTTON": "Clear", + "DATE_RANGE_INPUT": { + "START": "Start Date", + "END": "End Date" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "DATE RANGE", + "LAST_7_DAYS": "7 derniers jours", + "LAST_30_DAYS": "30 derniers jours", + "LAST_3_MONTHS": "3 derniers mois", + "LAST_6_MONTHS": "6 derniers mois", + "LAST_YEAR": "Année dernière", + "CUSTOM_RANGE": "Plage de date personnalisée" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/emoji.json b/app/javascript/dashboard/i18n/locale/fr/emoji.json new file mode 100644 index 0000000..4917bf0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Rechercher des émojis", + "NOT_FOUND": "Aucun émoji ne correspond à votre recherche", + "REMOVE": "Supprimer" + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/general.json b/app/javascript/dashboard/i18n/locale/fr/general.json new file mode 100644 index 0000000..a97743c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Showing {firstIndex}-{lastIndex} of {totalCount} items", + "PHONE_INPUT": { + "PLACEHOLDER": "Rechercher", + "EMPTY_STATE": "Aucun résultat trouvé" + }, + "CLOSE": "Fermer", + "BETA": "Bêta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/generalSettings.json b/app/javascript/dashboard/i18n/locale/fr/generalSettings.json new file mode 100644 index 0000000..664d04e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "Vous avez dépassé la limite de conversation. Le plan Hacker autorise uniquement 500 conversations.", + "INBOXES": "Vous avez dépassé la limite de boîtes de réception. Le plan Hacker ne prend en charge que le chat en direct sur le site Web. Des boîtes de réception supplémentaires telles que l'email, WhatsApp, etc. nécessitent un plan payant.", + "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.", + "NON_ADMIN": "Veuillez contacter votre administrateur pour mettre à niveau le plan et continuer à utiliser toutes les fonctionnalités." + }, + "TITLE": "Paramètres du compte", + "SUBMIT": "Mettre à jour les paramètres", + "BACK": "Précédent", + "DISMISS": "Rejeter", + "UPDATE": { + "ERROR": "Impossible de mettre à jour les paramètres, essayez à nouveau !", + "SUCCESS": "Paramètres du compte mis à jour avec succès" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Supprimer votre compte", + "NOTE": "Une fois que vous supprimez votre compte, toutes vos données seront supprimées.", + "BUTTON_TEXT": "Supprimer votre compte", + "CONFIRM": { + "TITLE": "Supprimer le compte", + "MESSAGE": "La suppression de votre compte est irréversible. Entrez votre nom de compte ci-dessous pour confirmer que vous souhaitez le supprimer définitivement.", + "BUTTON_TEXT": "Supprimer", + "DISMISS": "Annuler", + "PLACE_HOLDER": "Veuillez entrer {accountName} pour confirmer" + }, + "SUCCESS": "Compte marqué pour suppression", + "FAILURE": "Impossible de supprimer le compte, essayez à nouveau !", + "SCHEDULED_DELETION": { + "TITLE": "Compte programmé pour suppression", + "MESSAGE_MANUAL": "Ce compte est programmé pour suppression le {deletionDate}. Cette demande a été effectuée par un administrateur. Vous pouvez annuler la suppression avant cette date.", + "MESSAGE_INACTIVITY": "Ce compte est programmé pour suppression le {deletionDate} en raison de l'inactivité du compte. Vous pouvez annuler la suppression avant cette date.", + "CLEAR_BUTTON": "Annuler la suppression programmée" + } + }, + "FORM": { + "ERROR": "Veuillez corriger les erreurs du formulaire", + "GENERAL_SECTION": { + "TITLE": "Paramètres généraux", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "ID de compte", + "NOTE": "Cet identifiant est requis si vous construisez une intégration basée sur l'API" + }, + "AUTO_RESOLVE": { + "TITLE": "Résolution automatique des conversations", + "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.", + "DURATION": { + "LABEL": "Inactivity duration", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "La durée de résolution automatique doit être comprise entre 10 minutes et 999 jours", + "API": { + "SUCCESS": "Paramètres de résolution automatique mis à jour avec succès", + "ERROR": "Échec de la mise à jour des paramètres de résolution automatique" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "La conversation a été marquée comme résolue par le système en raison de 15 jours d'inactivité", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Preferences", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "Nom du compte", + "PLACEHOLDER": "Votre nom de compte", + "ERROR": "Veuillez entrer un nom de compte valide" + }, + "LANGUAGE": { + "LABEL": "Langue du site", + "PLACEHOLDER": "Votre nom de compte", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Domaine de courriel entrant", + "PLACEHOLDER": "Le domaine où vous allez recevoir les courriels", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "Courriel d'assistance", + "PLACEHOLDER": "L'adresse de courriel de support de votre entreprise", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclure les conversations non prises en charge", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Durée d'inactivité avant résolution", + "HELP": "Durée après laquelle une conversation doit être automatiquement résolue s'il n'y a pas d'activité", + "PLACEHOLDER": "30", + "ERROR": "La durée de résolution automatique doit être comprise entre 10 minutes et 999 jours", + "API": { + "SUCCESS": "Paramètres de résolution automatique mis à jour avec succès", + "ERROR": "Échec de la mise à jour des paramètres de résolution automatique" + }, + "UPDATE_BUTTON": "Mettre à jour", + "MESSAGE_LABEL": "Message de résolution personnalisé", + "MESSAGE_PLACEHOLDER": "La conversation a été marquée comme résolue par le système en raison de 15 jours d'inactivité", + "MESSAGE_HELP": "Ce message est envoyé au client lorsque la conversation est automatiquement résolue par le système en raison d'une inactivité." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "La continuité des conversations avec les courriels est activée pour votre compte.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "Vous pouvez maintenant recevoir des courriels dans votre domaine personnalisé." + } + }, + "UPDATE_CHATWOOT": "Une mise à jour {latestChatwootVersion} de Chatwoot est disponible. Veuillez mettre à jour votre instance.", + "LEARN_MORE": "En savoir plus", + "PAYMENT_PENDING": "Votre paiement est en attente. Merci de mettre à jour vos informations de paiement pour continuer à utiliser Chatwoot", + "UPGRADE": "Mettez à niveau pour continuer à utiliser Chatwoot", + "LIMITS_UPGRADE": "Votre compte a dépassé les limites d'utilisation, veuillez mettre à niveau votre plan pour continuer à utiliser Chatwoot", + "OPEN_BILLING": "Ouvrir la facturation" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Appuyer sur Entrée pour sélectionner", + "ENTER_TO_REMOVE": "Appuyer sur Entrée pour supprimer", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "Sélectionnez un", + "SELECT": "Sélectionner" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Notifications", + "MARK_ALL_DONE": "Tout marquer comme terminé", + "DELETE_TITLE": "Supprimé", + "UNREAD_NOTIFICATION": { + "TITLE": "Notifications non lues", + "ALL_NOTIFICATIONS": "Visualiser toutes les notifications", + "LOADING_UNREAD_MESSAGE": "Chargement des notifications non lues ...", + "EMPTY_MESSAGE": "Vous n’avez pas de notifications non lues" + }, + "LIST": { + "LOADING_MESSAGE": "Chargement des notifications...", + "404": "Aucune notification", + "TABLE_HEADER": [ + "Nom", + "Numéro de téléphone", + "Conversations", + "Dernièrement contacté" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "Nouvelle conversation", + "conversation_assignment": "Conversation assignée", + "assigned_conversation_new_message": "Nouveau message", + "participating_conversation_new_message": "Nouveau message", + "conversation_mention": "Mention", + "sla_missed_first_response": "SLA Missed", + "sla_missed_next_response": "SLA Missed", + "sla_missed_resolution": "SLA Missed" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Hors ligne", + "RECONNECTING": "Reconnecting...", + "RECONNECT_SUCCESS": "Reconnected" + }, + "BUTTON": { + "REFRESH": "Actualiser" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Rechercher ou aller à", + "SECTIONS": { + "GENERAL": "Général", + "REPORTS": "Rapports", + "CONVERSATION": "Conversation", + "BULK_ACTIONS": "Bulk Actions", + "CHANGE_ASSIGNEE": "Changer de responsable", + "CHANGE_PRIORITY": "Modifier la priorité", + "CHANGE_TEAM": "Changer d’équipe", + "SNOOZE_CONVERSATION": "Clôturer la conversation", + "ADD_LABEL": "Ajouter une étiquette à la conversation", + "REMOVE_LABEL": "Supprimer l'étiquette de la conversation", + "SETTINGS": "Paramètres", + "AI_ASSIST": "Assistance IA", + "APPEARANCE": "Apparence", + "SNOOZE_NOTIFICATION": "Mettre la notification en veille" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Aller au tableau de bord des conversations", + "GO_TO_CONTACTS_DASHBOARD": "Aller au tableau de bord des contacts", + "GO_TO_REPORTS_OVERVIEW": "Accéder à la vue d'ensemble des rapports", + "GO_TO_CONVERSATION_REPORTS": "Accéder aux rapports de conversation", + "GO_TO_AGENT_REPORTS": "Aller aux rapports d'agent", + "GO_TO_LABEL_REPORTS": "Aller aux rapports d'étiquette", + "GO_TO_INBOX_REPORTS": "Accéder aux rapports de la boîte de réception", + "GO_TO_TEAM_REPORTS": "Aller dans les rapports de l'équipe", + "GO_TO_SETTINGS_AGENTS": "Aller dans les paramètres de l'agent", + "GO_TO_SETTINGS_TEAMS": "Aller dans les paramètres de l'équipe", + "GO_TO_SETTINGS_INBOXES": "Accéder aux paramètres de la boîte de réception", + "GO_TO_SETTINGS_LABELS": "Allez dans les paramètres d'étiquette", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Accéder aux paramètres de réponse préenregistrée", + "GO_TO_SETTINGS_APPLICATIONS": "Accéder aux paramètres de l'application", + "GO_TO_SETTINGS_ACCOUNT": "Accéder aux paramètres du compte", + "GO_TO_SETTINGS_PROFILE": "Accéder aux paramètres du profil", + "GO_TO_NOTIFICATIONS": "Accéder aux notifications", + "ADD_LABELS_TO_CONVERSATION": "Ajouter une étiquette à la conversation", + "ASSIGN_AN_AGENT": "Affecter un agent", + "AI_ASSIST": "Assistance IA", + "ASSIGN_PRIORITY": "Attribuer priorité", + "ASSIGN_A_TEAM": "Assigner une équipe", + "MUTE_CONVERSATION": "Désactiver la conversation", + "UNMUTE_CONVERSATION": "Rétablir la conversation", + "REMOVE_LABEL_FROM_CONVERSATION": "Supprimer l'étiquette de la conversation", + "REOPEN_CONVERSATION": "Reprendre la conversation", + "RESOLVE_CONVERSATION": "Reprendre la conversation", + "SEND_TRANSCRIPT": "Envoyer un résumé par email", + "SNOOZE_CONVERSATION": "Clôturer la conversation", + "UNTIL_NEXT_REPLY": "Jusqu’à la prochaine réponse", + "UNTIL_NEXT_WEEK": "Jusqu'à la semaine prochaine", + "UNTIL_TOMORROW": "Jusqu'à demain", + "UNTIL_NEXT_MONTH": "Jusqu'au mois prochain", + "AN_HOUR_FROM_NOW": "D'ici une heure", + "UNTIL_CUSTOM_TIME": "Personnalisé...", + "CHANGE_APPEARANCE": "Changer l'apparence", + "LIGHT_MODE": "Clair", + "DARK_MODE": "Sombre", + "SYSTEM_MODE": "Système", + "SNOOZE_NOTIFICATION": "Mettre la notification en veille" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Chargement de l'application du tableau de bord ..." + }, + "COMMON": { + "OR": "Ou", + "CLICK_HERE": "cliquez ici" + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/helpCenter.json b/app/javascript/dashboard/i18n/locale/fr/helpCenter.json new file mode 100644 index 0000000..0b41f6d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Centre d'aide", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "Créer un portail" + }, + "HEADER": { + "FILTER": "Filtrer par", + "SORT": "Trier par", + "LOCALE": "Langue", + "SETTINGS_BUTTON": "Paramètres", + "NEW_BUTTON": "Nouvel article", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Publié", + "DRAFT": "Brouillon", + "ARCHIVED": "Archivé" + }, + "TITLES": { + "ALL_ARTICLES": "Tous les articles", + "MINE": "Mes articles", + "DRAFT": "Articles brouillon", + "ARCHIVED": "Articles archivés" + }, + "LOCALE_SELECT": { + "TITLE": "Choisir un paramètre régional", + "PLACEHOLDER": "Choisir un paramètre régional", + "NO_RESULT": "Paramètre régional introuvable", + "SEARCH_PLACEHOLDER": "Chercher un paramètre régional" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "Tous les articles", + "PUBLISH_BUTTON": "Publier", + "MOVE_TO_ARCHIVE_BUTTON": "Déplacer dans les archives", + "PREVIEW": "Aperçu", + "ADD_TRANSLATION": "Ajouter la traduction", + "OPEN_SIDEBAR": "Ouvrir le panneau latéral", + "CLOSE_SIDEBAR": "Fermer le panneau latéral", + "SAVING": "Enregistrement en cours...", + "SAVED": "Enregistré" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Téléverser une image", + "UPLOADING": "Téléversement...", + "SUCCESS": "Image téléchargée avec succès", + "ERROR": "Erreur lors du téléchargement de l'image", + "UN_AUTHORIZED_ERROR": "You are not authorized to upload images", + "ERROR_FILE_SIZE": "La taille de l'image doit être inférieure à {size}Mo", + "ERROR_FILE_FORMAT": "Le format d'image doit être jpg, jpeg ou png", + "ERROR_FILE_DIMENSIONS": "Les dimensions de l'image doivent être inférieures à 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Paramètres de l'article", + "FORM": { + "CATEGORY": { + "LABEL": "Catégorie", + "TITLE": "Sélectionner une catégorie", + "PLACEHOLDER": "Sélectionner une catégorie", + "NO_RESULT": "Aucune catégorie trouvée", + "SEARCH_PLACEHOLDER": "Rechercher dans la catégorie" + }, + "AUTHOR": { + "LABEL": "Auteur", + "TITLE": "Sélectionner l'auteur", + "PLACEHOLDER": "Sélectionner l'auteur", + "NO_RESULT": "Aucun auteur trouvé", + "SEARCH_PLACEHOLDER": "Rechercher un auteur" + }, + "META_TITLE": { + "LABEL": "Méta titre", + "PLACEHOLDER": "Ajouter un titre méta" + }, + "META_DESCRIPTION": { + "LABEL": "Méta description", + "PLACEHOLDER": "Ajouter votre méta description pour de meilleurs résultats SEO..." + }, + "META_TAGS": { + "LABEL": "Balises méta", + "PLACEHOLDER": "Ajouter des balises méta séparées par des virgules..." + } + }, + "BUTTONS": { + "ARCHIVE": "Archiver l'article", + "DELETE": "Supprimer l'article" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Non catégorisé", + "SEARCH_RESULTS": "Résultats de la recherche pour {query}", + "EMPTY_TEXT": "Rechercher des articles à insérer dans les réponses.", + "SEARCH_LOADER": "Recherche en cours...", + "INSERT_ARTICLE": "Insérer", + "NO_RESULT": "Aucun article trouvé", + "COPY_LINK": "Copier le lien de l'article dans le presse-papier", + "OPEN_LINK": "Ouvrir un article dans un nouvel onglet", + "PREVIEW_LINK": "Aperçu de l’article" + }, + "PORTAL": { + "HEADER": "Portails", + "DEFAULT": "Par défaut", + "NEW_BUTTON": "Nouveau portail", + "ACTIVE_BADGE": "actif", + "CHOOSE_LOCALE_LABEL": "Choisir une langue", + "LOADING_MESSAGE": "Chargement des portails...", + "ARTICLES_LABEL": "articles", + "NO_PORTALS_MESSAGE": "Il n'y a aucun portail disponible", + "ADD_NEW_LOCALE": "Ajouter une nouvelle langue", + "POPOVER": { + "TITLE": "Portails", + "PORTAL_SETTINGS": "Paramètres du portail", + "SUBTITLE": "Vous avez plusieurs portails et pouvez avoir différents paramètres régionaux pour chaque portail.", + "CANCEL_BUTTON_LABEL": "Annuler", + "CHOOSE_LOCALE_BUTTON": "Choisir une langue" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "articles", + "ADD": "Ajouter une langue", + "VISIT": "Visiter le site", + "SETTINGS": "Paramètres", + "DELETE": "Supprimer" + }, + "PORTAL_CONFIG": { + "TITLE": "Configurations du portail", + "ITEMS": { + "NAME": "Nom", + "DOMAIN": "Domaine personnalisé", + "SLUG": "Slug", + "TITLE": "Titre du portail", + "THEME": "Couleur du thème", + "SUB_TEXT": "Sous texte du portail" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Langues disponibles", + "TABLE": { + "NAME": "Nom de la langue", + "CODE": "Code de la langue", + "ARTICLE_COUNT": "Nb d'articles", + "CATEGORIES": "Nb de catégories", + "SWAP": "Permuter", + "DELETE": "Supprimer", + "DEFAULT_LOCALE": "Par défaut" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Supprimer le portail", + "MESSAGE": "Etes-vous sûr de vouloir supprimer ce portail", + "YES": "Oui, supprimer le portail", + "NO": "Non, conserver le portail", + "API": { + "DELETE_SUCCESS": "Le portail a été supprimé", + "DELETE_ERROR": "Erreur durant la suppression du portail" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Modifier le portail", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Informations de base" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Personnalisation du portail" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Catégories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Langues" + } + }, + "CATEGORIES": { + "TITLE": "Catégories dans", + "NEW_CATEGORY": "Nouvelle catégorie", + "TABLE": { + "NAME": "Nom", + "DESCRIPTION": "Description", + "LOCALE": "Langue", + "ARTICLE_COUNT": "Nb d'articles", + "ACTION_BUTTON": { + "EDIT": "Modifier la catégorie", + "DELETE": "Supprimer la catégorie" + }, + "EMPTY_TEXT": "Aucune catégorie trouvée" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Mettre à jour les paramètres de base" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Informations sur le centre d'aide", + "BODY": "Informations de base sur le portail" + }, + "CUSTOMIZATION": { + "TITLE": "Personnalisation du centre d'aide", + "BODY": "Personnalisez le portail" + }, + "FINISH": { + "TITLE": "Et voilà !", + "BODY": "Tout est prêt !" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Précédent", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Créer un portail", + "TITLE": "Informations sur le centre d'aide", + "CREATE_BASIC_SETTING_BUTTON": "Créer des paramètres de base du portail" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Personnalisation du portail", + "TITLE": "Personnalisation du centre d'aide", + "UPDATE_PORTAL_BUTTON": "Mettre à jour les paramètres du portail" + }, + "FINISH_PAGE": { + "TITLE": "Voila!🎉 Vous êtes prêt !", + "MESSAGE": "Vous pouvez maintenant voir ce portail créé sur votre page de portails.", + "FINISH": "Aller à la page de tous les portails" + } + }, + "LOGO": { + "LABEL": "Logo", + "UPLOAD_BUTTON": "Télécharger le logo", + "HELP_TEXT": "Ce logo sera affiché sur l'en-tête du portail.", + "IMAGE_UPLOAD_SUCCESS": "Logo téléchargé", + "IMAGE_UPLOAD_ERROR": "Logo effacé", + "IMAGE_DELETE_ERROR": "Erreur lors de la suppression du logo" + }, + "NAME": { + "LABEL": "Nom", + "PLACEHOLDER": "Nom du portail", + "HELP_TEXT": "Le nom sera utilisé dans le portail public en interne.", + "ERROR": "Le nom est requis" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Identifiant du portail pour les URL", + "ERROR": "Slug est requis" + }, + "DOMAIN": { + "LABEL": "Domaine personnalisé", + "PLACEHOLDER": "Portail de domaine personnalisé", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}", + "ERROR": "Entrez une URL de domaine valide" + }, + "HOME_PAGE_LINK": { + "LABEL": "Lien vers la page d'accueil", + "PLACEHOLDER": "Lien vers la page d'accueil du portail", + "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}", + "ERROR": "Entrez une URL valide de la page d'accueil" + }, + "THEME_COLOR": { + "LABEL": "Couleur du thème du portail", + "HELP_TEXT": "Cette couleur sera affichée comme la couleur du thème pour le portail." + }, + "PAGE_TITLE": { + "LABEL": "Titre de la page", + "PLACEHOLDER": "Titre de la page portail", + "HELP_TEXT": "Le titre de la page sera utilisé dans le portail public.", + "ERROR": "Le titre de la page est requis" + }, + "HEADER_TEXT": { + "LABEL": "Texte de l'en-tête", + "PLACEHOLDER": "Texte de l'en-tête du portail", + "HELP_TEXT": "Le texte de l'en-tête du portail sera utilisé dans le portail public.", + "ERROR": "Le texte de l'en-tête du portail est obligatoire" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Le portail a été créé avec succès.", + "ERROR_MESSAGE_FOR_BASIC": "Impossible de créer le portail. Essayez à nouveau.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Le portail a été mis à jour.", + "ERROR_MESSAGE_FOR_UPDATE": "Impossible de mettre à jour le portail. Essayez à nouveau." + } + }, + "ADD_LOCALE": { + "TITLE": "Ajouter une nouvelle langue", + "SUB_TITLE": "Ceci ajoute une nouvelle langue à votre liste de traductions disponibles.", + "PORTAL": "Portail", + "LOCALE": { + "LABEL": "Langue", + "PLACEHOLDER": "Choisir une langue", + "ERROR": "La langue est requise" + }, + "BUTTONS": { + "CREATE": "Créer une langue", + "CANCEL": "Annuler" + }, + "API": { + "SUCCESS_MESSAGE": "Langue ajoutée avec succès", + "ERROR_MESSAGE": "Impossible d'ajouter la langue. Veuillez réessayer." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "La locale par défaut a été mise à jour", + "ERROR_MESSAGE": "Impossible d'ajouter la langue. Veuillez réessayer." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "La langue a été supprimée du portail avec succès", + "ERROR_MESSAGE": "Impossible de supprimer la langue du portail. Réessayez." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Chargement des articles...", + "404": "Aucun article ne correspond à votre recherche 🔍", + "NO_ARTICLES": "Il n'y a aucun article disponible", + "HEADERS": { + "TITLE": "Titre", + "CATEGORY": "Catégorie", + "READ_COUNT": "Views", + "STATUS": "État", + "LAST_EDITED": "Dernière modification" + }, + "COLUMNS": { + "BY": "par", + "AUTHOR_NOT_AVAILABLE": "L'auteur n'est pas disponible" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Chargement de l'article...", + "TITLE_PLACEHOLDER": "Le titre de l’article va ici", + "CONTENT_PLACEHOLDER": "Écrivez votre article ici", + "API": { + "ERROR": "Erreur lors de la sauvegarde de l'article" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Erreur lors de la publication de l'article", + "SUCCESS": "L'article a été publié" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Erreur lors de l'archivage de l'article", + "SUCCESS": "L'article a été archivé" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Error while drafting article", + "SUCCESS": "Article drafted successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirmer la suppression", + "MESSAGE": "Êtes-vous sûr de vouloir supprimer l'article ?", + "YES": "Oui, supprimer", + "NO": "Non, conservez-le" + } + }, + "API": { + "SUCCESS_MESSAGE": "L'article a été supprimé", + "ERROR_MESSAGE": "Erreur lors de la suppression de l’article" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Veuillez ajouter le titre et le contenu de l'article puis vous seul pouvez mettre à jour les paramètres" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Recherche d'articles" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Créer une catégorie", + "SUB_TITLE": "La catégorie sera utilisée dans le portail public pour classer les articles.", + "PORTAL": "Portail", + "LOCALE": "Langue", + "NAME": { + "LABEL": "Nom", + "PLACEHOLDER": "Nom de la catégorie", + "HELP_TEXT": "Le nom de la catégorie sera utilisé dans le portail public pour classer les articles.", + "ERROR": "Le nom est requis" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug de catégorie pour les URL", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/fr-FR/categories/my-slug", + "ERROR": "Le Slug est requis" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Donner une courte description de la catégorie.", + "ERROR": "La description est requise" + }, + "BUTTONS": { + "CREATE": "Créer une catégorie", + "CANCEL": "Annuler" + }, + "API": { + "SUCCESS_MESSAGE": "Catégorie créée avec succès", + "ERROR_MESSAGE": "Impossible de créer une catégorie" + } + }, + "EDIT": { + "TITLE": "Modifier une catégorie", + "SUB_TITLE": "Modifier une catégorie mettra à jour la catégorie dans le portail public visité.", + "PORTAL": "Portail", + "LOCALE": "Langue", + "NAME": { + "LABEL": "Nom", + "PLACEHOLDER": "Nom de la catégorie", + "HELP_TEXT": "Le nom de la catégorie sera utilisé dans le portail public pour classer les articles.", + "ERROR": "Le nom est requis" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug de catégorie pour les URL", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/fr-FR/categories/my-slug", + "ERROR": "Le Slug est requis" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Donner une courte description de la catégorie.", + "ERROR": "La description est requise" + }, + "BUTTONS": { + "CREATE": "Mettre à jour la catégorie", + "CANCEL": "Annuler" + }, + "API": { + "SUCCESS_MESSAGE": "Catégorie mise à jour correctement", + "ERROR_MESSAGE": "Impossible de mettre à jour cette catégorie" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Catégorie supprimée avec succès", + "ERROR_MESSAGE": "Impossible de supprimer la catégorie" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Rechercher des articles", + "PLACEHOLDER": "Rechercher des articles", + "NO_RESULT": "Aucun article trouvé", + "SEARCHING": "Recherche en cours...", + "SEARCH_BUTTON": "Rechercher", + "INSERT_ARTICLE": "Insérer un lien", + "IFRAME_ERROR": "L'URL est vide ou non valide. Impossible d'afficher le contenu.", + "OPEN_ARTICLE_SEARCH": "Insérer un article depuis le centre d'aide", + "SUCCESS_ARTICLE_INSERTED": "Article inséré", + "PREVIEW_LINK": "Aperçu de l’article", + "CANCEL": "Fermer", + "BACK": "Précédent", + "BACK_RESULTS": "Retour aux résultats" + }, + "UPGRADE_PAGE": { + "TITLE": "Centre d'aide", + "DESCRIPTION": "Créez des portails en libre-service conviviaux. Aidez vos utilisateurs à accéder aux articles et à obtenir de l'aide 24h/24, 7j/7. Mettez à niveau votre abonnement pour activer cette fonctionnalité.", + "SELF_HOSTED_DESCRIPTION": "Créez des portails en libre-service conviviaux. Aidez vos utilisateurs à accéder aux articles et à obtenir de l'assistance 24/7. Veuillez contacter votre administrateur pour activer cette fonctionnalité.", + "BUTTON": { + "LEARN_MORE": "En savoir plus", + "UPGRADE": "Mise à niveau" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Portails multiples", + "DESCRIPTION": "Créez plusieurs portails de centre d'aide pour différents produits en utilisant le même compte." + }, + "LOCALES": { + "TITLE": "Prise en charge complète des langues", + "DESCRIPTION": "Affichez le portail dans votre langue. Nous prenons en charge toutes les langues et autorisons les traductions pour chaque article." + }, + "SEO": { + "TITLE": "Design optimisé pour le SEO", + "DESCRIPTION": "Personnalisez vos balises méta pour améliorer votre visibilité sur les moteurs de recherche grâce à nos pages optimisées pour le SEO." + }, + "API": { + "TITLE": "Support complet de l'API", + "DESCRIPTION": "Utilisez le portail comme un CMS sans tête avec des frameworks front-end tiers en utilisant nos API." + } + } + }, + "LOADING": "Loading...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} view | {count} views", + "DROPDOWN_MENU": { + "PUBLISH": "Publier", + "DRAFT": "Brouillon", + "ARCHIVE": "Archive", + "DELETE": "Supprimer" + }, + "STATUS": { + "DRAFT": "Brouillon", + "PUBLISHED": "Publié", + "ARCHIVED": "Archivé" + }, + "CATEGORY": { + "UNCATEGORISED": "Uncategorised" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "All articles", + "MINE": "Les miens", + "DRAFT": "Brouillon", + "PUBLISHED": "Publié", + "ARCHIVED": "Archivé" + }, + "CATEGORY": { + "ALL": "All categories" + }, + "LOCALE": { + "ALL": "All locales" + }, + "NEW_ARTICLE": "New article" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Write an article", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "New article" + }, + "MINE": { + "TITLE": "You haven't written any articles here", + "SUBTITLE": "All articles written by you show up here for quick access." + }, + "DRAFT": { + "TITLE": "There are no articles in drafts", + "SUBTITLE": "Draft articles will appear here" + }, + "PUBLISHED": { + "TITLE": "There are no published articles", + "SUBTITLE": "Published articles will appear here" + }, + "ARCHIVED": { + "TITLE": "There are no articles in the archive", + "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages" + }, + "CATEGORY": { + "TITLE": "There are no articles in this category", + "SUBTITLE": "Articles in this category will appear here" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "Nouvelle catégorie", + "EDIT_CATEGORY": "Modifier la catégorie", + "CATEGORIES_COUNT": "{n} category | {n} categories", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categories ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "Aucune catégorie trouvée", + "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Catégorie créée avec succès", + "ERROR_MESSAGE": "Impossible de créer une catégorie" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Catégorie mise à jour correctement", + "ERROR_MESSAGE": "Impossible de mettre à jour cette catégorie" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Catégorie supprimée avec succès", + "ERROR_MESSAGE": "Impossible de supprimer la catégorie" + } + }, + "HEADER": { + "CREATE": "Créer une catégorie", + "EDIT": "Modifier la catégorie", + "DESCRIPTION": "Modifier une catégorie mettra à jour la catégorie dans le portail public visité.", + "PORTAL": "Portail", + "LOCALE": "Langue" + }, + "FORM": { + "NAME": { + "LABEL": "Nom", + "PLACEHOLDER": "Nom de la catégorie", + "ERROR": "Le nom est requis" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug de catégorie pour les URL", + "ERROR": "Le Slug est requis", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Donner une courte description de la catégorie.", + "ERROR": "La description est requise" + } + }, + "BUTTONS": { + "CREATE": "Créer", + "EDIT": "Mettre à jour", + "CANCEL": "Annuler" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "No locales available | {n} locale | {n} locales", + "NEW_LOCALE_BUTTON_TEXT": "New locale", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles", + "CATEGORIES_COUNT": "{count} category | {count} categories", + "DEFAULT": "Par défaut", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Make default", + "DELETE": "Supprimer" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Ajouter une nouvelle langue", + "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", + "COMBOBOX": { + "PLACEHOLDER": "Choisir un paramètre régional..." + }, + "API": { + "SUCCESS_MESSAGE": "Langue ajoutée avec succès", + "ERROR_MESSAGE": "Impossible d'ajouter la langue. Veuillez réessayer." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Enregistrement en cours...", + "SAVED": "Enregistré" + }, + "PREVIEW": "Aperçu", + "PUBLISH": "Publier", + "DRAFT": "Brouillon", + "ARCHIVE": "Archive", + "BACK_TO_ARTICLES": "Back to articles" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "More properties", + "UNCATEGORIZED": "Non catégorisé", + "EDITOR_PLACEHOLDER": "Write something..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Article properties", + "META_DESCRIPTION": "Méta description", + "META_DESCRIPTION_PLACEHOLDER": "Add meta description", + "META_TITLE": "Méta titre", + "META_TITLE_PLACEHOLDER": "Add meta title", + "META_TAGS": "Balises méta", + "META_TAGS_PLACEHOLDER": "Add meta tags" + }, + "API": { + "ERROR": "Erreur lors de la sauvegarde de l'article" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "New portal", + "PORTALS": "Portails", + "CREATE_PORTAL": "Create and manage multiple portals", + "ARTICLES": "articles", + "DOMAIN": "domaine", + "PORTAL_NAME": "Nom du portail" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Create new portal", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "Créer", + "NAME": { + "LABEL": "Nom", + "PLACEHOLDER": "User Guide | Chatwoot", + "MESSAGE": "Choose an name for your portal.", + "ERROR": "Le nom est requis" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Le Slug est requis", + "FORMAT_ERROR": "Veuillez saisir un identifiant valide, par exemple : guide-utilisateur" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logo", + "IMAGE_UPLOAD_ERROR": "Impossible de télécharger l'image! Réessayez", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo", + "IMAGE_DELETE_SUCCESS": "Logo effacé", + "IMAGE_DELETE_ERROR": "Unable to delete logo", + "IMAGE_UPLOAD_SIZE_ERROR": "La taille de l'image doit être inférieure à {size}Mo" + }, + "NAME": { + "LABEL": "Nom", + "PLACEHOLDER": "Nom du portail", + "ERROR": "Le nom est requis" + }, + "HEADER_TEXT": { + "LABEL": "Header text", + "PLACEHOLDER": "Texte de l'en-tête du portail" + }, + "PAGE_TITLE": { + "LABEL": "Page title", + "PLACEHOLDER": "Titre de la page portail" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home page link", + "PLACEHOLDER": "Lien vers la page d'accueil du portail", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Live chat widget", + "PLACEHOLDER": "Select live chat widget", + "HELP_TEXT": "Select a live chat widget that will appear on your help center", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Brand color" + }, + "SAVE_CHANGES": "Save changes" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Domaine personnalisé", + "LABEL": "Domaine personnalisé:", + "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Portail de domaine personnalisé", + "EDIT_BUTTON": "Modifier", + "ADD_BUTTON": "Add custom domain", + "STATUS": { + "LIVE": "En direct", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Add custom domain", + "EDIT_HEADER": "Edit custom domain", + "ADD_CONFIRM_BUTTON_LABEL": "Add domain", + "EDIT_CONFIRM_BUTTON_LABEL": "Update domain", + "LABEL": "Domaine personnalisé", + "PLACEHOLDER": "Portail de domaine personnalisé", + "ERROR": "Custom domain is required", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS configuration", + "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "Envoyer" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Delete {portalName}", + "HEADER": "Supprimer le portail", + "DESCRIPTION": "Permanently delete this portal. This action is irreversible", + "DIALOG": { + "HEADER": "Sure you want to delete {portalName}?", + "DESCRIPTION": "This is a permanent action that cannot be reversed.", + "CONFIRM_BUTTON_LABEL": "Supprimer" + } + }, + "EDIT_CONFIGURATION": "Edit configuration" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Le portail a été créé avec succès", + "ERROR_MESSAGE": "Unable to create portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Le portail a été mis à jour", + "ERROR_MESSAGE": "Unable to update portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "Téléversement...", + "UPLOAD": "Upload & Process", + "CANCEL": "Annuler", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Génération en cours...", + "CONFIRM_DELETE": "Êtes-vous sûr de vouloir supprimer {filename} ?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Terminé", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/inbox.json b/app/javascript/dashboard/i18n/locale/fr/inbox.json new file mode 100644 index 0000000..9fead5e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "My Inbox", + "DISPLAY_DROPDOWN": "Display", + "LOADING": "Chargement des notifications", + "404": "Il n'y a aucune notification active dans ce groupe.", + "NO_NOTIFICATIONS": "Aucune notification", + "NOTE": "Notifications from all subscribed inboxes", + "NO_MESSAGES_AVAILABLE": "Oops! Not able to fetch messages", + "SNOOZED_UNTIL": "Reporter jusqu'à", + "SNOOZED_UNTIL_TOMORROW": "Reporté jusqu'à demain", + "SNOOZED_UNTIL_NEXT_WEEK": "Reporté jusqu'à la semaine prochaine" + }, + "ACTION_HEADER": { + "SNOOZE": "Snooze notification", + "DELETE": "Supprimer la notification", + "BACK": "Précédent" + }, + "TYPES": { + "CONVERSATION_MENTION": "Vous avez été cité dans une conversation", + "CONVERSATION_CREATION": "Nouvelle conversation créée", + "CONVERSATION_ASSIGNMENT": "Une conversation vous a été attribuée", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Nouveau message dans une conversation attribuée", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Nouveau message dans une conversation à laquelle vous participez", + "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation", + "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation", + "SLA_MISSED_RESOLUTION": "SLA target resolution missed for conversation" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Mentioned", + "CONVERSATION_ASSIGNMENT": "Assigned to you", + "CONVERSATION_CREATION": "New Conversation", + "SLA_MISSED_FIRST_RESPONSE": "SLA breach", + "SLA_MISSED_NEXT_RESPONSE": "SLA breach", + "SLA_MISSED_RESOLUTION": "SLA breach", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Nouveau message", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Nouveau message", + "SNOOZED_UNTIL": "Snoozed for {time}", + "SNOOZED_ENDS": "Snooze ended" + }, + "NO_CONTENT": "Aucun contenu disponible", + "MENU_ITEM": { + "MARK_AS_READ": "Marquer comme lu", + "MARK_AS_UNREAD": "Marquer comme non lu", + "SNOOZE": "Reporter", + "DELETE": "Supprimer", + "MARK_ALL_READ": "Tout marquer comme lu", + "DELETE_ALL": "Tout supprimer", + "DELETE_ALL_READ": "Delete all read" + }, + "DISPLAY_MENU": { + "SORT": "Trier", + "DISPLAY": "Display :", + "SORT_OPTIONS": { + "NEWEST": "Newest", + "OLDEST": "Oldest", + "PRIORITY": "Priorité" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Reporté", + "READ": "Lu", + "LABELS": "Étiquettes", + "CONVERSATION_ID": "Conversation ID" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notification marquée comme lue", + "MARK_AS_UNREAD": "Notification marquée comme non lue", + "SNOOZE": "Notification en veille", + "DELETE": "Notification supprimée", + "MARK_ALL_READ": "Toutes les notifications sont marquées comme lues", + "DELETE_ALL": "Toutes les notifications sont supprimées", + "DELETE_ALL_READ": "Toutes les notifications lues ont été supprimées" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json new file mode 100644 index 0000000..6b1b2d3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Boîtes de réception", + "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.", + "LEARN_MORE": "Learn more about inboxes", + "RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.", + "CLICK_TO_RECONNECT": "Click here to reconnect.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "Il n'y a aucune boîte de réception associée à ce compte." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Choisir un canal", + "BODY": "Choisissez le fournisseur que vous souhaitez intégrer avec Chatwoot." + }, + "INBOX": { + "TITLE": "Créer une boîte de réception", + "BODY": "Authentifiez votre compte et créez une boîte de réception." + }, + "AGENT": { + "TITLE": "Ajouter des agents", + "BODY": "Ajouter des agents à la boîte de réception créée." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "Vous êtes paré !" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Nom de la boîte de réception", + "PLACEHOLDER": "Entrez le nom de votre boîte de réception (ex: Acme Inc)", + "ERROR": "Veuillez entrer un nom de compte valide" + }, + "WEBSITE_NAME": { + "LABEL": "Nom du site web", + "PLACEHOLDER": "Entrez le nom de votre boîte de réception (ex: Acme Inc)" + }, + "FB": { + "HELP": "PS : En vous connectant, nous avons seulement accès aux messages de votre page. Vos messages privés ne peuvent jamais être consultés par Chatwoot.", + "CHOOSE_PAGE": "Choisir la page", + "CHOOSE_PLACEHOLDER": "Sélectionnez une page dans la liste", + "INBOX_NAME": "Nom de la boîte de réception", + "ADD_NAME": "Ajouter un nom pour votre boîte de réception", + "PICK_NAME": "Pick a Name for your Inbox", + "PICK_A_VALUE": "Choisir une valeur", + "CREATE_INBOX": "Créer une boîte de réception" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continuer avec Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connectez votre profil Instagram", + "HELP": "Pour ajouter votre profil Instagram en tant que canal, vous devez authentifier votre profil Instagram en cliquant sur 'Continuer avec Instagram' ", + "ERROR_MESSAGE": "Une erreur est survenue lors de la connexion à Instagram, veuillez réessayer", + "ERROR_AUTH": "Une erreur est survenue lors de la connexion à Instagram, veuillez réessayer", + "NEW_INBOX_SUGGESTION": "Ce compte Instagram était précédemment lié à une autre boîte de réception et a maintenant été migré ici. Tous les nouveaux messages apparaîtront ici. L'ancienne boîte de réception ne pourra plus envoyer ni recevoir de messages pour ce compte.", + "DUPLICATE_INBOX_BANNER": "Ce compte Instagram a été migré vers la nouvelle boîte de réception du canal Instagram. Vous ne pourrez plus envoyer ni recevoir de messages Instagram depuis cette boîte de réception." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "Pour ajouter votre profil Twitter en tant que canal, vous devez lier votre profil Twitter en cliquant sur 'Se connecter avec Twitter' ", + "ERROR_MESSAGE": "Une erreur s'est produite lors de la connexion à Twitter, veuillez réessayer", + "TWEETS": { + "ENABLE": "Créer des conversations à partir de Tweets mentionnés" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Canal site Web", + "DESC": "Créez un canal pour votre site Web et commencez à assister vos clients à l'aide de notre widget de site Web.", + "LOADING_MESSAGE": "Création du canal de support du site Web", + "CHANNEL_AVATAR": { + "LABEL": "Avatar du canal" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "URL du Webhook", + "PLACEHOLDER": "Please enter your Webhook URL", + "ERROR": "Veuillez entrer une URL valide" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Domaine du site Web", + "PLACEHOLDER": "Entrez le domaine de votre site Web (ex : acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Titre de Bienvenue", + "PLACEHOLDER": "Salut !" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Slogan d'accueil", + "PLACEHOLDER": "C'est simple de rentrer en contact avec nous. Demandez-nous quoi que ce soit ou partagez vos commentaires." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Message d'accueil du canal", + "PLACEHOLDER": "Acme Inc répond en général en quelques heures." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Activer l'accueil du canal", + "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", + "ENABLED": "Activé", + "DISABLED": "Désactivé" + }, + "REPLY_TIME": { + "TITLE": "Définir le temps de réponse", + "IN_A_FEW_MINUTES": "En quelques minutes", + "IN_A_FEW_HOURS": "En quelques heures", + "IN_A_DAY": "En une journée", + "HELP_TEXT": "Ce temps de réponse sera affichée sur le widget de chat en direct" + }, + "WIDGET_COLOR": { + "LABEL": "Couleur du Widget", + "PLACEHOLDER": "Mettre à jour la couleur utilisée dans le widget" + }, + "SUBMIT_BUTTON": "Créer une boîte de réception", + "API": { + "ERROR_MESSAGE": "Nous n'avons pas pu créer un canal web, veuillez réessayer" + } + }, + "TWILIO": { + "TITLE": "Chaîne Twilio SMS/WhatsApp", + "DESC": "Intégrez Twilio et commencez à soutenir vos clients par SMS ou WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "SID du compte", + "PLACEHOLDER": "Veuillez entrer le SID de votre compte Twilio", + "ERROR": "Ce champ est requis" + }, + "API_KEY": { + "USE_API_KEY": "Utiliser l'authentification par clé API", + "LABEL": "SID de la clé API", + "PLACEHOLDER": "Veuillez entrer votre clé API SID", + "ERROR": "Ce champ est requis" + }, + "API_KEY_SECRET": { + "LABEL": "Secret de la clé API", + "PLACEHOLDER": "Veuillez entrer le secret de votre clé API", + "ERROR": "Ce champ est requis" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "SID du service de messagerie", + "PLACEHOLDER": "Veuillez entrer votre SID du service de messagerie Twilio", + "ERROR": "Ce champ est requis", + "USE_MESSAGING_SERVICE": "Utilisez un service de messagerie Twilio" + }, + "CHANNEL_TYPE": { + "LABEL": "Type de canal", + "ERROR": "Veuillez sélectionner votre type de canal" + }, + "AUTH_TOKEN": { + "LABEL": "Jeton d'authentification", + "PLACEHOLDER": "Veuillez entrer votre jeton d'authentification Twilio", + "ERROR": "Ce champ est requis" + }, + "CHANNEL_NAME": { + "LABEL": "Nom de la boîte de réception", + "PLACEHOLDER": "Veuillez entrer un nom de boîte de réception", + "ERROR": "Ce champ est requis" + }, + "PHONE_NUMBER": { + "LABEL": "Numéro de téléphone", + "PLACEHOLDER": "Veuillez entrer le numéro de téléphone à partir duquel le message sera envoyé.", + "ERROR": "Veuillez fournir un numéro de téléphone valide qui commence par un signe `+` et ne contient aucun espace." + }, + "API_CALLBACK": { + "TITLE": "URL de rappel (callback)", + "SUBTITLE": "Vous devez configurer l'URL de rappel (callback) du message dans Twilio avec l'URL mentionnée ici." + }, + "SUBMIT_BUTTON": "Créer le canal Twilio", + "API": { + "ERROR_MESSAGE": "Nous n'avons pas pu authentifier les identifiants Twilio, veuillez réessayer" + } + }, + "SMS": { + "TITLE": "Canal SMS", + "DESC": "Commencez à soutenir vos clients par SMS.", + "PROVIDERS": { + "LABEL": "API Provider", + "TWILIO": "Twilio", + "BANDWIDTH": "Bande passante" + }, + "API": { + "ERROR_MESSAGE": "Nous n'avons pas pu enregistrer le canal SMS" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "ID du compte client", + "PLACEHOLDER": "Veuillez entrer votre ID de compte de bande passante", + "ERROR": "Ce champ est requis" + }, + "API_KEY": { + "LABEL": "Clé de l'API", + "PLACEHOLDER": "Please enter your Bandwidth API Key", + "ERROR": "Ce champ est requis" + }, + "API_SECRET": { + "LABEL": "Secret API", + "PLACEHOLDER": "Please enter your Bandwidth API Secret", + "ERROR": "Ce champ est requis" + }, + "APPLICATION_ID": { + "LABEL": "ID de l'application", + "PLACEHOLDER": "Veuillez entrer votre ID d'application de bande passante", + "ERROR": "Ce champ est requis" + }, + "INBOX_NAME": { + "LABEL": "Nom de la boîte de réception", + "PLACEHOLDER": "Veuillez entrer un nom de boîte de réception", + "ERROR": "Ce champ est requis" + }, + "PHONE_NUMBER": { + "LABEL": "Numéro de téléphone", + "PLACEHOLDER": "Veuillez entrer le numéro de téléphone à partir duquel le message sera envoyé.", + "ERROR": "Veuillez fournir un numéro de téléphone valide qui commence par un signe `+` et ne contient aucun espace." + }, + "SUBMIT_BUTTON": "Créer un canal de bande passante", + "API": { + "ERROR_MESSAGE": "Nous n'avons pas pu authentifier les identifiants de bande passante, veuillez réessayer" + }, + "API_CALLBACK": { + "TITLE": "URL de rappel (callback)", + "SUBTITLE": "Vous devez configurer l'URL de rappel du message en bande passante avec l'URL mentionnée ici." + } + } + }, + "WHATSAPP": { + "TITLE": "Chaîne WhatsApp", + "DESC": "Commencez à soutenir vos clients via WhatsApp.", + "PROVIDERS": { + "LABEL": "API Provider", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "Cloud WhatsApp", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "Fenêtre de dialogue 360" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "Nom de la boîte de réception", + "PLACEHOLDER": "Veuillez entrer un nom de boîte de réception", + "ERROR": "Ce champ est requis" + }, + "PHONE_NUMBER": { + "LABEL": "Numéro de téléphone", + "PLACEHOLDER": "Veuillez entrer le numéro de téléphone à partir duquel le message sera envoyé.", + "ERROR": "Veuillez fournir un numéro de téléphone valide qui commence par un signe `+` et ne contient aucun espace." + }, + "PHONE_NUMBER_ID": { + "LABEL": "ID du numéro de téléphone", + "PLACEHOLDER": "Veuillez entrer l'ID du numéro de téléphone obtenu à partir du tableau de bord du développeur Facebook.", + "ERROR": "Veuillez saisir une adresse de courriel valide." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "Identifiant du compte professionnel", + "PLACEHOLDER": "Veuillez entrer l'ID du compte professionnel obtenu depuis le tableau de bord des développeurs Facebook.", + "ERROR": "Veuillez saisir une adresse de courriel valide." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Jeton de vérification du Webhook", + "PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.", + "ERROR": "Veuillez saisir une adresse de courriel valide." + }, + "API_KEY": { + "LABEL": "Clé de l'API", + "SUBTITLE": "Configurer la clé API WhatsApp.", + "PLACEHOLDER": "Clé de l'API", + "ERROR": "Veuillez saisir une adresse de courriel valide." + }, + "API_CALLBACK": { + "TITLE": "URL de rappel (callback)", + "SUBTITLE": "Vous devez configurer l'URL du webhook et le jeton de vérification du portail Facebook Developer avec les valeurs indiquées ci-dessous.", + "WEBHOOK_URL": "URL du Webhook", + "WEBHOOK_VERIFICATION_TOKEN": "Jeton de vérification du Webhook" + }, + "SUBMIT_BUTTON": "Créer le canal WhatsApp", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "Nous n'avons pas pu enregistrer le canal WhatsApp" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "Numéro de téléphone", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "SID du compte", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "Jeton d'authentification", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "SID de la clé API", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "Secret de la clé API", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "Canal API", + "DESC": "Intégrez le canal API et commencez à aider vos clients.", + "CHANNEL_NAME": { + "LABEL": "Nom du canal", + "PLACEHOLDER": "Veuillez entrer un nom de canal", + "ERROR": "Ce champ est requis" + }, + "WEBHOOK_URL": { + "LABEL": "URL du Webhook", + "SUBTITLE": "Configure the URL where you want to receive callbacks on events.", + "PLACEHOLDER": "URL du Webhook" + }, + "SUBMIT_BUTTON": "Créer un canal API", + "API": { + "ERROR_MESSAGE": "Nous n'avons pas pu enregistrer le canal API" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "Canal Courriel", + "DESC": "Integrate your email inbox.", + "CHANNEL_NAME": { + "LABEL": "Nom du canal", + "PLACEHOLDER": "Veuillez entrer un nom de canal", + "ERROR": "Ce champ est requis" + }, + "EMAIL": { + "LABEL": "Courriel", + "SUBTITLE": "Adresse de courriel où vos clients vous envoient des demandes d'assistance", + "PLACEHOLDER": "Courriel" + }, + "SUBMIT_BUTTON": "Créer le canal Courriel", + "API": { + "ERROR_MESSAGE": "Nous n'avons pas pu enregistrer le canal courriel" + }, + "FINISH_MESSAGE": "Commencez à transférer vos courriels à l'adresse suivante.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "Cliquez ici", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "Canal LINE", + "DESC": "Intégrez le canal LINE et commencez à assister vos clients.", + "CHANNEL_NAME": { + "LABEL": "Nom du canal", + "PLACEHOLDER": "Veuillez entrer un nom de canal", + "ERROR": "Ce champ est requis" + }, + "LINE_CHANNEL_ID": { + "LABEL": "ID du canal LINE", + "PLACEHOLDER": "ID du canal LINE" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "Secret du canal LINE", + "PLACEHOLDER": "Secret du canal LINE" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "Jeton de canal LINE", + "PLACEHOLDER": "Jeton de canal LINE" + }, + "SUBMIT_BUTTON": "Créer le canal LINE", + "API": { + "ERROR_MESSAGE": "Nous n'avons pas pu enregistrer le canal LINE" + }, + "API_CALLBACK": { + "TITLE": "URL de rappel (callback)", + "SUBTITLE": "Vous devez configurer l'URL du webhook dans l'application LINE avec l'URL mentionnée ici." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Canal Telegram", + "DESC": "Intégrez le canal Telegram et commencez à assister vos clients.", + "BOT_TOKEN": { + "LABEL": "Jeton du robot", + "SUBTITLE": "Configurez le jeton de bot que vous avez obtenu de Telegram BotFather.", + "PLACEHOLDER": "Jeton du robot" + }, + "SUBMIT_BUTTON": "Créer un canal Telegram", + "API": { + "ERROR_MESSAGE": "Nous n'avons pas pu enregistrer le canal Telegram" + } + }, + "AUTH": { + "TITLE": "Choisir un canal", + "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Site internet", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "Courriel", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Agents", + "DESC": "Ici vous pouvez ajouter des agents pour gérer votre boîte de réception nouvellement créée. Seuls ces agents sélectionnés auront accès à votre boîte de réception. Les agents qui ne font pas partie de cette boîte de réception ne seront pas en mesure de voir ou de répondre aux messages de cette boîte de réception lorsqu'ils se connectent.Webhooks
Les Webhooks sont des fonctions de rappel HTTP qui peuvent être définis pour chaque compte. Ils sont déclenchés par des événements comme la création de messages dans Chatwoot. Vous pouvez créer plusieurs Webhook pour ce compte.
Pour créer un Webhook, cliquez sur le bouton Ajouter un nouveau webhook . Vous pouvez également supprimer n'importe quel Webhook existant en cliquant sur le bouton Supprimer.
Les applications du tableau de bord
Les applications du tableau de bord permettent aux organisations d'intégrer une application dans le tableau de bord Chatwoot pour fournir le contexte aux agents d'assistance client. Cette fonctionnalité vous permet de créer une application indépendamment et d'intégrer cela dans le tableau de bord pour fournir les informations de l'utilisateur, leurs commandes, ou leur historique de paiement précédent.
Lorsque vous intégrez votre application en utilisant le tableau de bord dans Chatwoot, votre application obtiendra le contexte de la conversation et le contact comme un événement de fenêtre. Implémentez un listener pour l'événement message sur votre page pour recevoir le contexte.
Pour ajouter une nouvelle application de tableau de bord, cliquez sur le bouton 'Ajouter une nouvelle application de tableau de bord'.
", + "DESCRIPTION": "Les applications du tableau de bord permettent aux organisations d'intégrer une application dans le tableau de bord pour fournir le contexte des agents d'assistance client. Cette fonctionnalité vous permet de créer une application de manière indépendante et d'intégrer les informations de l'utilisateur, leurs commandes ou leur historique de paiement précédent.", + "LEARN_MORE": "Learn more about Dashboard Apps", + "LIST": { + "404": "Il n'y a pas encore d'applications de tableau de bord configurées sur ce compte", + "LOADING": "Récupération des applications du tableau de bord ...", + "TABLE_HEADER": { + "NAME": "Nom", + "ENDPOINT": "Terminaison" + }, + "EDIT_TOOLTIP": "Editer l'application", + "DELETE_TOOLTIP": "Supprimer l'application" + }, + "FORM": { + "TITLE_LABEL": "Nom", + "TITLE_PLACEHOLDER": "Entrez un nom pour votre application de tableau de bord", + "TITLE_ERROR": "Un nom pour l'application du tableau de bord est requis", + "URL_LABEL": "Terminaison", + "URL_PLACEHOLDER": "Entrez l'URL de terminaison où votre application est hébergée", + "URL_ERROR": "Une URL valide est requise" + }, + "CREATE": { + "HEADER": "Ajouter une nouvelle application de tableau de bord", + "FORM_SUBMIT": "Envoyer", + "FORM_CANCEL": "Annuler", + "API_SUCCESS": "Application du tableau de bord configurée avec succès", + "API_ERROR": "Nous n'avons pas pu créer d'application. Veuillez réessayer plus tard" + }, + "UPDATE": { + "HEADER": "Editer l'application du tableau de bord", + "FORM_SUBMIT": "Mettre à jour", + "FORM_CANCEL": "Annuler", + "API_SUCCESS": "L'application du tableau de bord a été mise à jour correctement", + "API_ERROR": "Impossible de mettre à jour l'application. Veuillez réessayer plus tard" + }, + "DELETE": { + "CONFIRM_YES": "Oui, supprimez-le", + "CONFIRM_NO": "Non, conservez-le", + "TITLE": "Confirmer la suppression", + "MESSAGE": "Êtes-vous sûr de vouloir supprimer l'application - {appName}?", + "API_SUCCESS": "Application du tableau de bord supprimée avec succès", + "API_ERROR": "Nous n'avons pas pu supprimer l'application. Veuillez réessayer plus tard" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "Fetching linear issues...", + "LOADING_ERROR": "There was an error fetching the linear issues, please try again", + "CREATE": "Créer", + "LINK": { + "SEARCH": "Search issues", + "SELECT": "Select issue", + "TITLE": "Lien", + "EMPTY_LIST": "No linear issues found", + "LOADING": "Loading", + "ERROR": "There was an error fetching the linear issues, please try again", + "LINK_SUCCESS": "Issue linked successfully", + "LINK_ERROR": "There was an error linking the issue, please try again", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "Create Linear issues from conversations, or link existing ones for seamless tracking.", + "FORM": { + "TITLE": { + "LABEL": "Titre", + "PLACEHOLDER": "Enter title", + "REQUIRED_ERROR": "Le titre est requis" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Enter description" + }, + "TEAM": { + "LABEL": "Équipes", + "PLACEHOLDER": "Sélectionner une équipe", + "SEARCH": "Search team", + "REQUIRED_ERROR": "Team is required" + }, + "ASSIGNEE": { + "LABEL": "Assignee", + "PLACEHOLDER": "Select assignee", + "SEARCH": "Search assignee" + }, + "PRIORITY": { + "LABEL": "Priorité", + "PLACEHOLDER": "Sélectionner la priorité", + "SEARCH": "Search priority" + }, + "LABEL": { + "LABEL": "Étiquettes", + "PLACEHOLDER": "Select label", + "SEARCH": "Search label" + }, + "STATUS": { + "LABEL": "État", + "PLACEHOLDER": "Select status", + "SEARCH": "Search status" + }, + "PROJECT": { + "LABEL": "Project", + "PLACEHOLDER": "Select project", + "SEARCH": "Search project" + } + }, + "CREATE": "Créer", + "CANCEL": "Annuler", + "CREATE_SUCCESS": "Issue created successfully", + "CREATE_ERROR": "There was an error creating the issue, please try again", + "LOADING_TEAM_ERROR": "There was an error fetching the teams, please try again", + "LOADING_TEAM_ENTITIES_ERROR": "There was an error fetching the team entities, please try again" + }, + "ISSUE": { + "STATUS": "État", + "PRIORITY": "Priorité", + "ASSIGNEE": "Assignee", + "LABELS": "Étiquettes", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Unlink", + "SUCCESS": "Issue unlinked successfully", + "ERROR": "There was an error unlinking the issue, please try again" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Oui, supprimer", + "CANCEL": "Annuler" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Oui, supprimer", + "CANCEL": "Annuler" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "Envoyer un message...", + "EMPTY_MESSAGE": "Une erreur s'est produite lors de la génération de la réponse. Veuillez réessayer.", + "LOADER": "Captain is thinking", + "YOU": "Vous", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Résumer cette conversation", + "CONTENT": "Résumé des points clés de la conversation entre le client et l'agent de support, y compris les préoccupations et questions du client, ainsi que les solutions ou réponses fournies par l'agent de support" + }, + "SUGGEST": { + "LABEL": "Suggérer une réponse", + "CONTENT": "Analysez la demande du client et rédigez une réponse qui traite efficacement ses préoccupations ou questions. Assurez-vous que la réponse soit claire, concise et fournisse des informations utiles." + }, + "RATE": { + "LABEL": "Évaluer cette conversation", + "CONTENT": "Revue de la conversation pour évaluer dans quelle mesure elle répond aux besoins du client. Partagez une note sur 5 en fonction du ton, de la clarté et de l'efficacité." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "Vous", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "Tapez votre message...", + "HEADER": "Terrain de jeu", + "DESCRIPTION": "Utilisez ce terrain de jeu pour envoyer des messages à votre assistant et vérifier s'il répond de manière précise, rapide et dans le ton que vous attendez.", + "CREDIT_NOTE": "Les messages envoyés ici compteront pour vos crédits Captain." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "Annuler", + "CREATE": "Créer", + "EDIT": "Mettre à jour" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Oui, supprimer", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "Mettre à jour", + "SECTIONS": { + "BASIC_INFO": "Informations de base", + "SYSTEM_MESSAGES": "Messages système", + "INSTRUCTIONS": "Instructions", + "FEATURES": "Fonctionnalités", + "TOOLS": "Outils " + }, + "NAME": { + "LABEL": "Nom", + "PLACEHOLDER": "Entrez le nom de l'assistant", + "ERROR": "Le nom est requis" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Entrez la description de l'assistant", + "ERROR": "La description est requise" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Entrez le nom du produit", + "ERROR": "The product name is required" + }, + "WELCOME_MESSAGE": { + "LABEL": "Message de bienvenue", + "PLACEHOLDER": "Entrez le message de bienvenue" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Message de transfert", + "PLACEHOLDER": "Entrez le message de transfert" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Message de résolution", + "PLACEHOLDER": "Entrez le message de résolution" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Entrez les instructions pour l'assistant" + }, + "FEATURES": { + "TITLE": "Fonctionnalités", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Impossible de trouver l'assistant. Veuillez réessayer." + }, + "SETTINGS": { + "HEADER": "Paramètres", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Supprimer" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "Créer", + "CANCEL": "Annuler", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Supprimer" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "Créer", + "CANCEL": "Annuler", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Supprimer" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Titre", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "Créer", + "CANCEL": "Annuler" + } + } + }, + "UPDATE": { + "CANCEL": "Annuler", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Oui, supprimer", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Outils", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Oui, supprimer", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "Aucun", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "Clé de l'API" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "Mot de passe", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Type" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Nombre", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Obligatoire" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "Supprimer", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Oui, supprimer", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "Tous" + }, + "STATUS": { + "TITLE": "État", + "PENDING": "En attente", + "APPROVED": "Approved", + "ALL": "Tous" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "Modifier", + "DELETE_RESPONSE": "Supprimer" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Déconnecter" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Oui, supprimer", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "Boîte de réception", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/fr/labelsMgmt.json new file mode 100644 index 0000000..27c0e5a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Étiquettes", + "HEADER_BTN_TXT": "Ajouter une étiquette", + "LOADING": "Récupération des étiquettes", + "DESCRIPTION": "Labels help you categorize and prioritize conversations and leads. You can assign a label to a conversation or contact using the side panel.", + "LEARN_MORE": "Learn more about labels", + "SEARCH_404": "Il n'y a aucun élément correspondant à cette requête", + "LIST": { + "404": "Il n'y a aucune étiquette disponible dans ce compte.", + "TITLE": "Gérer les étiquettes", + "DESC": "Les étiquettes vous permettent de grouper les conversations ensemble.", + "TABLE_HEADER": { + "NAME": "Nom", + "DESCRIPTION": "Description", + "COLOR": "Couleur" + } + }, + "FORM": { + "NAME": { + "LABEL": "Nom de l'étiquette", + "PLACEHOLDER": "Nom de l'étiquette", + "REQUIRED_ERROR": "Le nom de l'étiquette est requis", + "MINIMUM_LENGTH_ERROR": "Longueur minimale de 2 requise", + "VALID_ERROR": "Seuls les caractères alphabétiques, les chiffres, les traits d'union et les tirets bas sont autorisés" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Description de l'étiquette" + }, + "COLOR": { + "LABEL": "Couleur" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Afficher l'étiquette dans la barre latérale" + }, + "EDIT": "Modifier", + "CREATE": "Créer", + "DELETE": "Supprimer", + "CANCEL": "Annuler" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Ajouter un libellé à la conversation", + "MULTIPLE_SUGGESTION": "Sélectionner ce libellé", + "DESELECT": "Désélectionner ce libellé", + "DISMISS": "Rejeter la suggestion" + }, + "POWERED_BY": "Chatwoot IA", + "DISMISS": "Rejeter", + "ADD_SELECTED_LABELS": "Ajouter les libellés sélectionnés", + "ADD_SELECTED_LABEL": "Ajouter le libellé sélectionné", + "ADD_ALL_LABELS": "Ajouter tous les libellés", + "SUGGESTED_LABELS": "Suggested labels" + }, + "ADD": { + "TITLE": "Ajouter une étiquette", + "DESC": "Les étiquettes vous permettent de grouper les conversations ensemble.", + "API": { + "SUCCESS_MESSAGE": "Étiquette ajoutée avec succès", + "ERROR_MESSAGE": "Une erreur est survenue, veuillez réessayer" + } + }, + "EDIT": { + "TITLE": "Modifier l'étiquette", + "API": { + "SUCCESS_MESSAGE": "Étiquette mise à jour avec succès", + "ERROR_MESSAGE": "Une erreur est survenue, veuillez réessayer" + } + }, + "DELETE": { + "BUTTON_TEXT": "Supprimer", + "API": { + "SUCCESS_MESSAGE": "Étiquette supprimée avec succès", + "ERROR_MESSAGE": "Une erreur est survenue, veuillez réessayer" + }, + "CONFIRM": { + "TITLE": "Confirmer la suppression", + "MESSAGE": "Êtes-vous sûr de vouloir supprimer ", + "YES": "Oui, supprimer ", + "NO": "Non, Conserver " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/login.json b/app/javascript/dashboard/i18n/locale/fr/login.json new file mode 100644 index 0000000..a1aa842 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Se connecter à Chatwoot", + "EMAIL": { + "LABEL": "Courriel", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "Veuillez saisir une adresse de courriel valide" + }, + "PASSWORD": { + "LABEL": "Mot de passe", + "PLACEHOLDER": "Mot de passe" + }, + "API": { + "SUCCESS_MESSAGE": "Connexion réussie", + "ERROR_MESSAGE": "Impossible de se connecter au serveur Woot, veuillez réessayer plus tard", + "UNAUTH": "Nom d'utilisateur / Mot de passe incorrect. Veuillez réessayer." + }, + "OAUTH": { + "GOOGLE_LOGIN": "Se connecter avec Google", + "BUSINESS_ACCOUNTS_ONLY": "Veuillez utiliser l'adresse e-mail de votre entreprise pour vous connecter", + "NO_ACCOUNT_FOUND": "Nous n'avons pas pu trouver de compte pour votre adresse e-mail." + }, + "FORGOT_PASSWORD": "Mot de passe oublié ?", + "CREATE_NEW_ACCOUNT": "Créer un nouveau compte", + "SUBMIT": "Se connecter", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/macros.json b/app/javascript/dashboard/i18n/locale/fr/macros.json new file mode 100644 index 0000000..20623d7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Macros", + "DESCRIPTION": "A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click.", + "LEARN_MORE": "Learn more about macros", + "HEADER_BTN_TXT": "Ajouter une macro", + "HEADER_BTN_TXT_SAVE": "Enregistrer une macro", + "LOADING": "Récupération des macros", + "ERROR": "Une erreur s'est produite. Veuillez réessayer", + "ORDER_INFO": "Les macros s'exécuteront dans l'ordre où vous ajoutez vos actions. Vous pouvez les réorganiser en les glissant par la poignée à côté de chaque nœud.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Nom de la macro", + "PLACEHOLDER": "Entrez un nom pour votre macro", + "ERROR": "Le nom est requis pour créer une macro" + }, + "ACTIONS": { + "LABEL": "Actions" + } + }, + "API": { + "SUCCESS_MESSAGE": "Macro ajoutée avec succès", + "ERROR_MESSAGE": "Impossible de créer une macro, veuillez réessayer plus tard" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nom", + "CREATED BY": "Créé par", + "LAST_UPDATED_BY": "Dernière mise à jour par", + "VISIBILITY": "Visibilité" + }, + "404": "Aucune macro trouvée" + }, + "DELETE": { + "TOOLTIP": "Supprimer la macro", + "CONFIRM": { + "MESSAGE": "Êtes-vous sûr de vouloir supprimer ", + "YES": "Oui, supprimer", + "NO": "Non" + }, + "API": { + "SUCCESS_MESSAGE": "Macro supprimée", + "ERROR_MESSAGE": "Une erreur est survenue lors de la suppression de la macro. Veuillez réessayer plus tard" + } + }, + "EDIT": { + "TOOLTIP": "Modifier la macro", + "API": { + "SUCCESS_MESSAGE": "Macro mise à jour", + "ERROR_MESSAGE": "Impossible de mettre à jour Macro, merci de réessayer plus tard" + } + }, + "EDITOR": { + "START_FLOW": "Démarrer le flux", + "END_FLOW": "Arrêter le flux", + "LOADING": "Récupération de la macro", + "ADD_BTN_TOOLTIP": "Ajouter nouvelle action", + "DELETE_BTN_TOOLTIP": "Supprimer une action", + "VISIBILITY": { + "LABEL": "Visibilité des macros", + "GLOBAL": { + "LABEL": "Publique", + "DESCRIPTION": "Cette macro est visible pour tous les agents de ce compte." + }, + "PERSONAL": { + "LABEL": "Privé", + "DESCRIPTION": "Cette macro sera privée pour vous et ne sera pas accessible aux autres." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Exécuter", + "PREVIEW": "Aperçu de la macro", + "EXECUTED_SUCCESSFULLY": "Macro exécutée" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "La valeur est requise", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Attribuer une équipe", + "ASSIGN_AGENT": "Attribuer un agent", + "ADD_LABEL": "Ajouter une étiquette", + "REMOVE_LABEL": "Supprimer une étiquette", + "REMOVE_ASSIGNED_TEAM": "Supprimer l’équipe assignée", + "SEND_EMAIL_TRANSCRIPT": "Envoyer une transcription par e-mail", + "MUTE_CONVERSATION": "Mettre la conversation en sourdine", + "SNOOZE_CONVERSATION": "Clôturer la conversation", + "RESOLVE_CONVERSATION": "Résoudre la conversation", + "SEND_ATTACHMENT": "Envoyer la pièce jointe", + "SEND_MESSAGE": "Envoyer un message", + "CHANGE_PRIORITY": "Modifier la priorité", + "ADD_PRIVATE_NOTE": "Ajouter une note privée", + "SEND_WEBHOOK_EVENT": "Envoyer un événement Webhook" + }, + "PRIORITY_TYPES": { + "NONE": "Aucun", + "LOW": "Faible", + "MEDIUM": "Moyenne", + "HIGH": "Élevé", + "URGENT": "Urgent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/mfa.json b/app/javascript/dashboard/i18n/locale/fr/mfa.json new file mode 100644 index 0000000..e540427 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "Activé", + "DISABLED": "Désactivé", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Loading...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "Copier", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "Annuler", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "Télécharger", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "Mot de passe", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "Annuler", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "Annuler", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/report.json b/app/javascript/dashboard/i18n/locale/fr/report.json new file mode 100644 index 0000000..5c41536 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Conversations", + "LOADING_CHART": "Chargement des données du graphique ...", + "NO_ENOUGH_DATA": "Nous n'avons pas reçu assez de points de données pour générer un rapport. Veuillez réessayer plus tard.", + "DOWNLOAD_AGENT_REPORTS": "Télécharger les rapports de l'agent", + "DATA_FETCHING_FAILED": "Impossible de récupérer les données, veuillez réessayer ultérieurement.", + "SUMMARY_FETCHING_FAILED": "Impossible de récupérer le résumé, veuillez réessayer plus tard.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "(Total)" + }, + "INCOMING_MESSAGES": { + "NAME": "Messages entrants", + "DESC": "(Total)" + }, + "OUTGOING_MESSAGES": { + "NAME": "Messages sortants", + "DESC": "(Total)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Délai de première réponse", + "DESC": "(Moy.)", + "INFO_TEXT": "Nombre total de conversations utilisées pour le calcul :", + "TOOLTIP_TEXT": "Le temps de première réponse est {metricValue} (basé sur {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Temps de résolution", + "DESC": "(Moy.)", + "INFO_TEXT": "Nombre total de conversations utilisées pour le calcul :", + "TOOLTIP_TEXT": "Le temps de résolution est {metricValue} (basé sur {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Nombre de résolutions", + "DESC": "(Total)" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Nombre de résolutions", + "DESC": "(Total)" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Handoff Count", + "DESC": "(Total)" + }, + "REPLY_TIME": { + "NAME": "Temps d'attente du client", + "TOOLTIP_TEXT": "Waiting time is {metricValue} (based on {conversationCount} replies)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "7 derniers jours", + "LAST_14_DAYS": "14 derniers jours", + "LAST_30_DAYS": "30 derniers jours", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "3 derniers mois", + "LAST_6_MONTHS": "6 derniers mois", + "LAST_YEAR": "Année dernière", + "CUSTOM_DATE_RANGE": "Plage de date personnalisée" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Appliquer", + "PLACEHOLDER": "Sélectionnez la plage de dates" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Par groupe", + "DURATION_FILTER_LABEL": "Durée", + "GROUPING_OPTIONS": { + "DAY": "Jour", + "WEEK": "Semaine", + "MONTH": "Mois", + "YEAR": "Année" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Jour" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Jour" + }, + { + "id": 2, + "groupBy": "Semaine" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Jour" + }, + { + "id": 2, + "groupBy": "Semaine" + }, + { + "id": 3, + "groupBy": "Mois" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "Jour" + }, + { + "id": 2, + "groupBy": "Semaine" + }, + { + "id": 3, + "groupBy": "Mois" + } + ], + "BUSINESS_HOURS": "Heures de bureau", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Aucun résultat trouvé" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Présentation des agents", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "Chargement des données du graphique ...", + "NO_ENOUGH_DATA": "Nous n'avons pas reçu assez de points de données pour générer un rapport. Veuillez réessayer plus tard.", + "DOWNLOAD_AGENT_REPORTS": "Télécharger les rapports de l'agent", + "FILTER_DROPDOWN_LABEL": "Sélectionner un agent", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "(Total)" + }, + "INCOMING_MESSAGES": { + "NAME": "Messages entrants", + "DESC": "(Total)" + }, + "OUTGOING_MESSAGES": { + "NAME": "Messages sortants", + "DESC": "(Total)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Délai de première réponse", + "DESC": "(Moy.)", + "INFO_TEXT": "Nombre total de conversations utilisées pour le calcul :", + "TOOLTIP_TEXT": "Le temps de première réponse est {metricValue} (basé sur {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Temps de résolution", + "DESC": "(Moy.)", + "INFO_TEXT": "Nombre total de conversations utilisées pour le calcul :", + "TOOLTIP_TEXT": "Le temps de résolution est {metricValue} (basé sur {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Nombre de résolutions", + "DESC": "(Total)" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "7 derniers jours" + }, + { + "id": 1, + "name": "30 derniers jours" + }, + { + "id": 2, + "name": "3 derniers mois" + }, + { + "id": 3, + "name": "6 derniers mois" + }, + { + "id": 4, + "name": "Année dernière" + }, + { + "id": 5, + "name": "Plage de date personnalisée" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Appliquer", + "PLACEHOLDER": "Sélectionnez la plage de dates" + } + }, + "LABEL_REPORTS": { + "HEADER": "Présentation des étiquettes", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "Chargement des données du graphique ...", + "NO_ENOUGH_DATA": "Nous n'avons pas reçu assez de points de données pour générer un rapport. Veuillez réessayer plus tard.", + "DOWNLOAD_LABEL_REPORTS": "Télécharger les rapports d'étiquettes", + "FILTER_DROPDOWN_LABEL": "Sélectionnez l'étiquette", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "(Total)" + }, + "INCOMING_MESSAGES": { + "NAME": "Messages entrants", + "DESC": "(Total)" + }, + "OUTGOING_MESSAGES": { + "NAME": "Messages sortants", + "DESC": "(Total)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Délai de première réponse", + "DESC": "(Moy.)", + "INFO_TEXT": "Nombre total de conversations utilisées pour le calcul :", + "TOOLTIP_TEXT": "Le temps de première réponse est {metricValue} (basé sur {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Temps de résolution", + "DESC": "(Moy.)", + "INFO_TEXT": "Nombre total de conversations utilisées pour le calcul :", + "TOOLTIP_TEXT": "Le temps de résolution est {metricValue} (basé sur {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Nombre de résolutions", + "DESC": "(Total)" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "7 derniers jours" + }, + { + "id": 1, + "name": "30 derniers jours" + }, + { + "id": 2, + "name": "3 derniers mois" + }, + { + "id": 3, + "name": "6 derniers mois" + }, + { + "id": 4, + "name": "Année dernière" + }, + { + "id": 5, + "name": "Plage de date personnalisée" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Appliquer", + "PLACEHOLDER": "Sélectionnez la plage de dates" + } + }, + "INBOX_REPORTS": { + "HEADER": "Présentation de la boîte de réception", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "Chargement des données du graphique ...", + "NO_ENOUGH_DATA": "Nous n'avons pas reçu assez de points de données pour générer un rapport. Veuillez réessayer plus tard.", + "DOWNLOAD_INBOX_REPORTS": "Télécharger les rapports de la boîte de réception", + "FILTER_DROPDOWN_LABEL": "Sélectionner la boîte de réception", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "(Total)" + }, + "INCOMING_MESSAGES": { + "NAME": "Messages entrants", + "DESC": "(Total)" + }, + "OUTGOING_MESSAGES": { + "NAME": "Messages sortants", + "DESC": "(Total)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Délai de première réponse", + "DESC": "(Moy.)", + "INFO_TEXT": "Nombre total de conversations utilisées pour le calcul :", + "TOOLTIP_TEXT": "Le temps de première réponse est {metricValue} (basé sur {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Temps de résolution", + "DESC": "(Moy.)", + "INFO_TEXT": "Nombre total de conversations utilisées pour le calcul :", + "TOOLTIP_TEXT": "Le temps de résolution est {metricValue} (basé sur {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Nombre de résolutions", + "DESC": "(Total)" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "7 derniers jours" + }, + { + "id": 1, + "name": "30 derniers jours" + }, + { + "id": 2, + "name": "3 derniers mois" + }, + { + "id": 3, + "name": "6 derniers mois" + }, + { + "id": 4, + "name": "Année dernière" + }, + { + "id": 5, + "name": "Plage de date personnalisée" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Appliquer", + "PLACEHOLDER": "Sélectionnez la plage de dates" + } + }, + "TEAM_REPORTS": { + "HEADER": "Présentation de l'équipe", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "Chargement des données du graphique ...", + "NO_ENOUGH_DATA": "Nous n'avons pas reçu assez de points de données pour générer un rapport. Veuillez réessayer plus tard.", + "DOWNLOAD_TEAM_REPORTS": "Télécharger les rapports d'équipe", + "FILTER_DROPDOWN_LABEL": "Choisis une équipe", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "(Total)" + }, + "INCOMING_MESSAGES": { + "NAME": "Messages entrants", + "DESC": "(Total)" + }, + "OUTGOING_MESSAGES": { + "NAME": "Messages sortants", + "DESC": "(Total)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Délai de première réponse", + "DESC": "(Moy.)", + "INFO_TEXT": "Nombre total de conversations utilisées pour le calcul :", + "TOOLTIP_TEXT": "Le temps de première réponse est {metricValue} (basé sur {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Temps de résolution", + "DESC": "(Moy.)", + "INFO_TEXT": "Nombre total de conversations utilisées pour le calcul :", + "TOOLTIP_TEXT": "Le temps de résolution est {metricValue} (basé sur {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Nombre de résolutions", + "DESC": "(Total)" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "7 derniers jours" + }, + { + "id": 1, + "name": "30 derniers jours" + }, + { + "id": 2, + "name": "3 derniers mois" + }, + { + "id": 3, + "name": "6 derniers mois" + }, + { + "id": 4, + "name": "Année dernière" + }, + { + "id": 5, + "name": "Plage de date personnalisée" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Appliquer", + "PLACEHOLDER": "Sélectionnez la plage de dates" + } + }, + "CSAT_REPORTS": { + "HEADER": "Rapports CSAT", + "NO_RECORDS": "Il n'y a aucune réponse à l'enquête CSAT disponible.", + "DOWNLOAD": "Télécharger les rapports CSAT", + "DOWNLOAD_FAILED": "Le téléchargement des rapports CSAT a échoué", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Choisissez des agents" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Contact", + "AGENT_NAME": "Agent assigné", + "RATING": "Note", + "FEEDBACK_TEXT": "Commentaire sur la rétroaction" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Réponses totales", + "TOOLTIP": "Nombre total de réponses collectées" + }, + "SATISFACTION_SCORE": { + "LABEL": "Score de satisfaction", + "TOOLTIP": "Nombre total de réponses positives / Nombre total de réponses * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Taux de réponse", + "TOOLTIP": "Nombre total de réponses / Nombre total de messages de l'enquête CSAT envoyés * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Bot Reports", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "No. of Conversations", + "TOOLTIP": "Total number of conversations handled by the bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total Responses", + "TOOLTIP": "Total number of responses sent by the bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Resolution Rate", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Handoff Rate", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Vue d'ensemble", + "LIVE": "En direct", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Conversations ouvertes", + "LOADING_MESSAGE": "Chargement des métriques de la conversation...", + "OPEN": "Ouvert", + "UNATTENDED": "Sans surveillance", + "UNASSIGNED": "Non assigné", + "PENDING": "En attente" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Trafic des conversations", + "NO_CONVERSATIONS": "Aucune conversation", + "CONVERSATION": "Conversation {count}", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "Aucune conversation", + "CONVERSATION": "Conversation {count}", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Conversations par des agents", + "LOADING_MESSAGE": "Chargement des métriques de l'agent...", + "NO_AGENTS": "Il n'y a aucune conversation par des agents", + "TABLE_HEADER": { + "AGENT": "Agent", + "OPEN": "Ouvert", + "UNATTENDED": "Sans surveillance", + "STATUS": "État" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Équipes", + "OPEN": "Ouvert", + "UNATTENDED": "Sans surveillance", + "STATUS": "État" + } + }, + "AGENT_STATUS": { + "HEADER": "Statut de l'agent", + "ONLINE": "En ligne", + "BUSY": "Occupé(e)", + "OFFLINE": "Hors-ligne" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Dimanche", + "MONDAY": "Lundi", + "TUESDAY": "Mardi", + "WEDNESDAY": "Mercredi", + "THURSDAY": "Jeudi", + "FRIDAY": "Vendredi", + "SATURDAY": "Samedi" + }, + "SLA_REPORTS": { + "HEADER": "SLA Reports", + "NO_RECORDS": "SLA applied conversations are not available.", + "LOADING": "Loading SLA data...", + "DOWNLOAD_SLA_REPORTS": "Download SLA reports", + "DOWNLOAD_FAILED": "Failed to download SLA Reports", + "DROPDOWN": { + "ADD_FIlTER": "Ajouter un filtre", + "CLEAR_ALL": "Clear all", + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Aucun résultat trouvé", + "NO_FILTER": "No filters available", + "SEARCH": "Search filter", + "INPUT_PLACEHOLDER": { + "SLA": "SLA name", + "AGENTS": "Nom de l'agent", + "INBOXES": "Nom de la boîte de réception", + "LABELS": "Nom de l'étiquette", + "TEAMS": "Nom de l'équipe" + }, + "SLA": "SLA Policy", + "INBOXES": "Boîte de réception", + "AGENTS": "Agent", + "LABELS": "Étiquettes", + "TEAMS": "Équipes" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentage of SLAs created were completed successfully" + }, + "NO_OF_MISSES": { + "LABEL": "Number of Misses", + "TOOLTIP": "Total SLA misses in a certain period" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Number of Conversations", + "TOOLTIP": "Total number of conversations with SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "Conversation", + "AGENT": "Agent" + }, + "VIEW_DETAILS": "View Details" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Boîte de réception", + "AGENT": "Agent", + "TEAM": "Équipes", + "LABEL": "Étiquettes", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "Nombre de résolutions", + "CONVERSATIONS": "Nbre de conversations" + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/resetPassword.json b/app/javascript/dashboard/i18n/locale/fr/resetPassword.json new file mode 100644 index 0000000..e4b60a3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Réinitialiser le mot de passe", + "DESCRIPTION": "Entrez l'adresse e-mail que vous utilisez pour vous connecter à Chatwoot pour obtenir les instructions de réinitialisation du mot de passe.", + "GO_BACK_TO_LOGIN": "Si vous voulez revenir à la page de connexion,", + "EMAIL": { + "LABEL": "Courriel", + "PLACEHOLDER": "Veuillez saisir votre adresse de courriel.", + "ERROR": "Veuillez saisir une adresse de courriel valide." + }, + "API": { + "SUCCESS_MESSAGE": "Le lien de réinitialisation du mot de passe a été envoyé à votre adresse de courriel.", + "ERROR_MESSAGE": "Impossible de se connecter au serveur Woot, veuillez réessayer plus tard" + }, + "SUBMIT": "Envoyer" + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/search.json b/app/javascript/dashboard/i18n/locale/fr/search.json new file mode 100644 index 0000000..381be00 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "Contacts", + "CONVERSATIONS": "Conversations", + "MESSAGES": "Messages", + "ARTICLES": "Articles" + }, + "SECTION": { + "CONTACTS": "Contacts", + "CONVERSATIONS": "Conversations", + "MESSAGES": "Messages", + "ARTICLES": "Articles" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "Recherche en cours", + "LOADING_DATA": "Loading", + "EMPTY_STATE": "Aucun {item} trouvé pour la requête '{query}'", + "EMPTY_STATE_FULL": "Aucun résultat pour la requête '{query}'", + "PLACEHOLDER_KEYBINDING": "/pour cibler", + "INPUT_PLACEHOLDER": "Tapez 3 caractères ou plus pour lancer la recherche", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Clear all", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Recherche par identifiant de conversation, e-mail, numéro de téléphone, messages pour de meilleurs résultats de recherche. ", + "BOT_LABEL": "Bot", + "READ_MORE": "En savoir plus", + "READ_LESS": "Read less", + "WROTE": "a écrit :", + "FROM": "De", + "EMAIL": "Courriel", + "EMAIL_SUBJECT": "Objet", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "7 derniers jours", + "LAST_30_DAYS": "30 derniers jours", + "LAST_60_DAYS": "60 derniers jours", + "LAST_90_DAYS": "90 derniers jours", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "et", + "APPLY": "Appliquer", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Clear filter" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Expéditeur", + "IN": "Boîte de réception", + "AGENTS": "Agents", + "CONTACTS": "Contacts", + "INBOXES": "Boîtes de réception", + "NO_AGENTS": "Aucun agent trouvé", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/setNewPassword.json b/app/javascript/dashboard/i18n/locale/fr/setNewPassword.json new file mode 100644 index 0000000..31d189e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Définir un nouveau mot de passe", + "PASSWORD": { + "LABEL": "Mot de passe", + "PLACEHOLDER": "Mot de passe", + "ERROR": "Le mot de passe est trop court." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirmer le mot de passe", + "PLACEHOLDER": "Confirmer le mot de passe", + "ERROR": "Les mots de passe ne correspondent pas." + }, + "API": { + "SUCCESS_MESSAGE": "Mot de passe modifié avec succès.", + "ERROR_MESSAGE": "Impossible de se connecter au serveur Woot, veuillez réessayer plus tard" + }, + "CAPTCHA": { + "ERROR": "La vérification a expiré. Veuillez résoudre le captcha à nouveau." + }, + "SUBMIT": "Envoyer" + } +} diff --git a/app/javascript/dashboard/i18n/locale/fr/settings.json b/app/javascript/dashboard/i18n/locale/fr/settings.json new file mode 100644 index 0000000..1213d1f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/fr/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Paramètres de profil", + "TITLE": "Paramètres de profil", + "BTN_TEXT": "Mettre à jour le profil", + "DELETE_AVATAR": "Supprimer l'avatar", + "AVATAR_DELETE_SUCCESS": "L'avatar a été supprimé avec succès", + "AVATAR_DELETE_FAILED": "Une erreur est survenue lors de la mise à jour des préférences, veuillez réessayer", + "UPDATE_SUCCESS": "Votre profil a été mis à jour avec succès", + "PASSWORD_UPDATE_SUCCESS": "Votre mot de passe a été modifié avec succès", + "AFTER_EMAIL_CHANGED": "Votre profil a été mis à jour avec succès, veuillez vous reconnecter car vos identifiants de connexion ont été modifiés", + "FORM": { + "PICTURE": "Profile Picture", + "AVATAR": "Image de profil", + "ERROR": "Veuillez corriger les erreurs du formulaire", + "REMOVE_IMAGE": "Supprimer", + "UPLOAD_IMAGE": "Téléverser une image", + "UPDATE_IMAGE": "Mettre à jour l'image", + "PROFILE_SECTION": { + "TITLE": "Profil", + "NOTE": "Votre adresse de courriel est votre identité et est utilisée pour vous connecter." + }, + "SEND_MESSAGE": { + "TITLE": "Raccourci clavier pour envoyer des messages", + "NOTE": "Vous pouvez sélectionner un raccourci clavier (Entrée ou Cmd/Ctrl+Entrée) en fonction de vos préférences d'écriture.", + "UPDATE_SUCCESS": "Votre profil a été mis à jour avec succès", + "CARD": { + "ENTER_KEY": { + "HEADING": "Entrer (Audit Logs
Audit Logs are trails for events and actions in a Chatwoot System.
", + "LIST": { + "404": "אין יומני ביקורת זמינים בחשבון זה.", + "TITLE": "נהל יומני ביקורת", + "DESC": "יומני ביקורת הם תיעוד לאירועים ופעולות במערכת Chatwoot.", + "TABLE_HEADER": { + "ACTIVITY": "משתמש", + "TIME": "פעולה", + "IP_ADDRESS": "כתובת IP" + } + }, + "API": { + "SUCCESS_MESSAGE": "יומני ביקורת אוחזרו בהצלחה", + "ERROR_MESSAGE": "לא ניתן להתחבר לשרת Woot, נסה שוב מאוחר יותר" + }, + "DEFAULT_USER": "מערכת", + "AUTOMATION_RULE": { + "ADD": "{agentName} יצר כלל אוטומציה חדש (#{id})", + "EDIT": "{agentName} עדכן כלל אוטומציה (#{id})", + "DELETE": "{agentName} מחק כלל אוטומציה (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} הזמין את {invitee} לחשבון בתור {role}", + "EDIT": { + "SELF": "{agentName} שינה את {attributes} שלו/שלה ל- {values}", + "OTHER": "{agentName} שינה את {attributes} של {user} ל- {values}", + "DELETED": "{agentName} שינה את {attributes} של משתמש שנמחק ל- {values}" + } + }, + "INBOX": { + "ADD": "{agentName} יצר תיבת דואר נכנס חדשה (#{id})", + "EDIT": "{agentName} עדכן תיבת דואר נכנס (#{id})", + "DELETE": "{agentName} מחק תיבת דואר נכנס (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} יצר Webhook חדש (#{id})", + "EDIT": "{agentName} עדכן Webhook (#{id})", + "DELETE": "{agentName} מחק Webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} נכנס/ה", + "SIGN_OUT": "{agentName} יצא/ה" + }, + "TEAM": { + "ADD": "{agentName} יצר צוות חדש (#{id})", + "EDIT": "{agentName} עדכן צוות (#{id})", + "DELETE": "{agentName} מחק צוות (#{id})" + }, + "MACRO": { + "ADD": "{agentName} יצר מאקרו חדש (#{id})", + "EDIT": "{agentName} עדכן מאקרו (#{id})", + "DELETE": "{agentName} מחק מאקרו (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} הוסיף/ה את {user} לתיבת הדואר הנכנס(#{inbox_id})", + "REMOVE": "{agentName} הסיר/ה את {user} מתיבת הדואר הנכנס(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} הוסיף/ה את {user} לצוות(#{team_id})", + "REMOVE": "{agentName} הסיר/ה את {user} מהצוות(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} עדכן/ה את הגדרות החשבון (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} מחק/ה שיחה #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/automation.json b/app/javascript/dashboard/i18n/locale/he/automation.json new file mode 100644 index 0000000..ecb982c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "אוטומציה", + "DESCRIPTION": "אוטומציה יכולה להחליף ולזרז תהליכים קיימים שדורשים מאמץ ידני, כגון הוספת תוויות והקצאת שיחות לסוכן המתאים ביותר. זה מאפשר לצוות להתמקד בחוזקות שלו תוך כדי הפחתת הזמן המושקע במשימות שגרתיות.", + "LEARN_MORE": "למד עוד על אוטומציה", + "HEADER_BTN_TXT": "הוסף כלל אוטומציה", + "LOADING": "טוען כללי אוטומציה", + "ADD": { + "TITLE": "הוסף כלל אוטומציה", + "SUBMIT": "צור", + "CANCEL_BUTTON_TEXT": "ביטול", + "FORM": { + "NAME": { + "LABEL": "שם כלל", + "PLACEHOLDER": "הכנס שם כלל", + "ERROR": "שם נדרש" + }, + "DESC": { + "LABEL": "תיאור", + "PLACEHOLDER": "הכנס תיאור כלל", + "ERROR": "תיאור נדרש" + }, + "EVENT": { + "LABEL": "אירוע", + "PLACEHOLDER": "אנא בחר אחד", + "ERROR": "אירוע נדרש" + }, + "CONDITIONS": { + "LABEL": "תנאים" + }, + "ACTIONS": { + "LABEL": "פעולות" + } + }, + "CONDITION_BUTTON_LABEL": "הוסף תנאי", + "ACTION_BUTTON_LABEL": "הוסף פעולה", + "API": { + "SUCCESS_MESSAGE": "כלל אוטומציה נוסף בהצלחה", + "ERROR_MESSAGE": "לא ניתן ליצור כלל אוטומציה, אנא נסה שוב מאוחר יותר" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "שם", + "DESCRIPTION": "תיאור", + "ACTIVE": "פעיל", + "CREATED_ON": "נוצר ב" + }, + "404": "לא נמצאו כללי אוטומציה" + }, + "DELETE": { + "TITLE": "מחק כלל אוטומציה", + "SUBMIT": "מחק", + "CANCEL_BUTTON_TEXT": "ביטול", + "CONFIRM": { + "TITLE": "אשר מחיקה", + "MESSAGE": "האם אתה בטוח למחוק ", + "YES": "כן, מחק ", + "NO": "לא, השאר " + }, + "API": { + "SUCCESS_MESSAGE": "כלל אוטומציה נמחק בהצלחה", + "ERROR_MESSAGE": "לא ניתן למחוק כלל אוטומציה, אנא נסה שוב מאוחר יותר" + } + }, + "EDIT": { + "TITLE": "ערוך כלל אוטומציה", + "SUBMIT": "עדכן", + "CANCEL_BUTTON_TEXT": "ביטול", + "API": { + "SUCCESS_MESSAGE": "כלל אוטומציה עודכן בהצלחה", + "ERROR_MESSAGE": "לא ניתן לעדכן כלל אוטומציה, אנא נסה שוב מאוחר יותר" + } + }, + "CLONE": { + "TOOLTIP": "שכפל", + "API": { + "SUCCESS_MESSAGE": "אוטומציה שוכפלה בהצלחה", + "ERROR_MESSAGE": "לא ניתן לשכפל כלל אוטומציה, אנא נסה שוב מאוחר יותר" + } + }, + "FORM": { + "EDIT": "ערוך", + "CREATE": "צור", + "DELETE": "מחק", + "CANCEL": "ביטול", + "RESET_MESSAGE": "שינוי סוג אירוע יאפס את התנאים והפעולות שהוספת למטה" + }, + "CONDITION": { + "DELETE_MESSAGE": "אתה צריך לפחות תנאי אחד כדי לשמור", + "CONTACT_CUSTOM_ATTR_LABEL": "מאפיינים מותאמים אישית של איש קשר", + "CONVERSATION_CUSTOM_ATTR_LABEL": "מאפיינים מותאמים אישית של שיחה" + }, + "ACTION": { + "DELETE_MESSAGE": "אתה צריך לפחות פעולה אחת כדי לשמור", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "הכנס את ההודעה שלך כאן", + "TEAM_DROPDOWN_PLACEHOLDER": "בחר צוותים", + "EMAIL_INPUT_PLACEHOLDER": "הכנס דוא\"ל", + "URL_INPUT_PLACEHOLDER": "הכנס URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "הפעל כלל אוטומציה", + "DEACTIVATION_TITLE": "השהה כלל אוטומציה", + "ACTIVATION_DESCRIPTION": "פעולה זו תפעיל את כלל האוטומציה '{automationName}'. האם אתה בטוח שברצונך להמשיך?", + "DEACTIVATION_DESCRIPTION": "פעולה זו תשהה את כלל האוטומציה '{automationName}'. האם אתה בטוח שברצונך להמשיך?", + "ACTIVATION_SUCCESFUL": "כלל האוטומציה הופעל בהצלחה", + "DEACTIVATION_SUCCESFUL": "כלל האוטומציה הושהה בהצלחה", + "ACTIVATION_ERROR": "לא ניתן להפעיל אוטומציה, אנא נסה שוב מאוחר יותר", + "DEACTIVATION_ERROR": "לא ניתן להשהות אוטומציה, אנא נסה שוב מאוחר יותר", + "CONFIRMATION_LABEL": "כן", + "CANCEL_LABEL": "לא" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "לא ניתן להעלות קובץ מצורף, אנא נסה שוב", + "LABEL_IDLE": "העלה קובץ מצורף", + "LABEL_UPLOADING": "מעלה...", + "LABEL_UPLOADED": "הועלה בהצלחה", + "LABEL_UPLOAD_FAILED": "העלאה נכשלה" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "מפתח מאפיין נדרש", + "FILTER_OPERATOR_REQUIRED": "אופרטור מסנן נדרש", + "VALUE_REQUIRED": "ערך נדרש", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "הערך חייב להיות בין 1 ל-998", + "ACTION_PARAMETERS_REQUIRED": "פרמטרי פעולה נדרשים", + "ATLEAST_ONE_CONDITION_REQUIRED": "נדרש לפחות תנאי אחד", + "ATLEAST_ONE_ACTION_REQUIRED": "נדרשת לפחות פעולה אחת" + }, + "NONE_OPTION": "אין", + "EVENTS": { + "CONVERSATION_CREATED": "שיחה נוצרה", + "CONVERSATION_UPDATED": "שיחה עודכנה", + "MESSAGE_CREATED": "הודעה נוצרה", + "CONVERSATION_RESOLVED": "שיחה נפתרה", + "CONVERSATION_OPENED": "שיחה נפתחה" + }, + "ACTIONS": { + "ASSIGN_AGENT": "הקצה לסוכן", + "ASSIGN_TEAM": "הקצה צוות", + "ADD_LABEL": "הוסף תווית", + "REMOVE_LABEL": "הסר תווית", + "SEND_EMAIL_TO_TEAM": "שלח דוא\"ל לצוות", + "SEND_EMAIL_TRANSCRIPT": "שלח תמליל דוא\"ל", + "MUTE_CONVERSATION": "השתק שיחה", + "SNOOZE_CONVERSATION": "נודניק שיחה", + "RESOLVE_CONVERSATION": "פתור שיחה", + "SEND_WEBHOOK_EVENT": "שלח אירוע Webhook", + "SEND_ATTACHMENT": "שלח קובץ מצורף", + "SEND_MESSAGE": "שלח הודעה", + "ADD_PRIVATE_NOTE": "הוסף הערה פרטית", + "CHANGE_PRIORITY": "שנה עדיפות", + "ADD_SLA": "הוסף SLA", + "OPEN_CONVERSATION": "פתח שיחה" + }, + "MESSAGE_TYPES": { + "INCOMING": "הודעה נכנסת", + "OUTGOING": "הודעה יוצאת" + }, + "PRIORITY_TYPES": { + "NONE": "אין", + "LOW": "נמוכה", + "MEDIUM": "בינונית", + "HIGH": "גבוהה", + "URGENT": "דחופה" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "סוג הודעה", + "MESSAGE_CONTAINS": "ההודעה מכילה", + "EMAIL": "דוא\"ל", + "INBOX": "תיבת דואר נכנס", + "CONVERSATION_LANGUAGE": "שפת שיחה", + "PHONE_NUMBER": "מספר טלפון", + "STATUS": "סטטוס", + "BROWSER_LANGUAGE": "שפת דפדפן", + "MAIL_SUBJECT": "נושא דוא\"ל", + "COUNTRY_NAME": "מדינה", + "REFERER_LINK": "קישור מפנה", + "ASSIGNEE_NAME": "מוקצה", + "TEAM_NAME": "צוות", + "PRIORITY": "עדיפות", + "LABELS": "תוויות" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/bulkActions.json b/app/javascript/dashboard/i18n/locale/he/bulkActions.json new file mode 100644 index 0000000..183f1bf --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} שיחות נבחרו", + "AGENT_SELECT_LABEL": "בחר נציג", + "ASSIGN_CONFIRMATION_LABEL": "האם אתה בטוח שברצונך לשייך {conversationCount} {conversationLabel} ל-", + "UNASSIGN_CONFIRMATION_LABEL": "האם אתה בטוח שברצונך לבטל שיוך {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "חזור", + "ASSIGN_LABEL": "שייך", + "YES": "כן", + "SEARCH_INPUT_PLACEHOLDER": "חפש", + "ASSIGN_AGENT_TOOLTIP": "שייך סוכן", + "ASSIGN_TEAM_TOOLTIP": "שייך צוות", + "ASSIGN_SUCCESFUL": "שיוך בוצע בהצלחה.", + "ASSIGN_FAILED": "ההקצאה של השיחות נכשלה. אנא נסה שוב.", + "RESOLVE_SUCCESFUL": "שיחה טופלה בהצלחה.", + "RESOLVE_FAILED": "הסגירה של השיחות נכשלה. אנא נסה שוב.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "השיחות הנבחרות הן המוצגות בדף זה בלבד.", + "AGENT_LIST_LOADING": "טוען סוכנים", + "UPDATE": { + "CHANGE_STATUS": "שנה סטאטוס", + "SNOOZE_UNTIL": "נודניק", + "UPDATE_SUCCESFUL": "סטאטוס השיחה שונה בהצלחה.", + "UPDATE_FAILED": "העדכון של השיחות נכשל. אנא נסה שוב." + }, + "LABELS": { + "ASSIGN_LABELS": "הקצה תוויות", + "NO_LABELS_FOUND": "לא נמצאו תוויות", + "ASSIGN_SELECTED_LABELS": "שייך תוויות נבחרות", + "ASSIGN_SUCCESFUL": "תוויות שוייכו בהצלחה.", + "ASSIGN_FAILED": "ההקצאה של התוויות נכשלה. אנא נסה שוב." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "בחר קבוצה", + "NONE": "כלום", + "NO_TEAMS_AVAILABLE": "לא קיימות קבוצות להוספה.", + "ASSIGN_SELECTED_TEAMS": "שייך קבוצה.", + "ASSIGN_SUCCESFUL": "הצוותים הוקצו בהצלחה.", + "ASSIGN_FAILED": "ההקצאה של הצוות נכשלה. אנא נסה שוב." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/campaign.json b/app/javascript/dashboard/i18n/locale/he/campaign.json new file mode 100644 index 0000000..45f4a3a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "קמפיינים של צ'אט חי", + "NEW_CAMPAIGN": "צור קמפיין", + "CARD": { + "STATUS": { + "ENABLED": "מופעל", + "DISABLED": "כבוי" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "נשלח על ידי", + "BOT": "בוט", + "FROM": "מ", + "URL": "כתובת URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "אין קמפיינים של צ'אט חי זמינים", + "SUBTITLE": "צור קשר עם הלקוחות שלך באמצעות הודעות יזומות. לחץ על 'צור קמפיין' כדי להתחיל." + }, + "CREATE": { + "TITLE": "צור קמפיין צ'אט חי", + "CANCEL_BUTTON_TEXT": "ביטול", + "CREATE_BUTTON_TEXT": "צור", + "FORM": { + "TITLE": { + "LABEL": "כותרת", + "PLACEHOLDER": "אנא הכנס כותרת לקמפיין", + "ERROR": "כותרת שדה חובה" + }, + "MESSAGE": { + "LABEL": "הודעה", + "PLACEHOLDER": "אנא הכנס הודעה לקמפיין", + "ERROR": "הודעה שדה חובה" + }, + "INBOX": { + "LABEL": "בחר תיבת דואר", + "PLACEHOLDER": "בחר תיבת דואר", + "ERROR": "נדרשת תיבת דואר נכנס" + }, + "SENT_BY": { + "LABEL": "נשלח על ידי", + "PLACEHOLDER": "אנא בחר שולח", + "ERROR": "שולח שדה חובה" + }, + "END_POINT": { + "LABEL": "כתובת URL", + "PLACEHOLDER": "אנא הכנס כתובת URL", + "ERROR": "אנא הכנס כתובת URL חוקית" + }, + "TIME_ON_PAGE": { + "LABEL": "זמן על הדף (שניות)", + "PLACEHOLDER": "אנא הכנס זמן", + "ERROR": "זמן על הדף שדה חובה" + }, + "OTHER_PREFERENCES": { + "TITLE": "העדפות אחרות", + "ENABLED": "הפעל קמפיין", + "TRIGGER_ONLY_BUSINESS_HOURS": "הפעל רק בשעות העבודה" + }, + "BUTTONS": { + "CREATE": "צור", + "CANCEL": "ביטול" + }, + "API": { + "SUCCESS_MESSAGE": "קמפיין צ'אט חי נוצר בהצלחה", + "ERROR_MESSAGE": "היתה שגיאה. בקשה נסה שוב." + } + } + }, + "EDIT": { + "TITLE": "ערוך קמפיין צ'אט חי", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "קמפיין צ'אט חי עודכן בהצלחה", + "ERROR_MESSAGE": "היתה שגיאה. בקשה נסה שוב." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "קמפיינים של SMS", + "NEW_CAMPAIGN": "צור קמפיין", + "EMPTY_STATE": { + "TITLE": "אין קמפיינים של SMS זמינים", + "SUBTITLE": "השק קמפיין SMS כדי להגיע ללקוחות שלך ישירות. שלח הצעות או פרסם הודעות בקלות. לחץ על 'צור קמפיין' כדי להתחיל." + }, + "CARD": { + "STATUS": { + "COMPLETED": "הושלם", + "SCHEDULED": "מתוזמן" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "נשלח מ-", + "ON": "ב-" + } + }, + "CREATE": { + "TITLE": "צור קמפיין SMS", + "CANCEL_BUTTON_TEXT": "ביטול", + "CREATE_BUTTON_TEXT": "צור", + "FORM": { + "TITLE": { + "LABEL": "כותרת", + "PLACEHOLDER": "אנא הכנס כותרת לקמפיין", + "ERROR": "כותרת שדה חובה" + }, + "MESSAGE": { + "LABEL": "הודעה", + "PLACEHOLDER": "אנא הכנס הודעה לקמפיין", + "ERROR": "הודעה שדה חובה" + }, + "INBOX": { + "LABEL": "בחר תיבת דואר", + "PLACEHOLDER": "בחר תיבת דואר", + "ERROR": "נדרשת תיבת דואר נכנס" + }, + "AUDIENCE": { + "LABEL": "קהל", + "PLACEHOLDER": "בחר את תוויות הלקוחות", + "ERROR": "נדרש קהל" + }, + "SCHEDULED_AT": { + "LABEL": "זמן מתוכנן", + "PLACEHOLDER": "אנא בחר את הזמן", + "ERROR": "נדרש זמן מתוכנן" + }, + "BUTTONS": { + "CREATE": "צור", + "CANCEL": "ביטול" + }, + "API": { + "SUCCESS_MESSAGE": "קמפיין SMS נוצר בהצלחה", + "ERROR_MESSAGE": "היתה שגיאה. בקשה נסה שוב." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "קמפיינים של WhatsApp", + "NEW_CAMPAIGN": "צור קמפיין", + "EMPTY_STATE": { + "TITLE": "אין קמפיינים של WhatsApp זמינים", + "SUBTITLE": "השק קמפיין WhatsApp כדי להגיע ללקוחות שלך ישירות. שלח הצעות או פרסם הודעות בקלות. לחץ על 'צור קמפיין' כדי להתחיל." + }, + "CARD": { + "STATUS": { + "COMPLETED": "הושלם", + "SCHEDULED": "מתוזמן" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "נשלח מ-", + "ON": "ב-" + } + }, + "CREATE": { + "TITLE": "צור קמפיין WhatsApp", + "CANCEL_BUTTON_TEXT": "ביטול", + "CREATE_BUTTON_TEXT": "צור", + "FORM": { + "TITLE": { + "LABEL": "כותרת", + "PLACEHOLDER": "אנא הכנס כותרת לקמפיין", + "ERROR": "כותרת שדה חובה" + }, + "INBOX": { + "LABEL": "בחר תיבת דואר", + "PLACEHOLDER": "בחר תיבת דואר", + "ERROR": "נדרשת תיבת דואר נכנס" + }, + "TEMPLATE": { + "LABEL": "תבנית WhatsApp", + "PLACEHOLDER": "בחר תבנית", + "INFO": "בחר תבנית לשימוש בקמפיין זה.", + "ERROR": "תבנית נדרשת", + "PREVIEW_TITLE": "עיבוד {templateName}", + "LANGUAGE": "שפה", + "CATEGORY": "קטגוריה", + "VARIABLES_LABEL": "משתנים", + "VARIABLE_PLACEHOLDER": "הזן ערך עבור {variable}" + }, + "AUDIENCE": { + "LABEL": "קהל", + "PLACEHOLDER": "בחר את תוויות הלקוחות", + "ERROR": "נדרש קהל" + }, + "SCHEDULED_AT": { + "LABEL": "זמן מתוכנן", + "PLACEHOLDER": "אנא בחר את הזמן", + "ERROR": "נדרש זמן מתוכנן" + }, + "BUTTONS": { + "CREATE": "צור", + "CANCEL": "ביטול" + }, + "API": { + "SUCCESS_MESSAGE": "קמפיין WhatsApp נוצר בהצלחה", + "ERROR_MESSAGE": "היתה שגיאה. בקשה נסה שוב." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "האם אתה בטוח שברצונך למחוק?", + "DESCRIPTION": "פעולת המחיקה היא קבועה ולא ניתנת לביטול.", + "CONFIRM": "מחק", + "API": { + "SUCCESS_MESSAGE": "מסע הפרסום נמחק בהצלחה", + "ERROR_MESSAGE": "היתה שגיאה. בקשה נסה שוב." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/he/cannedMgmt.json new file mode 100644 index 0000000..6b770ef --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "תגובות מוכנות", + "LEARN_MORE": "למד עוד על תגובות שמורות", + "DESCRIPTION": "תגובות מוכנות הן תבניות תשובה כתובות מראש שמסייעות לך להגיב במהירות לשיחה. סוכנים יכולים להקליד את התו '/' ואחריו קוד מקוצר כדי להכניס תגובה מוכנה במהלך השיחה. ", + "HEADER_BTN_TXT": "הוסף תגובה שמורה", + "LOADING": "מאחזר תגובות שמורות...", + "SEARCH_404": "אין פריטים התואמים לשאילתה זו.", + "LIST": { + "404": "אין תגובות מוכנות זמינות בחשבון זה.", + "TITLE": "נהל תגובות מוכנות", + "DESC": "תגובות שמורות הן תבניות תגובה מוגדרות מראש שניתן להשתמש בהן כדי לשלוח תגובות מהירות לשיחות.", + "TABLE_HEADER": { + "SHORT_CODE": "קוד מקוצר", + "CONTENT": "תוכן", + "ACTIONS": "פעולות" + } + }, + "ADD": { + "TITLE": "הוסף תגובה שמורה", + "DESC": "תגובות שמורות הן תבניות תגובה מוגדרות מראש שניתן להשתמש בהן כדי לשלוח תגובות מהירות לשיחות.", + "CANCEL_BUTTON_TEXT": "ביטול", + "FORM": { + "SHORT_CODE": { + "LABEL": "קוד מקוצר", + "PLACEHOLDER": "אנא הזן קוד מקוצר.", + "ERROR": "קוד מקוצר נדרש." + }, + "CONTENT": { + "LABEL": "הודעה", + "PLACEHOLDER": "אנא כתוב את ההודעה שברצונך לשמור כתבנית לשימוש מאוחר יותר.", + "ERROR": "הודעה נדרשת." + }, + "SUBMIT": "שלח" + }, + "API": { + "SUCCESS_MESSAGE": "תגובה שמורה נוספה בהצלחה.", + "ERROR_MESSAGE": "לא ניתן להתחבר לשרת Woot, נסה שוב מאוחר יותר" + } + }, + "EDIT": { + "TITLE": "ערוך תגובה שמורה", + "CANCEL_BUTTON_TEXT": "ביטול", + "FORM": { + "SHORT_CODE": { + "LABEL": "קוד מקוצר", + "PLACEHOLDER": "אנא הזן קוד מקוצר.", + "ERROR": "קוד מקוצר נדרש." + }, + "CONTENT": { + "LABEL": "הודעה", + "PLACEHOLDER": "אנא כתוב את ההודעה שברצונך לשמור כתבנית לשימוש מאוחר יותר.", + "ERROR": "הודעה שדה חובה." + }, + "SUBMIT": "שלח" + }, + "BUTTON_TEXT": "ערוך", + "API": { + "SUCCESS_MESSAGE": "התגובה השמורה עודכנה בהצלחה.", + "ERROR_MESSAGE": "לא ניתן להתחבר לשרת Woot, נסה שוב מאוחר יותר" + } + }, + "DELETE": { + "BUTTON_TEXT": "מחק", + "API": { + "SUCCESS_MESSAGE": "התגובה השמורה נמחקה בהצלחה.", + "ERROR_MESSAGE": "לא ניתן להתחבר לשרת Woot, נסה שוב מאוחר יותר" + }, + "CONFIRM": { + "TITLE": "אשר מחיקה", + "MESSAGE": "האם אתה בטוח שברצונך למחוק ", + "YES": "כן, מחק ", + "NO": "לא, השאר " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/chatlist.json b/app/javascript/dashboard/i18n/locale/he/chatlist.json new file mode 100644 index 0000000..7fd79b7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "טוען שיחות", + "LOAD_MORE_CONVERSATIONS": "טען עוד שיחות", + "EOF": "כל השיחות נטענו 🎉", + "LIST": { + "404": "אין שיחות פעילות בקבוצה הזו." + }, + "FAILED_TO_SEND": "שליחה נכשלה", + "TAB_HEADING": "שיחות", + "MENTION_HEADING": "תיוגים", + "UNATTENDED_HEADING": "לא מתוכנן", + "SEARCH": { + "INPUT": "חפש אנשים, שיחות, תגובות שמורות .." + }, + "FILTER_ALL": "הכל", + "ASSIGNEE_TYPE_TABS": { + "me": "שלי", + "unassigned": "לא הוקצתה", + "all": "הכל" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "פתח" + }, + "resolved": { + "TEXT": "נפתרה" + }, + "pending": { + "TEXT": "ממתין ל" + }, + "snoozed": { + "TEXT": "נימנום" + }, + "all": { + "TEXT": "הכל" + } + }, + "VIEW_FILTER": "צפה", + "SORT_TOOLTIP_LABEL": "מיין שיחות", + "CHAT_SORT": { + "STATUS": "מצב", + "ORDER_BY": "סדר לפי" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "נוצר", + "OLDEST": "נוצר בזמן:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "פעילות אחרונה:", + "ACTIVE": "פעילות אחרונה" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "פעילות אחרונה: הישן ביותר תחילה" + }, + "last_activity_at_desc": { + "TEXT": "פעילות אחרונה: החדש ביותר תחילה" + }, + "created_at_desc": { + "TEXT": "נוצר ב: החדש ביותר תחילה" + }, + "created_at_asc": { + "TEXT": "נוצר ב: הישן ביותר תחילה" + }, + "priority_desc": { + "TEXT": "עדיפות: הגבוהה ביותר תחילה" + }, + "priority_asc": { + "TEXT": "עדיפות: הנמוכה ביותר תחילה" + }, + "waiting_since_asc": { + "TEXT": "ממתין לתגובה: הארוך ביותר תחילה" + }, + "waiting_since_desc": { + "TEXT": "ממתין לתגובה: הקצר ביותר תחילה" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "הודעת תמונה" + }, + "audio": { + "CONTENT": "הודעות קוליות" + }, + "video": { + "CONTENT": "הודעות וידאו" + }, + "file": { + "CONTENT": "קובץ מצורף" + }, + "location": { + "CONTENT": "מיקום" + }, + "ig_reel": { + "CONTENT": "סרטון אינסטגרם (Reel)" + }, + "fallback": { + "CONTENT": "שיתף קישור" + }, + "contact": { + "CONTENT": "איש קשר משותף" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "מיין שיחה", + "DROPDOWN_TITLE": "מיין לפי", + "ITEMS": { + "LATEST": { + "NAME": "זמן פעילות אחרונה", + "LABEL": "פעילות אחרונה" + }, + "CREATED_AT": { + "NAME": "נוצר בזמן", + "LABEL": "נוצר בזמן" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "זמן הודעת משתמש אחרונה", + "LABEL": "הודעה אחרונה" + } + } + }, + "RECEIVED_VIA_EMAIL": "התקבל בדואר אלקטרוני", + "VIEW_TWEET_IN_TWITTER": "צפה בציוץ בטוויטר", + "REPLY_TO_TWEET": "הגב לציוץ זה", + "LINK_TO_STORY": "מעבר לסטורי באינסטגרם", + "SENT": "נשלח בהצלחה", + "READ": "נקרא בהצלחה", + "DELIVERED": "התקבל בהצלחה", + "NO_MESSAGES": "אין הודעות", + "NO_CONTENT": "אין תוכן זמין", + "HIDE_QUOTED_TEXT": "הסתר טקסט מצוטט", + "SHOW_QUOTED_TEXT": "הצג טקסט מצוטט", + "MESSAGE_READ": "נקרא", + "SENDING": "שולח" + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/companies.json b/app/javascript/dashboard/i18n/locale/he/companies.json new file mode 100644 index 0000000..1b721ab --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "מיין לפי", + "OPTIONS": { + "NAME": "שם", + "DOMAIN": "דומיין", + "CREATED_AT": "נוצר בזמן", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "סדר", + "OPTIONS": { + "ASCENDING": "עולה", + "DESCENDING": "יורד" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/components.json b/app/javascript/dashboard/i18n/locale/he/components.json new file mode 100644 index 0000000..7e4a339 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "מציג פריטים {startItem} עד {endItem} מתוך {totalItems}", + "CURRENT_PAGE_INFO": "{currentPage} מתוך {totalPages} עמודים" + }, + "COMBOBOX": { + "PLACEHOLDER": "בחר אפשרות...", + "EMPTY_SEARCH_RESULTS": "לא נמצאו פריטים עבור מונח החיפוש `{searchTerm}`", + "EMPTY_STATE": "לא נמצאו תוצאות.", + "SEARCH_PLACEHOLDER": "חיפוש...", + "MORE": "+{count} נוספים" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "חיפוש...", + "EMPTY_STATE": "לא נמצאו תוצאות.", + "SEARCHING": "מחפש..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "ביטול", + "CONFIRM": "אמת" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "חפש מדינה", + "ERROR": "מספר הטלפון צריך להיות ריק או בפורמט E.164", + "DIAL_CODE_ERROR": "נא בחר קוד מדינה מהרשימה" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "המחבר אינו זמין" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "פירורי לחם (Breadcrumb)" + }, + "SWITCH": { + "TOGGLE": "מתג הפעלה/כיבוי" + }, + "LABEL": { + "TAG_BUTTON": "תג" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "למד עוד", + "WATCH_VIDEO": "צפה בסרטון" + }, + "DURATION_INPUT": { + "MINUTES": "דקות", + "HOURS": "שעות", + "DAYS": "ימים", + "PLACEHOLDER": "הזן משך זמן" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "בקרוב!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/contact.json b/app/javascript/dashboard/i18n/locale/he/contact.json new file mode 100644 index 0000000..0555085 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "לא זמין", + "EMAIL_ADDRESS": "כתובת מייל", + "PHONE_NUMBER": "מספר טלפון", + "IDENTIFIER": "מזהה", + "COPY_SUCCESSFUL": "הועתק ללוח בהצלחה", + "COMPANY": "חברה", + "LOCATION": "מיקום", + "BROWSER_LANGUAGE": "שפת דפדפן", + "CONVERSATION_TITLE": "פרטי שיחה", + "VIEW_PROFILE": "הצג פרופיל", + "BROWSER": "דפדפן", + "OS": "מערכת הפעלה", + "INITIATED_FROM": "נוצר מ", + "INITIATED_AT": "נוצר ב", + "IP_ADDRESS": "כתובת IP", + "CREATED_AT_LABEL": "נוצר", + "NEW_MESSAGE": "הודעה חדשה", + "CALL": "התקשר", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "בחר תיבת דואר קולי" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "לא קיימות שיחות קודמות המשויכות לאיש קשר זה.", + "TITLE": "שיחות קודמות" + }, + "LABELS": { + "CONTACT": { + "TITLE": "תגיות אנשי קשר", + "ERROR": "לא ניתן לעדכן תוויות" + }, + "CONVERSATION": { + "TITLE": "תוויות שיחה", + "ADD_BUTTON": "הוסף תוויות" + }, + "LABEL_SELECT": { + "TITLE": "הוסף תוויות", + "PLACEHOLDER": "חפש תוויות", + "NO_RESULT": "לא נמצאו תוויות", + "CREATE_LABEL": "צור תווית חדשה" + } + }, + "MERGE_CONTACT": "מזג אנשי קשר", + "CONTACT_ACTIONS": "פעולות אנשי קשר", + "MUTE_CONTACT": "חסום איש קשר", + "UNMUTE_CONTACT": "בטל חסימת איש קשר", + "MUTED_SUCCESS": "איש הקשר נחסם בהצלחה. לא תקבל הודעה על שיחות עתידיות.", + "UNMUTED_SUCCESS": "איש הקשר נבטל חסימה בהצלחה.", + "SEND_TRANSCRIPT": "שלח תמלול", + "EDIT_LABEL": "ערוך", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "שדות מותאמים אישית", + "CONTACT_LABELS": "תגיות אנשי קשר", + "PREVIOUS_CONVERSATIONS": "שיחות קודמות", + "NO_RECORDS_FOUND": "לא נמצאו מאפיינים" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "ערוך איש קשר", + "TITLE": "ערוך איש קשר", + "DESC": "ערוך את פרטי איש הקשר" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "מחק איש קשר", + "TITLE": "מחק איש קשר", + "DESC": "מחק את פרטים של איש הקשר", + "CONFIRM": { + "TITLE": "אשר מחיקה", + "MESSAGE": "האם אתה בטוח שברצונך למחוק ", + "YES": "כן, מחק", + "NO": "לא, השאר" + }, + "API": { + "SUCCESS_MESSAGE": "איש הקשר נמחק בהצלחה", + "ERROR_MESSAGE": "לא ניתן היה למחוק איש קשר. בבקשה נסה שוב מאוחר יותר." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "שלח", + "CANCEL": "ביטול", + "AVATAR": { + "LABEL": "צור קשר עם אווטאר" + }, + "NAME": { + "PLACEHOLDER": "הזן את שמו המלא של איש הקשר", + "LABEL": "שם מלא" + }, + "BIO": { + "PLACEHOLDER": "הזן את הביוגרפיה של איש הקשר", + "LABEL": "ביוגרפיה" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "הזן את כתובת האימייל של איש הקשר", + "LABEL": "כתובת מייל", + "DUPLICATE": "כתובת דוא\"ל זו נמצאת בשימוש עבור איש קשר אחר.", + "ERROR": "בבקשה הכנס כתוכת אימייל תקינה." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "הזן את מספר הטלפון של איש הקשר", + "LABEL": "מספר טלפון", + "HELP": "מספר הטלפון צריך להיות בפורמט E.164, למשל: +1415555555 [+][קוד מדינה][אזור חיוג][מספר טלפון מקומי]", + "ERROR": "מספר הטלפון צריך להיות ריק או בפורמט E.164", + "DIAL_CODE_ERROR": "נא בחר קוד מדינה מהרשימה", + "DUPLICATE": "מספר טלפון זה נמצאת בשימוש עבור איש קשר אחר." + }, + "LOCATION": { + "PLACEHOLDER": "הזן את המיקום של איש הקשר", + "LABEL": "מיקום" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "הזן את שם החברה", + "LABEL": "שם החברה" + }, + "COUNTRY": { + "PLACEHOLDER": "הזן את שם המדינה", + "LABEL": "שם המדינה", + "SELECT_PLACEHOLDER": "בחר", + "REMOVE": "הסר", + "SELECT_COUNTRY": "בחר מדינה" + }, + "CITY": { + "PLACEHOLDER": "הזן את שם העיר", + "LABEL": "שם העיר" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "הזן את שם המשתמש בפייסבוק", + "LABEL": "פייסבוק" + }, + "TWITTER": { + "PLACEHOLDER": "הזן את שם המשתמש בטוויטר", + "LABEL": "טוויטר" + }, + "LINKEDIN": { + "PLACEHOLDER": "הזן את שם המשתמש בלינקדאין", + "LABEL": "לינקדאין" + }, + "GITHUB": { + "PLACEHOLDER": "הזן את שם המשתמש של Github", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "תמונת פרופיל נמחקה", + "ERROR_MESSAGE": "מחיקת התמונה נכשלה. נסה שנית מאוחר יותר." + } + }, + "SUCCESS_MESSAGE": "איש הקשר נשמר בהצלחה", + "ERROR_MESSAGE": "היתה שגיאה, בקשה נסה שוב" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "התחל שיחה", + "TITLE": "שיחה חדשה", + "DESC": "התחל שיחה חדשה על ידי שליחת הודעה חדשה.", + "NO_INBOX": "לא ניתן היה למצוא תיבת דואר נכנס כדי ליזום שיחה חדשה עם איש הקשר הזה.", + "FORM": { + "TO": { + "LABEL": "אל" + }, + "INBOX": { + "LABEL": "תיבת הדואר הנכנס", + "PLACEHOLDER": "בחר תיבת מקור", + "ERROR": "בחר תיבת דואר נכנס" + }, + "SUBJECT": { + "LABEL": "נושא", + "PLACEHOLDER": "נושא", + "ERROR": "הנושא לא יכול להיות ריק" + }, + "MESSAGE": { + "LABEL": "הודעה", + "PLACEHOLDER": "כתוב את הודעתך כאן", + "ERROR": "ההודעה לא יכולה להיות ריקה" + }, + "ATTACHMENTS": { + "SELECT": "בחר קבצים", + "HELP_TEXT": "גרור ושחרר קבצים כאן או בחר קבצים מצורפים" + }, + "SUBMIT": "שלח הודעה", + "CANCEL": "ביטול", + "SUCCESS_MESSAGE": "הודעה נשלחה!", + "GO_TO_CONVERSATION": "צפה", + "ERROR_MESSAGE": "לא ניתן לשלוח! נסה שוב" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "פרופילים חברתיים" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "הוסף מאפיין מותאם אישית", + "COPY_SUCCESSFUL": "הועתק ללוח בהצלחה", + "SHOW_MORE": "הצג את כל התכונות", + "SHOW_LESS": "הצג פחות תכונות", + "ACTIONS": { + "COPY": "העתק מאפיין", + "DELETE": "מחק מאפיין", + "EDIT": "ערוך מאפיין" + }, + "ADD": { + "TITLE": "צור מאפיין מותאם אישית", + "DESC": "הוסף מידע מותאם אישית לאיש קשר זה." + }, + "FORM": { + "CREATE": "הוסף מאפיין", + "CANCEL": "ביטול", + "NAME": { + "LABEL": "שם מאפיין מותאם אישית", + "PLACEHOLDER": "למשל: מזהה shopify", + "ERROR": "שם מאפיין מותאם אישית לא חוקי" + }, + "VALUE": { + "LABEL": "ערך מאפיין", + "PLACEHOLDER": "למשל: 11901 " + }, + "ADD": { + "TITLE": "צור מאפיין חדש ", + "SUCCESS": "מאפיין נוסף בהצלחה", + "ERROR": "לא ניתן היה ליצור מאפיין, אנא נסה שוב מאוחר יותר" + }, + "UPDATE": { + "SUCCESS": "המאפיין עודכן בהצלחה", + "ERROR": "לא ניתן לעדכן את המאפיין. בבקשה נסה שוב מאוחר יותר" + }, + "DELETE": { + "SUCCESS": "המאפיין נמחק בהצלחה", + "ERROR": "לא ניתן למחוק מאפיין. בבקשה נסה שוב מאוחר יותר" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "הוסף מאפיין", + "PLACEHOLDER": "חפש מאפיין", + "NO_RESULT": "לא נמצאו מאפיינים" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "בחר ערך", + "SEARCH_INPUT_PLACEHOLDER": "חפש ערך", + "NO_RESULT": "לא נמצאו תוצאות" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "נדרש ערך חוקי", + "INVALID_URL": "כתובת אתר לא חוקית", + "INVALID_INPUT": "קלט לא חוקי" + } + }, + "MERGE_CONTACTS": { + "TITLE": "מזג אנשי קשר", + "DESCRIPTION": "מיזוג אנשי קשר כדי לשלב שני פרופילים לאחד, כולל כל התכונות והשיחות. במקרה של התנגשות, התכונות של איש הקשר הראשי יקבלו עדיפות.", + "PRIMARY": { + "TITLE": "איש קשר ראשי", + "HELP_LABEL": "להימחק" + }, + "PARENT": { + "TITLE": "צור קשר למיזוג", + "PLACEHOLDER": "חפש איש קשר", + "HELP_LABEL": "להישמר" + }, + "SUMMARY": { + "TITLE": "סיכום", + "DELETE_WARNING": "איש הקשר של {primaryContactName} יימחק.", + "ATTRIBUTE_WARNING": "פרטי הקשר של {primaryContactName} יועתקו אל {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "משהו השתבש. אנא נסה שוב מאוחר יותר." + }, + "FORM": { + "SUBMIT": " מזג אנשי קשר", + "CANCEL": "ביטול", + "CHILD_CONTACT": { + "ERROR": "בחר איש קשר צאצא למזג" + }, + "SUCCESS_MESSAGE": "איש הקשר מוזג בהצלחה", + "ERROR_MESSAGE": "לא ניתן למזג אנשי קשר, נסה שוב!" + }, + "DROPDOWN_ITEM": { + "ID": "(מזהה: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "איש קשר", + "SEARCH_TITLE": "חפש אנשי קשר", + "ACTIVE_TITLE": "אנשי קשר פעילים", + "SEARCH_PLACEHOLDER": "חיפוש...", + "MESSAGE_BUTTON": "הודעה", + "SEND_MESSAGE": "שלח הודעה", + "BLOCK_CONTACT": "חסום איש קשר", + "UNBLOCK_CONTACT": "בטל חסימת איש קשר", + "BREADCRUMB": { + "CONTACTS": "איש קשר" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "הוסף איש קשר", + "EXPORT_CONTACT": "ייצא אנשי קשר", + "IMPORT_CONTACT": "ייבא אנשי קשר", + "SAVE_CONTACT": "שמור איש קשר", + "EMAIL_ADDRESS_DUPLICATE": "כתובת דוא\"ל זו נמצאת בשימוש עבור איש קשר אחר.", + "PHONE_NUMBER_DUPLICATE": "מספר טלפון זה נמצאת בשימוש עבור איש קשר אחר.", + "SUCCESS_MESSAGE": "איש הקשר נשמר בהצלחה", + "ERROR_MESSAGE": "לא ניתן לשמור איש קשר. אנא נסה שוב מאוחר יותר." + }, + "BLOCK_SUCCESS_MESSAGE": "איש קשר זה נחסם בהצלחה", + "BLOCK_ERROR_MESSAGE": "לא ניתן לחסום איש קשר. אנא נסה שוב מאוחר יותר.", + "UNBLOCK_SUCCESS_MESSAGE": "איש קשר זה בוטל חסימה בהצלחה", + "UNBLOCK_ERROR_MESSAGE": "לא ניתן לבטל חסימת איש קשר. אנא נסה שוב מאוחר יותר.", + "IMPORT_CONTACT": { + "TITLE": "ייבא אנשי קשר", + "DESCRIPTION": "ייבא אנשי קשר באמצעות קובץ CSV.", + "DOWNLOAD_LABEL": "הורד קובץ csv לדוגמה.", + "LABEL": "קובץ CSV:", + "CHOOSE_FILE": "בחר קובץ", + "CHANGE": "שינוי", + "CANCEL": "ביטול", + "IMPORT": "ייבוא", + "SUCCESS_MESSAGE": "תקבלו התראה במייל כשהייבוא יסתיים.", + "ERROR_MESSAGE": "היתה שגיאה, בקשה נסה שוב" + }, + "EXPORT_CONTACT": { + "TITLE": "ייצא אנשי קשר", + "DESCRIPTION": "ייצא במהירות קובץ CSV עם פרטים מקיפים על אנשי הקשר שלך", + "CONFIRM": "ייצא", + "SUCCESS_MESSAGE": "הייצוא מתבצע, תקבל הודעה בדוא\"ל כאשר קובץ הייצוא יהיה מוכן להורדה.", + "ERROR_MESSAGE": "היתה שגיאה, בקשה נסה שוב" + }, + "SORT_BY": { + "LABEL": "מיין לפי", + "OPTIONS": { + "NAME": "שם", + "EMAIL": "אימייל", + "PHONE_NUMBER": "מספר טלפון", + "COMPANY": "חברה", + "COUNTRY": "מדינה", + "CITY": "עיר", + "LAST_ACTIVITY": "פעילות אחרונה", + "CREATED_AT": "נוצר בזמן" + } + }, + "ORDER": { + "LABEL": "סדר", + "OPTIONS": { + "ASCENDING": "עולה", + "DESCENDING": "יורד" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "האם אתה רוצה לשמור את המסנן הזה?", + "CONFIRM": "שמור מסנן", + "LABEL": "שם", + "PLACEHOLDER": "הזן את שם המסנן", + "ERROR": "הזן שם חוקי", + "SUCCESS_MESSAGE": "המסנן נשמר בהצלחה", + "ERROR_MESSAGE": "לא ניתן לשמור את המסנן. אנא נסה שוב מאוחר יותר." + }, + "DELETE_SEGMENT": { + "TITLE": "אשר מחיקה", + "DESCRIPTION": "האם אתה בטוח שברצונך למחוק מסנן זה?", + "CONFIRM": "כן, מחק", + "CANCEL": "לא, ביטול", + "SUCCESS_MESSAGE": "המסנן נמחק בהצלחה", + "ERROR_MESSAGE": "לא ניתן למחוק את המסנן. אנא נסה שוב מאוחר יותר." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "שם", + "EMAIL": "אימייל", + "PHONE_NUMBER": "מספר טלפון", + "IDENTIFIER": "מזהה", + "COUNTRY": "מדינה", + "CITY": "עיר", + "CREATED_AT": "נוצר בזמן", + "LAST_ACTIVITY": "פעילות אחרונה", + "REFERER_LINK": "קישור מפנה", + "BLOCKED": "חסום", + "BLOCKED_TRUE": "נכון", + "BLOCKED_FALSE": "לא נכון", + "BUTTONS": { + "CLEAR_FILTERS": "נקה מסננים", + "UPDATE_SEGMENT": "עדכן מקטע", + "APPLY_FILTERS": "שמור סננים", + "ADD_FILTER": "הוסף מסנן" + }, + "TITLE": "סינון אנשי קשר", + "EDIT_SEGMENT": "ערוך מקטע", + "SEGMENT": { + "LABEL": "שם המקטע", + "INPUT_PLACEHOLDER": "הזן את שם המקטע" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} מסננים נוספים", + "CLEAR_FILTERS": "נקה מסננים" + } + }, + "CARD": { + "OF": "מתוך", + "VIEW_DETAILS": "הצג פרטים", + "EDIT_DETAILS_FORM": { + "TITLE": "ערוך את פרטי איש הקשר", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "הזן שם פרטי" + }, + "LAST_NAME": { + "PLACEHOLDER": "הזן שם משפחה" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "הזן כתובת דוא\"ל", + "DUPLICATE": "כתובת דוא\"ל זו נמצאת בשימוש עבור איש קשר אחר." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "הזן מספר טלפון", + "DUPLICATE": "מספר טלפון זה נמצאת בשימוש עבור איש קשר אחר." + }, + "CITY": { + "PLACEHOLDER": "הזן את שם העיר" + }, + "COUNTRY": { + "PLACEHOLDER": "בחר מדינה" + }, + "BIO": { + "PLACEHOLDER": "הזן ביוגרפיה" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "הזן את שם החברה" + } + }, + "UPDATE_BUTTON": "עדכן איש קשר", + "SUCCESS_MESSAGE": "איש קשר עודכן בהצלחה", + "ERROR_MESSAGE": "לא ניתן לעדכן איש קשר. אנא נסה שוב מאוחר יותר." + }, + "SOCIAL_MEDIA": { + "TITLE": "ערוך קישורים חברתיים", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "הוסף פייסבוק" + }, + "GITHUB": { + "PLACEHOLDER": "הוסף Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "הוסף אינסטגרם" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "הוסף LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "הוסף טוויטר" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "פעולה זו היא קבועה ובלתי הפיכה.", + "BUTTON": "מחק עכשיו" + } + }, + "DETAILS": { + "CREATED_AT": "נוצר ב-{date}", + "LAST_ACTIVITY": "פעיל אחרון {date}", + "DELETE_CONTACT_DESCRIPTION": "מחק לצמיתות את איש הקשר הזה. פעולה זו היא בלתי הפיכה", + "DELETE_CONTACT": "מחק איש קשר", + "DELETE_DIALOG": { + "TITLE": "אשר מחיקה", + "DESCRIPTION": "האם אתה בטוח שברצונך למחוק איש קשר זה?", + "CONFIRM": "כן, מחק", + "API": { + "SUCCESS_MESSAGE": "איש הקשר נמחק בהצלחה", + "ERROR_MESSAGE": "לא ניתן היה למחוק איש קשר. בבקשה נסה שוב מאוחר יותר." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "לא ניתן להעלות תמונה. אנא נסה שוב מאוחר יותר.", + "SUCCESS_MESSAGE": "תמונה הועלתה בהצלחה" + }, + "DELETE": { + "SUCCESS_MESSAGE": "האוואטר נמחק בהצלחה", + "ERROR_MESSAGE": "לא ניתן למחוק תמונה. אנא נסה שוב מאוחר יותר." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "מאפיינים", + "HISTORY": "היסטוריה", + "NOTES": "הערות", + "MERGE": "מזג" + }, + "HISTORY": { + "EMPTY_STATE": "לא קיימות שיחות קודמות המשויכות לאיש קשר זה" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "חפש תכונות", + "UNUSED_ATTRIBUTES": "{count} תכונה בשימוש | {count} תכונות שלא בשימוש", + "EMPTY_STATE": "אין תכונות מותאמות אישית של איש קשר זמינות בחשבון זה. באפשרותך ליצור תכונה מותאמת אישית בהגדרות.", + "YES": "כן", + "NO": "לא", + "TRIGGER": { + "SELECT": "בחר ערך", + "INPUT": "הזן ערך" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "מספר לא חוקי", + "REQUIRED": "נדרש ערך חוקי", + "INVALID_INPUT": "קלט לא חוקי", + "INVALID_URL": "כתובת אתר לא חוקית", + "INVALID_DATE": "תאריך לא חוקי" + }, + "NO_ATTRIBUTES": "לא נמצאו מאפיינים", + "API": { + "SUCCESS_MESSAGE": "המאפיין עודכן בהצלחה", + "DELETE_SUCCESS_MESSAGE": "המאפיין נמחק בהצלחה", + "UPDATE_ERROR": "לא ניתן לעדכן את המאפיין. בבקשה נסה שוב מאוחר יותר", + "DELETE_ERROR": "לא ניתן למחוק מאפיין. בבקשה נסה שוב מאוחר יותר" + } + }, + "MERGE": { + "TITLE": "מזג אנשי קשר", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "איש קשר ראשי", + "PRIMARY_HELP_LABEL": "לשמירה", + "PRIMARY_REQUIRED_ERROR": "אנא בחר איש קשר למיזוג לפני שתמשיך", + "PARENT": "למיזוג", + "PARENT_HELP_LABEL": "להימחק", + "EMPTY_STATE": "לא נמצאו אנשי קשר", + "PLACEHOLDER": "חפש איש קשר ראשי", + "SEARCH_PLACEHOLDER": "חפש איש קשר", + "SEARCH_ERROR_MESSAGE": "לא ניתן לחפש אנשי קשר. אנא נסה שוב מאוחר יותר.", + "SUCCESS_MESSAGE": "איש הקשר מוזג בהצלחה", + "ERROR_MESSAGE": "לא ניתן למזג אנשי קשר, נסה שוב!", + "IS_SEARCHING": "מחפש...", + "BUTTONS": { + "CANCEL": "ביטול", + "CONFIRM": "מזג אנשי קשר" + } + }, + "NOTES": { + "PLACEHOLDER": "הוסף הערה", + "WROTE": "נכתב", + "YOU": "אתה", + "SAVE": "שמור הערה", + "ADD_NOTE": "הוסף הערת איש קשר", + "EXPAND": "הרחב", + "COLLAPSE": "כווץ", + "NO_NOTES": "אין הערות, תוכל להוסיף הערות מדף פרטי איש הקשר.", + "EMPTY_STATE": "אין הערות המשויכות לאיש קשר זה. תוכל להוסיף הערה על ידי הקלדה בתיבה שלמעלה.", + "CONVERSATION_EMPTY_STATE": "אין עדיין הערות. השתמש בלחצן 'הוסף הערה' כדי ליצור אחת." + } + }, + "EMPTY_STATE": { + "TITLE": "לא נמצאו אנשי קשר בחשבון זה", + "SUBTITLE": "התחל להוסיף אנשי קשר חדשים על ידי לחיצה על הכפתור למטה", + "BUTTON_LABEL": "הוסף איש קשר", + "SEARCH_EMPTY_STATE_TITLE": "אין אנשי קשר שתואמים לחיפוש שלך 🔍", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "הקצה תוויות", + "ASSIGN_LABELS_SUCCESS": "תוויות שוייכו בהצלחה.", + "ASSIGN_LABELS_FAILED": "ההקצאה של התוויות נכשלה", + "DESCRIPTION": "בחר את התוויות שברצונך להוסיף לאנשי הקשר שנבחרו.", + "NO_LABELS_FOUND": "אין עדיין תוויות זמינות.", + "SELECTED_COUNT": "{count} נבחרו", + "CLEAR_SELECTION": "נקה בחירה", + "SELECT_ALL": "בחר הכל ({count})", + "DELETE_CONTACTS": "מחק", + "DELETE_SUCCESS": "אנשי קשר נמחקו בהצלחה.", + "DELETE_FAILED": "מחיקת אנשי הקשר נכשלה.", + "DELETE_DIALOG": { + "TITLE": "מחק אנשי קשר שנבחרו", + "SINGULAR_TITLE": "מחק איש קשר שנבחר", + "DESCRIPTION": "פעולה זו תמחק לצמיתות {count} אנשי קשר שנבחרו. לא ניתן לבטל פעולה זו.", + "SINGULAR_DESCRIPTION": "פעולה זו תמחק לצמיתות את איש הקשר שנבחר. לא ניתן לבטל פעולה זו.", + "CONFIRM_MULTIPLE": "מחק אנשי קשר", + "CONFIRM_SINGLE": "מחק איש קשר" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "צפה", + "SUCCESS_MESSAGE": "ההודעה נשלחה בהצלחה!", + "ERROR_MESSAGE": "אירעה שגיאה ביצירת השיחה. אנא נסה שוב מאוחר יותר.", + "NO_INBOX_ALERT": "אין תיבות דואר נכנס זמינות כדי להתחיל שיחה עם איש קשר זה.", + "CONTACT_SELECTOR": { + "LABEL": "אל:", + "TAG_INPUT_PLACEHOLDER": "חפש איש קשר לפי שם, דוא\"ל או מספר טלפון", + "CONTACT_CREATING": "יוצר איש קשר..." + }, + "INBOX_SELECTOR": { + "LABEL": "דרך:", + "BUTTON": "הצג תיבות דואר נכנס" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "נושא :", + "SUBJECT_PLACEHOLDER": "הזן את נושא הדוא\"ל שלך כאן", + "CC_LABEL": "עותק:", + "CC_PLACEHOLDER": "חפש איש קשר לפי כתובת הדוא\"ל שלו", + "BCC_LABEL": "עותק מוסתר:", + "BCC_PLACEHOLDER": "חפש איש קשר לפי כתובת הדוא\"ל שלו", + "BCC_BUTTON": "עותק מוסתר" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "כתוב את הודעתך כאן..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "בחר תבנית", + "SEARCH_PLACEHOLDER": "חפש תבניות", + "EMPTY_STATE": "לא נמצאו תבניות", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "תבנית WhatsApp: {templateName}", + "VARIABLES": "משתנים", + "BACK": "חזור", + "SEND_MESSAGE": "שלח הודעה" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "בחר תבנית", + "SEARCH_PLACEHOLDER": "חפש תבניות", + "EMPTY_STATE": "לא נמצאו תבניות", + "TEMPLATE_PARSER": { + "BACK": "חזור", + "SEND_MESSAGE": "שלח הודעה" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "בטל", + "SEND": "שלח ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/contactFilters.json b/app/javascript/dashboard/i18n/locale/he/contactFilters.json new file mode 100644 index 0000000..25ba537 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "סינון אנשי קשר", + "SUBTITLE": "הוסיפו פילטרים מתחת ולחצו 'אישור' בכדי לסנן אנשי קשר.", + "EDIT_CUSTOM_SEGMENT": "ערוך מקטע", + "CUSTOM_VIEWS_SUBTITLE": "הוסף או הסר מסננים ועדכן את המקטע שלך.", + "ADD_NEW_FILTER": "הוסף מסנן", + "CLEAR_ALL_FILTERS": "ניקוי כל הפילטרים", + "FILTER_DELETE_ERROR": "צריך להיות לפחות מסנן אחד כדי לשמור", + "SUBMIT_BUTTON_LABEL": "שלח", + "UPDATE_BUTTON_LABEL": "עדכן מקטע", + "CANCEL_BUTTON_LABEL": "ביטול", + "CLEAR_BUTTON_LABEL": "מחק סננים", + "EMPTY_VALUE_ERROR": "חובה ערך", + "SEGMENT_LABEL": "שם מקטע", + "SEGMENT_QUERY_LABEL": "שאילתת מקטע", + "TOOLTIP_LABEL": "סינון אנשי קשר", + "QUERY_DROPDOWN_LABELS": { + "AND": "ו/גם", + "OR": "או" + }, + "OPERATOR_LABELS": { + "equal_to": "שווה ל", + "not_equal_to": "לא שווה ל", + "contains": "מכיל", + "does_not_contain": "לא מכיל", + "is_present": "נוכח", + "is_not_present": "לא נוכח", + "is_greater_than": "גדול מ", + "is_lesser_than": "הוא פחות מ", + "days_before": "זה x ימים לפני" + }, + "ERRORS": { + "VALUE_REQUIRED": "חובה ערך" + }, + "ATTRIBUTES": { + "NAME": "שם", + "EMAIL": "אימייל", + "PHONE_NUMBER": "מספר טלפון", + "IDENTIFIER": "מזהה", + "CITY": "עיר", + "COUNTRY": "מדינה", + "CUSTOM_ATTRIBUTE_LIST": "רשימה", + "CUSTOM_ATTRIBUTE_TEXT": "טקסט", + "CUSTOM_ATTRIBUTE_NUMBER": "מספר", + "CUSTOM_ATTRIBUTE_LINK": "קישור", + "CUSTOM_ATTRIBUTE_CHECKBOX": "תיבת סימון", + "CREATED_AT": "הוקם ב", + "LAST_ACTIVITY": "פעילות אחרונה", + "REFERER_LINK": "קישור מפנה", + "BLOCKED": "חסום", + "LABELS": "תוויות" + }, + "GROUPS": { + "STANDARD_FILTERS": "סננים סטנדרטיים", + "ADDITIONAL_FILTERS": "סננים נוספים", + "CUSTOM_ATTRIBUTES": "מאפיינים בהתאמה אישית" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/contentTemplates.json b/app/javascript/dashboard/i18n/locale/he/contentTemplates.json new file mode 100644 index 0000000..138290c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "תבניות Twilio", + "SUBTITLE": "בחר את תבנית Twilio שברצונך לשלוח", + "TEMPLATE_SELECTED_SUBTITLE": "הגדר תבנית: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "חפש תבניות", + "NO_TEMPLATES_FOUND": "לא נמצאו תבניות עבור", + "NO_CONTENT": "אין תוכן", + "HEADER": "כותרת עליונה", + "BODY": "גוף", + "FOOTER": "כותרת תחתונה", + "BUTTONS": "כפתורים", + "CATEGORY": "קטגוריה", + "MEDIA_CONTENT": "תוכן מדיה", + "MEDIA_CONTENT_FALLBACK": "תוכן מדיה", + "NO_TEMPLATES_AVAILABLE": "אין תבניות Twilio זמינות. לחץ על רענן כדי לסנכרן תבניות מ-Twilio.", + "REFRESH_BUTTON": "רענן תבניות", + "REFRESH_SUCCESS": "רענון התבניות הופעל. העדכון עשוי להימשך כמה דקות.", + "REFRESH_ERROR": "רענון התבניות נכשל. אנא נסה שוב.", + "LABELS": { + "LANGUAGE": "שפה", + "TEMPLATE_BODY": "גוף התבנית", + "CATEGORY": "קטגוריה" + }, + "TYPES": { + "MEDIA": "מדיה", + "QUICK_REPLY": "תגובה מהירה", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "טקסט" + } + }, + "PARSER": { + "VARIABLES_LABEL": "משתנים", + "LANGUAGE": "שפה", + "CATEGORY": "קטגוריה", + "VARIABLE_PLACEHOLDER": "הזן ערך {variable}", + "GO_BACK_LABEL": "חזור", + "SEND_MESSAGE_LABEL": "לשלוח הודעה", + "FORM_ERROR_MESSAGE": "נא למלא את כל המשתנים לפני השליחה", + "MEDIA_HEADER_LABEL": "כותרת עליונה {type}", + "MEDIA_URL_LABEL": "הזן כתובת URL מלאה של מדיה", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "חזור", + "SEND_MESSAGE_BUTTON": "לשלוח הודעה" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/conversation.json b/app/javascript/dashboard/i18n/locale/he/conversation.json new file mode 100644 index 0000000..f4c1cd3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "אנא בחר שיחה מהחלונית השמאלית", + "CSAT_REPLY_MESSAGE": "נא דרג שיחה זו", + "404": "מצטערים, לא מצאנו את השיחה המבוקשת, נא לנסות שוב", + "SWITCH_VIEW_LAYOUT": "החלף תצוגה", + "DASHBOARD_APP_TAB_MESSAGES": "הודעות", + "UNVERIFIED_SESSION": "זהות המשתמש לא מְאוּמָתת", + "NO_MESSAGE_1": "או - או! נראה שאין הודעות מלקוחות בתיבת הדואר הנכנס שלך.", + "NO_MESSAGE_2": " לשלוח הודעה לעמוד שלך!", + "NO_INBOX_1": "שלום! נראה שעדיין לא הוספת תיבות דואר נכנס.", + "NO_INBOX_2": " להתחיל", + "NO_INBOX_AGENT": "או - או! נראה שאתה לא חלק מתיבת דואר נכנס כלשהי. אנא פנה למנהל המערכת שלך", + "SEARCH_MESSAGES": "חפש הודעות בשיחות", + "VIEW_ORIGINAL": "הצג מקור", + "VIEW_TRANSLATED": "הצג מתורגם", + "EMPTY_STATE": { + "CMD_BAR": "לפתיחת תפריט פקודות", + "KEYBOARD_SHORTCUTS": "להצגת קיצורי מקלדת" + }, + "SEARCH": { + "TITLE": "חפש הודעות", + "RESULT_TITLE": "תוצאות חיפוש", + "LOADING_MESSAGE": "מחיקת נתונים...", + "PLACEHOLDER": "הקלד כל טקסט כדי לחפש הודעות", + "NO_MATCHING_RESULTS": "לא נמצאו תוצאות." + }, + "UNREAD_MESSAGES": "הודעות שלא נקראו", + "UNREAD_MESSAGE": "הודעות שלא נקראו", + "CLICK_HERE": "לחץ כאן", + "LOADING_INBOXES": "טוען תיבות דואר נכנס", + "LOADING_CONVERSATIONS": "טוען שיחות", + "CANNOT_REPLY": "לא ניתן להשיב עקב", + "24_HOURS_WINDOW": "הגבלת חלון הודעות של 24 שעות", + "48_HOURS_WINDOW": "הגבלת חלון הודעות של 48 שעות", + "API_HOURS_WINDOW": "תוכל להשיב לשיחה זו רק תוך {hours} שעות", + "NOT_ASSIGNED_TO_YOU": "השיחה לא שייכת לך, האם תרצה לשייך אותה אליך?", + "ASSIGN_TO_ME": "שייך לעצמך", + "BOT_HANDOFF_MESSAGE": "אתה משיב לשיחה שמטופלת כרגע על ידי עוזר או בוט.", + "BOT_HANDOFF_ACTION": "סמן כפתוח והקצה לעצמך", + "BOT_HANDOFF_REOPEN_ACTION": "סמן שיחה כפתוחה", + "BOT_HANDOFF_SUCCESS": "השיחה הועברה אליך", + "BOT_HANDOFF_ERROR": "ההשתלטות על השיחה נכשלה. אנא נסה שוב.", + "TWILIO_WHATSAPP_CAN_REPLY": "אתה יכול להשיב לשיחה זו רק באמצעות הודעת תבנית בשל", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "הגבלת חלון הודעות של 24 שעות", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "אתה משיב ל:", + "REMOVE_SELECTION": "הסר בחירה", + "DOWNLOAD": "הורד", + "UNKNOWN_FILE_TYPE": "קובץ לא ידוע", + "SAVE_CONTACT": "שמור איש קשר", + "NO_CONTENT": "אין תוכן להצגה", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} שיתף/ה איש קשר", + "LOCATION": "{sender} שיתף/ה מיקום", + "FILE": "{sender} שיתף/ה קובץ", + "MEETING": "{sender} התחיל/ה פגישה" + }, + "UPLOADING_ATTACHMENTS": "מעלה קובץ מצורף...", + "REPLIED_TO_STORY": "השיב/ה לסטורי שלך", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "הודעה זו אינה נתמכת. תוכל לצפות בהודעה זו באפליקציית Facebook Messenger.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "הודעה זו אינה נתמכת. תוכל לצפות בהודעה זו באפליקציית Instagram.", + "SUCCESS_DELETE_MESSAGE": "ההודעה נמחקה בהצלחה", + "FAIL_DELETE_MESSSAGE": "לא ניתן למחוק את ההודעה! נסה שוב", + "NO_RESPONSE": "אין תגובה", + "RESPONSE": "תגובה", + "RATING_TITLE": "דירוג", + "FEEDBACK_TITLE": "משוב", + "REPLY_MESSAGE_NOT_FOUND": "ההודעה אינה זמינה", + "CARD": { + "SHOW_LABELS": "הצג תויות", + "HIDE_LABELS": "הסתר תוויות" + }, + "VOICE_CALL": { + "INCOMING_CALL": "שיחה נכנסת", + "OUTGOING_CALL": "שיחה יוצאת", + "CALL_IN_PROGRESS": "שיחה מתבצעת", + "NO_ANSWER": "אין מענה", + "MISSED_CALL": "שיחה שלא נענתה", + "CALL_ENDED": "השיחה הסתיימה", + "NOT_ANSWERED_YET": "עדיין לא נענה", + "THEY_ANSWERED": "הם ענו", + "YOU_ANSWERED": "אתה ענית" + }, + "HEADER": { + "RESOLVE_ACTION": "פתרון", + "REOPEN_ACTION": "פתח מחדש", + "OPEN_ACTION": "פתח", + "MORE_ACTIONS": "פעולות נוספות", + "OPEN": "עוד", + "CLOSE": "סגור", + "DETAILS": "פרטים", + "SNOOZED_UNTIL": "מושתק עד", + "SNOOZED_UNTIL_TOMORROW": "נמנם עד מחר", + "SNOOZED_UNTIL_NEXT_WEEK": "נמנם עד שבוע הבא", + "SNOOZED_UNTIL_NEXT_REPLY": "נמנם עד תגובה הבאה", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "הוחמץ", + "DUE": "עקב" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "סמן כממתין", + "SNOOZE_UNTIL": "נודניק", + "SNOOZE": { + "TITLE": "השהה עד", + "NEXT_REPLY": "תגובה הבאה", + "TOMORROW": "מחר", + "NEXT_WEEK": "שבוע הבא" + } + }, + "MENTION": { + "AGENTS": "סוכנים", + "TEAMS": "צוותים" + }, + "CUSTOM_SNOOZE": { + "TITLE": "השהה עד", + "APPLY": "נודניק", + "CANCEL": "ביטול" + }, + "PRIORITY": { + "TITLE": "עדיפות", + "OPTIONS": { + "NONE": "כלום", + "URGENT": "דחוף", + "HIGH": "גבוהה", + "MEDIUM": "בינונית", + "LOW": "נמוכה" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "כלום", + "INPUT_PLACEHOLDER": "בחר עדיפות", + "NO_RESULTS": "לא נמצאו תוצאות", + "SUCCESSFUL": "העדיפות של שיחה מזהה {conversationId} שונתה ל- {priority}", + "FAILED": "לא ניתן לשנות עדיפות. אנא נסה שוב." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "מחק שיחה #{conversationId}", + "DESCRIPTION": "האם אתה בטוח שברצונך למחוק שיחה זו?", + "CONFIRM": "מחק" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "סמן כממתין", + "RESOLVED": "סמן כפתור", + "MARK_AS_UNREAD": "סמן כלא נקרא", + "MARK_AS_READ": "סמן כנקרא", + "REOPEN": "פתח מחדש את השיחה", + "SNOOZE": { + "TITLE": "נודניק", + "NEXT_REPLY": "עד תגובה הבאה", + "TOMORROW": "עד מחר", + "NEXT_WEEK": "עד שבוע הבא" + }, + "ASSIGN_AGENT": "שייך סוכן", + "ASSIGN_LABEL": "ההקצה תווית", + "AGENTS_LOADING": "טוען סוכנים...", + "ASSIGN_TEAM": "שייך צוות", + "DELETE": "מחק שיחה", + "OPEN_IN_NEW_TAB": "פתח בכרטיסייה חדשה", + "COPY_LINK": "העתק קישור לשיחה", + "COPY_LINK_SUCCESS": "קישור השיחה הועתק ללוח", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "מזהה שיחה {conversationId} קושר ל {agentName}", + "FAILED": "השמת הסוכן לא הצליחה. בבקשה נסה שנית." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "הוקצתה תווית #{labelName} לשיחה מזהה {conversationId}", + "FAILED": "לא ניתן לקשר שורה. אנא נסו שנית" + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "הצוות {team} קושר לשיחה מספר {conversationId}", + "FAILED": "השמה לצוות לא הצליחה, בבקשה נסה שנית." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "חתימת הודעה", + "ENABLE_SIGN_TOOLTIP": "אפשר חתימה", + "DISABLE_SIGN_TOOLTIP": "נטרל חתימה", + "MSG_INPUT": "Shift + Enter עבור שורה חדשה. התחל עם '/' כדי לבחור תגובה מוכנה.", + "PRIVATE_MSG_INPUT": "Shift + Enter עבור שורה חדשה. זה יהיה גלוי רק לסוכנים", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "חתימת הודעה אינה מוגדרת, נא הגדר אותה בהגדרות הפרופיל.", + "CLICK_HERE": "לחץ כאן כדי לעדכן", + "WHATSAPP_TEMPLATES": "תבניות וואטסאפ" + }, + "REPLYBOX": { + "REPLY": "הגב", + "PRIVATE_NOTE": "הערה פרטית", + "SEND": "שלח", + "CREATE": "הוסף הערה", + "INSERT_READ_MORE": "קרא עוד", + "DISMISS_REPLY": "בטל תגובה", + "REPLYING_TO": "משיב/ה ל:", + "TIP_EMOJI_ICON": "הצג בחירת אימוג'ים", + "TIP_ATTACH_ICON": "הוסף קבצים", + "TIP_AUDIORECORDER_ICON": "הקלט אודיו", + "TIP_AUDIORECORDER_PERMISSION": "אפשר גישה לאודיו", + "TIP_AUDIORECORDER_ERROR": "לא יכול לפתוח אודיו", + "DRAG_DROP": "גרור ושחרר כאן להוספת קובץ מצורף", + "START_AUDIO_RECORDING": "התחל הקלטת אודיו", + "STOP_AUDIO_RECORDING": "עצור הקלטת אודיו", + "": "", + "EMAIL_HEAD": { + "TO": "אל", + "ADD_BCC": "הוסף bcc", + "CC": { + "LABEL": "עותק", + "PLACEHOLDER": "אימיילים מופרדים בפסיקים", + "ERROR": "בבקשה הכנס כתוכת אימייל" + }, + "BCC": { + "LABEL": "עותק מוסתר", + "PLACEHOLDER": "אימיילים מופרדים בפסיקים", + "ERROR": "בבקשה הכנס כתוכת אימייל" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "משתנים בלתי מזוהים", + "MESSAGE": "יש לך {undefinedVariablesCount} משתנים בלתי מזוהים בהודעה {undefinedVariables}. תרצה לשלוח את ההודעה בכל זאת?", + "CONFIRM": { + "YES": "שלח", + "CANCEL": "ביטול" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "כלול שרשור דוא\"ל מצוטט", + "DISABLE_TOOLTIP": "אל תכלול שרשור דוא\"ל מצוטט", + "REMOVE_PREVIEW": "הסר שרשור דוא\"ל מצוטט", + "COLLAPSE": "כווץ תצוגה מקדימה", + "EXPAND": "הרחב תצוגה מקדימה" + } + }, + "VISIBLE_TO_AGENTS": "פתקים פרטיים: רק אתה והצוות שלך יכולים לראות", + "CHANGE_STATUS": "סטטוס השיחה השתנה", + "CHANGE_STATUS_FAILED": "סטטוס השיחה השתנה לנכשלה", + "CHANGE_AGENT": "שיוך שיחה השתנתה", + "CHANGE_AGENT_FAILED": "שינוי קישור נכשל", + "ASSIGN_LABEL_SUCCESFUL": "סמן משימה כבוצעה בהצלחה", + "ASSIGN_LABEL_FAILED": "סמן משימה כנכשלה", + "CHANGE_TEAM": "שיחת קבוצה השתנתה", + "SUCCESS_DELETE_CONVERSATION": "השיחה נמחקה בהצלחה", + "FAIL_DELETE_CONVERSATION": "לא ניתן למחוק את השיחה! נסה שוב", + "FILE_SIZE_LIMIT": "הקובץ גדול מ{MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE}MB מגבלת העלאה", + "MESSAGE_ERROR": "לא ניתן לשלוח הודעה, אנא נסה שוב מאוחר יותר", + "SENT_BY": "נשלח על ידי:", + "BOT": "בוט", + "SEND_FAILED": "לא ניתן לשלוח הודעה! נסה שוב", + "TRY_AGAIN": "נסה שוב", + "ASSIGNMENT": { + "SELECT_AGENT": "בחר סוכן", + "REMOVE": "הסר", + "ASSIGN": "שייך" + }, + "CONTEXT_MENU": { + "COPY": "העתק", + "REPLY_TO": "השב להודעה זו", + "DELETE": "מחק", + "CREATE_A_CANNED_RESPONSE": "הוסף לתגובות מוכנות", + "TRANSLATE": "תרגום", + "COPY_PERMALINK": "העתק קישור להודעה", + "LINK_COPIED": "קישור להודעה הועתק ללוח", + "DELETE_CONFIRMATION": { + "TITLE": "בטוחים שאתם רוצים למחוק את ההודעה הזו?", + "MESSAGE": "לא ניתן לבטל פעולה זו", + "DELETE": "מחק", + "CANCEL": "ביטול" + } + }, + "SIDEBAR": { + "CONTACT": "איש קשר", + "COPILOT": "טייס משנה" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "שיחה נכנסת", + "OUTGOING_CALL": "שיחה יוצאת", + "CALL_IN_PROGRESS": "שיחה מתבצעת", + "NOT_ANSWERED_YET": "עדיין לא נענה", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "שלח תמליל של השיחה", + "DESC": "שלח את תמליל השיחה למייל ספציפי", + "SUBMIT": "שלח", + "CANCEL": "ביטול", + "SEND_EMAIL_SUCCESS": "תמליל השיחה נשלח בהצלחה", + "SEND_EMAIL_ERROR": "היתה שגיאה, בקשה נסה שוב", + "FORM": { + "SEND_TO_CONTACT": "שלח תמליל ללקוח", + "SEND_TO_AGENT": "שלח תמליל לסוכן המשוייך לשיחה", + "SEND_TO_OTHER_EMAIL_ADDRESS": "שלח תמליל לאימייל אחר", + "EMAIL": { + "PLACEHOLDER": "הכנס כתובת אימייל", + "ERROR": "בבקשה הכנס כתוכת אימייל תקינה" + } + } + }, + "ONBOARDING": { + "TITLE": "היי 👋, ברוך הבא ל{installationName}!", + "DESCRIPTION": "תודה על ההרשמה. אנחנו רוצים לתת לך את הכי הרבה מ {installationName}. הינה כמה דברים שאתה יכול לעשות עם {installationName} לחוויה טובה.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "תקרא את העדכונים אחרונים", + "ALL_CONVERSATION": { + "TITLE": "כל השיחות שלך במקום אחד", + "DESCRIPTION": "צפה בכל השיחות שלך עם הלקוחות בדאשבורד אחד. אתה יכול לסנן את השיחות לפי הערוץ, התווית והסטטוס.", + "NEW_LINK": "לחץ כאן כדי ליצור תיבה" + }, + "TEAM_MEMBERS": { + "TITLE": "הזמן את חברי הצוות שלך", + "DESCRIPTION": "מאחר ואתם מוכנים לדבר עם הלקוח, הביאו את חברי הצוות שלכם לעזור לכם. תוכלו להזמין חברי צוות על ידי הוספה של כתובת הדוא\"ל שלהם לרשימת הסוכנים.", + "NEW_LINK": "לחץ כאן כדי להזמין חבר צוות" + }, + "LABELS": { + "TITLE": "ארגן שיחות עם תוויות", + "DESCRIPTION": "תוויות מספקות דרך קלה יותר לסווג את השיחה שלך. צור כמה תוויות כמו #support-enquiry, #billing-question וכו', כדי שתוכל להשתמש בהן בשיחה מאוחר יותר.", + "NEW_LINK": "לחץ כאן כדי ליצור תגיות" + }, + "CANNED_RESPONSES": { + "TITLE": "צור תבניות תגובה מוכנות\n\n", + "DESCRIPTION": "תבניות תגובה מוכנות מראש מאפשרות לך להגיב במהירות לשיחה. הסוכנים יכולים להקליד את התו '/' ואחריו קוד קצר כדי להוסיף תגובה.", + "NEW_LINK": "לחץ כאן כדי ליצור תבנית תגובה מוכנה" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "סוכן מוקצה", + "SELF_ASSIGN": "קשר אלי", + "TEAM_LABEL": "צוות משוייך", + "SELECT": { + "PLACEHOLDER": "כלום" + }, + "ACCORDION": { + "CONTACT_DETAILS": "פרטי איש קשר", + "CONVERSATION_ACTIONS": "פעולות בשיחה", + "CONVERSATION_LABELS": "תוויות שיחה", + "CONVERSATION_INFO": "מידע על שיחה", + "CONTACT_NOTES": "הערות איש קשר", + "CONTACT_ATTRIBUTES": "תכונות יצירת קשר", + "PREVIOUS_CONVERSATION": "שיחות קודמות", + "MACROS": "מאקרו", + "LINEAR_ISSUES": "בעיות Linear מקושרות", + "SHOPIFY_ORDERS": "הזמנות Shopify" + }, + "SHOPIFY": { + "ORDER_ID": "הזמנה #{id}", + "ERROR": "שגיאה בטעינת הזמנות", + "NO_SHOPIFY_ORDERS": "לא נמצאו הזמנות", + "FINANCIAL_STATUS": { + "PENDING": "ממתין ל", + "AUTHORIZED": "מאושר", + "PARTIALLY_PAID": "שולם חלקית", + "PAID": "שולם", + "PARTIALLY_REFUNDED": "הוחזר חלקית", + "REFUNDED": "הוחזר", + "VOIDED": "בוטל" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "מולא", + "PARTIALLY_FULFILLED": "מולא חלקית", + "UNFULFILLED": "לא מולא" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "צור תכונה", + "NO_RECORDS_FOUND": "לא נמצאו מאפיינים", + "UPDATE": { + "SUCCESS": "המאפיין עודכן בהצלחה", + "ERROR": "לא ניתן לעדכן את המאפיין. בבקשה נסה שוב מאוחר יותר" + }, + "ADD": { + "TITLE": "הוסף", + "SUCCESS": "מאפיין נוסף בהצלחה", + "ERROR": "לא ניתן היה ליצור מאפיין, אנא נסה שוב מאוחר יותר" + }, + "DELETE": { + "SUCCESS": "המאפיין נמחק בהצלחה", + "ERROR": "לא ניתן למחוק מאפיין. בבקשה נסה שוב מאוחר יותר" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "הוסף מאפיין", + "PLACEHOLDER": "חפש מאפיין", + "NO_RESULT": "לא נמצאו מאפיינים" + } + }, + "EMAIL_HEADER": { + "FROM": "מאת", + "TO": "אל", + "BCC": "עותק מוסתר", + "CC": "עותק", + "SUBJECT": "נושא", + "EXPAND": "הרחב דוא\"ל" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "משתתף", + "SIDEBAR_TITLE": "משתתפים בשיחה", + "NO_RECORDS_FOUND": "לא נמצאו תוצאות", + "ADD_PARTICIPANTS": "בחר משתתפים", + "REMANING_PARTICIPANTS_TEXT": "+{count} אחרים", + "REMANING_PARTICIPANT_TEXT": "+{count} אחר", + "TOTAL_PARTICIPANTS_TEXT": "{count} אנשים משתתפים.", + "TOTAL_PARTICIPANT_TEXT": "{count} אדם משתתף.", + "NO_PARTICIPANTS_TEXT": "אף אחד לא משתתף!.", + "WATCH_CONVERSATION": "הצטרף לשיחה", + "YOU_ARE_WATCHING": "אתה משתתף", + "API": { + "ERROR_MESSAGE": "לא ניתן היה לעדכן, נסה שוב!", + "SUCCESS_MESSAGE": "המשתתפים עודכנו!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "הצג תוכן מתורגם", + "DESC": "תוכל לראות את התוכן המתורגם בכל שפה.", + "ORIGINAL_CONTENT": "תוכן מקורי", + "TRANSLATED_CONTENT": "תוכן מתורגם", + "NO_TRANSLATIONS_AVAILABLE": "אין תרגומים זמינים לתוכן זה" + }, + "TYPING": { + "ONE": "{user} מקליד/ה", + "TWO": "{user} ו-{secondUser} מקלידים", + "MULTIPLE": "{user} ו {count} משתמשים אחרים מקלידים" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "נסה הנחיות אלה" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "לא ניתן להוריד קובץ מצורף. אנא נסה שוב" + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/csatMgmt.json b/app/javascript/dashboard/i18n/locale/he/csatMgmt.json new file mode 100644 index 0000000..d9fe3c2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "דרג את השיחה", + "PLACEHOLDER": "ספר לנו עוד...", + "RATINGS": { + "POOR": "😞 Poor", + "FAIR": "😑 Fair", + "AVERAGE": "😐 Average", + "GOOD": "😀 Good", + "EXCELLENT": "😍 Excellent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/customRole.json b/app/javascript/dashboard/i18n/locale/he/customRole.json new file mode 100644 index 0000000..0be63e3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "תפקידים מותאמים אישית", + "LEARN_MORE": "למד עוד על תפקידים מותאמים אישית", + "DESCRIPTION": "תפקידים מותאמים אישית הם תפקידים שנוצרים על ידי הבעלים או המנהל של החשבון. ניתן להקצות תפקידים אלה לסוכנים כדי להגדיר את הגישה וההרשאות שלהם בתוך החשבון. ניתן ליצור תפקידים מותאמים אישית עם הרשאות ורמות גישה ספציפיות שיתאימו לדרישות הארגון.", + "HEADER_BTN_TXT": "הוסף תפקיד מותאם אישית", + "LOADING": "מאחזר תפקידים מותאמים אישית...", + "SEARCH_404": "אין פריטים התואמים לשאילתה זו.", + "PAYWALL": { + "TITLE": "שדרג כדי ליצור תפקידים מותאמים אישית", + "AVAILABLE_ON": "התכונה של תפקיד מותאם אישית זמינה רק בתוכניות Business ו-Enterprise.", + "UPGRADE_PROMPT": "שדרג את התוכנית שלך כדי לקבל גישה לתכונות מתקדמות כמו ניהול צוות, אוטומציות, תכונות מותאמות אישית ועוד.", + "UPGRADE_NOW": "שדרג עכשיו", + "CANCEL_ANYTIME": "תוכל לשנות או לבטל את התוכנית שלך בכל עת" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "התכונה של תפקיד מותאם אישית זמינה רק בתוכניות בתשלום.", + "UPGRADE_PROMPT": "שדרג לתוכנית בתשלום כדי לגשת לתכונות מתקדמות כמו יומני ביקורת, קיבולת סוכנים ועוד.", + "ASK_ADMIN": "אנא פנה למנהל המערכת שלך לצורך השדרוג." + }, + "LIST": { + "404": "אין תפקידים מותאמים אישית זמינים בחשבון זה.", + "TITLE": "נהל תפקידים מותאמים אישית", + "DESC": "תפקידים מותאמים אישית הם תפקידים שנוצרים על ידי הבעלים או המנהל של החשבון. ניתן להקצות תפקידים אלה לסוכנים כדי להגדיר את הגישה וההרשאות שלהם בתוך החשבון. ניתן ליצור תפקידים מותאמים אישית עם הרשאות ורמות גישה ספציפיות שיתאימו לדרישות הארגון.", + "TABLE_HEADER": { + "NAME": "שם", + "DESCRIPTION": "תיאור", + "PERMISSIONS": "הרשאות", + "ACTIONS": "פעולות" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "נהל את כל השיחות", + "CONVERSATION_UNASSIGNED_MANAGE": "נהל שיחות לא משויכות ואת אלה שמשויכות אליהם", + "CONVERSATION_PARTICIPATING_MANAGE": "נהל שיחות שבהן הם משתתפים ואת אלה שמשויכות אליהם", + "CONTACT_MANAGE": "נהל אנשי קשר", + "REPORT_MANAGE": "נהל דוחות", + "KNOWLEDGE_BASE_MANAGE": "נהל בסיס ידע" + }, + "FORM": { + "NAME": { + "LABEL": "שם", + "PLACEHOLDER": "אנא הזן שם.", + "ERROR": "שם שדה חובה." + }, + "DESCRIPTION": { + "LABEL": "תיאור", + "PLACEHOLDER": "אנא הזן תיאור.", + "ERROR": "נדרש תיאור." + }, + "PERMISSIONS": { + "LABEL": "הרשאות", + "ERROR": "הרשאות נדרשות." + }, + "CANCEL_BUTTON_TEXT": "ביטול", + "API": { + "ERROR_MESSAGE": "לא ניתן להתחבר לשרת Woot, נסה שוב מאוחר יותר" + } + }, + "ADD": { + "TITLE": "הוסף תפקיד מותאם אישית", + "DESC": "תפקידים מותאמים אישית מאפשרים לך ליצור תפקידים עם הרשאות ורמות גישה ספציפיות שיתאימו לדרישות הארגון.", + "SUBMIT": "שלח", + "API": { + "SUCCESS_MESSAGE": "תפקיד מותאם אישית נוסף בהצלחה." + } + }, + "EDIT": { + "BUTTON_TEXT": "ערוך", + "TITLE": "ערוך תפקיד מותאם אישית", + "DESC": "תפקידים מותאמים אישית מאפשרים לך ליצור תפקידים עם הרשאות ורמות גישה ספציפיות שיתאימו לדרישות הארגון.", + "SUBMIT": "עדכן", + "API": { + "SUCCESS_MESSAGE": "התפקיד המותאם אישית עודכן בהצלחה." + } + }, + "DELETE": { + "BUTTON_TEXT": "מחק", + "API": { + "SUCCESS_MESSAGE": "התפקיד המותאם אישית נמחק בהצלחה.", + "ERROR_MESSAGE": "לא ניתן להתחבר לשרת Woot, נסה שוב מאוחר יותר" + }, + "CONFIRM": { + "TITLE": "אשר מחיקה", + "MESSAGE": "האם אתה בטוח שברצונך למחוק ", + "YES": "כן, מחק ", + "NO": "לא, השאר " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/datePicker.json b/app/javascript/dashboard/i18n/locale/he/datePicker.json new file mode 100644 index 0000000..0e8b270 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "להגיש מועמדות", + "CLEAR_BUTTON": "נקה", + "DATE_RANGE_INPUT": { + "START": "תאריך התחלה", + "END": "תאריך סיום" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "טווח תאריכים", + "LAST_7_DAYS": "7 הימים האחרונים", + "LAST_30_DAYS": "30 הימים האחרונים", + "LAST_3_MONTHS": "3 החודשים האחרונים", + "LAST_6_MONTHS": "6 החודשים האחרונים", + "LAST_YEAR": "שנה שעברה", + "CUSTOM_RANGE": "טווח תאריכים מותאם אישית" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/emoji.json b/app/javascript/dashboard/i18n/locale/he/emoji.json new file mode 100644 index 0000000..da67df5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "חפש אימוג'י", + "NOT_FOUND": "אין אמוג'י שתואם את החיפוש שלך", + "REMOVE": "הסר" + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/general.json b/app/javascript/dashboard/i18n/locale/he/general.json new file mode 100644 index 0000000..03b74a0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "מציג {firstIndex}-{lastIndex} מתוך {totalCount} פריטים", + "PHONE_INPUT": { + "PLACEHOLDER": "חפש", + "EMPTY_STATE": "לא נמצאו תוצאות" + }, + "CLOSE": "סגור", + "BETA": "בטא", + "BETA_DESCRIPTION": "תכונה זו נמצאת בגרסת בטא ועשויה להשתנות ככל שנשפר אותה." + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/generalSettings.json b/app/javascript/dashboard/i18n/locale/he/generalSettings.json new file mode 100644 index 0000000..ca14e89 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "חרגת ממגבלת השיחות. תוכנית Hacker מאפשרת רק 500 שיחות.", + "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.", + "AGENTS": "חרגת ממגבלת הסוכנים. התוכנית שלך מאפשרת רק {allowedAgents} סוכנים.", + "NON_ADMIN": "אנא פנה למנהל המערכת שלך כדי לשדרג את התוכנית ולהמשיך להשתמש בכל התכונות." + }, + "TITLE": "הגדרות חשבון", + "SUBMIT": "עדכן הגדרות", + "BACK": "חזור", + "DISMISS": "סגור", + "UPDATE": { + "ERROR": "לא ניתן היה לעדכן את ההגדרות, נסה שוב!", + "SUCCESS": "הגדרות החשבון עודכנו בהצלחה" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "מחק את חשבונך", + "NOTE": "לאחר שתמחק את חשבונך, כל הנתונים שלך יימחקו.", + "BUTTON_TEXT": "מחק את חשבונך", + "CONFIRM": { + "TITLE": "מחק חשבון", + "MESSAGE": "מחיקת חשבונך היא בלתי הפיכה. הזן את שם חשבונך למטה כדי לאשר שברצונך למחוק אותו לצמיתות.", + "BUTTON_TEXT": "מחק", + "DISMISS": "ביטול", + "PLACE_HOLDER": "אנא הקלד {accountName} כדי לאשר" + }, + "SUCCESS": "החשבון סומן למחיקה", + "FAILURE": "לא ניתן למחוק חשבון, נסה שוב!", + "SCHEDULED_DELETION": { + "TITLE": "החשבון מתוזמן למחיקה", + "MESSAGE_MANUAL": "חשבון זה מתוזמן למחיקה ב- {deletionDate}. הדבר התבקש על ידי מנהל מערכת. תוכל לבטל את המחיקה לפני תאריך זה.", + "MESSAGE_INACTIVITY": ".", + "CLEAR_BUTTON": "בטל מחיקה מתוזמנת" + } + }, + "FORM": { + "ERROR": "אנא תקן שגיאות בטופס", + "GENERAL_SECTION": { + "TITLE": "הגדרות כלליות", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "מזהה חשבון", + "NOTE": "מזהה זה נדרש אם אתה בונה אינטגרציה מבוססת API" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "הגדרה זו תאפשר לך לסגור אוטומטית את השיחה לאחר תקופה מסוימת של חוסר פעילות.", + "DURATION": { + "LABEL": "משך חוסר פעילות", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "משך הסגירה האוטומטית צריך להיות בין 10 דקות ל-999 ימים", + "API": { + "SUCCESS": "הגדרות הסגירה האוטומטית עודכנו בהצלחה", + "ERROR": "העדכון של הגדרות הסגירה האוטומטית נכשל" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "השיחה סומנה כסגורה על ידי המערכת עקב 15 ימים של חוסר פעילות", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "העדפות", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "בחר תווית" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "שמור שינויים" + }, + "NAME": { + "LABEL": "שם החשבון", + "PLACEHOLDER": "שם החשבון שלך", + "ERROR": "נא להזין שם חשבון חוקי" + }, + "LANGUAGE": { + "LABEL": "שפת האתר", + "PLACEHOLDER": "שם החשבון שלך", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "דומיין דואר נכנס", + "PLACEHOLDER": "הדומיין שבו תקבלו את המיילים", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "אימייל לתמיכה", + "PLACEHOLDER": "דוא\"ל התמיכה של החברה שלך", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "אל תכלול שיחות ללא מענה", + "HELP": "כאשר מופעל, המערכת תדלג על סגירת שיחות שעדיין ממתינות לתגובת סוכן." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "תמלל הודעות קוליות", + "NOTE": "תמלל אוטומטית הודעות קוליות בשיחות. צור תמלול טקסט בכל פעם שנשלחת או מתקבלת הודעה קולית, והצג אותה לצד ההודעה.", + "API": { + "SUCCESS": "הגדרת תמלול שמע עודכנה בהצלחה", + "ERROR": "העדכון של הגדרת תמלול שמע נכשל" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "משך חוסר פעילות לסגירה", + "HELP": "משך הזמן שלאחריו שיחה תיסגר אוטומטית אם אין פעילות", + "PLACEHOLDER": "30", + "ERROR": "משך הסגירה האוטומטית צריך להיות בין 10 דקות ל-999 ימים", + "API": { + "SUCCESS": "הגדרות הסגירה האוטומטית עודכנו בהצלחה", + "ERROR": "העדכון של הגדרות הסגירה האוטומטית נכשל" + }, + "UPDATE_BUTTON": "עדכן", + "MESSAGE_LABEL": "הודעת סגירה מותאמת אישית", + "MESSAGE_PLACEHOLDER": "השיחה סומנה כסגורה על ידי המערכת עקב 15 ימים של חוסר פעילות", + "MESSAGE_HELP": "הודעה זו נשלחת ללקוח כאשר שיחה נסגרת אוטומטית על ידי המערכת עקב חוסר פעילות." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "רציפות השיחה עם הודעות אימייל מופעלת עבור החשבון שלך.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "אתה יכול לקבל אימיילים בדומיין המותאם אישית שלך עכשיו." + } + }, + "UPDATE_CHATWOOT": "עדכון {latestChatwootVersion} עבור Chatwoot זמין. אנא עדכן את המופע שלך.", + "LEARN_MORE": "למד עוד", + "PAYMENT_PENDING": "התשלום שלך ממתין. אנא עדכן את פרטי התשלום שלך כדי להמשיך להשתמש ב-Chatwoot", + "UPGRADE": "שדרג כדי להמשיך להשתמש ב-Chatwoot", + "LIMITS_UPGRADE": "החשבון שלך חרג ממגבלות השימוש. אנא שדרג את המינוי שלך כדי להמשיך להשתמש ב-צ'אטווט", + "OPEN_BILLING": "פתח חיוב" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "הקש אנטר כדי לבחור", + "ENTER_TO_REMOVE": "הקש אנטר כדי להסיר", + "NO_OPTIONS": "הרשימה ריקה", + "SELECT_ONE": "תבחר אחד", + "SELECT": "בחר" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "התראות", + "MARK_ALL_DONE": "סמן הכל כבוצע", + "DELETE_TITLE": "נמחק", + "UNREAD_NOTIFICATION": { + "TITLE": "התראות שלא נקראו", + "ALL_NOTIFICATIONS": "הצג את כל ההתראות", + "LOADING_UNREAD_MESSAGE": "טוען התראות שלא נקראו...", + "EMPTY_MESSAGE": "אין לך התראות שלא נקראו" + }, + "LIST": { + "LOADING_MESSAGE": "טוען הודעות...", + "404": "אין התראות", + "TABLE_HEADER": [ + "שם", + "מספר טלפון", + "שיחות", + "פניה אחרונה" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "שיחה חדשה", + "conversation_assignment": "שיחה הוקצתה", + "assigned_conversation_new_message": "הודעה חדשה", + "participating_conversation_new_message": "הודעה חדשה", + "conversation_mention": "אִזְכּוּר", + "sla_missed_first_response": "החמצת SLA", + "sla_missed_next_response": "החמצת SLA", + "sla_missed_resolution": "הסכם רמת שירות פוספס" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "לא מחובר", + "RECONNECTING": "מתחבר מחדש...", + "RECONNECT_SUCCESS": "חובר מחדש" + }, + "BUTTON": { + "REFRESH": "רענן" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "חפש או קפוץ ל", + "SECTIONS": { + "GENERAL": "כללי", + "REPORTS": "דוחות", + "CONVERSATION": "שיחה", + "BULK_ACTIONS": "פעולות בכמות גדולה", + "CHANGE_ASSIGNEE": "שנה מוקצה", + "CHANGE_PRIORITY": "שנה עדיפות", + "CHANGE_TEAM": "להחליף קבוצה", + "SNOOZE_CONVERSATION": "נודניק שיחה", + "ADD_LABEL": "הוסף תווית לשיחה", + "REMOVE_LABEL": "הסר תווית מהשיחה", + "SETTINGS": "הגדרות", + "AI_ASSIST": "סיוע AI", + "APPEARANCE": "מראה", + "SNOOZE_NOTIFICATION": "השבת התראה זמנית" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "עבור ללוח המחוונים לשיחה", + "GO_TO_CONTACTS_DASHBOARD": "עבור ללוח המחוונים של אנשי קשר", + "GO_TO_REPORTS_OVERVIEW": "עבור לסקירת דוחות", + "GO_TO_CONVERSATION_REPORTS": "עבור לדוחות שיחות", + "GO_TO_AGENT_REPORTS": "עבור לדוחות סוכן", + "GO_TO_LABEL_REPORTS": "עבור לדוחות תווית", + "GO_TO_INBOX_REPORTS": "עבור לדוחות תיבת הדואר הנכנס", + "GO_TO_TEAM_REPORTS": "עבור לדוחות צוותים", + "GO_TO_SETTINGS_AGENTS": "עבור להגדרות סוכן", + "GO_TO_SETTINGS_TEAMS": "עבור להגדרות צוות", + "GO_TO_SETTINGS_INBOXES": "עבור להגדרות תיבת הדואר הנכנס", + "GO_TO_SETTINGS_LABELS": "עבור להגדרות תווית", + "GO_TO_SETTINGS_CANNED_RESPONSES": "עבור להגדרות תגובה מוכנות", + "GO_TO_SETTINGS_APPLICATIONS": "עבור להגדרות אפליקציה", + "GO_TO_SETTINGS_ACCOUNT": "עבור להגדרות חשבון", + "GO_TO_SETTINGS_PROFILE": "עבור להגדרות פרופיל", + "GO_TO_NOTIFICATIONS": "עבור להודעות", + "ADD_LABELS_TO_CONVERSATION": "הוסף תווית לשיחה", + "ASSIGN_AN_AGENT": "הקצה סוכן", + "AI_ASSIST": "סיוע AI", + "ASSIGN_PRIORITY": "הקצה עדיפות", + "ASSIGN_A_TEAM": "הקצה צוות", + "MUTE_CONVERSATION": "שיחה אילמת", + "UNMUTE_CONVERSATION": "בטל השתקת שיחה", + "REMOVE_LABEL_FROM_CONVERSATION": "הסר תווית מהשיחה", + "REOPEN_CONVERSATION": "פתח מחדש את השיחה", + "RESOLVE_CONVERSATION": "פתור את השיחה", + "SEND_TRANSCRIPT": "שלח תמליל דוא\"ל", + "SNOOZE_CONVERSATION": "נודניק שיחה", + "UNTIL_NEXT_REPLY": "עד לתשובה הבאה", + "UNTIL_NEXT_WEEK": "עד שבוע הבא", + "UNTIL_TOMORROW": "עד מחר", + "UNTIL_NEXT_MONTH": "עד החודש הבא", + "AN_HOUR_FROM_NOW": "עד שעה מעכשיו", + "UNTIL_CUSTOM_TIME": "מותאם אישית...", + "CHANGE_APPEARANCE": "שנה מראה", + "LIGHT_MODE": "בהיר", + "DARK_MODE": "כהה", + "SYSTEM_MODE": "מערכת", + "SNOOZE_NOTIFICATION": "השבת התראה זמנית" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "טוען אפליקציית Dashboard..." + }, + "COMMON": { + "OR": "או", + "CLICK_HERE": "לחץ כאן" + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/helpCenter.json b/app/javascript/dashboard/i18n/locale/he/helpCenter.json new file mode 100644 index 0000000..0cf4811 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "מרכז עזרה", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "צור פורטל" + }, + "HEADER": { + "FILTER": "סנן לפי", + "SORT": "מיין לפי", + "LOCALE": "מקומי", + "SETTINGS_BUTTON": "הגדרות", + "NEW_BUTTON": "מאמר חדש", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "יצא לאור", + "DRAFT": "טיוטה", + "ARCHIVED": "בארכיון" + }, + "TITLES": { + "ALL_ARTICLES": "כל המאמרים", + "MINE": "הכתבות שלי", + "DRAFT": "טיוטת מאמרים", + "ARCHIVED": "מאמרים בארכיון" + }, + "LOCALE_SELECT": { + "TITLE": "בחר אזור", + "PLACEHOLDER": "בחר אזור", + "NO_RESULT": "לא נמצא אזור", + "SEARCH_PLACEHOLDER": "חפש אזור" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "כל המאמרים", + "PUBLISH_BUTTON": "פרסם", + "MOVE_TO_ARCHIVE_BUTTON": "העבר לארכיון", + "PREVIEW": "תצוגה מקדימה", + "ADD_TRANSLATION": "הוסף תרגום", + "OPEN_SIDEBAR": "פתח סרגל צד", + "CLOSE_SIDEBAR": "סגור סרגל צד", + "SAVING": "שומר...", + "SAVED": "שמור" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "העלה תמונה", + "UPLOADING": "מעלה...", + "SUCCESS": "התמונה הועלתה בהצלחה", + "ERROR": "שגיאה בעת העלאת תמונה", + "UN_AUTHORIZED_ERROR": "אינך מורשה להעלות תמונות", + "ERROR_FILE_SIZE": "גודל התמונה צריך להיות פחות מ-{size}MB", + "ERROR_FILE_FORMAT": "פורמט התמונה צריך להיות jpg, jpeg או png", + "ERROR_FILE_DIMENSIONS": "מידות התמונה צריכות להיות פחות מ-2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "הגדרות מאמר", + "FORM": { + "CATEGORY": { + "LABEL": "קטגוריה", + "TITLE": "בחר קטגוריה", + "PLACEHOLDER": "בחר קטגוריה", + "NO_RESULT": "לא נמצאה קטגוריה", + "SEARCH_PLACEHOLDER": "קטגוריית חיפוש" + }, + "AUTHOR": { + "LABEL": "מחבר", + "TITLE": "בחר מחבר", + "PLACEHOLDER": "בחר מחבר", + "NO_RESULT": "לא נמצאו מחברים", + "SEARCH_PLACEHOLDER": "חפש מחבר" + }, + "META_TITLE": { + "LABEL": "כותרת מטא", + "PLACEHOLDER": "הוסף מטא כותרת" + }, + "META_DESCRIPTION": { + "LABEL": "מטא תיאור", + "PLACEHOLDER": "הוסף את המטא תיאור שלך לתוצאות SEO טובות יותר..." + }, + "META_TAGS": { + "LABEL": "מטא תגים", + "PLACEHOLDER": "הוסף מטא תגיות מופרדות בפסיק..." + } + }, + "BUTTONS": { + "ARCHIVE": "ארכיון מאמר", + "DELETE": "מחק מאמר" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "ללא קטגוריה", + "SEARCH_RESULTS": "תוצאות חיפוש עבור {query}", + "EMPTY_TEXT": "חפש מאמרים כדי להוסיף לתשובות.", + "SEARCH_LOADER": "מחפש...", + "INSERT_ARTICLE": "הכנס", + "NO_RESULT": "לא נמצאו מאמרים", + "COPY_LINK": "העתק קישור למאמר ללוח", + "OPEN_LINK": "פתח מאמר בכרטיסייה חדשה", + "PREVIEW_LINK": "תצוגה מקדימה של מאמר" + }, + "PORTAL": { + "HEADER": "פורטלים", + "DEFAULT": "ברירת מחדל", + "NEW_BUTTON": "פורטל חדש", + "ACTIVE_BADGE": "פעיל", + "CHOOSE_LOCALE_LABEL": "בחר מקום", + "LOADING_MESSAGE": "טוען פורטלים...", + "ARTICLES_LABEL": "מאמרים", + "NO_PORTALS_MESSAGE": "אין פורטלים זמינים", + "ADD_NEW_LOCALE": "הוסף מקום חדש", + "POPOVER": { + "TITLE": "פורטלים", + "PORTAL_SETTINGS": "הגדרות פורטל", + "SUBTITLE": "יש לך מספר פורטלים ויכולים להיות לך מקומות שונים עבור כל פורטל.", + "CANCEL_BUTTON_LABEL": "ביטול", + "CHOOSE_LOCALE_BUTTON": "בחר מיקום" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "מאמרים", + "ADD": "הוסף מקום", + "VISIT": "בקר באתר", + "SETTINGS": "הגדרות", + "DELETE": "מחק" + }, + "PORTAL_CONFIG": { + "TITLE": "תצורות פורטל", + "ITEMS": { + "NAME": "שם", + "DOMAIN": "תחום מותאם אישית", + "SLUG": "שבלול", + "TITLE": "כותרת הפורטל", + "THEME": "צבע נושא", + "SUB_TEXT": "טקסט משנה של פורטל" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "מקומות זמינים", + "TABLE": { + "NAME": "שם מקומי", + "CODE": "קוד מקומי", + "ARTICLE_COUNT": "מספר מאמרים", + "CATEGORIES": "מספר קטגוריות", + "SWAP": "החלפה", + "DELETE": "מחק", + "DEFAULT_LOCALE": "ברירת מחדל" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "מחק את הפורטל", + "MESSAGE": "האם אתה בטוח שאתה רוצה למחוק את הפורטל הזה", + "YES": "כן, מחק את הפורטל", + "NO": "לא, שמור על הפורטל", + "API": { + "DELETE_SUCCESS": "הפורטל נמחק בהצלחה", + "DELETE_ERROR": "שגיאה בעת מחיקת הפורטל" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "הוראות CNAME נשלחו בהצלחה", + "ERROR_MESSAGE": "שגיאה בשליחת הוראות CNAME" + } + } + }, + "EDIT": { + "HEADER_TEXT": "ערוך פורטל", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "מידע בסיסי" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "התאמה אישית של פורטל" + }, + "CATEGORY_SETTINGS": { + "TITLE": "קטגוריות" + }, + "LOCALE_SETTINGS": { + "TITLE": "מקומיים" + } + }, + "CATEGORIES": { + "TITLE": "קטגוריות ב", + "NEW_CATEGORY": "קטגוריה חדשה", + "TABLE": { + "NAME": "שם", + "DESCRIPTION": "תיאור", + "LOCALE": "מקומי", + "ARTICLE_COUNT": "מספר מאמרים", + "ACTION_BUTTON": { + "EDIT": "ערוך קטגוריה", + "DELETE": "מחק קטגוריה" + }, + "EMPTY_TEXT": "לא נמצאו קטגוריות" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "עדכן הגדרות בסיסיות" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "מידע על מרכז העזרה", + "BODY": "מידע בסיסי על הפורטל" + }, + "CUSTOMIZATION": { + "TITLE": "התאמה אישית של מרכז העזרה", + "BODY": "התאמה אישית של פורטל" + }, + "FINISH": { + "TITLE": "וואילה! 🎉", + "BODY": "אתה מוכן!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "חזור", + "BASIC_SETTINGS_PAGE": { + "HEADER": "צור פורטל", + "TITLE": "מידע על מרכז העזרה", + "CREATE_BASIC_SETTING_BUTTON": "צור הגדרות בסיסיות של פורטל" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "התאמה אישית של פורטל", + "TITLE": "התאמה אישית של מרכז העזרה", + "UPDATE_PORTAL_BUTTON": "עדכון הגדרות פורטל" + }, + "FINISH_PAGE": { + "TITLE": "וואילה!🎉 הכל מסודר!", + "MESSAGE": "עכשיו אתה יכול לראות את הפורטל שנוצר בדף כל הפורטלים שלך.", + "FINISH": "עבור לדף כל הפורטלים" + } + }, + "LOGO": { + "LABEL": "לוגו", + "UPLOAD_BUTTON": "העלה לוגו", + "HELP_TEXT": "לוגו זה יוצג בכותרת הפורטל.", + "IMAGE_UPLOAD_SUCCESS": "לוגו הועלה בהצלחה", + "IMAGE_UPLOAD_ERROR": "לוגו נמחק בהצלחה", + "IMAGE_DELETE_ERROR": "שגיאה במחיקת לוגו" + }, + "NAME": { + "LABEL": "שם", + "PLACEHOLDER": "שם הפורטל", + "HELP_TEXT": "השם ישמש בפורטל הפונה לציבור באופן פנימי.", + "ERROR": "שם שדה חובה" + }, + "SLUG": { + "LABEL": "שבלול", + "PLACEHOLDER": "שבלול פורטל עבור כתובות אתרים", + "ERROR": "נדרש שבלול" + }, + "DOMAIN": { + "LABEL": "תחום מותאם אישית", + "PLACEHOLDER": "דומיין מותאם אישית של פורטל", + "HELP_TEXT": "הוסף רק אם ברצונך להשתמש בדומיין מותאם אישית עבור הפורטלים שלך. לדוגמה: {exampleURL}", + "ERROR": "הזן כתובת אתר חוקית של דומיין" + }, + "HOME_PAGE_LINK": { + "LABEL": "קישור לדף הבית", + "PLACEHOLDER": "קישור לדף הבית של הפורטל", + "HELP_TEXT": "הקישור המשמש לחזרה מהפורטל לדף הבית. לדוגמה: {exampleURL}", + "ERROR": "הזן כתובת אתר חוקית של דף הבית" + }, + "THEME_COLOR": { + "LABEL": "צבע נושא הפורטל", + "HELP_TEXT": "צבע זה יוצג כצבע הנושא עבור הפורטל." + }, + "PAGE_TITLE": { + "LABEL": "כותרת העמוד", + "PLACEHOLDER": "כותרת דף הפורטל", + "HELP_TEXT": "כותרת העמוד תשמש בפורטל הפונה לציבור.", + "ERROR": "נדרשת כותרת העמוד" + }, + "HEADER_TEXT": { + "LABEL": "טקסט כותרת", + "PLACEHOLDER": "טקסט כותרת הפורטל", + "HELP_TEXT": "טקסט כותרת הפורטל ישמש בפורטל הפונה לציבור.", + "ERROR": "נדרש טקסט של כותרת הפורטל" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "הפורטל נוצר בהצלחה.", + "ERROR_MESSAGE_FOR_BASIC": "לא ניתן היה ליצור את הפורטל. נסה שוב.", + "SUCCESS_MESSAGE_FOR_UPDATE": "הפורטל עודכן בהצלחה.", + "ERROR_MESSAGE_FOR_UPDATE": "לא ניתן היה לעדכן את הפורטל. נסה שוב." + } + }, + "ADD_LOCALE": { + "TITLE": "הוסף מקום חדש", + "SUB_TITLE": "זה מוסיף מקום חדש לרשימת התרגום הזמינה שלך.", + "PORTAL": "פורטל", + "LOCALE": { + "LABEL": "מקומי", + "PLACEHOLDER": "בחר מקום", + "ERROR": "דרוש מיקום" + }, + "BUTTONS": { + "CREATE": "צור מקום", + "CANCEL": "ביטול" + }, + "API": { + "SUCCESS_MESSAGE": "האזור נוסף בהצלחה", + "ERROR_MESSAGE": "לא ניתן להוסיף אזור. נסה שוב." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "מקום ברירת המחדל עודכן בהצלחה", + "ERROR_MESSAGE": "לא ניתן לעדכן את אזור ברירת המחדל. נסה שוב." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "המקום הוסר מהפורטל בהצלחה", + "ERROR_MESSAGE": "לא ניתן להסיר את המקום מהפורטל. נסה שוב." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "טוען מאמרים...", + "404": "אין מאמרים שתואמים לחיפוש שלך 🔍", + "NO_ARTICLES": "אין מאמרים זמינים", + "HEADERS": { + "TITLE": "כותרת", + "CATEGORY": "קטגוריה", + "READ_COUNT": "צפיות", + "STATUS": "מצב", + "LAST_EDITED": "עריכה אחרונה" + }, + "COLUMNS": { + "BY": "על ידי", + "AUTHOR_NOT_AVAILABLE": "המחבר אינו זמין" + } + }, + "EDIT_ARTICLE": { + "LOADING": "טוען מאמר...", + "TITLE_PLACEHOLDER": "כותרת המאמר נכנסת לכאן", + "CONTENT_PLACEHOLDER": "כתוב את המאמר שלך כאן", + "API": { + "ERROR": "שגיאה בעת שמירת מאמר" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "שגיאה בעת פרסום מאמר", + "SUCCESS": "המאמר פורסם בהצלחה" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "שגיאה בעת העברת מאמר לארכיון", + "SUCCESS": "המאמר הועבר לארכיון בהצלחה" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "שגיאה בטיוטת מאמר", + "SUCCESS": "המאמר נשמר כטיוטה בהצלחה" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "אשר מחיקה", + "MESSAGE": "האם אתה בטוח שתמחק את המאמר?", + "YES": "כן, מחק", + "NO": "לא, השאר" + } + }, + "API": { + "SUCCESS_MESSAGE": "המאמר נמחק בהצלחה", + "ERROR_MESSAGE": "שגיאה בעת מחיקת מאמר" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "אנא הוסף את כותרת המאמר והתוכן ואז רק אתה יכול לעדכן את ההגדרות" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "חפש מאמרים" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "צור קטגוריה", + "SUB_TITLE": "הקטגוריה תשמש בפורטל הפונה לציבור כדי לסווג מאמרים.", + "PORTAL": "פורטל", + "LOCALE": "מקומי", + "NAME": { + "LABEL": "שם", + "PLACEHOLDER": "שם קטגוריה", + "HELP_TEXT": "שם הקטגוריה והסמל ישמשו בפורטל הפונה לציבור כדי לסווג מאמרים.", + "ERROR": "שם שדה חובה" + }, + "SLUG": { + "LABEL": "שבלול", + "PLACEHOLDER": "שבלול קטגוריה עבור כתובות אתרים", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "נדרש שבלול" + }, + "DESCRIPTION": { + "LABEL": "תיאור", + "PLACEHOLDER": "תן תיאור קצר על הקטגוריה.", + "ERROR": "נדרש תיאור" + }, + "BUTTONS": { + "CREATE": "צור קטגוריה", + "CANCEL": "ביטול" + }, + "API": { + "SUCCESS_MESSAGE": "קטגוריה נוצרה בהצלחה", + "ERROR_MESSAGE": "לא ניתן ליצור קטגוריה" + } + }, + "EDIT": { + "TITLE": "ערוך קטגוריה", + "SUB_TITLE": "עריכת קטגוריה תעדכן את הקטגוריה בפורטל הפונה לציבור.", + "PORTAL": "פורטל", + "LOCALE": "מקומי", + "NAME": { + "LABEL": "שם", + "PLACEHOLDER": "שם קטגוריה", + "HELP_TEXT": "שם הקטגוריה והסמל ישמשו בפורטל הפונה לציבור כדי לסווג מאמרים.", + "ERROR": "שם שדה חובה" + }, + "SLUG": { + "LABEL": "שבלול", + "PLACEHOLDER": "שבלול קטגוריה עבור כתובות אתרים", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "נדרש שבלול" + }, + "DESCRIPTION": { + "LABEL": "תיאור", + "PLACEHOLDER": "תן תיאור קצר על הקטגוריה.", + "ERROR": "נדרש תיאור" + }, + "BUTTONS": { + "CREATE": "עדכון קטגוריה", + "CANCEL": "ביטול" + }, + "API": { + "SUCCESS_MESSAGE": "הקטגוריה עודכנה בהצלחה", + "ERROR_MESSAGE": "לא ניתן לעדכן את הקטגוריה" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "הקטגוריה נמחקה בהצלחה", + "ERROR_MESSAGE": "לא ניתן למחוק קטגוריה" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "חפש מאמרים", + "PLACEHOLDER": "חפש מאמרים", + "NO_RESULT": "לא נמצאו מאמרים", + "SEARCHING": "מחפש...", + "SEARCH_BUTTON": "חפש", + "INSERT_ARTICLE": "הכנס קישור", + "IFRAME_ERROR": "כתובת ה-URL ריקה או לא חוקית. לא ניתן להציג תוכן.", + "OPEN_ARTICLE_SEARCH": "הכנס מאמר ממרכז העזרה", + "SUCCESS_ARTICLE_INSERTED": "המאמר הוחדר בהצלחה", + "PREVIEW_LINK": "תצוגה מקדימה של מאמר", + "CANCEL": "סגור", + "BACK": "חזור", + "BACK_RESULTS": "חזור לתוצאות" + }, + "UPGRADE_PAGE": { + "TITLE": "מרכז עזרה", + "DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Upgrade your subscription to enable this feature.", + "SELF_HOSTED_DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Please contact your administrator to enable this feature.", + "BUTTON": { + "LEARN_MORE": "למד עוד", + "UPGRADE": "שדרג" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "פורטלים מרובים", + "DESCRIPTION": "צור פורטלים מרובים של מרכז עזרה עבור מוצרים שונים באמצעות אותו חשבון." + }, + "LOCALES": { + "TITLE": "תמיכה מלאה באזורים (Locales)", + "DESCRIPTION": "לכסן את הפורטל בשפה שלך. אנו תומכים בכל האזורים ומאפשרים תרגומים עבור כל מאמר." + }, + "SEO": { + "TITLE": "SEO-friendly design", + "DESCRIPTION": "Customize your meta tags to improve your visibility on search engines with our SEO-friendly pages." + }, + "API": { + "TITLE": "תמיכה מלאה ב-API", + "DESCRIPTION": "Use the portal as a headless CMS with third party front-end frameworks using our APIs." + } + } + }, + "LOADING": "טוען...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} צפייה | {count} צפיות", + "DROPDOWN_MENU": { + "PUBLISH": "פרסם", + "DRAFT": "טיוטה", + "ARCHIVE": "ארכיון", + "DELETE": "מחק" + }, + "STATUS": { + "DRAFT": "טיוטה", + "PUBLISHED": "יצא לאור", + "ARCHIVED": "בארכיון" + }, + "CATEGORY": { + "UNCATEGORISED": "ללא קטגוריה" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "כל המאמרים", + "MINE": "שלי", + "DRAFT": "טיוטה", + "PUBLISHED": "יצא לאור", + "ARCHIVED": "בארכיון" + }, + "CATEGORY": { + "ALL": "כל הקטגוריות" + }, + "LOCALE": { + "ALL": "כל האזורים" + }, + "NEW_ARTICLE": "מאמר חדש" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "כתוב מאמר", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "מאמר חדש" + }, + "MINE": { + "TITLE": "לא כתבת כאן מאמרים", + "SUBTITLE": "כל המאמרים שנכתבו על ידך מופיעים כאן לגישה מהירה." + }, + "DRAFT": { + "TITLE": "אין מאמרים בטיוטות", + "SUBTITLE": "מאמרי טיוטה יופיעו כאן" + }, + "PUBLISHED": { + "TITLE": "אין מאמרים שפורסמו", + "SUBTITLE": "מאמרים שפורסמו יופיעו כאן" + }, + "ARCHIVED": { + "TITLE": "אין מאמרים בארכיון", + "SUBTITLE": "מאמרים בארכיון אינם מופיעים בפורטל, ניתן להשתמש בהם כדי לסמן דפים מיושנים או לא עדכניים" + }, + "CATEGORY": { + "TITLE": "אין מאמרים בקטגוריה זו", + "SUBTITLE": "מאמרים בקטגוריה זו יופיעו כאן" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "קטגוריה חדשה", + "EDIT_CATEGORY": "ערוך קטגוריה", + "CATEGORIES_COUNT": "{n} קטגוריה | {n} קטגוריות", + "BREADCRUMB": { + "CATEGORY_LOCALE": "קטגוריות ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} מאמר) | {categoryName} ({categoryCount} מאמרים)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "לא נמצאו קטגוריות", + "SUBTITLE": "קטגוריות יופיעו כאן. תוכל להוסיף קטגוריה על ידי לחיצה על כפתור 'קטגוריה חדשה'." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} מאמר | {count} מאמרים" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "קטגוריה נוצרה בהצלחה", + "ERROR_MESSAGE": "לא ניתן ליצור קטגוריה" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "הקטגוריה עודכנה בהצלחה", + "ERROR_MESSAGE": "לא ניתן לעדכן את הקטגוריה" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "הקטגוריה נמחקה בהצלחה", + "ERROR_MESSAGE": "לא ניתן למחוק קטגוריה" + } + }, + "HEADER": { + "CREATE": "צור קטגוריה", + "EDIT": "ערוך קטגוריה", + "DESCRIPTION": "עריכת קטגוריה תעדכן את הקטגוריה בפורטל הפונה לציבור.", + "PORTAL": "פורטל", + "LOCALE": "מקומי" + }, + "FORM": { + "NAME": { + "LABEL": "שם", + "PLACEHOLDER": "שם קטגוריה", + "ERROR": "שם שדה חובה" + }, + "SLUG": { + "LABEL": "שבלול", + "PLACEHOLDER": "שבלול קטגוריה עבור כתובות אתרים", + "ERROR": "נדרש שבלול", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "תיאור", + "PLACEHOLDER": "תן תיאור קצר על הקטגוריה.", + "ERROR": "נדרש תיאור" + } + }, + "BUTTONS": { + "CREATE": "צור", + "EDIT": "עדכן", + "CANCEL": "ביטול" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "אין אזורים זמינים | {n} אזור | {n} אזורים", + "NEW_LOCALE_BUTTON_TEXT": "אזור חדש", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} מאמר | {count} מאמרים", + "CATEGORIES_COUNT": "{count} קטגוריה | {count} קטגוריות", + "DEFAULT": "ברירת מחדל", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "הפוך לברירת מחדל", + "DELETE": "מחק" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "הוסף מקום חדש", + "DESCRIPTION": "בחר את השפה שבה מאמר זה ייכתב. זו תתווסף לרשימת התרגומים שלך, ותוכל להוסיף נוספים מאוחר יותר.", + "COMBOBOX": { + "PLACEHOLDER": "בחר אזור..." + }, + "API": { + "SUCCESS_MESSAGE": "האזור נוסף בהצלחה", + "ERROR_MESSAGE": "לא ניתן להוסיף אזור. נסה שוב." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "שומר...", + "SAVED": "שמור" + }, + "PREVIEW": "תצוגה מקדימה", + "PUBLISH": "פרסם", + "DRAFT": "טיוטה", + "ARCHIVE": "ארכיון", + "BACK_TO_ARTICLES": "חזור למאמרים" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "מאפיינים נוספים", + "UNCATEGORIZED": "ללא קטגוריה", + "EDITOR_PLACEHOLDER": "כתוב משהו..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "מאפייני מאמר", + "META_DESCRIPTION": "מטא תיאור", + "META_DESCRIPTION_PLACEHOLDER": "הוסף תיאור מטא", + "META_TITLE": "כותרת מטא", + "META_TITLE_PLACEHOLDER": "הוסף כותרת מטא", + "META_TAGS": "מטא תגים", + "META_TAGS_PLACEHOLDER": "הוסף תגי מטא" + }, + "API": { + "ERROR": "שגיאה בעת שמירת מאמר" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "פורטל חדש", + "PORTALS": "פורטלים", + "CREATE_PORTAL": "צור ונהל פורטלים מרובים", + "ARTICLES": "מאמרים", + "DOMAIN": "דומיין", + "PORTAL_NAME": "שם הפורטל" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "צור פורטל חדש", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "צור", + "NAME": { + "LABEL": "שם", + "PLACEHOLDER": "מדריך למשתמש | Chatwoot", + "MESSAGE": "בחר שם לפורטל שלך.", + "ERROR": "שם שדה חובה" + }, + "SLUG": { + "LABEL": "שבלול", + "PLACEHOLDER": "user-guide", + "ERROR": "נדרש שבלול", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "לוגו", + "IMAGE_UPLOAD_ERROR": "לא ניתן להעלות את התמונה! נסה שוב", + "IMAGE_UPLOAD_SUCCESS": "תמונה נוספה בהצלחה. אנא לחץ על שמור שינויים כדי לשמור את הלוגו", + "IMAGE_DELETE_SUCCESS": "לוגו נמחק בהצלחה", + "IMAGE_DELETE_ERROR": "לא ניתן למחוק לוגו", + "IMAGE_UPLOAD_SIZE_ERROR": "גודל התמונה צריך להיות פחות מ-{size}MB" + }, + "NAME": { + "LABEL": "שם", + "PLACEHOLDER": "שם הפורטל", + "ERROR": "שם שדה חובה" + }, + "HEADER_TEXT": { + "LABEL": "טקסט כותרת עליונה", + "PLACEHOLDER": "טקסט כותרת הפורטל" + }, + "PAGE_TITLE": { + "LABEL": "כותרת עמוד", + "PLACEHOLDER": "כותרת דף הפורטל" + }, + "HOME_PAGE_LINK": { + "LABEL": "קישור לדף הבית", + "PLACEHOLDER": "קישור לדף הבית של הפורטל", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "שבלול", + "PLACEHOLDER": "סלאג פורטל" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "ווידג'ט צ'אט חי", + "PLACEHOLDER": "בחר ווידג'ט צ'אט חי", + "HELP_TEXT": "בחר ווידג'ט צ'אט חי שיופיע במרכז העזרה שלך", + "NONE_OPTION": "אין ווידג'ט" + }, + "BRAND_COLOR": { + "LABEL": "צבע מותג" + }, + "SAVE_CHANGES": "שמור שינויים" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "תחום מותאם אישית", + "LABEL": "תחום מותאם אישית:", + "DESCRIPTION": "תוכל לארח את הפורטל שלך בדומיין מותאם אישית. לדוגמה, אם האתר שלך הוא yourdomain.com ואתה רוצה שהפורטל שלך יהיה זמין ב-docs.yourdomain.com, פשוט הזן זאת בשדה זה.", + "STATUS_DESCRIPTION": "הפורטל המותאם אישית שלך יתחיל לעבוד ברגע שהוא יאומת.", + "PLACEHOLDER": "דומיין מותאם אישית של פורטל", + "EDIT_BUTTON": "ערוך", + "ADD_BUTTON": "הוסף דומיין מותאם אישית", + "STATUS": { + "LIVE": "לחיות", + "PENDING": "ממתין לאימות", + "ERROR": "האימות נכשל" + }, + "DIALOG": { + "ADD_HEADER": "הוסף דומיין מותאם אישית", + "EDIT_HEADER": "ערוך דומיין מותאם אישית", + "ADD_CONFIRM_BUTTON_LABEL": "הוסף דומיין", + "EDIT_CONFIRM_BUTTON_LABEL": "עדכן דומיין", + "LABEL": "תחום מותאם אישית", + "PLACEHOLDER": "דומיין מותאם אישית של פורטל", + "ERROR": "דומיין מותאם אישית נדרש", + "FORMAT_ERROR": "אנא הזן כתובת URL חוקית של דומיין, לדוגמה docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "הגדרת DNS", + "DESCRIPTION": "היכנס לחשבון שלך אצל ספק ה-DNS שלך, והוסף רשומת CNAME עבור תת-הדומיין המצביע על chatwoot.help", + "COPY": "CNAME הועתק בהצלחה", + "SEND_INSTRUCTIONS": { + "HEADER": "שלח הוראות", + "DESCRIPTION": "אם אתה מעדיף שמישהו מצוות הפיתוח שלך יטפל בשלב זה, תוכל להזין כתובת דוא\"ל למטה, ואנו נשלח להם את ההוראות הנדרשות.", + "PLACEHOLDER": "הזן את הדוא\"ל שלהם", + "ERROR": "הזן כתובת דוא\"ל חוקית", + "SEND_BUTTON": "שלח" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "מחק את {portalName}", + "HEADER": "מחק את הפורטל", + "DESCRIPTION": "מחק לצמיתות פורטל זה. פעולה זו היא בלתי הפיכה", + "DIALOG": { + "HEADER": "בטוח שברצונך למחוק את {portalName}?", + "DESCRIPTION": "זוהי פעולה קבועה שלא ניתנת לביטול.", + "CONFIRM_BUTTON_LABEL": "מחק" + } + }, + "EDIT_CONFIGURATION": "ערוך הגדרה" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "הפורטל נוצר בהצלחה", + "ERROR_MESSAGE": "לא ניתן ליצור פורטל" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "הפורטל עודכן בהצלחה", + "ERROR_MESSAGE": "לא ניתן לעדכן פורטל" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "העלה מסמך PDF", + "DESCRIPTION": "העלה מסמך PDF כדי ליצור אוטומטית שאלות נפוצות באמצעות AI", + "DRAG_DROP_TEXT": "גרור ושחרר את קובץ ה-PDF שלך כאן, או לחץ כדי לבחור", + "SELECT_FILE": "בחר קובץ PDF", + "ADDITIONAL_CONTEXT_LABEL": "הקשר נוסף (אופציונלי)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "ספק כל הקשר או הוראות נוספות ליצירת שאלות נפוצות...", + "UPLOADING": "מעלה...", + "UPLOAD": "העלה וטפל", + "CANCEL": "ביטול", + "ERROR_INVALID_TYPE": "אנא בחר קובץ PDF חוקי", + "ERROR_FILE_TOO_LARGE": "גודל הקובץ חייב להיות קטן מ-512MB", + "ERROR_UPLOAD_FAILED": "העלאת ה-PDF נכשלה. אנא נסה שוב." + }, + "PDF_DOCUMENTS": { + "TITLE": "מסמכי PDF", + "DESCRIPTION": "נהל מסמכי PDF שהועלו וצור מהם שאלות נפוצות", + "UPLOAD_PDF": "העלה PDF", + "UPLOAD_FIRST_PDF": "העלה את קובץ ה-PDF הראשון שלך", + "UPLOADED_BY": "הועלה על ידי", + "GENERATE_FAQS": "צור שאלות נפוצות", + "GENERATING": "יוצר...", + "CONFIRM_DELETE": "האם אתה בטוח שברצונך למחוק את {filename}?", + "EMPTY_STATE": { + "TITLE": "אין עדיין מסמכי PDF", + "DESCRIPTION": "העלה מסמכי PDF כדי ליצור אוטומטית שאלות נפוצות באמצעות AI" + }, + "STATUS": { + "UPLOADED": "מוכן", + "PROCESSING": "מעבד", + "PROCESSED": "הושלם", + "FAILED": "נכשל" + } + }, + "CONTENT_GENERATION": { + "TITLE": "יצירת תוכן", + "DESCRIPTION": "העלה מסמכי PDF כדי ליצור אוטומטית תוכן שאלות נפוצות באמצעות AI", + "UPLOAD_TITLE": "העלה מסמך PDF", + "DRAG_DROP": "גרור ושחרר את קובץ ה-PDF שלך כאן, או לחץ כדי לבחור", + "SELECT_FILE": "בחר קובץ PDF", + "UPLOADING": "מעבד מסמך...", + "UPLOAD_SUCCESS": "המסמך עובד בהצלחה!", + "UPLOAD_ERROR": "העלאת המסמך נכשלה. אנא נסה שוב.", + "INVALID_FILE_TYPE": "אנא בחר קובץ PDF חוקי", + "FILE_TOO_LARGE": "גודל הקובץ חייב להיות קטן מ-512MB", + "GENERATED_CONTENT": "תוכן שאלות נפוצות שנוצר", + "PUBLISH_SELECTED": "פרסם נבחרים", + "PUBLISHING": "מפרסם...", + "FROM_DOCUMENT": "מתוך מסמך", + "NO_CONTENT": "אין תוכן שנוצר זמין. העלה מסמך PDF כדי להתחיל.", + "LOADING": "טוען תוכן שנוצר..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/inbox.json b/app/javascript/dashboard/i18n/locale/he/inbox.json new file mode 100644 index 0000000..8412d2f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "תיבת הדואר הנכנס שלי", + "DISPLAY_DROPDOWN": "הצג", + "LOADING": "מאחזר התראות", + "404": "אין התראות פעילות בקבוצה זו.", + "NO_NOTIFICATIONS": "אין התראות", + "NOTE": "התראות מכל תיבות הדואר הנכנס שאליהן נרשמת", + "NO_MESSAGES_AVAILABLE": "אופס! לא ניתן לאחזר הודעות", + "SNOOZED_UNTIL": "מושתק עד", + "SNOOZED_UNTIL_TOMORROW": "נמנם עד מחר", + "SNOOZED_UNTIL_NEXT_WEEK": "נמנם עד שבוע הבא" + }, + "ACTION_HEADER": { + "SNOOZE": "השתק התראה", + "DELETE": "מחק התראה", + "BACK": "חזור" + }, + "TYPES": { + "CONVERSATION_MENTION": "אוזכרת בשיחה", + "CONVERSATION_CREATION": "נוצרה שיחה חדשה", + "CONVERSATION_ASSIGNMENT": "שיחה הוקצתה לך", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "הודעה חדשה בשיחה שהוקצתה", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "הודעה חדשה בשיחה שבה אתה משתתף", + "SLA_MISSED_FIRST_RESPONSE": "יעד SLA - תגובה ראשונה הוחמץ עבור שיחה", + "SLA_MISSED_NEXT_RESPONSE": "יעד SLA - תגובה הבאה הוחמץ עבור שיחה", + "SLA_MISSED_RESOLUTION": "יעד SLA - סגירה הוחמץ עבור שיחה" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "אוזכר", + "CONVERSATION_ASSIGNMENT": "הוקצה לך", + "CONVERSATION_CREATION": "שיחה חדשה", + "SLA_MISSED_FIRST_RESPONSE": "הפרת SLA", + "SLA_MISSED_NEXT_RESPONSE": "הפרת SLA", + "SLA_MISSED_RESOLUTION": "הפרת SLA", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "הודעה חדשה", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "הודעה חדשה", + "SNOOZED_UNTIL": "מושתק למשך {time}", + "SNOOZED_ENDS": "ההשתקה הסתיימה" + }, + "NO_CONTENT": "אין תוכן זמין", + "MENU_ITEM": { + "MARK_AS_READ": "סמן כנקרא", + "MARK_AS_UNREAD": "סמן כלא נקרא", + "SNOOZE": "נודניק", + "DELETE": "מחק", + "MARK_ALL_READ": "סמן הכל כנקרא", + "DELETE_ALL": "מחק הכל", + "DELETE_ALL_READ": "מחק את כל הנקראים" + }, + "DISPLAY_MENU": { + "SORT": "מיין", + "DISPLAY": "הצג :", + "SORT_OPTIONS": { + "NEWEST": "החדש ביותר", + "OLDEST": "הישן ביותר", + "PRIORITY": "עדיפות" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "נימנום", + "READ": "נקרא", + "LABELS": "תוויות", + "CONVERSATION_ID": "מזהה שיחה" + } + }, + "ALERTS": { + "MARK_AS_READ": "ההתראה סומנה כנקראה", + "MARK_AS_UNREAD": "ההתראה סומנה כלא נקראה", + "SNOOZE": "ההתראה הושתקה", + "DELETE": "ההתראה נמחקה", + "MARK_ALL_READ": "כל ההתראות סומנו כנקראו", + "DELETE_ALL": "כל ההתראות נמחקו", + "DELETE_ALL_READ": "כל ההתראות שנקראו נמחקו" + }, + "REAUTHORIZE": { + "TITLE": "נדרש אישור מחדש", + "DESCRIPTION": "חיבור ה-WhatsApp שלך פג. אנא התחבר מחדש כדי להמשיך לקבל ולשלוח הודעות.", + "BUTTON_TEXT": "התחבר מחדש ל-WhatsApp", + "LOADING_FACEBOOK": "טוען SDK של Facebook...", + "SUCCESS": "WhatsApp חובר מחדש בהצלחה", + "ERROR": "ההתחברות מחדש ל-WhatsApp נכשלה. אנא נסה שוב.", + "WHATSAPP_APP_ID_MISSING": "מזהה האפליקציה של WhatsApp אינו מוגדר. אנא פנה למנהל המערכת שלך.", + "WHATSAPP_CONFIG_ID_MISSING": "מזהה תצורת WhatsApp אינו מוגדר. אנא פנה למנהל המערכת שלך.", + "CONFIGURATION_ERROR": "אירעה שגיאת תצורה במהלך האישור מחדש.", + "FACEBOOK_LOAD_ERROR": "טעינת ה-SDK של Facebook נכשלה. אנא נסה שוב.", + "TROUBLESHOOTING": { + "TITLE": "פתרון בעיות", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "אתה צריך גישת מנהל לחשבון העסקי של WhatsApp" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json new file mode 100644 index 0000000..4ed1ec7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "תיבות דואר נכנס", + "DESCRIPTION": "ערוץ הוא אמצעי התקשורת שלקוח שלך בוחר כדי ליצור איתך אינטראקציה. תיבת דואר נכנס היא המקום שבו אתה מנהל אינטראקציות עבור ערוץ ספציפי. היא יכולה לכלול תקשורת ממקורות שונים כגון דוא\"ל, צ'אט חי ומדיה חברתית.", + "LEARN_MORE": "למד עוד על תיבות דואר נכנס", + "RECONNECTION_REQUIRED": "תיבת הדואר הנכנס שלך מנותקת. לא תקבל הודעות חדשות עד שתאשר אותה מחדש.", + "CLICK_TO_RECONNECT": "לחץ כאן כדי להתחבר מחדש.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "השלם הרשמה", + "LIST": { + "404": "אין תיבות דואר נכנס מצורפות לחשבון זה." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "בחר ערוץ", + "BODY": "בחר את הספק שברצונך לשלב עם Chatwoot." + }, + "INBOX": { + "TITLE": "צור תיבת דואר נכנס", + "BODY": "אמת את חשבונך וצור תיבת דואר נכנס." + }, + "AGENT": { + "TITLE": "הוסף נציג", + "BODY": "הוסף נציגים לתיבת הדואר הנכנס שנוצרה." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "אתם מוכנים לצאת לדרך!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "שם תיבת הדואר הנכנס", + "PLACEHOLDER": "הזן את שם תיבת הדואר הנכנס שלך (למשל: Acme Inc)", + "ERROR": "נא הכנס שם תקני לתיבת הדואר" + }, + "WEBSITE_NAME": { + "LABEL": "שם האתר", + "PLACEHOLDER": "הזן את שם האתר שלך (למשל: Acme Inc)" + }, + "FB": { + "HELP": "נ. ב: על ידי כניסה, אנו מקבלים גישה רק להודעות של הדף שלך. לעולם לא ניתן לגשת להודעות הפרטיות שלך על ידי Chatwoot.", + "CHOOSE_PAGE": "בחר עמוד", + "CHOOSE_PLACEHOLDER": "בחר עמוד מהרשימה", + "INBOX_NAME": "שם תיבת הדואר הנכנס", + "ADD_NAME": "הוסף שם לתיבת הדואר הנכנס שלך", + "PICK_NAME": "בחר שם לתיבת הדואר הנכנס שלך", + "PICK_A_VALUE": "בחר ערך", + "CREATE_INBOX": "צור תיבת דואר נכנס" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "המשך עם אינסטגרם", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "חבר את פרופיל האינסטגרם שלך", + "HELP": "כדי להוסיף את פרופיל האינסטגרם שלך כערוץ, עליך לאמת את פרופיל האינסטגרם שלך על ידי לחיצה על 'המשך עם אינסטגרם' ", + "ERROR_MESSAGE": "אירעה שגיאה בחיבור לאינסטגרם, אנא נסה שוב", + "ERROR_AUTH": "אירעה שגיאה בחיבור לאינסטגרם, אנא נסה שוב", + "NEW_INBOX_SUGGESTION": "חשבון אינסטגרם זה היה מקושר בעבר לתיבת דואר נכנס אחרת והועבר כעת לכאן. כל ההודעות החדשות יופיעו כאן. תיבת הדואר הנכנס הישנה לא תוכל יותר לשלוח או לקבל הודעות עבור חשבון זה.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "כדי להוסיף את פרופיל הטוויטר שלך כערוץ, עליך לאמת את פרופיל הטוויטר שלך על ידי לחיצה על 'היכנס באמצעות טוויטר' ", + "ERROR_MESSAGE": "אירעה שגיאה בחיבור לטוויטר, אנא נסה שוב", + "TWEETS": { + "ENABLE": "צור שיחות מהציוצים המוזכרים" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "ערוץ האתר", + "DESC": "צור ערוץ לאתר שלך והתחל לתמוך בלקוחות שלך באמצעות ווידג'ט האתר שלנו.", + "LOADING_MESSAGE": "יצירת ערוץ תמיכה באתר", + "CHANNEL_AVATAR": { + "LABEL": "אוואטר הערוץ" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "כתובת אתר של Webhook", + "PLACEHOLDER": "אנא הזן את כתובת ה-Webhook URL שלך", + "ERROR": "אנא הכנס כתובת URL חוקית" + }, + "CHANNEL_DOMAIN": { + "LABEL": "דומיין אתר", + "PLACEHOLDER": "הזן את שם האתר שלך (למשל: Acme Inc)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "כותרת ברוכים הבאים", + "PLACEHOLDER": "שלום שם !" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "ברוך הבא לתיוג", + "PLACEHOLDER": "אנחנו עושים את זה פשוט להתחבר אלינו. שאל אותנו כל דבר, או שתף את המשוב שלך." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "הודעת ברכה בערוץ", + "PLACEHOLDER": "Acme Inc עונה בדרך כלל תוך מספר שעות." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "אפשר ברכה בערוץ", + "HELP_TEXT": "שלח הודעת פתיחה אוטומטית ביצירת שיחה חדשה.", + "ENABLED": "מופעל", + "DISABLED": "כבוי" + }, + "REPLY_TIME": { + "TITLE": "הגדר זמן תגובה", + "IN_A_FEW_MINUTES": "בעוד כמה דקות", + "IN_A_FEW_HOURS": "בעוד כמה שעות", + "IN_A_DAY": "ביום", + "HELP_TEXT": "זמן תשובה זה יוצג בווידג'ט הצ'אט החי" + }, + "WIDGET_COLOR": { + "LABEL": "צבע יישומון", + "PLACEHOLDER": "עדכן את צבע הווידג'ט המשמש בווידג'ט" + }, + "SUBMIT_BUTTON": "צור תיבת דואר נכנס", + "API": { + "ERROR_MESSAGE": "יצירת ערוץ אתר אינטרנט נכשלה, אנא נסה שנית" + } + }, + "TWILIO": { + "TITLE": "ערוץ SMS/ווטסאפ של Twilio", + "DESC": "שלב את Twilio והתחל לתמוך בלקוחות שלך באמצעות SMS או WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "חשבון SID", + "PLACEHOLDER": "אנא הזן את SID חשבון Twilio שלך", + "ERROR": "שדה חובה" + }, + "API_KEY": { + "USE_API_KEY": "השתמש באימות מפתח API", + "LABEL": "API Key SID", + "PLACEHOLDER": "אנא הזן את ה-API Key SID שלך", + "ERROR": "שדה חובה" + }, + "API_KEY_SECRET": { + "LABEL": "סוד מפתח API", + "PLACEHOLDER": "אנא הזן את סוד מפתח ה-API שלך", + "ERROR": "שדה חובה" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "ערוץ הודעות SID", + "PLACEHOLDER": "נא הכנס מזהה Twilio Messaging Service SID", + "ERROR": "שדה חובה", + "USE_MESSAGING_SERVICE": "השתמש ב- Twilio Messaging Service" + }, + "CHANNEL_TYPE": { + "LABEL": "סוג ערוץ", + "ERROR": "אנא בחר את סוג הערוץ שלך" + }, + "AUTH_TOKEN": { + "LABEL": "אסימון אימות", + "PLACEHOLDER": "אנא הזן את ה-Twilio Auth Token שלך", + "ERROR": "שדה חובה" + }, + "CHANNEL_NAME": { + "LABEL": "שם תיבת הדואר הנכנס", + "PLACEHOLDER": "נא להזין שם תיבת דואר נכנס", + "ERROR": "שדה חובה" + }, + "PHONE_NUMBER": { + "LABEL": "מספר טלפון", + "PLACEHOLDER": "נא להזין את מספר הטלפון שממנו תישלח ההודעה.", + "ERROR": "נא ספק מספר טלפון תקני שמתחיל ב- '+' ולא מכיל רווחים." + }, + "API_CALLBACK": { + "TITLE": "כתובת אתר להתקשרות חוזרת", + "SUBTITLE": "עליך להגדיר את כתובת האתר להתקשרות חוזרת של ההודעה ב-Twilio עם כתובת האתר המוזכרת כאן." + }, + "SUBMIT_BUTTON": "צור ערוץ Twilio", + "API": { + "ERROR_MESSAGE": "לא הצלחנו לאמת את האישורים של Twilio, אנא נסה שוב" + } + }, + "SMS": { + "TITLE": "ערוץ SMS", + "DESC": "התחל לתמוך בלקוחותיך באמצעות SMS.", + "PROVIDERS": { + "LABEL": "ספק API", + "TWILIO": "טוויליו", + "BANDWIDTH": "Bandwidth" + }, + "API": { + "ERROR_MESSAGE": "שמירת ערוץ ה-SMS נכשלה" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "מזהה חשבון", + "PLACEHOLDER": "נא הכנס את מזהה ה- Bandwidth Account ID שלך", + "ERROR": "שדה חובה" + }, + "API_KEY": { + "LABEL": "מפתח API", + "PLACEHOLDER": "אנא הזן את מפתח ה-API של Bandwidth", + "ERROR": "שדה חובה" + }, + "API_SECRET": { + "LABEL": "סוד API", + "PLACEHOLDER": "אנא הזן את סוד ה-API של Bandwidth", + "ERROR": "שדה חובה" + }, + "APPLICATION_ID": { + "LABEL": "מזהה אפליקציה", + "PLACEHOLDER": "נא הכנס את מזהה ה-Bandwidth Application ID שלך", + "ERROR": "שדה חובה" + }, + "INBOX_NAME": { + "LABEL": "שם תיבת הדואר הנכנס", + "PLACEHOLDER": "נא להזין שם תיבת דואר נכנס", + "ERROR": "שדה חובה" + }, + "PHONE_NUMBER": { + "LABEL": "מספר טלפון", + "PLACEHOLDER": "נא להזין את מספר הטלפון שממנו תישלח ההודעה.", + "ERROR": "נא ספק מספר טלפון תקני שמתחיל ב- '+' ולא מכיל רווחים." + }, + "SUBMIT_BUTTON": "צור ערוץ Bandwidth", + "API": { + "ERROR_MESSAGE": "לא הצלחנו לאמת את פרטי חשבון ה-Bandwidth שלך, אנא נסה שנית" + }, + "API_CALLBACK": { + "TITLE": "כתובת אתר להתקשרות חוזרת", + "SUBTITLE": "עליך להגדיר את ה- message callback URL ב- Bandwidth עם ה-URL שמוצג כאן." + } + } + }, + "WHATSAPP": { + "TITLE": "ערוץ וואטסאפ", + "DESC": "התחל לתמוך בלקוחות שלך באמצעות וואטסאפ.", + "PROVIDERS": { + "LABEL": "ספק API", + "WHATSAPP_EMBEDDED": "WhatsApp עסקי", + "TWILIO": "טוויליו", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "הגדרה מהירה דרך Meta", + "TWILIO_DESC": "התחבר באמצעות פרטי זיהוי של Twilio", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "בחר את ספק ה-API שלך", + "DESCRIPTION": "בחר את ספק ה-WhatsApp שלך. תוכל להתחבר ישירות דרך Meta שאינה דורשת הגדרה, או להתחבר דרך Twilio באמצעות פרטי החשבון שלך." + }, + "INBOX_NAME": { + "LABEL": "שם תיבת הדואר הנכנס", + "PLACEHOLDER": "נא להזין שם תיבת דואר נכנס", + "ERROR": "שדה חובה" + }, + "PHONE_NUMBER": { + "LABEL": "מספר טלפון", + "PLACEHOLDER": "נא להזין את מספר הטלפון שממנו תישלח ההודעה.", + "ERROR": "נא ספק מספר טלפון תקני שמתחיל ב- '+' ולא מכיל רווחים." + }, + "PHONE_NUMBER_ID": { + "LABEL": "מזהה מספר טלפון", + "PLACEHOLDER": "נא הכנס את Phone number ID מתוך ממשק ה- Facebook developer.", + "ERROR": "אנא הכנס ערך תקין." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "מזהה חשבון עסקי", + "PLACEHOLDER": "נא הכנס את Business Account ID מתוך ממשק ה- Facebook developer.", + "ERROR": "אנא הכנס ערך תקין." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "אסימון אימות Webhook", + "PLACEHOLDER": "הזן אסימון אימות שברצונך להגדיר עבור Webhooks של Facebook.", + "ERROR": "אנא הכנס ערך תקין." + }, + "API_KEY": { + "LABEL": "מפתח API", + "SUBTITLE": "הגדר את מפתח ה-API של וואטסאפ.", + "PLACEHOLDER": "מפתח API", + "ERROR": "אנא הכנס ערך תקין." + }, + "API_CALLBACK": { + "TITLE": "כתובת אתר להתקשרות חוזרת", + "SUBTITLE": "עליך להגדיר את ה- webhook URL ואת ה- verification token הבאים בממשק ה- Facebook Developer.", + "WEBHOOK_URL": "כתובת אתר של Webhook", + "WEBHOOK_VERIFICATION_TOKEN": "אסימון אימות Webhook" + }, + "SUBMIT_BUTTON": "צור ערוץ וואטסאפ", + "EMBEDDED_SIGNUP": { + "TITLE": "הגדרה מהירה עם Meta", + "DESC": "השתמש בזרימת ההרשמה המשובצת של WhatsApp כדי לחבר במהירות מספרים חדשים. תועבר ל-Meta כדי להיכנס לחשבון WhatsApp העסקי שלך. גישת מנהל מערכת תעזור להפוך את ההגדרה לחלקה וקלה.", + "BENEFITS": { + "TITLE": "יתרונות ההרשמה המשובצת:", + "EASY_SETUP": "אין צורך בהגדרה ידנית", + "SECURE_AUTH": "אימות מאובטח מבוסס OAuth", + "AUTO_CONFIG": "הגדרת Webhook ומספר טלפון אוטומטית" + }, + "LEARN_MORE": { + "TEXT": "כדי ללמוד עוד על ההרשמה המשולבת, התמחור והמגבלות, בקר ב- {link}.", + "LINK_TEXT": "קישור זה" + }, + "SUBMIT_BUTTON": "התחבר עם WhatsApp עסקי", + "AUTH_PROCESSING": "מאמת עם Meta", + "WAITING_FOR_BUSINESS_INFO": "אנא השלם את הגדרת העסק בחלון Meta...", + "PROCESSING": "מגדיר את חשבון WhatsApp העסקי שלך", + "LOADING_SDK": "טוען SDK של Facebook...", + "CANCELLED": "הרשמת WhatsApp בוטלה", + "SUCCESS_TITLE": "חשבון WhatsApp עסקי מחובר!", + "WAITING_FOR_AUTH": "ממתין לאימות...", + "INVALID_BUSINESS_DATA": "התקבלו נתוני עסק לא חוקיים מ-Facebook. אנא נסה שוב.", + "SIGNUP_ERROR": "אירעה שגיאת הרשמה", + "AUTH_NOT_COMPLETED": "האימות לא הושלם. אנא הפעל מחדש את התהליך.", + "SUCCESS_FALLBACK": "חשבון WhatsApp עסקי הוגדר בהצלחה", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "זרימת הגדרה ידנית" + }, + "API": { + "ERROR_MESSAGE": "לא הצלחנו לשמור את ערוץ הוואטסאפ" + } + }, + "VOICE": { + "TITLE": "ערוץ קולי", + "DESC": "שלב את Twilio Voice והתחל לתמוך בלקוחות שלך באמצעות שיחות טלפון.", + "PHONE_NUMBER": { + "LABEL": "מספר טלפון", + "PLACEHOLDER": "הזן את מספר הטלפון שלך (לדוגמה: +1234567890)", + "ERROR": "אנא ספק מספר טלפון חוקי בפורמט E.164 (לדוגמה: +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "חשבון SID", + "PLACEHOLDER": "הזן את Twilio Account SID שלך", + "REQUIRED": "Account SID נדרש" + }, + "AUTH_TOKEN": { + "LABEL": "אסימון אימות", + "PLACEHOLDER": "הזן את Twilio Auth Token שלך", + "REQUIRED": "אסימון אימות נדרש" + }, + "API_KEY_SID": { + "LABEL": "API Key SID", + "PLACEHOLDER": "הזן את Twilio API Key SID שלך", + "REQUIRED": "API Key SID נדרש" + }, + "API_KEY_SECRET": { + "LABEL": "סוד מפתח API", + "PLACEHOLDER": "הזן את Twilio API Key Secret שלך", + "REQUIRED": "סוד מפתח API נדרש" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "הגדר כתובת URL זו כ-Voice URL במספר הטלפון ובאפליקציית TwiML שלך ב-Twilio.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "הגדר כתובת URL זו כ-Status Callback URL במספר הטלפון שלך ב-Twilio." + }, + "SUBMIT_BUTTON": "צור ערוץ קולי", + "API": { + "ERROR_MESSAGE": "לא הצלחנו ליצור את הערוץ הקולי" + } + }, + "API_CHANNEL": { + "TITLE": "ערוץ API", + "DESC": "שלב עם ערוץ API והתחל לתמוך בלקוחות שלך.", + "CHANNEL_NAME": { + "LABEL": "שם הערוץ", + "PLACEHOLDER": "נא להזין שם ערוץ", + "ERROR": "שדה חובה" + }, + "WEBHOOK_URL": { + "LABEL": "כתובת אתר של Webhook", + "SUBTITLE": "הגדר את כתובת ה-URL שבה תרצה לקבל קריאות חוזרות על אירועים.", + "PLACEHOLDER": "כתובת אתר של Webhook" + }, + "SUBMIT_BUTTON": "צור ערוץ API", + "API": { + "ERROR_MESSAGE": "לא הצלחנו לשמור את ערוץ ה API" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "ערוץ דוא\"ל", + "DESC": "שלב את תיבת הדואר הנכנס שלך.", + "CHANNEL_NAME": { + "LABEL": "שם הערוץ", + "PLACEHOLDER": "נא להזין שם ערוץ", + "ERROR": "שדה חובה" + }, + "EMAIL": { + "LABEL": "אימייל", + "SUBTITLE": "אימייל לאן הלקוחות שלך שולחים לך כרטיסי תמיכה", + "PLACEHOLDER": "אימייל" + }, + "SUBMIT_BUTTON": "צור ערוץ דוא\"ל", + "API": { + "ERROR_MESSAGE": "לא הצלחנו לשמור את ערוץ האימייל" + }, + "FINISH_MESSAGE": "התחל להעביר את המיילים שלך לכתובת הדוא\"ל הבאה.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "לחץ כאן", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "ערוץ LINE", + "DESC": "השתלב עם ערוץ LINE והתחיל לתמוך בלקוחות שלך.", + "CHANNEL_NAME": { + "LABEL": "שם הערוץ", + "PLACEHOLDER": "נא להזין שם ערוץ", + "ERROR": "שדה חובה" + }, + "LINE_CHANNEL_ID": { + "LABEL": "מזהה ערוץ LINE", + "PLACEHOLDER": "מזהה ערוץ LINE" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "סוד ערוץ LINE", + "PLACEHOLDER": "סוד ערוץ LINE" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "LINE ערוץ טוקן", + "PLACEHOLDER": "LINE ערוץ טוקן" + }, + "SUBMIT_BUTTON": "צור ערוץ LINE", + "API": { + "ERROR_MESSAGE": "לא הצלחנו לשמור את ערוץ LINE" + }, + "API_CALLBACK": { + "TITLE": "כתובת אתר להתקשרות חוזרת", + "SUBTITLE": "עליך להגדיר את כתובת האתר של ה-webhook ביישום LINE עם כתובת האתר המוזכרת כאן." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "ערוץ טלגרם", + "DESC": "השתלב עם ערוץ טלגרם והתחיל לתמוך בלקוחות שלך.", + "BOT_TOKEN": { + "LABEL": "אסימון בוט", + "SUBTITLE": "הגדר את אסימון הבוט שקיבלת מ- Telegram BotFather.", + "PLACEHOLDER": "אסימון בוט" + }, + "SUBMIT_BUTTON": "צור ערוץ טלגרם", + "API": { + "ERROR_MESSAGE": "לא הצלחנו לשמור את ערוץ הטלגרם" + } + }, + "AUTH": { + "TITLE": "בחר ערוץ", + "DESC": "אנו תומכים בווידג'ט של צ'אט חי, עמוד פייסבוק, פרופיל טוויטר, WhatsApp, דוא\"ל וכו', כערוצי תקשורת. אם אתה רוצה לבנות ערוץ מותאם אישית, אתה יכול ליצור אותו באמצעות ערוץ ה-API. בחר ערוץ אחד מהאפשרויות מטה כדי להמשיך.", + "TITLE_NEXT": "השלם את ההגדרה", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "אתר אינטרנט", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "פייסבוק", + "DESCRIPTION": "חבר את דף הפייסבוק שלך" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "תמוך בלקוחות שלך ב-WhatsApp" + }, + "EMAIL": { + "TITLE": "אימייל", + "DESCRIPTION": "התחבר עם Gmail, Outlook או ספקים אחרים" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "שלב ערוץ SMS עם Twilio או bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "צור ערוץ מותאם אישית באמצעות ה-API שלנו" + }, + "TELEGRAM": { + "TITLE": "טלגרם", + "DESCRIPTION": "הגדר ערוץ טלגרם באמצעות אסימון בוט" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "שלב את ערוץ Line שלך" + }, + "INSTAGRAM": { + "TITLE": "אינסטגרם", + "DESCRIPTION": "חבר את חשבון האינסטגרם שלך" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "קול", + "DESCRIPTION": "שלב עם Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "סוכנים", + "DESC": "כאן תוכל להוסיף סוכנים לניהול תיבת הדואר הנכנס החדשה שלך. רק לסוכנים שנבחרו אלה תהיה גישה לתיבת הדואר הנכנס שלך. סוכנים שאינם חלק מתיבת הדואר הנכנס הזו לא יוכלו לראות או להגיב להודעות בתיבת הדואר הנכנס הזו כאשר הם נכנסים.Webhooks
Webhooks הם התקשרות חוזרת של HTTP שניתן להגדיר עבור כל חשבון. הם מופעלים על ידי אירועים כמו יצירת הודעות ב-Chatwoot. אתה יכול ליצור יותר מ-webhook אחד עבור חשבון זה.
ליצירת הוסף אינטרנט, לחץ על הלחצן הוסף אינטרנט חדש. אתה יכול גם להסיר כל webhook קיים על ידי לחיצה על הלחצן Delete.
אפליקציות לוח מחוונים
אפליקציות לוח מחוונים מאפשרות לארגונים להטמיע אפליקציה בתוך לוח המחוונים של Chatwoot כדי לספק את ההקשר לסוכני תמיכת לקוחות. תכונה זו מאפשרת לך ליצור אפליקציה באופן עצמאי ולהטמיע אותה בתוך לוח המחוונים כדי לספק מידע על המשתמש, ההזמנות שלו או היסטוריית התשלומים הקודמת שלו.
כאשר תטמיע את האפליקציה שלך באמצעות לוח המחוונים ב-Chatwoot, האפליקציה שלך תהיה קבל את ההקשר של השיחה והקשר כאירוע חלון. הטמיע מאזין לאירוע ההודעה בדף שלך כדי לקבל את ההקשר.
כדי להוסיף אפליקציית לוח מחוונים חדשה, לחץ על הלחצן 'הוסף אפליקציית לוח מחוונים חדשה'.
", + "DESCRIPTION": "אפליקציות לוח מחוונים מאפשרות לארגונים להטמיע אפליקציה בתוך לוח המחוונים כדי לספק את ההקשר לסוכני תמיכת לקוחות. תכונה זו מאפשרת לך ליצור אפליקציה באופן עצמאי ולהטמיע אותה כדי לספק מידע על המשתמש, ההזמנות שלהם או היסטוריית התשלומים הקודמת שלהם.", + "LEARN_MORE": "למד עוד על אפליקציות לוח מחוונים", + "LIST": { + "404": "אין עדיין אפליקציות לוח מחוונים מוגדרות בחשבון זה", + "LOADING": "מביא אפליקציות לוח מחוונים...", + "TABLE_HEADER": { + "NAME": "שם", + "ENDPOINT": "נקודת קצה" + }, + "EDIT_TOOLTIP": "ערוך אפליקציה", + "DELETE_TOOLTIP": "מחק אפליקציה" + }, + "FORM": { + "TITLE_LABEL": "שם", + "TITLE_PLACEHOLDER": "הזן שם לאפליקציית לוח המחוונים שלך", + "TITLE_ERROR": "נדרש שם לאפליקציית לוח המחוונים", + "URL_LABEL": "נקודת קצה", + "URL_PLACEHOLDER": "הזן את כתובת האתר של נקודת הקצה שבה האפליקציה שלך מתארחת", + "URL_ERROR": "נדרשת כתובת אתר חוקית" + }, + "CREATE": { + "HEADER": "הוסף אפליקציית לוח מחוונים חדשה", + "FORM_SUBMIT": "שלח", + "FORM_CANCEL": "ביטול", + "API_SUCCESS": "אפליקציית לוח המחוונים הוגדרה בהצלחה", + "API_ERROR": "לא הצלחנו ליצור אפליקציה. אנא נסה שוב מאוחר יותר" + }, + "UPDATE": { + "HEADER": "עריכת אפליקציית לוח המחוונים", + "FORM_SUBMIT": "עדכן", + "FORM_CANCEL": "ביטול", + "API_SUCCESS": "אפליקציית לוח המחוונים עודכנה בהצלחה", + "API_ERROR": "לא הצלחנו לעדכן את האפליקציה. אנא נסה שוב מאוחר יותר" + }, + "DELETE": { + "CONFIRM_YES": "כן, מחק את זה", + "CONFIRM_NO": "לא, שמור את זה", + "TITLE": "אשר מחיקה", + "MESSAGE": "האם אתה בטוח שתמחק את האפליקציה - {appName}?", + "API_SUCCESS": "אפליקציית לוח המחוונים נמחקה בהצלחה", + "API_ERROR": "לא הצלחנו למחוק את האפליקציה. אנא נסה שוב מאוחר יותר" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "מאחזר בעיות Linear...", + "LOADING_ERROR": "אירעה שגיאה באחזור בעיות Linear, אנא נסה שוב", + "CREATE": "צור", + "LINK": { + "SEARCH": "חפש בעיות", + "SELECT": "בחר בעיה", + "TITLE": "קישור", + "EMPTY_LIST": "לא נמצאו בעיות Linear", + "LOADING": "טוען", + "ERROR": "אירעה שגיאה באחזור בעיות Linear, אנא נסה שוב", + "LINK_SUCCESS": "הבעיה קושרה בהצלחה", + "LINK_ERROR": "אירעה שגיאה בקישור הבעיה, אנא נסה שוב", + "LINK_TITLE": "שיחה (#{conversationId}) עם {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "צור בעיות Linear משיחות, או קשר בעיות קיימות למעקב חלק.", + "FORM": { + "TITLE": { + "LABEL": "כותרת", + "PLACEHOLDER": "הזן כותרת", + "REQUIRED_ERROR": "כותרת שדה חובה" + }, + "DESCRIPTION": { + "LABEL": "תיאור", + "PLACEHOLDER": "הזן תיאור" + }, + "TEAM": { + "LABEL": "צוות", + "PLACEHOLDER": "בחר קבוצה", + "SEARCH": "חפש צוות", + "REQUIRED_ERROR": "צוות נדרש" + }, + "ASSIGNEE": { + "LABEL": "מוקצה", + "PLACEHOLDER": "בחר מוקצה", + "SEARCH": "חפש מוקצה" + }, + "PRIORITY": { + "LABEL": "עדיפות", + "PLACEHOLDER": "בחר עדיפות", + "SEARCH": "חפש עדיפות" + }, + "LABEL": { + "LABEL": "תווית", + "PLACEHOLDER": "בחר תווית", + "SEARCH": "חפש תווית" + }, + "STATUS": { + "LABEL": "מצב", + "PLACEHOLDER": "בחר סטטוס", + "SEARCH": "חפש סטטוס" + }, + "PROJECT": { + "LABEL": "פרויקט", + "PLACEHOLDER": "בחר פרויקט", + "SEARCH": "חפש פרויקט" + } + }, + "CREATE": "צור", + "CANCEL": "ביטול", + "CREATE_SUCCESS": "הבעיה נוצרה בהצלחה", + "CREATE_ERROR": "אירעה שגיאה ביצירת הבעיה, אנא נסה שוב", + "LOADING_TEAM_ERROR": "אירעה שגיאה באחזור הצוותים, אנא נסה שוב", + "LOADING_TEAM_ENTITIES_ERROR": "אירעה שגיאה באחזור ישויות הצוות, אנא נסה שוב" + }, + "ISSUE": { + "STATUS": "מצב", + "PRIORITY": "עדיפות", + "ASSIGNEE": "מוקצה", + "LABELS": "תוויות", + "CREATED_AT": "נוצר ב- {createdAt}" + }, + "UNLINK": { + "TITLE": "בטל קישור", + "SUCCESS": "הקישור לבעיה בוטל בהצלחה", + "ERROR": "אירעה שגיאה בביטול קישור הבעיה, אנא נסה שוב" + }, + "NO_LINKED_ISSUES": "לא נמצאו בעיות מקושרות", + "DELETE": { + "TITLE": "האם אתה בטוח שברצונך למחוק את האינטגרציה?", + "MESSAGE": "האם אתה בטוח שברצונך למחוק את האינטגרציה?", + "CONFIRM": "כן, מחק", + "CANCEL": "ביטול" + }, + "CTA": { + "TITLE": "התחבר ל-Linear", + "AGENT_DESCRIPTION": "מרחב העבודה Linear אינו מחובר. בקש ממנהל המערכת שלך לחבר מרחב עבודה כדי להשתמש באינטגרציה זו.", + "DESCRIPTION": "מרחב העבודה Linear אינו מחובר. לחץ על הכפתור למטה כדי לחבר את מרחב העבודה שלך כדי להשתמש באינטגרציה זו.", + "BUTTON_TEXT": "חבר מרחב עבודה Linear" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "האם אתה בטוח שברצונך למחוק את האינטגרציה של Notion?", + "MESSAGE": "מחיקת אינטגרציה זו תסיר את הגישה למרחב העבודה שלך ב-Notion ותפסיק את כל הפונקציונליות הקשורה.", + "CONFIRM": "כן, מחק", + "CANCEL": "ביטול" + } + } + }, + "CAPTAIN": { + "NAME": "קפטן", + "HEADER_KNOW_MORE": "דע יותר", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "עוזרים", + "SWITCH_ASSISTANT": "החלף בין עוזרים", + "NEW_ASSISTANT": "צור עוזר", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "טייס משנה", + "TRY_THESE_PROMPTS": "נסה הנחיות אלה", + "PANEL_TITLE": "התחל עם Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "שלח הודעה...", + "EMPTY_MESSAGE": "אירעה שגיאה ביצירת התגובה. אנא נסה שוב.", + "LOADER": "קפטן חושב", + "YOU": "אתה", + "USE": "השתמש בזה", + "RESET": "איפוס", + "SHOW_STEPS": "הצג שלבים", + "SELECT_ASSISTANT": "בחר עוזר", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "סכם שיחה זו", + "CONTENT": "סכם את הנקודות העיקריות שנדונו בין הלקוח לסוכן התמיכה, כולל חששות הלקוח, שאלותיו והפתרונות או התשובות שסופקו על ידי סוכן התמיכה" + }, + "SUGGEST": { + "LABEL": "הצע תשובה", + "CONTENT": "נתח את פניית הלקוח, ונסח תגובה המטפלת ביעילות בחששותיו או בשאלותיו. ודא שהתשובה ברורה, תמציתית ומספקת מידע מועיל." + }, + "RATE": { + "LABEL": "דרג שיחה זו", + "CONTENT": "סקור את השיחה כדי לראות עד כמה היא עונה על צרכי הלקוח. שתף דירוג מתוך 5 בהתבסס על טון, בהירות ויעילות." + }, + "HIGH_PRIORITY": { + "LABEL": "שיחות בעדיפות גבוהה", + "CONTENT": "תן לי סיכום של כל השיחות הפתוחות בעדיפות גבוהה. כלול את מזהה השיחה, שם הלקוח (אם זמין), תוכן ההודעה האחרונה והסוכן שהוקצה. קבץ לפי סטטוס אם רלוונטי." + }, + "LIST_CONTACTS": { + "LABEL": "רשום אנשי קשר", + "CONTENT": "הצג לי את רשימת 10 אנשי הקשר המובילים. כלול שם, דוא\"ל או מספר טלפון (אם זמין), זמן נראה אחרון, תגים (אם יש)." + } + } + }, + "PLAYGROUND": { + "USER": "אתה", + "ASSISTANT": "עוזר", + "MESSAGE_PLACEHOLDER": "הקלד הודעה...", + "HEADER": "מגרש משחקים", + "DESCRIPTION": "השתמש במגרש משחקים זה כדי לשלוח הודעות לעוזר שלך ולבדוק אם הוא מגיב בצורה מדויקת, מהירה ובטון שאתה מצפה לו.", + "CREDIT_NOTE": "הודעות שנשלחות כאן ייספרו למכסת הזיכויים של Captain שלך." + }, + "PAYWALL": { + "TITLE": "שדרג כדי להשתמש ב-Captain AI", + "AVAILABLE_ON": "Captain אינו זמין בתוכנית החינמית.", + "UPGRADE_PROMPT": "שדרג את התוכנית שלך כדי לקבל גישה לעוזרים שלנו, ל-Copilot ועוד.", + "UPGRADE_NOW": "שדרג עכשיו", + "CANCEL_ANYTIME": "תוכל לשנות או לבטל את התוכנית שלך בכל עת" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "שדרג את התוכנית שלך כדי לקבל גישה לעוזרים שלנו, ל-Copilot ועוד.", + "ASK_ADMIN": "אנא פנה למנהל המערכת שלך לצורך השדרוג." + }, + "BANNER": { + "RESPONSES": "ניצלת יותר מ-80% ממגבלת התגובות שלך. כדי להמשיך להשתמש ב-Captain AI, אנא שדרג.", + "DOCUMENTS": "מגבלת המסמכים הושגה. שדרג כדי להמשיך להשתמש ב-Captain AI." + }, + "FORM": { + "CANCEL": "ביטול", + "CREATE": "צור", + "EDIT": "עדכן" + }, + "ASSISTANTS": { + "HEADER": "עוזרים", + "NO_ASSISTANTS_AVAILABLE": "אין עוזרים זמינים בחשבונך.", + "ADD_NEW": "צור עוזר חדש", + "DELETE": { + "TITLE": "האם אתה בטוח שברצונך למחוק את העוזר?", + "DESCRIPTION": "פעולה זו היא קבועה. מחיקת עוזר זה תסיר אותו מכל תיבות הדואר הנכנס המחוברות ותמחק לצמיתות את כל הידע שנוצר.", + "CONFIRM": "כן, מחק", + "SUCCESS_MESSAGE": "העוזר נמחק בהצלחה", + "ERROR_MESSAGE": "אירעה שגיאה במחיקת העוזר, אנא נסה שוב." + }, + "FORM_DESCRIPTION": "מלא את הפרטים למטה כדי לתת שם לעוזר שלך, לתאר את מטרתו ולציין את המוצר שבו הוא יתמוך.", + "CREATE": { + "TITLE": "צור עוזר", + "SUCCESS_MESSAGE": "העוזר נוצר בהצלחה", + "ERROR_MESSAGE": "אירעה שגיאה ביצירת העוזר, אנא נסה שוב." + }, + "FORM": { + "UPDATE": "עדכן", + "SECTIONS": { + "BASIC_INFO": "מידע בסיסי", + "SYSTEM_MESSAGES": "הודעות מערכת", + "INSTRUCTIONS": "הוראות", + "FEATURES": "מאפיינים", + "TOOLS": "כלים " + }, + "NAME": { + "LABEL": "שם", + "PLACEHOLDER": "הזן שם עוזר", + "ERROR": "השם נדרש" + }, + "TEMPERATURE": { + "LABEL": "טמפרטורת תגובה", + "DESCRIPTION": "התאם עד כמה התגובות של העוזר צריכות להיות יצירתיות או מגבילות. ערכים נמוכים יותר מייצרים תגובות ממוקדות ודטרמיניסטיות יותר, בעוד שערכים גבוהים יותר מאפשרים תוצאות יצירתיות ומגוונות יותר." + }, + "DESCRIPTION": { + "LABEL": "תיאור", + "PLACEHOLDER": "הזן תיאור עוזר", + "ERROR": "התיאור נדרש" + }, + "PRODUCT_NAME": { + "LABEL": "שם מוצר", + "PLACEHOLDER": "הזן שם מוצר", + "ERROR": "שם המוצר נדרש" + }, + "WELCOME_MESSAGE": { + "LABEL": "הודעת ברוך הבא", + "PLACEHOLDER": "הזן הודעת ברוך הבא" + }, + "HANDOFF_MESSAGE": { + "LABEL": "הודעת העברה", + "PLACEHOLDER": "הזן הודעת העברה" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "הודעת סגירה", + "PLACEHOLDER": "הזן הודעת סגירה" + }, + "INSTRUCTIONS": { + "LABEL": "הוראות", + "PLACEHOLDER": "הזן הוראות לעוזר" + }, + "FEATURES": { + "TITLE": "מאפיינים", + "ALLOW_CONVERSATION_FAQS": "צור שאלות נפוצות משיחות שנסגרו", + "ALLOW_MEMORIES": "לכוד פרטים מרכזיים כזיכרונות מאינטראקציות עם לקוחות.", + "ALLOW_CITATIONS": "כלול ציטוטים של מקורות בתגובות" + } + }, + "EDIT": { + "TITLE": "עדכן את העוזר", + "SUCCESS_MESSAGE": "העוזר עודכן בהצלחה", + "ERROR_MESSAGE": "אירעה שגיאה בעדכון העוזר, אנא נסה שוב.", + "NOT_FOUND": "לא ניתן למצוא את העוזר. אנא נסה שוב." + }, + "SETTINGS": { + "HEADER": "הגדרות", + "BASIC_SETTINGS": { + "TITLE": "הגדרות בסיסיות", + "DESCRIPTION": "התאם אישית את מה שהעוזר אומר כאשר הוא מסיים שיחה או מעביר אותה לבן אנוש." + }, + "SYSTEM_SETTINGS": { + "TITLE": "הגדרות מערכת", + "DESCRIPTION": "התאם אישית את מה שהעוזר אומר כאשר הוא מסיים שיחה או מעביר אותה לבן אנוש." + }, + "CONTROL_ITEMS": { + "TITLE": "הדברים המהנים", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "מעקות בטיחות", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "הנחיות תגובה", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "מחק עוזר", + "DESCRIPTION": "פעולה זו היא קבועה. מחיקת עוזר זה תסיר אותו מכל תיבות הדואר הנכנס המחוברות ותמחק לצמיתות את כל הידע שנוצר.", + "BUTTON_TEXT": "מחק את {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "ערוך עוזר", + "DELETE_ASSISTANT": "מחק עוזר", + "VIEW_CONNECTED_INBOXES": "הצג תיבות דואר נכנס מחוברות" + }, + "EMPTY_STATE": { + "TITLE": "אין עוזרים זמינים", + "SUBTITLE": "צור עוזר כדי לספק תגובות מהירות ומדויקות למשתמשים שלך. הוא יכול ללמוד ממאמרי העזרה שלך ומשיחות קודמות.", + "FEATURE_SPOTLIGHT": { + "TITLE": "עוזר קפטן", + "NOTE": "עוזר קפטן יוצר קשר ישיר עם לקוחות, לומד ממסמכי העזרה והשיחות הקודמות שלך, ומספק תגובות מיידיות ומדויקות. הוא מטפל בשאילתות הראשוניות, מספק פתרונות מהירים לפני העברה לסוכן בעת הצורך." + } + }, + "GUARDRAILS": { + "TITLE": "מעקות בטיחות", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} פריט נבחר | {count} פריטים נבחרו", + "SELECT_ALL": "בחר הכל ({count})", + "UNSELECT_ALL": "בטל בחירת הכל ({count})", + "BULK_DELETE_BUTTON": "מחק" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "מעקות בטיחות לדוגמה", + "ADD": "הוסף הכל", + "ADD_SINGLE": "הוסף את זה", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "הקלד מעקה בטיחות אחר..." + }, + "NEW": { + "TITLE": "הוסף מעקה בטיחות", + "CREATE": "צור", + "CANCEL": "ביטול", + "PLACEHOLDER": "הקלד מעקה בטיחות אחר...", + "TEST_ALL": "בדוק הכל" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "חיפוש..." + }, + "EMPTY_MESSAGE": "לא נמצאו מעקות בטיחות. צור או הוסף דוגמאות כדי להתחיל.", + "SEARCH_EMPTY_MESSAGE": "לא נמצאו מעקות בטיחות לחיפוש זה.", + "API": { + "ADD": { + "SUCCESS": "מעקות בטיחות נוספו בהצלחה", + "ERROR": "אירעה שגיאה בהוספת מעקות בטיחות, אנא נסה שוב." + }, + "UPDATE": { + "SUCCESS": "מעקות בטיחות עודכנו בהצלחה", + "ERROR": "אירעה שגיאה בעדכון מעקות בטיחות, אנא נסה שוב." + }, + "DELETE": { + "SUCCESS": "מעקות בטיחות נמחקו בהצלחה", + "ERROR": "אירעה שגיאה במחיקת מעקות בטיחות, אנא נסה שוב." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "הנחיות תגובה", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} פריט נבחר | {count} פריטים נבחרו", + "SELECT_ALL": "בחר הכל ({count})", + "UNSELECT_ALL": "בטל בחירת הכל ({count})", + "BULK_DELETE_BUTTON": "מחק" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "הנחיות תגובה לדוגמה", + "ADD": "הוסף הכל", + "ADD_SINGLE": "הוסף את זה", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "הקלד הנחיית תגובה אחרת..." + }, + "NEW": { + "TITLE": "הוסף הנחיית תגובה", + "CREATE": "צור", + "CANCEL": "ביטול", + "PLACEHOLDER": "הקלד הנחיית תגובה אחרת...", + "TEST_ALL": "בדוק הכל" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "חיפוש..." + }, + "EMPTY_MESSAGE": "לא נמצאו הנחיות תגובה. צור או הוסף דוגמאות כדי להתחיל.", + "SEARCH_EMPTY_MESSAGE": "לא נמצאו הנחיות תגובה לחיפוש זה.", + "API": { + "ADD": { + "SUCCESS": "הנחיות תגובה נוספו בהצלחה", + "ERROR": "אירעה שגיאה בהוספת הנחיות תגובה, אנא נסה שוב." + }, + "UPDATE": { + "SUCCESS": "הנחיות תגובה עודכנו בהצלחה", + "ERROR": "אירעה שגיאה בעדכון הנחיות תגובה, אנא נסה שוב." + }, + "DELETE": { + "SUCCESS": "הנחיות תגובה נמחקו בהצלחה", + "ERROR": "אירעה שגיאה במחיקת הנחיות תגובה, אנא נסה שוב." + } + } + }, + "SCENARIOS": { + "TITLE": "תרחישים", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} פריט נבחר | {count} פריטים נבחרו", + "SELECT_ALL": "בחר הכל ({count})", + "UNSELECT_ALL": "בטל בחירת הכל ({count})", + "BULK_DELETE_BUTTON": "מחק" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "תרחישים לדוגמה", + "ADD": "הוסף הכל", + "ADD_SINGLE": "הוסף את זה", + "TOOLS_USED": "כלים בשימוש:" + }, + "NEW": { + "CREATE": "הוסף תרחיש", + "TITLE": "צור תרחיש", + "FORM": { + "TITLE": { + "LABEL": "כותרת", + "PLACEHOLDER": "הזן שם לתרחיש", + "ERROR": "שם התרחיש נדרש" + }, + "DESCRIPTION": { + "LABEL": "תיאור", + "PLACEHOLDER": "תאר כיצד והיכן תרחיש זה ישמש", + "ERROR": "תיאור התרחיש נדרש" + }, + "INSTRUCTION": { + "LABEL": "כיצד לטפל", + "PLACEHOLDER": "תאר כיצד והיכן תרחיש זה יטופל", + "ERROR": "תוכן התרחיש נדרש" + }, + "CREATE": "צור", + "CANCEL": "ביטול" + } + } + }, + "UPDATE": { + "CANCEL": "ביטול", + "UPDATE": "עדכן שינויים" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "חיפוש..." + }, + "EMPTY_MESSAGE": "לא נמצאו תרחישים. צור או הוסף דוגמאות כדי להתחיל.", + "SEARCH_EMPTY_MESSAGE": "לא נמצאו תרחישים לחיפוש זה.", + "API": { + "ADD": { + "SUCCESS": "תרחישים נוספו בהצלחה", + "ERROR": "אירעה שגיאה בהוספת תרחישים, אנא נסה שוב." + }, + "UPDATE": { + "SUCCESS": "תרחישים עודכנו בהצלחה", + "ERROR": "אירעה שגיאה בעדכון תרחישים, אנא נסה שוב." + }, + "DELETE": { + "SUCCESS": "תרחישים נמחקו בהצלחה", + "ERROR": "אירעה שגיאה במחיקת תרחישים, אנא נסה שוב." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "מסמכים", + "ADD_NEW": "צור מסמך חדש", + "RELATED_RESPONSES": { + "TITLE": "שאלות נפוצות קשורות", + "DESCRIPTION": "שאלות נפוצות אלה נוצרו ישירות מהמסמך." + }, + "FORM_DESCRIPTION": "הזן את כתובת ה-URL של המסמך כדי להוסיף אותו כמקור ידע ובחר את העוזר לשייך אליו.", + "CREATE": { + "TITLE": "הוסף מסמך", + "SUCCESS_MESSAGE": "המסמך נוצר בהצלחה", + "ERROR_MESSAGE": "אירעה שגיאה ביצירת המסמך, אנא נסה שוב." + }, + "FORM": { + "TYPE": { + "LABEL": "סוג מסמך", + "URL": "כתובת URL", + "PDF": "קובץ PDF" + }, + "URL": { + "LABEL": "כתובת URL", + "PLACEHOLDER": "הזן את כתובת ה-URL של המסמך", + "ERROR": "אנא ספק כתובת URL חוקית למסמך" + }, + "PDF_FILE": { + "LABEL": "קובץ PDF", + "CHOOSE_FILE": "בחר קובץ PDF", + "ERROR": "אנא בחר קובץ PDF", + "HELP_TEXT": "גודל קובץ מרבי: 10MB", + "INVALID_TYPE": "אנא בחר קובץ PDF חוקי", + "TOO_LARGE": "גודל הקובץ חורג מהמגבלה של 10MB" + }, + "NAME": { + "LABEL": "שם מסמך (אופציונלי)", + "PLACEHOLDER": "הזן שם למסמך" + } + }, + "DELETE": { + "TITLE": "האם אתה בטוח שברצונך למחוק את המסמך?", + "DESCRIPTION": "פעולה זו היא קבועה. מחיקת מסמך זה תמחק לצמיתות את כל הידע שנוצר.", + "CONFIRM": "כן, מחק", + "SUCCESS_MESSAGE": "המסמך נמחק בהצלחה", + "ERROR_MESSAGE": "אירעה שגיאה במחיקת המסמך, אנא נסה שוב." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "הצג תגובות קשורות", + "DELETE_DOCUMENT": "מחק מסמך" + }, + "EMPTY_STATE": { + "TITLE": "אין מסמכים זמינים", + "SUBTITLE": "מסמכים משמשים את העוזר שלך ליצירת שאלות נפוצות. תוכל לייבא מסמכים כדי לספק הקשר לעוזר שלך.", + "FEATURE_SPOTLIGHT": { + "TITLE": "מסמך קפטן", + "NOTE": "מסמך בקפטן משמש כמקור ידע עבור העוזר. על ידי חיבור מרכז העזרה או המדריכים שלך, קפטן יכול לנתח את התוכן ולספק תגובות מדויקות לשאילתות לקוחות." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "כלים", + "ADD_NEW": "צור כלי חדש", + "EMPTY_STATE": { + "TITLE": "אין כלים מותאמים אישית זמינים", + "SUBTITLE": "צור כלים מותאמים אישית כדי לחבר את העוזר שלך לממשקי API ושירותים חיצוניים, מה שמאפשר לו לאחזר נתונים ולבצע פעולות בשמך.", + "FEATURE_SPOTLIGHT": { + "TITLE": "כלים מותאמים אישית", + "NOTE": "כלים מותאמים אישית מאפשרים לעוזר שלך ליצור אינטראקציה עם ממשקי API ושירותים חיצוניים. צור כלים לאחזור נתונים, ביצוע פעולות או שילוב עם המערכות הקיימות שלך כדי לשפר את יכולות העוזר שלך." + } + }, + "FORM_DESCRIPTION": "הגדר את הכלי המותאם אישית שלך כדי להתחבר לממשקי API חיצוניים", + "OPTIONS": { + "EDIT_TOOL": "ערוך כלי", + "DELETE_TOOL": "מחק כלי" + }, + "CREATE": { + "TITLE": "צור כלי מותאם אישית", + "SUCCESS_MESSAGE": "הכלי המותאם אישית נוצר בהצלחה", + "ERROR_MESSAGE": "יצירת הכלי המותאם אישית נכשלה" + }, + "EDIT": { + "TITLE": "ערוך כלי מותאם אישית", + "SUCCESS_MESSAGE": "הכלי המותאם אישית עודכן בהצלחה", + "ERROR_MESSAGE": "עדכון הכלי המותאם אישית נכשל" + }, + "DELETE": { + "TITLE": "מחק כלי מותאם אישית", + "DESCRIPTION": "האם אתה בטוח שברצונך למחוק כלי מותאם אישית זה? לא ניתן לבטל פעולה זו.", + "CONFIRM": "כן, מחק", + "SUCCESS_MESSAGE": "הכלי המותאם אישית נמחק בהצלחה", + "ERROR_MESSAGE": "מחיקת הכלי המותאם אישית נכשלה" + }, + "FORM": { + "TITLE": { + "LABEL": "שם כלי", + "PLACEHOLDER": "בדיקת הזמנה", + "ERROR": "שם הכלי נדרש" + }, + "DESCRIPTION": { + "LABEL": "תיאור", + "PLACEHOLDER": "בודק פרטי הזמנה לפי מזהה הזמנה" + }, + "HTTP_METHOD": { + "LABEL": "שיטה" + }, + "ENDPOINT_URL": { + "LABEL": "כתובת URL של נקודת קצה", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "כתובת URL חוקית נדרשת" + }, + "AUTH_TYPE": { + "LABEL": "סוג אימות" + }, + "AUTH_TYPES": { + "NONE": "כלום", + "BEARER": "אסימון נושא (Bearer Token)", + "BASIC": "אימות בסיסי", + "API_KEY": "מפתח API" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "אסימון נושא (Bearer Token)", + "BEARER_TOKEN_PLACEHOLDER": "הזן את אסימון הנושא שלך", + "USERNAME": "שם משתמש", + "USERNAME_PLACEHOLDER": "הזן שם משתמש", + "PASSWORD": "סיסמה", + "PASSWORD_PLACEHOLDER": "הזן סיסמה", + "API_KEY": "שם כותרת (Header)", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "ערך כותרת (Header)", + "API_VALUE_PLACEHOLDER": "הזן ערך מפתח API" + }, + "PARAMETERS": { + "LABEL": "פרמטרים", + "HELP_TEXT": "הגדר את הפרמטרים שיחולצו משאילתות משתמשים" + }, + "ADD_PARAMETER": "הוסף פרמטר", + "PARAM_NAME": { + "PLACEHOLDER": "שם פרמטר (לדוגמה, order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "סוג" + }, + "PARAM_TYPES": { + "STRING": "מחרוזת", + "NUMBER": "מספר", + "BOOLEAN": "בוליאני", + "ARRAY": "מערך", + "OBJECT": "אובייקט" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "תיאור הפרמטר" + }, + "PARAM_REQUIRED": { + "LABEL": "נדרש" + }, + "REQUEST_TEMPLATE": { + "LABEL": "תבנית גוף בקשה (אופציונלי)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "תבנית תגובה (אופציונלי)", + "PLACEHOLDER": "סטטוס הזמנה {'{{'} order_id {'}}'}: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "שם הפרמטר נדרש" + } + } + }, + "RESPONSES": { + "HEADER": "שאלות נפוצות", + "PENDING_FAQS": "שאלות נפוצות ממתינות", + "ADD_NEW": "צור שאלות נפוצות חדשות", + "DOCUMENTABLE": { + "CONVERSATION": "שיחה #{id}" + }, + "SELECTED": "{count} נבחרו", + "SELECT_ALL": "בחר הכל ({count})", + "UNSELECT_ALL": "בטל בחירת הכל ({count})", + "SEARCH_PLACEHOLDER": "חפש שאלות נפוצות...", + "BULK_APPROVE_BUTTON": "אשר", + "BULK_DELETE_BUTTON": "מחק", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "שאלות נפוצות אושרו בהצלחה", + "ERROR_MESSAGE": "אירעה שגיאה באישור השאלות הנפוצות, אנא נסה שוב." + }, + "BULK_DELETE": { + "TITLE": "מחק שאלות נפוצות?", + "DESCRIPTION": "האם אתה בטוח שברצונך למחוק את השאלות הנפוצות שנבחרו? לא ניתן לבטל פעולה זו.", + "CONFIRM": "כן, מחק הכל", + "SUCCESS_MESSAGE": "שאלות נפוצות נמחקו בהצלחה", + "ERROR_MESSAGE": "אירעה שגיאה במחיקת השאלות הנפוצות, אנא נסה שוב." + }, + "DELETE": { + "TITLE": "האם אתה בטוח שברצונך למחוק את השאלות הנפוצות?", + "DESCRIPTION": "", + "CONFIRM": "כן, מחק", + "SUCCESS_MESSAGE": "השאלות הנפוצות נמחקו בהצלחה", + "ERROR_MESSAGE": "אירעה שגיאה במחיקת השאלות הנפוצות, אנא נסה שוב." + }, + "FILTER": { + "ASSISTANT": "עוזר: {selected}", + "STATUS": "סטטוס: {selected}", + "ALL_ASSISTANTS": "הכל" + }, + "STATUS": { + "TITLE": "מצב", + "PENDING": "ממתין ל", + "APPROVED": "אושר", + "ALL": "הכל" + }, + "PENDING_BANNER": { + "TITLE": "קפטן מצא כמה שאלות נפוצות שהלקוחות שלך חיפשו.", + "ACTION": "לחץ כאן כדי לסקור" + }, + "FORM_DESCRIPTION": "הוסף שאלה ותשובה מתאימה לבסיס הידע ובחר את העוזר שאליו יש לשייך אותה.", + "CREATE": { + "TITLE": "הוסף שאלות נפוצות", + "SUCCESS_MESSAGE": "התגובה נוספה בהצלחה.", + "ERROR_MESSAGE": "אירעה שגיאה בהוספת התגובה. אנא נסה שוב." + }, + "FORM": { + "QUESTION": { + "LABEL": "שאלה", + "PLACEHOLDER": "הזן את השאלה כאן", + "ERROR": "אנא ספק שאלה חוקית." + }, + "ANSWER": { + "LABEL": "תשובה", + "PLACEHOLDER": "הזן את התשובה כאן", + "ERROR": "אנא ספק תשובה חוקית." + } + }, + "EDIT": { + "TITLE": "עדכן את השאלות הנפוצות", + "SUCCESS_MESSAGE": "השאלות הנפוצות עודכנו בהצלחה", + "ERROR_MESSAGE": "אירעה שגיאה בעדכון השאלות הנפוצות, אנא נסה שוב", + "APPROVE_SUCCESS_MESSAGE": "השאלות הנפוצות סומנו כמאושרות" + }, + "OPTIONS": { + "APPROVE": "אשר", + "EDIT_RESPONSE": "ערוך", + "DELETE_RESPONSE": "מחק" + }, + "EMPTY_STATE": { + "TITLE": "לא נמצאו שאלות נפוצות", + "NO_PENDING_TITLE": "אין עוד שאלות נפוצות ממתינות לסקור", + "SUBTITLE": "שאלות נפוצות עוזרות לעוזר שלך לספק תשובות מהירות ומדויקות לשאלות של הלקוחות שלך. הן יכולות להיווצר אוטומטית מהתוכן שלך או שניתן להוסיף אותן באופן ידני.", + "CLEAR_SEARCH": "נקה מסננים פעילים", + "FEATURE_SPOTLIGHT": { + "TITLE": "שאלות נפוצות של קפטן", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "תיבות דואר נכנס מחוברות", + "ADD_NEW": "חבר תיבת דואר נכנס חדשה", + "OPTIONS": { + "DISCONNECT": "התנתק" + }, + "DELETE": { + "TITLE": "האם אתה בטוח שברצונך לנתק את תיבת הדואר הנכנס?", + "DESCRIPTION": "", + "CONFIRM": "כן, מחק", + "SUCCESS_MESSAGE": "תיבת הדואר הנכנס נותקה בהצלחה.", + "ERROR_MESSAGE": "אירעה שגיאה בניצוק תיבת הדואר הנכנס, אנא נסה שוב." + }, + "FORM_DESCRIPTION": "בחר תיבת דואר נכנס להתחברות עם העוזר.", + "CREATE": { + "TITLE": "חבר תיבת דואר נכנס", + "SUCCESS_MESSAGE": "תיבת הדואר הנכנס חוברו בהצלחה.", + "ERROR_MESSAGE": "אירעה שגיאה בחיבור תיבת הדואר הנכנס. אנא נסה שוב." + }, + "FORM": { + "INBOX": { + "LABEL": "תיבת הדואר הנכנס", + "PLACEHOLDER": "בחר את תיבת הדואר הנכנס לפריסת העוזר.", + "ERROR": "בחירת תיבת דואר נכנס נדרשת." + } + }, + "EMPTY_STATE": { + "TITLE": "אין תיבות דואר נכנס מחוברות", + "SUBTITLE": "חיבור תיבת דואר נכנס מאפשר לעוזר לטפל בשאלות ראשוניות של הלקוחות שלך לפני העברתן אליך." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/he/labelsMgmt.json new file mode 100644 index 0000000..493613e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "תוויות", + "HEADER_BTN_TXT": "הוסף תווית", + "LOADING": "מביא תוויות", + "DESCRIPTION": "תוויות עוזרות לך לסווג ולתעדף שיחות ולידים. תוכל להקצות תווית לשיחה או לאיש קשר באמצעות החלונית הצדדית.", + "LEARN_MORE": "למד עוד על תוויות", + "SEARCH_404": "אין פריטים התואמים לשאילתה זו", + "LIST": { + "404": "אין תוויות זמינות בחשבון זה.", + "TITLE": "נהל תוויות", + "DESC": "תוויות מאפשרות לך לקבץ את השיחות יחד.", + "TABLE_HEADER": { + "NAME": "שם", + "DESCRIPTION": "תיאור", + "COLOR": "צֶבַע" + } + }, + "FORM": { + "NAME": { + "LABEL": "שם התווית", + "PLACEHOLDER": "שם התווית", + "REQUIRED_ERROR": "נדרש שם תווית", + "MINIMUM_LENGTH_ERROR": "נדרש אורך מינימלי 2", + "VALID_ERROR": "רק אלפבית, מספרים, מקף וקו תחתון מותרים" + }, + "DESCRIPTION": { + "LABEL": "תיאור", + "PLACEHOLDER": "תיאור תווית" + }, + "COLOR": { + "LABEL": "צבע" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "הצג תווית בסרגל הצד" + }, + "EDIT": "ערוך", + "CREATE": "צור", + "DELETE": "מחק", + "CANCEL": "ביטול" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "הוסף תווית לשיחה", + "MULTIPLE_SUGGESTION": "בחר תווית זו", + "DESELECT": "בטל בחירת תווית", + "DISMISS": "בטל הצעה" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "סגור", + "ADD_SELECTED_LABELS": "הוסף תוויות שנבחרו", + "ADD_SELECTED_LABEL": "הוסף תווית שנבחרה", + "ADD_ALL_LABELS": "הוסף את כל התוויות", + "SUGGESTED_LABELS": "תוויות מוצעות" + }, + "ADD": { + "TITLE": "הוסף תווית", + "DESC": "תוויות מאפשרות לך לקבץ את השיחות יחד.", + "API": { + "SUCCESS_MESSAGE": "תווית נוספה בהצלחה", + "ERROR_MESSAGE": "היתה שגיאה, בקשה נסה שוב" + } + }, + "EDIT": { + "TITLE": "ערוך תווית", + "API": { + "SUCCESS_MESSAGE": "התווית עודכנה בהצלחה", + "ERROR_MESSAGE": "היתה שגיאה, בקשה נסה שוב" + } + }, + "DELETE": { + "BUTTON_TEXT": "מחק", + "API": { + "SUCCESS_MESSAGE": "התווית נמחקה בהצלחה", + "ERROR_MESSAGE": "היתה שגיאה, בקשה נסה שוב" + }, + "CONFIRM": { + "TITLE": "אשר מחיקה", + "MESSAGE": "האם אתה בטוח שברצונך למחוק ", + "YES": "כן, מחק ", + "NO": "לא, השאר " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/login.json b/app/javascript/dashboard/i18n/locale/he/login.json new file mode 100644 index 0000000..b919511 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "התחבר ל Woot", + "EMAIL": { + "LABEL": "אימייל", + "PLACEHOLDER": "example@companyname.com", + "ERROR": "נא הכנס כתובת דוא\"ל תקינה" + }, + "PASSWORD": { + "LABEL": "סיסמה", + "PLACEHOLDER": "סיסמה" + }, + "API": { + "SUCCESS_MESSAGE": "נכנסת בהצלחה", + "ERROR_MESSAGE": "לא ניתן להתחבר לשרת Woot, נסה שוב מאוחר יותר", + "UNAUTH": "שם משתמש / סיסמה שגויים. נסה שוב" + }, + "OAUTH": { + "GOOGLE_LOGIN": "התחבר עם גוגל", + "BUSINESS_ACCOUNTS_ONLY": "אנא השתמש בכתובת הדוא\"ל של החברה שלך כדי להתחבר", + "NO_ACCOUNT_FOUND": "לא מצאנו חשבון עבור כתובת הדוא\"ל שלך." + }, + "FORGOT_PASSWORD": "שכחת את הסיסמה?", + "CREATE_NEW_ACCOUNT": "צור חשבון", + "SUBMIT": "התחבר", + "SAML": { + "LABEL": "התחבר באמצעות SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "הזן את הדוא\"ל הארגוני שלך כדי לגשת לארגון שלך", + "BACK_TO_LOGIN": "התחבר באמצעות סיסמה", + "WORK_EMAIL": { + "LABEL": "דוא\"ל ארגוני", + "PLACEHOLDER": "הזן את הדוא\"ל הארגוני שלך" + }, + "SUBMIT": "המשך עם SSO", + "API": { + "ERROR_MESSAGE": "אימות SSO נכשל. אנא בדוק את פרטי הכניסה שלך ונסה שוב." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/macros.json b/app/javascript/dashboard/i18n/locale/he/macros.json new file mode 100644 index 0000000..30f3361 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "מאקרו", + "DESCRIPTION": "מאקרו הוא קבוצה של פעולות שמורות המסייעות לסוכני שירות לקוחות להשלים משימות בקלות. הסוכנים יכולים להגדיר קבוצה של פעולות כמו תיוג שיחה בתווית, שליחת תמלול דוא\"ל, עדכון תכונה מותאמת אישית וכו', והם יכולים להפעיל פעולות אלה בלחיצה אחת.", + "LEARN_MORE": "למד עוד על מאקרואים", + "HEADER_BTN_TXT": "הוסף מאקרו חדש", + "HEADER_BTN_TXT_SAVE": "שמור מאקרו", + "LOADING": "מביא פקודות מאקרו", + "ERROR": "משהו השתבש. אנא נסה שוב", + "ORDER_INFO": "פקודות מאקרו יפעלו לפי הסדר שתוסיף את הפעולות שלך. תוכל לסדר אותם מחדש על ידי גרירתם על ידי הידית לצד כל צומת.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "שם מאקרו", + "PLACEHOLDER": "הזן שם עבור המאקרו שלך", + "ERROR": "נדרש שם ליצירת מאקרו" + }, + "ACTIONS": { + "LABEL": "פעולות" + } + }, + "API": { + "SUCCESS_MESSAGE": "המאקרו נוסף בהצלחה", + "ERROR_MESSAGE": "לא ניתן ליצור מאקרו, אנא נסה שוב מאוחר יותר" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "שם", + "CREATED BY": "נוצר על ידי", + "LAST_UPDATED_BY": "עודכן לאחרונה על ידי", + "VISIBILITY": "רְאוּת" + }, + "404": "לא נמצאו פקודות מאקרו" + }, + "DELETE": { + "TOOLTIP": "מחק מאקרו", + "CONFIRM": { + "MESSAGE": "האם אתה בטוח שברצונך למחוק ", + "YES": "כן, מחק", + "NO": "לא" + }, + "API": { + "SUCCESS_MESSAGE": "המאקרו נמחק בהצלחה", + "ERROR_MESSAGE": "אירעה שגיאה במחיקת המאקרו. אנא נסה שוב מאוחר יותר" + } + }, + "EDIT": { + "TOOLTIP": "ערוך מאקרו", + "API": { + "SUCCESS_MESSAGE": "המאקרו עודכן בהצלחה", + "ERROR_MESSAGE": "לא ניתן היה לעדכן מאקרו, אנא נסה שוב מאוחר יותר" + } + }, + "EDITOR": { + "START_FLOW": "התחל זרימה", + "END_FLOW": "סיום זרימה", + "LOADING": "מביא מאקרו", + "ADD_BTN_TOOLTIP": "הוסף פעולה חדשה", + "DELETE_BTN_TOOLTIP": "מחיקת פעולה", + "VISIBILITY": { + "LABEL": "נראות מאקרו", + "GLOBAL": { + "LABEL": "ציבורי", + "DESCRIPTION": "מאקרו זה זמין באופן ציבורי עבור כל הסוכנים בחשבון זה." + }, + "PERSONAL": { + "LABEL": "פרטי", + "DESCRIPTION": "מאקרו זה יהיה פרטי עבורך ולא יהיה זמין לאחרים." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "לבצע", + "PREVIEW": "תצוגה מקדימה מאקרו", + "EXECUTED_SUCCESSFULLY": "המאקרו הופעל בהצלחה" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "מפתח תכונה נדרש", + "FILTER_OPERATOR_REQUIRED": "אופרטור מסנן נדרש", + "VALUE_REQUIRED": "חובה ערך", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "הערך חייב להיות בין 1 ל-998", + "ACTION_PARAMETERS_REQUIRED": "פרמטרי פעולה נדרשים", + "ATLEAST_ONE_CONDITION_REQUIRED": "נדרש לפחות תנאי אחד", + "ATLEAST_ONE_ACTION_REQUIRED": "נדרשת לפחות פעולה אחת" + }, + "ACTIONS": { + "ASSIGN_TEAM": "הקצה צוות", + "ASSIGN_AGENT": "הקצה סוכן", + "ADD_LABEL": "הוסף תווית", + "REMOVE_LABEL": "הסר תווית", + "REMOVE_ASSIGNED_TEAM": "הסר צוות שהוקצה", + "SEND_EMAIL_TRANSCRIPT": "שלח תמלול דוא\"ל", + "MUTE_CONVERSATION": "השתק שיחה", + "SNOOZE_CONVERSATION": "נודניק שיחה", + "RESOLVE_CONVERSATION": "פתור שיחה", + "SEND_ATTACHMENT": "שלח קובץ מצורף", + "SEND_MESSAGE": "שלח הודעה", + "CHANGE_PRIORITY": "שנה עדיפות", + "ADD_PRIVATE_NOTE": "הוסף הערה פרטית", + "SEND_WEBHOOK_EVENT": "שלח אירוע Webhook" + }, + "PRIORITY_TYPES": { + "NONE": "כלום", + "LOW": "נמוכה", + "MEDIUM": "בינונית", + "HIGH": "גבוהה", + "URGENT": "דחופה" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/mfa.json b/app/javascript/dashboard/i18n/locale/he/mfa.json new file mode 100644 index 0000000..90cb314 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "סטטוס אימות", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "מופעל", + "DISABLED": "כבוי", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "חשבונך מוגן באמצעות שכבת אבטחה נוספת", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "שפר את אבטחת חשבונך", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "סרוק קוד QR באמצעות אפליקציית האימות שלך", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "טוען...", + "MANUAL_ENTRY": "לא מצליח לסרוק? הזן קוד ידנית", + "SECRET_KEY": "מפתח סודי", + "COPY": "עותק", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "אמת והמשך", + "CANCEL": "ביטול", + "ERROR_STARTING": "אימות רב-שלבי (MFA) אינו מופעל. אנא פנה למנהל המערכת.", + "INVALID_CODE": "קוד אימות לא חוקי", + "SECRET_COPIED": "המפתח הסודי הועתק ללוח", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "שמור את קודי הגיבוי שלך", + "DESCRIPTION": "שמור קודים אלה בבטחה. ניתן להשתמש בכל אחד מהם פעם אחת אם תאבד גישה למאמת שלך", + "IMPORTANT": "חשוב:", + "IMPORTANT_NOTE": " שמור קודים אלה במיקום מאובטח. לא תוכל לראות אותם שוב.", + "DOWNLOAD": "הורד", + "COPY_ALL": "העתק הכל", + "CONFIRM": "שמרתי את קודי הגיבוי שלי במיקום מאובטח ואני מבין/ה שלא אוכל לראות אותם שוב", + "COMPLETE_SETUP": "השלם הגדרה", + "CODES_COPIED": "קודי הגיבוי הועתקו ללוח" + }, + "MANAGEMENT": { + "BACKUP_CODES": "קודי גיבוי", + "BACKUP_CODES_DESC": "צור קודים חדשים אם איבדת או השתמשת בקודים הקיימים שלך", + "REGENERATE": "צור מחדש קודי גיבוי", + "DISABLE_MFA": "השבת אימות דו-שלבי (2FA)", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "סיסמה", + "OTP_CODE": "קוד אימות", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "השבת 2FA", + "CANCEL": "ביטול", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "השבתת MFA נכשלה. אנא בדוק את פרטי הכניסה שלך." + }, + "REGENERATE": { + "TITLE": "צור מחדש קודי גיבוי", + "DESCRIPTION": "פעולה זו תבטל את קודי הגיבוי הקיימים שלך ותיצור חדשים. הזן את קוד האימות שלך כדי להמשיך.", + "OTP_CODE": "קוד אימות", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "צור קודים חדשים", + "CANCEL": "ביטול", + "NEW_CODES_TITLE": "קודי גיבוי חדשים נוצרו", + "NEW_CODES_DESC": "קודי הגיבוי הישנים שלך בוטלו. שמור קודים חדשים אלה במיקום מאובטח.", + "CODES_IMPORTANT": "חשוב:", + "CODES_IMPORTANT_NOTE": " ניתן להשתמש בכל קוד פעם אחת בלבד. שמור אותם לפני סגירת חלון זה.", + "DOWNLOAD_CODES": "הורד קודים", + "COPY_ALL_CODES": "העתק את כל הקודים", + "CODES_SAVED": "שמרתי את הקודים שלי", + "SUCCESS": "קודי גיבוי חדשים נוצרו", + "ERROR": "יצירת קודי גיבוי מחדש נכשלה" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "הזן את קוד האימות שלך כדי להמשיך", + "AUTHENTICATOR_APP": "אפליקציית אימות", + "BACKUP_CODE": "קוד גיבוי", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "הזן אחד מקודי הגיבוי שלך", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "אמת", + "TRY_ANOTHER_METHOD": "נסה שיטת אימות אחרת", + "CANCEL_LOGIN": "בטל וחזור לכניסה", + "HELP_TEXT": "נתקלת בבעיות בכניסה?", + "LEARN_MORE": "למד עוד על 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "שימוש באפליקציית אימות", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "שימוש בקוד גיבוי", + "BACKUP_DESC": "אם אין לך גישה לאפליקציית האימות שלך, תוכל להשתמש באחד מקודי הגיבוי ששמרת בעת הגדרת 2FA. ניתן להשתמש בכל קוד פעם אחת בלבד.", + "CONTACT_TITLE": "זקוק לעזרה נוספת?", + "CONTACT_DESC_CLOUD": "אם איבדת גישה גם לאפליקציית האימות וגם לקודי הגיבוי שלך, אנא פנה לתמיכה של Chatwoot לקבלת סיוע.", + "CONTACT_DESC_SELF_HOSTED": "אם איבדת גישה גם לאפליקציית האימות וגם לקודי הגיבוי שלך, אנא פנה למנהל המערכת שלך לקבלת סיוע." + }, + "VERIFICATION_FAILED": "האימות נכשל. אנא נסה שוב." + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/report.json b/app/javascript/dashboard/i18n/locale/he/report.json new file mode 100644 index 0000000..57b4311 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "שיחות", + "LOADING_CHART": "טוען נתוני תרשים...", + "NO_ENOUGH_DATA": "לא קיבלנו מספיק נקודות נתונים כדי להפיק דוח, אנא נסה שוב מאוחר יותר.", + "DOWNLOAD_AGENT_REPORTS": "הורד דוחות סוכן", + "DATA_FETCHING_FAILED": "אחזור הנתונים נכשל, אנא נסה שוב מאוחר יותר.", + "SUMMARY_FETCHING_FAILED": "אחזור הסיכום נכשל, אנא נסה שוב מאוחר יותר.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "שיחות", + "DESC": "( סך הכל )" + }, + "INCOMING_MESSAGES": { + "NAME": "הודעות נכנסות", + "DESC": "( סך הכל )" + }, + "OUTGOING_MESSAGES": { + "NAME": "הודעות יוצאות", + "DESC": "( סך הכל )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "זמן תגובה ראשון", + "DESC": "( ממוצע )", + "INFO_TEXT": "מספר כולל של שיחות המשמשות לחישוב:", + "TOOLTIP_TEXT": "זמן התגובה הראשון הוא {metricValue} (מבוסס על {conversationCount} שיחות)" + }, + "RESOLUTION_TIME": { + "NAME": "זמן רזולוציה", + "DESC": "( ממוצע )", + "INFO_TEXT": "מספר כולל של שיחות המשמשות לחישוב:", + "TOOLTIP_TEXT": "זמן הרזולוציה הוא {metricValue} (מבוסס על {conversationCount} שיחות)" + }, + "RESOLUTION_COUNT": { + "NAME": "ספירת רזולוציות", + "DESC": "( סך הכל )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "ספירת רזולוציות", + "DESC": "( סך הכל )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "ספירת העברות", + "DESC": "( סך הכל )" + }, + "REPLY_TIME": { + "NAME": "זמן המתנת לקוח", + "TOOLTIP_TEXT": "זמן ההמתנה הוא {metricValue} (מבוסס על {conversationCount} תגובות)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "7 הימים האחרונים", + "LAST_14_DAYS": "14 הימים האחרונים", + "LAST_30_DAYS": "30 הימים האחרונים", + "THIS_MONTH": "החודש", + "LAST_MONTH": "חודש שעבר", + "LAST_3_MONTHS": "3 החודשים האחרונים", + "LAST_6_MONTHS": "6 החודשים האחרונים", + "LAST_YEAR": "שנה שעברה", + "CUSTOM_DATE_RANGE": "טווח תאריכים מותאם אישית" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "להגיש מועמדות", + "PLACEHOLDER": "בחר טווח תאריכים" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "קבוצה לפי", + "DURATION_FILTER_LABEL": "משך", + "GROUPING_OPTIONS": { + "DAY": "יום", + "WEEK": "שבוע", + "MONTH": "חודש", + "YEAR": "שנה" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "יום" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "יום" + }, + { + "id": 2, + "groupBy": "שבוע" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "יום" + }, + { + "id": 2, + "groupBy": "שבוע" + }, + { + "id": 3, + "groupBy": "חודש" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "יום" + }, + { + "id": 2, + "groupBy": "שבוע" + }, + { + "id": 3, + "groupBy": "חודש" + } + ], + "BUSINESS_HOURS": "שעות פעילות", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "נקה מסנן", + "EMPTY_LIST": "לא נמצאו תוצאות" + }, + "PAGINATION": { + "RESULTS": "מציג {start} עד {end} מתוך {total} תוצאות", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "סקירה כללית של סוכנים", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "טוען נתוני תרשים...", + "NO_ENOUGH_DATA": "לא קיבלנו מספיק נקודות נתונים כדי להפיק דוח, אנא נסה שוב מאוחר יותר.", + "DOWNLOAD_AGENT_REPORTS": "הורד דוחות סוכן", + "FILTER_DROPDOWN_LABEL": "בחר סוכן", + "METRICS": { + "CONVERSATIONS": { + "NAME": "שיחות", + "DESC": "( סך הכל )" + }, + "INCOMING_MESSAGES": { + "NAME": "הודעות נכנסות", + "DESC": "( סך הכל )" + }, + "OUTGOING_MESSAGES": { + "NAME": "הודעות יוצאות", + "DESC": "( סך הכל )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "זמן תגובה ראשון", + "DESC": "( ממוצע )", + "INFO_TEXT": "מספר כולל של שיחות המשמשות לחישוב:", + "TOOLTIP_TEXT": "זמן התגובה הראשון הוא {metricValue} (מבוסס על {conversationCount} שיחות)" + }, + "RESOLUTION_TIME": { + "NAME": "זמן רזולוציה", + "DESC": "( ממוצע )", + "INFO_TEXT": "מספר כולל של שיחות המשמשות לחישוב:", + "TOOLTIP_TEXT": "זמן הרזולוציה הוא {metricValue} (מבוסס על {conversationCount} שיחות)" + }, + "RESOLUTION_COUNT": { + "NAME": "ספירת רזולוציות", + "DESC": "( סך הכל )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "7 הימים האחרונים" + }, + { + "id": 1, + "name": "30 הימים האחרונים" + }, + { + "id": 2, + "name": "3 החודשים האחרונים" + }, + { + "id": 3, + "name": "6 החודשים האחרונים" + }, + { + "id": 4, + "name": "שנה שעברה" + }, + { + "id": 5, + "name": "טווח תאריכים מותאם אישית" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "להגיש מועמדות", + "PLACEHOLDER": "בחר טווח תאריכים" + } + }, + "LABEL_REPORTS": { + "HEADER": "סקירת תוויות", + "DESCRIPTION": "עקוב אחר ביצועי התוויות עם מדדי מפתח כולל שיחות, זמני תגובה, זמני סגירה ומקרים שנסגרו. לחץ על שם תווית לקבלת תובנות מפורטות.", + "LOADING_CHART": "טוען נתוני תרשים...", + "NO_ENOUGH_DATA": "לא קיבלנו מספיק נקודות נתונים כדי להפיק דוח, אנא נסה שוב מאוחר יותר.", + "DOWNLOAD_LABEL_REPORTS": "הורד דוחות תווית", + "FILTER_DROPDOWN_LABEL": "בחר תווית", + "METRICS": { + "CONVERSATIONS": { + "NAME": "שיחות", + "DESC": "( סך הכל )" + }, + "INCOMING_MESSAGES": { + "NAME": "הודעות נכנסות", + "DESC": "( סך הכל )" + }, + "OUTGOING_MESSAGES": { + "NAME": "הודעות יוצאות", + "DESC": "( סך הכל )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "זמן תגובה ראשון", + "DESC": "( ממוצע )", + "INFO_TEXT": "מספר כולל של שיחות המשמשות לחישוב:", + "TOOLTIP_TEXT": "זמן התגובה הראשון הוא {metricValue} (מבוסס על {conversationCount} שיחות)" + }, + "RESOLUTION_TIME": { + "NAME": "זמן רזולוציה", + "DESC": "( ממוצע )", + "INFO_TEXT": "מספר כולל של שיחות המשמשות לחישוב:", + "TOOLTIP_TEXT": "זמן הרזולוציה הוא {metricValue} (מבוסס על {conversationCount} שיחות)" + }, + "RESOLUTION_COUNT": { + "NAME": "ספירת רזולוציות", + "DESC": "( סך הכל )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "7 הימים האחרונים" + }, + { + "id": 1, + "name": "30 הימים האחרונים" + }, + { + "id": 2, + "name": "3 החודשים האחרונים" + }, + { + "id": 3, + "name": "6 החודשים האחרונים" + }, + { + "id": 4, + "name": "שנה שעברה" + }, + { + "id": 5, + "name": "טווח תאריכים מותאם אישית" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "להגיש מועמדות", + "PLACEHOLDER": "בחר טווח תאריכים" + } + }, + "INBOX_REPORTS": { + "HEADER": "סקירה כללית של תיבת הדואר הנכנס", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "טוען נתוני תרשים...", + "NO_ENOUGH_DATA": "לא קיבלנו מספיק נקודות נתונים כדי להפיק דוח, אנא נסה שוב מאוחר יותר.", + "DOWNLOAD_INBOX_REPORTS": "הורד דוחות תיבת דואר נכנס", + "FILTER_DROPDOWN_LABEL": "בחר תיבת דואר", + "ALL_INBOXES": "כל תיבות הדואר הנכנס", + "SEARCH_INBOX": "חפש תיבת דואר נכנס", + "METRICS": { + "CONVERSATIONS": { + "NAME": "שיחות", + "DESC": "( סך הכל )" + }, + "INCOMING_MESSAGES": { + "NAME": "הודעות נכנסות", + "DESC": "( סך הכל )" + }, + "OUTGOING_MESSAGES": { + "NAME": "הודעות יוצאות", + "DESC": "( סך הכל )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "זמן תגובה ראשון", + "DESC": "( ממוצע )", + "INFO_TEXT": "מספר כולל של שיחות המשמשות לחישוב:", + "TOOLTIP_TEXT": "זמן התגובה הראשון הוא {metricValue} (מבוסס על {conversationCount} שיחות)" + }, + "RESOLUTION_TIME": { + "NAME": "זמן רזולוציה", + "DESC": "( ממוצע )", + "INFO_TEXT": "מספר כולל של שיחות המשמשות לחישוב:", + "TOOLTIP_TEXT": "זמן הרזולוציה הוא {metricValue} (מבוסס על {conversationCount} שיחות)" + }, + "RESOLUTION_COUNT": { + "NAME": "ספירת רזולוציות", + "DESC": "( סך הכל )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "7 הימים האחרונים" + }, + { + "id": 1, + "name": "30 הימים האחרונים" + }, + { + "id": 2, + "name": "3 החודשים האחרונים" + }, + { + "id": 3, + "name": "6 החודשים האחרונים" + }, + { + "id": 4, + "name": "שנה שעברה" + }, + { + "id": 5, + "name": "טווח תאריכים מותאם אישית" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "להגיש מועמדות", + "PLACEHOLDER": "בחר טווח תאריכים" + } + }, + "TEAM_REPORTS": { + "HEADER": "סקירת צוות", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "טוען נתוני תרשים...", + "NO_ENOUGH_DATA": "לא קיבלנו מספיק נקודות נתונים כדי להפיק דוח, אנא נסה שוב מאוחר יותר.", + "DOWNLOAD_TEAM_REPORTS": "הורד דוחות צוות", + "FILTER_DROPDOWN_LABEL": "תבחר קבוצה", + "METRICS": { + "CONVERSATIONS": { + "NAME": "שיחות", + "DESC": "( סך הכל )" + }, + "INCOMING_MESSAGES": { + "NAME": "הודעות נכנסות", + "DESC": "( סך הכל )" + }, + "OUTGOING_MESSAGES": { + "NAME": "הודעות יוצאות", + "DESC": "( סך הכל )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "זמן תגובה ראשון", + "DESC": "( ממוצע )", + "INFO_TEXT": "מספר כולל של שיחות המשמשות לחישוב:", + "TOOLTIP_TEXT": "זמן התגובה הראשון הוא {metricValue} (מבוסס על {conversationCount} שיחות)" + }, + "RESOLUTION_TIME": { + "NAME": "זמן רזולוציה", + "DESC": "( ממוצע )", + "INFO_TEXT": "מספר כולל של שיחות המשמשות לחישוב:", + "TOOLTIP_TEXT": "זמן הרזולוציה הוא {metricValue} (מבוסס על {conversationCount} שיחות)" + }, + "RESOLUTION_COUNT": { + "NAME": "ספירת רזולוציות", + "DESC": "( סך הכל )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "7 הימים האחרונים" + }, + { + "id": 1, + "name": "30 הימים האחרונים" + }, + { + "id": 2, + "name": "3 החודשים האחרונים" + }, + { + "id": 3, + "name": "6 החודשים האחרונים" + }, + { + "id": 4, + "name": "שנה שעברה" + }, + { + "id": 5, + "name": "טווח תאריכים מותאם אישית" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "להגיש מועמדות", + "PLACEHOLDER": "בחר טווח תאריכים" + } + }, + "CSAT_REPORTS": { + "HEADER": "דוחות CSAT", + "NO_RECORDS": "אין תשובות לסקר CSAT זמינות.", + "DOWNLOAD": "הורד דוחות CSAT", + "DOWNLOAD_FAILED": "הורדת דוחות CSAT נכשלה", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "בחר סוכנים" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "איש קשר", + "AGENT_NAME": "סוכן מוקצה", + "RATING": "דירוג", + "FEEDBACK_TEXT": "הערת משוב" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "סה\"כ תגובות", + "TOOLTIP": "מספר כולל של תגובות שנאספו" + }, + "SATISFACTION_SCORE": { + "LABEL": "ציון שביעות רצון", + "TOOLTIP": "מספר סה\"כ של תגובות חיוביות / סה\"כ מספר תגובות * 100" + }, + "RESPONSE_RATE": { + "LABEL": "שיעור תגובה", + "TOOLTIP": "מספר כולל של תגובות / מספר כולל של הודעות סקר CSAT שנשלחו * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "דוחות בוט", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "מספר שיחות", + "TOOLTIP": "המספר הכולל של השיחות שטופלו על ידי הבוט" + }, + "TOTAL_RESPONSES": { + "LABEL": "סך התגובות", + "TOOLTIP": "המספר הכולל של התגובות שנשלחו על ידי הבוט" + }, + "RESOLUTION_RATE": { + "LABEL": "שיעור סגירה", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "שיעור העברה", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "סקירה כללית", + "LIVE": "לחיות", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "שיחות פתוחות", + "LOADING_MESSAGE": "טוען מדדי שיחה...", + "OPEN": "פתח", + "UNATTENDED": "ללא השגחה", + "UNASSIGNED": "לא הוקצתה", + "PENDING": "ממתין ל" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "תנועת שיחות", + "NO_CONVERSATIONS": "בלי שיחות", + "CONVERSATION": "שיחה {count}", + "CONVERSATIONS": "{count} שיחות", + "DOWNLOAD_REPORT": "הורד דוח" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "סגירות", + "NO_CONVERSATIONS": "בלי שיחות", + "CONVERSATION": "שיחה {count}", + "CONVERSATIONS": "{count} שיחות", + "DOWNLOAD_REPORT": "הורד דוח" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "שיחות של סוכנים", + "LOADING_MESSAGE": "מדדי סוכן טעינה...", + "NO_AGENTS": "אין שיחות של סוכנים", + "TABLE_HEADER": { + "AGENT": "סוכן", + "OPEN": "פתח", + "UNATTENDED": "ללא השגחה", + "STATUS": "מצב" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "כל הצוותים", + "HEADER": "שיחות לפי צוותים", + "LOADING_MESSAGE": "טוען מדדי צוות...", + "NO_TEAMS": "אין נתונים זמינים", + "TABLE_HEADER": { + "TEAM": "צוות", + "OPEN": "פתח", + "UNATTENDED": "ללא השגחה", + "STATUS": "מצב" + } + }, + "AGENT_STATUS": { + "HEADER": "סטטוס סוכן", + "ONLINE": "מחובר", + "BUSY": "עסוק", + "OFFLINE": "לא מחובר" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "יום ראשון", + "MONDAY": "יום שני", + "TUESDAY": "יום שלישי", + "WEDNESDAY": "יום רביעי", + "THURSDAY": "יום חמישי", + "FRIDAY": "שישי", + "SATURDAY": "יום שבת" + }, + "SLA_REPORTS": { + "HEADER": "דוחות SLA", + "NO_RECORDS": "שיחות שהוחל עליהן SLA אינן זמינות.", + "LOADING": "טוען נתוני SLA...", + "DOWNLOAD_SLA_REPORTS": "הורד דוחות SLA", + "DOWNLOAD_FAILED": "הורדת דוחות SLA נכשלה", + "DROPDOWN": { + "ADD_FIlTER": "הוסף מסנן", + "CLEAR_ALL": "נקה הכל", + "CLEAR_FILTER": "נקה מסנן", + "EMPTY_LIST": "לא נמצאו תוצאות", + "NO_FILTER": "אין מסננים זמינים", + "SEARCH": "חפש מסנן", + "INPUT_PLACEHOLDER": { + "SLA": "שם SLA", + "AGENTS": "שם סוכן", + "INBOXES": "שם תיבת דואר נכנס", + "LABELS": "שם התווית", + "TEAMS": "שם קבוצה" + }, + "SLA": "מדיניות SLA", + "INBOXES": "תיבת הדואר הנכנס", + "AGENTS": "סוכן", + "LABELS": "תווית", + "TEAMS": "צוות" + }, + "WITH": "עם", + "METRICS": { + "HIT_RATE": { + "LABEL": "שיעור עמידה", + "TOOLTIP": "אחוז ה-SLA שנוצרו והושלמו בהצלחה" + }, + "NO_OF_MISSES": { + "LABEL": "מספר החמצות", + "TOOLTIP": "סך החמצות SLA בתקופה מסוימת" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "מספר שיחות", + "TOOLTIP": "המספר הכולל של שיחות עם SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "מדיניות", + "CONVERSATION": "שיחה", + "AGENT": "סוכן" + }, + "VIEW_DETAILS": "הצג פרטים" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "תיבת הדואר הנכנס", + "AGENT": "סוכן", + "TEAM": "צוות", + "LABEL": "תווית", + "AVG_RESOLUTION_TIME": "זמן סגירה ממוצע", + "AVG_FIRST_RESPONSE_TIME": "זמן תגובה ראשונה ממוצע", + "AVG_REPLY_TIME": "זמן המתנת לקוח ממוצע", + "RESOLUTION_COUNT": "ספירת רזולוציות", + "CONVERSATIONS": "מספר שיחות" + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/resetPassword.json b/app/javascript/dashboard/i18n/locale/he/resetPassword.json new file mode 100644 index 0000000..d693a21 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "אפס את הסיסמה", + "DESCRIPTION": "הזן את כתובת הדוא\"ל שבה אתה משתמש כדי להיכנס ל-Chatwoot לקבלת הוראות לאיפוס הסיסמה.", + "GO_BACK_TO_LOGIN": "אם ברצונך לחזור לדף ההתחברות,", + "EMAIL": { + "LABEL": "אימייל", + "PLACEHOLDER": "הזן בבקשה את האימייל שלך.", + "ERROR": "אנא הכנס כתובת דוא\"ל חוקית." + }, + "API": { + "SUCCESS_MESSAGE": "הקישור לאיפוס הסיסמה נשלח לדוא\"ל שלך.", + "ERROR_MESSAGE": "לא ניתן להתחבר לשרת Woot, נסה שוב מאוחר יותר" + }, + "SUBMIT": "שלח" + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/search.json b/app/javascript/dashboard/i18n/locale/he/search.json new file mode 100644 index 0000000..0aaaa9d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "איש קשר", + "CONVERSATIONS": "שיחות", + "MESSAGES": "הודעות", + "ARTICLES": "מאמרים" + }, + "SECTION": { + "CONTACTS": "איש קשר", + "CONVERSATIONS": "שיחות", + "MESSAGES": "הודעות", + "ARTICLES": "מאמרים" + }, + "VIEW_MORE": "הצג עוד", + "LOAD_MORE": "טען עוד", + "SEARCHING_DATA": "מחפש", + "LOADING_DATA": "טוען", + "EMPTY_STATE": "לא נמצא {item} עבור השאילתה '{query}'", + "EMPTY_STATE_FULL": "לא נמצאו תוצאות עבור השאילתה '{query}'", + "PLACEHOLDER_KEYBINDING": "/להתמקד", + "INPUT_PLACEHOLDER": "חפש הודעות, אנשי קשר או שיחות", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "נקה הכל", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "חפש לפי מזהה שיחה, אימייל, מספר טלפון, הודעות לתוצאות חיפוש טובות יותר.", + "BOT_LABEL": "בוט", + "READ_MORE": "קרא עוד", + "READ_LESS": "Read less", + "WROTE": "נכתב:", + "FROM": "מאת", + "EMAIL": "אימייל", + "EMAIL_SUBJECT": "נושא", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "נוצר ב-{time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "7 הימים האחרונים", + "LAST_30_DAYS": "30 הימים האחרונים", + "LAST_60_DAYS": "60 הימים האחרונים", + "LAST_90_DAYS": "90 הימים האחרונים", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "להגיש מועמדות", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "נקה מסנן" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "שולח", + "IN": "תיבת הדואר הנכנס", + "AGENTS": "סוכנים", + "CONTACTS": "איש קשר", + "INBOXES": "תיבות דואר נכנס", + "NO_AGENTS": "לא נמצאו סוכנים", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/setNewPassword.json b/app/javascript/dashboard/i18n/locale/he/setNewPassword.json new file mode 100644 index 0000000..59175d8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "הגדר סיסמה חדשה", + "PASSWORD": { + "LABEL": "סיסמה", + "PLACEHOLDER": "סיסמה", + "ERROR": "הסיסמה קצרה מדי" + }, + "CONFIRM_PASSWORD": { + "LABEL": "אמת סיסמה", + "PLACEHOLDER": "אמת סיסמה", + "ERROR": "סיסמאות לא תואמות" + }, + "API": { + "SUCCESS_MESSAGE": "שינתה את הסיסמה בהצלחה", + "ERROR_MESSAGE": "לא ניתן להתחבר לשרת Woot, נסה שוב מאוחר יותר" + }, + "CAPTCHA": { + "ERROR": "פג תוקף האימות. נא לפתור שוב את ה-captcha." + }, + "SUBMIT": "שלח" + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/settings.json b/app/javascript/dashboard/i18n/locale/he/settings.json new file mode 100644 index 0000000..a6a8c6f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "הגדרות פרופיל", + "TITLE": "הגדרות פרופיל", + "BTN_TEXT": "עדכון פרופיל", + "DELETE_AVATAR": "מחק אווטר", + "AVATAR_DELETE_SUCCESS": "תמונת פרופיל נמחקה בהצלחה", + "AVATAR_DELETE_FAILED": "אירעה שגיאה במחיקת תמונת הפרופיל, נסה שנית", + "UPDATE_SUCCESS": "הפרופיל עודכן בהצלחה", + "PASSWORD_UPDATE_SUCCESS": "הסיסמא שונתה בהצלחה", + "AFTER_EMAIL_CHANGED": "הפרופיל עודכן בהצלחה, יש להתחבר מחדש", + "FORM": { + "PICTURE": "תמונת פרופיל", + "AVATAR": "תמונת פרופיל", + "ERROR": "אנא תקן שגיאות בטופס", + "REMOVE_IMAGE": "הסר", + "UPLOAD_IMAGE": "העלה תמונה", + "UPDATE_IMAGE": "עדכן תמונה", + "PROFILE_SECTION": { + "TITLE": "פרופיל", + "NOTE": "כתובת המייל שלך משמשת להתחברות." + }, + "SEND_MESSAGE": { + "TITLE": "מקשים חמים לשליחת הודעות", + "NOTE": "תוכל לבחור מקש חם (באמצעות Enter או Cmd/Ctrl+Enter) בהתאם להעדפות הכתיבה שלך.", + "UPDATE_SUCCESS": "ההגדרות עודכנו בהצלחה", + "CARD": { + "ENTER_KEY": { + "HEADING": "אישור (↵)", + "CONTENT": "שלח הודעות באמצעות הקשת Enter במקום ללחוץ על כפתור השליחה." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "שלח הודעות באמצעות הקשת Cmd/Ctrl + Enter במקום ללחוץ על כפתור השליחה." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "ממשק", + "NOTE": "התאם אישית את המראה והתחושה של לוח המחוונים שלך ב-Chatwoot.", + "FONT_SIZE": { + "TITLE": "גודל גופן", + "NOTE": "התאם את גודל הטקסט ברחבי לוח המחוונים בהתבסס על ההעדפה שלך.", + "UPDATE_SUCCESS": "הגדרות הגופן שלך עודכנו בהצלחה", + "UPDATE_ERROR": "אירעה שגיאה בעדכון הגדרות הגופן, אנא נסה שוב", + "OPTIONS": { + "SMALLER": "קטן יותר", + "SMALL": "קטן", + "DEFAULT": "ברירת מחדל", + "LARGE": "גדול", + "LARGER": "גדול יותר", + "EXTRA_LARGE": "גדול במיוחד" + } + }, + "LANGUAGE": { + "TITLE": "שפה מועדפת", + "NOTE": "בחר את השפה שבה ברצונך להשתמש.", + "UPDATE_SUCCESS": "הגדרות השפה שלך עודכנו בהצלחה", + "UPDATE_ERROR": "אירעה שגיאה בעדכון הגדרות השפה, אנא נסה שוב", + "USE_ACCOUNT_DEFAULT": "השתמש בברירת המחדל של החשבון" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "חתימת הודעה אישית", + "NOTE": "צור חתימת הודעה ייחודית שתופיע בסוף כל הודעה שתשלח מכל תיבת דואר נכנס. ניתן לכלול גם תמונה מוטמעת, הנתמכת בצ'אט חי, דוא\"ל ותיבות דואר נכנסות של API.", + "BTN_TEXT": "שמירה", + "API_ERROR": "לא ניתן לשמור את החתימה! אנא נסה שנית", + "API_SUCCESS": "החתימה נשמרה בהצלחה", + "IMAGE_UPLOAD_ERROR": "לא ניתן להעלות את התמונה! נסה שוב", + "IMAGE_UPLOAD_SUCCESS": "התמונה נוספה בהצלחה. אנא לחץ על שמור כדי לשמור את החתימה", + "IMAGE_UPLOAD_SIZE_ERROR": "גודל התמונה צריך להיות פחות מ-{size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "חתימת הודעה", + "ERROR": "חתימת הודעה לא יכולה להיות ריקה", + "PLACEHOLDER": "הכנס כאן את חתימת ההודעה האישית שלך." + }, + "PASSWORD_SECTION": { + "TITLE": "סיסמה", + "NOTE": "עדכון הסיסמה שלך יאפס את הכניסות שלך במספר מכשירים.", + "BTN_TEXT": "שנה סיסמא" + }, + "SECURITY_SECTION": { + "TITLE": "אבטחה", + "NOTE": "נהל תכונות אבטחה נוספות עבור חשבונך.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "אסימון", + "NOTE": "משמש לחיבורי API", + "COPY": "עותק", + "RESET": "איפוס", + "CONFIRM_RESET": "האם אתה בטוח?", + "CONFIRM_HINT": "לחץ שוב כדי לאשר", + "RESET_SUCCESS": "אסימון הגישה נוצר מחדש בהצלחה", + "RESET_ERROR": "לא ניתן ליצור מחדש את אסימון הגישה. אנא נסה שוב" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "התראות שמע", + "NOTE": "הפעל התראות שמע בלוח המחוונים עבור הודעות ושיחות חדשות.", + "PLAY": "הפעל צליל", + "ALERT_TYPES": { + "NONE": "כלום", + "MINE": "הוקצה", + "ALL": "הכל", + "ASSIGNED": "השיחות שהוקצו לי", + "UNASSIGNED": "שיחות לא משויכות", + "NOTME": "שיחות פתוחות שהוקצו לאחרים" + }, + "ALERT_COMBINATIONS": { + "NONE": "לא בחרת אפשרויות, לא תקבל התראות שמע.", + "ASSIGNED": "תקבל התראות עבור שיחות שהוקצו לך.", + "UNASSIGNED": "תקבל התראות עבור כל שיחה לא משויכת.", + "NOTME": "תקבל התראות עבור שיחות שהוקצו לאחרים.", + "ASSIGNED+UNASSIGNED": "תקבל התראות עבור השיחות שהוקצו לך ועבור כל שיחה ללא מענה.", + "ASSIGNED+NOTME": "תקבל התראות עבור שיחות שהוקצו לך ולאחרים, אך לא עבור שיחות לא משויכות.", + "NOTME+UNASSIGNED": "תקבל התראות עבור שיחות ללא מענה ועבור אלה שהוקצו לאחרים.", + "ASSIGNED+NOTME+UNASSIGNED": "תקבל התראות עבור כל השיחות." + }, + "ALERT_TYPE": { + "TITLE": "אירועי התראה לשיחות", + "NONE": "כלום", + "ASSIGNED": "שיחות משוייכות", + "ALL_CONVERSATIONS": "כל השיחות" + }, + "DEFAULT_TONE": { + "TITLE": "צליל התראה:" + }, + "CONDITIONS": { + "TITLE": "העדפות התראה:", + "CONDITION_ONE": "שלח התראות קוליות רק במידה והדפדפן לא פעיל", + "CONDITION_TWO": "שלח התראות כל 30 שניות עד שכל ההודעות המשוייכות נקראו" + }, + "SOUND_PERMISSION_ERROR": "ההפעלה האוטומטית מושבתת בדפדפן שלך. כדי לשמוע התראות באופן אוטומטי, אפשר הרשאת צליל בהגדרות הדפדפן שלך או צור אינטראקציה עם הדף.", + "READ_MORE": "קרא עוד" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "התראות דוא\"ל", + "NOTE": "עדכן כאן את העדפות קבלת ההתראות בדוא''ל", + "CONVERSATION_ASSIGNMENT": "שלח התראה באימייל כאשר שיחה מוקצית עבורי", + "CONVERSATION_CREATION": "שלח התראה באימייל כאשר נפתחת שיחה חדשה", + "CONVERSATION_MENTION": "שלח הודעות דחיפה כאשר אתה מוזכר בשיחה", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "שלח התראה באימייל כאשר יש הודעה חדשה בשיחה המוקצית עבורי", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "שלח הודעות דחיפה כאשר נוצרת הודעה חדשה בשיחה המיועדת עבורי", + "SLA_MISSED_FIRST_RESPONSE": "שלח התראות בדוא\"ל כאשר שיחה לא עומדת בהסכם תנאי השירות (SLA) של התגובה הראשונה", + "SLA_MISSED_NEXT_RESPONSE": "שלח התראות בדוא\"ל כאשר שיחה לא עומדת ב-הסכם תנאי השירות (SLA) של התגובה הבאה", + "SLA_MISSED_RESOLUTION": "שלח התראות דוא\"ל כאשר שיחה מחמיצה SLA סגירה" + }, + "NOTIFICATIONS": { + "TITLE": "העדפות התראות", + "TYPE_TITLE": "סוג התראה", + "EMAIL": "אימייל", + "PUSH": "התראת דחיפה (Push)", + "TYPES": { + "CONVERSATION_CREATED": "שיחה חדשה נוצרה", + "CONVERSATION_ASSIGNED": "שיחה הוקצתה לך", + "CONVERSATION_MENTION": "הוזכרת בשיחה", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "נוצרה הודעה חדשה בשיחה שהוקצתה", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "נוצרה הודעה חדשה בשיחה שבה אתה משתתף", + "SLA_MISSED_FIRST_RESPONSE": "שיחה מחמיצה SLA תגובה ראשונה", + "SLA_MISSED_NEXT_RESPONSE": "שיחה מחמיצה SLA תגובה הבאה", + "SLA_MISSED_RESOLUTION": "שיחה מחמיצה SLA סגירה" + }, + "BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them" + }, + "API": { + "UPDATE_SUCCESS": "העדפות ההתראות עודכנו בהצלחה", + "UPDATE_ERROR": "אירעה שגיאה בעדכון ההעדפות, אנא נסה שנית" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "הודעות דחיפה (Push)", + "NOTE": "עדכן כאן את העדפות קבלת הודעות הדחיפה שלך", + "CONVERSATION_ASSIGNMENT": "שלח התראת פוש כאשר שיחה מוקצית עבורי", + "CONVERSATION_CREATION": "שלח התראת פוש כאשר נפתחת שיחה חדשה", + "CONVERSATION_MENTION": "שלח הודעות דחיפה כאשר אתה מוזכר בשיחה", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "שלח התראת פוש כאשר יש הודעה חדשה בשיחה המוקצית עבורי", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "שלח הודעות דחיפה כאשר נוצרת הודעה חדשה בשיחה המיועדת עבורי", + "HAS_ENABLED_PUSH": "הודעות דחיפה בדפדפן זה הופעלו.", + "REQUEST_PUSH": "אפשר הודעות דחיפה", + "SLA_MISSED_FIRST_RESPONSE": "שלח התראות דחיפה כאשר שיחה מחמיצה SLA תגובה ראשונה", + "SLA_MISSED_NEXT_RESPONSE": "שלח התראות דחיפה כאשר שיחה מחמיצה SLA תגובה הבאה", + "SLA_MISSED_RESOLUTION": "שלח התראות דחיפה כאשר שיחה מחמיצה SLA סגירה" + }, + "PROFILE_IMAGE": { + "LABEL": "תמונת פרופיל" + }, + "NAME": { + "LABEL": "שמך המלא", + "ERROR": "נא הכנס שם תקני", + "PLACEHOLDER": "הכנס שם מלא בבקשה" + }, + "DISPLAY_NAME": { + "LABEL": "שם תצוגה", + "ERROR": "נא הכנס שם תצוגה תקני", + "PLACEHOLDER": "נא הכנס שם תצוגה, שם זה יוצג בשיחות" + }, + "AVAILABILITY": { + "LABEL": "זמינות", + "STATUS": { + "ONLINE": "מחובר", + "BUSY": "עסוק", + "OFFLINE": "לא מחובר" + }, + "SET_AVAILABILITY_SUCCESS": "זמינות הוגדרה בהצלחה", + "SET_AVAILABILITY_ERROR": "לא ניתן להגדיר זמינות, אנא נסה שנית", + "IMPERSONATING_ERROR": "לא ניתן לשנות זמינות בעת התחזות למשתמש" + }, + "EMAIL": { + "LABEL": "כתובת הדוא\"ל שלך", + "ERROR": "נא הכנס כתובת דוא\"ל תקינה", + "PLACEHOLDER": "נא הכנס את כתובת הדוא\"ל שלך, כתובת זו תוצג בשיחות" + }, + "CURRENT_PASSWORD": { + "LABEL": "סיסמא נוכחית", + "ERROR": "אנא הזן את הסיסמה הנוכחית", + "PLACEHOLDER": "אנא הזן את הסיסמה הנוכחית" + }, + "PASSWORD": { + "LABEL": "סיסמה חדשה", + "ERROR": "אנא הזן סיסמה באורך 6 או יותר", + "PLACEHOLDER": "אנא הזן סיסמה חדשה" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "תאשר סיסמא חדשה", + "ERROR": "אשר את הסיסמה צריכה להתאים לסיסמה", + "PLACEHOLDER": "אנא הזן מחדש את הסיסמה החדשה שלך" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "שינוי", + "CHANGE_ACCOUNTS": "החלף חשבון", + "SWITCH_ACCOUNT": "החלף חשבון", + "CONTACT_SUPPORT": "צור קשר עם התמיכה", + "SELECTOR_SUBTITLE": "בחר חשבון מהרשימה הבאה", + "PROFILE_SETTINGS": "הגדרות פרופיל", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "קיצורי מקלדת", + "APPEARANCE": "שנה מראה", + "SUPER_ADMIN_CONSOLE": "קונסולת מנהל-על", + "DOCS": "קרא תיעוד", + "CHANGELOG": "יומן שינויים", + "LOGOUT": "התנתק" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "שנותרו ימי ניסיון.", + "TRAIL_BUTTON": "קנה עכשיו", + "DELETED_USER": "משתמש מחוק", + "EMAIL_VERIFICATION_PENDING": "נראה שעדיין לא אימתת את כתובת הדוא\"ל שלך. אנא בדוק את תיבת הדואר הנכנס שלך עבור דוא\"ל האימות.", + "RESEND_VERIFICATION_MAIL": "שלח מחדש דוא\"ל אימות", + "EMAIL_VERIFICATION_SENT": "דוא\"ל האימות נשלח. אנא בדוק את תיבת הדואר הנכנס שלך.", + "ACCOUNT_SUSPENDED": { + "TITLE": "חשבון מושעה", + "MESSAGE": "החשבון שלך מושעה. אנא פנה לצוות התמיכה לקבלת מידע נוסף." + }, + "NO_ACCOUNTS": { + "TITLE": "לא נמצא חשבון", + "MESSAGE_CLOUD": "אינך חלק משום חשבון כרגע. אם אתה חושב שזו טעות, אנא פנה לצוות התמיכה שלנו.", + "MESSAGE_SELF_HOSTED": "אינך חלק משום חשבון כרגע. אנא פנה למנהל המערכת שלך.", + "LOGOUT": "התנתק" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "עותק", + "CODEPEN": "פתח ב-CodePen", + "COPY_SUCCESSFUL": "הקוד הועתק ללוח בהצלחה" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "להראות יותר", + "SHOW_LESS": "הראי פחות" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "הורד", + "UPLOADING": "מעלה...", + "INSTAGRAM_STORY_UNAVAILABLE": "הסיפור הזה כבר לא זמין." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "ראה במפה" + }, + "FORM_BUBBLE": { + "SUBMIT": "שלח" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "תמונה זו אינה זמינה עוד.", + "LOADING_FAILED": "טעינה נכשלה" + } + }, + "CONFIRM_EMAIL": "מאמת...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "הוסף תיבת דואר נכנס" + } + }, + "SIDEBAR": { + "NO_ITEMS": "אין פריטים", + "CURRENTLY_VIEWING_ACCOUNT": "צופה כרגע:", + "SWITCH": "החלף", + "INBOX_VIEW": "תצוגת תיבת דואר נכנס", + "CONVERSATIONS": "שיחות", + "INBOX": "תיבת הדואר הנכנס שלי", + "ALL_CONVERSATIONS": "כל השיחות", + "MENTIONED_CONVERSATIONS": "אִזְכּוּרים", + "PARTICIPATING_CONVERSATIONS": "משתתף", + "UNATTENDED_CONVERSATIONS": "ללא השגחה", + "REPORTS": "דיווחים", + "SETTINGS": "הגדרות", + "CONTACTS": "איש קשר", + "ACTIVE": "פעיל", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "קפטן", + "CAPTAIN_ASSISTANTS": "עוזרים", + "CAPTAIN_DOCUMENTS": "מסמכים", + "CAPTAIN_RESPONSES": "שאלות נפוצות", + "CAPTAIN_TOOLS": "כלים", + "CAPTAIN_SCENARIOS": "תרחישים", + "CAPTAIN_PLAYGROUND": "מגרש משחקים", + "CAPTAIN_INBOXES": "תיבות דואר נכנס", + "CAPTAIN_SETTINGS": "הגדרות", + "HOME": "בית", + "AGENTS": "סוכנים", + "AGENT_BOTS": "בוטים", + "AUDIT_LOGS": "יומני ביקורת", + "INBOXES": "תיבות דואר נכנס", + "NOTIFICATIONS": "התראות", + "CANNED_RESPONSES": "תגובות מוכנות", + "INTEGRATIONS": "אינטגרציות", + "PROFILE_SETTINGS": "הגדרות פרופיל", + "ACCOUNT_SETTINGS": "הגדרות חשבון", + "APPLICATIONS": "יישומים", + "LABELS": "תוויות", + "CUSTOM_ATTRIBUTES": "מאפיינים בהתאמה אישית", + "AUTOMATION": "אוטומציה", + "MACROS": "מאקרו", + "TEAMS": "צוותים", + "BILLING": "חיוב", + "CUSTOM_VIEWS_FOLDER": "תיקיות", + "CUSTOM_VIEWS_SEGMENTS": "פלחים", + "ALL_CONTACTS": "כל אנשי הקשר", + "TAGGED_WITH": "מתוייג עם", + "NEW_LABEL": "תווית חדשה", + "NEW_TEAM": "קבוצה חדשה", + "NEW_INBOX": "תיבת דואר נכנס חדשה", + "REPORTS_CONVERSATION": "שיחות", + "CSAT": "CSAT", + "LIVE_CHAT": "צ'אט חי", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "קמפיין", + "ONGOING": "מתמשך", + "ONE_OFF": "חד פעמי", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "בוט", + "REPORTS_AGENT": "סוכנים", + "REPORTS_LABEL": "תוויות", + "REPORTS_INBOX": "תיבת הדואר הנכנס", + "REPORTS_TEAM": "צוות", + "AGENT_ASSIGNMENT": "הקצאת סוכן", + "SET_AVAILABILITY_TITLE": "הגדר את עצמך בתור", + "SET_YOUR_AVAILABILITY": "הגדר את הזמינות שלך", + "SLA": "SLA", + "CUSTOM_ROLES": "תפקידים מותאמים אישית", + "BETA": "בטא", + "REPORTS_OVERVIEW": "סקירה כללית", + "REAUTHORIZE": "חיבור תיבת הדואר הנכנס שלך פג, אנא התחבר מחדש\n כדי להמשיך לקבל ולשלוח הודעות", + "HELP_CENTER": { + "TITLE": "מרכז עזרה", + "ARTICLES": "מאמרים", + "CATEGORIES": "קטגוריות", + "LOCALES": "מקומיים", + "SETTINGS": "הגדרות" + }, + "CHANNELS": "ערוצים", + "SET_AUTO_OFFLINE": { + "TEXT": "סמן באופן לא מקוון באופן אוטומטי", + "INFO_TEXT": "תן למערכת לסמן אותך באופן אוטומטי במצב לא מקוון כשאתה לא משתמש באפליקציה או בלוח המחוונים.", + "INFO_SHORT": "סמן אוטומטית כלא מקוון כאשר אינך משתמש באפליקציה." + }, + "DOCS": "קרא מסמכים", + "SECURITY": "אבטחה" + }, + "BILLING_SETTINGS": { + "TITLE": "חיוב", + "DESCRIPTION": "נהל את המנוי שלך כאן, שדרג את התוכנית שלך וקבל יותר עבור הצוות שלך.", + "CURRENT_PLAN": { + "TITLE": "תוכנית נוכחית", + "PLAN_NOTE": "אתה רשום כעת לתוכנית **{plan}** עם רישיונות **{quantity}**", + "SEAT_COUNT": "מספר מושבים", + "RENEWS_ON": "מתחדש ב-" + }, + "VIEW_PRICING": "הצג תמחור", + "MANAGE_SUBSCRIPTION": { + "TITLE": "נהל את המנוי שלך", + "DESCRIPTION": "הצג את החשבוניות הקודמות שלך, ערוך את פרטי החיוב שלך או בטל את המנוי שלך.", + "BUTTON_TXT": "עבור לפורטל החיובים" + }, + "CAPTAIN": { + "TITLE": "קפטן", + "DESCRIPTION": "נהל שימוש וזיכויים עבור Captain AI.", + "BUTTON_TXT": "קנה עוד זיכויים", + "DOCUMENTS": "מסמכים", + "RESPONSES": "תגובות", + "UPGRADE": "Captain אינו זמין בתוכנית החינמית, שדרג עכשיו כדי לקבל גישה לעוזרים, ל-Copilot ועוד.", + "REFRESH_CREDITS": "רענן" + }, + "CHAT_WITH_US": { + "TITLE": "זקוק לעזרה?", + "DESCRIPTION": "האם אתה נתקל בבעיות כלשהן בחיוב? אנחנו כאן כדי לעזור.", + "BUTTON_TXT": "דבר איתנו" + }, + "NO_BILLING_USER": "חשבון החיוב שלך מוגדר. אנא רענן את הדף ונסה שוב.", + "TOPUP": { + "BUY_CREDITS": "קנה עוד זיכויים", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "הערה:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "ביטול", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "חזור", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "אבטחה", + "DESCRIPTION": "נהל את הגדרות האבטחה של חשבונך.", + "LINK_TEXT": "למד עוד על SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "כתובת URL של ACS", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "כתובת URL של SSO", + "HELP": "כתובת ה-URL שאליה יישלחו בקשות אימות SAML", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "אישור חתימה בפורמט PEM", + "HELP": "האישור הציבורי מספק הזהויות שלך המשמש לאימות תגובות SAML", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "טביעת אצבע", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "הקוד הועתק ללוח בהצלחה", + "SP_ENTITY_ID": { + "LABEL": "מזהה ישות SP", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "מזהה ישות של ספק הזהויות", + "HELP": "מזהה ייחודי עבור ספק הזהויות שלך (נמצא בדרך כלל בהגדרות IdP)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "עדכן הגדרות SAML", + "API": { + "SUCCESS": "הגדרות SAML עודכנו בהצלחה", + "ERROR": "העדכון של הגדרות SAML נכשל", + "ERROR_LOADING": "טעינת הגדרות SAML נכשלה", + "DISABLED": "הגדרות SAML הושבתו בהצלחה" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "כתובת URL של SSO, מזהה ישות של ספק הזהויות ואישור הם שדות נדרשים", + "SSO_URL_ERROR": "אנא הזן כתובת URL חוקית של SSO", + "CERTIFICATE_ERROR": "אישור נדרש", + "IDP_ENTITY_ID_ERROR": "מזהה ישות של ספק הזהויות נדרש" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "תכונת SAML SSO זמינה רק בתוכניות Enterprise.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "אנא פנה למנהל המערכת שלך לצורך השדרוג." + }, + "PAYWALL": { + "TITLE": "שדרג כדי להפעיל SAML SSO", + "AVAILABLE_ON": "תכונת SAML SSO זמינה רק בתוכניות Enterprise.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "שדרג עכשיו", + "CANCEL_ANYTIME": "תוכל לשנות או לבטל את התוכנית שלך בכל עת" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "הגדרת תכונת SAML", + "DESCRIPTION": "יש להגדיר את מיפויי התכונות הבאים בספק הזהויות שלך" + }, + "INFO_SECTION": { + "TITLE": "מידע על ספק השירות", + "TOOLTIP": "העתק ערכים אלה והגדר אותם בספק הזהויות שלך כדי ליצור את חיבור SAML" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "אה הו! לא הצלחנו למצוא חשבונות Chatwoot. נא ליצור חשבון חדש כדי להמשיך.", + "NEW_ACCOUNT": "חשבון חדש", + "SELECTOR_SUBTITLE": "צור חשבון חדש", + "API": { + "SUCCESS_MESSAGE": "החשבון נוצר בהצלחה", + "EXIST_MESSAGE": "החשבון כבר קיים", + "ERROR_MESSAGE": "לא ניתן להתחבר לשרת Woot, נסה שוב מאוחר יותר" + }, + "FORM": { + "NAME": { + "LABEL": "שם החברה", + "PLACEHOLDER": "וויין אנטרפרייז" + }, + "SUBMIT": "שלח", + "CANCEL": "ביטול" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "הצג את כל קיצורי הדרך", + "TITLE": { + "OPEN_CONVERSATION": "שיחה פתוחה", + "RESOLVE_AND_NEXT": "פתור ועבור להבא", + "NAVIGATE_DROPDOWN": "נווט בפריטים הנפתחים", + "RESOLVE_CONVERSATION": "פתור שיחה", + "GO_TO_CONVERSATION_DASHBOARD": "עבור ללוח המחוונים לשיחה", + "ADD_ATTACHMENT": "הוסף קובץ מצורף", + "GO_TO_CONTACTS_DASHBOARD": "עבור ללוח המחוונים של אנשי קשר", + "TOGGLE_SIDEBAR": "החלפת סרגל צד", + "GO_TO_REPORTS_SIDEBAR": "עבור לסרגל הצד של דוחות", + "MOVE_TO_NEXT_TAB": "עבור ללשונית הבאה ברשימת השיחות", + "GO_TO_SETTINGS": "לך להגדרות", + "SWITCH_TO_PRIVATE_NOTE": "עבור להערה פרטית", + "SWITCH_TO_REPLY": "עבור לתשובה", + "TOGGLE_SNOOZE_DROPDOWN": "החלפת תפריט נודניק" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "הקצאת סוכן", + "DESCRIPTION": "הגדר מדיניות לניהול יעיל של עומס העבודה וניתוב שיחות בהתבסס על הצרכים של תיבות הדואר הנכנס והסוכנים. למד עוד כאן" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "מדיניות הקצאה", + "DESCRIPTION": "נהל כיצד שיחות מוקצות בתיבות דואר נכנס.", + "FEATURES": [ + "הקצה לפי שיחות באופן שווה או לפי קיבולת זמינה", + "הוסף כללי הפצה הוגנת כדי למנוע עומס יתר על סוכן כלשהו", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "מדיניות קיבולת סוכן", + "DESCRIPTION": "נהל את עומס העבודה עבור סוכנים.", + "FEATURES": [ + "הגדר מספר שיחות מרבי לכל תיבת דואר נכנס", + "צור חריגים על בסיס תוויות וזמן", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "מדיניות הקצאה", + "CREATE_POLICY": "מדיניות חדשה" + }, + "CARD": { + "ORDER": "סדר", + "PRIORITY": "עדיפות", + "ACTIVE": "פעיל", + "INACTIVE": "לא פעיל", + "POPOVER": "תיבות דואר נכנס שנוספו", + "EDIT": "ערוך" + }, + "NO_RECORDS_FOUND": "לא נמצאו מדיניות הקצאה" + }, + "CREATE": { + "HEADER": { + "TITLE": "צור מדיניות הקצאה" + }, + "CREATE_BUTTON": "צור מדיניות", + "API": { + "SUCCESS_MESSAGE": "מדיניות ההקצאה נוצרה בהצלחה", + "ERROR_MESSAGE": "יצירת מדיניות ההקצאה נכשלה" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "ערוך מדיניות הקצאה" + }, + "EDIT_BUTTON": "עדכן מדיניות", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "הוסף תיבת דואר נכנס", + "DESCRIPTION": "תיבת הדואר הנכנס {inboxName} כבר מקושרת למדיניות אחרת. האם אתה בטוח שברצונך לקשר אותה למדיניות זו? היא תנותק מהמדיניות האחרת.", + "CONFIRM_BUTTON_LABEL": "המשך", + "CANCEL_BUTTON_LABEL": "ביטול" + }, + "API": { + "SUCCESS_MESSAGE": "מדיניות ההקצאה עודכנה בהצלחה", + "ERROR_MESSAGE": "עדכון מדיניות ההקצאה נכשל" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "תיבת הדואר הנכנס נוספה למדיניות בהצלחה", + "ERROR_MESSAGE": "הוספת תיבת הדואר הנכנס למדיניות נכשלה" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "תיבת הדואר הנכנס הוסרה מהמדיניות בהצלחה", + "ERROR_MESSAGE": "הסרת תיבת הדואר הנכנס מהמדיניות נכשלה" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "שם מדיניות:", + "PLACEHOLDER": "הזן שם מדיניות" + }, + "DESCRIPTION": { + "LABEL": "תיאור:", + "PLACEHOLDER": "הזן תיאור" + }, + "STATUS": { + "LABEL": "מצב:", + "PLACEHOLDER": "בחר סטטוס", + "ACTIVE": "המדיניות פעילה", + "INACTIVE": "המדיניות לא פעילה" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "סדר הקצאה", + "ROUND_ROBIN": { + "LABEL": "Round robin (סבב)", + "DESCRIPTION": "הקצה שיחות באופן שווה בין הסוכנים." + }, + "BALANCED": { + "LABEL": "מאוזן", + "DESCRIPTION": "הקצה שיחות על בסיס קיבולת זמינה." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "עדיפות הקצאה", + "EARLIEST_CREATED": { + "LABEL": "נוצר מוקדם ביותר", + "DESCRIPTION": "השיחה שנוצרה ראשונה מוקצית ראשונה." + }, + "LONGEST_WAITING": { + "LABEL": "המתנה הארוכה ביותר", + "DESCRIPTION": "השיחה הממתינה הכי הרבה זמן מוקצית ראשונה." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "מדיניות הפצה הוגנת", + "DESCRIPTION": "הגדר את המספר המרבי של שיחות שניתן להקצות לכל סוכן בתוך חלון זמן כדי למנוע עומס יתר על סוכן כלשהו. שדה חובה זה מוגדר כברירת מחדל ל-100 שיחות לשעה.", + "INPUT_MAX": "הקצה מקסימום", + "DURATION": "שיחות לכל סוכן בכל" + }, + "INBOXES": { + "LABEL": "תיבות דואר נכנס שנוספו", + "DESCRIPTION": "הוסף תיבות דואר נכנס שעבורן מדיניות זו תחול.", + "ADD_BUTTON": "הוסף תיבת דואר נכנס", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "חפש ובחר תיבות דואר נכנס להוספה", + "ADD_BUTTON": "הוסף" + }, + "EMPTY_STATE": "לא נוספו תיבות דואר נכנס למדיניות זו, הוסף תיבת דואר נכנס כדי להתחיל", + "API": { + "SUCCESS_MESSAGE": "תיבת הדואר הנכנס נוספה בהצלחה למדיניות", + "ERROR_MESSAGE": "הוספת תיבת הדואר הנכנס למדיניות נכשלה" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "מדיניות ההקצאה נמחקה בהצלחה", + "ERROR_MESSAGE": "מחיקת מדיניות ההקצאה נכשלה" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "קיבולת סוכן", + "CREATE_POLICY": "מדיניות חדשה" + }, + "CARD": { + "POPOVER": "סוכנים שנוספו", + "EDIT": "ערוך" + }, + "NO_RECORDS_FOUND": "לא נמצאו מדיניות קיבולת סוכן" + }, + "CREATE": { + "HEADER": { + "TITLE": "צור מדיניות קיבולת סוכן" + }, + "CREATE_BUTTON": "צור מדיניות", + "API": { + "SUCCESS_MESSAGE": "מדיניות קיבולת הסוכן נוצרה בהצלחה", + "ERROR_MESSAGE": "יצירת מדיניות קיבולת הסוכן נכשלה" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "ערוך מדיניות קיבולת סוכן" + }, + "EDIT_BUTTON": "עדכן מדיניות", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "הוסף סוכן", + "DESCRIPTION": "{agentName} כבר מקושר למדיניות אחרת. האם אתה בטוח שברצונך לקשר אותו למדיניות זו? הוא ינותק מהמדיניות האחרת.", + "CONFIRM_BUTTON_LABEL": "המשך", + "CANCEL_BUTTON_LABEL": "ביטול" + }, + "API": { + "SUCCESS_MESSAGE": "מדיניות קיבולת הסוכן עודכנה בהצלחה", + "ERROR_MESSAGE": "עדכון מדיניות קיבולת הסוכן נכשל" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "הסוכן נוסף למדיניות בהצלחה", + "ERROR_MESSAGE": "הוספת הסוכן למדיניות נכשלה" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "הסוכן הוסר מהמדיניות בהצלחה", + "ERROR_MESSAGE": "הסרת הסוכן מהמדיניות נכשלה" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "שם מדיניות:", + "PLACEHOLDER": "הזן שם מדיניות" + }, + "DESCRIPTION": { + "LABEL": "תיאור:", + "PLACEHOLDER": "הזן תיאור" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "מגבלות קיבולת תיבת דואר נכנס", + "ADD_BUTTON": "הוסף תיבת דואר נכנס", + "FIELD": { + "SELECT_INBOX": "בחר תיבת דואר נכנס", + "MAX_CONVERSATIONS": "מקסימום שיחות", + "SET_LIMIT": "הגדר מגבלה" + }, + "EMPTY_STATE": "לא הוגדרה מגבלת תיבת דואר נכנס" + }, + "EXCLUSION_RULES": { + "LABEL": "כללי חריגה", + "DESCRIPTION": "שיחות העומדות בתנאים הבאים לא ייכללו בחישוב קיבולת הסוכן", + "TAGS": { + "LABEL": "אל תכלול שיחות מתויגות בתוויות ספציפיות", + "ADD_TAG": "הוסף תג", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "חפש ובחר תגים להוספה" + }, + "EMPTY_STATE": "לא נוספו תגים למדיניות זו." + }, + "DURATION": { + "LABEL": "אל תכלול שיחות ישנות יותר ממשך זמן מוגדר", + "PLACEHOLDER": "הגדר זמן" + } + }, + "USERS": { + "LABEL": "סוכנים שהוקצו", + "DESCRIPTION": "הוסף סוכנים שעבורם מדיניות זו תחול.", + "ADD_BUTTON": "הוסף סוכן", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "חפש ובחר סוכנים להוספה", + "ADD_BUTTON": "הוסף" + }, + "EMPTY_STATE": "לא נוספו סוכנים", + "API": { + "SUCCESS_MESSAGE": "הסוכן נוסף בהצלחה למדיניות", + "ERROR_MESSAGE": "הוספת הסוכן למדיניות נכשלה" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "מדיניות קיבולת הסוכן נמחקה בהצלחה", + "ERROR_MESSAGE": "מחיקת מדיניות קיבולת הסוכן נכשלה" + } + }, + "DELETE_POLICY": { + "TITLE": "מחק מדיניות", + "DESCRIPTION": "האם אתה בטוח שברצונך למחוק מדיניות זו? לא ניתן לבטל פעולה זו.", + "CONFIRM_BUTTON_LABEL": "מחק", + "CANCEL_BUTTON_LABEL": "ביטול" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/signup.json b/app/javascript/dashboard/i18n/locale/he/signup.json new file mode 100644 index 0000000..0755f77 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "צור חשבון", + "TITLE": "הירשם", + "TESTIMONIAL_HEADER": "כל מה שצריך זה צעד אחד כדי להתקדם", + "TESTIMONIAL_CONTENT": "אתה במרחק צעד אחד מלהפעיל את הלקוחות שלך, לשמר אותם ולמצוא חדשים.", + "TERMS_ACCEPT": "על ידי יצירת חשבון, אתה מסכים לתנאים וההגבלות ול-מדיניות הפרטיות", + "OAUTH": { + "GOOGLE_SIGNUP": "הירשם לגוגל" + }, + "COMPANY_NAME": { + "LABEL": "שם החברה", + "PLACEHOLDER": "הזן את שם החברה שלך. למשל: Wayne Enterprises", + "ERROR": "שם החברה קצר מדי" + }, + "FULL_NAME": { + "LABEL": "שם מלא", + "PLACEHOLDER": "הזן את שמך המלא. למשל: ברוס וויין", + "ERROR": "השם המלא קצר מדי" + }, + "EMAIL": { + "LABEL": "מייל עבודה", + "PLACEHOLDER": "הכנס את כתובת הדוא\"ל של מקום העבודה שלך. לדוגמא: bruce{'@'}wayne{'.'}enterprises", + "ERROR": "אנא הזן כתובת דוא\"ל חוקית לעבודה" + }, + "PASSWORD": { + "LABEL": "סיסמה", + "PLACEHOLDER": "סיסמה", + "ERROR": "הסיסמה קצרה מדי", + "IS_INVALID_PASSWORD": "הסיסמה צריכה להכיל לפחות אות אחת גדולה, אות קטנה אחת, מספר אחד ותו מיוחד אחד", + "REQUIREMENTS_LENGTH": "לפחות 6 תווים", + "REQUIREMENTS_UPPERCASE": "לפחות אות אחת גדולה", + "REQUIREMENTS_LOWERCASE": "לפחות אות אחת קטנה", + "REQUIREMENTS_NUMBER": "לפחות מספר אחד", + "REQUIREMENTS_SPECIAL": "לפחות תו מיוחד אחד" + }, + "CONFIRM_PASSWORD": { + "LABEL": "אמת סיסמה", + "PLACEHOLDER": "אמת סיסמה", + "ERROR": "סיסמאות לא תואמות" + }, + "API": { + "SUCCESS_MESSAGE": "ההרשמה הצליחה", + "ERROR_MESSAGE": "לא ניתן להתחבר לשרת Woot, נסה שוב מאוחר יותר" + }, + "SUBMIT": "צור חשבון", + "HAVE_AN_ACCOUNT": "כבר יש לך חשבון?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/sla.json b/app/javascript/dashboard/i18n/locale/he/sla.json new file mode 100644 index 0000000..5bc4a25 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "הסכמי רמת שירות (SLA)", + "ADD_ACTION": "הוסף SLA", + "ADD_ACTION_LONG": "צור מדיניות SLA חדשה", + "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", + "LEARN_MORE": "למד עוד על SLA", + "LOADING": "מאחזר SLA", + "PAYWALL": { + "TITLE": "שדרג כדי ליצור SLA", + "AVAILABLE_ON": "תכונת SLA זמינה רק בתוכניות Business ו-Enterprise.", + "UPGRADE_PROMPT": "שדרג את התוכנית שלך כדי לקבל גישה לתכונות מתקדמות כמו ניהול צוות, אוטומציות, תכונות מותאמות אישית ועוד.", + "UPGRADE_NOW": "שדרג עכשיו", + "CANCEL_ANYTIME": "תוכל לשנות או לבטל את התוכנית שלך בכל עת" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "תכונת SLA זמינה רק בתוכניות בתשלום.", + "UPGRADE_PROMPT": "שדרג לתוכנית בתשלום כדי לגשת לתכונות מתקדמות כמו יומני ביקורת, קיבולת סוכנים ועוד.", + "ASK_ADMIN": "אנא פנה למנהל המערכת שלך לצורך השדרוג." + }, + "LIST": { + "404": "אין SLA זמין בחשבון זה.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "בעיות שהועלו על ידי לקוחות Enterprise, הדורשות תשומת לב מיידית.", + "TITLE_2": "Enterprise P1", + "DESC_2": "בעיות שהועלו על ידי לקוחות Enterprise, שיש לאשר במהירות." + }, + "BUSINESS_HOURS_ON": "שעות פעילות מופעלות", + "BUSINESS_HOURS_OFF": "שעות פעילות מושבתות", + "RESPONSE_TYPES": { + "FRT": "סף זמן תגובה ראשונה", + "NRT": "סף זמן תגובה הבאה", + "RT": "סף זמן סגירה", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "שם SLA", + "PLACEHOLDER": "שם SLA", + "REQUIRED_ERROR": "שם SLA נדרש", + "MINIMUM_LENGTH_ERROR": "נדרש אורך מינימלי 2", + "VALID_ERROR": "רק אלפבית, מספרים, מקף וקו תחתון מותרים" + }, + "DESCRIPTION": { + "LABEL": "תיאור", + "PLACEHOLDER": "SLA עבור לקוחות פרימיום" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "זמן תגובה ראשון", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "זמן תגובה הבאה", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "זמן רזולוציה", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "שעות פעילות", + "PLACEHOLDER": "רק בשעות פעילות" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "הסף צריך להיות מספר וגדול מאפס" + }, + "EDIT": "ערוך", + "CREATE": "צור", + "DELETE": "מחק", + "CANCEL": "ביטול" + }, + "ADD": { + "TITLE": "הוסף SLA", + "DESC": "הבטחות ידידותיות לשירות נהדר!", + "API": { + "SUCCESS_MESSAGE": "SLA נוסף בהצלחה", + "ERROR_MESSAGE": "היתה שגיאה, בקשה נסה שוב" + } + }, + "DELETE": { + "TITLE": "מחק SLA", + "API": { + "SUCCESS_MESSAGE": "SLA נמחק בהצלחה", + "ERROR_MESSAGE": "היתה שגיאה, בקשה נסה שוב" + }, + "CONFIRM": { + "TITLE": "אשר מחיקה", + "MESSAGE": "האם אתה בטוח שברצונך למחוק ", + "YES": "כן, מחק ", + "NO": "לא, השאר " + } + }, + "EVENTS": { + "TITLE": "החמצות SLA", + "FRT": "זמן תגובה ראשונה", + "NRT": "זמן תגובה הבאה", + "RT": "זמן סגירה", + "SHOW_MORE": "{count} נוספים", + "HIDE": "הסתר {count} שורות" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/teamsSettings.json b/app/javascript/dashboard/i18n/locale/he/teamsSettings.json new file mode 100644 index 0000000..16785a0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "צור צוות חדש", + "HEADER": "צוותים", + "LOADING": "מאחזר צוותים", + "DESCRIPTION": "צוותים מאפשרים לך לארגן סוכנים לקבוצות על בסיס תחומי האחריות שלהם. סוכן יכול להשתייך למספר צוותים. בעבודה שיתופית, תוכל להקצות שיחות לצוותים ספציפיים.", + "LEARN_MORE": "למד עוד על צוותים", + "LIST": { + "404": "לא נוצרו צוותים בחשבון זה.", + "EDIT_TEAM": "ערוך צוות", + "NONE": "כלום" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "צור צוות חדש", + "DESC": "הוסף כותרת ותיאור לצוות החדש שלך." + }, + "AGENTS": { + "BUTTON_TEXT": "הוסף סוכנים לצוות", + "TITLE": "הוסף סוכנים לצוות - {teamName}", + "DESC": "הוסף סוכנים לצוות החדש שלך שנוצר. זה מאפשר לך לשתף פעולה כצוות בשיחות, לקבל התראות על אירועים חדשים באותה שיחה." + }, + "WIZARD_CREATE": { + "TITLE": "צור", + "BODY": "צור צוות חדש של סוכנים." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "הוסף נציג", + "BODY": "הוסף סוכנים לצוות." + }, + "WIZARD_FINISH": { + "TITLE": "סיים", + "BODY": "אתם מוכנים לצאת לדרך!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "ערוך את פרטי הצוות שלך", + "DESC": "ערוך כותרת ותיאור לצוות שלך.", + "BUTTON_TEXT": "עדכן צוות" + }, + "AGENTS": { + "BUTTON_TEXT": "עדכן סוכנים בצוות", + "TITLE": "הוסף סוכנים לצוות - {teamName}", + "DESC": "הוסף סוכנים לצוות החדש שלך שנוצר. כל הסוכנים שנוספו יקבלו הודעה כאשר שיחה תוקצה לצוות זה." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "פרטי צוות", + "ROUTE": "settings_teams_edit", + "BODY": "שנה שם, תיאור ופרטים נוספים." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "עריכת סוכנים", + "ROUTE": "settings_teams_edit_members", + "BODY": "ערוך סוכנים בצוות שלך." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "סיים", + "ROUTE": "settings_teams_edit_finish", + "BODY": "אתם מוכנים לצאת לדרך!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "לא ניתן לשמור את פרטי הצוות. נסה שוב." + }, + "AGENTS": { + "AGENT": "סוכן", + "EMAIL": "מייל", + "BUTTON_TEXT": "הוסף נציגים", + "ADD_AGENTS": "הוספת סוכנים לצוות שלך...", + "SELECT": "בחר", + "SELECT_ALL": "בחר את כל הסוכנים", + "SELECTED_COUNT": "{selected} מתוך {total} סוכנים שנבחרו." + }, + "ADD": { + "TITLE": "הוסף סוכנים לצוות - {teamName}", + "DESC": "הוסף סוכנים לצוות החדש שלך שנוצר. זה מאפשר לך לשתף פעולה כצוות בשיחות, לקבל התראות על אירועים חדשים באותה שיחה.", + "SELECT": "בחר", + "SELECT_ALL": "בחר את כל הסוכנים", + "SELECTED_COUNT": "{selected} מתוך {total} סוכנים שנבחרו.", + "BUTTON_TEXT": "הוסף נציגים", + "AGENT_VALIDATION_ERROR": "בחר סוכן אחד לפחות." + }, + "FINISH": { + "TITLE": "הצוות שלך מוכן!", + "MESSAGE": "עכשיו אתה יכול לשתף פעולה כצוות בשיחות. תמיכה שמח ", + "BUTTON_TEXT": "סיים" + }, + "DELETE": { + "BUTTON_TEXT": "מחק", + "API": { + "SUCCESS_MESSAGE": "הצוות נמחק בהצלחה.", + "ERROR_MESSAGE": "לא ניתן למחוק את הצוות. נסה שוב." + }, + "CONFIRM": { + "TITLE": "האם אתה בטוח שברצונך למחוק את הצוות?", + "PLACE_HOLDER": "אנא הקלד {teamName} כדי לאשר", + "MESSAGE": "מחיקת הצוות תסיר את הקצאת הצוות מהשיחות שהוקצו לצוות זה.", + "YES": "מחק ", + "NO": "ביטול" + } + }, + "SETTINGS": "הגדרות", + "FORM": { + "UPDATE": "עדכן צוות", + "CREATE": "צור צוות", + "NAME": { + "LABEL": "שם קבוצה", + "PLACEHOLDER": "דוגמה: מכירות, תמיכת לקוחות" + }, + "DESCRIPTION": { + "LABEL": "תיאור צוות", + "PLACEHOLDER": "תיאור קצר על הצוות הזה." + }, + "AUTO_ASSIGN": { + "LABEL": "אפשר הקצאה אוטומטית עבור הצוות הזה." + }, + "SUBMIT_CREATE": "צור צוות" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/webhooks.json b/app/javascript/dashboard/i18n/locale/he/webhooks.json new file mode 100644 index 0000000..23006b3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "הגדרות Webhook" + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/he/whatsappTemplates.json new file mode 100644 index 0000000..420ac4c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "תבניות וואטסאפ", + "SUBTITLE": "בחר את תבנית הווטסאפ שברצונך לשלוח", + "TEMPLATE_SELECTED_SUBTITLE": "הגדר תבנית: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "חפש תבניות", + "NO_TEMPLATES_FOUND": "לא נמצאו תבניות עבור", + "HEADER": "כותרת עליונה", + "BODY": "גוף", + "FOOTER": "כותרת תחתונה", + "BUTTONS": "כפתורים", + "CATEGORY": "קטגוריה", + "MEDIA_CONTENT": "תוכן מדיה", + "MEDIA_CONTENT_FALLBACK": "תוכן מדיה", + "NO_TEMPLATES_AVAILABLE": "אין תבניות WhatsApp זמינות. לחץ על רענן כדי לסנכרן תבניות מ-WhatsApp.", + "REFRESH_BUTTON": "רענן תבניות", + "REFRESH_SUCCESS": "רענון התבניות הופעל. העדכון עשוי להימשך כמה דקות.", + "REFRESH_ERROR": "רענון התבניות נכשל. אנא נסה שוב.", + "LABELS": { + "LANGUAGE": "שפה", + "TEMPLATE_BODY": "גוף התבנית", + "CATEGORY": "קטגוריה" + } + }, + "PARSER": { + "VARIABLES_LABEL": "משתנים", + "LANGUAGE": "שפה", + "CATEGORY": "קטגוריה", + "VARIABLE_PLACEHOLDER": "הזן ערך {variable}", + "GO_BACK_LABEL": "חזור", + "SEND_MESSAGE_LABEL": "לשלוח הודעה", + "FORM_ERROR_MESSAGE": "נא למלא את כל המשתנים לפני השליחה", + "MEDIA_HEADER_LABEL": "כותרת עליונה {type}", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "הזן דקות תפוגה", + "BUTTON_PARAMETERS": "פרמטרים של כפתורים", + "BUTTON_LABEL": "כפתור {index}", + "COUPON_CODE": "הזן קוד קופון (מקסימום 15 תווים)", + "MEDIA_URL_LABEL": "הזן כתובת URL של {type}", + "DOCUMENT_NAME_PLACEHOLDER": "הזן שם קובץ מסמך (לדוגמה, Invoice_2025.pdf)", + "BUTTON_PARAMETER": "הזן פרמטר כפתור" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/he/yearInReview.json b/app/javascript/dashboard/i18n/locale/he/yearInReview.json new file mode 100644 index 0000000..6597a02 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/he/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "סגור", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "שיחות", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "הורד", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "Share conversation" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/advancedFilters.json b/app/javascript/dashboard/i18n/locale/hi/advancedFilters.json new file mode 100644 index 0000000..4b9226f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Filter conversations", + "SUBTITLE": "नीचे अपने फ़िल्टर जोड़ें और चैट अव्यवस्था को दूर करने के लिए 'फ़िल्टर लागू करें' पर क्लिक करें।", + "EDIT_CUSTOM_FILTER": "Edit Folder", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your folder.", + "ADD_NEW_FILTER": "Add filter", + "FILTER_DELETE_ERROR": "Oops, looks like we can't save nothing! Please add at least one filter to save it.", + "SUBMIT_BUTTON_LABEL": "Apply filters", + "UPDATE_BUTTON_LABEL": "Update folder", + "CANCEL_BUTTON_LABEL": "Cancel", + "CLEAR_BUTTON_LABEL": "Clear filters", + "FOLDER_LABEL": "Folder Name", + "FOLDER_QUERY_LABEL": "Folder Query", + "EMPTY_VALUE_ERROR": "Value is required.", + "TOOLTIP_LABEL": "Filter conversations", + "QUERY_DROPDOWN_LABELS": { + "AND": "AND", + "OR": "OR" + }, + "INPUT_PLACEHOLDER": "Enter value", + "OPERATOR_LABELS": { + "equal_to": "Equal to", + "not_equal_to": "Not equal to", + "does_not_contain": "Does not contain", + "is_present": "Is present", + "is_not_present": "Is not present", + "is_greater_than": "Is greater than", + "is_less_than": "Is lesser than", + "days_before": "Is x days before", + "starts_with": "Starts with", + "equalTo": "Equal to", + "notEqualTo": "Not equal to", + "contains": "Contains", + "doesNotContain": "Does not contain", + "isPresent": "Is present", + "isNotPresent": "Is not present", + "isGreaterThan": "Is greater than", + "isLessThan": "Is lesser than", + "daysBefore": "Is x days before", + "startsWith": "Starts with" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "True", + "FALSE": "False" + }, + "ATTRIBUTES": { + "STATUS": "Status", + "ASSIGNEE_NAME": "Assignee name", + "INBOX_NAME": "Inbox name", + "TEAM_NAME": "Team name", + "CONVERSATION_IDENTIFIER": "Conversation identifier", + "CAMPAIGN_NAME": "Campaign name", + "LABELS": "Labels", + "BROWSER_LANGUAGE": "Browser language", + "PRIORITY": "Priority", + "COUNTRY_NAME": "Country name", + "REFERER_LINK": "Referer link", + "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_TEXT": "Text", + "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Created at", + "LAST_ACTIVITY": "Last activity" + }, + "ERRORS": { + "VALUE_REQUIRED": "Value is required", + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard filters", + "ADDITIONAL_FILTERS": "Additional filters", + "CUSTOM_ATTRIBUTES": "Custom attributes" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Do you want to save this filter?", + "LABEL": "Name this filter", + "PLACEHOLDER": "Name your filter to refer it later.", + "ERROR_MESSAGE": "Name is required.", + "SAVE_BUTTON": "Save filter", + "CANCEL_BUTTON": "Cancel", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder created successfully.", + "ERROR_MESSAGE": "Error while creating folder." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment created successfully.", + "ERROR_MESSAGE": "Error while creating segment." + } + }, + "EDIT": { + "EDIT_BUTTON": "Edit folder" + }, + "DELETE": { + "DELETE_BUTTON": "Delete filter", + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete the filter ", + "YES": "Yes, delete", + "NO": "No, keep it" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder deleted successfully.", + "ERROR_MESSAGE": "Error while deleting folder." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment deleted successfully.", + "ERROR_MESSAGE": "Error while deleting segment." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/agentBots.json b/app/javascript/dashboard/i18n/locale/hi/agentBots.json new file mode 100644 index 0000000..d3a0bb9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Bots", + "LOADING_EDITOR": "Loading editor...", + "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try. You can manage your bots from this page or create new ones using the 'Add Bot' button.", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "System bot", + "GLOBAL_BOT_BADGE": "System", + "AVATAR": { + "SUCCESS_DELETE": "Bot avatar deleted successfully", + "ERROR_DELETE": "Error deleting bot avatar, please try again" + }, + "BOT_CONFIGURATION": { + "TITLE": "Select an agent bot", + "DESC": "Assign an Agent Bot to your inbox. They can handle initial conversations and transfer them to a live agent when necessary.", + "SUBMIT": "Update", + "DISCONNECT": "Disconnect bot", + "SUCCESS_MESSAGE": "Successfully updated the agent bot.", + "DISCONNECTED_SUCCESS_MESSAGE": "Successfully disconnected the agent bot.", + "ERROR_MESSAGE": "Could not update the agent bot. Please try again.", + "DISCONNECTED_ERROR_MESSAGE": "Could not disconnect the agent bot. Please try again.", + "SELECT_PLACEHOLDER": "Select bot" + }, + "ADD": { + "TITLE": "Add Bot", + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "SUCCESS_MESSAGE": "Bot added successfully.", + "ERROR_MESSAGE": "Could not add bot. Please try again later." + } + }, + "LIST": { + "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.", + "LOADING": "Fetching bots...", + "TABLE_HEADER": { + "DETAILS": "Bot Details", + "URL": "Webhook URL" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "TITLE": "Delete bot", + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure you want to delete {name}?", + "YES": "Yes, Delete", + "NO": "No, Keep" + }, + "API": { + "SUCCESS_MESSAGE": "Bot deleted successfully.", + "ERROR_MESSAGE": "Could not delete bot. Please try again." + } + }, + "EDIT": { + "BUTTON_TEXT": "Edit", + "TITLE": "Edit bot", + "API": { + "SUCCESS_MESSAGE": "Bot updated successfully.", + "ERROR_MESSAGE": "Could not update bot. Please try again." + } + }, + "ACCESS_TOKEN": { + "TITLE": "Access Token", + "DESCRIPTION": "Copy the access token and save it securely", + "COPY_SUCCESSFUL": "Access token copied to clipboard", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "Bot name", + "PLACEHOLDER": "Enter bot name", + "REQUIRED": "Bot name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "What does this bot do?" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "Webhook URL is required" + }, + "ERRORS": { + "NAME": "Bot name is required", + "URL": "Webhook URL is required", + "VALID_URL": "Please enter a valid URL starting with http:// or https://" + }, + "CANCEL": "Cancel", + "CREATE": "Create Bot", + "UPDATE": "Update Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them." + }, + "TYPES": { + "WEBHOOK": "Webhook bot" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/agentMgmt.json b/app/javascript/dashboard/i18n/locale/hi/agentMgmt.json new file mode 100644 index 0000000..a1356f4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Agents", + "HEADER_BTN_TXT": "Add Agent", + "LOADING": "Fetching Agent List", + "DESCRIPTION": "An agent is a member of your customer support team who can view and respond to user messages. The list below shows all the agents in your account.", + "LEARN_MORE": "Learn about user roles", + "AGENT_TYPES": { + "ADMINISTRATOR": "Administrator", + "AGENT": "Agent" + }, + "LIST": { + "404": "There are no agents associated to this account", + "TITLE": "Manage agents in your team", + "DESC": "You can add/remove agents to/in your team.", + "NAME": "Name", + "EMAIL": "EMAIL", + "STATUS": "Status", + "ACTIONS": "Actions", + "VERIFIED": "Verified", + "VERIFICATION_PENDING": "Verification Pending", + "AVAILABLE_CUSTOM_ROLE": "Available custom role permissions" + }, + "ADD": { + "TITLE": "Add agent to your team", + "DESC": "You can add people who will be able to handle support for your inboxes.", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "NAME": { + "LABEL": "Agent Name", + "PLACEHOLDER": "Please enter a name of the agent" + }, + "AGENT_TYPE": { + "LABEL": "Role", + "PLACEHOLDER": "कृपया एक भूमिका का चयन करें", + "ERROR": "Role is required" + }, + "EMAIL": { + "LABEL": "Email Address", + "PLACEHOLDER": "Please enter an email address of the agent" + }, + "SUBMIT": "Add Agent" + }, + "API": { + "SUCCESS_MESSAGE": "Agent added successfully", + "EXIST_MESSAGE": "Agent email already in use, Please try another email address", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Agent deleted successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + } + }, + "EDIT": { + "TITLE": "Edit agent", + "FORM": { + "NAME": { + "LABEL": "Agent Name", + "PLACEHOLDER": "Please enter a name of the agent" + }, + "AGENT_TYPE": { + "LABEL": "Role", + "PLACEHOLDER": "कृपया एक भूमिका का चयन करें", + "ERROR": "Role is required" + }, + "EMAIL": { + "LABEL": "Email Address", + "PLACEHOLDER": "Please enter an email address of the agent" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Availability", + "PLACEHOLDER": "Please select an availability status", + "ERROR": "Availability is required" + }, + "SUBMIT": "Edit Agent" + }, + "BUTTON_TEXT": "Edit", + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "SUCCESS_MESSAGE": "Agent updated successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Reset Password", + "ADMIN_SUCCESS_MESSAGE": "An email with reset password instructions has been sent to the agent", + "SUCCESS_MESSAGE": "Agent password reset successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "SEARCH": { + "NO_RESULTS": "No results found." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "None", + "TITLE": { + "AGENT": "Select agent", + "TEAM": "Select team" + }, + "LIST": { + "NONE": "None" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "No agents found", + "TEAM": "No teams found" + }, + "PLACEHOLDER": { + "AGENT": "Search agents", + "TEAM": "Search teams", + "INPUT": "Search for agents" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/hi/attributesMgmt.json new file mode 100644 index 0000000..78886f4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Custom Attributes", + "HEADER_BTN_TXT": "Add Custom Attribute", + "LOADING": "Fetching custom attributes", + "DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.", + "LEARN_MORE": "Learn more about custom attributes", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Text", + "NUMBER": "Number", + "LINK": "Link", + "DATE": "Date", + "LIST": "List", + "CHECKBOX": "Checkbox" + }, + "ADD": { + "TITLE": "Add Custom Attribute", + "SUBMIT": "Create", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "NAME": { + "LABEL": "Display Name", + "PLACEHOLDER": "Enter custom attribute display name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Enter custom attribute description", + "ERROR": "Description is required" + }, + "MODEL": { + "LABEL": "Applies to", + "PLACEHOLDER": "Please select one", + "ERROR": "Model is required" + }, + "TYPE": { + "LABEL": "Type", + "PLACEHOLDER": "Please select a type", + "ERROR": "Type is required", + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter value and press enter key", + "ERROR": "Must have at least one value" + } + }, + "KEY": { + "LABEL": "Key", + "PLACEHOLDER": "Enter custom attribute key", + "ERROR": "Key is required", + "IN_VALID": "Invalid key" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute added successfully!", + "ERROR_MESSAGE": "Could not create a Custom Attribute. Please try again later." + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure want to delete - {attributeName}", + "PLACE_HOLDER": "Please type {attributeName} to confirm", + "MESSAGE": "Deleting will remove the custom attribute", + "YES": "Delete ", + "NO": "Cancel" + } + }, + "EDIT": { + "TITLE": "Edit Custom Attribute", + "UPDATE_BUTTON_TEXT": "Update", + "TYPE": { + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter values and press enter key" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute updated successfully", + "ERROR_MESSAGE": "There was an error updating custom attribute, please try again" + } + }, + "TABS": { + "HEADER": "Custom Attributes", + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Name", + "DESCRIPTION": "Description", + "TYPE": "Type", + "KEY": "Key" + }, + "BUTTONS": { + "EDIT": "Edit", + "DELETE": "Delete" + }, + "EMPTY_RESULT": { + "404": "There are no custom attributes created", + "NOT_FOUND": "There are no custom attributes configured" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/auditLogs.json b/app/javascript/dashboard/i18n/locale/hi/auditLogs.json new file mode 100644 index 0000000..df236f5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Audit Logs", + "HEADER_BTN_TXT": "Add Audit Logs", + "LOADING": "Fetching Audit Logs", + "DESCRIPTION": "Audit Logs maintain a record of activities in your account, allowing you to track and audit your account, team, or services.", + "LEARN_MORE": "Learn more about audit logs", + "SEARCH_404": "There are no items matching this query", + "SIDEBAR_TXT": "Audit Logs
Audit Logs are trails for events and actions in a Chatwoot System.
", + "LIST": { + "404": "There are no Audit Logs available in this account.", + "TITLE": "Manage Audit Logs", + "DESC": "Audit Logs are trails for events and actions in a Chatwoot System.", + "TABLE_HEADER": { + "ACTIVITY": "User", + "TIME": "Action", + "IP_ADDRESS": "IP Address" + } + }, + "API": { + "SUCCESS_MESSAGE": "AuditLogs retrieved successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "DEFAULT_USER": "System", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} invited {invitee} to the account as an {role}", + "EDIT": { + "SELF": "{agentName} changed their {attributes} to {values}", + "OTHER": "{agentName} changed {attributes} of {user} to {values}", + "DELETED": "{agentName} changed {attributes} of a deleted user to {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} signed in", + "SIGN_OUT": "{agentName} signed out" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} deleted conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/automation.json b/app/javascript/dashboard/i18n/locale/hi/automation.json new file mode 100644 index 0000000..43245a1 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automation", + "DESCRIPTION": "Automation can replace and streamline existing processes that require manual effort, such as adding labels and assigning conversations to the most suitable agent. This allows the team to focus on their strengths while reducing time spent on routine tasks.", + "LEARN_MORE": "Learn more about automation", + "HEADER_BTN_TXT": "Add Automation Rule", + "LOADING": "Fetching automation rules", + "ADD": { + "TITLE": "Add Automation Rule", + "SUBMIT": "Create", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "NAME": { + "LABEL": "Rule Name", + "PLACEHOLDER": "Enter rule name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Enter rule description", + "ERROR": "Description is required" + }, + "EVENT": { + "LABEL": "Event", + "PLACEHOLDER": "Please select one", + "ERROR": "Event is required" + }, + "CONDITIONS": { + "LABEL": "Conditions" + }, + "ACTIONS": { + "LABEL": "Actions" + } + }, + "CONDITION_BUTTON_LABEL": "Add Condition", + "ACTION_BUTTON_LABEL": "Add Action", + "API": { + "SUCCESS_MESSAGE": "Automation rule added successfully", + "ERROR_MESSAGE": "Could not able to create a automation rule, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Name", + "DESCRIPTION": "Description", + "ACTIVE": "Active", + "CREATED_ON": "Created on" + }, + "404": "No automation rules found" + }, + "DELETE": { + "TITLE": "Delete Automation Rule", + "SUBMIT": "Delete", + "CANCEL_BUTTON_TEXT": "Cancel", + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + }, + "API": { + "SUCCESS_MESSAGE": "Automation rule deleted successfully", + "ERROR_MESSAGE": "Could not able to delete a automation rule, Please try again later" + } + }, + "EDIT": { + "TITLE": "Edit Automation Rule", + "SUBMIT": "Update", + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "SUCCESS_MESSAGE": "Automation rule updated successfully", + "ERROR_MESSAGE": "Could not update automation rule, Please try again later" + } + }, + "CLONE": { + "TOOLTIP": "Clone", + "API": { + "SUCCESS_MESSAGE": "Automation cloned successfully", + "ERROR_MESSAGE": "Could not clone automation rule, Please try again later" + } + }, + "FORM": { + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Delete", + "CANCEL": "Cancel", + "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" + }, + "CONDITION": { + "DELETE_MESSAGE": "You need to have atleast one condition to save", + "CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes" + }, + "ACTION": { + "DELETE_MESSAGE": "You need to have atleast one action to save", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Enter your message here", + "TEAM_DROPDOWN_PLACEHOLDER": "Select teams", + "EMAIL_INPUT_PLACEHOLDER": "Enter email", + "URL_INPUT_PLACEHOLDER": "Enter URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Activate Automation Rule", + "DEACTIVATION_TITLE": "Deactivate Automation Rule", + "ACTIVATION_DESCRIPTION": "This action will activate the automation rule '{automationName}'. Are you sure you want to proceed?", + "DEACTIVATION_DESCRIPTION": "This action will deactivate the automation rule '{automationName}'. Are you sure you want to proceed?", + "ACTIVATION_SUCCESFUL": "Automation Rule Activated Successfully", + "DEACTIVATION_SUCCESFUL": "Automation Rule Deactivated Successfully", + "ACTIVATION_ERROR": "Could not Activate Automation, Please try again later", + "DEACTIVATION_ERROR": "Could not Deactivate Automation, Please try again later", + "CONFIRMATION_LABEL": "Yes", + "CANCEL_LABEL": "No" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Could not upload attachment, Please try again", + "LABEL_IDLE": "Upload Attachment", + "LABEL_UPLOADING": "Uploading...", + "LABEL_UPLOADED": "Successfully Uploaded", + "LABEL_UPLOAD_FAILED": "Upload Failed" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Value is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "NONE_OPTION": "None", + "EVENTS": { + "CONVERSATION_CREATED": "Conversation Created", + "CONVERSATION_UPDATED": "Conversation Updated", + "MESSAGE_CREATED": "Message Created", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Conversation Opened" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assign to Agent", + "ASSIGN_TEAM": "Assign a Team", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "SEND_EMAIL_TO_TEAM": "Send an Email to Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Mute Conversation", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_WEBHOOK_EVENT": "Send Webhook Event", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "CHANGE_PRIORITY": "Change Priority", + "ADD_SLA": "Add SLA", + "OPEN_CONVERSATION": "Open conversation" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "None", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Message Type", + "MESSAGE_CONTAINS": "Message Contains", + "EMAIL": "Email", + "INBOX": "Inbox", + "CONVERSATION_LANGUAGE": "Conversation Language", + "PHONE_NUMBER": "Phone Number", + "STATUS": "Status", + "BROWSER_LANGUAGE": "Browser Language", + "MAIL_SUBJECT": "Email Subject", + "COUNTRY_NAME": "Country", + "REFERER_LINK": "Referrer Link", + "ASSIGNEE_NAME": "Assignee", + "TEAM_NAME": "Team", + "PRIORITY": "Priority", + "LABELS": "Labels" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/bulkActions.json b/app/javascript/dashboard/i18n/locale/hi/bulkActions.json new file mode 100644 index 0000000..0c8d660 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", + "AGENT_SELECT_LABEL": "Select agent", + "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", + "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Go back", + "ASSIGN_LABEL": "Assign", + "YES": "Yes", + "SEARCH_INPUT_PLACEHOLDER": "Search", + "ASSIGN_AGENT_TOOLTIP": "Assign agent", + "ASSIGN_TEAM_TOOLTIP": "Assign team", + "ASSIGN_SUCCESFUL": "Conversations assigned successfully.", + "ASSIGN_FAILED": "Failed to assign conversations. Please try again.", + "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", + "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", + "AGENT_LIST_LOADING": "Loading agents", + "UPDATE": { + "CHANGE_STATUS": "Change status", + "SNOOZE_UNTIL": "Snooze", + "UPDATE_SUCCESFUL": "Conversation status updated successfully.", + "UPDATE_FAILED": "Failed to update conversations. Please try again." + }, + "LABELS": { + "ASSIGN_LABELS": "Assign labels", + "NO_LABELS_FOUND": "No labels found", + "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "ASSIGN_SUCCESFUL": "Labels assigned successfully.", + "ASSIGN_FAILED": "Failed to assign labels. Please try again." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Select team", + "NONE": "None", + "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", + "ASSIGN_SELECTED_TEAMS": "Assign selected team.", + "ASSIGN_SUCCESFUL": "Teams assigned successfully.", + "ASSIGN_FAILED": "Failed to assign team. Please try again." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/campaign.json b/app/javascript/dashboard/i18n/locale/hi/campaign.json new file mode 100644 index 0000000..2582d37 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Sent by", + "BOT": "Bot", + "FROM": "from", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "रद्द करें", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "SENT_BY": { + "LABEL": "Sent by", + "PLACEHOLDER": "Please select sender", + "ERROR": "Sender is required" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Please enter the URL", + "ERROR": "Please enter a valid URL" + }, + "TIME_ON_PAGE": { + "LABEL": "Time on page(Seconds)", + "PLACEHOLDER": "Please enter the time", + "ERROR": "Time on page is required" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "Enable campaign", + "TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "रद्द करें" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "रद्द करें", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "रद्द करें" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp अभियान", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "कोई WhatsApp अभियान उपलब्ध नहीं है", + "SUBTITLE": "अपने ग्राहकों तक सीधे पहुँचने के लिए एक WhatsApp अभियान शुरू करें। आसानी से ऑफ़र भेजें या घोषणाएँ करें। शुरू करने के लिए 'अभियान बनाएँ' पर क्लिक करें।" + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "WhatsApp अभियान बनाएं", + "CANCEL_BUTTON_TEXT": "Cancel", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "एक टेम्पलेट चुनें", + "INFO": "इस अभियान मे उपयोग करने के लिए टेम्पलेट चुनिए।", + "ERROR": "टेम्पलेट की अव्यश्कता है", + "PREVIEW_TITLE": "Process {templateName}", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLES_LABEL": "Variables", + "VARIABLE_PLACEHOLDER": "{variable} के लिए मूल्य दर्ज करें" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp अभियान सफलतापूर्वक बनाया गया", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Are you sure to delete?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "Delete", + "API": { + "SUCCESS_MESSAGE": "Campaign deleted successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/hi/cannedMgmt.json new file mode 100644 index 0000000..3bc60c5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Canned Responses", + "LEARN_MORE": "Learn more about canned responses", + "DESCRIPTION": "Canned Responses are pre-written reply templates that help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a canned response during a conversation. ", + "HEADER_BTN_TXT": "Add canned response", + "LOADING": "Fetching canned responses...", + "SEARCH_404": "There are no items matching this query.", + "LIST": { + "404": "There are no canned responses available in this account.", + "TITLE": "Manage canned responses", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "TABLE_HEADER": { + "SHORT_CODE": "Short code", + "CONTENT": "Content", + "ACTIONS": "Actions" + } + }, + "ADD": { + "TITLE": "Add canned response", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a short code.", + "ERROR": "Short Code is required." + }, + "CONTENT": { + "LABEL": "Message", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "Submit" + }, + "API": { + "SUCCESS_MESSAGE": "Canned response added successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "EDIT": { + "TITLE": "Edit canned response", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a shortcode.", + "ERROR": "Short code is required." + }, + "CONTENT": { + "LABEL": "Message", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "Submit" + }, + "BUTTON_TEXT": "Edit", + "API": { + "SUCCESS_MESSAGE": "Canned response is updated successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Canned response deleted successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, delete ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/chatlist.json b/app/javascript/dashboard/i18n/locale/hi/chatlist.json new file mode 100644 index 0000000..92e6763 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Fetching conversations", + "LOAD_MORE_CONVERSATIONS": "Load more conversations", + "EOF": "All conversations loaded 🎉", + "LIST": { + "404": "There are no active conversations in this group." + }, + "FAILED_TO_SEND": "Failed to send", + "TAB_HEADING": "Conversations", + "MENTION_HEADING": "Mentions", + "UNATTENDED_HEADING": "Unattended", + "SEARCH": { + "INPUT": "Search for People, Chats, Saved Replies .." + }, + "FILTER_ALL": "All", + "ASSIGNEE_TYPE_TABS": { + "me": "Mine", + "unassigned": "Unassigned", + "all": "All" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Open" + }, + "resolved": { + "TEXT": "Resolved" + }, + "pending": { + "TEXT": "Pending" + }, + "snoozed": { + "TEXT": "Snoozed" + }, + "all": { + "TEXT": "All" + } + }, + "VIEW_FILTER": "View", + "SORT_TOOLTIP_LABEL": "Sort conversations", + "CHAT_SORT": { + "STATUS": "Status", + "ORDER_BY": "Order by" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Created", + "OLDEST": "Created at:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Last activity:", + "ACTIVE": "Last activity" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Last activity: Oldest first" + }, + "last_activity_at_desc": { + "TEXT": "Last activity: Newest first" + }, + "created_at_desc": { + "TEXT": "Created at: Newest first" + }, + "created_at_asc": { + "TEXT": "Created at: Oldest first" + }, + "priority_desc": { + "TEXT": "Priority: Highest first" + }, + "priority_asc": { + "TEXT": "Priority: Lowest first" + }, + "waiting_since_asc": { + "TEXT": "Pending Response: Longest first" + }, + "waiting_since_desc": { + "TEXT": "Pending Response: Shortest first" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "has shared a url" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Sort conversation", + "DROPDOWN_TITLE": "Sort by", + "ITEMS": { + "LATEST": { + "NAME": "Last activity at", + "LABEL": "Last activity" + }, + "CREATED_AT": { + "NAME": "Created at", + "LABEL": "Created at" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Last user message at", + "LABEL": "Last message" + } + } + }, + "RECEIVED_VIA_EMAIL": "Received via email", + "VIEW_TWEET_IN_TWITTER": "View tweet in Twitter", + "REPLY_TO_TWEET": "Reply to this tweet", + "LINK_TO_STORY": "Go to instagram story", + "SENT": "Sent successfully", + "READ": "Read successfully", + "DELIVERED": "Delivered successfully", + "NO_MESSAGES": "No Messages", + "NO_CONTENT": "No content available", + "HIDE_QUOTED_TEXT": "Hide Quoted Text", + "SHOW_QUOTED_TEXT": "Show Quoted Text", + "MESSAGE_READ": "Read", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/companies.json b/app/javascript/dashboard/i18n/locale/hi/companies.json new file mode 100644 index 0000000..0d64a4a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "Name", + "DOMAIN": "Domain", + "CREATED_AT": "Created at", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/components.json b/app/javascript/dashboard/i18n/locale/hi/components.json new file mode 100644 index 0000000..748020e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} of {totalPages} pages" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "No results found.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} more" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "No results found.", + "SEARCHING": "Searching..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "रद्द करें", + "CONFIRM": "Confirm" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Search country", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Please select a dial code from the list" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Author is not available" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Learn more", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/contact.json b/app/javascript/dashboard/i18n/locale/hi/contact.json new file mode 100644 index 0000000..cd188d0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Not Available", + "EMAIL_ADDRESS": "Email Address", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "COPY_SUCCESSFUL": "Copied to clipboard successfully", + "COMPANY": "Company", + "LOCATION": "Location", + "BROWSER_LANGUAGE": "Browser Language", + "CONVERSATION_TITLE": "Conversation Details", + "VIEW_PROFILE": "View Profile", + "BROWSER": "Browser", + "OS": "Operating System", + "INITIATED_FROM": "Initiated from", + "INITIATED_AT": "Initiated at", + "IP_ADDRESS": "IP Address", + "CREATED_AT_LABEL": "Created", + "NEW_MESSAGE": "New message", + "CALL": "Call", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.", + "TITLE": "Previous Conversations" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Contact Labels", + "ERROR": "Couldn't update labels" + }, + "CONVERSATION": { + "TITLE": "Conversation Labels", + "ADD_BUTTON": "Add Labels" + }, + "LABEL_SELECT": { + "TITLE": "Add Labels", + "PLACEHOLDER": "Search labels", + "NO_RESULT": "No labels found", + "CREATE_LABEL": "Create new label" + } + }, + "MERGE_CONTACT": "Merge contact", + "CONTACT_ACTIONS": "Contact actions", + "MUTE_CONTACT": "Block Contact", + "UNMUTE_CONTACT": "Unblock Contact", + "MUTED_SUCCESS": "This contact is blocked successfully. You will not be notified of any future conversations.", + "UNMUTED_SUCCESS": "This contact is unblocked successfully.", + "SEND_TRANSCRIPT": "Send Transcript", + "EDIT_LABEL": "Edit", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Custom Attributes", + "CONTACT_LABELS": "Contact Labels", + "PREVIOUS_CONVERSATIONS": "Previous Conversations", + "NO_RECORDS_FOUND": "No attributes found" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Edit Contact", + "TITLE": "Edit contact", + "DESC": "Edit contact details" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Delete Contact", + "TITLE": "Delete contact", + "DESC": "Delete contact details", + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete", + "NO": "No, Keep" + }, + "API": { + "SUCCESS_MESSAGE": "Contact deleted successfully", + "ERROR_MESSAGE": "Could not delete contact. Please try again later." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Submit", + "CANCEL": "Cancel", + "AVATAR": { + "LABEL": "Contact Avatar" + }, + "NAME": { + "PLACEHOLDER": "Enter the full name of the contact", + "LABEL": "Full Name" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio of the contact", + "LABEL": "Bio" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address of the contact", + "LABEL": "Email Address", + "DUPLICATE": "This email address is in use for another contact.", + "ERROR": "Please enter a valid email address." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number of the contact", + "LABEL": "Phone Number", + "HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]", + "ERROR": "Phone number should be either empty or of E.164 format", + "DIAL_CODE_ERROR": "Please select a dial code from the list", + "DUPLICATE": "This phone number is in use for another contact." + }, + "LOCATION": { + "PLACEHOLDER": "Enter the location of the contact", + "LABEL": "Location" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Enter the company name", + "LABEL": "Company Name" + }, + "COUNTRY": { + "PLACEHOLDER": "Enter the country name", + "LABEL": "Country Name", + "SELECT_PLACEHOLDER": "Select", + "REMOVE": "Remove", + "SELECT_COUNTRY": "Select Country" + }, + "CITY": { + "PLACEHOLDER": "Enter the city name", + "LABEL": "City Name" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Enter the Facebook username", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Enter the Twitter username", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Enter the LinkedIn username", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Enter the Github username", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Contact avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later." + } + }, + "SUCCESS_MESSAGE": "Contact saved successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Start conversation", + "TITLE": "New conversation", + "DESC": "Start a new conversation by sending a new message.", + "NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.", + "FORM": { + "TO": { + "LABEL": "To" + }, + "INBOX": { + "LABEL": "Inbox", + "PLACEHOLDER": "Choose source inbox", + "ERROR": "Select an inbox" + }, + "SUBJECT": { + "LABEL": "Subject", + "PLACEHOLDER": "Subject", + "ERROR": "Subject can't be empty" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Write your message here", + "ERROR": "Message can't be empty" + }, + "ATTACHMENTS": { + "SELECT": "Choose files", + "HELP_TEXT": "Drag and drop files here or choose files to attach" + }, + "SUBMIT": "Send message", + "CANCEL": "Cancel", + "SUCCESS_MESSAGE": "Message sent!", + "GO_TO_CONVERSATION": "View", + "ERROR_MESSAGE": "Couldn't send! try again" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Social Profiles" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Add custom attribute", + "COPY_SUCCESSFUL": "Copied to clipboard successfully", + "SHOW_MORE": "Show all attributes", + "SHOW_LESS": "Show less attributes", + "ACTIONS": { + "COPY": "Copy attribute", + "DELETE": "Delete attribute", + "EDIT": "Edit attribute" + }, + "ADD": { + "TITLE": "Create custom attribute", + "DESC": "Add custom information to this contact." + }, + "FORM": { + "CREATE": "Add attribute", + "CANCEL": "Cancel", + "NAME": { + "LABEL": "Custom attribute name", + "PLACEHOLDER": "Eg: shopify id", + "ERROR": "Invalid custom attribute name" + }, + "VALUE": { + "LABEL": "Attribute value", + "PLACEHOLDER": "Eg: 11901 " + }, + "ADD": { + "TITLE": "Create new attribute ", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Select value", + "SEARCH_INPUT_PLACEHOLDER": "Search value", + "NO_RESULT": "No result found" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Valid value is required", + "INVALID_URL": "Invalid URL", + "INVALID_INPUT": "Invalid Input" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Merge contacts", + "DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact’ s attributes will take precedence.", + "PRIMARY": { + "TITLE": "Primary contact", + "HELP_LABEL": "To be deleted" + }, + "PARENT": { + "TITLE": "Contact to merge", + "PLACEHOLDER": "Search for a contact", + "HELP_LABEL": "To be kept" + }, + "SUMMARY": { + "TITLE": "Summary", + "DELETE_WARNING": "Contact of {primaryContactName} will be deleted.", + "ATTRIBUTE_WARNING": "Contact details of {primaryContactName} will be copied to {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": " Merge contacts", + "CANCEL": "Cancel", + "CHILD_CONTACT": { + "ERROR": "Select a child contact to merge" + }, + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Contacts", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "Active contacts", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "Message", + "SEND_MESSAGE": "Send message", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "Contacts" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Add contact", + "EXPORT_CONTACT": "Export contacts", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Save contact", + "EMAIL_ADDRESS_DUPLICATE": "This email address is in use for another contact.", + "PHONE_NUMBER_DUPLICATE": "This phone number is in use for another contact.", + "SUCCESS_MESSAGE": "Contact saved successfully", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "This contact is unblocked successfully", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Import contacts", + "DESCRIPTION": "Import contacts through a CSV file.", + "DOWNLOAD_LABEL": "Download a sample csv.", + "LABEL": "CSV File:", + "CHOOSE_FILE": "Choose file", + "CHANGE": "Change", + "CANCEL": "रद्द करें", + "IMPORT": "Import", + "SUCCESS_MESSAGE": "You will be notified via email when the import is complete.", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "EXPORT_CONTACT": { + "TITLE": "Export contacts", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Export", + "SUCCESS_MESSAGE": "Export is in progress, You will be notified via email when export file is ready to dowanlod.", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "Name", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "COMPANY": "Company", + "COUNTRY": "Country", + "CITY": "City", + "LAST_ACTIVITY": "Last activity", + "CREATED_AT": "Created at" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Do you want to save this filter?", + "CONFIRM": "Save filter", + "LABEL": "Name", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "Confirm Deletion", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "Yes, Delete", + "CANCEL": "No, Cancel", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "Name", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "COUNTRY": "Country", + "CITY": "City", + "CREATED_AT": "Created at", + "LAST_ACTIVITY": "Last activity", + "REFERER_LINK": "Referer link", + "BLOCKED": "Blocked", + "BLOCKED_TRUE": "True", + "BLOCKED_FALSE": "False", + "BUTTONS": { + "CLEAR_FILTERS": "Clear filters", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "Apply filters", + "ADD_FILTER": "Add filter" + }, + "TITLE": "Filter contacts", + "EDIT_SEGMENT": "Edit segment", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Clear filters" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "View details", + "EDIT_DETAILS_FORM": { + "TITLE": "Edit contact details", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "This email address is in use for another contact." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "This phone number is in use for another contact." + }, + "CITY": { + "PLACEHOLDER": "Enter the city name" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Enter the company name" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "This action is permanent and irreversible.", + "BUTTON": "Delete now" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "Delete contact", + "DELETE_DIALOG": { + "TITLE": "Confirm Deletion", + "DESCRIPTION": "Are you sure you want to delete this contact?", + "CONFIRM": "Yes, Delete", + "API": { + "SUCCESS_MESSAGE": "Contact deleted successfully", + "ERROR_MESSAGE": "Could not delete contact. Please try again later." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributes", + "HISTORY": "History", + "NOTES": "Notes", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "There are no previous conversations associated to this contact" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "Yes", + "NO": "No", + "TRIGGER": { + "SELECT": "Select value", + "INPUT": "Enter value" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "Valid value is required", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "Invalid URL", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "No attributes found", + "API": { + "SUCCESS_MESSAGE": "Attribute updated successfully", + "DELETE_SUCCESS_MESSAGE": "Attribute deleted successfully", + "UPDATE_ERROR": "Unable to update attribute. Please try again later", + "DELETE_ERROR": "Unable to delete attribute. Please try again later" + } + }, + "MERGE": { + "TITLE": "Merge contact", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Primary contact", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "To be deleted", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Search for a contact", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!", + "IS_SEARCHING": "Searching...", + "BUTTONS": { + "CANCEL": "रद्द करें", + "CONFIRM": "Merge contact" + } + }, + "NOTES": { + "PLACEHOLDER": "Add a note", + "WROTE": "wrote", + "YOU": "You", + "SAVE": "Save note", + "ADD_NOTE": "Add contact note", + "EXPAND": "Expand", + "COLLAPSE": "Collapse", + "NO_NOTES": "No notes, you can add notes from the contact details page.", + "EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "No contacts found in this account", + "SUBTITLE": "Start adding new contacts by clicking on the button below", + "BUTTON_LABEL": "Add contact", + "SEARCH_EMPTY_STATE_TITLE": "No contacts matches your search 🔍", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Assign Labels", + "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "Delete", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Delete contact" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "View", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "To:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Subject :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "Bcc:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "Bcc" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Write your message here..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Variables", + "BACK": "Go back", + "SEND_MESSAGE": "Send message" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Go back", + "SEND_MESSAGE": "Send message" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/contactFilters.json b/app/javascript/dashboard/i18n/locale/hi/contactFilters.json new file mode 100644 index 0000000..4c62f07 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filter Contacts", + "SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.", + "EDIT_CUSTOM_SEGMENT": "Edit Segment", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your segment.", + "ADD_NEW_FILTER": "Add Filter", + "CLEAR_ALL_FILTERS": "Clear All Filters", + "FILTER_DELETE_ERROR": "You should have atleast one filter to save", + "SUBMIT_BUTTON_LABEL": "Submit", + "UPDATE_BUTTON_LABEL": "Update Segment", + "CANCEL_BUTTON_LABEL": "Cancel", + "CLEAR_BUTTON_LABEL": "Clear Filters", + "EMPTY_VALUE_ERROR": "Value is required", + "SEGMENT_LABEL": "Segment Name", + "SEGMENT_QUERY_LABEL": "Segment Query", + "TOOLTIP_LABEL": "Filter contacts", + "QUERY_DROPDOWN_LABELS": { + "AND": "AND", + "OR": "OR" + }, + "OPERATOR_LABELS": { + "equal_to": "Equal to", + "not_equal_to": "Not equal to", + "contains": "Contains", + "does_not_contain": "Does not contain", + "is_present": "Is present", + "is_not_present": "Is not present", + "is_greater_than": "Is greater than", + "is_lesser_than": "Is lesser than", + "days_before": "Is x days before" + }, + "ERRORS": { + "VALUE_REQUIRED": "Value is required" + }, + "ATTRIBUTES": { + "NAME": "Name", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "CITY": "City", + "COUNTRY": "Country", + "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_TEXT": "Text", + "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Created At", + "LAST_ACTIVITY": "Last Activity", + "REFERER_LINK": "Referrer link", + "BLOCKED": "Blocked", + "LABELS": "Labels" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard Filters", + "ADDITIONAL_FILTERS": "Additional Filters", + "CUSTOM_ATTRIBUTES": "Custom Attributes" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/contentTemplates.json b/app/javascript/dashboard/i18n/locale/hi/contentTemplates.json new file mode 100644 index 0000000..79c2c8c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "NO_CONTENT": "No content", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Text" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Back", + "SEND_MESSAGE_BUTTON": "Send Message" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/conversation.json b/app/javascript/dashboard/i18n/locale/hi/conversation.json new file mode 100644 index 0000000..59ad61c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Please select a conversation from left pane", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", + "404": "Sorry, we cannot find the conversation. Please try again", + "SWITCH_VIEW_LAYOUT": "Switch the layout", + "DASHBOARD_APP_TAB_MESSAGES": "Messages", + "UNVERIFIED_SESSION": "The identity of this user is not verified", + "NO_MESSAGE_1": "Uh oh! Looks like there are no messages from customers in your inbox.", + "NO_MESSAGE_2": " to send a message to your page!", + "NO_INBOX_1": "Hola! Looks like you haven't added any inboxes yet.", + "NO_INBOX_2": " to get started", + "NO_INBOX_AGENT": "Uh Oh! Looks like you are not part of any inbox. Please contact your administrator", + "SEARCH_MESSAGES": "Search for messages in conversations", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "to open command menu", + "KEYBOARD_SHORTCUTS": "to view keyboard shortcuts" + }, + "SEARCH": { + "TITLE": "Search messages", + "RESULT_TITLE": "Search Results", + "LOADING_MESSAGE": "Crunching data...", + "PLACEHOLDER": "Type any text to search messages", + "NO_MATCHING_RESULTS": "No results found." + }, + "UNREAD_MESSAGES": "Unread Messages", + "UNREAD_MESSAGE": "Unread Message", + "CLICK_HERE": "Click here", + "LOADING_INBOXES": "Loading inboxes", + "LOADING_CONVERSATIONS": "Loading Conversations", + "CANNOT_REPLY": "You cannot reply due to", + "24_HOURS_WINDOW": "24 hour message window restriction", + "48_HOURS_WINDOW": "48 hour message window restriction", + "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours", + "NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?", + "ASSIGN_TO_ME": "Assign to me", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hour message window restriction", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "You are replying to:", + "REMOVE_SELECTION": "Remove Selection", + "DOWNLOAD": "Download", + "UNKNOWN_FILE_TYPE": "Unknown File", + "SAVE_CONTACT": "Save Contact", + "NO_CONTENT": "No content to display", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} has shared a contact", + "LOCATION": "{sender} has shared a location", + "FILE": "{sender} has shared a file", + "MEETING": "{sender} has started a meeting" + }, + "UPLOADING_ATTACHMENTS": "Uploading attachments...", + "REPLIED_TO_STORY": "Replied to your story", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", + "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", + "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", + "NO_RESPONSE": "No response", + "RESPONSE": "Response", + "RATING_TITLE": "Rating", + "FEEDBACK_TITLE": "Feedback", + "REPLY_MESSAGE_NOT_FOUND": "Message not available", + "CARD": { + "SHOW_LABELS": "Show labels", + "HIDE_LABELS": "Hide labels" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "Resolve", + "REOPEN_ACTION": "Reopen", + "OPEN_ACTION": "Open", + "MORE_ACTIONS": "More actions", + "OPEN": "More", + "CLOSE": "Close", + "DETAILS": "details", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", + "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "missed", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Mark as pending", + "SNOOZE_UNTIL": "Snooze", + "SNOOZE": { + "TITLE": "Snooze until", + "NEXT_REPLY": "Next reply", + "TOMORROW": "Tomorrow", + "NEXT_WEEK": "Next week" + } + }, + "MENTION": { + "AGENTS": "Agents", + "TEAMS": "Teams" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Snooze until", + "APPLY": "Snooze", + "CANCEL": "Cancel" + }, + "PRIORITY": { + "TITLE": "Priority", + "OPTIONS": { + "NONE": "None", + "URGENT": "Urgent", + "HIGH": "High", + "MEDIUM": "Medium", + "LOW": "Low" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "None", + "INPUT_PLACEHOLDER": "Select priority", + "NO_RESULTS": "No results found", + "SUCCESSFUL": "Changed priority of conversation id {conversationId} to {priority}", + "FAILED": "Couldn't change priority. Please try again." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Delete conversation #{conversationId}", + "DESCRIPTION": "Are you sure you want to delete this conversation?", + "CONFIRM": "Delete" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Mark as pending", + "RESOLVED": "Mark as resolved", + "MARK_AS_UNREAD": "Mark as unread", + "MARK_AS_READ": "Mark as read", + "REOPEN": "Reopen conversation", + "SNOOZE": { + "TITLE": "Snooze", + "NEXT_REPLY": "Until next reply", + "TOMORROW": "Until tomorrow", + "NEXT_WEEK": "Until next week" + }, + "ASSIGN_AGENT": "Assign agent", + "ASSIGN_LABEL": "Assign label", + "AGENTS_LOADING": "Loading agents...", + "ASSIGN_TEAM": "Assign team", + "DELETE": "Delete conversation", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Conversation id {conversationId} assigned to \"{agentName}\"", + "FAILED": "Couldn't assign agent. Please try again." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Couldn't assign label. Please try again." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Assigned team \"{team}\" to conversation id {conversationId}", + "FAILED": "Couldn't assign team. Please try again." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Message signature", + "ENABLE_SIGN_TOOLTIP": "Enable signature", + "DISABLE_SIGN_TOOLTIP": "Disable signature", + "MSG_INPUT": "Shift + enter for new line. Start with '/' to select a Canned Response.", + "PRIVATE_MSG_INPUT": "Shift + enter for new line. This will be visible only to Agents", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.", + "CLICK_HERE": "Click here to update", + "WHATSAPP_TEMPLATES": "Whatsapp Templates" + }, + "REPLYBOX": { + "REPLY": "Reply", + "PRIVATE_NOTE": "Private Note", + "SEND": "Send", + "CREATE": "Add Note", + "INSERT_READ_MORE": "Read more", + "DISMISS_REPLY": "Dismiss reply", + "REPLYING_TO": "Replying to:", + "TIP_EMOJI_ICON": "Show emoji selector", + "TIP_ATTACH_ICON": "Attach files", + "TIP_AUDIORECORDER_ICON": "Record audio", + "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", + "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "DRAG_DROP": "Drag and drop here to attach", + "START_AUDIO_RECORDING": "Start audio recording", + "STOP_AUDIO_RECORDING": "Stop audio recording", + "": "", + "EMAIL_HEAD": { + "TO": "TO", + "ADD_BCC": "Add bcc", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + }, + "BCC": { + "LABEL": "BCC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Undefined variables", + "MESSAGE": "You have {undefinedVariablesCount} undefined variables in your message: {undefinedVariables}. Would you like to send the message anyway?", + "CONFIRM": { + "YES": "Send", + "CANCEL": "Cancel" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "Private Note: Only visible to you and your team", + "CHANGE_STATUS": "Conversation status changed", + "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_AGENT": "Conversation Assignee changed", + "CHANGE_AGENT_FAILED": "Assignee change failed", + "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", + "ASSIGN_LABEL_FAILED": "Label assignment failed", + "CHANGE_TEAM": "Conversation team changed", + "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", + "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", + "MESSAGE_ERROR": "Unable to send this message, please try again later", + "SENT_BY": "Sent by:", + "BOT": "Bot", + "SEND_FAILED": "Couldn't send message! Try again", + "TRY_AGAIN": "retry", + "ASSIGNMENT": { + "SELECT_AGENT": "Select Agent", + "REMOVE": "Remove", + "ASSIGN": "Assign" + }, + "CONTEXT_MENU": { + "COPY": "Copy", + "REPLY_TO": "Reply to this message", + "DELETE": "Delete", + "CREATE_A_CANNED_RESPONSE": "Add to canned responses", + "TRANSLATE": "Translate", + "COPY_PERMALINK": "Copy link to the message", + "LINK_COPIED": "Message URL copied to the clipboard", + "DELETE_CONFIRMATION": { + "TITLE": "Are you sure you want to delete this message?", + "MESSAGE": "You cannot undo this action", + "DELETE": "Delete", + "CANCEL": "Cancel" + } + }, + "SIDEBAR": { + "CONTACT": "Contact", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Send conversation transcript", + "DESC": "Send a copy of the conversation transcript to the specified email address", + "SUBMIT": "Submit", + "CANCEL": "Cancel", + "SEND_EMAIL_SUCCESS": "The chat transcript was sent successfully", + "SEND_EMAIL_ERROR": "There was an error, please try again", + "FORM": { + "SEND_TO_CONTACT": "Send the transcript to the customer", + "SEND_TO_AGENT": "Send the transcript to the assigned agent", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Send the transcript to another email address", + "EMAIL": { + "PLACEHOLDER": "Enter an email address", + "ERROR": "Please enter a valid email address" + } + } + }, + "ONBOARDING": { + "TITLE": "Hey 👋, Welcome to {installationName}!", + "DESCRIPTION": "Thanks for signing up. We want you to get the most out of {installationName}. Here are a few things you can do in {installationName} to make the experience delightful.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "Read our latest updates", + "ALL_CONVERSATION": { + "TITLE": "All your conversations in one place", + "DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status.", + "NEW_LINK": "Click here to create an inbox" + }, + "TEAM_MEMBERS": { + "TITLE": "Invite your team members", + "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.", + "NEW_LINK": "Click here to invite a team member" + }, + "LABELS": { + "TITLE": "Organize conversations with labels", + "DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.", + "NEW_LINK": "Click here to create tags" + }, + "CANNED_RESPONSES": { + "TITLE": "Create canned responses", + "DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.", + "NEW_LINK": "Click here to create a canned response" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Assigned Agent", + "SELF_ASSIGN": "Assign to me", + "TEAM_LABEL": "Assigned Team", + "SELECT": { + "PLACEHOLDER": "None" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Contact Details", + "CONVERSATION_ACTIONS": "Conversation Actions", + "CONVERSATION_LABELS": "Conversation Labels", + "CONVERSATION_INFO": "Conversation Information", + "CONTACT_NOTES": "Contact Notes", + "CONTACT_ATTRIBUTES": "Contact Attributes", + "PREVIOUS_CONVERSATION": "Previous Conversations", + "MACROS": "Macros", + "LINEAR_ISSUES": "Linked Linear Issues", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "Pending", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Create attribute", + "NO_RECORDS_FOUND": "No attributes found", + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "ADD": { + "TITLE": "Add", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + } + }, + "EMAIL_HEADER": { + "FROM": "From", + "TO": "To", + "BCC": "Bcc", + "CC": "Cc", + "SUBJECT": "Subject", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Participating", + "SIDEBAR_TITLE": "Conversation participants", + "NO_RECORDS_FOUND": "No results found", + "ADD_PARTICIPANTS": "Select participants", + "REMANING_PARTICIPANTS_TEXT": "+{count} others", + "REMANING_PARTICIPANT_TEXT": "+{count} other", + "TOTAL_PARTICIPANTS_TEXT": "{count} people are participating.", + "TOTAL_PARTICIPANT_TEXT": "{count} person is participating.", + "NO_PARTICIPANTS_TEXT": "No one is participating!.", + "WATCH_CONVERSATION": "Join conversation", + "YOU_ARE_WATCHING": "You are participating", + "API": { + "ERROR_MESSAGE": "Could not update, try again!", + "SUCCESS_MESSAGE": "Participants updated!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "View translated content", + "DESC": "You can view the translated content in each langauge.", + "ORIGINAL_CONTENT": "Original Content", + "TRANSLATED_CONTENT": "Translated Content", + "NO_TRANSLATIONS_AVAILABLE": "No translations are available for this content" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/csatMgmt.json b/app/javascript/dashboard/i18n/locale/hi/csatMgmt.json new file mode 100644 index 0000000..9e16dc2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Rate your conversation", + "PLACEHOLDER": "Tell us more...", + "RATINGS": { + "POOR": "😞 Poor", + "FAIR": "😑 Fair", + "AVERAGE": "😐 Average", + "GOOD": "😀 Good", + "EXCELLENT": "😍 Excellent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/customRole.json b/app/javascript/dashboard/i18n/locale/hi/customRole.json new file mode 100644 index 0000000..1f39742 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Custom Roles", + "LEARN_MORE": "Learn more about custom roles", + "DESCRIPTION": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "HEADER_BTN_TXT": "Add custom role", + "LOADING": "Fetching custom roles...", + "SEARCH_404": "There are no items matching this query.", + "PAYWALL": { + "TITLE": "Upgrade to create custom roles", + "AVAILABLE_ON": "The custom role feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The custom role feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Manage custom roles", + "DESC": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "TABLE_HEADER": { + "NAME": "Name", + "DESCRIPTION": "Description", + "PERMISSIONS": "Permissions", + "ACTIONS": "Actions" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "Name is required." + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "Description is required." + }, + "PERMISSIONS": { + "LABEL": "Permissions", + "ERROR": "Permissions are required." + }, + "CANCEL_BUTTON_TEXT": "रद्द करें", + "API": { + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "ADD": { + "TITLE": "Add custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Submit", + "API": { + "SUCCESS_MESSAGE": "Custom role added successfully." + } + }, + "EDIT": { + "BUTTON_TEXT": "Edit", + "TITLE": "Edit custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Update", + "API": { + "SUCCESS_MESSAGE": "Custom role updated successfully." + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Custom role deleted successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, delete ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/datePicker.json b/app/javascript/dashboard/i18n/locale/hi/datePicker.json new file mode 100644 index 0000000..c7ef068 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Apply", + "CLEAR_BUTTON": "Clear", + "DATE_RANGE_INPUT": { + "START": "Start Date", + "END": "End Date" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "DATE RANGE", + "LAST_7_DAYS": "Last 7 days", + "LAST_30_DAYS": "Last 30 days", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_RANGE": "Custom date range" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/emoji.json b/app/javascript/dashboard/i18n/locale/hi/emoji.json new file mode 100644 index 0000000..d5b96f0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Search emojis", + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/general.json b/app/javascript/dashboard/i18n/locale/hi/general.json new file mode 100644 index 0000000..283cf79 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Showing {firstIndex}-{lastIndex} of {totalCount} items", + "PHONE_INPUT": { + "PLACEHOLDER": "Search", + "EMPTY_STATE": "No results found" + }, + "CLOSE": "Close", + "BETA": "Beta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/generalSettings.json b/app/javascript/dashboard/i18n/locale/hi/generalSettings.json new file mode 100644 index 0000000..5f278fe --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.", + "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.", + "AGENTS": "आप एजेंट लिमिट पार कर चुके है।आपका प्लान {allowedAgents} एजेंट्स की अनुमति देता है।", + "NON_ADMIN": "कृपया प्लान को अपग्रेड करने और सभी सुविधाओं का उपयोग जारी रखने के लिए अपने व्यवस्थापक से संपर्क करें।" + }, + "TITLE": "Account settings", + "SUBMIT": "Update settings", + "BACK": "Back", + "DISMISS": "Dismiss", + "UPDATE": { + "ERROR": "Could not update settings, try again!", + "SUCCESS": "Successfully updated account settings" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "अपना खाता हटाएं", + "NOTE": "एक बार जब आप अपना खाता हटा देंगे, तो आपका सारा डेटा हटा दिया जाएगा।", + "BUTTON_TEXT": "अपना खाता हटाएं", + "CONFIRM": { + "TITLE": "खाता हटाएं", + "MESSAGE": "आपका खाता हटाना अपरिवर्तनीय है। नीचे अपने खाते का नाम दर्ज करे ये पुष्टि करने के लिए की आप इसे निरंतर रूप से ख़त्म करना चाहते है।", + "BUTTON_TEXT": "Delete", + "DISMISS": "Cancel", + "PLACE_HOLDER": "Please type {accountName} to confirm" + }, + "SUCCESS": "Account marked for deletion", + "FAILURE": "Could not delete account, try again!", + "SCHEDULED_DELETION": { + "TITLE": "Account Scheduled for Deletion", + "MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.", + "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.", + "CLEAR_BUTTON": "Cancel Scheduled Deletion" + } + }, + "FORM": { + "ERROR": "Please fix form errors", + "GENERAL_SECTION": { + "TITLE": "General settings", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "Account ID", + "NOTE": "This ID is required if you are building an API based integration" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.", + "DURATION": { + "LABEL": "Inactivity duration", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Preferences", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "Account name", + "PLACEHOLDER": "Your account name", + "ERROR": "Please enter a valid account name" + }, + "LANGUAGE": { + "LABEL": "Site language", + "PLACEHOLDER": "Your account name", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Incoming Email Domain", + "PLACEHOLDER": "The domain where you will receive the emails", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "Support Email", + "PLACEHOLDER": "Your company's support email", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclude unattended conversations", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a conversation should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "Update", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "Conversation continuity with emails is enabled for your account.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "You can receive emails in your custom domain now." + } + }, + "UPDATE_CHATWOOT": "An update {latestChatwootVersion} for Chatwoot is available. Please update your instance.", + "LEARN_MORE": "Learn more", + "PAYMENT_PENDING": "Your payment is pending. Please update your payment information to continue using Chatwoot", + "UPGRADE": "Upgrade to continue using Chatwoot", + "LIMITS_UPGRADE": "Your account has exceeded the usage limits, please upgrade your plan to continue using Chatwoot", + "OPEN_BILLING": "Open billing" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Press enter to select", + "ENTER_TO_REMOVE": "Press enter to remove", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "Select one", + "SELECT": "Select" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Notifications", + "MARK_ALL_DONE": "Mark All Done", + "DELETE_TITLE": "deleted", + "UNREAD_NOTIFICATION": { + "TITLE": "Unread Notifications", + "ALL_NOTIFICATIONS": "View all notifications", + "LOADING_UNREAD_MESSAGE": "Loading unread notifications...", + "EMPTY_MESSAGE": "You have no unread notifications" + }, + "LIST": { + "LOADING_MESSAGE": "Loading notifications...", + "404": "No Notifications", + "TABLE_HEADER": [ + "Name", + "Phone Number", + "Conversations", + "Last Contacted" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "New conversation", + "conversation_assignment": "Conversation Assigned", + "assigned_conversation_new_message": "New Message", + "participating_conversation_new_message": "New Message", + "conversation_mention": "Mention", + "sla_missed_first_response": "SLA Missed", + "sla_missed_next_response": "SLA Missed", + "sla_missed_resolution": "SLA Missed" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Offline", + "RECONNECTING": "Reconnecting...", + "RECONNECT_SUCCESS": "Reconnected" + }, + "BUTTON": { + "REFRESH": "Refresh" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Search or jump to", + "SECTIONS": { + "GENERAL": "General", + "REPORTS": "Reports", + "CONVERSATION": "Conversation", + "BULK_ACTIONS": "Bulk Actions", + "CHANGE_ASSIGNEE": "Change Assignee", + "CHANGE_PRIORITY": "Change Priority", + "CHANGE_TEAM": "Change Team", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "ADD_LABEL": "Add label to the conversation", + "REMOVE_LABEL": "Remove label from the conversation", + "SETTINGS": "Settings", + "AI_ASSIST": "AI Assist", + "APPEARANCE": "Appearance", + "SNOOZE_NOTIFICATION": "Snooze Notification" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview", + "GO_TO_CONVERSATION_REPORTS": "Go to Conversation Reports", + "GO_TO_AGENT_REPORTS": "Go to Agent Reports", + "GO_TO_LABEL_REPORTS": "Go to Label Reports", + "GO_TO_INBOX_REPORTS": "Go to Inbox Reports", + "GO_TO_TEAM_REPORTS": "Go to Team Reports", + "GO_TO_SETTINGS_AGENTS": "Go to Agent Settings", + "GO_TO_SETTINGS_TEAMS": "Go to Team Settings", + "GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings", + "GO_TO_SETTINGS_LABELS": "Go to Label Settings", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings", + "GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings", + "GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings", + "GO_TO_SETTINGS_PROFILE": "Go to Profile Settings", + "GO_TO_NOTIFICATIONS": "Go to Notifications", + "ADD_LABELS_TO_CONVERSATION": "Add label to the conversation", + "ASSIGN_AN_AGENT": "Assign an agent", + "AI_ASSIST": "AI Assist", + "ASSIGN_PRIORITY": "Assign priority", + "ASSIGN_A_TEAM": "Assign a team", + "MUTE_CONVERSATION": "Mute conversation", + "UNMUTE_CONVERSATION": "Unmute conversation", + "REMOVE_LABEL_FROM_CONVERSATION": "Remove label from the conversation", + "REOPEN_CONVERSATION": "Reopen conversation", + "RESOLVE_CONVERSATION": "Resolve conversation", + "SEND_TRANSCRIPT": "Send an email transcript", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "UNTIL_NEXT_REPLY": "Until next reply", + "UNTIL_NEXT_WEEK": "Until next week", + "UNTIL_TOMORROW": "Until tomorrow", + "UNTIL_NEXT_MONTH": "Until next month", + "AN_HOUR_FROM_NOW": "Until an hour from now", + "UNTIL_CUSTOM_TIME": "Custom...", + "CHANGE_APPEARANCE": "Change Appearance", + "LIGHT_MODE": "Light", + "DARK_MODE": "Dark", + "SYSTEM_MODE": "System", + "SNOOZE_NOTIFICATION": "Snooze Notification" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Loading Dashboard App..." + }, + "COMMON": { + "OR": "Or", + "CLICK_HERE": "click here" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/helpCenter.json b/app/javascript/dashboard/i18n/locale/hi/helpCenter.json new file mode 100644 index 0000000..328ab88 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Help Center", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "Create Portal" + }, + "HEADER": { + "FILTER": "Filter by", + "SORT": "Sort by", + "LOCALE": "Locale", + "SETTINGS_BUTTON": "Settings", + "NEW_BUTTON": "New Article", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Published", + "DRAFT": "Draft", + "ARCHIVED": "Archived" + }, + "TITLES": { + "ALL_ARTICLES": "All Articles", + "MINE": "My Articles", + "DRAFT": "Draft Articles", + "ARCHIVED": "Archived Articles" + }, + "LOCALE_SELECT": { + "TITLE": "Select locale", + "PLACEHOLDER": "Select locale", + "NO_RESULT": "No locale found", + "SEARCH_PLACEHOLDER": "Search locale" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "All Articles", + "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", + "PREVIEW": "Preview", + "ADD_TRANSLATION": "Add translation", + "OPEN_SIDEBAR": "Open sidebar", + "CLOSE_SIDEBAR": "Close sidebar", + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Upload image", + "UPLOADING": "Uploading...", + "SUCCESS": "Image uploaded successfully", + "ERROR": "Error while uploading image", + "UN_AUTHORIZED_ERROR": "You are not authorized to upload images", + "ERROR_FILE_SIZE": "Image size should be less than {size}MB", + "ERROR_FILE_FORMAT": "Image format should be jpg, jpeg or png", + "ERROR_FILE_DIMENSIONS": "Image dimensions should be less than 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Article Settings", + "FORM": { + "CATEGORY": { + "LABEL": "Category", + "TITLE": "Select category", + "PLACEHOLDER": "Select category", + "NO_RESULT": "No category found", + "SEARCH_PLACEHOLDER": "Search category" + }, + "AUTHOR": { + "LABEL": "Author", + "TITLE": "Select author", + "PLACEHOLDER": "Select author", + "NO_RESULT": "No authors found", + "SEARCH_PLACEHOLDER": "Search author" + }, + "META_TITLE": { + "LABEL": "Meta title", + "PLACEHOLDER": "Add a meta title" + }, + "META_DESCRIPTION": { + "LABEL": "Meta description", + "PLACEHOLDER": "Add your meta description for better SEO results..." + }, + "META_TAGS": { + "LABEL": "Meta tags", + "PLACEHOLDER": "Add meta tags separated by comma..." + } + }, + "BUTTONS": { + "ARCHIVE": "Archive article", + "DELETE": "Delete article" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Uncategorized", + "SEARCH_RESULTS": "Search results for {query}", + "EMPTY_TEXT": "Search for articles to insert into replies.", + "SEARCH_LOADER": "Searching...", + "INSERT_ARTICLE": "Insert", + "NO_RESULT": "No articles found", + "COPY_LINK": "Copy article link to clipboard", + "OPEN_LINK": "Open article in new tab", + "PREVIEW_LINK": "Preview article" + }, + "PORTAL": { + "HEADER": "Portals", + "DEFAULT": "Default", + "NEW_BUTTON": "New Portal", + "ACTIVE_BADGE": "active", + "CHOOSE_LOCALE_LABEL": "Choose a locale", + "LOADING_MESSAGE": "Loading portals...", + "ARTICLES_LABEL": "articles", + "NO_PORTALS_MESSAGE": "There are no available portals", + "ADD_NEW_LOCALE": "Add a new locale", + "POPOVER": { + "TITLE": "Portals", + "PORTAL_SETTINGS": "Portal settings", + "SUBTITLE": "You have multiple portals and can have different locales for each portal.", + "CANCEL_BUTTON_LABEL": "Cancel", + "CHOOSE_LOCALE_BUTTON": "Choose Locale" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "articles", + "ADD": "Add locale", + "VISIT": "Visit site", + "SETTINGS": "Settings", + "DELETE": "Delete" + }, + "PORTAL_CONFIG": { + "TITLE": "Portal Configurations", + "ITEMS": { + "NAME": "Name", + "DOMAIN": "Custom domain", + "SLUG": "Slug", + "TITLE": "Portal title", + "THEME": "Theme color", + "SUB_TEXT": "Portal sub text" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Available locales", + "TABLE": { + "NAME": "Locale name", + "CODE": "Locale code", + "ARTICLE_COUNT": "No. of articles", + "CATEGORIES": "No. of categories", + "SWAP": "Swap", + "DELETE": "Delete", + "DEFAULT_LOCALE": "Default" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Name", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Help center information", + "BODY": "Basic information about portal" + }, + "CUSTOMIZATION": { + "TITLE": "Help center customization", + "BODY": "Customize portal" + }, + "FINISH": { + "TITLE": "Voila! 🎉", + "BODY": "You're all set!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Back", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Create Portal", + "TITLE": "Help center information", + "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Portal customisation", + "TITLE": "Help center customization", + "UPDATE_PORTAL_BUTTON": "Update portal settings" + }, + "FINISH_PAGE": { + "TITLE": "Voila!🎉 You're all set up!", + "MESSAGE": "You can now see this created portal on your all portals page.", + "FINISH": "Go to all portals page" + } + }, + "LOGO": { + "LABEL": "Logo", + "UPLOAD_BUTTON": "Upload logo", + "HELP_TEXT": "This logo will be displayed on the portal header.", + "IMAGE_UPLOAD_SUCCESS": "Logo uploaded successfully", + "IMAGE_UPLOAD_ERROR": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Error while deleting logo" + }, + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Portal name", + "HELP_TEXT": "The name will be used in the public facing portal internally.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug for urls", + "ERROR": "Slug is required" + }, + "DOMAIN": { + "LABEL": "Custom Domain", + "PLACEHOLDER": "Portal custom domain", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}", + "ERROR": "Enter a valid domain URL" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home Page Link", + "PLACEHOLDER": "Portal home page link", + "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}", + "ERROR": "Enter a valid home page URL" + }, + "THEME_COLOR": { + "LABEL": "Portal theme color", + "HELP_TEXT": "This color will show as the theme color for the portal." + }, + "PAGE_TITLE": { + "LABEL": "Page Title", + "PLACEHOLDER": "Portal page title", + "HELP_TEXT": "The page title will be used in the public facing portal.", + "ERROR": "Page title is required" + }, + "HEADER_TEXT": { + "LABEL": "Header Text", + "PLACEHOLDER": "Portal header text", + "HELP_TEXT": "The Portal header text will be used in the public facing portal.", + "ERROR": "Portal header text is required" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", + "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", + "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Loading articles...", + "404": "No articles matches your search 🔍", + "NO_ARTICLES": "There are no available articles", + "HEADERS": { + "TITLE": "Title", + "CATEGORY": "Category", + "READ_COUNT": "Views", + "STATUS": "Status", + "LAST_EDITED": "Last edited" + }, + "COLUMNS": { + "BY": "by", + "AUTHOR_NOT_AVAILABLE": "Author is not available" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Loading article...", + "TITLE_PLACEHOLDER": "Article title goes here", + "CONTENT_PLACEHOLDER": "Write your article here", + "API": { + "ERROR": "Error while saving article" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article published successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Error while drafting article", + "SUCCESS": "Article drafted successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Yes, Delete", + "NO": "No, Keep it" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Search for articles" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Create a category", + "SUB_TITLE": "The category will be used in the public facing portal to categorize articles.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Create category", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Search articles", + "PLACEHOLDER": "Search articles", + "NO_RESULT": "No articles found", + "SEARCHING": "Searching...", + "SEARCH_BUTTON": "Search", + "INSERT_ARTICLE": "Insert link", + "IFRAME_ERROR": "URL is empty or invalid. Unable to display content.", + "OPEN_ARTICLE_SEARCH": "Insert article from Help Center", + "SUCCESS_ARTICLE_INSERTED": "Article inserted successfully", + "PREVIEW_LINK": "Preview article", + "CANCEL": "Close", + "BACK": "Back", + "BACK_RESULTS": "Back to results" + }, + "UPGRADE_PAGE": { + "TITLE": "Help Center", + "DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Upgrade your subscription to enable this feature.", + "SELF_HOSTED_DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Please contact your administrator to enable this feature.", + "BUTTON": { + "LEARN_MORE": "Learn more", + "UPGRADE": "Upgrade" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Multiple portals", + "DESCRIPTION": "Create multiple help center portals for different products using the same account." + }, + "LOCALES": { + "TITLE": "Full support for locales", + "DESCRIPTION": "Localize the portal in your language. We support all locales and allow translations for every article." + }, + "SEO": { + "TITLE": "SEO-friendly design", + "DESCRIPTION": "Customize your meta tags to improve your visibility on search engines with our SEO-friendly pages." + }, + "API": { + "TITLE": "Full API support", + "DESCRIPTION": "Use the portal as a headless CMS with third party front-end frameworks using our APIs." + } + } + }, + "LOADING": "Loading...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} view | {count} views", + "DROPDOWN_MENU": { + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "DELETE": "Delete" + }, + "STATUS": { + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "UNCATEGORISED": "Uncategorised" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "All articles", + "MINE": "मेरा", + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "ALL": "All categories" + }, + "LOCALE": { + "ALL": "All locales" + }, + "NEW_ARTICLE": "New article" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Write an article", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "New article" + }, + "MINE": { + "TITLE": "You haven't written any articles here", + "SUBTITLE": "All articles written by you show up here for quick access." + }, + "DRAFT": { + "TITLE": "There are no articles in drafts", + "SUBTITLE": "Draft articles will appear here" + }, + "PUBLISHED": { + "TITLE": "There are no published articles", + "SUBTITLE": "Published articles will appear here" + }, + "ARCHIVED": { + "TITLE": "There are no articles in the archive", + "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages" + }, + "CATEGORY": { + "TITLE": "There are no articles in this category", + "SUBTITLE": "Articles in this category will appear here" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "New category", + "EDIT_CATEGORY": "Edit category", + "CATEGORIES_COUNT": "{n} category | {n} categories", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categories ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "No categories found", + "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + }, + "HEADER": { + "CREATE": "Create category", + "EDIT": "Edit category", + "DESCRIPTION": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale" + }, + "FORM": { + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "ERROR": "Slug is required", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + } + }, + "BUTTONS": { + "CREATE": "Create", + "EDIT": "Update", + "CANCEL": "रद्द करें" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "No locales available | {n} locale | {n} locales", + "NEW_LOCALE_BUTTON_TEXT": "New locale", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles", + "CATEGORIES_COUNT": "{count} category | {count} categories", + "DEFAULT": "Default", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Make default", + "DELETE": "Delete" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Add a new locale", + "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", + "COMBOBOX": { + "PLACEHOLDER": "Select locale..." + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "PREVIEW": "Preview", + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "BACK_TO_ARTICLES": "Back to articles" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "More properties", + "UNCATEGORIZED": "Uncategorized", + "EDITOR_PLACEHOLDER": "Write something..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Article properties", + "META_DESCRIPTION": "Meta description", + "META_DESCRIPTION_PLACEHOLDER": "Add meta description", + "META_TITLE": "Meta title", + "META_TITLE_PLACEHOLDER": "Add meta title", + "META_TAGS": "Meta tags", + "META_TAGS_PLACEHOLDER": "Add meta tags" + }, + "API": { + "ERROR": "Error while saving article" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "New portal", + "PORTALS": "Portals", + "CREATE_PORTAL": "Create and manage multiple portals", + "ARTICLES": "articles", + "DOMAIN": "domain", + "PORTAL_NAME": "Portal name" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Create new portal", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "Create", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "User Guide | Chatwoot", + "MESSAGE": "Choose an name for your portal.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Slug is required", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logo", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo", + "IMAGE_DELETE_SUCCESS": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Unable to delete logo", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Portal name", + "ERROR": "Name is required" + }, + "HEADER_TEXT": { + "LABEL": "Header text", + "PLACEHOLDER": "Portal header text" + }, + "PAGE_TITLE": { + "LABEL": "Page title", + "PLACEHOLDER": "Portal page title" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home page link", + "PLACEHOLDER": "Portal home page link", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Live chat widget", + "PLACEHOLDER": "Select live chat widget", + "HELP_TEXT": "Select a live chat widget that will appear on your help center", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Brand color" + }, + "SAVE_CHANGES": "Save changes" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Custom domain", + "LABEL": "Custom domain:", + "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Portal custom domain", + "EDIT_BUTTON": "Edit", + "ADD_BUTTON": "Add custom domain", + "STATUS": { + "LIVE": "Live", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Add custom domain", + "EDIT_HEADER": "Edit custom domain", + "ADD_CONFIRM_BUTTON_LABEL": "Add domain", + "EDIT_CONFIRM_BUTTON_LABEL": "Update domain", + "LABEL": "Custom domain", + "PLACEHOLDER": "Portal custom domain", + "ERROR": "Custom domain is required", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS configuration", + "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "Send" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Delete {portalName}", + "HEADER": "Delete portal", + "DESCRIPTION": "Permanently delete this portal. This action is irreversible", + "DIALOG": { + "HEADER": "Sure you want to delete {portalName}?", + "DESCRIPTION": "This is a permanent action that cannot be reversed.", + "CONFIRM_BUTTON_LABEL": "Delete" + } + }, + "EDIT_CONFIGURATION": "Edit configuration" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal created successfully", + "ERROR_MESSAGE": "Unable to create portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal updated successfully", + "ERROR_MESSAGE": "Unable to update portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "Uploading...", + "UPLOAD": "Upload & Process", + "CANCEL": "Cancel", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Generating...", + "CONFIRM_DELETE": "Are you sure you want to delete {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Completed", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/inbox.json b/app/javascript/dashboard/i18n/locale/hi/inbox.json new file mode 100644 index 0000000..385e9e4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "My Inbox", + "DISPLAY_DROPDOWN": "Display", + "LOADING": "Fetching notifications", + "404": "There are no active notifications in this group.", + "NO_NOTIFICATIONS": "No notifications", + "NOTE": "Notifications from all subscribed inboxes", + "NO_MESSAGES_AVAILABLE": "Oops! Not able to fetch messages", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week" + }, + "ACTION_HEADER": { + "SNOOZE": "Snooze notification", + "DELETE": "Delete notification", + "BACK": "Back" + }, + "TYPES": { + "CONVERSATION_MENTION": "You have been mentioned in a conversation", + "CONVERSATION_CREATION": "New conversation created", + "CONVERSATION_ASSIGNMENT": "A conversation has been assigned to you", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message in a conversation you are participating in", + "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation", + "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation", + "SLA_MISSED_RESOLUTION": "SLA target resolution missed for conversation" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Mentioned", + "CONVERSATION_ASSIGNMENT": "Assigned to you", + "CONVERSATION_CREATION": "New Conversation", + "SLA_MISSED_FIRST_RESPONSE": "SLA breach", + "SLA_MISSED_NEXT_RESPONSE": "SLA breach", + "SLA_MISSED_RESOLUTION": "SLA breach", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message", + "SNOOZED_UNTIL": "Snoozed for {time}", + "SNOOZED_ENDS": "Snooze ended" + }, + "NO_CONTENT": "No content available", + "MENU_ITEM": { + "MARK_AS_READ": "Mark as read", + "MARK_AS_UNREAD": "Mark as unread", + "SNOOZE": "Snooze", + "DELETE": "Delete", + "MARK_ALL_READ": "Mark all as read", + "DELETE_ALL": "Delete all", + "DELETE_ALL_READ": "Delete all read" + }, + "DISPLAY_MENU": { + "SORT": "Sort", + "DISPLAY": "Display :", + "SORT_OPTIONS": { + "NEWEST": "Newest", + "OLDEST": "Oldest", + "PRIORITY": "Priority" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Snoozed", + "READ": "Read", + "LABELS": "Labels", + "CONVERSATION_ID": "Conversation ID" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notification marked as read", + "MARK_AS_UNREAD": "Notification marked as unread", + "SNOOZE": "Notification snoozed", + "DELETE": "Notification deleted", + "MARK_ALL_READ": "All notifications marked as read", + "DELETE_ALL": "All notifications deleted", + "DELETE_ALL_READ": "All read notifications deleted" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json new file mode 100644 index 0000000..e4acfe9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Inboxes", + "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.", + "LEARN_MORE": "Learn more about inboxes", + "RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.", + "CLICK_TO_RECONNECT": "Click here to reconnect.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "There are no inboxes attached to this account." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Choose Channel", + "BODY": "Choose the provider you want to integrate with Chatwoot." + }, + "INBOX": { + "TITLE": "Create Inbox", + "BODY": "Authenticate your account and create an inbox." + }, + "AGENT": { + "TITLE": "Add Agents", + "BODY": "Add agents to the created inbox." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "You are all set to go!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Enter your inbox name (eg: Acme Inc)", + "ERROR": "Please enter a valid inbox name" + }, + "WEBSITE_NAME": { + "LABEL": "Website Name", + "PLACEHOLDER": "Enter your website name (eg: Acme Inc)" + }, + "FB": { + "HELP": "PS: By signing in, we only get access to your Page's messages. Your private messages can never be accessed by Chatwoot.", + "CHOOSE_PAGE": "Choose Page", + "CHOOSE_PLACEHOLDER": "Select a page from the list", + "INBOX_NAME": "Inbox Name", + "ADD_NAME": "Add a name for your inbox", + "PICK_NAME": "Pick a Name for your Inbox", + "PICK_A_VALUE": "Pick a value", + "CREATE_INBOX": "Create Inbox" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continue with Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile", + "HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ", + "ERROR_MESSAGE": "There was an error connecting to Instagram, please try again", + "ERROR_AUTH": "There was an error connecting to Instagram, please try again", + "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "To add your Twitter profile as a channel, you need to authenticate your Twitter Profile by clicking on 'Sign in with Twitter' ", + "ERROR_MESSAGE": "There was an error connecting to Twitter, please try again", + "TWEETS": { + "ENABLE": "Create conversations from mentioned Tweets" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Website channel", + "DESC": "Create a channel for your website and start supporting your customers via our website widget.", + "LOADING_MESSAGE": "Creating Website Support Channel", + "CHANNEL_AVATAR": { + "LABEL": "Channel Avatar" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "Please enter your Webhook URL", + "ERROR": "Please enter a valid URL" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Website Domain", + "PLACEHOLDER": "Enter your website domain (eg: acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Welcome Heading", + "PLACEHOLDER": "Hi there !" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Welcome Tagline", + "PLACEHOLDER": "We make it simple to connect with us. Ask us anything, or share your feedback." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Channel greeting message", + "PLACEHOLDER": "Acme Inc typically replies in a few hours." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Enable channel greeting", + "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "REPLY_TIME": { + "TITLE": "Set Reply time", + "IN_A_FEW_MINUTES": "In a few minutes", + "IN_A_FEW_HOURS": "In a few hours", + "IN_A_DAY": "In a day", + "HELP_TEXT": "This reply time will be displayed on the live chat widget" + }, + "WIDGET_COLOR": { + "LABEL": "Widget Color", + "PLACEHOLDER": "Update the widget color used in widget" + }, + "SUBMIT_BUTTON": "Create inbox", + "API": { + "ERROR_MESSAGE": "We were not able to create a website channel, please try again" + } + }, + "TWILIO": { + "TITLE": "Twilio SMS/WhatsApp Channel", + "DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "Account SID", + "PLACEHOLDER": "Please enter your Twilio Account SID", + "ERROR": "This field is required" + }, + "API_KEY": { + "USE_API_KEY": "Use API Key Authentication", + "LABEL": "API Key SID", + "PLACEHOLDER": "Please enter your API Key SID", + "ERROR": "This field is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Please enter your API Key Secret", + "ERROR": "This field is required" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "Messaging Service SID", + "PLACEHOLDER": "Please enter your Twilio Messaging Service SID", + "ERROR": "This field is required", + "USE_MESSAGING_SERVICE": "Use a Twilio Messaging Service" + }, + "CHANNEL_TYPE": { + "LABEL": "Channel Type", + "ERROR": "Please select your Channel Type" + }, + "AUTH_TOKEN": { + "LABEL": "Auth Token", + "PLACEHOLDER": "Please enter your Twilio Auth Token", + "ERROR": "This field is required" + }, + "CHANNEL_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone Number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the message callback URL in Twilio with the URL mentioned here." + }, + "SUBMIT_BUTTON": "Create Twilio Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Twilio credentials, please try again" + } + }, + "SMS": { + "TITLE": "SMS Channel", + "DESC": "Start supporting your customers via SMS.", + "PROVIDERS": { + "LABEL": "API Provider", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandwidth" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the SMS channel" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "Account ID", + "PLACEHOLDER": "Please enter your Bandwidth Account ID", + "ERROR": "This field is required" + }, + "API_KEY": { + "LABEL": "API Key", + "PLACEHOLDER": "Please enter your Bandwidth API Key", + "ERROR": "This field is required" + }, + "API_SECRET": { + "LABEL": "API Secret", + "PLACEHOLDER": "Please enter your Bandwidth API Secret", + "ERROR": "This field is required" + }, + "APPLICATION_ID": { + "LABEL": "Application ID", + "PLACEHOLDER": "Please enter your Bandwidth Application ID", + "ERROR": "This field is required" + }, + "INBOX_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "SUBMIT_BUTTON": "Create Bandwidth Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Bandwidth credentials, please try again" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the message callback URL in Bandwidth with the URL mentioned here." + } + } + }, + "WHATSAPP": { + "TITLE": "WhatsApp Channel", + "DESC": "Start supporting your customers via WhatsApp.", + "PROVIDERS": { + "LABEL": "API Provider", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter an inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "PHONE_NUMBER_ID": { + "LABEL": "Phone number ID", + "PLACEHOLDER": "Please enter the Phone number ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "Business Account ID", + "PLACEHOLDER": "Please enter the Business Account ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook Verify Token", + "PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.", + "ERROR": "Please enter a valid value." + }, + "API_KEY": { + "LABEL": "API key", + "SUBTITLE": "Configure the WhatsApp API key.", + "PLACEHOLDER": "API key", + "ERROR": "Please enter a valid value." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL and the verification token in the Facebook Developer portal with the values shown below.", + "WEBHOOK_URL": "Webhook URL", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook Verification Token" + }, + "SUBMIT_BUTTON": "Create WhatsApp Channel", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "Phone Number", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "Account SID", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "Auth Token", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "API Key SID", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "API Channel", + "DESC": "Integrate with API channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "SUBTITLE": "Configure the URL where you want to receive callbacks on events.", + "PLACEHOLDER": "Webhook URL" + }, + "SUBMIT_BUTTON": "Create API Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the api channel" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "Email Channel", + "DESC": "Integrate your email inbox.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "EMAIL": { + "LABEL": "Email", + "SUBTITLE": "Email where your customers sends you support tickets", + "PLACEHOLDER": "Email" + }, + "SUBMIT_BUTTON": "Create Email Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the email channel" + }, + "FINISH_MESSAGE": "Start forwarding your emails to the following email address.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "Click here", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "LINE Channel", + "DESC": "Integrate with LINE channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "LINE_CHANNEL_ID": { + "LABEL": "LINE Channel ID", + "PLACEHOLDER": "LINE Channel ID" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "LINE Channel Secret", + "PLACEHOLDER": "LINE Channel Secret" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "LINE Channel Token", + "PLACEHOLDER": "LINE Channel Token" + }, + "SUBMIT_BUTTON": "Create LINE Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the LINE channel" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL in LINE application with the URL mentioned here." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Telegram Channel", + "DESC": "Integrate with Telegram channel and start supporting your customers.", + "BOT_TOKEN": { + "LABEL": "Bot Token", + "SUBTITLE": "Configure the bot token you have obtained from Telegram BotFather.", + "PLACEHOLDER": "Bot Token" + }, + "SUBMIT_BUTTON": "Create Telegram Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the telegram channel" + } + }, + "AUTH": { + "TITLE": "Choose a channel", + "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Website", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "Email", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Agents", + "DESC": "Here you can add agents to manage your newly created inbox. Only these selected agents will have access to your inbox. Agents which are not part of this inbox will not be able to see or respond to messages in this inbox when they login.Webhooks
Webhooks are HTTP callbacks which can be defined for every account. They are triggered by events like message creation in Chatwoot. You can create more than one webhook for this account.
For creating a webhook, click on the Add new webhook button. You can also remove any existing webhook by clicking on the Delete button.
Dashboard Apps
Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.
When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.
To add a new dashboard app, click on the button 'Add a new dashboard app'.
", + "DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.", + "LEARN_MORE": "Learn more about Dashboard Apps", + "LIST": { + "404": "There are no dashboard apps configured on this account yet", + "LOADING": "Fetching dashboard apps...", + "TABLE_HEADER": { + "NAME": "Name", + "ENDPOINT": "Endpoint" + }, + "EDIT_TOOLTIP": "Edit app", + "DELETE_TOOLTIP": "Delete app" + }, + "FORM": { + "TITLE_LABEL": "Name", + "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", + "TITLE_ERROR": "A name for the dashboard app is required", + "URL_LABEL": "Endpoint", + "URL_PLACEHOLDER": "Enter the endpoint URL where your app is hosted", + "URL_ERROR": "A valid URL is required" + }, + "CREATE": { + "HEADER": "Add a new dashboard app", + "FORM_SUBMIT": "Submit", + "FORM_CANCEL": "Cancel", + "API_SUCCESS": "Dashboard app configured successfully", + "API_ERROR": "We couldn't create an app. Please try again later" + }, + "UPDATE": { + "HEADER": "Edit dashboard app", + "FORM_SUBMIT": "Update", + "FORM_CANCEL": "Cancel", + "API_SUCCESS": "Dashboard app updated successfully", + "API_ERROR": "We couldn't update the app. Please try again later" + }, + "DELETE": { + "CONFIRM_YES": "Yes, delete it", + "CONFIRM_NO": "No, keep it", + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete the app - {appName}?", + "API_SUCCESS": "Dashboard app deleted successfully", + "API_ERROR": "We couldn't delete the app. Please try again later" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "Fetching linear issues...", + "LOADING_ERROR": "There was an error fetching the linear issues, please try again", + "CREATE": "Create", + "LINK": { + "SEARCH": "Search issues", + "SELECT": "Select issue", + "TITLE": "Link", + "EMPTY_LIST": "No linear issues found", + "LOADING": "Loading", + "ERROR": "There was an error fetching the linear issues, please try again", + "LINK_SUCCESS": "Issue linked successfully", + "LINK_ERROR": "There was an error linking the issue, please try again", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "Create Linear issues from conversations, or link existing ones for seamless tracking.", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter title", + "REQUIRED_ERROR": "Title is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Enter description" + }, + "TEAM": { + "LABEL": "Team", + "PLACEHOLDER": "Select team", + "SEARCH": "Search team", + "REQUIRED_ERROR": "Team is required" + }, + "ASSIGNEE": { + "LABEL": "Assignee", + "PLACEHOLDER": "Select assignee", + "SEARCH": "Search assignee" + }, + "PRIORITY": { + "LABEL": "Priority", + "PLACEHOLDER": "Select priority", + "SEARCH": "Search priority" + }, + "LABEL": { + "LABEL": "Label", + "PLACEHOLDER": "Select label", + "SEARCH": "Search label" + }, + "STATUS": { + "LABEL": "Status", + "PLACEHOLDER": "Select status", + "SEARCH": "Search status" + }, + "PROJECT": { + "LABEL": "Project", + "PLACEHOLDER": "Select project", + "SEARCH": "Search project" + } + }, + "CREATE": "Create", + "CANCEL": "रद्द करें", + "CREATE_SUCCESS": "Issue created successfully", + "CREATE_ERROR": "There was an error creating the issue, please try again", + "LOADING_TEAM_ERROR": "There was an error fetching the teams, please try again", + "LOADING_TEAM_ENTITIES_ERROR": "There was an error fetching the team entities, please try again" + }, + "ISSUE": { + "STATUS": "Status", + "PRIORITY": "Priority", + "ASSIGNEE": "Assignee", + "LABELS": "Labels", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Unlink", + "SUCCESS": "Issue unlinked successfully", + "ERROR": "There was an error unlinking the issue, please try again" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Yes, delete", + "CANCEL": "रद्द करें" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Yes, delete", + "CANCEL": "Cancel" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "Send message...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Captain is thinking", + "YOU": "You", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "You", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "Type your message...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "रद्द करें", + "CREATE": "Create", + "EDIT": "Update" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "Update", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "Features", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "Features", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "Settings", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Delete" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "Create", + "CANCEL": "Cancel", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Delete" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "Create", + "CANCEL": "Cancel", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Delete" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "Create", + "CANCEL": "Cancel" + } + } + }, + "UPDATE": { + "CANCEL": "Cancel", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "None", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "API Key" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "Password", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Type" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Number", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Required" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "Delete", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "All" + }, + "STATUS": { + "TITLE": "Status", + "PENDING": "Pending", + "APPROVED": "Approved", + "ALL": "All" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "Edit", + "DELETE_RESPONSE": "Delete" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Disconnect" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "Inbox", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/hi/labelsMgmt.json new file mode 100644 index 0000000..705b18d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Labels", + "HEADER_BTN_TXT": "Add label", + "LOADING": "Fetching labels", + "DESCRIPTION": "Labels help you categorize and prioritize conversations and leads. You can assign a label to a conversation or contact using the side panel.", + "LEARN_MORE": "Learn more about labels", + "SEARCH_404": "There are no items matching this query", + "LIST": { + "404": "There are no labels available in this account.", + "TITLE": "Manage labels", + "DESC": "Labels let you group the conversations together.", + "TABLE_HEADER": { + "NAME": "Name", + "DESCRIPTION": "Description", + "COLOR": "Color" + } + }, + "FORM": { + "NAME": { + "LABEL": "Label Name", + "PLACEHOLDER": "Label name", + "REQUIRED_ERROR": "Label name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Label Description" + }, + "COLOR": { + "LABEL": "Color" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Show label on sidebar" + }, + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Delete", + "CANCEL": "Cancel" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Add label to conversation", + "MULTIPLE_SUGGESTION": "Select this label", + "DESELECT": "Deselect label", + "DISMISS": "Dismiss suggestion" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Dismiss", + "ADD_SELECTED_LABELS": "Add selected labels", + "ADD_SELECTED_LABEL": "Add selected label", + "ADD_ALL_LABELS": "Add all labels", + "SUGGESTED_LABELS": "Suggested labels" + }, + "ADD": { + "TITLE": "Add label", + "DESC": "Labels let you group the conversations together.", + "API": { + "SUCCESS_MESSAGE": "Label added successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "EDIT": { + "TITLE": "Edit label", + "API": { + "SUCCESS_MESSAGE": "Label updated successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Label deleted successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/login.json b/app/javascript/dashboard/i18n/locale/hi/login.json new file mode 100644 index 0000000..8bf01d7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Login to Chatwoot", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "Please enter a valid email address" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password" + }, + "API": { + "SUCCESS_MESSAGE": "Login Successful", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later", + "UNAUTH": "Username / Password Incorrect. Please try again" + }, + "OAUTH": { + "GOOGLE_LOGIN": "Login with Google", + "BUSINESS_ACCOUNTS_ONLY": "Please use your company email address to login", + "NO_ACCOUNT_FOUND": "We couldn't find an account for your email address." + }, + "FORGOT_PASSWORD": "Forgot your password?", + "CREATE_NEW_ACCOUNT": "Create new account", + "SUBMIT": "Login", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/macros.json b/app/javascript/dashboard/i18n/locale/hi/macros.json new file mode 100644 index 0000000..fcb409f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Macros", + "DESCRIPTION": "A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click.", + "LEARN_MORE": "Learn more about macros", + "HEADER_BTN_TXT": "Add a new macro", + "HEADER_BTN_TXT_SAVE": "Save macro", + "LOADING": "Fetching macros", + "ERROR": "Something went wrong. Please try again", + "ORDER_INFO": "Macros will run in the order you add your actions. You can rearrange them by dragging them by the handle beside each node.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Macro name", + "PLACEHOLDER": "Enter a name for your macro", + "ERROR": "Name is required for creating a macro" + }, + "ACTIONS": { + "LABEL": "Actions" + } + }, + "API": { + "SUCCESS_MESSAGE": "Macro added successfully", + "ERROR_MESSAGE": "Unable to create macro, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Name", + "CREATED BY": "Created by", + "LAST_UPDATED_BY": "Last updated by", + "VISIBILITY": "Visibility" + }, + "404": "No macros found" + }, + "DELETE": { + "TOOLTIP": "Delete macro", + "CONFIRM": { + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete", + "NO": "No" + }, + "API": { + "SUCCESS_MESSAGE": "Macro deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the macro. Please try again later" + } + }, + "EDIT": { + "TOOLTIP": "Edit macro", + "API": { + "SUCCESS_MESSAGE": "Macro updated successfully", + "ERROR_MESSAGE": "Could not update Macro, Please try again later" + } + }, + "EDITOR": { + "START_FLOW": "Start Flow", + "END_FLOW": "End Flow", + "LOADING": "Fetching macro", + "ADD_BTN_TOOLTIP": "Add new action", + "DELETE_BTN_TOOLTIP": "Delete Action", + "VISIBILITY": { + "LABEL": "Macro Visibility", + "GLOBAL": { + "LABEL": "Public", + "DESCRIPTION": "This macro is available publicly for all agents in this account." + }, + "PERSONAL": { + "LABEL": "Private", + "DESCRIPTION": "This macro will be private to you and not be available to others." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Execute", + "PREVIEW": "Preview Macro", + "EXECUTED_SUCCESSFULLY": "Macro executed successfully" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Value is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Assign a Team", + "ASSIGN_AGENT": "Assign an Agent", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Mute Conversation", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "CHANGE_PRIORITY": "Change Priority", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "SEND_WEBHOOK_EVENT": "Send Webhook Event" + }, + "PRIORITY_TYPES": { + "NONE": "None", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/mfa.json b/app/javascript/dashboard/i18n/locale/hi/mfa.json new file mode 100644 index 0000000..f7556fd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "Enabled", + "DISABLED": "Disabled", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Loading...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "Copy", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "Cancel", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "Download", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "Password", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "Cancel", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "Cancel", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/report.json b/app/javascript/dashboard/i18n/locale/hi/report.json new file mode 100644 index 0000000..a2ad6bd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Conversations", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "DATA_FETCHING_FAILED": "Failed to fetch data, please try again later.", + "SUMMARY_FETCHING_FAILED": "Failed to fetch summary, please try again later.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Handoff Count", + "DESC": "( Total )" + }, + "REPLY_TIME": { + "NAME": "Customer waiting time", + "TOOLTIP_TEXT": "Waiting time is {metricValue} (based on {conversationCount} replies)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "Last 7 days", + "LAST_14_DAYS": "Last 14 days", + "LAST_30_DAYS": "Last 30 days", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_DATE_RANGE": "Custom date range" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Group By", + "DURATION_FILTER_LABEL": "Duration", + "GROUPING_OPTIONS": { + "DAY": "Day", + "WEEK": "Week", + "MONTH": "Month", + "YEAR": "Month" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "BUSINESS_HOURS": "Business Hours", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "No results found" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Agents Overview", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "FILTER_DROPDOWN_LABEL": "Select Agent", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "LABEL_REPORTS": { + "HEADER": "Labels Overview", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_LABEL_REPORTS": "Download label reports", + "FILTER_DROPDOWN_LABEL": "Select Label", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "INBOX_REPORTS": { + "HEADER": "Inbox Overview", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_INBOX_REPORTS": "Download inbox reports", + "FILTER_DROPDOWN_LABEL": "Select Inbox", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "TEAM_REPORTS": { + "HEADER": "Team Overview", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_TEAM_REPORTS": "Download team reports", + "FILTER_DROPDOWN_LABEL": "Select Team", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "CSAT_REPORTS": { + "HEADER": "CSAT Reports", + "NO_RECORDS": "There are no CSAT survey responses available.", + "DOWNLOAD": "Download CSAT Reports", + "DOWNLOAD_FAILED": "Failed to download CSAT Reports", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Choose Agents" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Contact", + "AGENT_NAME": "Assigned agent", + "RATING": "Rating", + "FEEDBACK_TEXT": "Feedback comment" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Total responses", + "TOOLTIP": "Total number of responses collected" + }, + "SATISFACTION_SCORE": { + "LABEL": "Satisfaction score", + "TOOLTIP": "Total number of positive responses / Total number of responses * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Response rate", + "TOOLTIP": "Total number of responses / Total number of CSAT survey messages sent * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Bot Reports", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "No. of Conversations", + "TOOLTIP": "Total number of conversations handled by the bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total Responses", + "TOOLTIP": "Total number of responses sent by the bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Resolution Rate", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Handoff Rate", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Overview", + "LIVE": "Live", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Open Conversations", + "LOADING_MESSAGE": "Loading conversation metrics...", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "UNASSIGNED": "Unassigned", + "PENDING": "Pending" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Conversation Traffic", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Conversations by agents", + "LOADING_MESSAGE": "Loading agent metrics...", + "NO_AGENTS": "There are no conversations by agents", + "TABLE_HEADER": { + "AGENT": "Agent", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "STATUS": "Status" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Team", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "STATUS": "Status" + } + }, + "AGENT_STATUS": { + "HEADER": "Agent status", + "ONLINE": "Online", + "BUSY": "Busy", + "OFFLINE": "Offline" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Sunday", + "MONDAY": "Monday", + "TUESDAY": "Tuesday", + "WEDNESDAY": "Wednesday", + "THURSDAY": "Thursday", + "FRIDAY": "Friday", + "SATURDAY": "Saturday" + }, + "SLA_REPORTS": { + "HEADER": "SLA Reports", + "NO_RECORDS": "SLA applied conversations are not available.", + "LOADING": "Loading SLA data...", + "DOWNLOAD_SLA_REPORTS": "Download SLA reports", + "DOWNLOAD_FAILED": "Failed to download SLA Reports", + "DROPDOWN": { + "ADD_FIlTER": "Add filter", + "CLEAR_ALL": "Clear all", + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "No results found", + "NO_FILTER": "No filters available", + "SEARCH": "Search filter", + "INPUT_PLACEHOLDER": { + "SLA": "SLA name", + "AGENTS": "Agent name", + "INBOXES": "Inbox name", + "LABELS": "Label name", + "TEAMS": "Team name" + }, + "SLA": "SLA Policy", + "INBOXES": "Inbox", + "AGENTS": "Agent", + "LABELS": "Label", + "TEAMS": "Team" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentage of SLAs created were completed successfully" + }, + "NO_OF_MISSES": { + "LABEL": "Number of Misses", + "TOOLTIP": "Total SLA misses in a certain period" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Number of Conversations", + "TOOLTIP": "Total number of conversations with SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "Conversation", + "AGENT": "Agent" + }, + "VIEW_DETAILS": "View Details" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Inbox", + "AGENT": "Agent", + "TEAM": "Team", + "LABEL": "Label", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "Resolution Count", + "CONVERSATIONS": "No. of conversations" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/resetPassword.json b/app/javascript/dashboard/i18n/locale/hi/resetPassword.json new file mode 100644 index 0000000..03598f5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Reset password", + "DESCRIPTION": "Enter the email address you use to log in to Chatwoot to get the password reset instructions.", + "GO_BACK_TO_LOGIN": "If you want to go back to the login page,", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "Please enter your email.", + "ERROR": "Please enter a valid email." + }, + "API": { + "SUCCESS_MESSAGE": "Password reset link has been sent to your email.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "SUBMIT": "Submit" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/search.json b/app/javascript/dashboard/i18n/locale/hi/search.json new file mode 100644 index 0000000..f23a146 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "Contacts", + "CONVERSATIONS": "Conversations", + "MESSAGES": "Messages", + "ARTICLES": "Articles" + }, + "SECTION": { + "CONTACTS": "Contacts", + "CONVERSATIONS": "Conversations", + "MESSAGES": "Messages", + "ARTICLES": "Articles" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "Searching", + "LOADING_DATA": "Loading", + "EMPTY_STATE": "No {item} found for query '{query}'", + "EMPTY_STATE_FULL": "No results found for query '{query}'", + "PLACEHOLDER_KEYBINDING": "/to focus", + "INPUT_PLACEHOLDER": "Search messages, contacts or conversations", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Clear all", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Search by conversation id, email, phone number, messages for better search results.", + "BOT_LABEL": "Bot", + "READ_MORE": "Read more", + "READ_LESS": "Read less", + "WROTE": "wrote:", + "FROM": "From", + "EMAIL": "Email", + "EMAIL_SUBJECT": "Subject", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "Last 7 days", + "LAST_30_DAYS": "Last 30 days", + "LAST_60_DAYS": "Last 60 days", + "LAST_90_DAYS": "Last 90 days", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "Apply", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Clear filter" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Sender", + "IN": "Inbox", + "AGENTS": "Agents", + "CONTACTS": "Contacts", + "INBOXES": "Inboxes", + "NO_AGENTS": "No agents found", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/setNewPassword.json b/app/javascript/dashboard/i18n/locale/hi/setNewPassword.json new file mode 100644 index 0000000..a8a259d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Set new password", + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password", + "ERROR": "Password is too short." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm password", + "PLACEHOLDER": "Confirm Password", + "ERROR": "Passwords do not match." + }, + "API": { + "SUCCESS_MESSAGE": "Successfully changed the password.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CAPTCHA": { + "ERROR": "Verification expired. Please solve captcha again." + }, + "SUBMIT": "Submit" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/settings.json b/app/javascript/dashboard/i18n/locale/hi/settings.json new file mode 100644 index 0000000..6b94a34 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Profile Settings", + "TITLE": "Profile Settings", + "BTN_TEXT": "Update Profile", + "DELETE_AVATAR": "Delete Avatar", + "AVATAR_DELETE_SUCCESS": "Avatar has been deleted successfully", + "AVATAR_DELETE_FAILED": "There is an error while deleting avatar, please try again", + "UPDATE_SUCCESS": "Your profile has been updated successfully", + "PASSWORD_UPDATE_SUCCESS": "Your password has been changed successfully", + "AFTER_EMAIL_CHANGED": "Your profile has been updated successfully, please login again as your login credentials are changed", + "FORM": { + "PICTURE": "Profile Picture", + "AVATAR": "Profile Image", + "ERROR": "Please fix form errors", + "REMOVE_IMAGE": "Remove", + "UPLOAD_IMAGE": "Upload image", + "UPDATE_IMAGE": "Update image", + "PROFILE_SECTION": { + "TITLE": "Profile", + "NOTE": "Your email address is your identity and is used to log in." + }, + "SEND_MESSAGE": { + "TITLE": "Hotkey to send messages", + "NOTE": "You can select a hotkey (either Enter or Cmd/Ctrl+Enter) based on your preference of writing.", + "UPDATE_SUCCESS": "Your settings have been updated successfully", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Send messages by pressing Enter key instead of clicking the send button." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Send messages by pressing Cmd/Ctrl + enter key instead of clicking the send button." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Default", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Personal message signature", + "NOTE": "Create a unique message signature to appear at the end of every message you send from any inbox. You can also include an inline image, which is supported in live-chat, email, and API inboxes.", + "BTN_TEXT": "Save message signature", + "API_ERROR": "Couldn't save signature! Try again", + "API_SUCCESS": "Signature saved successfully", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save to save the signature", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Message Signature", + "ERROR": "Message Signature cannot be empty", + "PLACEHOLDER": "Insert your personal message signature here." + }, + "PASSWORD_SECTION": { + "TITLE": "Password", + "NOTE": "Updating your password would reset your logins in multiple devices.", + "BTN_TEXT": "Change password" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "Access Token", + "NOTE": "This token can be used if you are building an API based integration", + "COPY": "Copy", + "RESET": "Reset", + "CONFIRM_RESET": "Are you sure?", + "CONFIRM_HINT": "Click again to confirm", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Alerts", + "NOTE": "Enable audio alerts in dashboard for new messages and conversations.", + "PLAY": "Play sound", + "ALERT_TYPES": { + "NONE": "None", + "MINE": "Assigned", + "ALL": "All", + "ASSIGNED": "My assigned conversations", + "UNASSIGNED": "Unassigned conversations", + "NOTME": "Open conversations assigned to others" + }, + "ALERT_COMBINATIONS": { + "NONE": "You haven't selected any options, you won't receive any audio alerts.", + "ASSIGNED": "You'll receive alerts for conversations assigned to you.", + "UNASSIGNED": "You'll receive alerts for any unassigned conversations.", + "NOTME": "You'll receive alerts for conversations assigned to others.", + "ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.", + "ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.", + "NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.", + "ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations." + }, + "ALERT_TYPE": { + "TITLE": "Alert events for conversations", + "NONE": "None", + "ASSIGNED": "Assigned Conversations", + "ALL_CONVERSATIONS": "All Conversations" + }, + "DEFAULT_TONE": { + "TITLE": "Alert tone:" + }, + "CONDITIONS": { + "TITLE": "Alert conditions:", + "CONDITION_ONE": "Send audio alerts only if the browser window is not active", + "CONDITION_TWO": "Send alerts every 30s until all the assigned conversations are read" + }, + "SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.", + "READ_MORE": "Read more" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "Email Notifications", + "NOTE": "Update your email notification preferences here", + "CONVERSATION_ASSIGNMENT": "Send email notifications when a conversation is assigned to me", + "CONVERSATION_CREATION": "Send email notifications when a new conversation is created", + "CONVERSATION_MENTION": "Send email notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "Send email notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send email notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send email notifications when a conversation misses resolution SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Notification preferences", + "TYPE_TITLE": "Notification type", + "EMAIL": "Email", + "PUSH": "Push notification", + "TYPES": { + "CONVERSATION_CREATED": "A new conversation is created", + "CONVERSATION_ASSIGNED": "A conversation is assigned to you", + "CONVERSATION_MENTION": "You are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "A new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "A new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "A conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "A conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "A conversation misses resolution SLA" + }, + "BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them" + }, + "API": { + "UPDATE_SUCCESS": "Your notification preferences are updated successfully", + "UPDATE_ERROR": "There is an error while updating the preferences, please try again" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Push Notifications", + "NOTE": "Update your push notification preferences here", + "CONVERSATION_ASSIGNMENT": "Send push notifications when a conversation is assigned to me", + "CONVERSATION_CREATION": "Send push notifications when a new conversation is created", + "CONVERSATION_MENTION": "Send push notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in a participating conversation", + "HAS_ENABLED_PUSH": "You have enabled push for this browser.", + "REQUEST_PUSH": "Enable push notifications", + "SLA_MISSED_FIRST_RESPONSE": "Send push notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send push notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send push notifications when a conversation misses resolution SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "Profile Image" + }, + "NAME": { + "LABEL": "Your full name", + "ERROR": "Please enter a valid full name", + "PLACEHOLDER": "Please enter your full name" + }, + "DISPLAY_NAME": { + "LABEL": "Display name", + "ERROR": "Please enter a valid display name", + "PLACEHOLDER": "Please enter a display name, this would be displayed in conversations" + }, + "AVAILABILITY": { + "LABEL": "Availability", + "STATUS": { + "ONLINE": "Online", + "BUSY": "Busy", + "OFFLINE": "Offline" + }, + "SET_AVAILABILITY_SUCCESS": "Availability has been set successfully", + "SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again", + "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user" + }, + "EMAIL": { + "LABEL": "Your email address", + "ERROR": "Please enter a valid email address", + "PLACEHOLDER": "Please enter your email address, this would be displayed in conversations" + }, + "CURRENT_PASSWORD": { + "LABEL": "Current password", + "ERROR": "Please enter the current password", + "PLACEHOLDER": "Please enter the current password" + }, + "PASSWORD": { + "LABEL": "New password", + "ERROR": "Please enter a password of length 6 or more", + "PLACEHOLDER": "Please enter a new password" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Confirm new password", + "ERROR": "Confirm password should match the password", + "PLACEHOLDER": "Please re-enter your new password" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Change", + "CHANGE_ACCOUNTS": "Switch account", + "SWITCH_ACCOUNT": "Switch account", + "CONTACT_SUPPORT": "Contact support", + "SELECTOR_SUBTITLE": "Select an account from the following list", + "PROFILE_SETTINGS": "Profile settings", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Keyboard shortcuts", + "APPEARANCE": "Change appearance", + "SUPER_ADMIN_CONSOLE": "SuperAdmin console", + "DOCS": "Read documentation", + "CHANGELOG": "Changelog", + "LOGOUT": "Log out" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "days trial remaining.", + "TRAIL_BUTTON": "Buy Now", + "DELETED_USER": "Deleted User", + "EMAIL_VERIFICATION_PENDING": "It seems that you haven't verified your email address yet. Please check your inbox for the verification email.", + "RESEND_VERIFICATION_MAIL": "Resend verification email", + "EMAIL_VERIFICATION_SENT": "Verification email has been sent. Please check your inbox.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Account Suspended", + "MESSAGE": "Your account is suspended. Please reach out to the support team for more information." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Log out" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Copy", + "CODEPEN": "Open in CodePen", + "COPY_SUCCESSFUL": "Code copied to clipboard successfully" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Show More", + "SHOW_LESS": "Show Less" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "Download", + "UPLOADING": "Uploading...", + "INSTAGRAM_STORY_UNAVAILABLE": "This story is no longer available." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "See on map" + }, + "FORM_BUBBLE": { + "SUBMIT": "Submit" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "This image is no longer available.", + "LOADING_FAILED": "Loading failed" + } + }, + "CONFIRM_EMAIL": "Verifying...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Add Inbox" + } + }, + "SIDEBAR": { + "NO_ITEMS": "No items", + "CURRENTLY_VIEWING_ACCOUNT": "Currently viewing:", + "SWITCH": "Switch", + "INBOX_VIEW": "Inbox View", + "CONVERSATIONS": "Conversations", + "INBOX": "My Inbox", + "ALL_CONVERSATIONS": "All Conversations", + "MENTIONED_CONVERSATIONS": "Mentions", + "PARTICIPATING_CONVERSATIONS": "Participating", + "UNATTENDED_CONVERSATIONS": "Unattended", + "REPORTS": "Reports", + "SETTINGS": "Settings", + "CONTACTS": "Contacts", + "ACTIVE": "Active", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistants", + "CAPTAIN_DOCUMENTS": "Documents", + "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_TOOLS": "Tools", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "Inboxes", + "CAPTAIN_SETTINGS": "Settings", + "HOME": "Home", + "AGENTS": "Agents", + "AGENT_BOTS": "Bots", + "AUDIT_LOGS": "Audit Logs", + "INBOXES": "Inboxes", + "NOTIFICATIONS": "Notifications", + "CANNED_RESPONSES": "Canned Responses", + "INTEGRATIONS": "Integrations", + "PROFILE_SETTINGS": "Profile Settings", + "ACCOUNT_SETTINGS": "Account Settings", + "APPLICATIONS": "Applications", + "LABELS": "Labels", + "CUSTOM_ATTRIBUTES": "Custom Attributes", + "AUTOMATION": "Automation", + "MACROS": "Macros", + "TEAMS": "Teams", + "BILLING": "Billing", + "CUSTOM_VIEWS_FOLDER": "Folders", + "CUSTOM_VIEWS_SEGMENTS": "Segments", + "ALL_CONTACTS": "All Contacts", + "TAGGED_WITH": "Tagged with", + "NEW_LABEL": "New label", + "NEW_TEAM": "New team", + "NEW_INBOX": "New inbox", + "REPORTS_CONVERSATION": "Conversations", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Campaigns", + "ONGOING": "Ongoing", + "ONE_OFF": "One off", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "Bot", + "REPORTS_AGENT": "Agents", + "REPORTS_LABEL": "Labels", + "REPORTS_INBOX": "Inbox", + "REPORTS_TEAM": "Team", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "Set yourself as", + "SET_YOUR_AVAILABILITY": "Set your availability", + "SLA": "SLA", + "CUSTOM_ROLES": "Custom Roles", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Overview", + "REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages", + "HELP_CENTER": { + "TITLE": "Help Center", + "ARTICLES": "Articles", + "CATEGORIES": "Categories", + "LOCALES": "Locales", + "SETTINGS": "Settings" + }, + "CHANNELS": "Channels", + "SET_AUTO_OFFLINE": { + "TEXT": "Mark offline automatically", + "INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard.", + "INFO_SHORT": "Automatically mark offline when you aren't using the app." + }, + "DOCS": "Read docs", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "Billing", + "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "CURRENT_PLAN": { + "TITLE": "Current Plan", + "PLAN_NOTE": "You are currently subscribed to the **{plan}** plan with **{quantity}** licenses", + "SEAT_COUNT": "Number of seats", + "RENEWS_ON": "Renews on" + }, + "VIEW_PRICING": "View Pricing", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Manage your subscription", + "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", + "BUTTON_TXT": "Go to the billing portal" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Manage usage and credits for Captain AI.", + "BUTTON_TXT": "Buy more credits", + "DOCUMENTS": "Documents", + "RESPONSES": "Responses", + "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more.", + "REFRESH_CREDITS": "Refresh" + }, + "CHAT_WITH_US": { + "TITLE": "Need help?", + "DESCRIPTION": "Do you face any issues in billing? We are here to help.", + "BUTTON_TXT": "Chat with us" + }, + "NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again.", + "TOPUP": { + "BUY_CREDITS": "Buy more credits", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Note:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "Cancel", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Go Back", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "Code copied to clipboard successfully", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.", + "NEW_ACCOUNT": "New Account", + "SELECTOR_SUBTITLE": "Create a new account", + "API": { + "SUCCESS_MESSAGE": "Account created successfully", + "EXIST_MESSAGE": "Account already exists", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "FORM": { + "NAME": { + "LABEL": "Company Name", + "PLACEHOLDER": "Wayne Enterprises" + }, + "SUBMIT": "Submit", + "CANCEL": "Cancel" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "View all shortcuts", + "TITLE": { + "OPEN_CONVERSATION": "Open conversation", + "RESOLVE_AND_NEXT": "Resolve and move to next", + "NAVIGATE_DROPDOWN": "Navigate dropdown items", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "ADD_ATTACHMENT": "Add Attachment", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "TOGGLE_SIDEBAR": "Toggle Sidebar", + "GO_TO_REPORTS_SIDEBAR": "Go to Reports sidebar", + "MOVE_TO_NEXT_TAB": "Move to next tab in conversation list", + "GO_TO_SETTINGS": "Go to Settings", + "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", + "SWITCH_TO_REPLY": "Switch to Reply", + "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "Priority", + "ACTIVE": "Active", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "Edit" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Description:", + "PLACEHOLDER": "Enter description" + }, + "STATUS": { + "LABEL": "Status:", + "PLACEHOLDER": "Select status", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "Add" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "Edit" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Description:", + "PLACEHOLDER": "Enter description" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "Add" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "Delete", + "CANCEL_BUTTON_LABEL": "Cancel" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/signup.json b/app/javascript/dashboard/i18n/locale/hi/signup.json new file mode 100644 index 0000000..aa96873 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Create an account", + "TITLE": "Register", + "TESTIMONIAL_HEADER": "All it takes is one step to move forward", + "TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.", + "TERMS_ACCEPT": "By creating an account, you agree to our T & C and Privacy policy", + "OAUTH": { + "GOOGLE_SIGNUP": "Sign up with Google" + }, + "COMPANY_NAME": { + "LABEL": "Company name", + "PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises", + "ERROR": "Company name is too short" + }, + "FULL_NAME": { + "LABEL": "Full name", + "PLACEHOLDER": "Enter your full name. eg: Bruce Wayne", + "ERROR": "Full name is too short" + }, + "EMAIL": { + "LABEL": "Work email", + "PLACEHOLDER": "Enter your work email address. E.g., bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Please enter a valid work email address" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password", + "ERROR": "Password is too short", + "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm Password", + "PLACEHOLDER": "Confirm Password", + "ERROR": "Passwords do not match." + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "SUBMIT": "Create account", + "HAVE_AN_ACCOUNT": "Already have an account?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/sla.json b/app/javascript/dashboard/i18n/locale/hi/sla.json new file mode 100644 index 0000000..0da7873 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Add SLA", + "ADD_ACTION_LONG": "Create a new SLA Policy", + "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", + "LEARN_MORE": "Learn more about SLA", + "LOADING": "Fetching SLAs", + "PAYWALL": { + "TITLE": "Upgrade to create SLAs", + "AVAILABLE_ON": "The SLA feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SLA feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no SLAs available in this account.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Issues raised by enterprise customers, that require immediate attention.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Issues raised by enterprise customers, that needs to be acknowledged quickly." + }, + "BUSINESS_HOURS_ON": "Business hours on", + "BUSINESS_HOURS_OFF": "Business hours off", + "RESPONSE_TYPES": { + "FRT": "First response time threshold", + "NRT": "Next response time threshold", + "RT": "Resolution time threshold", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA Name", + "PLACEHOLDER": "SLA Name", + "REQUIRED_ERROR": "SLA name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "SLA for premium customers" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "First Response Time", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Next Response Time", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "Resolution Time", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Business Hours", + "PLACEHOLDER": "Only during business hours" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Threshold should be a number and greater than zero" + }, + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Delete", + "CANCEL": "Cancel" + }, + "ADD": { + "TITLE": "Add SLA", + "DESC": "Friendly promises for great service!", + "API": { + "SUCCESS_MESSAGE": "SLA added successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "DELETE": { + "TITLE": "Delete SLA", + "API": { + "SUCCESS_MESSAGE": "SLA deleted successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure you want to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + } + }, + "EVENTS": { + "TITLE": "SLA Misses", + "FRT": "First response time", + "NRT": "Next response time", + "RT": "Resolution time", + "SHOW_MORE": "{count} more", + "HIDE": "Hide {count} rows" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/teamsSettings.json b/app/javascript/dashboard/i18n/locale/hi/teamsSettings.json new file mode 100644 index 0000000..f0a950f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Create new team", + "HEADER": "Teams", + "LOADING": "Fetching teams", + "DESCRIPTION": "Teams allow you to organize agents into groups based on their responsibilities. An agent can belong to multiple teams. When working collaboratively, you can assign conversations to specific teams.", + "LEARN_MORE": "Learn more about teams", + "LIST": { + "404": "There are no teams created on this account.", + "EDIT_TEAM": "Edit team", + "NONE": "None" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Create a new team", + "DESC": "Add a title and description to your new team." + }, + "AGENTS": { + "BUTTON_TEXT": "Add agents to team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation." + }, + "WIZARD_CREATE": { + "TITLE": "Create", + "BODY": "Create a new team of agents." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "Add Agents", + "BODY": "Add agents to the team." + }, + "WIZARD_FINISH": { + "TITLE": "Finish", + "BODY": "You are all set to go!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Edit your team details", + "DESC": "Edit title and description to your team.", + "BUTTON_TEXT": "Update team" + }, + "AGENTS": { + "BUTTON_TEXT": "Update agents in team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. All the added agents will be notified when a conversation is assigned to this team." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Team details", + "ROUTE": "settings_teams_edit", + "BODY": "Change name, description and other details." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Edit Agents", + "ROUTE": "settings_teams_edit_members", + "BODY": "Edit agents in your team." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Finish", + "ROUTE": "settings_teams_edit_finish", + "BODY": "You are all set to go!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Couldn't save the team details. Try again." + }, + "AGENTS": { + "AGENT": "AGENT", + "EMAIL": "EMAIL", + "BUTTON_TEXT": "Add agents", + "ADD_AGENTS": "Adding Agents to your Team...", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected." + }, + "ADD": { + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation.", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected.", + "BUTTON_TEXT": "Add agents", + "AGENT_VALIDATION_ERROR": "Select at least one agent." + }, + "FINISH": { + "TITLE": "Your team is ready!", + "MESSAGE": "You can now collaborate as a team on conversations. Happy supporting ", + "BUTTON_TEXT": "Finish" + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Team deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the team. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure you want to delete the team?", + "PLACE_HOLDER": "Please type {teamName} to confirm", + "MESSAGE": "Deleting the team will remove the team assignment from the conversations assigned to this team.", + "YES": "Delete ", + "NO": "Cancel" + } + }, + "SETTINGS": "Settings", + "FORM": { + "UPDATE": "Update team", + "CREATE": "Create team", + "NAME": { + "LABEL": "Team name", + "PLACEHOLDER": "Example: Sales, Customer Support" + }, + "DESCRIPTION": { + "LABEL": "Team Description", + "PLACEHOLDER": "Short description about this team." + }, + "AUTO_ASSIGN": { + "LABEL": "Allow auto assign for this team." + }, + "SUBMIT_CREATE": "Create team" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/webhooks.json b/app/javascript/dashboard/i18n/locale/hi/webhooks.json new file mode 100644 index 0000000..347c968 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Webhook Settings" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/hi/whatsappTemplates.json new file mode 100644 index 0000000..cf28312 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Whatsapp Templates", + "SUBTITLE": "Select the whatsapp template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hi/yearInReview.json b/app/javascript/dashboard/i18n/locale/hi/yearInReview.json new file mode 100644 index 0000000..414cee3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hi/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "Close", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "conversations", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "Download", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "Share conversation" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/advancedFilters.json b/app/javascript/dashboard/i18n/locale/hr/advancedFilters.json new file mode 100644 index 0000000..6ab65f2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Filtriraj razgovore", + "SUBTITLE": "Dodajte svoje filtre ispod i pritisnite 'Primijeni filtre' da biste se probili kroz nered u chatu.", + "EDIT_CUSTOM_FILTER": "Uredi mapu", + "CUSTOM_VIEWS_SUBTITLE": "Dodajte ili uklonite filtre i ažurirajte svoju mapu.", + "ADD_NEW_FILTER": "Dodaj filter", + "FILTER_DELETE_ERROR": "Ups, čini se da ne možemo ništa spremiti! Molimo dodajte barem jedan filter za spremanje.", + "SUBMIT_BUTTON_LABEL": "Primijeni filtre", + "UPDATE_BUTTON_LABEL": "Ažuriraj mapu", + "CANCEL_BUTTON_LABEL": "Odustani", + "CLEAR_BUTTON_LABEL": "Očisti filtre", + "FOLDER_LABEL": "Naziv mape", + "FOLDER_QUERY_LABEL": "Upit mape", + "EMPTY_VALUE_ERROR": "Vrijednost je obavezna.", + "TOOLTIP_LABEL": "Filtriraj razgovore", + "QUERY_DROPDOWN_LABELS": { + "AND": "I", + "OR": "ILI" + }, + "INPUT_PLACEHOLDER": "Unesite vrijednost", + "OPERATOR_LABELS": { + "equal_to": "Jednako", + "not_equal_to": "Nije jednako", + "does_not_contain": "Ne sadrži", + "is_present": "Prisutno je", + "is_not_present": "Nije prisutno", + "is_greater_than": "Veće je od", + "is_less_than": "Manje je od", + "days_before": "Je x dana prije", + "starts_with": "Počinje s", + "equalTo": "Jednako", + "notEqualTo": "Nije jednako", + "contains": "Sadrži", + "doesNotContain": "Ne sadrži", + "isPresent": "Prisutno je", + "isNotPresent": "Nije prisutno", + "isGreaterThan": "Veće je od", + "isLessThan": "Manje je od", + "daysBefore": "Je x dana prije", + "startsWith": "Počinje s" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "Istina", + "FALSE": "Neistina" + }, + "ATTRIBUTES": { + "STATUS": "Status", + "ASSIGNEE_NAME": "Ime dodijeljenog", + "INBOX_NAME": "Naziv sandučića", + "TEAM_NAME": "Naziv tima", + "CONVERSATION_IDENTIFIER": "Identifikator razgovora", + "CAMPAIGN_NAME": "Naziv kampanje", + "LABELS": "Oznake", + "BROWSER_LANGUAGE": "Jezik preglednika", + "PRIORITY": "Prioritet", + "COUNTRY_NAME": "Ime zemlje", + "REFERER_LINK": "Povezica preporuke", + "CUSTOM_ATTRIBUTE_LIST": "Popis", + "CUSTOM_ATTRIBUTE_TEXT": "Tekst", + "CUSTOM_ATTRIBUTE_NUMBER": "Broj", + "CUSTOM_ATTRIBUTE_LINK": "Povezica", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Kvačica", + "CREATED_AT": "Kreirano", + "LAST_ACTIVITY": "Zadnja aktivnost" + }, + "ERRORS": { + "VALUE_REQUIRED": "Vrijednost je obavezna", + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standardni filteri", + "ADDITIONAL_FILTERS": "Dodatni filteri", + "CUSTOM_ATTRIBUTES": "Dodatni atributi" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Želite li spremiti ovaj filteri?", + "LABEL": "Naziv ovog filtera", + "PLACEHOLDER": "Dajte ime ovom filteru da ga se prisjetite kasnije.", + "ERROR_MESSAGE": "Ime je obavezno.", + "SAVE_BUTTON": "Spremi filter", + "CANCEL_BUTTON": "Odustani", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Mapa uspješno kreirana.", + "ERROR_MESSAGE": "Greška prilikom brisanja mape." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment uspješno kreiran.", + "ERROR_MESSAGE": "Greška prilikom kreiranja segmenta." + } + }, + "EDIT": { + "EDIT_BUTTON": "Uredi folder" + }, + "DELETE": { + "DELETE_BUTTON": "Izbriši filter", + "MODAL": { + "CONFIRM": { + "TITLE": "Potvrdi brisanje", + "MESSAGE": "Jeste li sigurno da želite izbrisati filter?", + "YES": "Da, izbriši", + "NO": "Ne, zadrži" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder uspješno izbrisan.", + "ERROR_MESSAGE": "Greška prilikom brisanja mape." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment uspješno izbrisan.", + "ERROR_MESSAGE": "Greška prilikom brisanja segmenta." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/agentBots.json b/app/javascript/dashboard/i18n/locale/hr/agentBots.json new file mode 100644 index 0000000..545a7a5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Botovi", + "LOADING_EDITOR": "Otvaranje Editora...", + "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try. You can manage your bots from this page or create new ones using the 'Add Bot' button.", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "System bot", + "GLOBAL_BOT_BADGE": "System", + "AVATAR": { + "SUCCESS_DELETE": "Bot avatar deleted successfully", + "ERROR_DELETE": "Error deleting bot avatar, please try again" + }, + "BOT_CONFIGURATION": { + "TITLE": "Izaberi agentskog bota", + "DESC": "Dodijelite Agent Bot svojoj pristigloj pošti. Oni mogu voditi početne razgovore i prebaciti ih živom agentu kada je to potrebno.", + "SUBMIT": "Ažuriraj", + "DISCONNECT": "Isključi Bota", + "SUCCESS_MESSAGE": "Uspješno ažuriran agentski bot.", + "DISCONNECTED_SUCCESS_MESSAGE": "Uspješno isključen agentski bot.", + "ERROR_MESSAGE": "Nije moguće ažurirati agentskog bota, molimo pokušajte ponovno.", + "DISCONNECTED_ERROR_MESSAGE": "Nije moguće ažurirati agentskog bota, molimo pokušajte ponovno.", + "SELECT_PLACEHOLDER": "Izaberi Bota" + }, + "ADD": { + "TITLE": "Add Bot", + "CANCEL_BUTTON_TEXT": "Odustani", + "API": { + "SUCCESS_MESSAGE": "Uspješno dodan Bot.", + "ERROR_MESSAGE": "Nije moguće dodati bota, molimo pokušajte kasnije." + } + }, + "LIST": { + "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.", + "LOADING": "Dohvat Botova...", + "TABLE_HEADER": { + "DETAILS": "Bot Details", + "URL": "Webhook URL" + } + }, + "DELETE": { + "BUTTON_TEXT": "Izbriši", + "TITLE": "Izbriši Bota", + "CONFIRM": { + "TITLE": "Potvrdi brisanje", + "MESSAGE": "Are you sure you want to delete {name}?", + "YES": "Yes, Delete", + "NO": "No, Keep" + }, + "API": { + "SUCCESS_MESSAGE": "Bot uspješno izbrisan.", + "ERROR_MESSAGE": "Nije moguće izbrisati bota, molimo pokušajte ponovno." + } + }, + "EDIT": { + "BUTTON_TEXT": "Uredi", + "TITLE": "Uredi Bota", + "API": { + "SUCCESS_MESSAGE": "Bot uspješno izbrisan.", + "ERROR_MESSAGE": "Nije moguće ažurirati bota, molimo pokušajte ponovno." + } + }, + "ACCESS_TOKEN": { + "TITLE": "Pristupni token", + "DESCRIPTION": "Copy the access token and save it securely", + "COPY_SUCCESSFUL": "Access token copied to clipboard", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "Naziv Bota", + "PLACEHOLDER": "Enter bot name", + "REQUIRED": "Potrebno je unijeti ime Bota" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Što ovaj Bot radi?" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "Webhook URL is required" + }, + "ERRORS": { + "NAME": "Potrebno je unijeti ime Bota", + "URL": "Webhook URL is required", + "VALID_URL": "Please enter a valid URL starting with http:// or https://" + }, + "CANCEL": "Odustani", + "CREATE": "Create Bot", + "UPDATE": "Update Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them." + }, + "TYPES": { + "WEBHOOK": "Webhook Bot" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/agentMgmt.json b/app/javascript/dashboard/i18n/locale/hr/agentMgmt.json new file mode 100644 index 0000000..ba6ecee --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Agenti", + "HEADER_BTN_TXT": "Dodaj agenta", + "LOADING": "Dohvaćanje popisa agenata", + "DESCRIPTION": "An agent is a member of your customer support team who can view and respond to user messages. The list below shows all the agents in your account.", + "LEARN_MORE": "Learn about user roles", + "AGENT_TYPES": { + "ADMINISTRATOR": "Administrator", + "AGENT": "Agent" + }, + "LIST": { + "404": "There are no agents associated to this account", + "TITLE": "Manage agents in your team", + "DESC": "You can add/remove agents to/in your team.", + "NAME": "Ime", + "EMAIL": "E-pošta", + "STATUS": "Status", + "ACTIONS": "Radnje", + "VERIFIED": "Potvrđen", + "VERIFICATION_PENDING": "Potvrda na čekanju", + "AVAILABLE_CUSTOM_ROLE": "Available custom role permissions" + }, + "ADD": { + "TITLE": "Dodaj agenta u svoj tim", + "DESC": "You can add people who will be able to handle support for your inboxes.", + "CANCEL_BUTTON_TEXT": "Odustani", + "FORM": { + "NAME": { + "LABEL": "Ime agenta", + "PLACEHOLDER": "Please enter a name of the agent" + }, + "AGENT_TYPE": { + "LABEL": "Uloga", + "PLACEHOLDER": "Please select a role", + "ERROR": "Role is required" + }, + "EMAIL": { + "LABEL": "Adresa e-pošte", + "PLACEHOLDER": "Please enter an email address of the agent" + }, + "SUBMIT": "Dodaj agenta" + }, + "API": { + "SUCCESS_MESSAGE": "Uspješno dodan agent", + "EXIST_MESSAGE": "Agent email already in use, Please try another email address", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "DELETE": { + "BUTTON_TEXT": "Izbriši", + "API": { + "SUCCESS_MESSAGE": "Agent uspješno izbrisan", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Potvrdi brisanje", + "MESSAGE": "Are you sure to delete ", + "YES": "Da, izbriši", + "NO": "Ne, zadrži" + } + }, + "EDIT": { + "TITLE": "Uredi agenta", + "FORM": { + "NAME": { + "LABEL": "Ime agenta", + "PLACEHOLDER": "Please enter a name of the agent" + }, + "AGENT_TYPE": { + "LABEL": "Uloga", + "PLACEHOLDER": "Molimo odaberite ulogu", + "ERROR": "Potrebno je unijeti ulogu" + }, + "EMAIL": { + "LABEL": "Adresa e-pošte", + "PLACEHOLDER": "Please enter an email address of the agent" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Raspoloživost", + "PLACEHOLDER": "Izaberi status raspoloživosti", + "ERROR": "Potrebna je raspoloživost" + }, + "SUBMIT": "Uredi agenta" + }, + "BUTTON_TEXT": "Uredi", + "CANCEL_BUTTON_TEXT": "Odustani", + "API": { + "SUCCESS_MESSAGE": "Agent uspješno ažuriran", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Ponovno postvljanje lozinke", + "ADMIN_SUCCESS_MESSAGE": "An email with reset password instructions has been sent to the agent", + "SUCCESS_MESSAGE": "Agent password reset successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "SEARCH": { + "NO_RESULTS": "No results found." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "None", + "TITLE": { + "AGENT": "Select agent", + "TEAM": "Select team" + }, + "LIST": { + "NONE": "Nijedno" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "No agents found", + "TEAM": "No teams found" + }, + "PLACEHOLDER": { + "AGENT": "Search agents", + "TEAM": "Search teams", + "INPUT": "Pretraga agenata" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/hr/attributesMgmt.json new file mode 100644 index 0000000..2add7c4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Custom Attributes", + "HEADER_BTN_TXT": "Add Custom Attribute", + "LOADING": "Fetching custom attributes", + "DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.", + "LEARN_MORE": "Learn more about custom attributes", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Tekst", + "NUMBER": "Broj", + "LINK": "Povezica", + "DATE": "Date", + "LIST": "Popis", + "CHECKBOX": "Kvačica" + }, + "ADD": { + "TITLE": "Add Custom Attribute", + "SUBMIT": "Create", + "CANCEL_BUTTON_TEXT": "Odustani", + "FORM": { + "NAME": { + "LABEL": "Display Name", + "PLACEHOLDER": "Enter custom attribute display name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Enter custom attribute description", + "ERROR": "Description is required" + }, + "MODEL": { + "LABEL": "Applies to", + "PLACEHOLDER": "Please select one", + "ERROR": "Model is required" + }, + "TYPE": { + "LABEL": "Type", + "PLACEHOLDER": "Please select a type", + "ERROR": "Type is required", + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter value and press enter key", + "ERROR": "Must have at least one value" + } + }, + "KEY": { + "LABEL": "Key", + "PLACEHOLDER": "Enter custom attribute key", + "ERROR": "Key is required", + "IN_VALID": "Invalid key" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute added successfully!", + "ERROR_MESSAGE": "Could not create a Custom Attribute. Please try again later." + } + }, + "DELETE": { + "BUTTON_TEXT": "Izbriši", + "API": { + "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure want to delete - {attributeName}", + "PLACE_HOLDER": "Please type {attributeName} to confirm", + "MESSAGE": "Deleting will remove the custom attribute", + "YES": "Delete ", + "NO": "Odustani" + } + }, + "EDIT": { + "TITLE": "Edit Custom Attribute", + "UPDATE_BUTTON_TEXT": "Update", + "TYPE": { + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter values and press enter key" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute updated successfully", + "ERROR_MESSAGE": "There was an error updating custom attribute, please try again" + } + }, + "TABS": { + "HEADER": "Custom Attributes", + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Ime", + "DESCRIPTION": "Description", + "TYPE": "Type", + "KEY": "Key" + }, + "BUTTONS": { + "EDIT": "Uredi", + "DELETE": "Izbriši" + }, + "EMPTY_RESULT": { + "404": "There are no custom attributes created", + "NOT_FOUND": "There are no custom attributes configured" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/auditLogs.json b/app/javascript/dashboard/i18n/locale/hr/auditLogs.json new file mode 100644 index 0000000..12601fa --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Audit Logovi", + "HEADER_BTN_TXT": "Dodaj Audit Logove", + "LOADING": "Dohvat Audit Logova", + "DESCRIPTION": "Audit Logs maintain a record of activities in your account, allowing you to track and audit your account, team, or services.", + "LEARN_MORE": "Learn more about audit logs", + "SEARCH_404": "Ne postoji rezultat za zadano pretraživanje", + "SIDEBAR_TXT": "Audit Logovi
Audit Logovi su tragovi događaja i akcija u Chatwoot sustavu.
", + "LIST": { + "404": "Na ovom korisničkom računu nema dostupnih Audit Logova.", + "TITLE": "Upravljanje Audit Logovima", + "DESC": "Audit Logovi su tragovi događaja i akcija u Chatwoot sustavu.", + "TABLE_HEADER": { + "ACTIVITY": "Korisnik", + "TIME": "Akcija", + "IP_ADDRESS": "IP adresa" + } + }, + "API": { + "SUCCESS_MESSAGE": "Audit Logovi su uspješno dohvaćeni", + "ERROR_MESSAGE": "Neuspješno spajanje na Woot Server, Molimo pokušajte kasnije" + }, + "DEFAULT_USER": "System", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} invited {invitee} to the account as an {role}", + "EDIT": { + "SELF": "{agentName} changed their {attributes} to {values}", + "OTHER": "{agentName} changed {attributes} of {user} to {values}", + "DELETED": "{agentName} changed {attributes} of a deleted user to {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} signed in", + "SIGN_OUT": "{agentName} signed out" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} deleted conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/automation.json b/app/javascript/dashboard/i18n/locale/hr/automation.json new file mode 100644 index 0000000..6172de9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automation", + "DESCRIPTION": "Automation can replace and streamline existing processes that require manual effort, such as adding labels and assigning conversations to the most suitable agent. This allows the team to focus on their strengths while reducing time spent on routine tasks.", + "LEARN_MORE": "Learn more about automation", + "HEADER_BTN_TXT": "Add Automation Rule", + "LOADING": "Fetching automation rules", + "ADD": { + "TITLE": "Add Automation Rule", + "SUBMIT": "Create", + "CANCEL_BUTTON_TEXT": "Odustani", + "FORM": { + "NAME": { + "LABEL": "Rule Name", + "PLACEHOLDER": "Enter rule name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Enter rule description", + "ERROR": "Description is required" + }, + "EVENT": { + "LABEL": "Event", + "PLACEHOLDER": "Please select one", + "ERROR": "Event is required" + }, + "CONDITIONS": { + "LABEL": "Conditions" + }, + "ACTIONS": { + "LABEL": "Radnje" + } + }, + "CONDITION_BUTTON_LABEL": "Add Condition", + "ACTION_BUTTON_LABEL": "Add Action", + "API": { + "SUCCESS_MESSAGE": "Automation rule added successfully", + "ERROR_MESSAGE": "Could not able to create a automation rule, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Ime", + "DESCRIPTION": "Description", + "ACTIVE": "Active", + "CREATED_ON": "Created on" + }, + "404": "No automation rules found" + }, + "DELETE": { + "TITLE": "Delete Automation Rule", + "SUBMIT": "Izbriši", + "CANCEL_BUTTON_TEXT": "Odustani", + "CONFIRM": { + "TITLE": "Potvrdi brisanje", + "MESSAGE": "Are you sure to delete ", + "YES": "Da, izbriši", + "NO": "Ne, zadrži" + }, + "API": { + "SUCCESS_MESSAGE": "Automation rule deleted successfully", + "ERROR_MESSAGE": "Could not able to delete a automation rule, Please try again later" + } + }, + "EDIT": { + "TITLE": "Edit Automation Rule", + "SUBMIT": "Update", + "CANCEL_BUTTON_TEXT": "Odustani", + "API": { + "SUCCESS_MESSAGE": "Automation rule updated successfully", + "ERROR_MESSAGE": "Could not update automation rule, Please try again later" + } + }, + "CLONE": { + "TOOLTIP": "Clone", + "API": { + "SUCCESS_MESSAGE": "Automation cloned successfully", + "ERROR_MESSAGE": "Could not clone automation rule, Please try again later" + } + }, + "FORM": { + "EDIT": "Uredi", + "CREATE": "Create", + "DELETE": "Izbriši", + "CANCEL": "Odustani", + "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" + }, + "CONDITION": { + "DELETE_MESSAGE": "You need to have atleast one condition to save", + "CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes" + }, + "ACTION": { + "DELETE_MESSAGE": "You need to have atleast one action to save", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Enter your message here", + "TEAM_DROPDOWN_PLACEHOLDER": "Select teams", + "EMAIL_INPUT_PLACEHOLDER": "Enter email", + "URL_INPUT_PLACEHOLDER": "Enter URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Activate Automation Rule", + "DEACTIVATION_TITLE": "Deactivate Automation Rule", + "ACTIVATION_DESCRIPTION": "This action will activate the automation rule '{automationName}'. Are you sure you want to proceed?", + "DEACTIVATION_DESCRIPTION": "This action will deactivate the automation rule '{automationName}'. Are you sure you want to proceed?", + "ACTIVATION_SUCCESFUL": "Automation Rule Activated Successfully", + "DEACTIVATION_SUCCESFUL": "Automation Rule Deactivated Successfully", + "ACTIVATION_ERROR": "Could not Activate Automation, Please try again later", + "DEACTIVATION_ERROR": "Could not Deactivate Automation, Please try again later", + "CONFIRMATION_LABEL": "Da", + "CANCEL_LABEL": "Ne" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Could not upload attachment, Please try again", + "LABEL_IDLE": "Prenesi privitak", + "LABEL_UPLOADING": "Prenosim...", + "LABEL_UPLOADED": "Successfully Uploaded", + "LABEL_UPLOAD_FAILED": "Upload Failed" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Value is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "NONE_OPTION": "Nijedno", + "EVENTS": { + "CONVERSATION_CREATED": "Conversation Created", + "CONVERSATION_UPDATED": "Conversation Updated", + "MESSAGE_CREATED": "Message Created", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Conversation Opened" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assign to Agent", + "ASSIGN_TEAM": "Assign a Team", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "SEND_EMAIL_TO_TEAM": "Send an Email to Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Mute Conversation", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_WEBHOOK_EVENT": "Send Webhook Event", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "CHANGE_PRIORITY": "Promjena prioriteta", + "ADD_SLA": "Add SLA", + "OPEN_CONVERSATION": "Otvori razgovor" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "None", + "LOW": "Nisko", + "MEDIUM": "Srednje", + "HIGH": "Visoko", + "URGENT": "Hitno" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Message Type", + "MESSAGE_CONTAINS": "Message Contains", + "EMAIL": "Email", + "INBOX": "Inbox", + "CONVERSATION_LANGUAGE": "Conversation Language", + "PHONE_NUMBER": "Phone Number", + "STATUS": "Status", + "BROWSER_LANGUAGE": "Browser Language", + "MAIL_SUBJECT": "Email Subject", + "COUNTRY_NAME": "Country", + "REFERER_LINK": "Referrer Link", + "ASSIGNEE_NAME": "Assignee", + "TEAM_NAME": "Tim", + "PRIORITY": "Prioritet", + "LABELS": "Labels" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/bulkActions.json b/app/javascript/dashboard/i18n/locale/hr/bulkActions.json new file mode 100644 index 0000000..0c8d660 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", + "AGENT_SELECT_LABEL": "Select agent", + "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", + "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Go back", + "ASSIGN_LABEL": "Assign", + "YES": "Yes", + "SEARCH_INPUT_PLACEHOLDER": "Search", + "ASSIGN_AGENT_TOOLTIP": "Assign agent", + "ASSIGN_TEAM_TOOLTIP": "Assign team", + "ASSIGN_SUCCESFUL": "Conversations assigned successfully.", + "ASSIGN_FAILED": "Failed to assign conversations. Please try again.", + "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", + "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", + "AGENT_LIST_LOADING": "Loading agents", + "UPDATE": { + "CHANGE_STATUS": "Change status", + "SNOOZE_UNTIL": "Snooze", + "UPDATE_SUCCESFUL": "Conversation status updated successfully.", + "UPDATE_FAILED": "Failed to update conversations. Please try again." + }, + "LABELS": { + "ASSIGN_LABELS": "Assign labels", + "NO_LABELS_FOUND": "No labels found", + "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "ASSIGN_SUCCESFUL": "Labels assigned successfully.", + "ASSIGN_FAILED": "Failed to assign labels. Please try again." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Select team", + "NONE": "None", + "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", + "ASSIGN_SELECTED_TEAMS": "Assign selected team.", + "ASSIGN_SUCCESFUL": "Teams assigned successfully.", + "ASSIGN_FAILED": "Failed to assign team. Please try again." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/campaign.json b/app/javascript/dashboard/i18n/locale/hr/campaign.json new file mode 100644 index 0000000..f7323f2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Sent by", + "BOT": "Bot", + "FROM": "od", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "Odustani", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Poruka", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "SENT_BY": { + "LABEL": "Sent by", + "PLACEHOLDER": "Please select sender", + "ERROR": "Sender is required" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Please enter the URL", + "ERROR": "Please enter a valid URL" + }, + "TIME_ON_PAGE": { + "LABEL": "Time on page(Seconds)", + "PLACEHOLDER": "Please enter the time", + "ERROR": "Time on page is required" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "Enable campaign", + "TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Odustani" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "Odustani", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Poruka", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Odustani" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No WhatsApp campaigns are available", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "Odustani", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "Proces {templateName}", + "LANGUAGE": "Jezik", + "CATEGORY": "Kategorija", + "VARIABLES_LABEL": "Varijable", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Odustani" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Are you sure to delete?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "Izbriši", + "API": { + "SUCCESS_MESSAGE": "Campaign deleted successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/hr/cannedMgmt.json new file mode 100644 index 0000000..48a5f11 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Canned Responses", + "LEARN_MORE": "Saznajte više o unaprijed pripremljenim odgovorima", + "DESCRIPTION": "Unaprijed pripremljeni odgovori su već napisani predlošci za odgovore koji vam pomažu da brzo odgovorite na razgovor. Agenti mogu upisati znak '/' nakon kojeg slijedi kratki kod za umetanje unaprijed pripremljenog odgovora tijekom razgovora.", + "HEADER_BTN_TXT": "Add canned response", + "LOADING": "Fetching canned responses...", + "SEARCH_404": "Ne postoji rezultat za zadano pretraživanje.", + "LIST": { + "404": "There are no canned responses available in this account.", + "TITLE": "Manage canned responses", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "TABLE_HEADER": { + "SHORT_CODE": "Short code", + "CONTENT": "Content", + "ACTIONS": "Radnje" + } + }, + "ADD": { + "TITLE": "Add canned response", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "CANCEL_BUTTON_TEXT": "Odustani", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a short code.", + "ERROR": "Short Code is required." + }, + "CONTENT": { + "LABEL": "Poruka", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "Submit" + }, + "API": { + "SUCCESS_MESSAGE": "Canned response added successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "EDIT": { + "TITLE": "Edit canned response", + "CANCEL_BUTTON_TEXT": "Odustani", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a shortcode.", + "ERROR": "Short code is required." + }, + "CONTENT": { + "LABEL": "Poruka", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "Submit" + }, + "BUTTON_TEXT": "Uredi", + "API": { + "SUCCESS_MESSAGE": "Canned response is updated successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "DELETE": { + "BUTTON_TEXT": "Izbriši", + "API": { + "SUCCESS_MESSAGE": "Canned response deleted successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, delete ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/chatlist.json b/app/javascript/dashboard/i18n/locale/hr/chatlist.json new file mode 100644 index 0000000..1625c71 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Fetching conversations", + "LOAD_MORE_CONVERSATIONS": "Load more conversations", + "EOF": "All conversations loaded 🎉", + "LIST": { + "404": "There are no active conversations in this group." + }, + "FAILED_TO_SEND": "Failed to send", + "TAB_HEADING": "Conversations", + "MENTION_HEADING": "Mentions", + "UNATTENDED_HEADING": "Unattended", + "SEARCH": { + "INPUT": "Search for People, Chats, Saved Replies .." + }, + "FILTER_ALL": "All", + "ASSIGNEE_TYPE_TABS": { + "me": "Mine", + "unassigned": "Unassigned", + "all": "All" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Open" + }, + "resolved": { + "TEXT": "Resolved" + }, + "pending": { + "TEXT": "Pending" + }, + "snoozed": { + "TEXT": "Snoozed" + }, + "all": { + "TEXT": "All" + } + }, + "VIEW_FILTER": "Pregled", + "SORT_TOOLTIP_LABEL": "Poredaj razgovore", + "CHAT_SORT": { + "STATUS": "Status", + "ORDER_BY": "Poredaj po" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Created", + "OLDEST": "Kreirano:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Zadnja aktivnost:", + "ACTIVE": "Zadnja aktivnost" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Last activity: Oldest first" + }, + "last_activity_at_desc": { + "TEXT": "Last activity: Newest first" + }, + "created_at_desc": { + "TEXT": "Created at: Newest first" + }, + "created_at_asc": { + "TEXT": "Created at: Oldest first" + }, + "priority_desc": { + "TEXT": "Priority: Highest first" + }, + "priority_asc": { + "TEXT": "Priority: Lowest first" + }, + "waiting_since_asc": { + "TEXT": "Pending Response: Longest first" + }, + "waiting_since_desc": { + "TEXT": "Pending Response: Shortest first" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "has shared a url" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Poredaj razgovor", + "DROPDOWN_TITLE": "Poredaj po", + "ITEMS": { + "LATEST": { + "NAME": "Zadnja aktivnost", + "LABEL": "Zadnja aktivnost" + }, + "CREATED_AT": { + "NAME": "Kreirano", + "LABEL": "Kreirano" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Zadnja poruka korisnika", + "LABEL": "Zadnja poruka" + } + } + }, + "RECEIVED_VIA_EMAIL": "Received via email", + "VIEW_TWEET_IN_TWITTER": "View tweet in Twitter", + "REPLY_TO_TWEET": "Reply to this tweet", + "LINK_TO_STORY": "Go to instagram story", + "SENT": "Sent successfully", + "READ": "Read successfully", + "DELIVERED": "Delivered successfully", + "NO_MESSAGES": "No Messages", + "NO_CONTENT": "No content available", + "HIDE_QUOTED_TEXT": "Hide Quoted Text", + "SHOW_QUOTED_TEXT": "Show Quoted Text", + "MESSAGE_READ": "Read", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/companies.json b/app/javascript/dashboard/i18n/locale/hr/companies.json new file mode 100644 index 0000000..0d1235c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "Ime", + "DOMAIN": "Domain", + "CREATED_AT": "Kreirano", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/components.json b/app/javascript/dashboard/i18n/locale/hr/components.json new file mode 100644 index 0000000..372cb86 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} of {totalPages} pages" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "Nisu pronađeni rezultati.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} more" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "Nisu pronađeni rezultati.", + "SEARCHING": "Tražim..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Odustani", + "CONFIRM": "Confirm" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Search country", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Please select a dial code from the list" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Author is not available" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Learn more", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/contact.json b/app/javascript/dashboard/i18n/locale/hr/contact.json new file mode 100644 index 0000000..759e700 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Not Available", + "EMAIL_ADDRESS": "Adresa e-pošte", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "COPY_SUCCESSFUL": "Copied to clipboard successfully", + "COMPANY": "Company", + "LOCATION": "Location", + "BROWSER_LANGUAGE": "Browser Language", + "CONVERSATION_TITLE": "Conversation Details", + "VIEW_PROFILE": "View Profile", + "BROWSER": "Browser", + "OS": "Operating System", + "INITIATED_FROM": "Initiated from", + "INITIATED_AT": "Initiated at", + "IP_ADDRESS": "IP Address", + "CREATED_AT_LABEL": "Created", + "NEW_MESSAGE": "New message", + "CALL": "Call", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.", + "TITLE": "Previous Conversations" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Contact Labels", + "ERROR": "Couldn't update labels" + }, + "CONVERSATION": { + "TITLE": "Conversation Labels", + "ADD_BUTTON": "Add Labels" + }, + "LABEL_SELECT": { + "TITLE": "Add Labels", + "PLACEHOLDER": "Search labels", + "NO_RESULT": "No labels found", + "CREATE_LABEL": "Create new label" + } + }, + "MERGE_CONTACT": "Merge contact", + "CONTACT_ACTIONS": "Contact actions", + "MUTE_CONTACT": "Block Contact", + "UNMUTE_CONTACT": "Unblock Contact", + "MUTED_SUCCESS": "This contact is blocked successfully. You will not be notified of any future conversations.", + "UNMUTED_SUCCESS": "This contact is unblocked successfully.", + "SEND_TRANSCRIPT": "Send Transcript", + "EDIT_LABEL": "Uredi", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Custom Attributes", + "CONTACT_LABELS": "Contact Labels", + "PREVIOUS_CONVERSATIONS": "Previous Conversations", + "NO_RECORDS_FOUND": "No attributes found" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Edit Contact", + "TITLE": "Edit contact", + "DESC": "Edit contact details" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Delete Contact", + "TITLE": "Delete contact", + "DESC": "Delete contact details", + "CONFIRM": { + "TITLE": "Potvrdi brisanje", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete", + "NO": "No, Keep" + }, + "API": { + "SUCCESS_MESSAGE": "Contact deleted successfully", + "ERROR_MESSAGE": "Could not delete contact. Please try again later." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Submit", + "CANCEL": "Odustani", + "AVATAR": { + "LABEL": "Contact Avatar" + }, + "NAME": { + "PLACEHOLDER": "Enter the full name of the contact", + "LABEL": "Ime i prezime" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio of the contact", + "LABEL": "Bio" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address of the contact", + "LABEL": "Adresa e-pošte", + "DUPLICATE": "This email address is in use for another contact.", + "ERROR": "Please enter a valid email address." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number of the contact", + "LABEL": "Phone Number", + "HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]", + "ERROR": "Phone number should be either empty or of E.164 format", + "DIAL_CODE_ERROR": "Please select a dial code from the list", + "DUPLICATE": "This phone number is in use for another contact." + }, + "LOCATION": { + "PLACEHOLDER": "Enter the location of the contact", + "LABEL": "Location" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Enter the company name", + "LABEL": "Company Name" + }, + "COUNTRY": { + "PLACEHOLDER": "Unesi ime zemlje", + "LABEL": "Ime zemlje", + "SELECT_PLACEHOLDER": "Odaberi", + "REMOVE": "Izbaci", + "SELECT_COUNTRY": "Odaberi zemlju" + }, + "CITY": { + "PLACEHOLDER": "Unesi ime grada", + "LABEL": "Ime grada" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Enter the Facebook username", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Enter the Twitter username", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Enter the LinkedIn username", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Enter the Github username", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Contact avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later." + } + }, + "SUCCESS_MESSAGE": "Contact saved successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Start conversation", + "TITLE": "New conversation", + "DESC": "Start a new conversation by sending a new message.", + "NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.", + "FORM": { + "TO": { + "LABEL": "To" + }, + "INBOX": { + "LABEL": "Inbox", + "PLACEHOLDER": "Izaberi izvorišni inbox", + "ERROR": "Select an inbox" + }, + "SUBJECT": { + "LABEL": "Subject", + "PLACEHOLDER": "Subject", + "ERROR": "Subject can't be empty" + }, + "MESSAGE": { + "LABEL": "Poruka", + "PLACEHOLDER": "Write your message here", + "ERROR": "Message can't be empty" + }, + "ATTACHMENTS": { + "SELECT": "Choose files", + "HELP_TEXT": "Drag and drop files here or choose files to attach" + }, + "SUBMIT": "Send message", + "CANCEL": "Odustani", + "SUCCESS_MESSAGE": "Message sent!", + "GO_TO_CONVERSATION": "View", + "ERROR_MESSAGE": "Couldn't send! try again" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Social Profiles" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Add custom attribute", + "COPY_SUCCESSFUL": "Copied to clipboard successfully", + "SHOW_MORE": "Show all attributes", + "SHOW_LESS": "Show less attributes", + "ACTIONS": { + "COPY": "Copy attribute", + "DELETE": "Delete attribute", + "EDIT": "Edit attribute" + }, + "ADD": { + "TITLE": "Create custom attribute", + "DESC": "Add custom information to this contact." + }, + "FORM": { + "CREATE": "Add attribute", + "CANCEL": "Odustani", + "NAME": { + "LABEL": "Custom attribute name", + "PLACEHOLDER": "Eg: shopify id", + "ERROR": "Invalid custom attribute name" + }, + "VALUE": { + "LABEL": "Attribute value", + "PLACEHOLDER": "Eg: 11901 " + }, + "ADD": { + "TITLE": "Create new attribute ", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Select value", + "SEARCH_INPUT_PLACEHOLDER": "Search value", + "NO_RESULT": "No result found" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Valid value is required", + "INVALID_URL": "Invalid URL", + "INVALID_INPUT": "Invalid Input" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Merge contacts", + "DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact’ s attributes will take precedence.", + "PRIMARY": { + "TITLE": "Primary contact", + "HELP_LABEL": "To be deleted" + }, + "PARENT": { + "TITLE": "Contact to merge", + "PLACEHOLDER": "Search for a contact", + "HELP_LABEL": "To be kept" + }, + "SUMMARY": { + "TITLE": "Summary", + "DELETE_WARNING": "Contact of {primaryContactName} will be deleted.", + "ATTRIBUTE_WARNING": "Contact details of {primaryContactName} will be copied to {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": " Merge contacts", + "CANCEL": "Odustani", + "CHILD_CONTACT": { + "ERROR": "Select a child contact to merge" + }, + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Kontakti", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "Active contacts", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "Poruka", + "SEND_MESSAGE": "Send message", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "Kontakti" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Add contact", + "EXPORT_CONTACT": "Export contacts", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Save contact", + "EMAIL_ADDRESS_DUPLICATE": "This email address is in use for another contact.", + "PHONE_NUMBER_DUPLICATE": "This phone number is in use for another contact.", + "SUCCESS_MESSAGE": "Contact saved successfully", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "This contact is unblocked successfully", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Import contacts", + "DESCRIPTION": "Import contacts through a CSV file.", + "DOWNLOAD_LABEL": "Download a sample csv.", + "LABEL": "CSV File:", + "CHOOSE_FILE": "Choose file", + "CHANGE": "Change", + "CANCEL": "Odustani", + "IMPORT": "Import", + "SUCCESS_MESSAGE": "You will be notified via email when the import is complete.", + "ERROR_MESSAGE": "Došlo je do pogreške, molimo pokušajte ponovo" + }, + "EXPORT_CONTACT": { + "TITLE": "Export contacts", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Export", + "SUCCESS_MESSAGE": "Export is in progress, You will be notified via email when export file is ready to dowanlod.", + "ERROR_MESSAGE": "Došlo je do pogreške, molimo pokušajte ponovo" + }, + "SORT_BY": { + "LABEL": "Poredaj po", + "OPTIONS": { + "NAME": "Ime", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "COMPANY": "Company", + "COUNTRY": "Country", + "CITY": "City", + "LAST_ACTIVITY": "Zadnja aktivnost", + "CREATED_AT": "Kreirano" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Želite li spremiti ovaj filteri?", + "CONFIRM": "Spremi filter", + "LABEL": "Ime", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "Potvrdi brisanje", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "Yes, Delete", + "CANCEL": "No, Cancel", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "Ime", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "COUNTRY": "Country", + "CITY": "City", + "CREATED_AT": "Kreirano", + "LAST_ACTIVITY": "Zadnja aktivnost", + "REFERER_LINK": "Povezica preporuke", + "BLOCKED": "Blocked", + "BLOCKED_TRUE": "Istina", + "BLOCKED_FALSE": "Neistina", + "BUTTONS": { + "CLEAR_FILTERS": "Očisti filtre", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "Primijeni filtre", + "ADD_FILTER": "Dodaj filter" + }, + "TITLE": "Filter contacts", + "EDIT_SEGMENT": "Edit segment", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Očisti filtre" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "View details", + "EDIT_DETAILS_FORM": { + "TITLE": "Edit contact details", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "This email address is in use for another contact." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "This phone number is in use for another contact." + }, + "CITY": { + "PLACEHOLDER": "Unesi ime grada" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Enter the company name" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "This action is permanent and irreversible.", + "BUTTON": "Delete now" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "Delete contact", + "DELETE_DIALOG": { + "TITLE": "Potvrdi brisanje", + "DESCRIPTION": "Are you sure you want to delete this contact?", + "CONFIRM": "Yes, Delete", + "API": { + "SUCCESS_MESSAGE": "Contact deleted successfully", + "ERROR_MESSAGE": "Could not delete contact. Please try again later." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributes", + "HISTORY": "History", + "NOTES": "Notes", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "There are no previous conversations associated to this contact" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "Da", + "NO": "Ne", + "TRIGGER": { + "SELECT": "Select value", + "INPUT": "Unesite vrijednost" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "Valid value is required", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "Invalid URL", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "No attributes found", + "API": { + "SUCCESS_MESSAGE": "Attribute updated successfully", + "DELETE_SUCCESS_MESSAGE": "Attribute deleted successfully", + "UPDATE_ERROR": "Unable to update attribute. Please try again later", + "DELETE_ERROR": "Unable to delete attribute. Please try again later" + } + }, + "MERGE": { + "TITLE": "Merge contact", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Primary contact", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "To be deleted", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Search for a contact", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!", + "IS_SEARCHING": "Tražim...", + "BUTTONS": { + "CANCEL": "Odustani", + "CONFIRM": "Merge contact" + } + }, + "NOTES": { + "PLACEHOLDER": "Add a note", + "WROTE": "napisao/la", + "YOU": "Vi", + "SAVE": "Save note", + "ADD_NOTE": "Add contact note", + "EXPAND": "Expand", + "COLLAPSE": "Collapse", + "NO_NOTES": "No notes, you can add notes from the contact details page.", + "EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "No contacts found in this account", + "SUBTITLE": "Start adding new contacts by clicking on the button below", + "BUTTON_LABEL": "Add contact", + "SEARCH_EMPTY_STATE_TITLE": "No contacts matches your search 🔍", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Assign Labels", + "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "Izbriši", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Delete contact" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "Pregled", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "To:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Subject :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "Bcc:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "Bcc" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Write your message here..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Varijable", + "BACK": "Go back", + "SEND_MESSAGE": "Send message" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Go back", + "SEND_MESSAGE": "Send message" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/contactFilters.json b/app/javascript/dashboard/i18n/locale/hr/contactFilters.json new file mode 100644 index 0000000..7ebd118 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filter Contacts", + "SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.", + "EDIT_CUSTOM_SEGMENT": "Edit Segment", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your segment.", + "ADD_NEW_FILTER": "Add Filter", + "CLEAR_ALL_FILTERS": "Clear All Filters", + "FILTER_DELETE_ERROR": "You should have atleast one filter to save", + "SUBMIT_BUTTON_LABEL": "Submit", + "UPDATE_BUTTON_LABEL": "Update Segment", + "CANCEL_BUTTON_LABEL": "Odustani", + "CLEAR_BUTTON_LABEL": "Clear Filters", + "EMPTY_VALUE_ERROR": "Value is required", + "SEGMENT_LABEL": "Segment Name", + "SEGMENT_QUERY_LABEL": "Segment Query", + "TOOLTIP_LABEL": "Filter contacts", + "QUERY_DROPDOWN_LABELS": { + "AND": "I", + "OR": "ILI" + }, + "OPERATOR_LABELS": { + "equal_to": "Jednako", + "not_equal_to": "Nije jednako", + "contains": "Sadrži", + "does_not_contain": "Ne sadrži", + "is_present": "Prisutno je", + "is_not_present": "Nije prisutno", + "is_greater_than": "Veće je od", + "is_lesser_than": "Is lesser than", + "days_before": "Je x dana prije" + }, + "ERRORS": { + "VALUE_REQUIRED": "Vrijednost je obavezna" + }, + "ATTRIBUTES": { + "NAME": "Ime", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "CITY": "City", + "COUNTRY": "Country", + "CUSTOM_ATTRIBUTE_LIST": "Popis", + "CUSTOM_ATTRIBUTE_TEXT": "Tekst", + "CUSTOM_ATTRIBUTE_NUMBER": "Broj", + "CUSTOM_ATTRIBUTE_LINK": "Povezica", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Kvačica", + "CREATED_AT": "Created At", + "LAST_ACTIVITY": "Last Activity", + "REFERER_LINK": "Referrer link", + "BLOCKED": "Blocked", + "LABELS": "Labels" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard Filters", + "ADDITIONAL_FILTERS": "Additional Filters", + "CUSTOM_ATTRIBUTES": "Custom Attributes" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/contentTemplates.json b/app/javascript/dashboard/i18n/locale/hr/contentTemplates.json new file mode 100644 index 0000000..f30f385 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Pretraži Predloške", + "NO_TEMPLATES_FOUND": "Nije pronađen predložak za", + "NO_CONTENT": "No content", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Kategorija", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Jezik", + "TEMPLATE_BODY": "Tijelo predloška", + "CATEGORY": "Kategorija" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Tekst" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Varijable", + "LANGUAGE": "Jezik", + "CATEGORY": "Kategorija", + "VARIABLE_PLACEHOLDER": "Unesi {variable} vrijednost", + "GO_BACK_LABEL": "Nazad", + "SEND_MESSAGE_LABEL": "Šalji poruku", + "FORM_ERROR_MESSAGE": "Popuniti sve varijable prije slanja", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Back", + "SEND_MESSAGE_BUTTON": "Šalji poruku" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/conversation.json b/app/javascript/dashboard/i18n/locale/hr/conversation.json new file mode 100644 index 0000000..d14f64b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Please select a conversation from left pane", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", + "404": "Sorry, we cannot find the conversation. Please try again", + "SWITCH_VIEW_LAYOUT": "Switch the layout", + "DASHBOARD_APP_TAB_MESSAGES": "Messages", + "UNVERIFIED_SESSION": "The identity of this user is not verified", + "NO_MESSAGE_1": "Uh oh! Looks like there are no messages from customers in your inbox.", + "NO_MESSAGE_2": " to send a message to your page!", + "NO_INBOX_1": "Hola! Looks like you haven't added any inboxes yet.", + "NO_INBOX_2": " to get started", + "NO_INBOX_AGENT": "Uh Oh! Looks like you are not part of any inbox. Please contact your administrator", + "SEARCH_MESSAGES": "Search for messages in conversations", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "to open command menu", + "KEYBOARD_SHORTCUTS": "to view keyboard shortcuts" + }, + "SEARCH": { + "TITLE": "Search messages", + "RESULT_TITLE": "Search Results", + "LOADING_MESSAGE": "Crunching data...", + "PLACEHOLDER": "Type any text to search messages", + "NO_MATCHING_RESULTS": "No results found." + }, + "UNREAD_MESSAGES": "Unread Messages", + "UNREAD_MESSAGE": "Unread Message", + "CLICK_HERE": "Click here", + "LOADING_INBOXES": "Loading inboxes", + "LOADING_CONVERSATIONS": "Loading Conversations", + "CANNOT_REPLY": "You cannot reply due to", + "24_HOURS_WINDOW": "24 hour message window restriction", + "48_HOURS_WINDOW": "48 hour message window restriction", + "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours", + "NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?", + "ASSIGN_TO_ME": "Assign to me", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hour message window restriction", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "You are replying to:", + "REMOVE_SELECTION": "Remove Selection", + "DOWNLOAD": "Download", + "UNKNOWN_FILE_TYPE": "Unknown File", + "SAVE_CONTACT": "Save Contact", + "NO_CONTENT": "No content to display", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} has shared a contact", + "LOCATION": "{sender} has shared a location", + "FILE": "{sender} has shared a file", + "MEETING": "{sender} has started a meeting" + }, + "UPLOADING_ATTACHMENTS": "Uploading attachments...", + "REPLIED_TO_STORY": "Replied to your story", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", + "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", + "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", + "NO_RESPONSE": "No response", + "RESPONSE": "Response", + "RATING_TITLE": "Rating", + "FEEDBACK_TITLE": "Feedback", + "REPLY_MESSAGE_NOT_FOUND": "Message not available", + "CARD": { + "SHOW_LABELS": "Show labels", + "HIDE_LABELS": "Hide labels" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "Resolve", + "REOPEN_ACTION": "Reopen", + "OPEN_ACTION": "Open", + "MORE_ACTIONS": "More actions", + "OPEN": "More", + "CLOSE": "Close", + "DETAILS": "details", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", + "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "missed", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Mark as pending", + "SNOOZE_UNTIL": "Snooze", + "SNOOZE": { + "TITLE": "Snooze until", + "NEXT_REPLY": "Next reply", + "TOMORROW": "Tomorrow", + "NEXT_WEEK": "Next week" + } + }, + "MENTION": { + "AGENTS": "Agenti", + "TEAMS": "Teams" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Snooze until", + "APPLY": "Snooze", + "CANCEL": "Odustani" + }, + "PRIORITY": { + "TITLE": "Prioritet", + "OPTIONS": { + "NONE": "Nijedno", + "URGENT": "Hitno", + "HIGH": "Visoko", + "MEDIUM": "Srednje", + "LOW": "Nisko" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "Nijedno", + "INPUT_PLACEHOLDER": "Odaberi prioritet", + "NO_RESULTS": "Nisu pronađeni rezultati", + "SUCCESSFUL": "Prioritet razgovora id {conversationId} promijenjen na {priority}", + "FAILED": "Nije moguće promijeniti prioritet. Molim, pokušajte kasnije." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Delete conversation #{conversationId}", + "DESCRIPTION": "Are you sure you want to delete this conversation?", + "CONFIRM": "Izbriši" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Mark as pending", + "RESOLVED": "Mark as resolved", + "MARK_AS_UNREAD": "Mark as unread", + "MARK_AS_READ": "Mark as read", + "REOPEN": "Reopen conversation", + "SNOOZE": { + "TITLE": "Snooze", + "NEXT_REPLY": "Until next reply", + "TOMORROW": "Until tomorrow", + "NEXT_WEEK": "Until next week" + }, + "ASSIGN_AGENT": "Assign agent", + "ASSIGN_LABEL": "Assign label", + "AGENTS_LOADING": "Loading agents...", + "ASSIGN_TEAM": "Assign team", + "DELETE": "Delete conversation", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Conversation id {conversationId} assigned to \"{agentName}\"", + "FAILED": "Couldn't assign agent. Please try again." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Couldn't assign label. Please try again." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Assigned team \"{team}\" to conversation id {conversationId}", + "FAILED": "Couldn't assign team. Please try again." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Message signature", + "ENABLE_SIGN_TOOLTIP": "Enable signature", + "DISABLE_SIGN_TOOLTIP": "Disable signature", + "MSG_INPUT": "Shift + enter for new line. Start with '/' to select a Canned Response.", + "PRIVATE_MSG_INPUT": "Shift + enter for new line. This will be visible only to Agents", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.", + "CLICK_HERE": "Click here to update", + "WHATSAPP_TEMPLATES": "Whatsapp Predlošci" + }, + "REPLYBOX": { + "REPLY": "Reply", + "PRIVATE_NOTE": "Private Note", + "SEND": "Send", + "CREATE": "Add Note", + "INSERT_READ_MORE": "Pročitaj više", + "DISMISS_REPLY": "Dismiss reply", + "REPLYING_TO": "Replying to:", + "TIP_EMOJI_ICON": "Show emoji selector", + "TIP_ATTACH_ICON": "Attach files", + "TIP_AUDIORECORDER_ICON": "Record audio", + "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", + "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "DRAG_DROP": "Drag and drop here to attach", + "START_AUDIO_RECORDING": "Start audio recording", + "STOP_AUDIO_RECORDING": "Stop audio recording", + "": "", + "EMAIL_HEAD": { + "TO": "TO", + "ADD_BCC": "Add bcc", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + }, + "BCC": { + "LABEL": "BCC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Undefined variables", + "MESSAGE": "You have {undefinedVariablesCount} undefined variables in your message: {undefinedVariables}. Would you like to send the message anyway?", + "CONFIRM": { + "YES": "Send", + "CANCEL": "Odustani" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "Private Note: Only visible to you and your team", + "CHANGE_STATUS": "Conversation status changed", + "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_AGENT": "Conversation Assignee changed", + "CHANGE_AGENT_FAILED": "Assignee change failed", + "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", + "ASSIGN_LABEL_FAILED": "Label assignment failed", + "CHANGE_TEAM": "Conversation team changed", + "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", + "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", + "MESSAGE_ERROR": "Unable to send this message, please try again later", + "SENT_BY": "Sent by:", + "BOT": "Bot", + "SEND_FAILED": "Couldn't send message! Try again", + "TRY_AGAIN": "retry", + "ASSIGNMENT": { + "SELECT_AGENT": "Select Agent", + "REMOVE": "Izbriši", + "ASSIGN": "Assign" + }, + "CONTEXT_MENU": { + "COPY": "Copy", + "REPLY_TO": "Reply to this message", + "DELETE": "Izbriši", + "CREATE_A_CANNED_RESPONSE": "Add to canned responses", + "TRANSLATE": "Translate", + "COPY_PERMALINK": "Copy link to the message", + "LINK_COPIED": "Message URL copied to the clipboard", + "DELETE_CONFIRMATION": { + "TITLE": "Are you sure you want to delete this message?", + "MESSAGE": "You cannot undo this action", + "DELETE": "Izbriši", + "CANCEL": "Odustani" + } + }, + "SIDEBAR": { + "CONTACT": "Contact", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Send conversation transcript", + "DESC": "Send a copy of the conversation transcript to the specified email address", + "SUBMIT": "Submit", + "CANCEL": "Odustani", + "SEND_EMAIL_SUCCESS": "The chat transcript was sent successfully", + "SEND_EMAIL_ERROR": "There was an error, please try again", + "FORM": { + "SEND_TO_CONTACT": "Send the transcript to the customer", + "SEND_TO_AGENT": "Send the transcript to the assigned agent", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Send the transcript to another email address", + "EMAIL": { + "PLACEHOLDER": "Enter an email address", + "ERROR": "Please enter a valid email address" + } + } + }, + "ONBOARDING": { + "TITLE": "Hey 👋, Welcome to {installationName}!", + "DESCRIPTION": "Thanks for signing up. We want you to get the most out of {installationName}. Here are a few things you can do in {installationName} to make the experience delightful.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "Read our latest updates", + "ALL_CONVERSATION": { + "TITLE": "All your conversations in one place", + "DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status.", + "NEW_LINK": "Click here to create an inbox" + }, + "TEAM_MEMBERS": { + "TITLE": "Invite your team members", + "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.", + "NEW_LINK": "Click here to invite a team member" + }, + "LABELS": { + "TITLE": "Organize conversations with labels", + "DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.", + "NEW_LINK": "Click here to create tags" + }, + "CANNED_RESPONSES": { + "TITLE": "Create canned responses", + "DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.", + "NEW_LINK": "Click here to create a canned response" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Assigned Agent", + "SELF_ASSIGN": "Assign to me", + "TEAM_LABEL": "Assigned Team", + "SELECT": { + "PLACEHOLDER": "None" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Contact Details", + "CONVERSATION_ACTIONS": "Conversation Actions", + "CONVERSATION_LABELS": "Conversation Labels", + "CONVERSATION_INFO": "Conversation Information", + "CONTACT_NOTES": "Contact Notes", + "CONTACT_ATTRIBUTES": "Contact Attributes", + "PREVIOUS_CONVERSATION": "Previous Conversations", + "MACROS": "Macros", + "LINEAR_ISSUES": "Linked Linear Issues", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "Pending", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Create attribute", + "NO_RECORDS_FOUND": "No attributes found", + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "ADD": { + "TITLE": "Add", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + } + }, + "EMAIL_HEADER": { + "FROM": "From", + "TO": "To", + "BCC": "Bcc", + "CC": "Cc", + "SUBJECT": "Subject", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Participating", + "SIDEBAR_TITLE": "Conversation participants", + "NO_RECORDS_FOUND": "No results found", + "ADD_PARTICIPANTS": "Select participants", + "REMANING_PARTICIPANTS_TEXT": "+{count} others", + "REMANING_PARTICIPANT_TEXT": "+{count} other", + "TOTAL_PARTICIPANTS_TEXT": "{count} people are participating.", + "TOTAL_PARTICIPANT_TEXT": "{count} person is participating.", + "NO_PARTICIPANTS_TEXT": "No one is participating!.", + "WATCH_CONVERSATION": "Join conversation", + "YOU_ARE_WATCHING": "You are participating", + "API": { + "ERROR_MESSAGE": "Could not update, try again!", + "SUCCESS_MESSAGE": "Participants updated!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "View translated content", + "DESC": "You can view the translated content in each langauge.", + "ORIGINAL_CONTENT": "Original Content", + "TRANSLATED_CONTENT": "Translated Content", + "NO_TRANSLATIONS_AVAILABLE": "No translations are available for this content" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/csatMgmt.json b/app/javascript/dashboard/i18n/locale/hr/csatMgmt.json new file mode 100644 index 0000000..9e16dc2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Rate your conversation", + "PLACEHOLDER": "Tell us more...", + "RATINGS": { + "POOR": "😞 Poor", + "FAIR": "😑 Fair", + "AVERAGE": "😐 Average", + "GOOD": "😀 Good", + "EXCELLENT": "😍 Excellent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/customRole.json b/app/javascript/dashboard/i18n/locale/hr/customRole.json new file mode 100644 index 0000000..f6a41cc --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Custom Roles", + "LEARN_MORE": "Learn more about custom roles", + "DESCRIPTION": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "HEADER_BTN_TXT": "Add custom role", + "LOADING": "Fetching custom roles...", + "SEARCH_404": "Ne postoji rezultat za zadano pretraživanje.", + "PAYWALL": { + "TITLE": "Upgrade to create custom roles", + "AVAILABLE_ON": "The custom role feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The custom role feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Manage custom roles", + "DESC": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "TABLE_HEADER": { + "NAME": "Ime", + "DESCRIPTION": "Description", + "PERMISSIONS": "Permissions", + "ACTIONS": "Radnje" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "Ime", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "Ime je obavezno." + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "Description is required." + }, + "PERMISSIONS": { + "LABEL": "Permissions", + "ERROR": "Permissions are required." + }, + "CANCEL_BUTTON_TEXT": "Odustani", + "API": { + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "ADD": { + "TITLE": "Add custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Pošalji", + "API": { + "SUCCESS_MESSAGE": "Custom role added successfully." + } + }, + "EDIT": { + "BUTTON_TEXT": "Uredi", + "TITLE": "Edit custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Ažuriraj", + "API": { + "SUCCESS_MESSAGE": "Custom role updated successfully." + } + }, + "DELETE": { + "BUTTON_TEXT": "Izbriši", + "API": { + "SUCCESS_MESSAGE": "Custom role deleted successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Potvrdi brisanje", + "MESSAGE": "Are you sure to delete ", + "YES": "Da, izbriši ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/datePicker.json b/app/javascript/dashboard/i18n/locale/hr/datePicker.json new file mode 100644 index 0000000..c7ef068 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Apply", + "CLEAR_BUTTON": "Clear", + "DATE_RANGE_INPUT": { + "START": "Start Date", + "END": "End Date" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "DATE RANGE", + "LAST_7_DAYS": "Last 7 days", + "LAST_30_DAYS": "Last 30 days", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_RANGE": "Custom date range" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/emoji.json b/app/javascript/dashboard/i18n/locale/hr/emoji.json new file mode 100644 index 0000000..cec8c96 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Search emojis", + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Izbaci" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/general.json b/app/javascript/dashboard/i18n/locale/hr/general.json new file mode 100644 index 0000000..46c9a4e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Showing {firstIndex}-{lastIndex} of {totalCount} items", + "PHONE_INPUT": { + "PLACEHOLDER": "Search", + "EMPTY_STATE": "Nisu pronađeni rezultati" + }, + "CLOSE": "Close", + "BETA": "Beta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/generalSettings.json b/app/javascript/dashboard/i18n/locale/hr/generalSettings.json new file mode 100644 index 0000000..29f0025 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.", + "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.", + "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.", + "NON_ADMIN": "Please contact your administrator to upgrade the plan and continue using all features." + }, + "TITLE": "Account settings", + "SUBMIT": "Update settings", + "BACK": "Back", + "DISMISS": "Dismiss", + "UPDATE": { + "ERROR": "Could not update settings, try again!", + "SUCCESS": "Successfully updated account settings" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Delete your Account", + "NOTE": "Once you delete your account, all your data will be deleted.", + "BUTTON_TEXT": "Delete Your Account", + "CONFIRM": { + "TITLE": "Delete Account", + "MESSAGE": "Deleting your Account is irreversible. Enter your account name below to confirm you want to permanently delete it.", + "BUTTON_TEXT": "Izbriši", + "DISMISS": "Odustani", + "PLACE_HOLDER": "Please type {accountName} to confirm" + }, + "SUCCESS": "Account marked for deletion", + "FAILURE": "Could not delete account, try again!", + "SCHEDULED_DELETION": { + "TITLE": "Account Scheduled for Deletion", + "MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.", + "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.", + "CLEAR_BUTTON": "Cancel Scheduled Deletion" + } + }, + "FORM": { + "ERROR": "Please fix form errors", + "GENERAL_SECTION": { + "TITLE": "General settings", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "Account ID", + "NOTE": "This ID is required if you are building an API based integration" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.", + "DURATION": { + "LABEL": "Inactivity duration", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Preferences", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "Account name", + "PLACEHOLDER": "Your account name", + "ERROR": "Please enter a valid account name" + }, + "LANGUAGE": { + "LABEL": "Site language", + "PLACEHOLDER": "Your account name", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Incoming Email Domain", + "PLACEHOLDER": "The domain where you will receive the emails", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "Support Email", + "PLACEHOLDER": "Your company's support email", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclude unattended conversations", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a conversation should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "Update", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "Conversation continuity with emails is enabled for your account.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "You can receive emails in your custom domain now." + } + }, + "UPDATE_CHATWOOT": "An update {latestChatwootVersion} for Chatwoot is available. Please update your instance.", + "LEARN_MORE": "Learn more", + "PAYMENT_PENDING": "Your payment is pending. Please update your payment information to continue using Chatwoot", + "UPGRADE": "Upgrade to continue using Chatwoot", + "LIMITS_UPGRADE": "Your account has exceeded the usage limits, please upgrade your plan to continue using Chatwoot", + "OPEN_BILLING": "Open billing" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Press enter to select", + "ENTER_TO_REMOVE": "Press enter to remove", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "Select one", + "SELECT": "Select" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Notifications", + "MARK_ALL_DONE": "Mark All Done", + "DELETE_TITLE": "deleted", + "UNREAD_NOTIFICATION": { + "TITLE": "Unread Notifications", + "ALL_NOTIFICATIONS": "View all notifications", + "LOADING_UNREAD_MESSAGE": "Loading unread notifications...", + "EMPTY_MESSAGE": "You have no unread notifications" + }, + "LIST": { + "LOADING_MESSAGE": "Loading notifications...", + "404": "No Notifications", + "TABLE_HEADER": [ + "Ime", + "Phone Number", + "Conversations", + "Last Contacted" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "New conversation", + "conversation_assignment": "Conversation Assigned", + "assigned_conversation_new_message": "New Message", + "participating_conversation_new_message": "New Message", + "conversation_mention": "Mention", + "sla_missed_first_response": "SLA Missed", + "sla_missed_next_response": "SLA Missed", + "sla_missed_resolution": "SLA Missed" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Offline", + "RECONNECTING": "Reconnecting...", + "RECONNECT_SUCCESS": "Reconnected" + }, + "BUTTON": { + "REFRESH": "Refresh" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Search or jump to", + "SECTIONS": { + "GENERAL": "General", + "REPORTS": "Reports", + "CONVERSATION": "Conversation", + "BULK_ACTIONS": "Bulk Actions", + "CHANGE_ASSIGNEE": "Change Assignee", + "CHANGE_PRIORITY": "Promjena prioriteta", + "CHANGE_TEAM": "Change Team", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "ADD_LABEL": "Add label to the conversation", + "REMOVE_LABEL": "Remove label from the conversation", + "SETTINGS": "Settings", + "AI_ASSIST": "AI Assist", + "APPEARANCE": "Appearance", + "SNOOZE_NOTIFICATION": "Snooze Notification" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview", + "GO_TO_CONVERSATION_REPORTS": "Go to Conversation Reports", + "GO_TO_AGENT_REPORTS": "Go to Agent Reports", + "GO_TO_LABEL_REPORTS": "Go to Label Reports", + "GO_TO_INBOX_REPORTS": "Go to Inbox Reports", + "GO_TO_TEAM_REPORTS": "Go to Team Reports", + "GO_TO_SETTINGS_AGENTS": "Go to Agent Settings", + "GO_TO_SETTINGS_TEAMS": "Go to Team Settings", + "GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings", + "GO_TO_SETTINGS_LABELS": "Go to Label Settings", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings", + "GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings", + "GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings", + "GO_TO_SETTINGS_PROFILE": "Go to Profile Settings", + "GO_TO_NOTIFICATIONS": "Go to Notifications", + "ADD_LABELS_TO_CONVERSATION": "Add label to the conversation", + "ASSIGN_AN_AGENT": "Assign an agent", + "AI_ASSIST": "AI Assist", + "ASSIGN_PRIORITY": "Dodijeli prioritet", + "ASSIGN_A_TEAM": "Assign a team", + "MUTE_CONVERSATION": "Mute conversation", + "UNMUTE_CONVERSATION": "Unmute conversation", + "REMOVE_LABEL_FROM_CONVERSATION": "Remove label from the conversation", + "REOPEN_CONVERSATION": "Reopen conversation", + "RESOLVE_CONVERSATION": "Resolve conversation", + "SEND_TRANSCRIPT": "Send an email transcript", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "UNTIL_NEXT_REPLY": "Until next reply", + "UNTIL_NEXT_WEEK": "Until next week", + "UNTIL_TOMORROW": "Until tomorrow", + "UNTIL_NEXT_MONTH": "Until next month", + "AN_HOUR_FROM_NOW": "Until an hour from now", + "UNTIL_CUSTOM_TIME": "Custom...", + "CHANGE_APPEARANCE": "Change Appearance", + "LIGHT_MODE": "Light", + "DARK_MODE": "Dark", + "SYSTEM_MODE": "System", + "SNOOZE_NOTIFICATION": "Snooze Notification" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Loading Dashboard App..." + }, + "COMMON": { + "OR": "Or", + "CLICK_HERE": "click here" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/helpCenter.json b/app/javascript/dashboard/i18n/locale/hr/helpCenter.json new file mode 100644 index 0000000..7720035 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Centar za pomoć", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "Create Portal" + }, + "HEADER": { + "FILTER": "Filter by", + "SORT": "Sort by", + "LOCALE": "Locale", + "SETTINGS_BUTTON": "Postavke", + "NEW_BUTTON": "New Article", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Published", + "DRAFT": "Skica", + "ARCHIVED": "Arhivirano" + }, + "TITLES": { + "ALL_ARTICLES": "Svi članci", + "MINE": "Moji članci", + "DRAFT": "Draft Articles", + "ARCHIVED": "Archived Articles" + }, + "LOCALE_SELECT": { + "TITLE": "Select locale", + "PLACEHOLDER": "Select locale", + "NO_RESULT": "No locale found", + "SEARCH_PLACEHOLDER": "Search locale" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "Svi članci", + "PUBLISH_BUTTON": "Objavi", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", + "PREVIEW": "Pretpregled", + "ADD_TRANSLATION": "Add translation", + "OPEN_SIDEBAR": "Open sidebar", + "CLOSE_SIDEBAR": "Close sidebar", + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Prenesi sliku", + "UPLOADING": "Prenosim...", + "SUCCESS": "Image uploaded successfully", + "ERROR": "Error while uploading image", + "UN_AUTHORIZED_ERROR": "You are not authorized to upload images", + "ERROR_FILE_SIZE": "Image size should be less than {size}MB", + "ERROR_FILE_FORMAT": "Image format should be jpg, jpeg or png", + "ERROR_FILE_DIMENSIONS": "Image dimensions should be less than 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Article Settings", + "FORM": { + "CATEGORY": { + "LABEL": "Kategorija", + "TITLE": "Select category", + "PLACEHOLDER": "Select category", + "NO_RESULT": "No category found", + "SEARCH_PLACEHOLDER": "Search category" + }, + "AUTHOR": { + "LABEL": "Author", + "TITLE": "Select author", + "PLACEHOLDER": "Select author", + "NO_RESULT": "No authors found", + "SEARCH_PLACEHOLDER": "Search author" + }, + "META_TITLE": { + "LABEL": "Meta title", + "PLACEHOLDER": "Add a meta title" + }, + "META_DESCRIPTION": { + "LABEL": "Meta description", + "PLACEHOLDER": "Add your meta description for better SEO results..." + }, + "META_TAGS": { + "LABEL": "Meta tags", + "PLACEHOLDER": "Add meta tags separated by comma..." + } + }, + "BUTTONS": { + "ARCHIVE": "Archive article", + "DELETE": "Delete article" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Uncategorized", + "SEARCH_RESULTS": "Search results for {query}", + "EMPTY_TEXT": "Search for articles to insert into replies.", + "SEARCH_LOADER": "Searching...", + "INSERT_ARTICLE": "Insert", + "NO_RESULT": "No articles found", + "COPY_LINK": "Copy article link to clipboard", + "OPEN_LINK": "Open article in new tab", + "PREVIEW_LINK": "Preview article" + }, + "PORTAL": { + "HEADER": "Portals", + "DEFAULT": "Default", + "NEW_BUTTON": "New Portal", + "ACTIVE_BADGE": "active", + "CHOOSE_LOCALE_LABEL": "Choose a locale", + "LOADING_MESSAGE": "Loading portals...", + "ARTICLES_LABEL": "articles", + "NO_PORTALS_MESSAGE": "There are no available portals", + "ADD_NEW_LOCALE": "Add a new locale", + "POPOVER": { + "TITLE": "Portals", + "PORTAL_SETTINGS": "Portal settings", + "SUBTITLE": "You have multiple portals and can have different locales for each portal.", + "CANCEL_BUTTON_LABEL": "Odustani", + "CHOOSE_LOCALE_BUTTON": "Choose Locale" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "articles", + "ADD": "Add locale", + "VISIT": "Visit site", + "SETTINGS": "Settings", + "DELETE": "Izbriši" + }, + "PORTAL_CONFIG": { + "TITLE": "Portal Configurations", + "ITEMS": { + "NAME": "Ime", + "DOMAIN": "Custom domain", + "SLUG": "Slug", + "TITLE": "Portal title", + "THEME": "Theme color", + "SUB_TEXT": "Portal sub text" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Available locales", + "TABLE": { + "NAME": "Locale name", + "CODE": "Locale code", + "ARTICLE_COUNT": "No. of articles", + "CATEGORIES": "No. of categories", + "SWAP": "Swap", + "DELETE": "Izbriši", + "DEFAULT_LOCALE": "Default" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Ime", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "Nisu pronađene kategorije" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Help center information", + "BODY": "Basic information about portal" + }, + "CUSTOMIZATION": { + "TITLE": "Help center customization", + "BODY": "Customize portal" + }, + "FINISH": { + "TITLE": "Voila! 🎉", + "BODY": "You're all set!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Back", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Create Portal", + "TITLE": "Help center information", + "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Portal customisation", + "TITLE": "Help center customization", + "UPDATE_PORTAL_BUTTON": "Update portal settings" + }, + "FINISH_PAGE": { + "TITLE": "Voila!🎉 You're all set up!", + "MESSAGE": "You can now see this created portal on your all portals page.", + "FINISH": "Go to all portals page" + } + }, + "LOGO": { + "LABEL": "Logo", + "UPLOAD_BUTTON": "Upload logo", + "HELP_TEXT": "This logo will be displayed on the portal header.", + "IMAGE_UPLOAD_SUCCESS": "Logo uploaded successfully", + "IMAGE_UPLOAD_ERROR": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Error while deleting logo" + }, + "NAME": { + "LABEL": "Ime", + "PLACEHOLDER": "Portal name", + "HELP_TEXT": "The name will be used in the public facing portal internally.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug for urls", + "ERROR": "Slug is required" + }, + "DOMAIN": { + "LABEL": "Custom Domain", + "PLACEHOLDER": "Portal custom domain", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}", + "ERROR": "Enter a valid domain URL" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home Page Link", + "PLACEHOLDER": "Portal home page link", + "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}", + "ERROR": "Enter a valid home page URL" + }, + "THEME_COLOR": { + "LABEL": "Portal theme color", + "HELP_TEXT": "This color will show as the theme color for the portal." + }, + "PAGE_TITLE": { + "LABEL": "Page Title", + "PLACEHOLDER": "Portal page title", + "HELP_TEXT": "The page title will be used in the public facing portal.", + "ERROR": "Page title is required" + }, + "HEADER_TEXT": { + "LABEL": "Header Text", + "PLACEHOLDER": "Portal header text", + "HELP_TEXT": "The Portal header text will be used in the public facing portal.", + "ERROR": "Portal header text is required" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", + "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", + "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Odustani" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Loading articles...", + "404": "No articles matches your search 🔍", + "NO_ARTICLES": "There are no available articles", + "HEADERS": { + "TITLE": "Title", + "CATEGORY": "Kategorija", + "READ_COUNT": "Views", + "STATUS": "Status", + "LAST_EDITED": "Last edited" + }, + "COLUMNS": { + "BY": "by", + "AUTHOR_NOT_AVAILABLE": "Author is not available" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Loading article...", + "TITLE_PLACEHOLDER": "Article title goes here", + "CONTENT_PLACEHOLDER": "Write your article here", + "API": { + "ERROR": "Error while saving article" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article published successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Error while drafting article", + "SUCCESS": "Article drafted successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Potvrdi brisanje", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Yes, Delete", + "NO": "No, Keep it" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Search for articles" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Create a category", + "SUB_TITLE": "The category will be used in the public facing portal to categorize articles.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Ime", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Create category", + "CANCEL": "Odustani" + }, + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Ime", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Odustani" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Search articles", + "PLACEHOLDER": "Search articles", + "NO_RESULT": "No articles found", + "SEARCHING": "Searching...", + "SEARCH_BUTTON": "Search", + "INSERT_ARTICLE": "Insert link", + "IFRAME_ERROR": "URL is empty or invalid. Unable to display content.", + "OPEN_ARTICLE_SEARCH": "Insert article from Help Center", + "SUCCESS_ARTICLE_INSERTED": "Article inserted successfully", + "PREVIEW_LINK": "Preview article", + "CANCEL": "Close", + "BACK": "Back", + "BACK_RESULTS": "Back to results" + }, + "UPGRADE_PAGE": { + "TITLE": "Centar za pomoć", + "DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Upgrade your subscription to enable this feature.", + "SELF_HOSTED_DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Please contact your administrator to enable this feature.", + "BUTTON": { + "LEARN_MORE": "Learn more", + "UPGRADE": "Upgrade" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Multiple portals", + "DESCRIPTION": "Create multiple help center portals for different products using the same account." + }, + "LOCALES": { + "TITLE": "Full support for locales", + "DESCRIPTION": "Localize the portal in your language. We support all locales and allow translations for every article." + }, + "SEO": { + "TITLE": "SEO-friendly design", + "DESCRIPTION": "Customize your meta tags to improve your visibility on search engines with our SEO-friendly pages." + }, + "API": { + "TITLE": "Full API support", + "DESCRIPTION": "Use the portal as a headless CMS with third party front-end frameworks using our APIs." + } + } + }, + "LOADING": "Loading...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} view | {count} views", + "DROPDOWN_MENU": { + "PUBLISH": "Objavi", + "DRAFT": "Skica", + "ARCHIVE": "Archive", + "DELETE": "Izbriši" + }, + "STATUS": { + "DRAFT": "Skica", + "PUBLISHED": "Published", + "ARCHIVED": "Arhivirano" + }, + "CATEGORY": { + "UNCATEGORISED": "Uncategorised" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "All articles", + "MINE": "Mine", + "DRAFT": "Skica", + "PUBLISHED": "Published", + "ARCHIVED": "Arhivirano" + }, + "CATEGORY": { + "ALL": "All categories" + }, + "LOCALE": { + "ALL": "All locales" + }, + "NEW_ARTICLE": "New article" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Write an article", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "New article" + }, + "MINE": { + "TITLE": "You haven't written any articles here", + "SUBTITLE": "All articles written by you show up here for quick access." + }, + "DRAFT": { + "TITLE": "There are no articles in drafts", + "SUBTITLE": "Draft articles will appear here" + }, + "PUBLISHED": { + "TITLE": "There are no published articles", + "SUBTITLE": "Published articles will appear here" + }, + "ARCHIVED": { + "TITLE": "There are no articles in the archive", + "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages" + }, + "CATEGORY": { + "TITLE": "There are no articles in this category", + "SUBTITLE": "Articles in this category will appear here" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "New category", + "EDIT_CATEGORY": "Edit category", + "CATEGORIES_COUNT": "{n} category | {n} categories", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categories ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "Nisu pronađene kategorije", + "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + }, + "HEADER": { + "CREATE": "Create category", + "EDIT": "Edit category", + "DESCRIPTION": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale" + }, + "FORM": { + "NAME": { + "LABEL": "Ime", + "PLACEHOLDER": "Category name", + "ERROR": "Ime je obavezno" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "ERROR": "Slug is required", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + } + }, + "BUTTONS": { + "CREATE": "Create", + "EDIT": "Ažuriraj", + "CANCEL": "Odustani" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "No locales available | {n} locale | {n} locales", + "NEW_LOCALE_BUTTON_TEXT": "New locale", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles", + "CATEGORIES_COUNT": "{count} category | {count} categories", + "DEFAULT": "Default", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Make default", + "DELETE": "Izbriši" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Add a new locale", + "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", + "COMBOBOX": { + "PLACEHOLDER": "Select locale..." + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "PREVIEW": "Pretpregled", + "PUBLISH": "Objavi", + "DRAFT": "Skica", + "ARCHIVE": "Archive", + "BACK_TO_ARTICLES": "Back to articles" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "More properties", + "UNCATEGORIZED": "Uncategorized", + "EDITOR_PLACEHOLDER": "Write something..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Article properties", + "META_DESCRIPTION": "Meta description", + "META_DESCRIPTION_PLACEHOLDER": "Add meta description", + "META_TITLE": "Meta title", + "META_TITLE_PLACEHOLDER": "Add meta title", + "META_TAGS": "Meta tags", + "META_TAGS_PLACEHOLDER": "Add meta tags" + }, + "API": { + "ERROR": "Error while saving article" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "New portal", + "PORTALS": "Portals", + "CREATE_PORTAL": "Create and manage multiple portals", + "ARTICLES": "articles", + "DOMAIN": "domain", + "PORTAL_NAME": "Portal name" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Create new portal", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "Create", + "NAME": { + "LABEL": "Ime", + "PLACEHOLDER": "User Guide | Chatwoot", + "MESSAGE": "Choose an name for your portal.", + "ERROR": "Ime je obavezno" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Slug is required", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logo", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo", + "IMAGE_DELETE_SUCCESS": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Unable to delete logo", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "NAME": { + "LABEL": "Ime", + "PLACEHOLDER": "Portal name", + "ERROR": "Ime je obavezno" + }, + "HEADER_TEXT": { + "LABEL": "Header text", + "PLACEHOLDER": "Portal header text" + }, + "PAGE_TITLE": { + "LABEL": "Page title", + "PLACEHOLDER": "Portal page title" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home page link", + "PLACEHOLDER": "Portal home page link", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Live chat widget", + "PLACEHOLDER": "Select live chat widget", + "HELP_TEXT": "Select a live chat widget that will appear on your help center", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Brand color" + }, + "SAVE_CHANGES": "Save changes" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Custom domain", + "LABEL": "Custom domain:", + "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Portal custom domain", + "EDIT_BUTTON": "Uredi", + "ADD_BUTTON": "Add custom domain", + "STATUS": { + "LIVE": "Live", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Add custom domain", + "EDIT_HEADER": "Edit custom domain", + "ADD_CONFIRM_BUTTON_LABEL": "Add domain", + "EDIT_CONFIRM_BUTTON_LABEL": "Update domain", + "LABEL": "Custom domain", + "PLACEHOLDER": "Portal custom domain", + "ERROR": "Custom domain is required", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS configuration", + "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "Send" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Delete {portalName}", + "HEADER": "Delete portal", + "DESCRIPTION": "Permanently delete this portal. This action is irreversible", + "DIALOG": { + "HEADER": "Sure you want to delete {portalName}?", + "DESCRIPTION": "This is a permanent action that cannot be reversed.", + "CONFIRM_BUTTON_LABEL": "Izbriši" + } + }, + "EDIT_CONFIGURATION": "Edit configuration" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal created successfully", + "ERROR_MESSAGE": "Unable to create portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal updated successfully", + "ERROR_MESSAGE": "Unable to update portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "Prenosim...", + "UPLOAD": "Upload & Process", + "CANCEL": "Odustani", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Generiranje...", + "CONFIRM_DELETE": "Are you sure you want to delete {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Completed", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/inbox.json b/app/javascript/dashboard/i18n/locale/hr/inbox.json new file mode 100644 index 0000000..32943b5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "My Inbox", + "DISPLAY_DROPDOWN": "Display", + "LOADING": "Fetching notifications", + "404": "There are no active notifications in this group.", + "NO_NOTIFICATIONS": "No notifications", + "NOTE": "Notifications from all subscribed inboxes", + "NO_MESSAGES_AVAILABLE": "Oops! Not able to fetch messages", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week" + }, + "ACTION_HEADER": { + "SNOOZE": "Snooze notification", + "DELETE": "Delete notification", + "BACK": "Back" + }, + "TYPES": { + "CONVERSATION_MENTION": "You have been mentioned in a conversation", + "CONVERSATION_CREATION": "New conversation created", + "CONVERSATION_ASSIGNMENT": "A conversation has been assigned to you", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message in a conversation you are participating in", + "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation", + "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation", + "SLA_MISSED_RESOLUTION": "SLA target resolution missed for conversation" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Mentioned", + "CONVERSATION_ASSIGNMENT": "Assigned to you", + "CONVERSATION_CREATION": "New Conversation", + "SLA_MISSED_FIRST_RESPONSE": "SLA breach", + "SLA_MISSED_NEXT_RESPONSE": "SLA breach", + "SLA_MISSED_RESOLUTION": "SLA breach", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message", + "SNOOZED_UNTIL": "Snoozed for {time}", + "SNOOZED_ENDS": "Snooze ended" + }, + "NO_CONTENT": "No content available", + "MENU_ITEM": { + "MARK_AS_READ": "Mark as read", + "MARK_AS_UNREAD": "Mark as unread", + "SNOOZE": "Snooze", + "DELETE": "Izbriši", + "MARK_ALL_READ": "Mark all as read", + "DELETE_ALL": "Delete all", + "DELETE_ALL_READ": "Delete all read" + }, + "DISPLAY_MENU": { + "SORT": "Sort", + "DISPLAY": "Display :", + "SORT_OPTIONS": { + "NEWEST": "Newest", + "OLDEST": "Oldest", + "PRIORITY": "Prioritet" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Snoozed", + "READ": "Read", + "LABELS": "Labels", + "CONVERSATION_ID": "Conversation ID" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notification marked as read", + "MARK_AS_UNREAD": "Notification marked as unread", + "SNOOZE": "Notification snoozed", + "DELETE": "Notification deleted", + "MARK_ALL_READ": "All notifications marked as read", + "DELETE_ALL": "All notifications deleted", + "DELETE_ALL_READ": "All read notifications deleted" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hr/inboxMgmt.json new file mode 100644 index 0000000..1576edc --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Inboxes", + "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.", + "LEARN_MORE": "Learn more about inboxes", + "RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.", + "CLICK_TO_RECONNECT": "Click here to reconnect.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "There are no inboxes attached to this account." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Choose Channel", + "BODY": "Choose the provider you want to integrate with Chatwoot." + }, + "INBOX": { + "TITLE": "Create Inbox", + "BODY": "Authenticate your account and create an inbox." + }, + "AGENT": { + "TITLE": "Add Agents", + "BODY": "Add agents to the created inbox." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "You are all set to go!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Enter your inbox name (eg: Acme Inc)", + "ERROR": "Please enter a valid inbox name" + }, + "WEBSITE_NAME": { + "LABEL": "Website Name", + "PLACEHOLDER": "Enter your website name (eg: Acme Inc)" + }, + "FB": { + "HELP": "PS: By signing in, we only get access to your Page's messages. Your private messages can never be accessed by Chatwoot.", + "CHOOSE_PAGE": "Choose Page", + "CHOOSE_PLACEHOLDER": "Select a page from the list", + "INBOX_NAME": "Inbox Name", + "ADD_NAME": "Add a name for your inbox", + "PICK_NAME": "Pick a Name for your Inbox", + "PICK_A_VALUE": "Pick a value", + "CREATE_INBOX": "Create Inbox" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continue with Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile", + "HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ", + "ERROR_MESSAGE": "There was an error connecting to Instagram, please try again", + "ERROR_AUTH": "There was an error connecting to Instagram, please try again", + "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "To add your Twitter profile as a channel, you need to authenticate your Twitter Profile by clicking on 'Sign in with Twitter' ", + "ERROR_MESSAGE": "There was an error connecting to Twitter, please try again", + "TWEETS": { + "ENABLE": "Create conversations from mentioned Tweets" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Website channel", + "DESC": "Create a channel for your website and start supporting your customers via our website widget.", + "LOADING_MESSAGE": "Creating Website Support Channel", + "CHANNEL_AVATAR": { + "LABEL": "Channel Avatar" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "Please enter your Webhook URL", + "ERROR": "Please enter a valid URL" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Website Domain", + "PLACEHOLDER": "Enter your website domain (eg: acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Welcome Heading", + "PLACEHOLDER": "Hi there !" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Welcome Tagline", + "PLACEHOLDER": "We make it simple to connect with us. Ask us anything, or share your feedback." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Channel greeting message", + "PLACEHOLDER": "Acme Inc typically replies in a few hours." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Enable channel greeting", + "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "REPLY_TIME": { + "TITLE": "Set Reply time", + "IN_A_FEW_MINUTES": "In a few minutes", + "IN_A_FEW_HOURS": "In a few hours", + "IN_A_DAY": "In a day", + "HELP_TEXT": "This reply time will be displayed on the live chat widget" + }, + "WIDGET_COLOR": { + "LABEL": "Widget Color", + "PLACEHOLDER": "Update the widget color used in widget" + }, + "SUBMIT_BUTTON": "Create inbox", + "API": { + "ERROR_MESSAGE": "We were not able to create a website channel, please try again" + } + }, + "TWILIO": { + "TITLE": "Twilio SMS/WhatsApp Channel", + "DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "Account SID", + "PLACEHOLDER": "Please enter your Twilio Account SID", + "ERROR": "This field is required" + }, + "API_KEY": { + "USE_API_KEY": "Use API Key Authentication", + "LABEL": "API Key SID", + "PLACEHOLDER": "Please enter your API Key SID", + "ERROR": "This field is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Please enter your API Key Secret", + "ERROR": "This field is required" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "Messaging Service SID", + "PLACEHOLDER": "Please enter your Twilio Messaging Service SID", + "ERROR": "This field is required", + "USE_MESSAGING_SERVICE": "Use a Twilio Messaging Service" + }, + "CHANNEL_TYPE": { + "LABEL": "Channel Type", + "ERROR": "Please select your Channel Type" + }, + "AUTH_TOKEN": { + "LABEL": "Auth Token", + "PLACEHOLDER": "Please enter your Twilio Auth Token", + "ERROR": "This field is required" + }, + "CHANNEL_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Broj telefona", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the message callback URL in Twilio with the URL mentioned here." + }, + "SUBMIT_BUTTON": "Create Twilio Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Twilio credentials, please try again" + } + }, + "SMS": { + "TITLE": "SMS Channel", + "DESC": "Start supporting your customers via SMS.", + "PROVIDERS": { + "LABEL": "API Provider", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandwidth" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the SMS channel" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "Account ID", + "PLACEHOLDER": "Please enter your Bandwidth Account ID", + "ERROR": "This field is required" + }, + "API_KEY": { + "LABEL": "API Key", + "PLACEHOLDER": "Please enter your Bandwidth API Key", + "ERROR": "This field is required" + }, + "API_SECRET": { + "LABEL": "API Secret", + "PLACEHOLDER": "Please enter your Bandwidth API Secret", + "ERROR": "This field is required" + }, + "APPLICATION_ID": { + "LABEL": "Application ID", + "PLACEHOLDER": "Please enter your Bandwidth Application ID", + "ERROR": "This field is required" + }, + "INBOX_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "SUBMIT_BUTTON": "Create Bandwidth Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Bandwidth credentials, please try again" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the message callback URL in Bandwidth with the URL mentioned here." + } + } + }, + "WHATSAPP": { + "TITLE": "WhatsApp Channel", + "DESC": "Start supporting your customers via WhatsApp.", + "PROVIDERS": { + "LABEL": "API Provider", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter an inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "PHONE_NUMBER_ID": { + "LABEL": "Phone number ID", + "PLACEHOLDER": "Please enter the Phone number ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "Business Account ID", + "PLACEHOLDER": "Please enter the Business Account ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook Verify Token", + "PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.", + "ERROR": "Please enter a valid value." + }, + "API_KEY": { + "LABEL": "API key", + "SUBTITLE": "Configure the WhatsApp API key.", + "PLACEHOLDER": "API key", + "ERROR": "Please enter a valid value." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL and the verification token in the Facebook Developer portal with the values shown below.", + "WEBHOOK_URL": "Webhook URL", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook Verification Token" + }, + "SUBMIT_BUTTON": "Create WhatsApp Channel", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "Phone Number", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "Account SID", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "Auth Token", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "API Key SID", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "API Channel", + "DESC": "Integrate with API channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "SUBTITLE": "Configure the URL where you want to receive callbacks on events.", + "PLACEHOLDER": "Webhook URL" + }, + "SUBMIT_BUTTON": "Create API Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the api channel" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "Email Channel", + "DESC": "Integrate your email inbox.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "EMAIL": { + "LABEL": "Email", + "SUBTITLE": "Provide the email address where your customers send support requests.", + "PLACEHOLDER": "Email" + }, + "SUBMIT_BUTTON": "Create Email Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the email channel" + }, + "FINISH_MESSAGE": "Start forwarding your emails to the following email address.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "Click here", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "LINE Channel", + "DESC": "Integrate with LINE channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "LINE_CHANNEL_ID": { + "LABEL": "LINE Channel ID", + "PLACEHOLDER": "LINE Channel ID" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "LINE Channel Secret", + "PLACEHOLDER": "LINE Channel Secret" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "LINE Channel Token", + "PLACEHOLDER": "LINE Channel Token" + }, + "SUBMIT_BUTTON": "Create LINE Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the LINE channel" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL in LINE application with the URL mentioned here." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Telegram Channel", + "DESC": "Integrate with Telegram channel and start supporting your customers.", + "BOT_TOKEN": { + "LABEL": "Bot Token", + "SUBTITLE": "Configure the bot token you have obtained from Telegram BotFather.", + "PLACEHOLDER": "Bot Token" + }, + "SUBMIT_BUTTON": "Create Telegram Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the telegram channel" + } + }, + "AUTH": { + "TITLE": "Choose a channel", + "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Website", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "Email", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Agenti", + "DESC": "Here you can add agents to manage your newly created inbox. Only these selected agents will have access to your inbox. Agents which are not part of this inbox will not be able to see or respond to messages in this inbox when they login.Webhooks
Webhooks are HTTP callbacks which can be defined for every account. They are triggered by events like message creation in Chatwoot. You can create more than one webhook for this account.
For creating a webhook, click on the Add new webhook button. You can also remove any existing webhook by clicking on the Delete button.
Dashboard Apps
Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.
When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.
To add a new dashboard app, click on the button 'Add a new dashboard app'.
", + "DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.", + "LEARN_MORE": "Learn more about Dashboard Apps", + "LIST": { + "404": "There are no dashboard apps configured on this account yet", + "LOADING": "Fetching dashboard apps...", + "TABLE_HEADER": { + "NAME": "Ime", + "ENDPOINT": "Endpoint" + }, + "EDIT_TOOLTIP": "Edit app", + "DELETE_TOOLTIP": "Delete app" + }, + "FORM": { + "TITLE_LABEL": "Ime", + "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", + "TITLE_ERROR": "A name for the dashboard app is required", + "URL_LABEL": "Endpoint", + "URL_PLACEHOLDER": "Enter the endpoint URL where your app is hosted", + "URL_ERROR": "A valid URL is required" + }, + "CREATE": { + "HEADER": "Add a new dashboard app", + "FORM_SUBMIT": "Submit", + "FORM_CANCEL": "Odustani", + "API_SUCCESS": "Dashboard app configured successfully", + "API_ERROR": "We couldn't create an app. Please try again later" + }, + "UPDATE": { + "HEADER": "Edit dashboard app", + "FORM_SUBMIT": "Update", + "FORM_CANCEL": "Odustani", + "API_SUCCESS": "Dashboard app updated successfully", + "API_ERROR": "We couldn't update the app. Please try again later" + }, + "DELETE": { + "CONFIRM_YES": "Yes, delete it", + "CONFIRM_NO": "No, keep it", + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete the app - {appName}?", + "API_SUCCESS": "Dashboard app deleted successfully", + "API_ERROR": "We couldn't delete the app. Please try again later" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "Fetching linear issues...", + "LOADING_ERROR": "There was an error fetching the linear issues, please try again", + "CREATE": "Create", + "LINK": { + "SEARCH": "Search issues", + "SELECT": "Select issue", + "TITLE": "Povezica", + "EMPTY_LIST": "No linear issues found", + "LOADING": "Loading", + "ERROR": "There was an error fetching the linear issues, please try again", + "LINK_SUCCESS": "Issue linked successfully", + "LINK_ERROR": "There was an error linking the issue, please try again", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "Create Linear issues from conversations, or link existing ones for seamless tracking.", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter title", + "REQUIRED_ERROR": "Title is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Enter description" + }, + "TEAM": { + "LABEL": "Tim", + "PLACEHOLDER": "Select team", + "SEARCH": "Search team", + "REQUIRED_ERROR": "Team is required" + }, + "ASSIGNEE": { + "LABEL": "Assignee", + "PLACEHOLDER": "Select assignee", + "SEARCH": "Search assignee" + }, + "PRIORITY": { + "LABEL": "Prioritet", + "PLACEHOLDER": "Odaberi prioritet", + "SEARCH": "Search priority" + }, + "LABEL": { + "LABEL": "Label", + "PLACEHOLDER": "Select label", + "SEARCH": "Search label" + }, + "STATUS": { + "LABEL": "Status", + "PLACEHOLDER": "Select status", + "SEARCH": "Search status" + }, + "PROJECT": { + "LABEL": "Project", + "PLACEHOLDER": "Select project", + "SEARCH": "Search project" + } + }, + "CREATE": "Create", + "CANCEL": "Odustani", + "CREATE_SUCCESS": "Issue created successfully", + "CREATE_ERROR": "There was an error creating the issue, please try again", + "LOADING_TEAM_ERROR": "There was an error fetching the teams, please try again", + "LOADING_TEAM_ENTITIES_ERROR": "There was an error fetching the team entities, please try again" + }, + "ISSUE": { + "STATUS": "Status", + "PRIORITY": "Prioritet", + "ASSIGNEE": "Assignee", + "LABELS": "Labels", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Unlink", + "SUCCESS": "Issue unlinked successfully", + "ERROR": "There was an error unlinking the issue, please try again" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Da, izbriši", + "CANCEL": "Odustani" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Da, izbriši", + "CANCEL": "Odustani" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "Send message...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Captain is thinking", + "YOU": "Vi", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "Vi", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "Unesite svoju poruku...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "Odustani", + "CREATE": "Create", + "EDIT": "Ažuriraj" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Da, izbriši", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "Update", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "Features", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "Ime", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "Features", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "Settings", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Izbriši" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "Create", + "CANCEL": "Odustani", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Izbriši" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "Create", + "CANCEL": "Odustani", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Izbriši" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "Create", + "CANCEL": "Odustani" + } + } + }, + "UPDATE": { + "CANCEL": "Odustani", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Da, izbriši", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Da, izbriši", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "None", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "API Key" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "Password", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Type" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Broj", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Required" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "Izbriši", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Da, izbriši", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "Sve" + }, + "STATUS": { + "TITLE": "Status", + "PENDING": "Pending", + "APPROVED": "Approved", + "ALL": "Sve" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "Uredi", + "DELETE_RESPONSE": "Izbriši" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Disconnect" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Da, izbriši", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "Inbox", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/hr/labelsMgmt.json new file mode 100644 index 0000000..78489ef --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Labels", + "HEADER_BTN_TXT": "Add label", + "LOADING": "Fetching labels", + "DESCRIPTION": "Labels help you categorize and prioritize conversations and leads. You can assign a label to a conversation or contact using the side panel.", + "LEARN_MORE": "Learn more about labels", + "SEARCH_404": "There are no items matching this query", + "LIST": { + "404": "There are no labels available in this account.", + "TITLE": "Manage labels", + "DESC": "Labels let you group the conversations together.", + "TABLE_HEADER": { + "NAME": "Ime", + "DESCRIPTION": "Description", + "COLOR": "Color" + } + }, + "FORM": { + "NAME": { + "LABEL": "Label Name", + "PLACEHOLDER": "Label name", + "REQUIRED_ERROR": "Label name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Label Description" + }, + "COLOR": { + "LABEL": "Color" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Show label on sidebar" + }, + "EDIT": "Uredi", + "CREATE": "Create", + "DELETE": "Izbriši", + "CANCEL": "Odustani" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Add label to conversation", + "MULTIPLE_SUGGESTION": "Select this label", + "DESELECT": "Deselect label", + "DISMISS": "Dismiss suggestion" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Dismiss", + "ADD_SELECTED_LABELS": "Add selected labels", + "ADD_SELECTED_LABEL": "Add selected label", + "ADD_ALL_LABELS": "Add all labels", + "SUGGESTED_LABELS": "Suggested labels" + }, + "ADD": { + "TITLE": "Add label", + "DESC": "Labels let you group the conversations together.", + "API": { + "SUCCESS_MESSAGE": "Label added successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "EDIT": { + "TITLE": "Edit label", + "API": { + "SUCCESS_MESSAGE": "Label updated successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "DELETE": { + "BUTTON_TEXT": "Izbriši", + "API": { + "SUCCESS_MESSAGE": "Label deleted successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "CONFIRM": { + "TITLE": "Potvrdi brisanje", + "MESSAGE": "Are you sure to delete ", + "YES": "Da, izbriši", + "NO": "Ne, zadrži" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/login.json b/app/javascript/dashboard/i18n/locale/hr/login.json new file mode 100644 index 0000000..8bf01d7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Login to Chatwoot", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "Please enter a valid email address" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password" + }, + "API": { + "SUCCESS_MESSAGE": "Login Successful", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later", + "UNAUTH": "Username / Password Incorrect. Please try again" + }, + "OAUTH": { + "GOOGLE_LOGIN": "Login with Google", + "BUSINESS_ACCOUNTS_ONLY": "Please use your company email address to login", + "NO_ACCOUNT_FOUND": "We couldn't find an account for your email address." + }, + "FORGOT_PASSWORD": "Forgot your password?", + "CREATE_NEW_ACCOUNT": "Create new account", + "SUBMIT": "Login", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/macros.json b/app/javascript/dashboard/i18n/locale/hr/macros.json new file mode 100644 index 0000000..0334a5a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Macros", + "DESCRIPTION": "A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click.", + "LEARN_MORE": "Learn more about macros", + "HEADER_BTN_TXT": "Add a new macro", + "HEADER_BTN_TXT_SAVE": "Save macro", + "LOADING": "Fetching macros", + "ERROR": "Something went wrong. Please try again", + "ORDER_INFO": "Macros will run in the order you add your actions. You can rearrange them by dragging them by the handle beside each node.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Macro name", + "PLACEHOLDER": "Enter a name for your macro", + "ERROR": "Name is required for creating a macro" + }, + "ACTIONS": { + "LABEL": "Radnje" + } + }, + "API": { + "SUCCESS_MESSAGE": "Macro added successfully", + "ERROR_MESSAGE": "Unable to create macro, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Ime", + "CREATED BY": "Created by", + "LAST_UPDATED_BY": "Last updated by", + "VISIBILITY": "Visibility" + }, + "404": "No macros found" + }, + "DELETE": { + "TOOLTIP": "Delete macro", + "CONFIRM": { + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete", + "NO": "No" + }, + "API": { + "SUCCESS_MESSAGE": "Macro deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the macro. Please try again later" + } + }, + "EDIT": { + "TOOLTIP": "Edit macro", + "API": { + "SUCCESS_MESSAGE": "Macro updated successfully", + "ERROR_MESSAGE": "Could not update Macro, Please try again later" + } + }, + "EDITOR": { + "START_FLOW": "Start Flow", + "END_FLOW": "End Flow", + "LOADING": "Fetching macro", + "ADD_BTN_TOOLTIP": "Add new action", + "DELETE_BTN_TOOLTIP": "Delete Action", + "VISIBILITY": { + "LABEL": "Macro Visibility", + "GLOBAL": { + "LABEL": "Public", + "DESCRIPTION": "This macro is available publicly for all agents in this account." + }, + "PERSONAL": { + "LABEL": "Private", + "DESCRIPTION": "This macro will be private to you and not be available to others." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Execute", + "PREVIEW": "Preview Macro", + "EXECUTED_SUCCESSFULLY": "Macro executed successfully" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Value is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Dodijeli tim", + "ASSIGN_AGENT": "Assign an Agent", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Mute Conversation", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "CHANGE_PRIORITY": "Promjena prioriteta", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "SEND_WEBHOOK_EVENT": "Send Webhook Event" + }, + "PRIORITY_TYPES": { + "NONE": "None", + "LOW": "Nisko", + "MEDIUM": "Srednje", + "HIGH": "Visoko", + "URGENT": "Hitno" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/mfa.json b/app/javascript/dashboard/i18n/locale/hr/mfa.json new file mode 100644 index 0000000..6ecba6b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "Enabled", + "DISABLED": "Disabled", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Loading...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "Copy", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "Odustani", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "Download", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "Password", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "Odustani", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "Odustani", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/report.json b/app/javascript/dashboard/i18n/locale/hr/report.json new file mode 100644 index 0000000..c31c933 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Conversations", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "DATA_FETCHING_FAILED": "Failed to fetch data, please try again later.", + "SUMMARY_FETCHING_FAILED": "Failed to fetch summary, please try again later.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Handoff Count", + "DESC": "( Total )" + }, + "REPLY_TIME": { + "NAME": "Customer waiting time", + "TOOLTIP_TEXT": "Waiting time is {metricValue} (based on {conversationCount} replies)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "Last 7 days", + "LAST_14_DAYS": "Last 14 days", + "LAST_30_DAYS": "Last 30 days", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_DATE_RANGE": "Custom date range" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Group By", + "DURATION_FILTER_LABEL": "Duration", + "GROUPING_OPTIONS": { + "DAY": "Day", + "WEEK": "Week", + "MONTH": "Month", + "YEAR": "Month" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "BUSINESS_HOURS": "Business Hours", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Nisu pronađeni rezultati" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Agents Overview", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "FILTER_DROPDOWN_LABEL": "Select Agent", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "LABEL_REPORTS": { + "HEADER": "Labels Overview", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_LABEL_REPORTS": "Download label reports", + "FILTER_DROPDOWN_LABEL": "Select Label", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "INBOX_REPORTS": { + "HEADER": "Inbox Overview", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_INBOX_REPORTS": "Download inbox reports", + "FILTER_DROPDOWN_LABEL": "Select Inbox", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "TEAM_REPORTS": { + "HEADER": "Team Overview", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_TEAM_REPORTS": "Download team reports", + "FILTER_DROPDOWN_LABEL": "Select Team", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "CSAT_REPORTS": { + "HEADER": "CSAT Reports", + "NO_RECORDS": "There are no CSAT survey responses available.", + "DOWNLOAD": "Download CSAT Reports", + "DOWNLOAD_FAILED": "Failed to download CSAT Reports", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Choose Agents" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Contact", + "AGENT_NAME": "Assigned agent", + "RATING": "Rating", + "FEEDBACK_TEXT": "Feedback comment" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Total responses", + "TOOLTIP": "Total number of responses collected" + }, + "SATISFACTION_SCORE": { + "LABEL": "Satisfaction score", + "TOOLTIP": "Total number of positive responses / Total number of responses * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Response rate", + "TOOLTIP": "Total number of responses / Total number of CSAT survey messages sent * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Bot Reports", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "No. of Conversations", + "TOOLTIP": "Total number of conversations handled by the bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total Responses", + "TOOLTIP": "Total number of responses sent by the bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Resolution Rate", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Handoff Rate", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Pregled", + "LIVE": "Live", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Open Conversations", + "LOADING_MESSAGE": "Loading conversation metrics...", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "UNASSIGNED": "Unassigned", + "PENDING": "Pending" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Conversation Traffic", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Conversations by agents", + "LOADING_MESSAGE": "Loading agent metrics...", + "NO_AGENTS": "There are no conversations by agents", + "TABLE_HEADER": { + "AGENT": "Agent", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "STATUS": "Status" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Tim", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "STATUS": "Status" + } + }, + "AGENT_STATUS": { + "HEADER": "Agent status", + "ONLINE": "Online", + "BUSY": "Busy", + "OFFLINE": "Offline" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Sunday", + "MONDAY": "Monday", + "TUESDAY": "Tuesday", + "WEDNESDAY": "Wednesday", + "THURSDAY": "Thursday", + "FRIDAY": "Friday", + "SATURDAY": "Saturday" + }, + "SLA_REPORTS": { + "HEADER": "SLA Reports", + "NO_RECORDS": "SLA applied conversations are not available.", + "LOADING": "Loading SLA data...", + "DOWNLOAD_SLA_REPORTS": "Download SLA reports", + "DOWNLOAD_FAILED": "Failed to download SLA Reports", + "DROPDOWN": { + "ADD_FIlTER": "Dodaj filter", + "CLEAR_ALL": "Clear all", + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Nisu pronađeni rezultati", + "NO_FILTER": "No filters available", + "SEARCH": "Search filter", + "INPUT_PLACEHOLDER": { + "SLA": "SLA name", + "AGENTS": "Agent name", + "INBOXES": "Inbox name", + "LABELS": "Label name", + "TEAMS": "Team name" + }, + "SLA": "SLA Policy", + "INBOXES": "Inbox", + "AGENTS": "Agent", + "LABELS": "Label", + "TEAMS": "Tim" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentage of SLAs created were completed successfully" + }, + "NO_OF_MISSES": { + "LABEL": "Number of Misses", + "TOOLTIP": "Total SLA misses in a certain period" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Number of Conversations", + "TOOLTIP": "Total number of conversations with SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "Conversation", + "AGENT": "Agent" + }, + "VIEW_DETAILS": "View Details" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Inbox", + "AGENT": "Agent", + "TEAM": "Tim", + "LABEL": "Label", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "Resolution Count", + "CONVERSATIONS": "No. of conversations" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/resetPassword.json b/app/javascript/dashboard/i18n/locale/hr/resetPassword.json new file mode 100644 index 0000000..a2db00f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Reset lozinke", + "DESCRIPTION": "Unesite email adresu koju koristite za prijavu na Chatwoot kako biste dobili instrukcije za resetiranje lozinke.", + "GO_BACK_TO_LOGIN": "Ako se želite vratiti na stranicu za prijavu,", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "Molimo, unesite e-mail.", + "ERROR": "Molimo, unesite validan e-mail." + }, + "API": { + "SUCCESS_MESSAGE": "Link za reset lozinke je poslan na zadani e-mail.", + "ERROR_MESSAGE": "Nije uspjelo spajanje na Woot server. Molimo pokušajte ponovno." + }, + "SUBMIT": "Pošalji" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/search.json b/app/javascript/dashboard/i18n/locale/hr/search.json new file mode 100644 index 0000000..98dc875 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "Kontakti", + "CONVERSATIONS": "Razgovori", + "MESSAGES": "Poruke", + "ARTICLES": "Articles" + }, + "SECTION": { + "CONTACTS": "Kontakti", + "CONVERSATIONS": "Razgovori", + "MESSAGES": "Poruke", + "ARTICLES": "Articles" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "Tražim", + "LOADING_DATA": "Loading", + "EMPTY_STATE": "Pronađeno {item} za traženi pojam '{query}'", + "EMPTY_STATE_FULL": "Ništa nije pronađeno za traženi pojam '{query}'", + "PLACEHOLDER_KEYBINDING": "/za fokusiranje", + "INPUT_PLACEHOLDER": "Unesi 3 ili više znakova za pretragu", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Clear all", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Traži po conversation id, e-mail, broj telefona, poruke za bolje rezultate pretrage. ", + "BOT_LABEL": "Bot", + "READ_MORE": "Pročitaj više", + "READ_LESS": "Read less", + "WROTE": "napisao/la:", + "FROM": "From", + "EMAIL": "Email", + "EMAIL_SUBJECT": "Subject", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "Last 7 days", + "LAST_30_DAYS": "Last 30 days", + "LAST_60_DAYS": "Last 60 days", + "LAST_90_DAYS": "Last 90 days", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "Apply", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Clear filter" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Sender", + "IN": "Inbox", + "AGENTS": "Agenti", + "CONTACTS": "Contacts", + "INBOXES": "Inboxes", + "NO_AGENTS": "No agents found", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/setNewPassword.json b/app/javascript/dashboard/i18n/locale/hr/setNewPassword.json new file mode 100644 index 0000000..0deef81 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Postavi novu lozinku", + "PASSWORD": { + "LABEL": "Lozinka", + "PLACEHOLDER": "Lozinka", + "ERROR": "Lozinka je prekratka." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Potvrdi lozinku", + "PLACEHOLDER": "Potvrdi lozinku", + "ERROR": "Lozinke se ne poklapaju." + }, + "API": { + "SUCCESS_MESSAGE": "Lozinka je uspješno promijenjena.", + "ERROR_MESSAGE": "Nije uspjelo spajanje na Woot server. Molimo pokušajte ponovno." + }, + "CAPTCHA": { + "ERROR": "Potvrda istekla. Molimo ponovno riješite captcha." + }, + "SUBMIT": "Pošalji" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/settings.json b/app/javascript/dashboard/i18n/locale/hr/settings.json new file mode 100644 index 0000000..fc1420e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Postavke profila", + "TITLE": "Postavke profila", + "BTN_TEXT": "Ažuriraj profil", + "DELETE_AVATAR": "Izbriši avatar", + "AVATAR_DELETE_SUCCESS": "Avatar has been deleted successfully", + "AVATAR_DELETE_FAILED": "There is an error while deleting avatar, please try again", + "UPDATE_SUCCESS": "Your profile has been updated successfully", + "PASSWORD_UPDATE_SUCCESS": "Your password has been changed successfully", + "AFTER_EMAIL_CHANGED": "Your profile has been updated successfully, please login again as your login credentials are changed", + "FORM": { + "PICTURE": "Profilna slika", + "AVATAR": "Profilna slika", + "ERROR": "Please fix form errors", + "REMOVE_IMAGE": "Izbriši", + "UPLOAD_IMAGE": "Prenesi sliku", + "UPDATE_IMAGE": "Ažuriraj sliku", + "PROFILE_SECTION": { + "TITLE": "Profil", + "NOTE": "Your email address is your identity and is used to log in." + }, + "SEND_MESSAGE": { + "TITLE": "Hotkey to send messages", + "NOTE": "You can select a hotkey (either Enter or Cmd/Ctrl+Enter) based on your preference of writing.", + "UPDATE_SUCCESS": "Your settings have been updated successfully", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Send messages by pressing Enter key instead of clicking the send button." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Send messages by pressing Cmd/Ctrl + enter key instead of clicking the send button." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Default", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Personal message signature", + "NOTE": "Create a unique message signature to appear at the end of every message you send from any inbox. You can also include an inline image, which is supported in live-chat, email, and API inboxes.", + "BTN_TEXT": "Save message signature", + "API_ERROR": "Couldn't save signature! Try again", + "API_SUCCESS": "Signature saved successfully", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save to save the signature", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Message Signature", + "ERROR": "Message Signature cannot be empty", + "PLACEHOLDER": "Insert your personal message signature here." + }, + "PASSWORD_SECTION": { + "TITLE": "Lozinka", + "NOTE": "Updating your password would reset your logins in multiple devices.", + "BTN_TEXT": "Promijeni lozinku" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "Pristupni token", + "NOTE": "This token can be used if you are building an API based integration", + "COPY": "Kopiraj", + "RESET": "Reset", + "CONFIRM_RESET": "Are you sure?", + "CONFIRM_HINT": "Click again to confirm", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Alerts", + "NOTE": "Enable audio alerts in dashboard for new messages and conversations.", + "PLAY": "Play sound", + "ALERT_TYPES": { + "NONE": "Nijedno", + "MINE": "Dodijeljeno", + "ALL": "Sve", + "ASSIGNED": "My assigned conversations", + "UNASSIGNED": "Unassigned conversations", + "NOTME": "Open conversations assigned to others" + }, + "ALERT_COMBINATIONS": { + "NONE": "You haven't selected any options, you won't receive any audio alerts.", + "ASSIGNED": "You'll receive alerts for conversations assigned to you.", + "UNASSIGNED": "You'll receive alerts for any unassigned conversations.", + "NOTME": "You'll receive alerts for conversations assigned to others.", + "ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.", + "ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.", + "NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.", + "ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations." + }, + "ALERT_TYPE": { + "TITLE": "Alert events for conversations", + "NONE": "Nijedno", + "ASSIGNED": "Dodijeljeni razgovori", + "ALL_CONVERSATIONS": "Svi razgovori" + }, + "DEFAULT_TONE": { + "TITLE": "Ton obavještenja:" + }, + "CONDITIONS": { + "TITLE": "Alert conditions:", + "CONDITION_ONE": "Send audio alerts only if the browser window is not active", + "CONDITION_TWO": "Send alerts every 30s until all the assigned conversations are read" + }, + "SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.", + "READ_MORE": "Pročitaj više" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "Email Notifications", + "NOTE": "Update your email notification preferences here", + "CONVERSATION_ASSIGNMENT": "Send email notifications when a conversation is assigned to me", + "CONVERSATION_CREATION": "Send email notifications when a new conversation is created", + "CONVERSATION_MENTION": "Send email notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "Send email notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send email notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send email notifications when a conversation misses resolution SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Notification preferences", + "TYPE_TITLE": "Notification type", + "EMAIL": "Email", + "PUSH": "Push notification", + "TYPES": { + "CONVERSATION_CREATED": "A new conversation is created", + "CONVERSATION_ASSIGNED": "A conversation is assigned to you", + "CONVERSATION_MENTION": "You are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "A new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "A new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "A conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "A conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "A conversation misses resolution SLA" + }, + "BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them" + }, + "API": { + "UPDATE_SUCCESS": "Your notification preferences are updated successfully", + "UPDATE_ERROR": "There is an error while updating the preferences, please try again" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Push Notifications", + "NOTE": "Update your push notification preferences here", + "CONVERSATION_ASSIGNMENT": "Send push notifications when a conversation is assigned to me", + "CONVERSATION_CREATION": "Send push notifications when a new conversation is created", + "CONVERSATION_MENTION": "Send push notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in a participating conversation", + "HAS_ENABLED_PUSH": "You have enabled push for this browser.", + "REQUEST_PUSH": "Enable push notifications", + "SLA_MISSED_FIRST_RESPONSE": "Send push notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send push notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send push notifications when a conversation misses resolution SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "Profilna slika" + }, + "NAME": { + "LABEL": "Your full name", + "ERROR": "Please enter a valid full name", + "PLACEHOLDER": "Please enter your full name" + }, + "DISPLAY_NAME": { + "LABEL": "Display name", + "ERROR": "Please enter a valid display name", + "PLACEHOLDER": "Please enter a display name, this would be displayed in conversations" + }, + "AVAILABILITY": { + "LABEL": "Availability", + "STATUS": { + "ONLINE": "Online", + "BUSY": "Busy", + "OFFLINE": "Offline" + }, + "SET_AVAILABILITY_SUCCESS": "Availability has been set successfully", + "SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again", + "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user" + }, + "EMAIL": { + "LABEL": "Your email address", + "ERROR": "Please enter a valid email address", + "PLACEHOLDER": "Please enter your email address, this would be displayed in conversations" + }, + "CURRENT_PASSWORD": { + "LABEL": "Current password", + "ERROR": "Please enter the current password", + "PLACEHOLDER": "Please enter the current password" + }, + "PASSWORD": { + "LABEL": "New password", + "ERROR": "Please enter a password of length 6 or more", + "PLACEHOLDER": "Please enter a new password" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Confirm new password", + "ERROR": "Confirm password should match the password", + "PLACEHOLDER": "Please re-enter your new password" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Change", + "CHANGE_ACCOUNTS": "Switch account", + "SWITCH_ACCOUNT": "Switch account", + "CONTACT_SUPPORT": "Contact support", + "SELECTOR_SUBTITLE": "Select an account from the following list", + "PROFILE_SETTINGS": "Profile settings", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Keyboard shortcuts", + "APPEARANCE": "Change appearance", + "SUPER_ADMIN_CONSOLE": "SuperAdmin console", + "DOCS": "Read documentation", + "CHANGELOG": "Changelog", + "LOGOUT": "Log out" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "days trial remaining.", + "TRAIL_BUTTON": "Buy Now", + "DELETED_USER": "Deleted User", + "EMAIL_VERIFICATION_PENDING": "It seems that you haven't verified your email address yet. Please check your inbox for the verification email.", + "RESEND_VERIFICATION_MAIL": "Resend verification email", + "EMAIL_VERIFICATION_SENT": "Verification email has been sent. Please check your inbox.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Account Suspended", + "MESSAGE": "Your account is suspended. Please reach out to the support team for more information." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Log out" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Copy", + "CODEPEN": "Otvori u CodePenu", + "COPY_SUCCESSFUL": "Copied to clipboard" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Show More", + "SHOW_LESS": "Show Less" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "Download", + "UPLOADING": "Prenosim...", + "INSTAGRAM_STORY_UNAVAILABLE": "This story is no longer available." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "See on map" + }, + "FORM_BUBBLE": { + "SUBMIT": "Submit" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "This image is no longer available.", + "LOADING_FAILED": "Loading failed" + } + }, + "CONFIRM_EMAIL": "Verifying...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Add Inbox" + } + }, + "SIDEBAR": { + "NO_ITEMS": "No items", + "CURRENTLY_VIEWING_ACCOUNT": "Currently viewing:", + "SWITCH": "Switch", + "INBOX_VIEW": "Inbox View", + "CONVERSATIONS": "Conversations", + "INBOX": "My Inbox", + "ALL_CONVERSATIONS": "Svi razgovori", + "MENTIONED_CONVERSATIONS": "Mentions", + "PARTICIPATING_CONVERSATIONS": "Participating", + "UNATTENDED_CONVERSATIONS": "Unattended", + "REPORTS": "Reports", + "SETTINGS": "Settings", + "CONTACTS": "Contacts", + "ACTIVE": "Active", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistants", + "CAPTAIN_DOCUMENTS": "Documents", + "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_TOOLS": "Tools", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "Inboxes", + "CAPTAIN_SETTINGS": "Settings", + "HOME": "Home", + "AGENTS": "Agenti", + "AGENT_BOTS": "Botovi", + "AUDIT_LOGS": "Audit Logovi", + "INBOXES": "Inboxes", + "NOTIFICATIONS": "Notifications", + "CANNED_RESPONSES": "Canned Responses", + "INTEGRATIONS": "Integrations", + "PROFILE_SETTINGS": "Postavke profila", + "ACCOUNT_SETTINGS": "Account Settings", + "APPLICATIONS": "Applications", + "LABELS": "Labels", + "CUSTOM_ATTRIBUTES": "Custom Attributes", + "AUTOMATION": "Automation", + "MACROS": "Macros", + "TEAMS": "Teams", + "BILLING": "Billing", + "CUSTOM_VIEWS_FOLDER": "Folders", + "CUSTOM_VIEWS_SEGMENTS": "Segments", + "ALL_CONTACTS": "All Contacts", + "TAGGED_WITH": "Tagged with", + "NEW_LABEL": "New label", + "NEW_TEAM": "New team", + "NEW_INBOX": "New inbox", + "REPORTS_CONVERSATION": "Conversations", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Campaigns", + "ONGOING": "Ongoing", + "ONE_OFF": "One off", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "Bot", + "REPORTS_AGENT": "Agenti", + "REPORTS_LABEL": "Labels", + "REPORTS_INBOX": "Inbox", + "REPORTS_TEAM": "Tim", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "Postavi sebe kao", + "SET_YOUR_AVAILABILITY": "Set your availability", + "SLA": "SLA", + "CUSTOM_ROLES": "Custom Roles", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Pregled", + "REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages", + "HELP_CENTER": { + "TITLE": "Centar za pomoć", + "ARTICLES": "Articles", + "CATEGORIES": "Categories", + "LOCALES": "Locales", + "SETTINGS": "Postavke" + }, + "CHANNELS": "Channels", + "SET_AUTO_OFFLINE": { + "TEXT": "Mark offline automatically", + "INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard.", + "INFO_SHORT": "Automatically mark offline when you aren't using the app." + }, + "DOCS": "Pročitaj članke", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "Naplata", + "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "CURRENT_PLAN": { + "TITLE": "Trenutni plan", + "PLAN_NOTE": "You are currently subscribed to the **{plan}** plan with **{quantity}** licenses", + "SEAT_COUNT": "Number of seats", + "RENEWS_ON": "Renews on" + }, + "VIEW_PRICING": "View Pricing", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Upravljanje pretplatom", + "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", + "BUTTON_TXT": "Go to the billing portal" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Manage usage and credits for Captain AI.", + "BUTTON_TXT": "Buy more credits", + "DOCUMENTS": "Documents", + "RESPONSES": "Responses", + "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more.", + "REFRESH_CREDITS": "Refresh" + }, + "CHAT_WITH_US": { + "TITLE": "Trebate pomoć?", + "DESCRIPTION": "Do you face any issues in billing? We are here to help.", + "BUTTON_TXT": "Čavrljajte s nama" + }, + "NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again.", + "TOPUP": { + "BUY_CREDITS": "Buy more credits", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Note:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "Odustani", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Nazad", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "Copied to clipboard", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.", + "NEW_ACCOUNT": "Novi račun", + "SELECTOR_SUBTITLE": "Kreirajte novi račun", + "API": { + "SUCCESS_MESSAGE": "Račun uspješno kreiran", + "EXIST_MESSAGE": "Račun već postoji", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "FORM": { + "NAME": { + "LABEL": "Naziv tvrtke", + "PLACEHOLDER": "Wayne Enterprises" + }, + "SUBMIT": "Pošalji", + "CANCEL": "Odustani" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "Vidi sve skraćenice", + "TITLE": { + "OPEN_CONVERSATION": "Otvori razgovor", + "RESOLVE_AND_NEXT": "Resolve and move to next", + "NAVIGATE_DROPDOWN": "Navigate dropdown items", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "ADD_ATTACHMENT": "Add Attachment", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "TOGGLE_SIDEBAR": "Toggle Sidebar", + "GO_TO_REPORTS_SIDEBAR": "Go to Reports sidebar", + "MOVE_TO_NEXT_TAB": "Move to next tab in conversation list", + "GO_TO_SETTINGS": "Idi na postavke", + "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", + "SWITCH_TO_REPLY": "Switch to Reply", + "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "Prioritet", + "ACTIVE": "Active", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "Uredi" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Odustani" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Description:", + "PLACEHOLDER": "Enter description" + }, + "STATUS": { + "LABEL": "Status:", + "PLACEHOLDER": "Select status", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "Add" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "Uredi" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Odustani" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Description:", + "PLACEHOLDER": "Enter description" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "Add" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "Izbriši", + "CANCEL_BUTTON_LABEL": "Odustani" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/signup.json b/app/javascript/dashboard/i18n/locale/hr/signup.json new file mode 100644 index 0000000..9b2ff2c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Create an account", + "TITLE": "Register", + "TESTIMONIAL_HEADER": "All it takes is one step to move forward", + "TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.", + "TERMS_ACCEPT": "By creating an account, you agree to our T & C and Privacy policy", + "OAUTH": { + "GOOGLE_SIGNUP": "Sign up with Google" + }, + "COMPANY_NAME": { + "LABEL": "Company name", + "PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises", + "ERROR": "Company name is too short" + }, + "FULL_NAME": { + "LABEL": "Full name", + "PLACEHOLDER": "Enter your full name. eg: Bruce Wayne", + "ERROR": "Full name is too short" + }, + "EMAIL": { + "LABEL": "Work email", + "PLACEHOLDER": "Enter your work email address. E.g., bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Please enter a valid work email address" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password", + "ERROR": "Password is too short", + "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm Password", + "PLACEHOLDER": "Confirm Password", + "ERROR": "Lozinke se ne poklapaju." + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "SUBMIT": "Create account", + "HAVE_AN_ACCOUNT": "Already have an account?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/sla.json b/app/javascript/dashboard/i18n/locale/hr/sla.json new file mode 100644 index 0000000..126e93d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Add SLA", + "ADD_ACTION_LONG": "Create a new SLA Policy", + "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", + "LEARN_MORE": "Learn more about SLA", + "LOADING": "Fetching SLAs", + "PAYWALL": { + "TITLE": "Upgrade to create SLAs", + "AVAILABLE_ON": "The SLA feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SLA feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no SLAs available in this account.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Issues raised by enterprise customers, that require immediate attention.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Issues raised by enterprise customers, that needs to be acknowledged quickly." + }, + "BUSINESS_HOURS_ON": "Business hours on", + "BUSINESS_HOURS_OFF": "Business hours off", + "RESPONSE_TYPES": { + "FRT": "First response time threshold", + "NRT": "Next response time threshold", + "RT": "Resolution time threshold", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA Name", + "PLACEHOLDER": "SLA Name", + "REQUIRED_ERROR": "SLA name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "SLA for premium customers" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "First Response Time", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Next Response Time", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "Resolution Time", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Business Hours", + "PLACEHOLDER": "Only during business hours" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Threshold should be a number and greater than zero" + }, + "EDIT": "Uredi", + "CREATE": "Create", + "DELETE": "Izbriši", + "CANCEL": "Odustani" + }, + "ADD": { + "TITLE": "Add SLA", + "DESC": "Friendly promises for great service!", + "API": { + "SUCCESS_MESSAGE": "SLA added successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "DELETE": { + "TITLE": "Delete SLA", + "API": { + "SUCCESS_MESSAGE": "SLA deleted successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "CONFIRM": { + "TITLE": "Potvrdi brisanje", + "MESSAGE": "Are you sure you want to delete ", + "YES": "Da, izbriši", + "NO": "Ne, zadrži" + } + }, + "EVENTS": { + "TITLE": "SLA Misses", + "FRT": "First response time", + "NRT": "Next response time", + "RT": "Resolution time", + "SHOW_MORE": "{count} more", + "HIDE": "Hide {count} rows" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/teamsSettings.json b/app/javascript/dashboard/i18n/locale/hr/teamsSettings.json new file mode 100644 index 0000000..c27ffe9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Create new team", + "HEADER": "Teams", + "LOADING": "Fetching teams", + "DESCRIPTION": "Teams allow you to organize agents into groups based on their responsibilities. An agent can belong to multiple teams. When working collaboratively, you can assign conversations to specific teams.", + "LEARN_MORE": "Learn more about teams", + "LIST": { + "404": "There are no teams created on this account.", + "EDIT_TEAM": "Edit team", + "NONE": "Nijedno" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Create a new team", + "DESC": "Add a title and description to your new team." + }, + "AGENTS": { + "BUTTON_TEXT": "Add agents to team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation." + }, + "WIZARD_CREATE": { + "TITLE": "Create", + "BODY": "Create a new team of agents." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "Add Agents", + "BODY": "Add agents to the team." + }, + "WIZARD_FINISH": { + "TITLE": "Finish", + "BODY": "You are all set to go!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Edit your team details", + "DESC": "Edit title and description to your team.", + "BUTTON_TEXT": "Update team" + }, + "AGENTS": { + "BUTTON_TEXT": "Update agents in team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. All the added agents will be notified when a conversation is assigned to this team." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Team details", + "ROUTE": "settings_teams_edit", + "BODY": "Change name, description and other details." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Edit Agents", + "ROUTE": "settings_teams_edit_members", + "BODY": "Edit agents in your team." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Finish", + "ROUTE": "settings_teams_edit_finish", + "BODY": "You are all set to go!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Couldn't save the team details. Try again." + }, + "AGENTS": { + "AGENT": "AGENT", + "EMAIL": "E-pošta", + "BUTTON_TEXT": "Add agents", + "ADD_AGENTS": "Adding Agents to your Team...", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected." + }, + "ADD": { + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation.", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected.", + "BUTTON_TEXT": "Add agents", + "AGENT_VALIDATION_ERROR": "Select at least one agent." + }, + "FINISH": { + "TITLE": "Your team is ready!", + "MESSAGE": "You can now collaborate as a team on conversations. Happy supporting ", + "BUTTON_TEXT": "Finish" + }, + "DELETE": { + "BUTTON_TEXT": "Izbriši", + "API": { + "SUCCESS_MESSAGE": "Team deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the team. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure you want to delete the team?", + "PLACE_HOLDER": "Please type {teamName} to confirm", + "MESSAGE": "Deleting the team will remove the team assignment from the conversations assigned to this team.", + "YES": "Delete ", + "NO": "Odustani" + } + }, + "SETTINGS": "Settings", + "FORM": { + "UPDATE": "Update team", + "CREATE": "Create team", + "NAME": { + "LABEL": "Team name", + "PLACEHOLDER": "Example: Sales, Customer Support" + }, + "DESCRIPTION": { + "LABEL": "Team Description", + "PLACEHOLDER": "Short description about this team." + }, + "AUTO_ASSIGN": { + "LABEL": "Allow auto assign for this team." + }, + "SUBMIT_CREATE": "Create team" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/webhooks.json b/app/javascript/dashboard/i18n/locale/hr/webhooks.json new file mode 100644 index 0000000..e28c043 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Webhook postavke" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/hr/whatsappTemplates.json new file mode 100644 index 0000000..39c64ad --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Whatsapp Predlošci", + "SUBTITLE": "Izaberi whatsapp predložak koji želiš poslati", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Pretraži Predloške", + "NO_TEMPLATES_FOUND": "Nije pronađen predložak za", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Kategorija", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Jezik", + "TEMPLATE_BODY": "Tijelo predloška", + "CATEGORY": "Kategorija" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Varijable", + "LANGUAGE": "Jezik", + "CATEGORY": "Kategorija", + "VARIABLE_PLACEHOLDER": "Unesi {variable} vrijednost", + "GO_BACK_LABEL": "Nazad", + "SEND_MESSAGE_LABEL": "Šalji poruku", + "FORM_ERROR_MESSAGE": "Popuniti sve varijable prije slanja", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hr/yearInReview.json b/app/javascript/dashboard/i18n/locale/hr/yearInReview.json new file mode 100644 index 0000000..d72e0c6 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hr/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "Close", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "conversations", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "Download", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "Share" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/advancedFilters.json b/app/javascript/dashboard/i18n/locale/hu/advancedFilters.json new file mode 100644 index 0000000..85781b8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Beszélgetések szűrése", + "SUBTITLE": "Adja hozzá a szűrőket az alábbiakban, és nyomja meg a \"Szűrők alkalmazása\" gombot.", + "EDIT_CUSTOM_FILTER": "Mappa szerkesztése", + "CUSTOM_VIEWS_SUBTITLE": "Adj hozzá vagy törölj szűrőket, és frissítsd a mappát.", + "ADD_NEW_FILTER": "Szűrő hozzáadása", + "FILTER_DELETE_ERROR": "Hoppá, úgy tűnik, semmit sem tudunk elmenteni! Kérjük, adjon hozzá legalább egy szűrőt a mentéshez.", + "SUBMIT_BUTTON_LABEL": "Szűrők alkalmazása", + "UPDATE_BUTTON_LABEL": "Mappa frissítése", + "CANCEL_BUTTON_LABEL": "Mégse", + "CLEAR_BUTTON_LABEL": "Szűrők törlése", + "FOLDER_LABEL": "Mappa neve", + "FOLDER_QUERY_LABEL": "Mappa lekérdezés", + "EMPTY_VALUE_ERROR": "Kötelező megadni.", + "TOOLTIP_LABEL": "Beszélgetések szűrése", + "QUERY_DROPDOWN_LABELS": { + "AND": "ÉS", + "OR": "VAGY" + }, + "INPUT_PLACEHOLDER": "Enter value", + "OPERATOR_LABELS": { + "equal_to": "Egyenlő", + "not_equal_to": "Nem egyenlő", + "does_not_contain": "Nem tartalmaz", + "is_present": "Jelen van", + "is_not_present": "Nincs jelen", + "is_greater_than": "Nagyobb", + "is_less_than": "Kisebb", + "days_before": "x nappal előtte", + "starts_with": "Ezzel kezdődik", + "equalTo": "Egyenlő", + "notEqualTo": "Nem egyenlő", + "contains": "Tartalmaz", + "doesNotContain": "Nem tartalmaz", + "isPresent": "Jelen van", + "isNotPresent": "Nincs jelen", + "isGreaterThan": "Nagyobb", + "isLessThan": "Kisebb mint", + "daysBefore": "x nappal előtte", + "startsWith": "Ezzel kezdődik" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "Igaz", + "FALSE": "Hamis" + }, + "ATTRIBUTES": { + "STATUS": "Státusz", + "ASSIGNEE_NAME": "Jogosult neve", + "INBOX_NAME": "Fiók név", + "TEAM_NAME": "Csapatnév", + "CONVERSATION_IDENTIFIER": "Beszélgetés azonosítója", + "CAMPAIGN_NAME": "Vállalkozás neve", + "LABELS": "Cimkék", + "BROWSER_LANGUAGE": "Böngésző nyelve", + "PRIORITY": "Prioritás", + "COUNTRY_NAME": "Ország neve", + "REFERER_LINK": "Hivatkozás link", + "CUSTOM_ATTRIBUTE_LIST": "Lista", + "CUSTOM_ATTRIBUTE_TEXT": "Szöveg", + "CUSTOM_ATTRIBUTE_NUMBER": "Szám", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Jelölőnégyzet", + "CREATED_AT": "Létrehozva", + "LAST_ACTIVITY": "Utolsó aktivitás" + }, + "ERRORS": { + "VALUE_REQUIRED": "Kötelező megadni", + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard szűrők", + "ADDITIONAL_FILTERS": "További szűrők", + "CUSTOM_ATTRIBUTES": "Egyéni tulajdonságok" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "El akarod menteni ezt a szűrőt?", + "LABEL": "Nevezd el a szűrőt", + "PLACEHOLDER": "Nevezze el a szűrőt, hogy később hivatkozhasson rá.", + "ERROR_MESSAGE": "Név kötelező.", + "SAVE_BUTTON": "Szűrő mentése", + "CANCEL_BUTTON": "Mégse", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Mappa sikeresen létrehozva.", + "ERROR_MESSAGE": "Hiba történt a mappa létrehozása során." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Szegmens sikeresen létrehozva.", + "ERROR_MESSAGE": "Hiba történt a szegmens törlésekor." + } + }, + "EDIT": { + "EDIT_BUTTON": "Mappa szerkesztése" + }, + "DELETE": { + "DELETE_BUTTON": "Szűrő törlése", + "MODAL": { + "CONFIRM": { + "TITLE": "Törlés megerősítése", + "MESSAGE": "Biztosan törölni akarod a szűrőt ", + "YES": "Igen, törlés", + "NO": "Nem, tartsd meg" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Mappa sikeresen törölve.", + "ERROR_MESSAGE": "Hiba történt a mappa törlése során." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Szegmens törölve.", + "ERROR_MESSAGE": "Hiba történt a szegmens törlése során." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/agentBots.json b/app/javascript/dashboard/i18n/locale/hu/agentBots.json new file mode 100644 index 0000000..9e01f76 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Botok", + "LOADING_EDITOR": "Szerkesztő betöltése...", + "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try. You can manage your bots from this page or create new ones using the 'Add Bot' button.", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "System bot", + "GLOBAL_BOT_BADGE": "Rendszer", + "AVATAR": { + "SUCCESS_DELETE": "Bot avatar deleted successfully", + "ERROR_DELETE": "Error deleting bot avatar, please try again" + }, + "BOT_CONFIGURATION": { + "TITLE": "Válassz ügynököt", + "DESC": "Rendeljen egy Agent Botot a postaládájához. Ők képesek kezelni a kezdeti beszélgetéseket, és szükség esetén átirányítani őket egy emberhez.", + "SUBMIT": "Frissítés", + "DISCONNECT": "Bot lekapcsolása", + "SUCCESS_MESSAGE": "Ügynök frissítve.", + "DISCONNECTED_SUCCESS_MESSAGE": "Ügynök leválasztva.", + "ERROR_MESSAGE": "Nem sikerült frissíteni a botot. Kérjük, próbálja meg újra.", + "DISCONNECTED_ERROR_MESSAGE": "Nem sikerült leválasztani az botot. Kérjük, próbálja meg újra.", + "SELECT_PLACEHOLDER": "Válassza ki a botot" + }, + "ADD": { + "TITLE": "Add Bot", + "CANCEL_BUTTON_TEXT": "Mégse", + "API": { + "SUCCESS_MESSAGE": "Bot hozzáadva.", + "ERROR_MESSAGE": "Nem tudott botot hozzáadni. Kérjük, próbálja meg később újra." + } + }, + "LIST": { + "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.", + "LOADING": "Botok hívása...", + "TABLE_HEADER": { + "DETAILS": "Bot Details", + "URL": "Webhook URL" + } + }, + "DELETE": { + "BUTTON_TEXT": "Törlés", + "TITLE": "Bot törlése", + "CONFIRM": { + "TITLE": "Törlés megerősítése", + "MESSAGE": "Are you sure you want to delete {name}?", + "YES": "Igen, Törlés", + "NO": "Nem, Mégse" + }, + "API": { + "SUCCESS_MESSAGE": "Bot törölve.", + "ERROR_MESSAGE": "Nem sikerült törölni a botot. Kérjük, próbálja újra." + } + }, + "EDIT": { + "BUTTON_TEXT": "Szerkesztés", + "TITLE": "Bot szerkesztése", + "API": { + "SUCCESS_MESSAGE": "Bot frissítve.", + "ERROR_MESSAGE": "Nem tudta frissíteni a botot. Kérjük, próbálja újra." + } + }, + "ACCESS_TOKEN": { + "TITLE": "Hozzáférési kulcs", + "DESCRIPTION": "Copy the access token and save it securely", + "COPY_SUCCESSFUL": "Access token copied to clipboard", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "Bot neve", + "PLACEHOLDER": "Enter bot name", + "REQUIRED": "Bot név megadása kötelező" + }, + "DESCRIPTION": { + "LABEL": "Leírás", + "PLACEHOLDER": "Mit csinál ez a bot?" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "Webhook URL is required" + }, + "ERRORS": { + "NAME": "Bot név megadása kötelező", + "URL": "Webhook URL is required", + "VALID_URL": "Please enter a valid URL starting with http:// or https://" + }, + "CANCEL": "Mégse", + "CREATE": "Create Bot", + "UPDATE": "Update Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them." + }, + "TYPES": { + "WEBHOOK": "Webhook bot" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/agentMgmt.json b/app/javascript/dashboard/i18n/locale/hu/agentMgmt.json new file mode 100644 index 0000000..75eb07d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Ügynökök", + "HEADER_BTN_TXT": "Ügynök Hozzádása", + "LOADING": "Ügynökök Listájának Lekérése", + "DESCRIPTION": "An agent is a member of your customer support team who can view and respond to user messages. The list below shows all the agents in your account.", + "LEARN_MORE": "Learn about user roles", + "AGENT_TYPES": { + "ADMINISTRATOR": "Adminisztrátor", + "AGENT": "Ügynök" + }, + "LIST": { + "404": "Ehhez a fiókhoz nincs ügynök rendelve", + "TITLE": "A csapatod ügynökeinek kezelése", + "DESC": "Hozzáadhatsz és törölhetsz ügynököket a csapatodban.", + "NAME": "Név", + "EMAIL": "EMAIL", + "STATUS": "Státusz", + "ACTIONS": "Műveletek", + "VERIFIED": "Megerősített", + "VERIFICATION_PENDING": "Megerősítés függőben", + "AVAILABLE_CUSTOM_ROLE": "Available custom role permissions" + }, + "ADD": { + "TITLE": "Ügynök hozzáadása a csapathoz", + "DESC": "Olyan személyeket adhat hozzá, akik kezelni tudják majd a postafiókot.", + "CANCEL_BUTTON_TEXT": "Mégse", + "FORM": { + "NAME": { + "LABEL": "Ügynök neve", + "PLACEHOLDER": "Kérjük adja meg az ügynök nevét" + }, + "AGENT_TYPE": { + "LABEL": "Agent Type", + "PLACEHOLDER": "Please select a type", + "ERROR": "Agent type is required" + }, + "EMAIL": { + "LABEL": "Email cím", + "PLACEHOLDER": "Kérjük adja meg az ügynök email címét" + }, + "SUBMIT": "Ügynök Hozzádása" + }, + "API": { + "SUCCESS_MESSAGE": "Ügynök sikeresen hozzáadva", + "EXIST_MESSAGE": "Az ügynök email cím már használatban van, kérjük próbálkozzon újra másik email címmel", + "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" + } + }, + "DELETE": { + "BUTTON_TEXT": "Törlés", + "API": { + "SUCCESS_MESSAGE": "Ügynök sikeresen hozzáadva", + "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" + }, + "CONFIRM": { + "TITLE": "Törlés megerősítése", + "MESSAGE": "Biztos abban, hogy törli ", + "YES": "Igen, Törlés ", + "NO": "Nem, Mégse " + } + }, + "EDIT": { + "TITLE": "Ügynök szerkesztése", + "FORM": { + "NAME": { + "LABEL": "Ügynök neve", + "PLACEHOLDER": "Kérjük adja meg az ügynök nevét" + }, + "AGENT_TYPE": { + "LABEL": "Agent Type", + "PLACEHOLDER": "Please select a type", + "ERROR": "Agent type is required" + }, + "EMAIL": { + "LABEL": "Email cím", + "PLACEHOLDER": "Kérjük adja meg az ügynök email címét" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Elérhetőség", + "PLACEHOLDER": "Adj meg elérhetőség státuszt", + "ERROR": "Elérhetőség megadása kötelező" + }, + "SUBMIT": "Ügynök szerkesztése" + }, + "BUTTON_TEXT": "Szerkesztés", + "CANCEL_BUTTON_TEXT": "Mégse", + "API": { + "SUCCESS_MESSAGE": "Ügynök sikeresen frissítve", + "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Új jelszó kérése", + "ADMIN_SUCCESS_MESSAGE": "Egy e-mail a jelszófrissítési utasításokkal sikeresen kiküldve az ügynöknek", + "SUCCESS_MESSAGE": "Ügynök jelszó sikeresen frissítve", + "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" + } + }, + "SEARCH": { + "NO_RESULTS": "Nincs találat." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "Nincs", + "TITLE": { + "AGENT": "Ügynök kiválasztása", + "TEAM": "Csapat kiválasztása" + }, + "LIST": { + "NONE": "Nincs" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "Nem találunk ügynököt", + "TEAM": "Nem találtunk csapatot" + }, + "PLACEHOLDER": { + "AGENT": "Ügynökök keresése", + "TEAM": "Csapatok keresése", + "INPUT": "Ügynök keresése" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/hu/attributesMgmt.json new file mode 100644 index 0000000..054e778 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Egyedi atribútumok", + "HEADER_BTN_TXT": "Adj meg egyedi tulajdonságot", + "LOADING": "Vonzó egyedi tulajdonság", + "DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.", + "LEARN_MORE": "Learn more about custom attributes", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Beszélgetés", + "CONTACT": "Kontakt" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Szöveg", + "NUMBER": "Szám", + "LINK": "Link", + "DATE": "Date", + "LIST": "Lista", + "CHECKBOX": "Jelölőnégyzet" + }, + "ADD": { + "TITLE": "Adj meg egyedi tulajdonságot", + "SUBMIT": "Létrehozás", + "CANCEL_BUTTON_TEXT": "Mégse", + "FORM": { + "NAME": { + "LABEL": "Rövidnév", + "PLACEHOLDER": "Add meg az egyéni tulajdonság rövidnevét", + "ERROR": "Név kötelező" + }, + "DESC": { + "LABEL": "Leírás", + "PLACEHOLDER": "Add meg az egyéni tulajdonság leírását", + "ERROR": "Leírás megadása kötelező" + }, + "MODEL": { + "LABEL": "Vonatkozik", + "PLACEHOLDER": "Kérlek, válassz egyet", + "ERROR": "Modell megadása kötelező" + }, + "TYPE": { + "LABEL": "Típus", + "PLACEHOLDER": "Kérlek, válaszd ki a típust", + "ERROR": "Típus megadása kötelező", + "LIST": { + "LABEL": "Lista értékek", + "PLACEHOLDER": "Kérlek add meg az értéket és lépj be a kulccsal", + "ERROR": "Legalább egy érték megadása kötelező" + } + }, + "KEY": { + "LABEL": "Kulcs", + "PLACEHOLDER": "Add meg az egyéni tulajdonság kulcsát", + "ERROR": "Kulcs megadása kötelező", + "IN_VALID": "Érvénytelen kulcs" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "API": { + "SUCCESS_MESSAGE": "Sikeresen hozzáadtad ezt az egyedi tulajdonságot!", + "ERROR_MESSAGE": "Nem tudsz létrehozni Egyéni Tulajdonságot. Kérlek, próbáld újra később." + } + }, + "DELETE": { + "BUTTON_TEXT": "Törlés", + "API": { + "SUCCESS_MESSAGE": "Egyéni Tulajdonság sikeresen törölve.", + "ERROR_MESSAGE": "Egyéni Tulajdonság törlése sikertelen. Próbáld újra." + }, + "CONFIRM": { + "TITLE": "Biztosan törölni akarod: {attributeName}", + "PLACE_HOLDER": "Kérlek gépeld a megerősítéshez", + "MESSAGE": "A törlés eltávolítja az egyéni tulajdonságot", + "YES": "Törlés ", + "NO": "Mégse" + } + }, + "EDIT": { + "TITLE": "Egyéni tulajdonság szerkesztése", + "UPDATE_BUTTON_TEXT": "Frissítés", + "TYPE": { + "LIST": { + "LABEL": "Lista értékek", + "PLACEHOLDER": "Kérlek add meg az értéket és lépj be a kulccsal" + } + }, + "API": { + "SUCCESS_MESSAGE": "Egyéni Tulajdonság sikeresen frissítve", + "ERROR_MESSAGE": "Hiba történt az egyéni tulajdonság frissítésekor. Kérjük próbáld később" + } + }, + "TABS": { + "HEADER": "Egyedi atribútumok", + "CONVERSATION": "Beszélgetés", + "CONTACT": "Kontakt" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Név", + "DESCRIPTION": "Leírás", + "TYPE": "Típus", + "KEY": "Kulcs" + }, + "BUTTONS": { + "EDIT": "Szerkesztés", + "DELETE": "Törlés" + }, + "EMPTY_RESULT": { + "404": "Nincsennek létrehozva egyéni tulajdonságok", + "NOT_FOUND": "Nincsennek beállítva egyéni tulajdonságok" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/auditLogs.json b/app/javascript/dashboard/i18n/locale/hu/auditLogs.json new file mode 100644 index 0000000..72a561b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Audit logok", + "HEADER_BTN_TXT": "Audit logok hozzáadása", + "LOADING": "Audit logok betöltése", + "DESCRIPTION": "Audit Logs maintain a record of activities in your account, allowing you to track and audit your account, team, or services.", + "LEARN_MORE": "Learn more about audit logs", + "SEARCH_404": "Nincs megfelelő elem", + "SIDEBAR_TXT": "Auditnaplók
Az auditnaplók a Chatwoot rendszer eseményeinek és műveleteinek nyomvonalai.
", + "LIST": { + "404": "Nincsen elérthető Auditnapló ebben a fiókban.", + "TITLE": "Audit logok menedzselése", + "DESC": "Az Auditnaplók a Chatwoot rendszer eseményeinek és műveleteinek nyomvonalai.", + "TABLE_HEADER": { + "ACTIVITY": "User", + "TIME": "Action", + "IP_ADDRESS": "IP cím" + } + }, + "API": { + "SUCCESS_MESSAGE": "Auditnapló sikeresen lekérve", + "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" + }, + "DEFAULT_USER": "Rendszer", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} meghívta {invitee} a fiókba, mint {role}", + "EDIT": { + "SELF": "{agentName} megváltoztatta az {attributes} -aikat {values} - ra", + "OTHER": "{agentName} megváltoztatta {attributes} {user} {values} -ra", + "DELETED": "{agentName} changed {attributes} of a deleted user to {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} aláírta", + "SIGN_OUT": "{agentName} kijelentkezett" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} deleted conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/automation.json b/app/javascript/dashboard/i18n/locale/hu/automation.json new file mode 100644 index 0000000..a75c77e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automatizáció", + "DESCRIPTION": "Automation can replace and streamline existing processes that require manual effort, such as adding labels and assigning conversations to the most suitable agent. This allows the team to focus on their strengths while reducing time spent on routine tasks.", + "LEARN_MORE": "Learn more about automation", + "HEADER_BTN_TXT": "Automatikus szabály hozzáadása", + "LOADING": "Automatizálási szabályok betöltése", + "ADD": { + "TITLE": "Automatikus szabály hozzáadása", + "SUBMIT": "Létrehozás", + "CANCEL_BUTTON_TEXT": "Mégse", + "FORM": { + "NAME": { + "LABEL": "Szabály neve", + "PLACEHOLDER": "Szabálynév megadása", + "ERROR": "Név kötelező" + }, + "DESC": { + "LABEL": "Leírás", + "PLACEHOLDER": "Szabályleírás megadása", + "ERROR": "Leírás megadása kötelező" + }, + "EVENT": { + "LABEL": "Esemény", + "PLACEHOLDER": "Kérlek, válassz egyet", + "ERROR": "Esemény megadása kötezelő" + }, + "CONDITIONS": { + "LABEL": "Feltételek" + }, + "ACTIONS": { + "LABEL": "Műveletek" + } + }, + "CONDITION_BUTTON_LABEL": "Feltétel hozzáadása", + "ACTION_BUTTON_LABEL": "Akció hozzáadása", + "API": { + "SUCCESS_MESSAGE": "Automatizált szabály sikeresen hozzáaadva", + "ERROR_MESSAGE": "Nem sikerült automatizált szabályt létrehozni. Kérjük, próbáld újra később" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Név", + "DESCRIPTION": "Leírás", + "ACTIVE": "Aktív", + "CREATED_ON": "Létrehozva" + }, + "404": "Nem található automatizált szabály" + }, + "DELETE": { + "TITLE": "Automatizált szabály törlése", + "SUBMIT": "Törlés", + "CANCEL_BUTTON_TEXT": "Mégse", + "CONFIRM": { + "TITLE": "Törlés megerősítése", + "MESSAGE": "Biztos abban, hogy törli ", + "YES": "Igen, Törlés ", + "NO": "Nem, Mégse " + }, + "API": { + "SUCCESS_MESSAGE": "Automatizált szabály sikeresen törölve", + "ERROR_MESSAGE": "Nem sikerült automatizált szabályt törölni. Kérjük, próbáld újra később" + } + }, + "EDIT": { + "TITLE": "Automatizált szabály szerkesztése", + "SUBMIT": "Frissítés", + "CANCEL_BUTTON_TEXT": "Mégse", + "API": { + "SUCCESS_MESSAGE": "Automatizált szabály sikeresen frissítve", + "ERROR_MESSAGE": "Nem sikerült automatizált szabályt frissíteni. Kérjük, próbáld újra később" + } + }, + "CLONE": { + "TOOLTIP": "Duplikálás", + "API": { + "SUCCESS_MESSAGE": "Automatizálás sikeresen többszörözve", + "ERROR_MESSAGE": "Nem sikerült automatizált szabályt többszörözni. Kérjük, próbáld újra később" + } + }, + "FORM": { + "EDIT": "Szerkesztés", + "CREATE": "Létrehozás", + "DELETE": "Törlés", + "CANCEL": "Mégse", + "RESET_MESSAGE": "Az eseménytípus módosítása visszaállítja az alább hozzáadott feltételeket és eseményeket\n" + }, + "CONDITION": { + "DELETE_MESSAGE": "Legalább egy feltételt meg kell adnod a mentéshez", + "CONTACT_CUSTOM_ATTR_LABEL": "Kapcsolat az egyéni tulajdonságokkal", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Beszélgetés az egyéni tulajdonságokkal\n" + }, + "ACTION": { + "DELETE_MESSAGE": "Legalább egy tevékenység szükséges a mentéshez", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Írd be az üzeneted ide", + "TEAM_DROPDOWN_PLACEHOLDER": "Csapatok kiválasztása", + "EMAIL_INPUT_PLACEHOLDER": "Enter email", + "URL_INPUT_PLACEHOLDER": "Enter URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Automatizált szabályok aktivizálása", + "DEACTIVATION_TITLE": "Automatizált szabályok inaktivizálása", + "ACTIVATION_DESCRIPTION": "Ez a művelet aktiválja a „{automationName}” automatizálási szabályt. Biztosan folytatod?", + "DEACTIVATION_DESCRIPTION": "Ez a művelet deaktiválja a(z) „{automationName}” automatizálási szabályt. Biztosan folytatod?", + "ACTIVATION_SUCCESFUL": "Automatizált szabály sikeresen aktiválva", + "DEACTIVATION_SUCCESFUL": "Automatizált szabály sikeresen inaktiválva", + "ACTIVATION_ERROR": "Nem sikerült aktiválni az automatizálást. Kérjük, próbálja újra később", + "DEACTIVATION_ERROR": "Nem sikerült inaktiválni az automatizálást. Kérjük, próbálja újra később", + "CONFIRMATION_LABEL": "Igen", + "CANCEL_LABEL": "Nem" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Nem sikerült feltölteni a csatolmányt, kérlek, próbáld később", + "LABEL_IDLE": "Csatolmányok feltöltése", + "LABEL_UPLOADING": "Frissítés...", + "LABEL_UPLOADED": "Sikeres feltöltés", + "LABEL_UPLOAD_FAILED": "Sikertelen feltöltés" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Kötelező megadni", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "NONE_OPTION": "Nincs", + "EVENTS": { + "CONVERSATION_CREATED": "Beszélgetés létrehozva", + "CONVERSATION_UPDATED": "Beszélgetés frissítve", + "MESSAGE_CREATED": "Message Created", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Conversation Opened" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assign to Agent", + "ASSIGN_TEAM": "Assign a Team", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "SEND_EMAIL_TO_TEAM": "Send an Email to Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Beszélgetés elnémítása", + "SNOOZE_CONVERSATION": "Beszélgetés alvómódba", + "RESOLVE_CONVERSATION": "Beszélgetés megoldása", + "SEND_WEBHOOK_EVENT": "Send Webhook Event", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "CHANGE_PRIORITY": "Prioritás megváltoztatása", + "ADD_SLA": "Add SLA", + "OPEN_CONVERSATION": "Beszélgetés megnyitása" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "Nincs", + "LOW": "Alacsony", + "MEDIUM": "Közepes", + "HIGH": "Magas", + "URGENT": "Sürgős" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Message Type", + "MESSAGE_CONTAINS": "Message Contains", + "EMAIL": "E-mail", + "INBOX": "Fiók", + "CONVERSATION_LANGUAGE": "Conversation Language", + "PHONE_NUMBER": "Telefonszám", + "STATUS": "Státusz", + "BROWSER_LANGUAGE": "Böngésző nyelve", + "MAIL_SUBJECT": "Email Subject", + "COUNTRY_NAME": "Ország", + "REFERER_LINK": "Referrer Link", + "ASSIGNEE_NAME": "Assignee", + "TEAM_NAME": "Csapat", + "PRIORITY": "Prioritás", + "LABELS": "Cimkék" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/bulkActions.json b/app/javascript/dashboard/i18n/locale/hu/bulkActions.json new file mode 100644 index 0000000..569388e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", + "AGENT_SELECT_LABEL": "Ügynök kiválasztása", + "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", + "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Visszaugrás", + "ASSIGN_LABEL": "Hozzárendelés", + "YES": "Igen", + "SEARCH_INPUT_PLACEHOLDER": "Keresés", + "ASSIGN_AGENT_TOOLTIP": "Ügynök hozzárendelése", + "ASSIGN_TEAM_TOOLTIP": "Csapat hozzárendelése", + "ASSIGN_SUCCESFUL": "Beszélgetés sikeresen hozzá lett rendelve.", + "ASSIGN_FAILED": "Nem sikerült beszélgetéseket hozzárendelni. Kérjük, próbálja újra.", + "RESOLVE_SUCCESFUL": "Beszélgetés sikeresen megoldva.", + "RESOLVE_FAILED": "Nem sikerült megoldani a beszélgetéseket. Kérjük, próbálja újra.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Csak a kiválasztott beszélgetések láthatóak ezen az oldalon.", + "AGENT_LIST_LOADING": "Ügynökök betöltése", + "UPDATE": { + "CHANGE_STATUS": "Státusz változtatása", + "SNOOZE_UNTIL": "Halasztás", + "UPDATE_SUCCESFUL": "Beszélgetés státusza sikeresen frissítve ", + "UPDATE_FAILED": "Nem sikerült frissíteni a beszélgetéseket. Kérjük, próbálja újra." + }, + "LABELS": { + "ASSIGN_LABELS": "Címkék hozzárendelése", + "NO_LABELS_FOUND": "Nem találtunk címkét", + "ASSIGN_SELECTED_LABELS": "Válogatott címkék hozzárendelése", + "ASSIGN_SUCCESFUL": "Címkék hozzárendelése sikeres.", + "ASSIGN_FAILED": "Nem sikerült címkéket hozzárendelni. Kérjük, próbálja újra." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Csapat kiválasztása", + "NONE": "Nincs", + "NO_TEAMS_AVAILABLE": "Ebben a fiókban még nincs csapat létrehozva.", + "ASSIGN_SELECTED_TEAMS": "Válogatott csapatok hozzárendelése.", + "ASSIGN_SUCCESFUL": "Teams assigned successfully.", + "ASSIGN_FAILED": "Nem sikerült csapatot kijelölni. Kérjük, próbálja újra." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/campaign.json b/app/javascript/dashboard/i18n/locale/hu/campaign.json new file mode 100644 index 0000000..0f0df48 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "Engedélyezve", + "DISABLED": "Letiltva" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Küldő", + "BOT": "Bot", + "FROM": "innen", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "Mégse", + "CREATE_BUTTON_TEXT": "Létrehozás", + "FORM": { + "TITLE": { + "LABEL": "Cím", + "PLACEHOLDER": "Kérlek írd ide a kampány nevét", + "ERROR": "Cím megadása kötelező" + }, + "MESSAGE": { + "LABEL": "Üzenet", + "PLACEHOLDER": "Kérlek írd ide a kampány üzenetét", + "ERROR": "Üzenet kötelező" + }, + "INBOX": { + "LABEL": "Válassz fiókot", + "PLACEHOLDER": "Válassz fiókot", + "ERROR": "Fiók kötelező" + }, + "SENT_BY": { + "LABEL": "Küldő", + "PLACEHOLDER": "Please select sender", + "ERROR": "Küldő megadása kötelező" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Kérjük adj meg egy URL-t", + "ERROR": "Kérjük helyes URL-t adj meg" + }, + "TIME_ON_PAGE": { + "LABEL": "Az oldalon töltött idő (másodperc)", + "PLACEHOLDER": "Kérlek, add meg az időtartamot", + "ERROR": "Az oldalon töltött idő megadása kötelező" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "Kampány engedélyezése", + "TRIGGER_ONLY_BUSINESS_HOURS": "Feloldás csak munkaidőben" + }, + "BUTTONS": { + "CREATE": "Létrehozás", + "CANCEL": "Mégse" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "Hiba történt, kérjük próbáld újra." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "Hiba történt, kérjük próbáld újra." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Lezárt", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "Mégse", + "CREATE_BUTTON_TEXT": "Létrehozás", + "FORM": { + "TITLE": { + "LABEL": "Cím", + "PLACEHOLDER": "Kérlek írd ide a kampány nevét", + "ERROR": "Cím megadása kötelező" + }, + "MESSAGE": { + "LABEL": "Üzenet", + "PLACEHOLDER": "Kérlek írd ide a kampány üzenetét", + "ERROR": "Üzenet kötelező" + }, + "INBOX": { + "LABEL": "Válassz fiókot", + "PLACEHOLDER": "Válassz fiókot", + "ERROR": "Fiók kötelező" + }, + "AUDIENCE": { + "LABEL": "Közönség", + "PLACEHOLDER": "Ügyfél címke kiválasztása", + "ERROR": "Közönség megadása kötelező" + }, + "SCHEDULED_AT": { + "LABEL": "Tervezett idő", + "PLACEHOLDER": "Kérlek, válaszd ki az időtartamot", + "ERROR": "Tervezett idő megadása kötelező" + }, + "BUTTONS": { + "CREATE": "Létrehozás", + "CANCEL": "Mégse" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "Hiba történt, kérjük próbáld újra." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No WhatsApp campaigns are available", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Lezárt", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "Mégse", + "CREATE_BUTTON_TEXT": "Létrehozás", + "FORM": { + "TITLE": { + "LABEL": "Cím", + "PLACEHOLDER": "Kérlek írd ide a kampány nevét", + "ERROR": "Cím megadása kötelező" + }, + "INBOX": { + "LABEL": "Válassz fiókot", + "PLACEHOLDER": "Válassz fiókot", + "ERROR": "Fiók kötelező" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "Feldolgozás: {templateName}", + "LANGUAGE": "Nyelv", + "CATEGORY": "Kategória", + "VARIABLES_LABEL": "Változók", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "Közönség", + "PLACEHOLDER": "Ügyfél címke kiválasztása", + "ERROR": "Közönség megadása kötelező" + }, + "SCHEDULED_AT": { + "LABEL": "Tervezett idő", + "PLACEHOLDER": "Kérlek, válaszd ki az időtartamot", + "ERROR": "Tervezett idő megadása kötelező" + }, + "BUTTONS": { + "CREATE": "Létrehozás", + "CANCEL": "Mégse" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "Hiba történt, kérjük próbáld újra." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Biztos abban, hogy törli?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "Törlés", + "API": { + "SUCCESS_MESSAGE": "Kampány sikeresen törölve", + "ERROR_MESSAGE": "Hiba történt, kérjük próbáld újra." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/hu/cannedMgmt.json new file mode 100644 index 0000000..727b876 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Mentett válaszok", + "LEARN_MORE": "Learn more about canned responses", + "DESCRIPTION": "Canned Responses are pre-written reply templates that help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a canned response during a conversation. ", + "HEADER_BTN_TXT": "Sablon válasz hozzáadása", + "LOADING": "Sablon válaszok lekérése...", + "SEARCH_404": "Nincs megfelelő elem.", + "LIST": { + "404": "Nincs megfelelő mentett válasz ebben a fiókban.", + "TITLE": "Mentett válaszok kezelése", + "DESC": "A sablon válaszok előre definiáltak, amelyek segítségével gyorsan küldhet válaszokat a beszélgetésekre.", + "TABLE_HEADER": { + "SHORT_CODE": "Rövid kód", + "CONTENT": "Tartalom", + "ACTIONS": "Műveletek" + } + }, + "ADD": { + "TITLE": "Sablon válasz hozzáadása", + "DESC": "A sablon válaszok előre definiáltak, amelyek segítségével gyorsan küldhet válaszokat a beszélgetésekre.", + "CANCEL_BUTTON_TEXT": "Mégse", + "FORM": { + "SHORT_CODE": { + "LABEL": "Rövid kód", + "PLACEHOLDER": "Kérjük, adjon meg egy rövid kódot.", + "ERROR": "Rövid kód szükséges." + }, + "CONTENT": { + "LABEL": "Üzenet", + "PLACEHOLDER": "Kérjük, írja meg az üzenetet, amelyet sablonként szeretne elmenteni, hogy később felhasználhassa.", + "ERROR": "Üzenetre van szükség." + }, + "SUBMIT": "Elküldés" + }, + "API": { + "SUCCESS_MESSAGE": "Sikeresen hozzáadva a sablon válasz.", + "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" + } + }, + "EDIT": { + "TITLE": "Sablon válasz szerkesztése", + "CANCEL_BUTTON_TEXT": "Mégse", + "FORM": { + "SHORT_CODE": { + "LABEL": "Rövid kód", + "PLACEHOLDER": "Kérjük, adjon meg egy rövidkódot.", + "ERROR": "Rövid kód szükséges." + }, + "CONTENT": { + "LABEL": "Üzenet", + "PLACEHOLDER": "Kérjük, írja meg az üzenetet, amelyet sablonként szeretne elmenteni, hogy később felhasználhassa.", + "ERROR": "Üzenet kötelező." + }, + "SUBMIT": "Elküldés" + }, + "BUTTON_TEXT": "Szerkesztés", + "API": { + "SUCCESS_MESSAGE": "A sablon válasz sikeresen frissült.", + "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" + } + }, + "DELETE": { + "BUTTON_TEXT": "Törlés", + "API": { + "SUCCESS_MESSAGE": "A sablon válasz sikeresen törölve.", + "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" + }, + "CONFIRM": { + "TITLE": "Törlés megerősítése", + "MESSAGE": "Biztos abban, hogy törli ", + "YES": "Igen, törlés ", + "NO": "Nem, mégse " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/chatlist.json b/app/javascript/dashboard/i18n/locale/hu/chatlist.json new file mode 100644 index 0000000..07be33a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Beszélgetések betöltése", + "LOAD_MORE_CONVERSATIONS": "További beszélgetések betöltése", + "EOF": "Minden beszélgetés betöltve 🎉", + "LIST": { + "404": "Nincs aktív üzenetváltás ebben a csoportban." + }, + "FAILED_TO_SEND": "Failed to send", + "TAB_HEADING": "Beszélgetések", + "MENTION_HEADING": "Megemlítések", + "UNATTENDED_HEADING": "Figyelmen kívül hagyott", + "SEARCH": { + "INPUT": "Keresés: emberek, beszélgetése, mentett válaszok .." + }, + "FILTER_ALL": "Mind", + "ASSIGNEE_TYPE_TABS": { + "me": "Enyém", + "unassigned": "Gazdátlan", + "all": "Mind" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Megnyitás" + }, + "resolved": { + "TEXT": "Megoldva" + }, + "pending": { + "TEXT": "Függőben lévő" + }, + "snoozed": { + "TEXT": "Elnémított" + }, + "all": { + "TEXT": "Mind" + } + }, + "VIEW_FILTER": "Megtekintés", + "SORT_TOOLTIP_LABEL": "Beszélgetések rendezése", + "CHAT_SORT": { + "STATUS": "Státusz", + "ORDER_BY": "Rendezés" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Létrehozva", + "OLDEST": "Létrehozva:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Utolsó aktivitás:", + "ACTIVE": "Utolsó aktivitás" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Utolsó tevékenység: Legrégebbi először" + }, + "last_activity_at_desc": { + "TEXT": "Utolsó tevékenység: Legújabb először" + }, + "created_at_desc": { + "TEXT": "Készült: Legújabb először" + }, + "created_at_asc": { + "TEXT": "Készült: Legrégebbi először" + }, + "priority_desc": { + "TEXT": "Prioritás: Először a legfontosabb" + }, + "priority_asc": { + "TEXT": "Prioritás: Legkevésbé fontos először" + }, + "waiting_since_asc": { + "TEXT": "Függőben lévő válasz: Leghosszabb először" + }, + "waiting_since_desc": { + "TEXT": "Függőben lévő válasz: Legrövidebb először" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Képüzenet" + }, + "audio": { + "CONTENT": "Hangüzenet" + }, + "video": { + "CONTENT": "Videoüzenet" + }, + "file": { + "CONTENT": "Csatolt file" + }, + "location": { + "CONTENT": "Hely" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "megosztott URL-t tartalmaz" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Beszélgetés rendezése", + "DROPDOWN_TITLE": "Rendezés", + "ITEMS": { + "LATEST": { + "NAME": "Utolsó aktivitás", + "LABEL": "Utolsó aktivitás" + }, + "CREATED_AT": { + "NAME": "Létrehozva", + "LABEL": "Létrehozva" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Utolsó felhasználói üzenet", + "LABEL": "Utolsó üzenet" + } + } + }, + "RECEIVED_VIA_EMAIL": "E-mailen keresztül érkezett", + "VIEW_TWEET_IN_TWITTER": "Üzenet megtekintése Twitteren", + "REPLY_TO_TWEET": "Válasz", + "LINK_TO_STORY": "Instagram story megnyitása", + "SENT": "Sikeresen elküldve", + "READ": "Olvasott", + "DELIVERED": "Elküldve", + "NO_MESSAGES": "Nincs üzenet", + "NO_CONTENT": "Nincs elérhető tartalom", + "HIDE_QUOTED_TEXT": "Idézett szöveg eltűntetése", + "SHOW_QUOTED_TEXT": "Idézett szöveg megjelenítése", + "MESSAGE_READ": "Olvasott", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/companies.json b/app/javascript/dashboard/i18n/locale/hu/companies.json new file mode 100644 index 0000000..c26dd0d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Rendezés", + "OPTIONS": { + "NAME": "Név", + "DOMAIN": "Domain", + "CREATED_AT": "Létrehozva", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/components.json b/app/javascript/dashboard/i18n/locale/hu/components.json new file mode 100644 index 0000000..22a01ae --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} of {totalPages} pages" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "Nincs találat.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} more" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "Nincs találat.", + "SEARCHING": "Keresés..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Mégse", + "CONFIRM": "Megerősítés" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Search country", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Kérlek, válassz egy hívószámot a listából" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Author is not available" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Tudj meg többet", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/contact.json b/app/javascript/dashboard/i18n/locale/hu/contact.json new file mode 100644 index 0000000..1c4437b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Nem elérhető", + "EMAIL_ADDRESS": "Email cím", + "PHONE_NUMBER": "Telefonszám", + "IDENTIFIER": "Azonosító", + "COPY_SUCCESSFUL": "Vágólapra másolva", + "COMPANY": "Cég", + "LOCATION": "Hely", + "BROWSER_LANGUAGE": "Böngésző nyelve", + "CONVERSATION_TITLE": "Beszélgetés részletei", + "VIEW_PROFILE": "Profil megtekintése", + "BROWSER": "Böngésző", + "OS": "Operációs rendszer", + "INITIATED_FROM": "Kezdeményezve", + "INITIATED_AT": "Kezdeményezve", + "IP_ADDRESS": "IP cím", + "CREATED_AT_LABEL": "Létrehozva", + "NEW_MESSAGE": "Új üzenet", + "CALL": "Call", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "Nincs megelőző beszélgetés ezzel a kontakttal.", + "TITLE": "Korábbi beszélgetések" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Kapcsolattartó címkéi", + "ERROR": "Nem lehetett frissíteni a címkéket" + }, + "CONVERSATION": { + "TITLE": "Beszélgetés cimkék", + "ADD_BUTTON": "Címkék hozzáadása" + }, + "LABEL_SELECT": { + "TITLE": "Címkék hozzáadása", + "PLACEHOLDER": "Címkék keresése", + "NO_RESULT": "Nem találtunk címkét", + "CREATE_LABEL": "Új cimke létrehozása" + } + }, + "MERGE_CONTACT": "Kapcsolattartók összevonása", + "CONTACT_ACTIONS": "Kapcsolattartói tevékenységek", + "MUTE_CONTACT": "Block Contact", + "UNMUTE_CONTACT": "Unblock Contact", + "MUTED_SUCCESS": "This contact is blocked successfully. You will not be notified of any future conversations.", + "UNMUTED_SUCCESS": "This contact is unblocked successfully.", + "SEND_TRANSCRIPT": "Jegyzetek elküldése", + "EDIT_LABEL": "Szerkesztés", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Egyedi atribútumok", + "CONTACT_LABELS": "Kontakt címkéi", + "PREVIOUS_CONVERSATIONS": "Korábbi beszélgetések", + "NO_RECORDS_FOUND": "Nem található tulajdonság" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Jegyzetek szerkesztése", + "TITLE": "Kontakt szerkesztése", + "DESC": "Kontakt részletek szerkesztése" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Kontakt Törlése", + "TITLE": "Kontakt törlése", + "DESC": "Kontakt részletek törlése", + "CONFIRM": { + "TITLE": "Törlés megerősítése", + "MESSAGE": "Biztos abban, hogy törli ", + "YES": "Igen, Törlés", + "NO": "Nem, Mégse" + }, + "API": { + "SUCCESS_MESSAGE": "Kontakt sikeresen törölve", + "ERROR_MESSAGE": "A kontakt törlése nem lehetséges. Kérjük próbáld később." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Elküldés", + "CANCEL": "Mégse", + "AVATAR": { + "LABEL": "Kontakt avatarja" + }, + "NAME": { + "PLACEHOLDER": "A kontakt teljes nevének megadása", + "LABEL": "Teljes név" + }, + "BIO": { + "PLACEHOLDER": "A kontakt önéletrajzának megadása", + "LABEL": "Önéletrajz" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "A kontakt e-mailjének megadása", + "LABEL": "Email cím", + "DUPLICATE": "Az e-mailcím már egy másik kontakthoz tartozik.", + "ERROR": "Kérjük helyes e-mailcímet adj meg." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "A kontakt telefonszámának megadása", + "LABEL": "Telefonszám", + "HELP": "A telefonszámnak E.164 formátumúnak kell lennie, pl: +[+][országkód][körzetszám][helyi telefonszám]", + "ERROR": "A telefonszámnak üresnek vagy E.164 formátumúnak kell lennie", + "DIAL_CODE_ERROR": "Kérlek, válassz egy hívószámot a listából", + "DUPLICATE": "Ez a telefonszám már egy másik kontakthoz tartozik." + }, + "LOCATION": { + "PLACEHOLDER": "A kontakt helyének megadása", + "LABEL": "Hely" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Cégnév megadása", + "LABEL": "Cégnév" + }, + "COUNTRY": { + "PLACEHOLDER": "Add meg az ország nevét", + "LABEL": "Ország neve", + "SELECT_PLACEHOLDER": "Kiválasztás", + "REMOVE": "Eltávolítás", + "SELECT_COUNTRY": "Ország választása" + }, + "CITY": { + "PLACEHOLDER": "Add meg a város nevét", + "LABEL": "Város neve" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Facebook felhasználó megadása", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Twitter felhasználó megadása", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Linkedin usernév hozzáadása", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Github felhasználó megadása", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Kontakt avatar sikeresen törölve", + "ERROR_MESSAGE": "A kontakt avatar törlése nem lehetséges. Kérjük próbáld később." + } + }, + "SUCCESS_MESSAGE": "Kontakt mentés sikeres", + "ERROR_MESSAGE": "Hiba történt, kérjük próbáld újra" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Beszélgetés megkezdése", + "TITLE": "Új beszélgetés", + "DESC": "Kezdjen új beszélgetést egy új üzenet küldésével.", + "NO_INBOX": "Nem találtam postafiókot, hogy új beszélgetést kezdeményezzek ezzel a kapcsolattal.", + "FORM": { + "TO": { + "LABEL": "Ide" + }, + "INBOX": { + "LABEL": "Fiók", + "PLACEHOLDER": "Beérkező levelek választása", + "ERROR": "Válassz egy fiókot" + }, + "SUBJECT": { + "LABEL": "Tárgy", + "PLACEHOLDER": "Tárgy", + "ERROR": "A tárgy nem lehet üres" + }, + "MESSAGE": { + "LABEL": "Üzenet", + "PLACEHOLDER": "Írd ide üzeneted", + "ERROR": "Az üzenet nem lehet üres" + }, + "ATTACHMENTS": { + "SELECT": "Fájlok kiválasztása", + "HELP_TEXT": "Húzza ide a fájlokat, vagy válassza ki a csatolandó fájlokat" + }, + "SUBMIT": "Üzenet elküldése", + "CANCEL": "Mégse", + "SUCCESS_MESSAGE": "Üzenet elküldve!", + "GO_TO_CONVERSATION": "Megtekintés", + "ERROR_MESSAGE": "Nem sikerült az elküldés! Kérjük próbáld később" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Social media profilok" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Speciális attribútum hozzáadása", + "COPY_SUCCESSFUL": "Vágólapra másolva", + "SHOW_MORE": "Show all attributes", + "SHOW_LESS": "Show less attributes", + "ACTIONS": { + "COPY": "Attribútum másolása", + "DELETE": "Attribútum törlése", + "EDIT": "Attribútum szerkesztése" + }, + "ADD": { + "TITLE": "Saját attribútum létrehozása", + "DESC": "Egyéni információ hozzáadása ehhez a kontakthoz." + }, + "FORM": { + "CREATE": "Attribútum hozzáadása", + "CANCEL": "Mégse", + "NAME": { + "LABEL": "Egyedi attribútum név", + "PLACEHOLDER": "Pl.: shopify id", + "ERROR": "Érvénytelen egyéni tulajdonság név" + }, + "VALUE": { + "LABEL": "Attribútum érték", + "PLACEHOLDER": "Pl.: 11901 " + }, + "ADD": { + "TITLE": "Új tulajdonság létrehozása", + "SUCCESS": "Tulajdonság sikeresen hozzáaadva", + "ERROR": "Nem lehet hozzáadni a tulajdonságot. Kérlek, próbáld újra később" + }, + "UPDATE": { + "SUCCESS": "Tulajdonság sikeresen frissítve", + "ERROR": "Nem lehet frissíteni a tulajdonságot. Kérlek, próbáld újra később" + }, + "DELETE": { + "SUCCESS": "Tulajdonság sikeresen törölve", + "ERROR": "Nem lehet törölni a tulajdonságot. Kérlek, próbáld újra később" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Attribútum hozzáadása", + "PLACEHOLDER": "Tulajdonságok keresése", + "NO_RESULT": "Nem található tulajdonság" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Válassz egyet", + "SEARCH_INPUT_PLACEHOLDER": "Keress", + "NO_RESULT": "Nincs találat" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Kötelező megadni", + "INVALID_URL": "Hibás URL", + "INVALID_INPUT": "Invalid Input" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Kontaktok egyesítése", + "DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact’ s attributes will take precedence.", + "PRIMARY": { + "TITLE": "Elsődleges kontakt", + "HELP_LABEL": "Törlendő" + }, + "PARENT": { + "TITLE": "Egyesítendő kontakt", + "PLACEHOLDER": "Kontakt keresése", + "HELP_LABEL": "Megtartani" + }, + "SUMMARY": { + "TITLE": "Összegzés", + "DELETE_WARNING": "{primaryContactName} kontaktja törlésre kerül.", + "ATTRIBUTE_WARNING": "{primaryContactName} kontakt adatai át lesznek másolva hozzá: {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": " Kontaktok egyesítése", + "CANCEL": "Mégse", + "CHILD_CONTACT": { + "ERROR": "Válaszd ki a gyerek kontatkot az összevonáshoz" + }, + "SUCCESS_MESSAGE": "Kontakt összevonása sikeres", + "ERROR_MESSAGE": "Nem sikerült a kontaktot összevonni, próbáld újra!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Kontaktok", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "Active contacts", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "Üzenet", + "SEND_MESSAGE": "Üzenet elküldése", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "Kontaktok" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Add contact", + "EXPORT_CONTACT": "Export contacts", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Save contact", + "EMAIL_ADDRESS_DUPLICATE": "Az e-mailcím már egy másik kontakthoz tartozik.", + "PHONE_NUMBER_DUPLICATE": "Ez a telefonszám már egy másik kontakthoz tartozik.", + "SUCCESS_MESSAGE": "Kontakt mentés sikeres", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "This contact is unblocked successfully", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Import contacts", + "DESCRIPTION": "Kontaktok importálása CSV fájlból.", + "DOWNLOAD_LABEL": "Minta CSV fájl letöltése.", + "LABEL": "CSV fájl:", + "CHOOSE_FILE": "Choose file", + "CHANGE": "Megváltoztatás", + "CANCEL": "Mégse", + "IMPORT": "Importálás", + "SUCCESS_MESSAGE": "Értesítjük emailben, amint a befogadás megtörtént.", + "ERROR_MESSAGE": "Hiba történt, kérjük próbáld újra" + }, + "EXPORT_CONTACT": { + "TITLE": "Export contacts", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Export", + "SUCCESS_MESSAGE": "Export is in progress, You will be notified via email when export file is ready to dowanlod.", + "ERROR_MESSAGE": "Hiba történt, kérjük próbáld újra" + }, + "SORT_BY": { + "LABEL": "Rendezés", + "OPTIONS": { + "NAME": "Név", + "EMAIL": "E-mail", + "PHONE_NUMBER": "Telefonszám", + "COMPANY": "Cég", + "COUNTRY": "Ország", + "CITY": "Város", + "LAST_ACTIVITY": "Utolsó aktivitás", + "CREATED_AT": "Létrehozva" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "El akarod menteni ezt a szűrőt?", + "CONFIRM": "Szűrő mentése", + "LABEL": "Név", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "Törlés megerősítése", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "Igen, Törlés", + "CANCEL": "No, Cancel", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "Név", + "EMAIL": "E-mail", + "PHONE_NUMBER": "Telefonszám", + "IDENTIFIER": "Azonosító", + "COUNTRY": "Ország", + "CITY": "Város", + "CREATED_AT": "Létrehozva", + "LAST_ACTIVITY": "Utolsó aktivitás", + "REFERER_LINK": "Hivatkozás link", + "BLOCKED": "Blocked", + "BLOCKED_TRUE": "Igaz", + "BLOCKED_FALSE": "Hamis", + "BUTTONS": { + "CLEAR_FILTERS": "Szűrők törlése", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "Szűrők alkalmazása", + "ADD_FILTER": "Szűrő hozzáadása" + }, + "TITLE": "Kontaktok szűrése", + "EDIT_SEGMENT": "Szegmens szerkesztése", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Szűrők törlése" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "Részletek megtekintése", + "EDIT_DETAILS_FORM": { + "TITLE": "Kontakt részletek szerkesztése", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "Az e-mailcím már egy másik kontakthoz tartozik." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "Ez a telefonszám már egy másik kontakthoz tartozik." + }, + "CITY": { + "PLACEHOLDER": "Add meg a város nevét" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Cégnév megadása" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "This action is permanent and irreversible.", + "BUTTON": "Delete now" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "Kontakt törlése", + "DELETE_DIALOG": { + "TITLE": "Törlés megerősítése", + "DESCRIPTION": "Are you sure you want to delete this contact?", + "CONFIRM": "Igen, Törlés", + "API": { + "SUCCESS_MESSAGE": "Kontakt sikeresen törölve", + "ERROR_MESSAGE": "A kontakt törlése nem lehetséges. Kérjük próbáld később." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatar sikeresen törölve", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributes", + "HISTORY": "History", + "NOTES": "Megjegyzések", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "Nincs megelőző beszélgetés ezzel a kontakttal" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "Igen", + "NO": "Nem", + "TRIGGER": { + "SELECT": "Válassz egyet", + "INPUT": "Enter value" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "Kötelező megadni", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "Hibás URL", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "Nem található tulajdonság", + "API": { + "SUCCESS_MESSAGE": "Tulajdonság sikeresen frissítve", + "DELETE_SUCCESS_MESSAGE": "Tulajdonság sikeresen törölve", + "UPDATE_ERROR": "Nem lehet frissíteni a tulajdonságot. Kérlek, próbáld újra később", + "DELETE_ERROR": "Nem lehet törölni a tulajdonságot. Kérlek, próbáld újra később" + } + }, + "MERGE": { + "TITLE": "Kapcsolattartók összevonása", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Elsődleges kontakt", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "Törlendő", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Kontakt keresése", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Kontakt összevonása sikeres", + "ERROR_MESSAGE": "Nem sikerült a kontaktot összevonni, próbáld újra!", + "IS_SEARCHING": "Keresés...", + "BUTTONS": { + "CANCEL": "Mégse", + "CONFIRM": "Kapcsolattartók összevonása" + } + }, + "NOTES": { + "PLACEHOLDER": "Megjegyzés hozzáadása", + "WROTE": "írta", + "YOU": "Ön", + "SAVE": "Save note", + "ADD_NOTE": "Add contact note", + "EXPAND": "Kiegészítés", + "COLLAPSE": "Collapse", + "NO_NOTES": "No notes, you can add notes from the contact details page.", + "EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "No contacts found in this account", + "SUBTITLE": "Start adding new contacts by clicking on the button below", + "BUTTON_LABEL": "Add contact", + "SEARCH_EMPTY_STATE_TITLE": "Nincs a keresésnek megfelelő kontakt 🔍", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Cimke hozzáadása", + "ASSIGN_LABELS_SUCCESS": "Címkék hozzárendelése sikeres.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "Törlés", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Kontakt törlése" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "Megtekintés", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "Ide:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Tárgy :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "Másolat:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "Titkos másolat:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "Titkos másolat" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Írd ide üzeneted..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Változók", + "BACK": "Visszaugrás", + "SEND_MESSAGE": "Üzenet elküldése" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Visszaugrás", + "SEND_MESSAGE": "Üzenet elküldése" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/contactFilters.json b/app/javascript/dashboard/i18n/locale/hu/contactFilters.json new file mode 100644 index 0000000..d3f6309 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Kontaktok szűrése", + "SUBTITLE": "Adj meg szűrőket, majd kattints \"Mentés\" gombra a kontaktok szűréséhez.", + "EDIT_CUSTOM_SEGMENT": "Szegmens szerkesztése", + "CUSTOM_VIEWS_SUBTITLE": "Adj hozzá vagy törölj szűrőket a szegmens frissítéséhez.", + "ADD_NEW_FILTER": "Szűrő hozzáadása", + "CLEAR_ALL_FILTERS": "Szűrők eltávolítása", + "FILTER_DELETE_ERROR": "Kötelező legalább egy szűrőt megadni a mentéshez", + "SUBMIT_BUTTON_LABEL": "Elküldés", + "UPDATE_BUTTON_LABEL": "Szegmens frissítése", + "CANCEL_BUTTON_LABEL": "Mégse", + "CLEAR_BUTTON_LABEL": "Szűrők törlése", + "EMPTY_VALUE_ERROR": "Kötelező megadni", + "SEGMENT_LABEL": "Szegmens neve", + "SEGMENT_QUERY_LABEL": "Szegmens lekérdezése", + "TOOLTIP_LABEL": "Kontaktok szűrése", + "QUERY_DROPDOWN_LABELS": { + "AND": "ÉS", + "OR": "VAGY" + }, + "OPERATOR_LABELS": { + "equal_to": "Egyenlő", + "not_equal_to": "Nem egyenlő", + "contains": "Tartalmaz", + "does_not_contain": "Nem tartalmaz", + "is_present": "Jelen van", + "is_not_present": "Nincs jelen", + "is_greater_than": "Nagyobb", + "is_lesser_than": "Kisebb mint", + "days_before": "x nappal előtte" + }, + "ERRORS": { + "VALUE_REQUIRED": "Kötelező megadni" + }, + "ATTRIBUTES": { + "NAME": "Név", + "EMAIL": "E-mail", + "PHONE_NUMBER": "Telefonszám", + "IDENTIFIER": "Azonosító", + "CITY": "Város", + "COUNTRY": "Ország", + "CUSTOM_ATTRIBUTE_LIST": "Lista", + "CUSTOM_ATTRIBUTE_TEXT": "Szöveg", + "CUSTOM_ATTRIBUTE_NUMBER": "Szám", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Jelölőnégyzet", + "CREATED_AT": "Létrehozva", + "LAST_ACTIVITY": "Utolsó aktivitás", + "REFERER_LINK": "Hivatkozás link", + "BLOCKED": "Blocked", + "LABELS": "Cimkék" + }, + "GROUPS": { + "STANDARD_FILTERS": "Alap szűrők", + "ADDITIONAL_FILTERS": "Extra szűrők", + "CUSTOM_ATTRIBUTES": "Egyedi atribútumok" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/contentTemplates.json b/app/javascript/dashboard/i18n/locale/hu/contentTemplates.json new file mode 100644 index 0000000..dee0184 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Sablon keresése", + "NO_TEMPLATES_FOUND": "Nem található sablon erre:", + "NO_CONTENT": "No content", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Kategória", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Nyelv", + "TEMPLATE_BODY": "Sablon törzse", + "CATEGORY": "Kategória" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Szöveg" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Változók", + "LANGUAGE": "Nyelv", + "CATEGORY": "Kategória", + "VARIABLE_PLACEHOLDER": "Add meg a {variable} értékét", + "GO_BACK_LABEL": "Vissza", + "SEND_MESSAGE_LABEL": "Üzenet küldése", + "FORM_ERROR_MESSAGE": "Kérlek add meg az összes változó értékét küldés előtt", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Vissza", + "SEND_MESSAGE_BUTTON": "Üzenet küldése" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/conversation.json b/app/javascript/dashboard/i18n/locale/hu/conversation.json new file mode 100644 index 0000000..715f04a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Kérjük válassz egy beszélgetést a bal sávból", + "CSAT_REPLY_MESSAGE": "Kérlek értékeld a beszélgetést", + "404": "Elnézést, a beszélgetés nem található. Kérlek, próbáld újra", + "SWITCH_VIEW_LAYOUT": "Elrendezés megváltoztatása", + "DASHBOARD_APP_TAB_MESSAGES": "Üzenetek", + "UNVERIFIED_SESSION": "A felhasználó személyazonossága nincs hitelesítve", + "NO_MESSAGE_1": "Jajj ne! Úgy tűnik, hogy nincs több ügyfélbeszélgetés az inboxodban.", + "NO_MESSAGE_2": "egy üzenet küldéséhez az oldaladra!", + "NO_INBOX_1": "Hola! Úgy tűnik, hogy még nem adtál hozzá fiókokat.", + "NO_INBOX_2": " Első lépések", + "NO_INBOX_AGENT": "O-Ó! Úgy tűnik, hogy egyetlen fióknak sem vagy tagja. Kérjük lépj kapcsolatba az adminisztrátoroddal", + "SEARCH_MESSAGES": "Üzenetek keresése a beszélgetésekben", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "menü megnyitása", + "KEYBOARD_SHORTCUTS": "billentyűparancs megtekintése" + }, + "SEARCH": { + "TITLE": "Üzenetekben keresés", + "RESULT_TITLE": "Keresés eredménye", + "LOADING_MESSAGE": "Adatelemzés...", + "PLACEHOLDER": "Írj be szöveget hogy keress az üzenetek közt", + "NO_MATCHING_RESULTS": "Nincs találat." + }, + "UNREAD_MESSAGES": "Olvasatlan üzenetek", + "UNREAD_MESSAGE": "Olvasatlan üzenet", + "CLICK_HERE": "Kattints ide", + "LOADING_INBOXES": "Postaládák betöltése", + "LOADING_CONVERSATIONS": "Beszélgetések betöltése", + "CANNOT_REPLY": "Nem tudunk válaszolni, mivel", + "24_HOURS_WINDOW": "24 órás üzeneti ablak megkötés", + "48_HOURS_WINDOW": "48 órás üzeneti ablak megkötés", + "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours", + "NOT_ASSIGNED_TO_YOU": "Ez a beszélgetés nincs hozzádrendelve. Szeretnéd magadhoz rendelni?", + "ASSIGN_TO_ME": "Hozzárendelés magamhoz", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "Erre a beszélgetésre csak konzerv válasszal válaszolhatsz, mert", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 órás üzeneti ablak megkötés", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "Neki válaszolsz:", + "REMOVE_SELECTION": "Kijelölés törlése", + "DOWNLOAD": "Letöltés", + "UNKNOWN_FILE_TYPE": "Ismeretlen fájl", + "SAVE_CONTACT": "Save Contact", + "NO_CONTENT": "No content to display", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} has shared a contact", + "LOCATION": "{sender} has shared a location", + "FILE": "{sender} has shared a file", + "MEETING": "{sender} megbeszélést kezdett" + }, + "UPLOADING_ATTACHMENTS": "Csatolt fileok feltöltése...", + "REPLIED_TO_STORY": "Válaszolt a storydra", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "Ez az üzenet nem támogatott. Ezt az üzenetet a Facebook Messenger alkalmazásban tekintheti meg.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "Ez az üzenet nem támogatott. Ezt az üzenetet az Instagram alkalmazásban tekintheti meg.", + "SUCCESS_DELETE_MESSAGE": "Üzenet törölve", + "FAIL_DELETE_MESSSAGE": "Nem tudtad törölni az üzenetet! Próbáld újra", + "NO_RESPONSE": "Nincs válasz", + "RESPONSE": "Response", + "RATING_TITLE": "Értékelés", + "FEEDBACK_TITLE": "Visszajelzés", + "REPLY_MESSAGE_NOT_FOUND": "Üzenet nem elérhető", + "CARD": { + "SHOW_LABELS": "Cimkék mutatása", + "HIDE_LABELS": "Cimkék elrejtése" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "Megoldva", + "REOPEN_ACTION": "Újranyitás", + "OPEN_ACTION": "Megnyitás", + "MORE_ACTIONS": "More actions", + "OPEN": "Tovább", + "CLOSE": "Bezárás", + "DETAILS": "részletek", + "SNOOZED_UNTIL": "Halasztás eddig", + "SNOOZED_UNTIL_TOMORROW": "Halasztás holnapig", + "SNOOZED_UNTIL_NEXT_WEEK": "Halasztás jövő hétig", + "SNOOZED_UNTIL_NEXT_REPLY": "Halasztás következő válaszig", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "missed", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Függőben levőként megjelölés", + "SNOOZE_UNTIL": "Halasztás", + "SNOOZE": { + "TITLE": "Halasztás eddig", + "NEXT_REPLY": "Következő válasz", + "TOMORROW": "Holnap", + "NEXT_WEEK": "Jövő héten" + } + }, + "MENTION": { + "AGENTS": "Ügynökök", + "TEAMS": "Csapatok" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Halasztás eddig", + "APPLY": "Halasztás", + "CANCEL": "Mégse" + }, + "PRIORITY": { + "TITLE": "Prioritás", + "OPTIONS": { + "NONE": "Nincs", + "URGENT": "Sürgős", + "HIGH": "Magas", + "MEDIUM": "Közepes", + "LOW": "Alacsony" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "Nincs", + "INPUT_PLACEHOLDER": "Prioritás megadása", + "NO_RESULTS": "Nincs találat", + "SUCCESSFUL": "Changed priority of conversation id {conversationId} to {priority}", + "FAILED": "Nem sikerült megváltoztatni a prioritást. Kérlek, próbáld újra." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Delete conversation #{conversationId}", + "DESCRIPTION": "Are you sure you want to delete this conversation?", + "CONFIRM": "Törlés" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Függőben levőként megjelölés", + "RESOLVED": "Megjelölés megoldottként", + "MARK_AS_UNREAD": "Megjelölés olvasatlanként", + "MARK_AS_READ": "Mark as read", + "REOPEN": "Beszélgetés újranyitása", + "SNOOZE": { + "TITLE": "Halasztás", + "NEXT_REPLY": "Következő válaszig", + "TOMORROW": "Holnapig", + "NEXT_WEEK": "Jövő hétig" + }, + "ASSIGN_AGENT": "Ügynök hozzárendelése", + "ASSIGN_LABEL": "Cimke hozzáadása", + "AGENTS_LOADING": "Ügynökök betöltése...", + "ASSIGN_TEAM": "Csapat hozzárendelése", + "DELETE": "Delete conversation", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Conversation id {conversationId} assigned to \"{agentName}\"", + "FAILED": "Nem sikerült hozzárendelni ügynököt. Kérlek, próbáld újra." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Nem sikerült hozzárendelni címkét. Kérlek, próbáld újra." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Assigned team \"{team}\" to conversation id {conversationId}", + "FAILED": "Nem sikerült hozzárendelni csoporthoz. Kérlek, próbáld újra." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Üzenet aláírás", + "ENABLE_SIGN_TOOLTIP": "Aláírás bekapcsolása", + "DISABLE_SIGN_TOOLTIP": "Aláírás kikapcsolása", + "MSG_INPUT": "Shift + enter új sorért. Kezdj a '/'-el mentett válasz kiválasztásához.", + "PRIVATE_MSG_INPUT": "Shift + enter új sorért. Ezt csak ügynökök láthatják", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Üzenet aláírása nem változott, kérlek, változtasd meg a profilod beállításaiban. ", + "CLICK_HERE": "Frissítéshez kattints ide", + "WHATSAPP_TEMPLATES": "Whatsapp sablonok" + }, + "REPLYBOX": { + "REPLY": "Válasz", + "PRIVATE_NOTE": "Privát üzenet", + "SEND": "Elküldés", + "CREATE": "Megjegyzés hozzáadása", + "INSERT_READ_MORE": "Tudj meg többet", + "DISMISS_REPLY": "Válasz elutasítása", + "REPLYING_TO": "Válaszolva a következőre:", + "TIP_EMOJI_ICON": "Emoji választó mutatása", + "TIP_ATTACH_ICON": "Fileok csatolása", + "TIP_AUDIORECORDER_ICON": "Hangfelvétel", + "TIP_AUDIORECORDER_PERMISSION": "Hozzáférés megadása a hangfelvételhez", + "TIP_AUDIORECORDER_ERROR": "Nem sikerült megnyitni a hangfelvételt", + "DRAG_DROP": "Helyezd ide a csatolmányt", + "START_AUDIO_RECORDING": "Hangfelvétel indítása", + "STOP_AUDIO_RECORDING": "Hangfelvétel leállítása", + "": "", + "EMAIL_HEAD": { + "TO": "Címzett", + "ADD_BCC": "Titkos másolat hozzáadása", + "CC": { + "LABEL": "Másolat", + "PLACEHOLDER": "E-mail vesszőkkel elválasztva", + "ERROR": "Kérlek, adj meg érvényes e-mail címet" + }, + "BCC": { + "LABEL": "Titkos másolat", + "PLACEHOLDER": "E-mail vesszőkkel elválasztva", + "ERROR": "Kérlek, adj meg érvényes e-mail címet" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Definiálatlan változók", + "MESSAGE": "Definiálatlan változók vannak az üzenetedben. Így is el szeretnéd küldeni az üzenetet?", + "CONFIRM": { + "YES": "Elküldés", + "CANCEL": "Mégse" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "Privát megjegyzés: csak Neked és a csapat tagjainak látható", + "CHANGE_STATUS": "A beszélgetés státusza megváltozott", + "CHANGE_STATUS_FAILED": "A beszélgetés státuszának megváltoztatása sikertelen", + "CHANGE_AGENT": "Hozzárendelt ügynök megváltoztatva", + "CHANGE_AGENT_FAILED": "Felelős megváltoztatása sikertelen", + "ASSIGN_LABEL_SUCCESFUL": "Címke sikeresen hozzárendelve", + "ASSIGN_LABEL_FAILED": "Címke hozzárendelése sikertelen", + "CHANGE_TEAM": "A beszélgetés csapata megváltozott", + "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", + "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", + "FILE_SIZE_LIMIT": "A file mérete meghaladja a {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} limitet", + "MESSAGE_ERROR": "Nem tudsz üzenetet küldeni, kérlek, próbáld újra", + "SENT_BY": "Küldő:", + "BOT": "Bot", + "SEND_FAILED": "Nem sikerült elküldeni az üzenetet! Próbáld újra.", + "TRY_AGAIN": "újra", + "ASSIGNMENT": { + "SELECT_AGENT": "Ügynök kiválasztása", + "REMOVE": "Eltávolítás", + "ASSIGN": "Hozzárendelés" + }, + "CONTEXT_MENU": { + "COPY": "Másolás", + "REPLY_TO": "Válasz az üzenetre", + "DELETE": "Törlés", + "CREATE_A_CANNED_RESPONSE": "Mentett válasz hozzáadása", + "TRANSLATE": "Fordítás", + "COPY_PERMALINK": "Link másolása az üzenetbe", + "LINK_COPIED": "Üzenet URL címe másolva lett a vágólapra", + "DELETE_CONFIRMATION": { + "TITLE": "Biztosan törölni szeretnéd ezt az üzenetet?", + "MESSAGE": "Nem tudod visszavonni ezt a műveletet", + "DELETE": "Törlés", + "CANCEL": "Mégse" + } + }, + "SIDEBAR": { + "CONTACT": "Kontakt", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Beszélgetés kivonat elküldése", + "DESC": "A beszélgetés másolatának elküldése egy megadott e-mailcímre", + "SUBMIT": "Elküldés", + "CANCEL": "Mégse", + "SEND_EMAIL_SUCCESS": "A beszélgetés jegyzet sikeresen elküldve", + "SEND_EMAIL_ERROR": "Hiba történt, kérjük próbáld újra", + "FORM": { + "SEND_TO_CONTACT": "A beszélgetés jegyzet elküldése az ügyfélnek", + "SEND_TO_AGENT": "A beszélgetés jegyzet elküldése a hozzárendelt ügynöknek", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Küldj jegyzetet egy másik e-mailcímre", + "EMAIL": { + "PLACEHOLDER": "E-mailcím megadása", + "ERROR": "Kérjük helyes e-mailcímet adj meg" + } + } + }, + "ONBOARDING": { + "TITLE": "Hello 👋, köszöntünk a {installationName}!", + "DESCRIPTION": "Köszönjük, hogy feliratkoztál. Segíteni akarunk, hogy a legtöbbet hozd ki a {installationName}. Itt találsz egy pár dolgot, amit a {installationName} lehetővé tesz.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "Olvasd el legfrissebbeket", + "ALL_CONVERSATION": { + "TITLE": "Minden beszélgetésed egy helyen", + "DESCRIPTION": "Kövesd az összes ügyfélbeszélgetésedet egy felületről. Szűrheted a beszélgetéseket csatorna, cimke vagy státusz alapján.", + "NEW_LINK": "Kattints ide postaláda létrehozásához" + }, + "TEAM_MEMBERS": { + "TITLE": "Hívd meg csapattagjaidat", + "DESCRIPTION": "Mivel éppen ügyféllel készülsz beszélni, hívd meg a csapattagjaidat, hogy segíthessenek neked. Az e-mailcímük ügynöklistába való megadásával tudod meghívni őket.", + "NEW_LINK": "Kattints ide csapattag meghívásához" + }, + "LABELS": { + "TITLE": "Rendezd a beszélgetéseket cimkékkel", + "DESCRIPTION": "A cimkék egyszerű módot biztosítanak hogy kategorizáld a beszélgetést. Hozz létre cimkéket, mint például a #támogatás vagy a #számlázás, stb... későbbi használatra.", + "NEW_LINK": "Kattints ide cimkék létrehozásához" + }, + "CANNED_RESPONSES": { + "TITLE": "Create canned responses", + "DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.", + "NEW_LINK": "Click here to create a canned response" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Hozzárendelt ügynök", + "SELF_ASSIGN": "Hozzárendelés magamhoz", + "TEAM_LABEL": "Hozzárendelt csapat", + "SELECT": { + "PLACEHOLDER": "Nincs" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Kontakt adatai", + "CONVERSATION_ACTIONS": "Beszélgetés Műveletek", + "CONVERSATION_LABELS": "Beszélgetés cimkék", + "CONVERSATION_INFO": "Beszélgetés Információk", + "CONTACT_NOTES": "Contact Notes", + "CONTACT_ATTRIBUTES": "Kontakt Tulajdonságok", + "PREVIOUS_CONVERSATION": "Korábbi beszélgetések", + "MACROS": "Makrók", + "LINEAR_ISSUES": "Linked Linear Issues", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "Függőben lévő", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Attribútum hozzáadása", + "NO_RECORDS_FOUND": "Nem található tulajdonság", + "UPDATE": { + "SUCCESS": "Tulajdonság sikeresen frissítve", + "ERROR": "Nem lehet frissíteni a tulajdonságot. Kérlek, próbáld újra" + }, + "ADD": { + "TITLE": "Hozzáadás", + "SUCCESS": "Tulajdonság sikeresen hozzáadva", + "ERROR": "Nem lehet hozzáadni a tulajdonságot. Kérlek, próbáld újra" + }, + "DELETE": { + "SUCCESS": "Tulajdonság sikeresen törölve", + "ERROR": "Nem lehet törölni a tulajdonságot. Kérlek, próbáld újra" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Attribútum hozzáadása", + "PLACEHOLDER": "Attribútumok keresése", + "NO_RESULT": "Nem található attribútum" + } + }, + "EMAIL_HEADER": { + "FROM": "Innen", + "TO": "Ide", + "BCC": "Titkos másolat", + "CC": "Másolat", + "SUBJECT": "Tárgy", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Részvétel", + "SIDEBAR_TITLE": "Résztvevők", + "NO_RECORDS_FOUND": "Nincs találat", + "ADD_PARTICIPANTS": "Résztvevők kiválasztása", + "REMANING_PARTICIPANTS_TEXT": "+{count} fő", + "REMANING_PARTICIPANT_TEXT": "+{count} fő", + "TOTAL_PARTICIPANTS_TEXT": "+{count} fő vesz részt.", + "TOTAL_PARTICIPANT_TEXT": "+{count} fő vesz részt.", + "NO_PARTICIPANTS_TEXT": "Nincs részvevő!.", + "WATCH_CONVERSATION": "Csatlakozás a beszélgetéshez", + "YOU_ARE_WATCHING": "Te részt veszel", + "API": { + "ERROR_MESSAGE": "Nem sikerült frissítenbi, próbálja újra később!", + "SUCCESS_MESSAGE": "Résztvevők frissítve!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "Fordított szöveg megtekintése", + "DESC": "Meg tudod nézni a fordított tartalmat minden nyelven.", + "ORIGINAL_CONTENT": "Eredeti szöveg", + "TRANSLATED_CONTENT": "Fordított szöveg", + "NO_TRANSLATIONS_AVAILABLE": "Nem elérhető fordítás ehhez a tartalomhoz" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/csatMgmt.json b/app/javascript/dashboard/i18n/locale/hu/csatMgmt.json new file mode 100644 index 0000000..da37de4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Értékeld a beszélgetést", + "PLACEHOLDER": "Mondj el többet...", + "RATINGS": { + "POOR": "😞 Gyenge", + "FAIR": "😑 Elégséges", + "AVERAGE": "😐 Átlagos", + "GOOD": "😀 Jó", + "EXCELLENT": "😍 Kiváló" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/customRole.json b/app/javascript/dashboard/i18n/locale/hu/customRole.json new file mode 100644 index 0000000..352bc3d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Custom Roles", + "LEARN_MORE": "Learn more about custom roles", + "DESCRIPTION": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "HEADER_BTN_TXT": "Add custom role", + "LOADING": "Fetching custom roles...", + "SEARCH_404": "Nincs megfelelő elem.", + "PAYWALL": { + "TITLE": "Upgrade to create custom roles", + "AVAILABLE_ON": "The custom role feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The custom role feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Manage custom roles", + "DESC": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "TABLE_HEADER": { + "NAME": "Név", + "DESCRIPTION": "Leírás", + "PERMISSIONS": "Permissions", + "ACTIONS": "Műveletek" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "Név", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "Név kötelező." + }, + "DESCRIPTION": { + "LABEL": "Leírás", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "Leírás megadása kötelező." + }, + "PERMISSIONS": { + "LABEL": "Permissions", + "ERROR": "Permissions are required." + }, + "CANCEL_BUTTON_TEXT": "Mégse", + "API": { + "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" + } + }, + "ADD": { + "TITLE": "Add custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Elküldés", + "API": { + "SUCCESS_MESSAGE": "Custom role added successfully." + } + }, + "EDIT": { + "BUTTON_TEXT": "Szerkesztés", + "TITLE": "Edit custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Frissítés", + "API": { + "SUCCESS_MESSAGE": "Custom role updated successfully." + } + }, + "DELETE": { + "BUTTON_TEXT": "Törlés", + "API": { + "SUCCESS_MESSAGE": "Custom role deleted successfully.", + "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" + }, + "CONFIRM": { + "TITLE": "Törlés megerősítése", + "MESSAGE": "Biztos abban, hogy törli ", + "YES": "Igen, törlés ", + "NO": "Nem, mégse " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/datePicker.json b/app/javascript/dashboard/i18n/locale/hu/datePicker.json new file mode 100644 index 0000000..8bdfab2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Alkalmaz", + "CLEAR_BUTTON": "Clear", + "DATE_RANGE_INPUT": { + "START": "Start Date", + "END": "End Date" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "DATE RANGE", + "LAST_7_DAYS": "Utolsó 7 nap", + "LAST_30_DAYS": "Utolsó 30 nap", + "LAST_3_MONTHS": "Elmúlt 3 hónapban", + "LAST_6_MONTHS": "Elmúlt 6 hónapban", + "LAST_YEAR": "Elmúlt 1 évben", + "CUSTOM_RANGE": "Egyedi időszak" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/emoji.json b/app/javascript/dashboard/i18n/locale/hu/emoji.json new file mode 100644 index 0000000..a723075 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Emoji keresése", + "NOT_FOUND": "Nem található emoji", + "REMOVE": "Eltávolítás" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/general.json b/app/javascript/dashboard/i18n/locale/hu/general.json new file mode 100644 index 0000000..6f06618 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Showing {firstIndex}-{lastIndex} of {totalCount} items", + "PHONE_INPUT": { + "PLACEHOLDER": "Keresés", + "EMPTY_STATE": "Nincs találat" + }, + "CLOSE": "Bezárás", + "BETA": "Béta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/generalSettings.json b/app/javascript/dashboard/i18n/locale/hu/generalSettings.json new file mode 100644 index 0000000..83e2e72 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.", + "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.", + "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.", + "NON_ADMIN": "Please contact your administrator to upgrade the plan and continue using all features." + }, + "TITLE": "Fiókbeállítások", + "SUBMIT": "Beállítások frissítése", + "BACK": "Vissza", + "DISMISS": "Elutasítás", + "UPDATE": { + "ERROR": "Beállítás frissítés sikertelen, kérjük próbáld később!", + "SUCCESS": "Fiókbeállítások frissítve" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Delete your Account", + "NOTE": "Once you delete your account, all your data will be deleted.", + "BUTTON_TEXT": "Delete Your Account", + "CONFIRM": { + "TITLE": "Delete Account", + "MESSAGE": "Deleting your Account is irreversible. Enter your account name below to confirm you want to permanently delete it.", + "BUTTON_TEXT": "Törlés", + "DISMISS": "Mégse", + "PLACE_HOLDER": "Kérlek gépeld be, hogy {accountName} a megerősítéshez" + }, + "SUCCESS": "Account marked for deletion", + "FAILURE": "Could not delete account, try again!", + "SCHEDULED_DELETION": { + "TITLE": "Account Scheduled for Deletion", + "MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.", + "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.", + "CLEAR_BUTTON": "Cancel Scheduled Deletion" + } + }, + "FORM": { + "ERROR": "Kérjük javítsd ki az űrlaphibákat", + "GENERAL_SECTION": { + "TITLE": "Általános beállítások", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "Fiók Azonosító", + "NOTE": "Ez a személyazonosság akkor használható, ha API-alapú integrációt építesz" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.", + "DURATION": { + "LABEL": "Inactivity duration", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Preferences", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "Fióknév", + "PLACEHOLDER": "A fiókneved", + "ERROR": "Kérjük helyes fióknevet adj meg" + }, + "LANGUAGE": { + "LABEL": "Oldal nyelve", + "PLACEHOLDER": "A fiókneved", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Beérkező e-mail domain", + "PLACEHOLDER": "A domain melyen az e-maileket fogadod", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "Támogatási e-mail", + "PLACEHOLDER": "A vállalati támogatási e-mailcímed", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclude unattended conversations", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a conversation should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "Frissítés", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "A beszélgetésfolytonosság e-maillel már elérhető a fiókodban.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "Most már goadhatsz e-maileket az egyedi domaineden." + } + }, + "UPDATE_CHATWOOT": "Egy frissítés elérhető a Chatwoothoz {latestChatwootVersion}. Kérjük frissítsd a telepítésed.", + "LEARN_MORE": "Tudj meg többet", + "PAYMENT_PENDING": "A fizetésed folyamatban van. Kérlek, frissítsd fizetési adataitat a Chatwoot használatának folytatásához", + "UPGRADE": "Upgrade to continue using Chatwoot", + "LIMITS_UPGRADE": "A fiókod túllépte a használati korlátokat. Kérjük, frissítsd tervedet a Chatwoot használatának folytatásához", + "OPEN_BILLING": "Számlázási beállítások megnyitása" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Enter-rel válaszd ki", + "ENTER_TO_REMOVE": "Enter-rel távolítsd el", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "Válassz egyet", + "SELECT": "Kiválasztás" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Értesítések", + "MARK_ALL_DONE": "Mind kész", + "DELETE_TITLE": "törölve", + "UNREAD_NOTIFICATION": { + "TITLE": "Olvasatlan értesítések", + "ALL_NOTIFICATIONS": "Összes értesítés nézete", + "LOADING_UNREAD_MESSAGE": "Olvasatlan értesítések betöltése...", + "EMPTY_MESSAGE": "Nincs olvasatlan értesítésed" + }, + "LIST": { + "LOADING_MESSAGE": "Értesítések betöltése...", + "404": "Nincs értesítés", + "TABLE_HEADER": [ + "Név", + "Telefonszám", + "Beszélgetések", + "Utoljára kapcsolatban" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "Új beszélgetés", + "conversation_assignment": "Beszélgetés hozzárendelve", + "assigned_conversation_new_message": "Új üzenet", + "participating_conversation_new_message": "Új üzenet", + "conversation_mention": "Megemlítés", + "sla_missed_first_response": "SLA Missed", + "sla_missed_next_response": "SLA Missed", + "sla_missed_resolution": "SLA Missed" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Offline", + "RECONNECTING": "Reconnecting...", + "RECONNECT_SUCCESS": "Reconnected" + }, + "BUTTON": { + "REFRESH": "Frissítés" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Keresés vagy ugrás ide:", + "SECTIONS": { + "GENERAL": "Általános", + "REPORTS": "Jelentések", + "CONVERSATION": "Beszélgetés", + "BULK_ACTIONS": "Bulk Actions", + "CHANGE_ASSIGNEE": "Felelős megváltoztatása", + "CHANGE_PRIORITY": "Prioritás megváltoztatása", + "CHANGE_TEAM": "Csapat megváltoztatása", + "SNOOZE_CONVERSATION": "Beszélgetés alvómódba", + "ADD_LABEL": "Címke hozzáadása a beszélgetéshez", + "REMOVE_LABEL": "Címke eltávolítása a beszélgetésről", + "SETTINGS": "Beállítások", + "AI_ASSIST": "AI segítség", + "APPEARANCE": "Megjelenés", + "SNOOZE_NOTIFICATION": "Snooze Notification" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Ugrás a beszélgetések kezdőoldalára", + "GO_TO_CONTACTS_DASHBOARD": "Ugrás a kapcsolatok kezdőoldalára", + "GO_TO_REPORTS_OVERVIEW": "Ugrás a jelentések áttekintésére", + "GO_TO_CONVERSATION_REPORTS": "Ugrás a beszélgetések kezdőoldalára", + "GO_TO_AGENT_REPORTS": "Ugrás ügynök jelentésére", + "GO_TO_LABEL_REPORTS": "Ugrás címke jelentésére", + "GO_TO_INBOX_REPORTS": "Ugrás beérkező levelek jelentésére", + "GO_TO_TEAM_REPORTS": "Ugrás csapat jelentésére", + "GO_TO_SETTINGS_AGENTS": "Ugrás az ügynük beállításaira", + "GO_TO_SETTINGS_TEAMS": "Csapat beállítások megnyitása", + "GO_TO_SETTINGS_INBOXES": "Fiók beállítások megnyitása", + "GO_TO_SETTINGS_LABELS": "Cimke beállítások megnyitása", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Sablonválasz beállítások megnyitása", + "GO_TO_SETTINGS_APPLICATIONS": "Alkalmazás beállítások megnyitása", + "GO_TO_SETTINGS_ACCOUNT": "Fiók szintű beállítások megnyitása", + "GO_TO_SETTINGS_PROFILE": "Profil beállítások megnyitása", + "GO_TO_NOTIFICATIONS": "Értesítések megnyitása", + "ADD_LABELS_TO_CONVERSATION": "Cimke hozzáadása a beszélgetéshez", + "ASSIGN_AN_AGENT": "Ügynök hozzárendelése", + "AI_ASSIST": "AI segítség", + "ASSIGN_PRIORITY": "Prioritás beállítása", + "ASSIGN_A_TEAM": "Csapat hozzárendelése", + "MUTE_CONVERSATION": "Beszélgetés némítása", + "UNMUTE_CONVERSATION": "Beszélgetés némításának feloldása", + "REMOVE_LABEL_FROM_CONVERSATION": "Cimke eltávolítása a beszélgetésről", + "REOPEN_CONVERSATION": "Beszélgetés újranyitása", + "RESOLVE_CONVERSATION": "Beszélgetés megoldása", + "SEND_TRANSCRIPT": "E-mail átirat küldése", + "SNOOZE_CONVERSATION": "Beszélgetés alvómódba", + "UNTIL_NEXT_REPLY": "Következő válaszig", + "UNTIL_NEXT_WEEK": "Jövő hétig", + "UNTIL_TOMORROW": "Holnapig", + "UNTIL_NEXT_MONTH": "Következő hónapig", + "AN_HOUR_FROM_NOW": "Mostantól egy óráig", + "UNTIL_CUSTOM_TIME": "Speciális...", + "CHANGE_APPEARANCE": "Megjelenés módosítása", + "LIGHT_MODE": "Világos mód", + "DARK_MODE": "Sötét mód", + "SYSTEM_MODE": "Rendszer", + "SNOOZE_NOTIFICATION": "Snooze Notification" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Kezelőoldal App betöltése..." + }, + "COMMON": { + "OR": "Vagy", + "CLICK_HERE": "kattints ide" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/helpCenter.json b/app/javascript/dashboard/i18n/locale/hu/helpCenter.json new file mode 100644 index 0000000..13cd495 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Súgóközpont", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "Portál létrehozása" + }, + "HEADER": { + "FILTER": "Szűrés", + "SORT": "Rendezés", + "LOCALE": "Nyelv", + "SETTINGS_BUTTON": "Beállítások", + "NEW_BUTTON": "Új bejegyzés", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Publikált", + "DRAFT": "Vázlat", + "ARCHIVED": "Archivált" + }, + "TITLES": { + "ALL_ARTICLES": "Minden bejegyzés", + "MINE": "Saját bejegyzések", + "DRAFT": "Vázlat bejegyzések", + "ARCHIVED": "Archivált bejegyzések" + }, + "LOCALE_SELECT": { + "TITLE": "Nyelv kiválasztása", + "PLACEHOLDER": "Nyelv kiválasztása", + "NO_RESULT": "Nem található nyelv", + "SEARCH_PLACEHOLDER": "Nyelv kiválasztása" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "Minden bejegyzés", + "PUBLISH_BUTTON": "Publikálás", + "MOVE_TO_ARCHIVE_BUTTON": "Archiválás", + "PREVIEW": "Előnézet", + "ADD_TRANSLATION": "Fordítás hozzáadása", + "OPEN_SIDEBAR": "Oldalsáv megnyitása", + "CLOSE_SIDEBAR": "Oldalsáv becsukás", + "SAVING": "Mentés...", + "SAVED": "Mentve" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Kép feltöltése", + "UPLOADING": "Frissítés...", + "SUCCESS": "Képfeltöltés sikeres", + "ERROR": "Hiba a kép feltöltésekor", + "UN_AUTHORIZED_ERROR": "You are not authorized to upload images", + "ERROR_FILE_SIZE": "A kép mérete kevesebb, mint {size} MB", + "ERROR_FILE_FORMAT": "A kép formátuma legyen jpg, jpeg vagy png", + "ERROR_FILE_DIMENSIONS": "A kép felbontása kevesebb legyen, mint 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Bejegyzés beállítások", + "FORM": { + "CATEGORY": { + "LABEL": "Kategória", + "TITLE": "Kategória választás", + "PLACEHOLDER": "Kategória választás", + "NO_RESULT": "Nincsenek kategóriák", + "SEARCH_PLACEHOLDER": "Kategória keresés" + }, + "AUTHOR": { + "LABEL": "Szerző", + "TITLE": "Szerző kiválasztás", + "PLACEHOLDER": "Szerző kiválasztás", + "NO_RESULT": "Nincsenek szerzők", + "SEARCH_PLACEHOLDER": "Szerző keresés" + }, + "META_TITLE": { + "LABEL": "Meta cím", + "PLACEHOLDER": "Meta cím megadása" + }, + "META_DESCRIPTION": { + "LABEL": "Meta leírás", + "PLACEHOLDER": "Adj hozzá meta leírást a jobb SEO eredmények érdekében..." + }, + "META_TAGS": { + "LABEL": "Meta tagek", + "PLACEHOLDER": "Adj hozzá meta címkéket vesszőkkel elválasztva..." + } + }, + "BUTTONS": { + "ARCHIVE": "Bejegyzés archiválása", + "DELETE": "Cikk törlése" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Kategorizálhatatlan", + "SEARCH_RESULTS": "Keresési eredmények {query}", + "EMPTY_TEXT": "Cikkek keresése a válaszokba való beillesztéshez.", + "SEARCH_LOADER": "Keresés...", + "INSERT_ARTICLE": "Beszúrás", + "NO_RESULT": "Nem található cikk", + "COPY_LINK": "Cikk másolása a vágólapra", + "OPEN_LINK": "Cikk megnyitása új lapon", + "PREVIEW_LINK": "Cikk előnézete" + }, + "PORTAL": { + "HEADER": "Portálok", + "DEFAULT": "Alapértelmezett", + "NEW_BUTTON": "Új portál", + "ACTIVE_BADGE": "Aktív", + "CHOOSE_LOCALE_LABEL": "Terület választása", + "LOADING_MESSAGE": "Portálok betöltése...", + "ARTICLES_LABEL": "bejegyzések", + "NO_PORTALS_MESSAGE": "Nincsennek elérhető portálok", + "ADD_NEW_LOCALE": "Új terület hozzáadása", + "POPOVER": { + "TITLE": "Portálok", + "PORTAL_SETTINGS": "Portál beállítások", + "SUBTITLE": "Több portálja van, és mindegyik portálhoz különböző területi beállításokat adhat meg.", + "CANCEL_BUTTON_LABEL": "Mégse", + "CHOOSE_LOCALE_BUTTON": "Terület választása" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "bejegyzések", + "ADD": "Terület hozzáadása", + "VISIT": "Oldal meglátogatása", + "SETTINGS": "Beállítások", + "DELETE": "Törlés" + }, + "PORTAL_CONFIG": { + "TITLE": "Portál beállítások", + "ITEMS": { + "NAME": "Név", + "DOMAIN": "Egyedi felhasználó", + "SLUG": "Slug", + "TITLE": "Portál címe", + "THEME": "Témaszín", + "SUB_TEXT": "Portál alszövege" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Elérhető területek", + "TABLE": { + "NAME": "Terület neve", + "CODE": "Terület kódja", + "ARTICLE_COUNT": "Bejegyzések száma", + "CATEGORIES": "Kategóriák száma", + "SWAP": "Csere", + "DELETE": "Törlés", + "DEFAULT_LOCALE": "Alapértelmezett" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Portál törlése", + "MESSAGE": "Biztosan törölni szeretnéd ezt a portált?", + "YES": "Igen, portál törlése", + "NO": "Nem, portál megtartása", + "API": { + "DELETE_SUCCESS": "Portál sikeresen törölve", + "DELETE_ERROR": "Hiba a portál törlése közben" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Portál szerkesztése", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Alapinformáció" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portál személyreszabás" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Kategóriák" + }, + "LOCALE_SETTINGS": { + "TITLE": "Nyelvek" + } + }, + "CATEGORIES": { + "TITLE": "Kategóriák, itt:", + "NEW_CATEGORY": "Új kategória", + "TABLE": { + "NAME": "Név", + "DESCRIPTION": "Leírás", + "LOCALE": "Nyelv", + "ARTICLE_COUNT": "Bejegyzések száma", + "ACTION_BUTTON": { + "EDIT": "Kategória szerkesztése", + "DELETE": "Kategória törlése" + }, + "EMPTY_TEXT": "Nincsenek kategóriák" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Alapbeállítások frissítése" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Sugó információk", + "BODY": "Általános információk a portálról" + }, + "CUSTOMIZATION": { + "TITLE": "Sugó testreszabása", + "BODY": "Portál személyreszabása" + }, + "FINISH": { + "TITLE": "Voila! 🎉", + "BODY": "Kész is!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Vissza", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Portál létrehozása", + "TITLE": "Sugó információk", + "CREATE_BASIC_SETTING_BUTTON": "Portál általános beállításainak létrehozása" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Portál személyreszabása", + "TITLE": "Sugó testreszabása", + "UPDATE_PORTAL_BUTTON": "Portál beállítások frissítése" + }, + "FINISH_PAGE": { + "TITLE": "Íme! 🎉 Minden készen áll!", + "MESSAGE": "Most már láthatod ezet a létrehozott portált az összes portál oldalán.", + "FINISH": "Ugrás az összes portál oldalára" + } + }, + "LOGO": { + "LABEL": "Logó", + "UPLOAD_BUTTON": "Logó feltöltése", + "HELP_TEXT": "Ez a logó megjelenik a portál fejlécében.", + "IMAGE_UPLOAD_SUCCESS": "Logó sikeresen feltöltve", + "IMAGE_UPLOAD_ERROR": "Logo sikeresen törölve", + "IMAGE_DELETE_ERROR": "Hiba a logó törlése közben" + }, + "NAME": { + "LABEL": "Név", + "PLACEHOLDER": "Portál neve", + "HELP_TEXT": "A név belsőleg a nyilvános portálon kerül felhasználásra.", + "ERROR": "Név kötelező" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portál slug URL-khez", + "ERROR": "Slug megadása kötelező" + }, + "DOMAIN": { + "LABEL": "Egyedi domain", + "PLACEHOLDER": "Portál egyedi domain", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}", + "ERROR": "Adj meg egy érvényes felhasználó URL-t" + }, + "HOME_PAGE_LINK": { + "LABEL": "Főoldal link", + "PLACEHOLDER": "Portál főoldal link", + "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}", + "ERROR": "Adj meg egy érvényes kezdőlap URL-jét" + }, + "THEME_COLOR": { + "LABEL": "Portál témaszíne", + "HELP_TEXT": "Ez a szín fog megjelenni a portál témaszíneként." + }, + "PAGE_TITLE": { + "LABEL": "Oldalcím", + "PLACEHOLDER": "Portál oldalcím", + "HELP_TEXT": "Az oldal címe a nyilvános portálon kerül felhasználásra.", + "ERROR": "Oldalcím megadása kötelező" + }, + "HEADER_TEXT": { + "LABEL": "Fejléc szöveg", + "PLACEHOLDER": "Portál fejléc szöveg", + "HELP_TEXT": "A portál fejléc szövege a nyilvános portálon kerül felhasználásra.", + "ERROR": "Portál fejléc szöveg megadása kötelező" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portál sikeresen létrehozva.", + "ERROR_MESSAGE_FOR_BASIC": "Nem sikerült létrehozni a portált. Kérlek, próbáld újra.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portál sikeresen frissítve.", + "ERROR_MESSAGE_FOR_UPDATE": "Nem sikerült frissíteni a portált. Kérlek, próbáld újra." + } + }, + "ADD_LOCALE": { + "TITLE": "Új terület hozzáadása", + "SUB_TITLE": "Ezzel egy új nyelv- és országkódot adsz hozzá az elérhető fordítási listához.", + "PORTAL": "Portál", + "LOCALE": { + "LABEL": "Nyelv", + "PLACEHOLDER": "Terület választása", + "ERROR": "Terület megadása kötelező" + }, + "BUTTONS": { + "CREATE": "Terület létrehozása", + "CANCEL": "Mégse" + }, + "API": { + "SUCCESS_MESSAGE": "Terület sikeresen hozzáadva", + "ERROR_MESSAGE": "Nem sikerült területet hozzáadni. Kérlek, próbáld újra." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Alapértelmezett területi beállítás sikeresen frissítve", + "ERROR_MESSAGE": "Nem sikerült frissíteni az alapértelmezett területi beállítást. Kérlek, próbáld úra." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Terület sikeresen eltávolítva a portálról", + "ERROR_MESSAGE": "Nem sikerült eltávolítani a területet a portálról. Kérlek, próbáld újra." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Bejegyzések betöltése...", + "404": "Nincs a keresésnek megfelelő cikk 🔍", + "NO_ARTICLES": "Nincsennek elérhető cikkek", + "HEADERS": { + "TITLE": "Cím", + "CATEGORY": "Kategória", + "READ_COUNT": "Views", + "STATUS": "Státusz", + "LAST_EDITED": "Utoljára szerkesztve" + }, + "COLUMNS": { + "BY": "általa:", + "AUTHOR_NOT_AVAILABLE": "Author is not available" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Bejegyzés betöltése...", + "TITLE_PLACEHOLDER": "A cikk címét írd ide", + "CONTENT_PLACEHOLDER": "Írd ide a cikkedet", + "API": { + "ERROR": "Hiba a cikk elmentésekor" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Hiba a cikk publikálásakor", + "SUCCESS": "Cikk sikeresen publikálva" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Hiba a cikk archiválásakor", + "SUCCESS": "Cikk sikeresen archiválva" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Error while drafting article", + "SUCCESS": "Article drafted successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Törlés megerősítése", + "MESSAGE": "Biztosan törölni szeretnéd a cikket?", + "YES": "Igen, Törlés", + "NO": "Nem, tartsa meg" + } + }, + "API": { + "SUCCESS_MESSAGE": "Cikk sikeresen törölve", + "ERROR_MESSAGE": "Hiba a cikk törlésekor" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Kérjük, adj hozzá a cikk címét és tartalmát, ezután csak Te tudod majd frissíteni a beállításokat" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Keresés a bejegyzések között" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Kategória létrehozása", + "SUB_TITLE": "A kategóriát a nyilvános portálon fogják használni a cikkek kategorizálására.", + "PORTAL": "Portál", + "LOCALE": "Nyelv", + "NAME": { + "LABEL": "Név", + "PLACEHOLDER": "Kategória neve", + "HELP_TEXT": "A kategória neve és ikonja a nyilvános portálon a cikkek kategorizálására szolgál.", + "ERROR": "Név kötelező" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Kategória az URL-ekhez", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Érme megadása kötelező" + }, + "DESCRIPTION": { + "LABEL": "Leírás", + "PLACEHOLDER": "Adj egy rövid leírást a kategóriához.", + "ERROR": "Leírás megadása kötelező" + }, + "BUTTONS": { + "CREATE": "Kategória létrehozása", + "CANCEL": "Mégse" + }, + "API": { + "SUCCESS_MESSAGE": "Kategória létrehozva", + "ERROR_MESSAGE": "Nem lehet létrehozni a kategóriát" + } + }, + "EDIT": { + "TITLE": "Kategória szerkesztése", + "SUB_TITLE": "A kategória szerkesztése frissíti a kategóriát a nyilvános portálon.", + "PORTAL": "Portál", + "LOCALE": "Nyelv", + "NAME": { + "LABEL": "Név", + "PLACEHOLDER": "Kategória neve", + "HELP_TEXT": "A kategória neve és ikonja a nyilvános portálon a cikkek kategorizálására szolgál.", + "ERROR": "Név kötelező" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Kategória az URL-ekhez", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug megadása kötelező" + }, + "DESCRIPTION": { + "LABEL": "Leírás", + "PLACEHOLDER": "Adj egy rövid leírást a kategóriához.", + "ERROR": "Leírás megadása kötelező" + }, + "BUTTONS": { + "CREATE": "Kategória szerkesztése", + "CANCEL": "Mégse" + }, + "API": { + "SUCCESS_MESSAGE": "Kategória frissítve", + "ERROR_MESSAGE": "Nem lehet frissíteni a kategóriát" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Kategória törölve", + "ERROR_MESSAGE": "Nem lehet törölni a kategóriát" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Cikkek keresése", + "PLACEHOLDER": "Cikkek keresése", + "NO_RESULT": "Nem található cikk", + "SEARCHING": "Keresés...", + "SEARCH_BUTTON": "Keresés", + "INSERT_ARTICLE": "Link beillesztése", + "IFRAME_ERROR": "Az URL üres vagy érvénytelen. A tartalom megjelenítése nem lehetséges.", + "OPEN_ARTICLE_SEARCH": "Cikk beillesztése a Súgóközpontból", + "SUCCESS_ARTICLE_INSERTED": "Cikk sikeresen beillesztve", + "PREVIEW_LINK": "Cikk előnézete", + "CANCEL": "Bezárás", + "BACK": "Vissza", + "BACK_RESULTS": "Vissza az eredményekhez" + }, + "UPGRADE_PAGE": { + "TITLE": "Súgóközpont", + "DESCRIPTION": "Hozzon létre felhasználóbarát önkiszolgáló portálokat. Segítse felhasználóit a cikkek 7/24 elérésében. Frissítse előfizetését, hogy engedélyezze ezt a funkciót.", + "SELF_HOSTED_DESCRIPTION": "Hozzon létre felhasználóbarát önkiszolgáló portálokat. Segítse felhasználóit a cikkek 7/24 elérésében. Kérjük, lépjen kapcsolatba a rendszergazdával a funkció engedélyezéséhez.", + "BUTTON": { + "LEARN_MORE": "Tudj meg többet", + "UPGRADE": "Frissítés" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Több portál", + "DESCRIPTION": "Hozzon létre több help center portált különböző termékekhez ugyanazon fiók használatával." + }, + "LOCALES": { + "TITLE": "Teljes körű támogatás a helyiek számára", + "DESCRIPTION": "Lokalizálja a portált az Ön nyelvén. Támogatjuk az összes helyi nyelvet, és lehetővé tesszük a fordításokat minden cikkhez." + }, + "SEO": { + "TITLE": "SEO-barát design", + "DESCRIPTION": "Testre szabhatja meta-cimkéit, hogy SEO-barát oldalainkkal javítsa láthatóságát a keresőmotorokban." + }, + "API": { + "TITLE": "Teljes API támogatás", + "DESCRIPTION": "Használja a portált fej nélküli CMS-ként harmadik féltől származó front-end keretrendszerekkel a mi API-ink segítségével." + } + } + }, + "LOADING": "Loading...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} view | {count} views", + "DROPDOWN_MENU": { + "PUBLISH": "Publikálás", + "DRAFT": "Vázlat", + "ARCHIVE": "Archive", + "DELETE": "Törlés" + }, + "STATUS": { + "DRAFT": "Vázlat", + "PUBLISHED": "Publikált", + "ARCHIVED": "Archivált" + }, + "CATEGORY": { + "UNCATEGORISED": "Uncategorised" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "All articles", + "MINE": "Enyém", + "DRAFT": "Vázlat", + "PUBLISHED": "Publikált", + "ARCHIVED": "Archivált" + }, + "CATEGORY": { + "ALL": "All categories" + }, + "LOCALE": { + "ALL": "All locales" + }, + "NEW_ARTICLE": "New article" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Write an article", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "New article" + }, + "MINE": { + "TITLE": "You haven't written any articles here", + "SUBTITLE": "All articles written by you show up here for quick access." + }, + "DRAFT": { + "TITLE": "There are no articles in drafts", + "SUBTITLE": "Draft articles will appear here" + }, + "PUBLISHED": { + "TITLE": "There are no published articles", + "SUBTITLE": "Published articles will appear here" + }, + "ARCHIVED": { + "TITLE": "There are no articles in the archive", + "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages" + }, + "CATEGORY": { + "TITLE": "There are no articles in this category", + "SUBTITLE": "Articles in this category will appear here" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "Új kategória", + "EDIT_CATEGORY": "Kategória szerkesztése", + "CATEGORIES_COUNT": "{n} category | {n} categories", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categories ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "Nincsenek kategóriák", + "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Kategória létrehozva", + "ERROR_MESSAGE": "Nem lehet létrehozni a kategóriát" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Kategória frissítve", + "ERROR_MESSAGE": "Nem lehet frissíteni a kategóriát" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Kategória törölve", + "ERROR_MESSAGE": "Nem lehet törölni a kategóriát" + } + }, + "HEADER": { + "CREATE": "Kategória létrehozása", + "EDIT": "Kategória szerkesztése", + "DESCRIPTION": "A kategória szerkesztése frissíti a kategóriát a nyilvános portálon.", + "PORTAL": "Portál", + "LOCALE": "Nyelv" + }, + "FORM": { + "NAME": { + "LABEL": "Név", + "PLACEHOLDER": "Kategória neve", + "ERROR": "Név kötelező" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Kategória az URL-ekhez", + "ERROR": "Érme megadása kötelező", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Leírás", + "PLACEHOLDER": "Adj egy rövid leírást a kategóriához.", + "ERROR": "Leírás megadása kötelező" + } + }, + "BUTTONS": { + "CREATE": "Létrehozás", + "EDIT": "Frissítés", + "CANCEL": "Mégse" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "No locales available | {n} locale | {n} locales", + "NEW_LOCALE_BUTTON_TEXT": "New locale", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles", + "CATEGORIES_COUNT": "{count} category | {count} categories", + "DEFAULT": "Alapértelmezett", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Make default", + "DELETE": "Törlés" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Új terület hozzáadása", + "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", + "COMBOBOX": { + "PLACEHOLDER": "Nyelv kiválasztása..." + }, + "API": { + "SUCCESS_MESSAGE": "Terület sikeresen hozzáadva", + "ERROR_MESSAGE": "Nem sikerült területet hozzáadni. Kérlek, próbáld újra." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Mentés...", + "SAVED": "Mentve" + }, + "PREVIEW": "Előnézet", + "PUBLISH": "Publikálás", + "DRAFT": "Vázlat", + "ARCHIVE": "Archive", + "BACK_TO_ARTICLES": "Back to articles" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "More properties", + "UNCATEGORIZED": "Kategorizálhatatlan", + "EDITOR_PLACEHOLDER": "Write something..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Article properties", + "META_DESCRIPTION": "Meta leírás", + "META_DESCRIPTION_PLACEHOLDER": "Add meta description", + "META_TITLE": "Meta cím", + "META_TITLE_PLACEHOLDER": "Add meta title", + "META_TAGS": "Meta tagek", + "META_TAGS_PLACEHOLDER": "Add meta tags" + }, + "API": { + "ERROR": "Hiba a cikk elmentésekor" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "New portal", + "PORTALS": "Portálok", + "CREATE_PORTAL": "Create and manage multiple portals", + "ARTICLES": "bejegyzések", + "DOMAIN": "domain", + "PORTAL_NAME": "Portál neve" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Create new portal", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "Létrehozás", + "NAME": { + "LABEL": "Név", + "PLACEHOLDER": "User Guide | Chatwoot", + "MESSAGE": "Choose an name for your portal.", + "ERROR": "Név kötelező" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Érme megadása kötelező", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logó", + "IMAGE_UPLOAD_ERROR": "A képet nem lehet betölteni! Próbálja újra", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo", + "IMAGE_DELETE_SUCCESS": "Logo sikeresen törölve", + "IMAGE_DELETE_ERROR": "Unable to delete logo", + "IMAGE_UPLOAD_SIZE_ERROR": "A kép mérete kevesebb, mint {size} MB" + }, + "NAME": { + "LABEL": "Név", + "PLACEHOLDER": "Portál neve", + "ERROR": "Név kötelező" + }, + "HEADER_TEXT": { + "LABEL": "Header text", + "PLACEHOLDER": "Portál fejléc szöveg" + }, + "PAGE_TITLE": { + "LABEL": "Page title", + "PLACEHOLDER": "Portál oldalcím" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home page link", + "PLACEHOLDER": "Portál főoldal link", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Live chat widget", + "PLACEHOLDER": "Select live chat widget", + "HELP_TEXT": "Select a live chat widget that will appear on your help center", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Brand color" + }, + "SAVE_CHANGES": "Save changes" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Egyedi felhasználó", + "LABEL": "Egyedi felhasználó:", + "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Portál egyedi domain", + "EDIT_BUTTON": "Szerkesztés", + "ADD_BUTTON": "Add custom domain", + "STATUS": { + "LIVE": "Élő", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Add custom domain", + "EDIT_HEADER": "Edit custom domain", + "ADD_CONFIRM_BUTTON_LABEL": "Add domain", + "EDIT_CONFIRM_BUTTON_LABEL": "Update domain", + "LABEL": "Egyedi felhasználó", + "PLACEHOLDER": "Portál egyedi domain", + "ERROR": "Custom domain is required", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS configuration", + "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "Elküldés" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Delete {portalName}", + "HEADER": "Portál törlése", + "DESCRIPTION": "Permanently delete this portal. This action is irreversible", + "DIALOG": { + "HEADER": "Sure you want to delete {portalName}?", + "DESCRIPTION": "This is a permanent action that cannot be reversed.", + "CONFIRM_BUTTON_LABEL": "Törlés" + } + }, + "EDIT_CONFIGURATION": "Edit configuration" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portál sikeresen létrehozva", + "ERROR_MESSAGE": "Unable to create portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portál sikeresen frissítve", + "ERROR_MESSAGE": "Unable to update portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "Frissítés...", + "UPLOAD": "Upload & Process", + "CANCEL": "Mégse", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Generálás...", + "CONFIRM_DELETE": "Are you sure you want to delete {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Lezárt", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/inbox.json b/app/javascript/dashboard/i18n/locale/hu/inbox.json new file mode 100644 index 0000000..af065fd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "My Inbox", + "DISPLAY_DROPDOWN": "Display", + "LOADING": "Értesítések lekérése", + "404": "Ebben a csoportban nincsenek aktív értesítések.", + "NO_NOTIFICATIONS": "No notifications", + "NOTE": "Értesítés az összes feliratkozott postafiókból", + "NO_MESSAGES_AVAILABLE": "Oops! Not able to fetch messages", + "SNOOZED_UNTIL": "Halasztás eddig", + "SNOOZED_UNTIL_TOMORROW": "Halasztás holnapig", + "SNOOZED_UNTIL_NEXT_WEEK": "Halasztás jövő hétig" + }, + "ACTION_HEADER": { + "SNOOZE": "Értesítés alvó állapotban", + "DELETE": "Értesítés törlése", + "BACK": "Vissza" + }, + "TYPES": { + "CONVERSATION_MENTION": "Önt megemlítették egy beszélgetésben", + "CONVERSATION_CREATION": "Új beszélgetés létrehozása", + "CONVERSATION_ASSIGNMENT": "Egy beszélgetés hozzád lett rendelve", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Új üzenet egy kijelölt beszélgetésben", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Új üzenet egy beszélgetésben, amelyben részt vesz", + "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation", + "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation", + "SLA_MISSED_RESOLUTION": "SLA target resolution missed for conversation" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Mentioned", + "CONVERSATION_ASSIGNMENT": "Assigned to you", + "CONVERSATION_CREATION": "New Conversation", + "SLA_MISSED_FIRST_RESPONSE": "SLA breach", + "SLA_MISSED_NEXT_RESPONSE": "SLA breach", + "SLA_MISSED_RESOLUTION": "SLA breach", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Új üzenet", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Új üzenet", + "SNOOZED_UNTIL": "Snoozed for {time}", + "SNOOZED_ENDS": "Snooze ended" + }, + "NO_CONTENT": "Nincs elérhető tartalom", + "MENU_ITEM": { + "MARK_AS_READ": "Mark as read", + "MARK_AS_UNREAD": "Megjelölés olvasatlanként", + "SNOOZE": "Halasztás", + "DELETE": "Törlés", + "MARK_ALL_READ": "Mindent olvasottra állít", + "DELETE_ALL": "Delete all", + "DELETE_ALL_READ": "Delete all read" + }, + "DISPLAY_MENU": { + "SORT": "Rendezés", + "DISPLAY": "Megjelenítés:", + "SORT_OPTIONS": { + "NEWEST": "Legújabb", + "OLDEST": "Legrégibb", + "PRIORITY": "Prioritás" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Elnémított", + "READ": "Olvasott", + "LABELS": "Cimkék", + "CONVERSATION_ID": "Beszélgetés azonosítója" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notification marked as read", + "MARK_AS_UNREAD": "Notification marked as unread", + "SNOOZE": "Notification snoozed", + "DELETE": "Notification deleted", + "MARK_ALL_READ": "All notifications marked as read", + "DELETE_ALL": "All notifications deleted", + "DELETE_ALL_READ": "All read notifications deleted" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json new file mode 100644 index 0000000..1ed0d14 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Fiókok", + "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.", + "LEARN_MORE": "Learn more about inboxes", + "RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.", + "CLICK_TO_RECONNECT": "Click here to reconnect.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "Nincs Inbox kapcsolva ehhez a fiókhoz." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Csatorna kiválasztása", + "BODY": "Válasz egy szolgáltatót, melyet össze akarsz integrálni a Chatwoottal." + }, + "INBOX": { + "TITLE": "Fiók létrehozása", + "BODY": "Hitelesítsd a fiókod és hozz létre egy inboxot." + }, + "AGENT": { + "TITLE": "Ügynök Hozzádása", + "BODY": "Adj hozzá ügynököket a létrehozott inboxhoz." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "Mindennel készen állsz!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Fiók név", + "PLACEHOLDER": "Írd be a postafiókod nevét", + "ERROR": "Kérlek, adj meg egy érvényes postafiók nevet" + }, + "WEBSITE_NAME": { + "LABEL": "Website név", + "PLACEHOLDER": "Add meg weboldalad nevét (pl.: Példa Kft.)" + }, + "FB": { + "HELP": "UI: A bejelentkezéseddel csak az oldalad üzeneteihez kapunk hozzáférést. Privát üzeneteidhez sosem férhet hozzá a Chatwoot.", + "CHOOSE_PAGE": "Oldal kiválasztása", + "CHOOSE_PLACEHOLDER": "Válaszd ki az oldalt a listából", + "INBOX_NAME": "Fiók név", + "ADD_NAME": "Adj nevet a fiókodnak", + "PICK_NAME": "Pick a Name for your Inbox", + "PICK_A_VALUE": "Válassz értéket", + "CREATE_INBOX": "Fiók létrehozása" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continue with Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile", + "HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ", + "ERROR_MESSAGE": "There was an error connecting to Instagram, please try again", + "ERROR_AUTH": "There was an error connecting to Instagram, please try again", + "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "Ahhoz hogy hozzáadd a twitter profilodat egy csatornaként, azonosítanod kell a Twitter fiókodat a 'Belépés Twitterrel' gomb megnyomásával ", + "ERROR_MESSAGE": "Hiba történt a Twitterrel való csatlakozáskor, kérjük próbáld később", + "TWEETS": { + "ENABLE": "Beszélgetés létrehozása az említett Tweetekből" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Website csatorna", + "DESC": "Hozz létre egy csatornát a websiteodnak és kezdd el az ügyfeleid támogatását a website widgeten keresztül.", + "LOADING_MESSAGE": "Website támogatási csatorna létrehozása", + "CHANNEL_AVATAR": { + "LABEL": "Csatorna avatar" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "Please enter your Webhook URL", + "ERROR": "Kérjük helyes URL-t adj meg" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Website domain", + "PLACEHOLDER": "Add meg weboldalad domainjét (pl.: példa.hu)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Köszöntő fejléc üzenet", + "PLACEHOLDER": "Szia!" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Köszöntő üzenet", + "PLACEHOLDER": "Könnyűvé tesszük, hogy kapcsolatba kerülj velünk. Kérdezz bármit, vagy oszd meg véleményed." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Csatorna köszöntő üzenet", + "PLACEHOLDER": "Példa Kft. általában néhány órán belül válaszol." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Csatorna köszöntés engedélyezése", + "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", + "ENABLED": "Engedélyezve", + "DISABLED": "Letiltva" + }, + "REPLY_TIME": { + "TITLE": "Válaszadási idő megadása", + "IN_A_FEW_MINUTES": "Néhány percen belül", + "IN_A_FEW_HOURS": "Néhány órán belül", + "IN_A_DAY": "Egy napon belül", + "HELP_TEXT": "Ezen válaszidő ki lesz írva az élő chat widgeten" + }, + "WIDGET_COLOR": { + "LABEL": "Widget szín", + "PLACEHOLDER": "Frissítsd a widget színét" + }, + "SUBMIT_BUTTON": "Fiók létrehozása", + "API": { + "ERROR_MESSAGE": "Nem tudjuk újra megnyitni a weboldalt, kérlek, próbáld újra" + } + }, + "TWILIO": { + "TITLE": "Twilio SMS/Whatsapp csatorna", + "DESC": "Twilio integrálása és ügyfelek támogatása SMS-en vagy a WhatsAppon keresztül", + "ACCOUNT_SID": { + "LABEL": "Fiók SID", + "PLACEHOLDER": "Kérjük add meg a Twilio fiók SID-t", + "ERROR": "Ez a mező kötelező" + }, + "API_KEY": { + "USE_API_KEY": "API kulcs hitelesítés", + "LABEL": "API kulcs biztonsági azonosító (SID)", + "PLACEHOLDER": "Írja be az API kulcs biztonsági azonosítót (SID)", + "ERROR": "Ez a mező kötelező" + }, + "API_KEY_SECRET": { + "LABEL": "API titkos kulcs", + "PLACEHOLDER": "Írja be az API kulcs biztonsági azonosítót (SID)", + "ERROR": "Ez a mező kötelező" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "Üzenetküldő szolgáltatás", + "PLACEHOLDER": "Kérlek add meg a Twilio Üzenetküldő Szolgáltatás azonosítóját", + "ERROR": "Ez a mező kötelező", + "USE_MESSAGING_SERVICE": "Twilio Üzenetküldő használata" + }, + "CHANNEL_TYPE": { + "LABEL": "Csatorna típusa", + "ERROR": "Kérjük válaszd ki a csatorna típusát" + }, + "AUTH_TOKEN": { + "LABEL": "Auth token", + "PLACEHOLDER": "Kérjük add meg a Twilio auth tokened", + "ERROR": "Ez a mező kötelező" + }, + "CHANNEL_NAME": { + "LABEL": "Fiók név", + "PLACEHOLDER": "Add meg a postafiók nevét", + "ERROR": "Ez a mező kötelező" + }, + "PHONE_NUMBER": { + "LABEL": "Telefonszám", + "PLACEHOLDER": "Kérjük add meg a telefonszámot, amire az üzeneteket küldjük.", + "ERROR": "Adj meg egy telefonszámot ami +-al kezdődik és nem tartalmaz szóközöket" + }, + "API_CALLBACK": { + "TITLE": "Visszahívás URL", + "SUBTITLE": "Be kell állítanod az üzenet visszahívás URL-t a Twilion az itt megadott URL alapján." + }, + "SUBMIT_BUTTON": "Twilio csatorna létrehozása", + "API": { + "ERROR_MESSAGE": "Nem tudtuk hitelesíteni a Twilio fiókodat, kérjük próbáld később" + } + }, + "SMS": { + "TITLE": "SMS csatorna", + "DESC": "Ügyfelek támogatásának indítása SMS-en keresztül", + "PROVIDERS": { + "LABEL": "API szolgáltató", + "TWILIO": "Twilio", + "BANDWIDTH": "Sávszélesség" + }, + "API": { + "ERROR_MESSAGE": "Nem tudtuk menteni az SMS csatornáját" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "Fiók Azonosító", + "PLACEHOLDER": "Kérlek add meg a Bandwidth Fiók felhasználódat", + "ERROR": "Ez a mező kötelező" + }, + "API_KEY": { + "LABEL": "API kulcs", + "PLACEHOLDER": "Please enter your Bandwidth API Key", + "ERROR": "Ez a mező kötelező" + }, + "API_SECRET": { + "LABEL": "API titkos kulcs", + "PLACEHOLDER": "Please enter your Bandwidth API Secret", + "ERROR": "Ez a mező kötelező" + }, + "APPLICATION_ID": { + "LABEL": "Alkalmazás ID", + "PLACEHOLDER": "Kérlek add meg a Bandwidth Jelentkezési felhasználódat", + "ERROR": "Ez a mező kötelező" + }, + "INBOX_NAME": { + "LABEL": "Fiók név", + "PLACEHOLDER": "Add meg a postafiók nevét", + "ERROR": "Ez a mező kötelező" + }, + "PHONE_NUMBER": { + "LABEL": "Telefonszám", + "PLACEHOLDER": "Kérjük add meg a telefonszámot, amire az üzeneteket küldjük.", + "ERROR": "Adj meg egy telefonszámot ami +-al kezdődik és nem tartalmaz szóközöket" + }, + "SUBMIT_BUTTON": "Bandwidth csatorna létrehozása", + "API": { + "ERROR_MESSAGE": "Nem tudtuk hitelesíteni a sávszélesség hitelesítő adatait. Kérjük, próbáld újra" + }, + "API_CALLBACK": { + "TITLE": "Visszahívás URL", + "SUBTITLE": "Be kell állítanod az üzenet visszahívási URL-jét a sávszélességben az itt említett URL-lel." + } + } + }, + "WHATSAPP": { + "TITLE": "WhatsApp csatorna", + "DESC": "Kapcsolatfelvétel az ügyfelekkel WhatsAppon keresztül.", + "PROVIDERS": { + "LABEL": "API szolgáltató", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "Fiók név", + "PLACEHOLDER": "Kérjük adj meg a fiók nevet", + "ERROR": "Ez a mező kötelező" + }, + "PHONE_NUMBER": { + "LABEL": "Telefonszám", + "PLACEHOLDER": "Kérjük add meg a telefonszámot, amire az üzeneteket küldjük.", + "ERROR": "Adj meg egy telefonszámot ami +-al kezdődik és nem tartalmaz szóközöket" + }, + "PHONE_NUMBER_ID": { + "LABEL": "Telefonszám ID", + "PLACEHOLDER": "Kérjük, add meg a Facebook fejlesztői irányítópultjáról kapott telefonszám-azonosítót.", + "ERROR": "Kérlek adj meg egy érvényes értéket" + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "Üzleti azonosító", + "PLACEHOLDER": "Kérjük, add meg a Facebook fejlesztői irányítópultjáról kapott üzleti fiókazonosítót.", + "ERROR": "Kérlek adj meg egy érvényes értéket" + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook Azonosító Token", + "PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.", + "ERROR": "Kérlek adj meg egy érvényes értéket." + }, + "API_KEY": { + "LABEL": "API kulcs", + "SUBTITLE": "WhatsApp API kulcs beállítása.", + "PLACEHOLDER": "API kulcs", + "ERROR": "Kérlek adj meg egy érvényes értéket." + }, + "API_CALLBACK": { + "TITLE": "Visszahívás URL", + "SUBTITLE": "Be kell állítania a webhook URL-címét és az ellenőrző tokent a Facebook fejlesztői portálon az alább látható értékekkel.", + "WEBHOOK_URL": "Webhook URL", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook Verification Token" + }, + "SUBMIT_BUTTON": "WhatsApp cstorna létrehozása", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "Nem tudtuk elmenteni a WhatsApp csatornát" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "Telefonszám", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "Fiók SID", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "Auth token", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "API kulcs biztonsági azonosító (SID)", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "API titkos kulcs", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "API csatorna", + "DESC": "API-val integrálj és láss neki az ügyfeleid támogatásának.", + "CHANNEL_NAME": { + "LABEL": "Csatorna neve", + "PLACEHOLDER": "Kérjük adj meg csatorna nevet", + "ERROR": "Ez a mező kötelező" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "SUBTITLE": "Configure the URL where you want to receive callbacks on events.", + "PLACEHOLDER": "Webhook URL" + }, + "SUBMIT_BUTTON": "API csatorna létrehozása", + "API": { + "ERROR_MESSAGE": "Nem tudtuk elmenteni az API csatornát" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "E-mail csatorna", + "DESC": "Integrate your email inbox.", + "CHANNEL_NAME": { + "LABEL": "Csatorna neve", + "PLACEHOLDER": "Kérjük adj meg csatorna nevet", + "ERROR": "Ez a mező kötelező" + }, + "EMAIL": { + "LABEL": "E-mail", + "SUBTITLE": "Az e-mail ahova az ügyfeled a támogatási kérelmeit küldi", + "PLACEHOLDER": "E-mail" + }, + "SUBMIT_BUTTON": "E-mail csatorna létrehozása", + "API": { + "ERROR_MESSAGE": "Nem tudtuk elmenteni az e-mail csatornát" + }, + "FINISH_MESSAGE": "Kezdd el továbbítani az e-maileket a következő e-mail címekre.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "Kattints ide", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "LINE csatorna", + "DESC": "Integrálj LINE csatornát az alkalmazásba.", + "CHANNEL_NAME": { + "LABEL": "Csatorna neve", + "PLACEHOLDER": "Kérjük adj meg csatorna nevet", + "ERROR": "Ez a mező kötelező" + }, + "LINE_CHANNEL_ID": { + "LABEL": "LINE Channel ID", + "PLACEHOLDER": "LINE Channel ID" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "LINE Channel Secret", + "PLACEHOLDER": "LINE Channel Secret" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "LINE Channel Token", + "PLACEHOLDER": "LINE Channel Token" + }, + "SUBMIT_BUTTON": "LINE csatorna létrehozása", + "API": { + "ERROR_MESSAGE": "Nem tudtuk menteni a LINE csatornát" + }, + "API_CALLBACK": { + "TITLE": "Visszahívás URL", + "SUBTITLE": "A webhook URL-címét a LINE alkalmazásban az itt említett URL-lel kell konfigurálnia." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Telegram csatorna", + "DESC": "Integrálj Telegram csatornát az alkalmazásba.", + "BOT_TOKEN": { + "LABEL": "Bot Token", + "SUBTITLE": "Konfigurálja a Telegram BotFathertől kapott bot tokent.", + "PLACEHOLDER": "Bot Token" + }, + "SUBMIT_BUTTON": "Telgram csatorna létrehozása", + "API": { + "ERROR_MESSAGE": "Nem tudtuk elmenteni a Telegram csatornát" + } + }, + "AUTH": { + "TITLE": "Csatorna kiválasztása", + "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Honlap", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "E-mail", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Ügynökök", + "DESC": "Itt hozzáadhatsz ügynököket az újonan létrehooztt inboxodhoz. Csak ezek a kiválasztott ügynökök fognak hozzáférni az inboxodhoz. Az ügynökök akik nem részei az inboxnak, nem látják és nem tudnak válaszolni az üzenetekre belépésük után.Webhook-ok
A Webhook-ok HTTP visszahívások, melyek minden fiókhoz bállíthatóak. Chatwoot események, például beérkező üzenetek aktiválhatják a webhookokat. Több webhookot is beállíthatsz a fiókodhoz.
Egy webhook létrehozásához kattints a Webhook hozzáadása gombra. Le is törölheted a létrejött webhookokat a Törlés gombra kattintva.
Irányítópult-alkalmazások
Az irányítópult-alkalmazások segítségével a szervezetek beágyazhatnak egy alkalmazást a Chatwoot irányítópultjába, hogy kontextust biztosítsanak az ügyfélszolgálati ügynökök számára. Ezzel a funkcióval önállóan hozhat létre alkalmazást, és beágyazhatja azt az irányítópultba, hogy megadja a felhasználói információkat, rendeléseiket vagy korábbi fizetési előzményeiket.
Ha beágyazza alkalmazását a Chatwoot irányítópultjával, az alkalmazás ablakeseményként kapja meg a beszélgetés és a kapcsolatfelvétel kontextusát. Helyezzen el egy figyelőt az üzeneteseményhez az oldalon, hogy megkapja a kontextust.
Új irányítópult-alkalmazás hozzáadásához kattintson az „Új irányítópult-alkalmazás hozzáadása” gombra.
", + "DESCRIPTION": "Az irányítópult-alkalmazások segítségével a szervezetek beágyazhatnak egy alkalmazást az irányítópultba, hogy kontextust biztosítsanak az ügyfélszolgálati ügynökök számára. Ez a funkció lehetővé teszi, hogy önállóan hozzon létre egy alkalmazást, és beágyazza azt, hogy megadja a felhasználói információkat, rendeléseiket vagy korábbi fizetési előzményeiket.\n", + "LEARN_MORE": "Learn more about Dashboard Apps", + "LIST": { + "404": "Ebben a fiókban még nincsenek konfigurálva kezdőlapi-alkalmazások", + "LOADING": "Kezdőlapi alkalmazások lekérése...", + "TABLE_HEADER": { + "NAME": "Név", + "ENDPOINT": "Végpont" + }, + "EDIT_TOOLTIP": "App szerkesztése", + "DELETE_TOOLTIP": "App törlése" + }, + "FORM": { + "TITLE_LABEL": "Név", + "TITLE_PLACEHOLDER": "Add meg a kezdőlapi applikáció nevét", + "TITLE_ERROR": "A kezdőlapi applikáció nevének megadása kötelező", + "URL_LABEL": "Végpont", + "URL_PLACEHOLDER": "Add meg azt a végpont URL-jét, ahol az alkalmazást tárolják", + "URL_ERROR": "Érvényes URL megadása kötelező" + }, + "CREATE": { + "HEADER": "Új kezdőlapi applikáció hozzáadása", + "FORM_SUBMIT": "Elküldés", + "FORM_CANCEL": "Mégse", + "API_SUCCESS": "Kezdőlapi applikációk sikeresen konfigurálva", + "API_ERROR": "Nem tudtuk megjeleníteni az appot, kérlek próbáld újra" + }, + "UPDATE": { + "HEADER": "Kezdőlapi app szerkesztése", + "FORM_SUBMIT": "Frissítés", + "FORM_CANCEL": "Mégse", + "API_SUCCESS": "Kezdőlapi applikációk sikeresen frissítve", + "API_ERROR": "Nem tudtuk frissíteni az appot, kérlek próbáld újra" + }, + "DELETE": { + "CONFIRM_YES": "Igen, töröld", + "CONFIRM_NO": "Nem, tartsd meg", + "TITLE": "Törlés megerősítése", + "MESSAGE": "Biztosan törölni szeretnéd az appot? ({appName}?", + "API_SUCCESS": "Kezdőlapi applikációk sikeresen törölve", + "API_ERROR": "Nem tudtuk törölni az appot, kérlek próbáld újra" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "Fetching linear issues...", + "LOADING_ERROR": "There was an error fetching the linear issues, please try again", + "CREATE": "Létrehozás", + "LINK": { + "SEARCH": "Search issues", + "SELECT": "Select issue", + "TITLE": "Link", + "EMPTY_LIST": "No linear issues found", + "LOADING": "Loading", + "ERROR": "There was an error fetching the linear issues, please try again", + "LINK_SUCCESS": "Issue linked successfully", + "LINK_ERROR": "There was an error linking the issue, please try again", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "Create Linear issues from conversations, or link existing ones for seamless tracking.", + "FORM": { + "TITLE": { + "LABEL": "Cím", + "PLACEHOLDER": "Enter title", + "REQUIRED_ERROR": "Cím megadása kötelező" + }, + "DESCRIPTION": { + "LABEL": "Leírás", + "PLACEHOLDER": "Enter description" + }, + "TEAM": { + "LABEL": "Csapat", + "PLACEHOLDER": "Csapat kiválasztása", + "SEARCH": "Search team", + "REQUIRED_ERROR": "Team is required" + }, + "ASSIGNEE": { + "LABEL": "Assignee", + "PLACEHOLDER": "Select assignee", + "SEARCH": "Search assignee" + }, + "PRIORITY": { + "LABEL": "Prioritás", + "PLACEHOLDER": "Prioritás megadása", + "SEARCH": "Search priority" + }, + "LABEL": { + "LABEL": "Cimke", + "PLACEHOLDER": "Select label", + "SEARCH": "Search label" + }, + "STATUS": { + "LABEL": "Státusz", + "PLACEHOLDER": "Select status", + "SEARCH": "Search status" + }, + "PROJECT": { + "LABEL": "Project", + "PLACEHOLDER": "Select project", + "SEARCH": "Search project" + } + }, + "CREATE": "Létrehozás", + "CANCEL": "Mégse", + "CREATE_SUCCESS": "Issue created successfully", + "CREATE_ERROR": "There was an error creating the issue, please try again", + "LOADING_TEAM_ERROR": "There was an error fetching the teams, please try again", + "LOADING_TEAM_ENTITIES_ERROR": "There was an error fetching the team entities, please try again" + }, + "ISSUE": { + "STATUS": "Státusz", + "PRIORITY": "Prioritás", + "ASSIGNEE": "Assignee", + "LABELS": "Cimkék", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Unlink", + "SUCCESS": "Issue unlinked successfully", + "ERROR": "There was an error unlinking the issue, please try again" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Igen, törlés", + "CANCEL": "Mégse" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Igen, törlés", + "CANCEL": "Mégse" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "Üzenet elküldése...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Captain is thinking", + "YOU": "Ön", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "Ön", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "Gépeld be üzeneted...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "Mégse", + "CREATE": "Létrehozás", + "EDIT": "Frissítés" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Igen, törlés", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "Frissítés", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "Lehetőségek", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "Név", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "Leírás", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "Lehetőségek", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "Beállítások", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Törlés" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "Létrehozás", + "CANCEL": "Mégse", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Törlés" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "Létrehozás", + "CANCEL": "Mégse", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Törlés" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Cím", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "Leírás", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "Létrehozás", + "CANCEL": "Mégse" + } + } + }, + "UPDATE": { + "CANCEL": "Mégse", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Igen, törlés", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Igen, törlés", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "Leírás", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "Nincs", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "API kulcs" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "Jelszó", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Típus" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Szám", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Kötelező" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "Törlés", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Igen, törlés", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "Mind" + }, + "STATUS": { + "TITLE": "Státusz", + "PENDING": "Függőben lévő", + "APPROVED": "Approved", + "ALL": "Mind" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "Szerkesztés", + "DELETE_RESPONSE": "Törlés" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Leválasztás" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Igen, törlés", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "Fiók", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/hu/labelsMgmt.json new file mode 100644 index 0000000..a3ca1b3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Cimkék", + "HEADER_BTN_TXT": "Cimke hozzáadása", + "LOADING": "Cimkék letöltése", + "DESCRIPTION": "Labels help you categorize and prioritize conversations and leads. You can assign a label to a conversation or contact using the side panel.", + "LEARN_MORE": "Learn more about labels", + "SEARCH_404": "Nincs megfelelő elem", + "LIST": { + "404": "Nincs megfelelő cimke ebben a fiókban.", + "TITLE": "Cimkék kezelése", + "DESC": "A cimkék a beszélgetések csoportokba rendezését segítik.", + "TABLE_HEADER": { + "NAME": "Név", + "DESCRIPTION": "Leírás", + "COLOR": "Szín" + } + }, + "FORM": { + "NAME": { + "LABEL": "Cimke neve", + "PLACEHOLDER": "Cimke neve", + "REQUIRED_ERROR": "A cimke nevének megadása kötelező", + "MINIMUM_LENGTH_ERROR": "Minimum 2 karakter hosszúnak kell lennie", + "VALID_ERROR": "Kizárólag betűk, számok, kötőjel és alulvonás szerepelhet" + }, + "DESCRIPTION": { + "LABEL": "Leírás", + "PLACEHOLDER": "Cimke leírás" + }, + "COLOR": { + "LABEL": "Szín" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Cimke megjelenítése az oldalsávban" + }, + "EDIT": "Szerkesztés", + "CREATE": "Létrehozás", + "DELETE": "Törlés", + "CANCEL": "Mégse" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Címke hozzáadása a beszélgetéshez", + "MULTIPLE_SUGGESTION": "Válassza ki ezt a címkét", + "DESELECT": "Címke kijelölésének megszüntetése", + "DISMISS": "Javaslatok kihagyása" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Elutasítás", + "ADD_SELECTED_LABELS": "Kijelölt címkék hozzáadása", + "ADD_SELECTED_LABEL": "Kijelölt címke hozzáadása", + "ADD_ALL_LABELS": "Minden címke hozzáadása", + "SUGGESTED_LABELS": "Suggested labels" + }, + "ADD": { + "TITLE": "Cimke hozzáadása", + "DESC": "A cimkék a beszélgetések csoportokba rendezését segítik.", + "API": { + "SUCCESS_MESSAGE": "Cimke sikeresen hozzáadva", + "ERROR_MESSAGE": "Hiba történt, kérjük próbáld újra" + } + }, + "EDIT": { + "TITLE": "Cimke szerkesztése", + "API": { + "SUCCESS_MESSAGE": "Cimke sikeresen frissítve", + "ERROR_MESSAGE": "Hiba történt, kérjük próbáld újra" + } + }, + "DELETE": { + "BUTTON_TEXT": "Törlés", + "API": { + "SUCCESS_MESSAGE": "Cimke sikeresen törölve", + "ERROR_MESSAGE": "Hiba történt, kérjük próbáld újra" + }, + "CONFIRM": { + "TITLE": "Törlés Megerősítése", + "MESSAGE": "Biztos abban, hogy törli ", + "YES": "Igen, Törlés ", + "NO": "Nem, Mégse " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/login.json b/app/javascript/dashboard/i18n/locale/hu/login.json new file mode 100644 index 0000000..3bd5128 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Chatwoot belépés", + "EMAIL": { + "LABEL": "E-mail", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "Kérjük helyes e-mailcímet adj meg" + }, + "PASSWORD": { + "LABEL": "Jelszó", + "PLACEHOLDER": "Jelszó" + }, + "API": { + "SUCCESS_MESSAGE": "Bejelentkezés sikeres", + "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később", + "UNAUTH": "A felhasználó / jelszó helytelen. Kérjük próbálja újra" + }, + "OAUTH": { + "GOOGLE_LOGIN": "Bejelentkezés Google-el", + "BUSINESS_ACCOUNTS_ONLY": "Kérlek a céges email címed használd bejelentkezéshez", + "NO_ACCOUNT_FOUND": "Nem található fiók az email címedhez." + }, + "FORGOT_PASSWORD": "Elfelejtetted a jelszavad?", + "CREATE_NEW_ACCOUNT": "Új fiók létrehozása", + "SUBMIT": "Bejelentkezés", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/macros.json b/app/javascript/dashboard/i18n/locale/hu/macros.json new file mode 100644 index 0000000..3c8d0e9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Makrók", + "DESCRIPTION": "A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click.", + "LEARN_MORE": "Learn more about macros", + "HEADER_BTN_TXT": "Új makró hozzáadása", + "HEADER_BTN_TXT_SAVE": "Makró mentése", + "LOADING": "Makrók lekérdezése", + "ERROR": "Valami elromlott, kérjük töltsd próbáld újra", + "ORDER_INFO": "A makrók a műveletek hozzáadásának sorrendjében fognak futni. A makrókat áthúzással át tudod rendezni.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Makró neve", + "PLACEHOLDER": "Írd ide a makród nevét", + "ERROR": "Név megadása szükséges a makró létrehozásához" + }, + "ACTIONS": { + "LABEL": "Műveletek" + } + }, + "API": { + "SUCCESS_MESSAGE": "Makró sikeresen hozzáadva", + "ERROR_MESSAGE": "Nem lehet létrehozni a makrót. Kérlek, próbáld újra később" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Név", + "CREATED BY": "Létrehozta", + "LAST_UPDATED_BY": "Utoljára szerkesztette:", + "VISIBILITY": "Láthatóság" + }, + "404": "Nem találtunk makrót" + }, + "DELETE": { + "TOOLTIP": "Makró törlése", + "CONFIRM": { + "MESSAGE": "Biztos abban, hogy törli ", + "YES": "Igen, Törlés", + "NO": "Nem" + }, + "API": { + "SUCCESS_MESSAGE": "Makró sikeresen törölve", + "ERROR_MESSAGE": "Hiba történt a makró törlése közben. Kérlek próbáld újra később" + } + }, + "EDIT": { + "TOOLTIP": "Makró szerkesztése", + "API": { + "SUCCESS_MESSAGE": "Makró frissítve", + "ERROR_MESSAGE": "Nem sikerült frissíteni a makrót, kérlek próbáld újra később" + } + }, + "EDITOR": { + "START_FLOW": "Flow indítása", + "END_FLOW": "Flow befejezése", + "LOADING": "Makró betöltése", + "ADD_BTN_TOOLTIP": "Akció hozzáadása", + "DELETE_BTN_TOOLTIP": "Akció törlése", + "VISIBILITY": { + "LABEL": "Makró láthatósága", + "GLOBAL": { + "LABEL": "Nyilvános", + "DESCRIPTION": "Ez a makró nyilvánosan elérhető minden ügynök számára ebben a fiókban." + }, + "PERSONAL": { + "LABEL": "Privát", + "DESCRIPTION": "Ez a makró privát, csak Te látod és nem lesz elérhető mások számára." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Futtatás", + "PREVIEW": "Makró előnézet", + "EXECUTED_SUCCESSFULLY": "Makró végrehajtása sikeres" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Kötelező megadni", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Assign a Team", + "ASSIGN_AGENT": "Assign an Agent", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Beszélgetés elnémítása", + "SNOOZE_CONVERSATION": "Beszélgetés alvómódba", + "RESOLVE_CONVERSATION": "Beszélgetés megoldása", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "CHANGE_PRIORITY": "Prioritás megváltoztatása", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "SEND_WEBHOOK_EVENT": "Send Webhook Event" + }, + "PRIORITY_TYPES": { + "NONE": "Nincs", + "LOW": "Alacsony", + "MEDIUM": "Közepes", + "HIGH": "Magas", + "URGENT": "Sürgős" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/mfa.json b/app/javascript/dashboard/i18n/locale/hu/mfa.json new file mode 100644 index 0000000..4796562 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "Engedélyezve", + "DISABLED": "Letiltva", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Loading...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "Másolás", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "Mégse", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "Letöltés", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "Jelszó", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "Mégse", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "Mégse", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/report.json b/app/javascript/dashboard/i18n/locale/hu/report.json new file mode 100644 index 0000000..45e014b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Beszélgetések", + "LOADING_CHART": "Táblázat adatok betöltése...", + "NO_ENOUGH_DATA": "Nem érkezett elég adat hogy jelentést generáljunk, kérjük próbáld később.", + "DOWNLOAD_AGENT_REPORTS": "Ügynök jelentések letöltése", + "DATA_FETCHING_FAILED": "Sikertelen adatlekérés, kérlek próbáld újra később.", + "SUMMARY_FETCHING_FAILED": "Sikertelen összefoglaló lekérés, kérlek próbáld újra később.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Beszélgetések", + "DESC": "( Teljes )" + }, + "INCOMING_MESSAGES": { + "NAME": "Beérkező üznetek", + "DESC": "( Teljes )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Kimenő üzenetek", + "DESC": "( Teljes )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Első reakció idő", + "DESC": "( Átlag )", + "INFO_TEXT": "A számításhoz felhasznált beszélgetések száma:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Megoldási idő", + "DESC": "( Átlag )", + "INFO_TEXT": "A számításhoz felhasznált beszélgetések száma:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Megoldások száma", + "DESC": "( Teljes )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Megoldások száma", + "DESC": "( Teljes )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Handoff Count", + "DESC": "( Teljes )" + }, + "REPLY_TIME": { + "NAME": "Vevő várakozási idő", + "TOOLTIP_TEXT": "Waiting time is {metricValue} (based on {conversationCount} replies)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "Utolsó 7 nap", + "LAST_14_DAYS": "Utolsó 14 nap", + "LAST_30_DAYS": "Utolsó 30 nap", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "Elmúlt 3 hónapban", + "LAST_6_MONTHS": "Elmúlt 6 hónapban", + "LAST_YEAR": "Elmúlt 1 évben", + "CUSTOM_DATE_RANGE": "Egyedi időszak" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Alkalmaz", + "PLACEHOLDER": "Dátumtartomány kiválasztása" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Csoportosítás", + "DURATION_FILTER_LABEL": "Időszak", + "GROUPING_OPTIONS": { + "DAY": "Nap", + "WEEK": "Hét", + "MONTH": "Hónap", + "YEAR": "Év" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Nap" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Nap" + }, + { + "id": 2, + "groupBy": "Hét" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Nap" + }, + { + "id": 2, + "groupBy": "Hét" + }, + { + "id": 3, + "groupBy": "Hónap" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "BUSINESS_HOURS": "Nyitvatartás", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Nincs találat" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Ügynök áttekintés", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "Táblázat adatok betöltése...", + "NO_ENOUGH_DATA": "Nem érkezett elég adat hogy jelentést generáljunk, kérjük próbáld később.", + "DOWNLOAD_AGENT_REPORTS": "Ügynök jelentések letöltése", + "FILTER_DROPDOWN_LABEL": "Ügynök kiválasztása", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Beszélgetések", + "DESC": "( Teljes )" + }, + "INCOMING_MESSAGES": { + "NAME": "Beérkező üznetek", + "DESC": "( Teljes )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Kimenő üzenetek", + "DESC": "( Teljes )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Első reakció idő", + "DESC": "( Átlag )", + "INFO_TEXT": "A számításhoz felhasznált beszélgetések száma:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Megoldási idő", + "DESC": "( Átlag )", + "INFO_TEXT": "A számításhoz felhasznált beszélgetések száma:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Megoldások száma", + "DESC": "( Teljes )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Utolsó 7 nap" + }, + { + "id": 1, + "name": "Utolsó 30 nap" + }, + { + "id": 2, + "name": "Elmúlt 3 hónapban" + }, + { + "id": 3, + "name": "Elmúlt 6 hónapban" + }, + { + "id": 4, + "name": "Elmúlt 1 évben" + }, + { + "id": 5, + "name": "Egyedi időszak" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Alkalmaz", + "PLACEHOLDER": "Dátumtartomány kiválasztása" + } + }, + "LABEL_REPORTS": { + "HEADER": "Címkék áttekintése", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "Táblázat adatok betöltése...", + "NO_ENOUGH_DATA": "Nem érkezett elég adat hogy jelentést generáljunk, kérjük próbáld később.", + "DOWNLOAD_LABEL_REPORTS": "Címkejelentések letöltése", + "FILTER_DROPDOWN_LABEL": "Cimke választása", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Beszélgetések", + "DESC": "( Teljes )" + }, + "INCOMING_MESSAGES": { + "NAME": "Beérkező üznetek", + "DESC": "( Teljes )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Kimenő üzenetek", + "DESC": "( Teljes )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Első reakció idő", + "DESC": "( Átlag )", + "INFO_TEXT": "A számításhoz felhasznált beszélgetések száma:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Megoldási idő", + "DESC": "( Átlag )", + "INFO_TEXT": "A számításhoz felhasznált beszélgetések száma:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Megoldások száma", + "DESC": "( Teljes )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Utolsó 7 nap" + }, + { + "id": 1, + "name": "Utolsó 30 nap" + }, + { + "id": 2, + "name": "Elmúlt 3 hónapban" + }, + { + "id": 3, + "name": "Elmúlt 6 hónapban" + }, + { + "id": 4, + "name": "Elmúlt 1 évben" + }, + { + "id": 5, + "name": "Egyedi időszak" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Alkalmaz", + "PLACEHOLDER": "Dátumtartomány kiválasztása" + } + }, + "INBOX_REPORTS": { + "HEADER": "Beérkezett üzenetek áttekintése", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "Táblázat adatok betöltése...", + "NO_ENOUGH_DATA": "Nem érkezett elég adat hogy jelentést generáljunk, kérjük próbáld később.", + "DOWNLOAD_INBOX_REPORTS": "Beérkezett üzenetek letöltése", + "FILTER_DROPDOWN_LABEL": "Válassz egy fiókot", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Beszélgetések", + "DESC": "( Teljes )" + }, + "INCOMING_MESSAGES": { + "NAME": "Beérkező üznetek", + "DESC": "( Teljes )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Kimenő üzenetek", + "DESC": "( Teljes )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Első reakció idő", + "DESC": "( Átlag )", + "INFO_TEXT": "A számításhoz felhasznált beszélgetések száma:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Megoldási idő", + "DESC": "( Átlag )", + "INFO_TEXT": "A számításhoz felhasznált beszélgetések száma:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Megoldások száma", + "DESC": "( Teljes )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Utolsó 7 nap" + }, + { + "id": 1, + "name": "Utolsó 30 nap" + }, + { + "id": 2, + "name": "Elmúlt 3 hónapban" + }, + { + "id": 3, + "name": "Elmúlt 6 hónapban" + }, + { + "id": 4, + "name": "Elmúlt 1 évben" + }, + { + "id": 5, + "name": "Egyedi időszak" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Alkalmaz", + "PLACEHOLDER": "Dátumtartomány kiválasztása" + } + }, + "TEAM_REPORTS": { + "HEADER": "Csapat áttekintés", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "Táblázat adatok betöltése...", + "NO_ENOUGH_DATA": "Nem érkezett elég adat hogy jelentést generáljunk, kérjük próbáld később.", + "DOWNLOAD_TEAM_REPORTS": "Csapat riport letöltése", + "FILTER_DROPDOWN_LABEL": "Csapat kiválasztása", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Beszélgetések", + "DESC": "( Teljes )" + }, + "INCOMING_MESSAGES": { + "NAME": "Beérkező üznetek", + "DESC": "( Teljes )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Kimenő üzenetek", + "DESC": "( Teljes )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Első reakció idő", + "DESC": "( Átlag )", + "INFO_TEXT": "A számításhoz felhasznált beszélgetések száma:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Megoldási idő", + "DESC": "( Átlag )", + "INFO_TEXT": "A számításhoz felhasznált beszélgetések száma:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Megoldások száma", + "DESC": "( Teljes )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Utolsó 7 nap" + }, + { + "id": 1, + "name": "Utolsó 30 nap" + }, + { + "id": 2, + "name": "Elmúlt 3 hónapban" + }, + { + "id": 3, + "name": "Elmúlt 6 hónapban" + }, + { + "id": 4, + "name": "Elmúlt 1 évben" + }, + { + "id": 5, + "name": "Egyedi időszak" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Alkalmaz", + "PLACEHOLDER": "Dátumtartomány kiválasztása" + } + }, + "CSAT_REPORTS": { + "HEADER": "CSAT riportok", + "NO_RECORDS": "Nem állnak rendelkezésre CSAT-felmérés válaszai.", + "DOWNLOAD": "CSAT jelentés letöltése", + "DOWNLOAD_FAILED": "Sikertelen a CSAT jelentés letöltése", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Ügynökök választása" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Kontakt", + "AGENT_NAME": "Hozzárendelt ügynök", + "RATING": "Értékelés", + "FEEDBACK_TEXT": "Visszajelző komment" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Összes válasz", + "TOOLTIP": "Összegyűjtött válaszok száma" + }, + "SATISFACTION_SCORE": { + "LABEL": "Elégedettségi pontszám", + "TOOLTIP": "Pozitív válaszok teljes száma / Válaszok teljes száma * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Válaszarány", + "TOOLTIP": "Válaszok teljes száma / Az elküldött CSAT felmérési üzenetek teljes száma * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Bot Reports", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "No. of Conversations", + "TOOLTIP": "Total number of conversations handled by the bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total Responses", + "TOOLTIP": "Total number of responses sent by the bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Resolution Rate", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Handoff Rate", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Áttekintés", + "LIVE": "Élő", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Beszélgetések megnyitása", + "LOADING_MESSAGE": "Beszélgetési metrikák betöltése...", + "OPEN": "Megnyitás", + "UNATTENDED": "Figyelmen kívül hagyott", + "UNASSIGNED": "Gazdátlan", + "PENDING": "Függőben lévő" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Beszélgetés forgalom", + "NO_CONVERSATIONS": "Nincsennek beszélgetések", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "Nincsennek beszélgetések", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Ügynökök által kezelt beszélgetések", + "LOADING_MESSAGE": "Ügynökök betöltése...", + "NO_AGENTS": "Nincsennek ügynökök általi beszélgetések", + "TABLE_HEADER": { + "AGENT": "Ügynök", + "OPEN": "Megnyitás", + "UNATTENDED": "Figyelmen kívül hagyott", + "STATUS": "Státusz" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Csapat", + "OPEN": "Megnyitás", + "UNATTENDED": "Figyelmen kívül hagyott", + "STATUS": "Státusz" + } + }, + "AGENT_STATUS": { + "HEADER": "Ügynök státusz", + "ONLINE": "Online", + "BUSY": "Foglalt", + "OFFLINE": "Offline" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "vasárnap", + "MONDAY": "hétfő", + "TUESDAY": "kedd", + "WEDNESDAY": "szerda", + "THURSDAY": "csütörtök", + "FRIDAY": "péntek", + "SATURDAY": "szombat" + }, + "SLA_REPORTS": { + "HEADER": "SLA Reports", + "NO_RECORDS": "SLA applied conversations are not available.", + "LOADING": "Loading SLA data...", + "DOWNLOAD_SLA_REPORTS": "Download SLA reports", + "DOWNLOAD_FAILED": "Failed to download SLA Reports", + "DROPDOWN": { + "ADD_FIlTER": "Szűrő hozzáadása", + "CLEAR_ALL": "Clear all", + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Nincs találat", + "NO_FILTER": "No filters available", + "SEARCH": "Search filter", + "INPUT_PLACEHOLDER": { + "SLA": "SLA name", + "AGENTS": "Ügynök neve", + "INBOXES": "Fiók név", + "LABELS": "Cimke neve", + "TEAMS": "Csapatnév" + }, + "SLA": "SLA Policy", + "INBOXES": "Fiók", + "AGENTS": "Ügynök", + "LABELS": "Cimke", + "TEAMS": "Csapat" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentage of SLAs created were completed successfully" + }, + "NO_OF_MISSES": { + "LABEL": "Number of Misses", + "TOOLTIP": "Total SLA misses in a certain period" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Number of Conversations", + "TOOLTIP": "Total number of conversations with SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "Beszélgetés", + "AGENT": "Ügynök" + }, + "VIEW_DETAILS": "View Details" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Fiók", + "AGENT": "Ügynök", + "TEAM": "Csapat", + "LABEL": "Cimke", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "Megoldások száma", + "CONVERSATIONS": "Beszélgetések száma" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/resetPassword.json b/app/javascript/dashboard/i18n/locale/hu/resetPassword.json new file mode 100644 index 0000000..d6209a3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Jelszó megváltoztatása", + "DESCRIPTION": "Adja meg a Chatwootba való bejelentkezéshez használt e-mail címét, hogy megkapja a jelszó-visszaállítási utasításokat.", + "GO_BACK_TO_LOGIN": "Ha vissza szeretne térni a bejelentkezési oldalra,", + "EMAIL": { + "LABEL": "E-mail", + "PLACEHOLDER": "Kérjük add meg az e-mailcímed.", + "ERROR": "Kérjük helyes e-mailcímet adj meg." + }, + "API": { + "SUCCESS_MESSAGE": "A jelszó helyreállító linket e-mailben elküldtük.", + "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" + }, + "SUBMIT": "Elküldés" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/search.json b/app/javascript/dashboard/i18n/locale/hu/search.json new file mode 100644 index 0000000..ddba63e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "Kontaktok", + "CONVERSATIONS": "Beszélgetések", + "MESSAGES": "Üzenetek", + "ARTICLES": "Articles" + }, + "SECTION": { + "CONTACTS": "Kontaktok", + "CONVERSATIONS": "Beszélgetések", + "MESSAGES": "Üzenetek", + "ARTICLES": "Articles" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "Keresés", + "LOADING_DATA": "Loading", + "EMPTY_STATE": "Nem található {item}, a keresésre: '{query}'", + "EMPTY_STATE_FULL": "Nincs eredménye a következő keresésnek: '{query}'", + "PLACEHOLDER_KEYBINDING": "/a fókuszáláshoz", + "INPUT_PLACEHOLDER": "Search messages, contacts or conversations", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Clear all", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Search by conversation id, email, phone number, messages for better search results.", + "BOT_LABEL": "Bot", + "READ_MORE": "Tudj meg többet", + "READ_LESS": "Read less", + "WROTE": "írta:", + "FROM": "Innen", + "EMAIL": "E-mail", + "EMAIL_SUBJECT": "Tárgy", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "Utolsó 7 nap", + "LAST_30_DAYS": "Utolsó 30 nap", + "LAST_60_DAYS": "Utolsó 60 nap", + "LAST_90_DAYS": "Utolsó 90 nap", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "Alkalmaz", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Clear filter" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Küldő", + "IN": "Fiók", + "AGENTS": "Ügynökök", + "CONTACTS": "Kontaktok", + "INBOXES": "Fiókok", + "NO_AGENTS": "Nem találunk ügynököt", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/setNewPassword.json b/app/javascript/dashboard/i18n/locale/hu/setNewPassword.json new file mode 100644 index 0000000..6e34ca6 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Új jelszó megadása", + "PASSWORD": { + "LABEL": "Jelszó", + "PLACEHOLDER": "Jelszó", + "ERROR": "A jelszó túl rövid." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Jelszó megerősítése", + "PLACEHOLDER": "Jelszó megerősítése", + "ERROR": "A jelszavak nem egyeznek." + }, + "API": { + "SUCCESS_MESSAGE": "Jelszó sikeresen megváltoztatva.", + "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" + }, + "CAPTCHA": { + "ERROR": "Az időlimit lejárt, kérlek oldd meg újra a captchát." + }, + "SUBMIT": "Elküldés" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/settings.json b/app/javascript/dashboard/i18n/locale/hu/settings.json new file mode 100644 index 0000000..b5e46e8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Profilbeállítások", + "TITLE": "Profilbeállítások", + "BTN_TEXT": "Profil frissítése", + "DELETE_AVATAR": "Avatár Törlése", + "AVATAR_DELETE_SUCCESS": "Az avatár sikeresen törlésre került", + "AVATAR_DELETE_FAILED": "Hiba lépett fel az avatár törlése során, kérjük próbáld újra", + "UPDATE_SUCCESS": "A fiókod sikeresen frissítetted", + "PASSWORD_UPDATE_SUCCESS": "A jelszavad sikeresen megváltoztattad", + "AFTER_EMAIL_CHANGED": "A profilod sikeresen frissítésre került, kérjük lépj be újra, mivel megváltoztak a belépési adataid", + "FORM": { + "PICTURE": "Profile Picture", + "AVATAR": "Profilkép", + "ERROR": "Kérjük javítsd ki az űrlaphibákat", + "REMOVE_IMAGE": "Eltávolítás", + "UPLOAD_IMAGE": "Kép feltöltése", + "UPDATE_IMAGE": "Kép frissítése", + "PROFILE_SECTION": { + "TITLE": "Profil", + "NOTE": "Az e-mailcímed az identitásod és a belépésre használhatod." + }, + "SEND_MESSAGE": { + "TITLE": "Üzenet küldése gyorsbillentyűvel", + "NOTE": "Kiválaszthatod a gyorsbillentyű kombinációdat a preferenciáid alapján.", + "UPDATE_SUCCESS": "A beállításaid sikeresen frissültek.", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Küldj üzenetet az Enter gomb megnyomásával a \"Küldés gomb\" használata helyett" + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Küldj üzenetet az Cmd/Ctrl + enter billentyűkombinációval a \"Küldés gomb\" használata helyett" + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Alapértelmezett", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Személyes üzenet aláírás", + "NOTE": "Hozzon létre egyedi üzenetaláírást, amely bármelyik postafiókból küldött üzenet végén megjelenik. Beilleszthet egy soron belüli képet is, amelyet az élő chat, az e-mail és az API bejövő üzenetek támogatnak.", + "BTN_TEXT": "Üzenet aláírás mentése", + "API_ERROR": "Nem sikerült menteni az aláírást! Próbáld újra", + "API_SUCCESS": "Aláírás sikeresen mentve", + "IMAGE_UPLOAD_ERROR": "A képet nem lehet betölteni! Próbálja újra", + "IMAGE_UPLOAD_SUCCESS": "A kép sikeresen hozzáadva. Az aláírás mentéséhez kattintson a mentésre", + "IMAGE_UPLOAD_SIZE_ERROR": "A kép mérete kevesebb, mint {size} MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Üzenet aláírás", + "ERROR": "Az üzenet aláírása nem maradhat üres", + "PLACEHOLDER": "Ide írd a személyes üzeneteid aláírását." + }, + "PASSWORD_SECTION": { + "TITLE": "Jelszó", + "NOTE": "A jelszó frissítása minden beléptetett eszközt kiléptet.", + "BTN_TEXT": "Jelszó megváltoztatása" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "Hozzáférési kulcs", + "NOTE": "Ez a kulcs akkor használható, ha API-alapú integrációt építesz", + "COPY": "Másolás", + "RESET": "Reset", + "CONFIRM_RESET": "Are you sure?", + "CONFIRM_HINT": "Click again to confirm", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Alerts", + "NOTE": "Enable audio alerts in dashboard for new messages and conversations.", + "PLAY": "Play sound", + "ALERT_TYPES": { + "NONE": "Nincs", + "MINE": "Assigned", + "ALL": "Mind", + "ASSIGNED": "My assigned conversations", + "UNASSIGNED": "Unassigned conversations", + "NOTME": "Open conversations assigned to others" + }, + "ALERT_COMBINATIONS": { + "NONE": "You haven't selected any options, you won't receive any audio alerts.", + "ASSIGNED": "You'll receive alerts for conversations assigned to you.", + "UNASSIGNED": "You'll receive alerts for any unassigned conversations.", + "NOTME": "You'll receive alerts for conversations assigned to others.", + "ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.", + "ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.", + "NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.", + "ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations." + }, + "ALERT_TYPE": { + "TITLE": "Alert events for conversations", + "NONE": "Nincs", + "ASSIGNED": "Hozzárendelt Beszélgetések", + "ALL_CONVERSATIONS": "Beszélgetések" + }, + "DEFAULT_TONE": { + "TITLE": "Hang figyelmeztetés:" + }, + "CONDITIONS": { + "TITLE": "Figyelmeztető feltételek:", + "CONDITION_ONE": "Csak akkor küldjön hangjelzést, ha a böngészőablak nem aktív", + "CONDITION_TWO": "Figyelmeztetések küldése 30 másodpercenként, amíg az összes hozzárendelt beszélgetést elolvasta" + }, + "SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.", + "READ_MORE": "Tudj meg többet" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "E-mail értesítések", + "NOTE": "Frissítsd az e-mail értesítési beállításaidat itt", + "CONVERSATION_ASSIGNMENT": "Küldj e-mail értesítéseket, amikor a beszélgetést hozzám rendelik", + "CONVERSATION_CREATION": "Küldj e-mail értesítéseket, amikor egy új beszélgetés létrejön", + "CONVERSATION_MENTION": "Küldj e-mail értesítéseket, amikor egy beszélgetésben megemlítenek", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Küldj e-mail értesítéseket, amikor egy hozzám rendelt beszélgetésben új üzenet érkezik", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Kapj e-mailt amikor egy üzenet létrejön egy hozzád rendelt beszélgetésben", + "SLA_MISSED_FIRST_RESPONSE": "Send email notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send email notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send email notifications when a conversation misses resolution SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Notification preferences", + "TYPE_TITLE": "Notification type", + "EMAIL": "E-mail", + "PUSH": "Push notification", + "TYPES": { + "CONVERSATION_CREATED": "A new conversation is created", + "CONVERSATION_ASSIGNED": "A conversation is assigned to you", + "CONVERSATION_MENTION": "You are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "A new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "A new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "A conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "A conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "A conversation misses resolution SLA" + }, + "BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them" + }, + "API": { + "UPDATE_SUCCESS": "Az értesítési beállításaid sikeresen frissítve", + "UPDATE_ERROR": "Egy hiba lépett fel a beállítások frissítése során, kérjük próbáld újra" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Push üzenetek", + "NOTE": "Frissítsd az push üzenet beállításaidat itt", + "CONVERSATION_ASSIGNMENT": "Küldj push üzeneteket, amikor a beszélgetést hozzám rendelik", + "CONVERSATION_CREATION": "Küldj push üzeneteket, amikor egy új beszélgetés létrejön", + "CONVERSATION_MENTION": "Küldj push üzeneteket, amikor egy beszélgetésben megemlítenek", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Küldj push üzeneteket, amikor egy hozzám rendelt beszélgetésben új üzenet érkezik", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Kapj push értesítést amikor egy üzenet létrejön egy hozzád rendelt beszélgetésben", + "HAS_ENABLED_PUSH": "Engedélyezted a push üzeneteket ezen a böngészőn.", + "REQUEST_PUSH": "Push üznetek engedélyezése", + "SLA_MISSED_FIRST_RESPONSE": "Send push notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send push notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send push notifications when a conversation misses resolution SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "Profilkép" + }, + "NAME": { + "LABEL": "A teljes neved", + "ERROR": "Kérjük helyes nevet adj meg", + "PLACEHOLDER": "Kérjük a teljes nevedet add meg" + }, + "DISPLAY_NAME": { + "LABEL": "Rövidnév", + "ERROR": "Kérjük helyes rövidnevet adj meg", + "PLACEHOLDER": "Kérjük add meg a rövidnevet amit a beszélgetésekben szeretnél megjeleníteni" + }, + "AVAILABILITY": { + "LABEL": "Elérhetőség", + "STATUS": { + "ONLINE": "Online", + "BUSY": "Foglalt", + "OFFLINE": "Offline" + }, + "SET_AVAILABILITY_SUCCESS": "Elérhetőség beállítása sikeres", + "SET_AVAILABILITY_ERROR": "Nem sikerült beállítani az elérhetőséget, kérlek, próbáld újra", + "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user" + }, + "EMAIL": { + "LABEL": "Az e-mailcímed", + "ERROR": "Kérjük helyes e-mailcímet adj meg", + "PLACEHOLDER": "Kérjük add meg az e-mailcímet amit a beszélgetésekben szeretnél megjeleníteni" + }, + "CURRENT_PASSWORD": { + "LABEL": "Jelenlegi jelszó", + "ERROR": "Kérjük add meg a jelenlegi jelszavad", + "PLACEHOLDER": "Kérjük add meg a jelenlegi jelszavad" + }, + "PASSWORD": { + "LABEL": "Új jelszó", + "ERROR": "Kérjük 6 karakternél hosszabb jelszót adj meg", + "PLACEHOLDER": "Kérjük adj meg egy új jelszót" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Jelszó megerősítése", + "ERROR": "A két jelszónak egyeznie kell", + "PLACEHOLDER": "Kérjük add meg egy ismét új jelszavad" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Megváltoztatás", + "CHANGE_ACCOUNTS": "Switch account", + "SWITCH_ACCOUNT": "Switch account", + "CONTACT_SUPPORT": "Contact support", + "SELECTOR_SUBTITLE": "Fiók kiválasztása az alábbi listából", + "PROFILE_SETTINGS": "Profile settings", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Keyboard shortcuts", + "APPEARANCE": "Change appearance", + "SUPER_ADMIN_CONSOLE": "SuperAdmin console", + "DOCS": "Read documentation", + "CHANGELOG": "Changelog", + "LOGOUT": "Log out" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "nap van hátra a próbaidőszakból.", + "TRAIL_BUTTON": "Előfizetés", + "DELETED_USER": "Törölt Felhasználó", + "EMAIL_VERIFICATION_PENDING": "It seems that you haven't verified your email address yet. Please check your inbox for the verification email.", + "RESEND_VERIFICATION_MAIL": "Resend verification email", + "EMAIL_VERIFICATION_SENT": "Verification email has been sent. Please check your inbox.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Felfüggesztett Fiók", + "MESSAGE": "A fiókod felfüggesztés alatt van. Bővebb információkért, kérlek, lépj kapcsolatba az ügfyélszolgálattal." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Log out" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Másolás", + "CODEPEN": "Megnyitás CodePen-ben", + "COPY_SUCCESSFUL": "Vágólapra másolva" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Mutass többet", + "SHOW_LESS": "Mutass kevesebbet" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "Letöltés", + "UPLOADING": "Feltöltés...", + "INSTAGRAM_STORY_UNAVAILABLE": "Ez a story már nem érhető el." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "Mutasd térképen" + }, + "FORM_BUBBLE": { + "SUBMIT": "Elküldés" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "This image is no longer available.", + "LOADING_FAILED": "Loading failed" + } + }, + "CONFIRM_EMAIL": "Ellenőrzés...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Inboxhoz adás" + } + }, + "SIDEBAR": { + "NO_ITEMS": "No items", + "CURRENTLY_VIEWING_ACCOUNT": "Jelenleg nézi:", + "SWITCH": "Váltás", + "INBOX_VIEW": "Inbox View", + "CONVERSATIONS": "Beszélgetések", + "INBOX": "My Inbox", + "ALL_CONVERSATIONS": "Beszélgetések", + "MENTIONED_CONVERSATIONS": "Megemlítések", + "PARTICIPATING_CONVERSATIONS": "Részvétel", + "UNATTENDED_CONVERSATIONS": "Figyelmen kívül hagyott", + "REPORTS": "Jelentések", + "SETTINGS": "Beállítások", + "CONTACTS": "Kontaktok", + "ACTIVE": "Aktív", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistants", + "CAPTAIN_DOCUMENTS": "Documents", + "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_TOOLS": "Tools", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "Fiókok", + "CAPTAIN_SETTINGS": "Beállítások", + "HOME": "Nyitólap", + "AGENTS": "Ügynökök", + "AGENT_BOTS": "Botok", + "AUDIT_LOGS": "Audit logok", + "INBOXES": "Bejövők", + "NOTIFICATIONS": "Értesítések", + "CANNED_RESPONSES": "Mentett válaszok", + "INTEGRATIONS": "Integrációk", + "PROFILE_SETTINGS": "Profilbeállítások", + "ACCOUNT_SETTINGS": "Fiókbeállítások", + "APPLICATIONS": "Alkalmazások", + "LABELS": "Cimkék", + "CUSTOM_ATTRIBUTES": "Egyedi atribútumok", + "AUTOMATION": "Automatizáció", + "MACROS": "Makrók", + "TEAMS": "Csapatok", + "BILLING": "Számlázás", + "CUSTOM_VIEWS_FOLDER": "Mappák", + "CUSTOM_VIEWS_SEGMENTS": "Szegmensek", + "ALL_CONTACTS": "Összes kontakt", + "TAGGED_WITH": "Megjelölés", + "NEW_LABEL": "Új cimke", + "NEW_TEAM": "Új csapat", + "NEW_INBOX": "Új fiók", + "REPORTS_CONVERSATION": "Beszélgetések", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Kampányok", + "ONGOING": "Folyamatban", + "ONE_OFF": "Egyszeri", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "Bot", + "REPORTS_AGENT": "Ügynökök", + "REPORTS_LABEL": "Cimkék", + "REPORTS_INBOX": "Fiók", + "REPORTS_TEAM": "Csapat", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "Ugrás a Beszélgetések Irányítópultjához", + "SET_YOUR_AVAILABILITY": "Elérhetőség beállítása", + "SLA": "SLA", + "CUSTOM_ROLES": "Custom Roles", + "BETA": "Béta", + "REPORTS_OVERVIEW": "Áttekintés", + "REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages", + "HELP_CENTER": { + "TITLE": "Súgóközpont", + "ARTICLES": "Articles", + "CATEGORIES": "Kategóriák", + "LOCALES": "Nyelvek", + "SETTINGS": "Beállítások" + }, + "CHANNELS": "Csatornák", + "SET_AUTO_OFFLINE": { + "TEXT": "Offline állapot automatikusan", + "INFO_TEXT": "Hagyd, hogy a rendszer automatikusan offline módban jelöljön meg, amikor nem használod az alkalmazást vagy az irányítópultot.", + "INFO_SHORT": "Automatically mark offline when you aren't using the app." + }, + "DOCS": "Dokumentum olvasása", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "Számlázás", + "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "CURRENT_PLAN": { + "TITLE": "Aktuális előfizetés", + "PLAN_NOTE": "Jelenleg előfizetett a **{plan}** csomagra **{quantity}** licensszel", + "SEAT_COUNT": "Number of seats", + "RENEWS_ON": "Renews on" + }, + "VIEW_PRICING": "View Pricing", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Előfizetés kezelése", + "DESCRIPTION": "Korábbi számlák nézete, fizetési részletek szerkesztése, vagy az előfizetés törlése", + "BUTTON_TXT": "Ugrás a számlázási felületre" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Manage usage and credits for Captain AI.", + "BUTTON_TXT": "Buy more credits", + "DOCUMENTS": "Documents", + "RESPONSES": "Responses", + "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more.", + "REFRESH_CREDITS": "Frissítés" + }, + "CHAT_WITH_US": { + "TITLE": "Kell segítség?", + "DESCRIPTION": "Számlázási problémád akadt? Azért vagyunk itt, hogy segítsünk.", + "BUTTON_TXT": "Chatelj velünk" + }, + "NO_BILLING_USER": "Számlázási fiókod konfigurálás alatt áll. Kérjük, frissítsd az oldalt, és próbáld újra.", + "TOPUP": { + "BUY_CREDITS": "Buy more credits", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Megjegyzés:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "Mégse", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Vissza", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "Vágólapra másolva", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Uppsz! Nem találtunk egyetlen Chatwoot-fiókot sem. A folytatáshoz kérlek hozz létre egy új fiókot.", + "NEW_ACCOUNT": "Új fiók", + "SELECTOR_SUBTITLE": "Új fiók létrehozása", + "API": { + "SUCCESS_MESSAGE": "Ügynök sikeresen létrehozva", + "EXIST_MESSAGE": "A fiók már létezik", + "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" + }, + "FORM": { + "NAME": { + "LABEL": "Cégnév", + "PLACEHOLDER": "Kovács Kft." + }, + "SUBMIT": "Elküldés", + "CANCEL": "Mégse" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "Összes parancsikon nézete", + "TITLE": { + "OPEN_CONVERSATION": "Beszélgetés megnyitása", + "RESOLVE_AND_NEXT": "Feloldás és ugrás a következőre", + "NAVIGATE_DROPDOWN": "Ugrás a legördülő elemekhez", + "RESOLVE_CONVERSATION": "Beszélgetés megoldása", + "GO_TO_CONVERSATION_DASHBOARD": "Ugrás a beszélgetések kezdőoldalára", + "ADD_ATTACHMENT": "Csatolmány hozzáadása", + "GO_TO_CONTACTS_DASHBOARD": "Ugrás a kapcsolatok kezdőoldalára", + "TOGGLE_SIDEBAR": "Oldalsáv bekapcsolása", + "GO_TO_REPORTS_SIDEBAR": "Ugrás a jelentések oldalsávra", + "MOVE_TO_NEXT_TAB": "Ugrás a beszélgetéslista következő lapjára", + "GO_TO_SETTINGS": "Beállítások megnyitása", + "SWITCH_TO_PRIVATE_NOTE": "Válts privát jegyzetre", + "SWITCH_TO_REPLY": "Válts a válasz fülre", + "TOGGLE_SNOOZE_DROPDOWN": "Alvómód bekapcsolása a legördülő menüben" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "Prioritás", + "ACTIVE": "Aktív", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "Szerkesztés" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Mégse" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Leírás:", + "PLACEHOLDER": "Enter description" + }, + "STATUS": { + "LABEL": "Státusz:", + "PLACEHOLDER": "Select status", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "Hozzáadás" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "Szerkesztés" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Mégse" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Leírás:", + "PLACEHOLDER": "Enter description" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "Hozzáadás" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "Törlés", + "CANCEL_BUTTON_LABEL": "Mégse" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/signup.json b/app/javascript/dashboard/i18n/locale/hu/signup.json new file mode 100644 index 0000000..01e0cfa --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Fiók létrehozása", + "TITLE": "Regisztrálás", + "TESTIMONIAL_HEADER": "Már csak egy lépés van hátra", + "TESTIMONIAL_CONTENT": "Már csak egy lépésre vagy!", + "TERMS_ACCEPT": "A fiók létrehozásával elfogadod az ÁSZF és az Adatkezelési nyilatkozat tartalmát", + "OAUTH": { + "GOOGLE_SIGNUP": "Regisztráció Google-el" + }, + "COMPANY_NAME": { + "LABEL": "Cég neve", + "PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises", + "ERROR": "Company name is too short" + }, + "FULL_NAME": { + "LABEL": "Teljes név", + "PLACEHOLDER": "Add meg a teljes neved. Pl.: Kovács János", + "ERROR": "A teljes név túl rövid" + }, + "EMAIL": { + "LABEL": "Munkahelyi e-mail", + "PLACEHOLDER": "Enter your work email address. E.g., bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Please enter a valid work email address" + }, + "PASSWORD": { + "LABEL": "Jelszó", + "PLACEHOLDER": "Jelszó", + "ERROR": "A jelszó túl rövid", + "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Jelszó megerősítése", + "PLACEHOLDER": "Jelszó megerősítése", + "ERROR": "A jelszavak nem egyeznek." + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" + }, + "SUBMIT": "Fiók létrehozása", + "HAVE_AN_ACCOUNT": "Már van fiókod?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/sla.json b/app/javascript/dashboard/i18n/locale/hu/sla.json new file mode 100644 index 0000000..00f4ae8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Add SLA", + "ADD_ACTION_LONG": "Create a new SLA Policy", + "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", + "LEARN_MORE": "Learn more about SLA", + "LOADING": "Fetching SLAs", + "PAYWALL": { + "TITLE": "Upgrade to create SLAs", + "AVAILABLE_ON": "The SLA feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SLA feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no SLAs available in this account.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Issues raised by enterprise customers, that require immediate attention.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Issues raised by enterprise customers, that needs to be acknowledged quickly." + }, + "BUSINESS_HOURS_ON": "Business hours on", + "BUSINESS_HOURS_OFF": "Business hours off", + "RESPONSE_TYPES": { + "FRT": "First response time threshold", + "NRT": "Next response time threshold", + "RT": "Resolution time threshold", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA Name", + "PLACEHOLDER": "SLA Name", + "REQUIRED_ERROR": "SLA name is required", + "MINIMUM_LENGTH_ERROR": "Minimum 2 karakter hosszúnak kell lennie", + "VALID_ERROR": "Kizárólag betűk, számok, kötőjel és alulvonás szerepelhet" + }, + "DESCRIPTION": { + "LABEL": "Leírás", + "PLACEHOLDER": "SLA for premium customers" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "Első reakció idő", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Next Response Time", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "Megoldási idő", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Nyitvatartás", + "PLACEHOLDER": "Only during business hours" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Threshold should be a number and greater than zero" + }, + "EDIT": "Szerkesztés", + "CREATE": "Létrehozás", + "DELETE": "Törlés", + "CANCEL": "Mégse" + }, + "ADD": { + "TITLE": "Add SLA", + "DESC": "Friendly promises for great service!", + "API": { + "SUCCESS_MESSAGE": "SLA added successfully", + "ERROR_MESSAGE": "Hiba történt, kérjük próbáld újra" + } + }, + "DELETE": { + "TITLE": "Delete SLA", + "API": { + "SUCCESS_MESSAGE": "SLA deleted successfully", + "ERROR_MESSAGE": "Hiba történt, kérjük próbáld újra" + }, + "CONFIRM": { + "TITLE": "Törlés megerősítése", + "MESSAGE": "Are you sure you want to delete ", + "YES": "Igen, Törlés ", + "NO": "Nem, Mégse " + } + }, + "EVENTS": { + "TITLE": "SLA Misses", + "FRT": "Első reakció idő", + "NRT": "Next response time", + "RT": "Resolution time", + "SHOW_MORE": "{count} more", + "HIDE": "Hide {count} rows" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/teamsSettings.json b/app/javascript/dashboard/i18n/locale/hu/teamsSettings.json new file mode 100644 index 0000000..f6062b3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Új csapat hozzárendelése", + "HEADER": "Csapatok", + "LOADING": "Fetching teams", + "DESCRIPTION": "Teams allow you to organize agents into groups based on their responsibilities. An agent can belong to multiple teams. When working collaboratively, you can assign conversations to specific teams.", + "LEARN_MORE": "Learn more about teams", + "LIST": { + "404": "Ebben a fiókban nincs csapat létrehozva.", + "EDIT_TEAM": "Csapat szerkesztése", + "NONE": "Nincs" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Új csapat létrehozása", + "DESC": "Adj nevet és leírást az új csapatodhoz." + }, + "AGENTS": { + "BUTTON_TEXT": "Ügynökök hozzáadása a csapathoz", + "TITLE": "Ügynökök hozzárendelése a {teamName} csapathoz", + "DESC": "Adj hozzá ügynököket az újonan létrehozott csapatodhoz. Ez lehetővé teszi, hogy a csapatod a beszélgetéseken közösen dolgozzon és kapjon értesítést új eseményekről ezen beszélgetésekhez kapcsolódóan." + }, + "WIZARD_CREATE": { + "TITLE": "Létrehozás", + "BODY": "Hozz létre új csapatot az ügynökeidből." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "Ügynök Hozzádása", + "BODY": "Ügynökök hozzáadása a csapathoz." + }, + "WIZARD_FINISH": { + "TITLE": "Befejezés", + "BODY": "Mindennel készen állsz!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Szerkeszd a részleteidet", + "DESC": "Szerkesztd a csapat nevét és leírását.", + "BUTTON_TEXT": "Csapat frissítése" + }, + "AGENTS": { + "BUTTON_TEXT": "Ügynökök frissítése a csapatban", + "TITLE": "Ügynökök hozzárendelése a {teamName} csapathoz", + "DESC": "Adj ügynököket az újonan létrehozott csapatodhoz. Minden hozzáadott ügynök értesítést kap amikor egy beszélgetés a csapatához lesz rendelve." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Csapat részletek", + "ROUTE": "settings_teams_edit", + "BODY": "Változtass nevet, leírást és egyéb részleteket." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Ügynök szerkesztése", + "ROUTE": "settings_teams_edit_members", + "BODY": "A csapatod ügynökeinek szerkesztése." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Befejezés", + "ROUTE": "settings_teams_edit_finish", + "BODY": "Mindennel készen állsz!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Nem sikerült a csapat részleteinek mentése. Kérjük próbáld újra." + }, + "AGENTS": { + "AGENT": "ÜGYNÖK", + "EMAIL": "EMAIL", + "BUTTON_TEXT": "Ügynök Hozzádása", + "ADD_AGENTS": "Ügynökök hozzáadása a csapathoz...", + "SELECT": "kiválasztás", + "SELECT_ALL": "összes kiválasztása", + "SELECTED_COUNT": "{selected} a {total}-ból kiválasztva." + }, + "ADD": { + "TITLE": "Ügynökök hozzárendelése a {teamName} csapathoz", + "DESC": "Adj hozzá ügynököket az újonan létrehozott csapatodhoz. Ez lehetővé teszi, hogy a csapatod a beszélgetéseken közösen dolgozzon és kapjon értesítést új eseményekről ezen beszélgetésekhez kapcsolódóan.", + "SELECT": "kiválasztás", + "SELECT_ALL": "összes kiválasztása", + "SELECTED_COUNT": "{selected} a {total}-ból kiválasztva.", + "BUTTON_TEXT": "Ügynök Hozzádása", + "AGENT_VALIDATION_ERROR": "Kérlek válassz ki legalább egy ügynököt." + }, + "FINISH": { + "TITLE": "A csapatod kész!", + "MESSAGE": "Most már tudtok csapatként együttműköni beszélgetéseken. Kellemes támogatást ", + "BUTTON_TEXT": "Befejezés" + }, + "DELETE": { + "BUTTON_TEXT": "Törlés", + "API": { + "SUCCESS_MESSAGE": "Csapat sikeresen törölve.", + "ERROR_MESSAGE": "Nem sikerült a csapat törlés. Próbáld újra." + }, + "CONFIRM": { + "TITLE": "Are you sure you want to delete the team?", + "PLACE_HOLDER": "Kérlek gépeld be, hogy {teamName} a megerősítéshez", + "MESSAGE": "A csapat letörlése a hozzárendelt beszélgetéseket is eltávolítja.", + "YES": "Törlés ", + "NO": "Mégse" + } + }, + "SETTINGS": "Beállítások", + "FORM": { + "UPDATE": "Csapat frissítése", + "CREATE": "Új csapat létrehozása", + "NAME": { + "LABEL": "Csapatnév", + "PLACEHOLDER": "Példa: Értékesítés, ügyféltámogatás" + }, + "DESCRIPTION": { + "LABEL": "Csapat leírás", + "PLACEHOLDER": "Rövid csapatleírás." + }, + "AUTO_ASSIGN": { + "LABEL": "Automatikus hozzárendelés ehhez a csapathoz." + }, + "SUBMIT_CREATE": "Új csapat létrehozása" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/webhooks.json b/app/javascript/dashboard/i18n/locale/hu/webhooks.json new file mode 100644 index 0000000..17d5d8b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Webhook beállítások" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/hu/whatsappTemplates.json new file mode 100644 index 0000000..addcfe0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Whatsapp sablonok", + "SUBTITLE": "Válaszd ki a Whatsapp sablont", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Sablon keresése", + "NO_TEMPLATES_FOUND": "Nem található sablon erre:", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Kategória", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Nyelv", + "TEMPLATE_BODY": "Sablon törzse", + "CATEGORY": "Kategória" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Változók", + "LANGUAGE": "Nyelv", + "CATEGORY": "Kategória", + "VARIABLE_PLACEHOLDER": "Add meg a {variable} értékét", + "GO_BACK_LABEL": "Vissza", + "SEND_MESSAGE_LABEL": "Üzenet küldése", + "FORM_ERROR_MESSAGE": "Kérlek add meg az összes változó értékét küldés előtt", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hu/yearInReview.json b/app/javascript/dashboard/i18n/locale/hu/yearInReview.json new file mode 100644 index 0000000..fb360ca --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hu/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "Bezárás", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "beszélgetések", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "Letöltés", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "Share conversation" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/advancedFilters.json b/app/javascript/dashboard/i18n/locale/hy/advancedFilters.json new file mode 100644 index 0000000..a991cb2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Filter conversations", + "SUBTITLE": "Add your filters below and hit 'Apply filters' to cut through the chat clutter.", + "EDIT_CUSTOM_FILTER": "Edit Folder", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your folder.", + "ADD_NEW_FILTER": "Add filter", + "FILTER_DELETE_ERROR": "Oops, looks like we can't save nothing! Please add at least one filter to save it.", + "SUBMIT_BUTTON_LABEL": "Apply filters", + "UPDATE_BUTTON_LABEL": "Update folder", + "CANCEL_BUTTON_LABEL": "Cancel", + "CLEAR_BUTTON_LABEL": "Clear filters", + "FOLDER_LABEL": "Folder Name", + "FOLDER_QUERY_LABEL": "Folder Query", + "EMPTY_VALUE_ERROR": "Value is required.", + "TOOLTIP_LABEL": "Filter conversations", + "QUERY_DROPDOWN_LABELS": { + "AND": "AND", + "OR": "OR" + }, + "INPUT_PLACEHOLDER": "Enter value", + "OPERATOR_LABELS": { + "equal_to": "Equal to", + "not_equal_to": "Not equal to", + "does_not_contain": "Does not contain", + "is_present": "Is present", + "is_not_present": "Is not present", + "is_greater_than": "Is greater than", + "is_less_than": "Is lesser than", + "days_before": "Is x days before", + "starts_with": "Starts with", + "equalTo": "Equal to", + "notEqualTo": "Not equal to", + "contains": "Contains", + "doesNotContain": "Does not contain", + "isPresent": "Is present", + "isNotPresent": "Is not present", + "isGreaterThan": "Is greater than", + "isLessThan": "Is lesser than", + "daysBefore": "Is x days before", + "startsWith": "Starts with" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "True", + "FALSE": "False" + }, + "ATTRIBUTES": { + "STATUS": "Status", + "ASSIGNEE_NAME": "Assignee name", + "INBOX_NAME": "Inbox name", + "TEAM_NAME": "Team name", + "CONVERSATION_IDENTIFIER": "Conversation identifier", + "CAMPAIGN_NAME": "Campaign name", + "LABELS": "Labels", + "BROWSER_LANGUAGE": "Browser language", + "PRIORITY": "Priority", + "COUNTRY_NAME": "Country name", + "REFERER_LINK": "Referer link", + "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_TEXT": "Text", + "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Created at", + "LAST_ACTIVITY": "Last activity" + }, + "ERRORS": { + "VALUE_REQUIRED": "Value is required", + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard filters", + "ADDITIONAL_FILTERS": "Additional filters", + "CUSTOM_ATTRIBUTES": "Custom attributes" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Do you want to save this filter?", + "LABEL": "Name this filter", + "PLACEHOLDER": "Name your filter to refer it later.", + "ERROR_MESSAGE": "Name is required.", + "SAVE_BUTTON": "Save filter", + "CANCEL_BUTTON": "Cancel", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder created successfully.", + "ERROR_MESSAGE": "Error while creating folder." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment created successfully.", + "ERROR_MESSAGE": "Error while creating segment." + } + }, + "EDIT": { + "EDIT_BUTTON": "Edit folder" + }, + "DELETE": { + "DELETE_BUTTON": "Delete filter", + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete the filter ", + "YES": "Yes, delete", + "NO": "No, keep it" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder deleted successfully.", + "ERROR_MESSAGE": "Error while deleting folder." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment deleted successfully.", + "ERROR_MESSAGE": "Error while deleting segment." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/agentBots.json b/app/javascript/dashboard/i18n/locale/hy/agentBots.json new file mode 100644 index 0000000..d3a0bb9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Bots", + "LOADING_EDITOR": "Loading editor...", + "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try. You can manage your bots from this page or create new ones using the 'Add Bot' button.", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "System bot", + "GLOBAL_BOT_BADGE": "System", + "AVATAR": { + "SUCCESS_DELETE": "Bot avatar deleted successfully", + "ERROR_DELETE": "Error deleting bot avatar, please try again" + }, + "BOT_CONFIGURATION": { + "TITLE": "Select an agent bot", + "DESC": "Assign an Agent Bot to your inbox. They can handle initial conversations and transfer them to a live agent when necessary.", + "SUBMIT": "Update", + "DISCONNECT": "Disconnect bot", + "SUCCESS_MESSAGE": "Successfully updated the agent bot.", + "DISCONNECTED_SUCCESS_MESSAGE": "Successfully disconnected the agent bot.", + "ERROR_MESSAGE": "Could not update the agent bot. Please try again.", + "DISCONNECTED_ERROR_MESSAGE": "Could not disconnect the agent bot. Please try again.", + "SELECT_PLACEHOLDER": "Select bot" + }, + "ADD": { + "TITLE": "Add Bot", + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "SUCCESS_MESSAGE": "Bot added successfully.", + "ERROR_MESSAGE": "Could not add bot. Please try again later." + } + }, + "LIST": { + "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.", + "LOADING": "Fetching bots...", + "TABLE_HEADER": { + "DETAILS": "Bot Details", + "URL": "Webhook URL" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "TITLE": "Delete bot", + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure you want to delete {name}?", + "YES": "Yes, Delete", + "NO": "No, Keep" + }, + "API": { + "SUCCESS_MESSAGE": "Bot deleted successfully.", + "ERROR_MESSAGE": "Could not delete bot. Please try again." + } + }, + "EDIT": { + "BUTTON_TEXT": "Edit", + "TITLE": "Edit bot", + "API": { + "SUCCESS_MESSAGE": "Bot updated successfully.", + "ERROR_MESSAGE": "Could not update bot. Please try again." + } + }, + "ACCESS_TOKEN": { + "TITLE": "Access Token", + "DESCRIPTION": "Copy the access token and save it securely", + "COPY_SUCCESSFUL": "Access token copied to clipboard", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "Bot name", + "PLACEHOLDER": "Enter bot name", + "REQUIRED": "Bot name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "What does this bot do?" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "Webhook URL is required" + }, + "ERRORS": { + "NAME": "Bot name is required", + "URL": "Webhook URL is required", + "VALID_URL": "Please enter a valid URL starting with http:// or https://" + }, + "CANCEL": "Cancel", + "CREATE": "Create Bot", + "UPDATE": "Update Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them." + }, + "TYPES": { + "WEBHOOK": "Webhook bot" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/agentMgmt.json b/app/javascript/dashboard/i18n/locale/hy/agentMgmt.json new file mode 100644 index 0000000..448994e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Agents", + "HEADER_BTN_TXT": "Add Agent", + "LOADING": "Fetching Agent List", + "DESCRIPTION": "An agent is a member of your customer support team who can view and respond to user messages. The list below shows all the agents in your account.", + "LEARN_MORE": "Learn about user roles", + "AGENT_TYPES": { + "ADMINISTRATOR": "Administrator", + "AGENT": "Agent" + }, + "LIST": { + "404": "There are no agents associated to this account", + "TITLE": "Manage agents in your team", + "DESC": "You can add/remove agents to/in your team.", + "NAME": "Name", + "EMAIL": "EMAIL", + "STATUS": "Status", + "ACTIONS": "Actions", + "VERIFIED": "Verified", + "VERIFICATION_PENDING": "Verification Pending", + "AVAILABLE_CUSTOM_ROLE": "Available custom role permissions" + }, + "ADD": { + "TITLE": "Add agent to your team", + "DESC": "You can add people who will be able to handle support for your inboxes.", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "NAME": { + "LABEL": "Agent Name", + "PLACEHOLDER": "Please enter a name of the agent" + }, + "AGENT_TYPE": { + "LABEL": "Role", + "PLACEHOLDER": "Please select a role", + "ERROR": "Role is required" + }, + "EMAIL": { + "LABEL": "Email Address", + "PLACEHOLDER": "Please enter an email address of the agent" + }, + "SUBMIT": "Add Agent" + }, + "API": { + "SUCCESS_MESSAGE": "Agent added successfully", + "EXIST_MESSAGE": "Agent email already in use, Please try another email address", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Agent deleted successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + } + }, + "EDIT": { + "TITLE": "Edit agent", + "FORM": { + "NAME": { + "LABEL": "Agent Name", + "PLACEHOLDER": "Please enter a name of the agent" + }, + "AGENT_TYPE": { + "LABEL": "Role", + "PLACEHOLDER": "Please select a role", + "ERROR": "Role is required" + }, + "EMAIL": { + "LABEL": "Email Address", + "PLACEHOLDER": "Please enter an email address of the agent" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Availability", + "PLACEHOLDER": "Please select an availability status", + "ERROR": "Availability is required" + }, + "SUBMIT": "Edit Agent" + }, + "BUTTON_TEXT": "Edit", + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "SUCCESS_MESSAGE": "Agent updated successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Reset Password", + "ADMIN_SUCCESS_MESSAGE": "An email with reset password instructions has been sent to the agent", + "SUCCESS_MESSAGE": "Agent password reset successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "SEARCH": { + "NO_RESULTS": "No results found." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "None", + "TITLE": { + "AGENT": "Select agent", + "TEAM": "Select team" + }, + "LIST": { + "NONE": "None" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "No agents found", + "TEAM": "No teams found" + }, + "PLACEHOLDER": { + "AGENT": "Search agents", + "TEAM": "Search teams", + "INPUT": "Search for agents" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/hy/attributesMgmt.json new file mode 100644 index 0000000..78886f4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Custom Attributes", + "HEADER_BTN_TXT": "Add Custom Attribute", + "LOADING": "Fetching custom attributes", + "DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.", + "LEARN_MORE": "Learn more about custom attributes", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Text", + "NUMBER": "Number", + "LINK": "Link", + "DATE": "Date", + "LIST": "List", + "CHECKBOX": "Checkbox" + }, + "ADD": { + "TITLE": "Add Custom Attribute", + "SUBMIT": "Create", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "NAME": { + "LABEL": "Display Name", + "PLACEHOLDER": "Enter custom attribute display name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Enter custom attribute description", + "ERROR": "Description is required" + }, + "MODEL": { + "LABEL": "Applies to", + "PLACEHOLDER": "Please select one", + "ERROR": "Model is required" + }, + "TYPE": { + "LABEL": "Type", + "PLACEHOLDER": "Please select a type", + "ERROR": "Type is required", + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter value and press enter key", + "ERROR": "Must have at least one value" + } + }, + "KEY": { + "LABEL": "Key", + "PLACEHOLDER": "Enter custom attribute key", + "ERROR": "Key is required", + "IN_VALID": "Invalid key" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute added successfully!", + "ERROR_MESSAGE": "Could not create a Custom Attribute. Please try again later." + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure want to delete - {attributeName}", + "PLACE_HOLDER": "Please type {attributeName} to confirm", + "MESSAGE": "Deleting will remove the custom attribute", + "YES": "Delete ", + "NO": "Cancel" + } + }, + "EDIT": { + "TITLE": "Edit Custom Attribute", + "UPDATE_BUTTON_TEXT": "Update", + "TYPE": { + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter values and press enter key" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute updated successfully", + "ERROR_MESSAGE": "There was an error updating custom attribute, please try again" + } + }, + "TABS": { + "HEADER": "Custom Attributes", + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Name", + "DESCRIPTION": "Description", + "TYPE": "Type", + "KEY": "Key" + }, + "BUTTONS": { + "EDIT": "Edit", + "DELETE": "Delete" + }, + "EMPTY_RESULT": { + "404": "There are no custom attributes created", + "NOT_FOUND": "There are no custom attributes configured" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/auditLogs.json b/app/javascript/dashboard/i18n/locale/hy/auditLogs.json new file mode 100644 index 0000000..df236f5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Audit Logs", + "HEADER_BTN_TXT": "Add Audit Logs", + "LOADING": "Fetching Audit Logs", + "DESCRIPTION": "Audit Logs maintain a record of activities in your account, allowing you to track and audit your account, team, or services.", + "LEARN_MORE": "Learn more about audit logs", + "SEARCH_404": "There are no items matching this query", + "SIDEBAR_TXT": "Audit Logs
Audit Logs are trails for events and actions in a Chatwoot System.
", + "LIST": { + "404": "There are no Audit Logs available in this account.", + "TITLE": "Manage Audit Logs", + "DESC": "Audit Logs are trails for events and actions in a Chatwoot System.", + "TABLE_HEADER": { + "ACTIVITY": "User", + "TIME": "Action", + "IP_ADDRESS": "IP Address" + } + }, + "API": { + "SUCCESS_MESSAGE": "AuditLogs retrieved successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "DEFAULT_USER": "System", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} invited {invitee} to the account as an {role}", + "EDIT": { + "SELF": "{agentName} changed their {attributes} to {values}", + "OTHER": "{agentName} changed {attributes} of {user} to {values}", + "DELETED": "{agentName} changed {attributes} of a deleted user to {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} signed in", + "SIGN_OUT": "{agentName} signed out" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} deleted conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/automation.json b/app/javascript/dashboard/i18n/locale/hy/automation.json new file mode 100644 index 0000000..43245a1 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automation", + "DESCRIPTION": "Automation can replace and streamline existing processes that require manual effort, such as adding labels and assigning conversations to the most suitable agent. This allows the team to focus on their strengths while reducing time spent on routine tasks.", + "LEARN_MORE": "Learn more about automation", + "HEADER_BTN_TXT": "Add Automation Rule", + "LOADING": "Fetching automation rules", + "ADD": { + "TITLE": "Add Automation Rule", + "SUBMIT": "Create", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "NAME": { + "LABEL": "Rule Name", + "PLACEHOLDER": "Enter rule name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Enter rule description", + "ERROR": "Description is required" + }, + "EVENT": { + "LABEL": "Event", + "PLACEHOLDER": "Please select one", + "ERROR": "Event is required" + }, + "CONDITIONS": { + "LABEL": "Conditions" + }, + "ACTIONS": { + "LABEL": "Actions" + } + }, + "CONDITION_BUTTON_LABEL": "Add Condition", + "ACTION_BUTTON_LABEL": "Add Action", + "API": { + "SUCCESS_MESSAGE": "Automation rule added successfully", + "ERROR_MESSAGE": "Could not able to create a automation rule, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Name", + "DESCRIPTION": "Description", + "ACTIVE": "Active", + "CREATED_ON": "Created on" + }, + "404": "No automation rules found" + }, + "DELETE": { + "TITLE": "Delete Automation Rule", + "SUBMIT": "Delete", + "CANCEL_BUTTON_TEXT": "Cancel", + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + }, + "API": { + "SUCCESS_MESSAGE": "Automation rule deleted successfully", + "ERROR_MESSAGE": "Could not able to delete a automation rule, Please try again later" + } + }, + "EDIT": { + "TITLE": "Edit Automation Rule", + "SUBMIT": "Update", + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "SUCCESS_MESSAGE": "Automation rule updated successfully", + "ERROR_MESSAGE": "Could not update automation rule, Please try again later" + } + }, + "CLONE": { + "TOOLTIP": "Clone", + "API": { + "SUCCESS_MESSAGE": "Automation cloned successfully", + "ERROR_MESSAGE": "Could not clone automation rule, Please try again later" + } + }, + "FORM": { + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Delete", + "CANCEL": "Cancel", + "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" + }, + "CONDITION": { + "DELETE_MESSAGE": "You need to have atleast one condition to save", + "CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes" + }, + "ACTION": { + "DELETE_MESSAGE": "You need to have atleast one action to save", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Enter your message here", + "TEAM_DROPDOWN_PLACEHOLDER": "Select teams", + "EMAIL_INPUT_PLACEHOLDER": "Enter email", + "URL_INPUT_PLACEHOLDER": "Enter URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Activate Automation Rule", + "DEACTIVATION_TITLE": "Deactivate Automation Rule", + "ACTIVATION_DESCRIPTION": "This action will activate the automation rule '{automationName}'. Are you sure you want to proceed?", + "DEACTIVATION_DESCRIPTION": "This action will deactivate the automation rule '{automationName}'. Are you sure you want to proceed?", + "ACTIVATION_SUCCESFUL": "Automation Rule Activated Successfully", + "DEACTIVATION_SUCCESFUL": "Automation Rule Deactivated Successfully", + "ACTIVATION_ERROR": "Could not Activate Automation, Please try again later", + "DEACTIVATION_ERROR": "Could not Deactivate Automation, Please try again later", + "CONFIRMATION_LABEL": "Yes", + "CANCEL_LABEL": "No" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Could not upload attachment, Please try again", + "LABEL_IDLE": "Upload Attachment", + "LABEL_UPLOADING": "Uploading...", + "LABEL_UPLOADED": "Successfully Uploaded", + "LABEL_UPLOAD_FAILED": "Upload Failed" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Value is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "NONE_OPTION": "None", + "EVENTS": { + "CONVERSATION_CREATED": "Conversation Created", + "CONVERSATION_UPDATED": "Conversation Updated", + "MESSAGE_CREATED": "Message Created", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Conversation Opened" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assign to Agent", + "ASSIGN_TEAM": "Assign a Team", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "SEND_EMAIL_TO_TEAM": "Send an Email to Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Mute Conversation", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_WEBHOOK_EVENT": "Send Webhook Event", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "CHANGE_PRIORITY": "Change Priority", + "ADD_SLA": "Add SLA", + "OPEN_CONVERSATION": "Open conversation" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "None", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Message Type", + "MESSAGE_CONTAINS": "Message Contains", + "EMAIL": "Email", + "INBOX": "Inbox", + "CONVERSATION_LANGUAGE": "Conversation Language", + "PHONE_NUMBER": "Phone Number", + "STATUS": "Status", + "BROWSER_LANGUAGE": "Browser Language", + "MAIL_SUBJECT": "Email Subject", + "COUNTRY_NAME": "Country", + "REFERER_LINK": "Referrer Link", + "ASSIGNEE_NAME": "Assignee", + "TEAM_NAME": "Team", + "PRIORITY": "Priority", + "LABELS": "Labels" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/bulkActions.json b/app/javascript/dashboard/i18n/locale/hy/bulkActions.json new file mode 100644 index 0000000..0c8d660 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", + "AGENT_SELECT_LABEL": "Select agent", + "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", + "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Go back", + "ASSIGN_LABEL": "Assign", + "YES": "Yes", + "SEARCH_INPUT_PLACEHOLDER": "Search", + "ASSIGN_AGENT_TOOLTIP": "Assign agent", + "ASSIGN_TEAM_TOOLTIP": "Assign team", + "ASSIGN_SUCCESFUL": "Conversations assigned successfully.", + "ASSIGN_FAILED": "Failed to assign conversations. Please try again.", + "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", + "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", + "AGENT_LIST_LOADING": "Loading agents", + "UPDATE": { + "CHANGE_STATUS": "Change status", + "SNOOZE_UNTIL": "Snooze", + "UPDATE_SUCCESFUL": "Conversation status updated successfully.", + "UPDATE_FAILED": "Failed to update conversations. Please try again." + }, + "LABELS": { + "ASSIGN_LABELS": "Assign labels", + "NO_LABELS_FOUND": "No labels found", + "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "ASSIGN_SUCCESFUL": "Labels assigned successfully.", + "ASSIGN_FAILED": "Failed to assign labels. Please try again." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Select team", + "NONE": "None", + "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", + "ASSIGN_SELECTED_TEAMS": "Assign selected team.", + "ASSIGN_SUCCESFUL": "Teams assigned successfully.", + "ASSIGN_FAILED": "Failed to assign team. Please try again." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/campaign.json b/app/javascript/dashboard/i18n/locale/hy/campaign.json new file mode 100644 index 0000000..10366e7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Sent by", + "BOT": "Bot", + "FROM": "from", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "Cancel", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "SENT_BY": { + "LABEL": "Sent by", + "PLACEHOLDER": "Please select sender", + "ERROR": "Sender is required" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Please enter the URL", + "ERROR": "Please enter a valid URL" + }, + "TIME_ON_PAGE": { + "LABEL": "Time on page(Seconds)", + "PLACEHOLDER": "Please enter the time", + "ERROR": "Time on page is required" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "Enable campaign", + "TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "Cancel", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No WhatsApp campaigns are available", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "Cancel", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "Process {templateName}", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLES_LABEL": "Variables", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Are you sure to delete?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "Delete", + "API": { + "SUCCESS_MESSAGE": "Campaign deleted successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/hy/cannedMgmt.json new file mode 100644 index 0000000..3bc60c5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Canned Responses", + "LEARN_MORE": "Learn more about canned responses", + "DESCRIPTION": "Canned Responses are pre-written reply templates that help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a canned response during a conversation. ", + "HEADER_BTN_TXT": "Add canned response", + "LOADING": "Fetching canned responses...", + "SEARCH_404": "There are no items matching this query.", + "LIST": { + "404": "There are no canned responses available in this account.", + "TITLE": "Manage canned responses", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "TABLE_HEADER": { + "SHORT_CODE": "Short code", + "CONTENT": "Content", + "ACTIONS": "Actions" + } + }, + "ADD": { + "TITLE": "Add canned response", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a short code.", + "ERROR": "Short Code is required." + }, + "CONTENT": { + "LABEL": "Message", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "Submit" + }, + "API": { + "SUCCESS_MESSAGE": "Canned response added successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "EDIT": { + "TITLE": "Edit canned response", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a shortcode.", + "ERROR": "Short code is required." + }, + "CONTENT": { + "LABEL": "Message", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "Submit" + }, + "BUTTON_TEXT": "Edit", + "API": { + "SUCCESS_MESSAGE": "Canned response is updated successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Canned response deleted successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, delete ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/chatlist.json b/app/javascript/dashboard/i18n/locale/hy/chatlist.json new file mode 100644 index 0000000..92e6763 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Fetching conversations", + "LOAD_MORE_CONVERSATIONS": "Load more conversations", + "EOF": "All conversations loaded 🎉", + "LIST": { + "404": "There are no active conversations in this group." + }, + "FAILED_TO_SEND": "Failed to send", + "TAB_HEADING": "Conversations", + "MENTION_HEADING": "Mentions", + "UNATTENDED_HEADING": "Unattended", + "SEARCH": { + "INPUT": "Search for People, Chats, Saved Replies .." + }, + "FILTER_ALL": "All", + "ASSIGNEE_TYPE_TABS": { + "me": "Mine", + "unassigned": "Unassigned", + "all": "All" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Open" + }, + "resolved": { + "TEXT": "Resolved" + }, + "pending": { + "TEXT": "Pending" + }, + "snoozed": { + "TEXT": "Snoozed" + }, + "all": { + "TEXT": "All" + } + }, + "VIEW_FILTER": "View", + "SORT_TOOLTIP_LABEL": "Sort conversations", + "CHAT_SORT": { + "STATUS": "Status", + "ORDER_BY": "Order by" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Created", + "OLDEST": "Created at:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Last activity:", + "ACTIVE": "Last activity" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Last activity: Oldest first" + }, + "last_activity_at_desc": { + "TEXT": "Last activity: Newest first" + }, + "created_at_desc": { + "TEXT": "Created at: Newest first" + }, + "created_at_asc": { + "TEXT": "Created at: Oldest first" + }, + "priority_desc": { + "TEXT": "Priority: Highest first" + }, + "priority_asc": { + "TEXT": "Priority: Lowest first" + }, + "waiting_since_asc": { + "TEXT": "Pending Response: Longest first" + }, + "waiting_since_desc": { + "TEXT": "Pending Response: Shortest first" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "has shared a url" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Sort conversation", + "DROPDOWN_TITLE": "Sort by", + "ITEMS": { + "LATEST": { + "NAME": "Last activity at", + "LABEL": "Last activity" + }, + "CREATED_AT": { + "NAME": "Created at", + "LABEL": "Created at" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Last user message at", + "LABEL": "Last message" + } + } + }, + "RECEIVED_VIA_EMAIL": "Received via email", + "VIEW_TWEET_IN_TWITTER": "View tweet in Twitter", + "REPLY_TO_TWEET": "Reply to this tweet", + "LINK_TO_STORY": "Go to instagram story", + "SENT": "Sent successfully", + "READ": "Read successfully", + "DELIVERED": "Delivered successfully", + "NO_MESSAGES": "No Messages", + "NO_CONTENT": "No content available", + "HIDE_QUOTED_TEXT": "Hide Quoted Text", + "SHOW_QUOTED_TEXT": "Show Quoted Text", + "MESSAGE_READ": "Read", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/companies.json b/app/javascript/dashboard/i18n/locale/hy/companies.json new file mode 100644 index 0000000..0d64a4a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "Name", + "DOMAIN": "Domain", + "CREATED_AT": "Created at", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/components.json b/app/javascript/dashboard/i18n/locale/hy/components.json new file mode 100644 index 0000000..0a2542a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} of {totalPages} pages" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "No results found.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} more" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "No results found.", + "SEARCHING": "Searching..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Cancel", + "CONFIRM": "Confirm" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Search country", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Please select a dial code from the list" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Author is not available" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Learn more", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/contact.json b/app/javascript/dashboard/i18n/locale/hy/contact.json new file mode 100644 index 0000000..5aa2254 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Not Available", + "EMAIL_ADDRESS": "Email Address", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "COPY_SUCCESSFUL": "Copied to clipboard successfully", + "COMPANY": "Company", + "LOCATION": "Location", + "BROWSER_LANGUAGE": "Browser Language", + "CONVERSATION_TITLE": "Conversation Details", + "VIEW_PROFILE": "View Profile", + "BROWSER": "Browser", + "OS": "Operating System", + "INITIATED_FROM": "Initiated from", + "INITIATED_AT": "Initiated at", + "IP_ADDRESS": "IP Address", + "CREATED_AT_LABEL": "Created", + "NEW_MESSAGE": "New message", + "CALL": "Call", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.", + "TITLE": "Previous Conversations" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Contact Labels", + "ERROR": "Couldn't update labels" + }, + "CONVERSATION": { + "TITLE": "Conversation Labels", + "ADD_BUTTON": "Add Labels" + }, + "LABEL_SELECT": { + "TITLE": "Add Labels", + "PLACEHOLDER": "Search labels", + "NO_RESULT": "No labels found", + "CREATE_LABEL": "Create new label" + } + }, + "MERGE_CONTACT": "Merge contact", + "CONTACT_ACTIONS": "Contact actions", + "MUTE_CONTACT": "Block Contact", + "UNMUTE_CONTACT": "Unblock Contact", + "MUTED_SUCCESS": "This contact is blocked successfully. You will not be notified of any future conversations.", + "UNMUTED_SUCCESS": "This contact is unblocked successfully.", + "SEND_TRANSCRIPT": "Send Transcript", + "EDIT_LABEL": "Edit", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Custom Attributes", + "CONTACT_LABELS": "Contact Labels", + "PREVIOUS_CONVERSATIONS": "Previous Conversations", + "NO_RECORDS_FOUND": "No attributes found" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Edit Contact", + "TITLE": "Edit contact", + "DESC": "Edit contact details" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Delete Contact", + "TITLE": "Delete contact", + "DESC": "Delete contact details", + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete", + "NO": "No, Keep" + }, + "API": { + "SUCCESS_MESSAGE": "Contact deleted successfully", + "ERROR_MESSAGE": "Could not delete contact. Please try again later." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Submit", + "CANCEL": "Cancel", + "AVATAR": { + "LABEL": "Contact Avatar" + }, + "NAME": { + "PLACEHOLDER": "Enter the full name of the contact", + "LABEL": "Full Name" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio of the contact", + "LABEL": "Bio" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address of the contact", + "LABEL": "Email Address", + "DUPLICATE": "This email address is in use for another contact.", + "ERROR": "Please enter a valid email address." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number of the contact", + "LABEL": "Phone Number", + "HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]", + "ERROR": "Phone number should be either empty or of E.164 format", + "DIAL_CODE_ERROR": "Please select a dial code from the list", + "DUPLICATE": "This phone number is in use for another contact." + }, + "LOCATION": { + "PLACEHOLDER": "Enter the location of the contact", + "LABEL": "Location" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Enter the company name", + "LABEL": "Company Name" + }, + "COUNTRY": { + "PLACEHOLDER": "Enter the country name", + "LABEL": "Country Name", + "SELECT_PLACEHOLDER": "Select", + "REMOVE": "Remove", + "SELECT_COUNTRY": "Select Country" + }, + "CITY": { + "PLACEHOLDER": "Enter the city name", + "LABEL": "City Name" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Enter the Facebook username", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Enter the Twitter username", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Enter the LinkedIn username", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Enter the Github username", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Contact avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later." + } + }, + "SUCCESS_MESSAGE": "Contact saved successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Start conversation", + "TITLE": "New conversation", + "DESC": "Start a new conversation by sending a new message.", + "NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.", + "FORM": { + "TO": { + "LABEL": "To" + }, + "INBOX": { + "LABEL": "Inbox", + "PLACEHOLDER": "Choose source inbox", + "ERROR": "Select an inbox" + }, + "SUBJECT": { + "LABEL": "Subject", + "PLACEHOLDER": "Subject", + "ERROR": "Subject can't be empty" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Write your message here", + "ERROR": "Message can't be empty" + }, + "ATTACHMENTS": { + "SELECT": "Choose files", + "HELP_TEXT": "Drag and drop files here or choose files to attach" + }, + "SUBMIT": "Send message", + "CANCEL": "Cancel", + "SUCCESS_MESSAGE": "Message sent!", + "GO_TO_CONVERSATION": "View", + "ERROR_MESSAGE": "Couldn't send! try again" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Social Profiles" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Add custom attribute", + "COPY_SUCCESSFUL": "Copied to clipboard successfully", + "SHOW_MORE": "Show all attributes", + "SHOW_LESS": "Show less attributes", + "ACTIONS": { + "COPY": "Copy attribute", + "DELETE": "Delete attribute", + "EDIT": "Edit attribute" + }, + "ADD": { + "TITLE": "Create custom attribute", + "DESC": "Add custom information to this contact." + }, + "FORM": { + "CREATE": "Add attribute", + "CANCEL": "Cancel", + "NAME": { + "LABEL": "Custom attribute name", + "PLACEHOLDER": "Eg: shopify id", + "ERROR": "Invalid custom attribute name" + }, + "VALUE": { + "LABEL": "Attribute value", + "PLACEHOLDER": "Eg: 11901 " + }, + "ADD": { + "TITLE": "Create new attribute ", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Select value", + "SEARCH_INPUT_PLACEHOLDER": "Search value", + "NO_RESULT": "No result found" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Valid value is required", + "INVALID_URL": "Invalid URL", + "INVALID_INPUT": "Invalid Input" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Merge contacts", + "DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact’ s attributes will take precedence.", + "PRIMARY": { + "TITLE": "Primary contact", + "HELP_LABEL": "To be deleted" + }, + "PARENT": { + "TITLE": "Contact to merge", + "PLACEHOLDER": "Search for a contact", + "HELP_LABEL": "To be kept" + }, + "SUMMARY": { + "TITLE": "Summary", + "DELETE_WARNING": "Contact of {primaryContactName} will be deleted.", + "ATTRIBUTE_WARNING": "Contact details of {primaryContactName} will be copied to {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": " Merge contacts", + "CANCEL": "Cancel", + "CHILD_CONTACT": { + "ERROR": "Select a child contact to merge" + }, + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Contacts", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "Active contacts", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "Message", + "SEND_MESSAGE": "Send message", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "Contacts" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Add contact", + "EXPORT_CONTACT": "Export contacts", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Save contact", + "EMAIL_ADDRESS_DUPLICATE": "This email address is in use for another contact.", + "PHONE_NUMBER_DUPLICATE": "This phone number is in use for another contact.", + "SUCCESS_MESSAGE": "Contact saved successfully", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "This contact is unblocked successfully", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Import contacts", + "DESCRIPTION": "Import contacts through a CSV file.", + "DOWNLOAD_LABEL": "Download a sample csv.", + "LABEL": "CSV File:", + "CHOOSE_FILE": "Choose file", + "CHANGE": "Change", + "CANCEL": "Cancel", + "IMPORT": "Import", + "SUCCESS_MESSAGE": "You will be notified via email when the import is complete.", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "EXPORT_CONTACT": { + "TITLE": "Export contacts", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Export", + "SUCCESS_MESSAGE": "Export is in progress, You will be notified via email when export file is ready to dowanlod.", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "Name", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "COMPANY": "Company", + "COUNTRY": "Country", + "CITY": "City", + "LAST_ACTIVITY": "Last activity", + "CREATED_AT": "Created at" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Do you want to save this filter?", + "CONFIRM": "Save filter", + "LABEL": "Name", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "Confirm Deletion", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "Yes, Delete", + "CANCEL": "No, Cancel", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "Name", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "COUNTRY": "Country", + "CITY": "City", + "CREATED_AT": "Created at", + "LAST_ACTIVITY": "Last activity", + "REFERER_LINK": "Referer link", + "BLOCKED": "Blocked", + "BLOCKED_TRUE": "True", + "BLOCKED_FALSE": "False", + "BUTTONS": { + "CLEAR_FILTERS": "Clear filters", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "Apply filters", + "ADD_FILTER": "Add filter" + }, + "TITLE": "Filter contacts", + "EDIT_SEGMENT": "Edit segment", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Clear filters" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "View details", + "EDIT_DETAILS_FORM": { + "TITLE": "Edit contact details", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "This email address is in use for another contact." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "This phone number is in use for another contact." + }, + "CITY": { + "PLACEHOLDER": "Enter the city name" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Enter the company name" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "This action is permanent and irreversible.", + "BUTTON": "Delete now" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "Delete contact", + "DELETE_DIALOG": { + "TITLE": "Confirm Deletion", + "DESCRIPTION": "Are you sure you want to delete this contact?", + "CONFIRM": "Yes, Delete", + "API": { + "SUCCESS_MESSAGE": "Contact deleted successfully", + "ERROR_MESSAGE": "Could not delete contact. Please try again later." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributes", + "HISTORY": "History", + "NOTES": "Notes", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "There are no previous conversations associated to this contact" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "Yes", + "NO": "No", + "TRIGGER": { + "SELECT": "Select value", + "INPUT": "Enter value" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "Valid value is required", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "Invalid URL", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "No attributes found", + "API": { + "SUCCESS_MESSAGE": "Attribute updated successfully", + "DELETE_SUCCESS_MESSAGE": "Attribute deleted successfully", + "UPDATE_ERROR": "Unable to update attribute. Please try again later", + "DELETE_ERROR": "Unable to delete attribute. Please try again later" + } + }, + "MERGE": { + "TITLE": "Merge contact", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Primary contact", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "To be deleted", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Search for a contact", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!", + "IS_SEARCHING": "Searching...", + "BUTTONS": { + "CANCEL": "Cancel", + "CONFIRM": "Merge contact" + } + }, + "NOTES": { + "PLACEHOLDER": "Add a note", + "WROTE": "wrote", + "YOU": "You", + "SAVE": "Save note", + "ADD_NOTE": "Add contact note", + "EXPAND": "Expand", + "COLLAPSE": "Collapse", + "NO_NOTES": "No notes, you can add notes from the contact details page.", + "EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "No contacts found in this account", + "SUBTITLE": "Start adding new contacts by clicking on the button below", + "BUTTON_LABEL": "Add contact", + "SEARCH_EMPTY_STATE_TITLE": "No contacts matches your search 🔍", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Assign Labels", + "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "Delete", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Delete contact" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "View", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "To:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Subject :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "Bcc:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "Bcc" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Write your message here..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Variables", + "BACK": "Go back", + "SEND_MESSAGE": "Send message" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Go back", + "SEND_MESSAGE": "Send message" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/contactFilters.json b/app/javascript/dashboard/i18n/locale/hy/contactFilters.json new file mode 100644 index 0000000..4c62f07 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filter Contacts", + "SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.", + "EDIT_CUSTOM_SEGMENT": "Edit Segment", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your segment.", + "ADD_NEW_FILTER": "Add Filter", + "CLEAR_ALL_FILTERS": "Clear All Filters", + "FILTER_DELETE_ERROR": "You should have atleast one filter to save", + "SUBMIT_BUTTON_LABEL": "Submit", + "UPDATE_BUTTON_LABEL": "Update Segment", + "CANCEL_BUTTON_LABEL": "Cancel", + "CLEAR_BUTTON_LABEL": "Clear Filters", + "EMPTY_VALUE_ERROR": "Value is required", + "SEGMENT_LABEL": "Segment Name", + "SEGMENT_QUERY_LABEL": "Segment Query", + "TOOLTIP_LABEL": "Filter contacts", + "QUERY_DROPDOWN_LABELS": { + "AND": "AND", + "OR": "OR" + }, + "OPERATOR_LABELS": { + "equal_to": "Equal to", + "not_equal_to": "Not equal to", + "contains": "Contains", + "does_not_contain": "Does not contain", + "is_present": "Is present", + "is_not_present": "Is not present", + "is_greater_than": "Is greater than", + "is_lesser_than": "Is lesser than", + "days_before": "Is x days before" + }, + "ERRORS": { + "VALUE_REQUIRED": "Value is required" + }, + "ATTRIBUTES": { + "NAME": "Name", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "CITY": "City", + "COUNTRY": "Country", + "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_TEXT": "Text", + "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Created At", + "LAST_ACTIVITY": "Last Activity", + "REFERER_LINK": "Referrer link", + "BLOCKED": "Blocked", + "LABELS": "Labels" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard Filters", + "ADDITIONAL_FILTERS": "Additional Filters", + "CUSTOM_ATTRIBUTES": "Custom Attributes" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/contentTemplates.json b/app/javascript/dashboard/i18n/locale/hy/contentTemplates.json new file mode 100644 index 0000000..79c2c8c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "NO_CONTENT": "No content", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Text" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Back", + "SEND_MESSAGE_BUTTON": "Send Message" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/conversation.json b/app/javascript/dashboard/i18n/locale/hy/conversation.json new file mode 100644 index 0000000..59ad61c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Please select a conversation from left pane", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", + "404": "Sorry, we cannot find the conversation. Please try again", + "SWITCH_VIEW_LAYOUT": "Switch the layout", + "DASHBOARD_APP_TAB_MESSAGES": "Messages", + "UNVERIFIED_SESSION": "The identity of this user is not verified", + "NO_MESSAGE_1": "Uh oh! Looks like there are no messages from customers in your inbox.", + "NO_MESSAGE_2": " to send a message to your page!", + "NO_INBOX_1": "Hola! Looks like you haven't added any inboxes yet.", + "NO_INBOX_2": " to get started", + "NO_INBOX_AGENT": "Uh Oh! Looks like you are not part of any inbox. Please contact your administrator", + "SEARCH_MESSAGES": "Search for messages in conversations", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "to open command menu", + "KEYBOARD_SHORTCUTS": "to view keyboard shortcuts" + }, + "SEARCH": { + "TITLE": "Search messages", + "RESULT_TITLE": "Search Results", + "LOADING_MESSAGE": "Crunching data...", + "PLACEHOLDER": "Type any text to search messages", + "NO_MATCHING_RESULTS": "No results found." + }, + "UNREAD_MESSAGES": "Unread Messages", + "UNREAD_MESSAGE": "Unread Message", + "CLICK_HERE": "Click here", + "LOADING_INBOXES": "Loading inboxes", + "LOADING_CONVERSATIONS": "Loading Conversations", + "CANNOT_REPLY": "You cannot reply due to", + "24_HOURS_WINDOW": "24 hour message window restriction", + "48_HOURS_WINDOW": "48 hour message window restriction", + "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours", + "NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?", + "ASSIGN_TO_ME": "Assign to me", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hour message window restriction", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "You are replying to:", + "REMOVE_SELECTION": "Remove Selection", + "DOWNLOAD": "Download", + "UNKNOWN_FILE_TYPE": "Unknown File", + "SAVE_CONTACT": "Save Contact", + "NO_CONTENT": "No content to display", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} has shared a contact", + "LOCATION": "{sender} has shared a location", + "FILE": "{sender} has shared a file", + "MEETING": "{sender} has started a meeting" + }, + "UPLOADING_ATTACHMENTS": "Uploading attachments...", + "REPLIED_TO_STORY": "Replied to your story", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", + "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", + "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", + "NO_RESPONSE": "No response", + "RESPONSE": "Response", + "RATING_TITLE": "Rating", + "FEEDBACK_TITLE": "Feedback", + "REPLY_MESSAGE_NOT_FOUND": "Message not available", + "CARD": { + "SHOW_LABELS": "Show labels", + "HIDE_LABELS": "Hide labels" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "Resolve", + "REOPEN_ACTION": "Reopen", + "OPEN_ACTION": "Open", + "MORE_ACTIONS": "More actions", + "OPEN": "More", + "CLOSE": "Close", + "DETAILS": "details", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", + "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "missed", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Mark as pending", + "SNOOZE_UNTIL": "Snooze", + "SNOOZE": { + "TITLE": "Snooze until", + "NEXT_REPLY": "Next reply", + "TOMORROW": "Tomorrow", + "NEXT_WEEK": "Next week" + } + }, + "MENTION": { + "AGENTS": "Agents", + "TEAMS": "Teams" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Snooze until", + "APPLY": "Snooze", + "CANCEL": "Cancel" + }, + "PRIORITY": { + "TITLE": "Priority", + "OPTIONS": { + "NONE": "None", + "URGENT": "Urgent", + "HIGH": "High", + "MEDIUM": "Medium", + "LOW": "Low" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "None", + "INPUT_PLACEHOLDER": "Select priority", + "NO_RESULTS": "No results found", + "SUCCESSFUL": "Changed priority of conversation id {conversationId} to {priority}", + "FAILED": "Couldn't change priority. Please try again." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Delete conversation #{conversationId}", + "DESCRIPTION": "Are you sure you want to delete this conversation?", + "CONFIRM": "Delete" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Mark as pending", + "RESOLVED": "Mark as resolved", + "MARK_AS_UNREAD": "Mark as unread", + "MARK_AS_READ": "Mark as read", + "REOPEN": "Reopen conversation", + "SNOOZE": { + "TITLE": "Snooze", + "NEXT_REPLY": "Until next reply", + "TOMORROW": "Until tomorrow", + "NEXT_WEEK": "Until next week" + }, + "ASSIGN_AGENT": "Assign agent", + "ASSIGN_LABEL": "Assign label", + "AGENTS_LOADING": "Loading agents...", + "ASSIGN_TEAM": "Assign team", + "DELETE": "Delete conversation", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Conversation id {conversationId} assigned to \"{agentName}\"", + "FAILED": "Couldn't assign agent. Please try again." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Couldn't assign label. Please try again." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Assigned team \"{team}\" to conversation id {conversationId}", + "FAILED": "Couldn't assign team. Please try again." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Message signature", + "ENABLE_SIGN_TOOLTIP": "Enable signature", + "DISABLE_SIGN_TOOLTIP": "Disable signature", + "MSG_INPUT": "Shift + enter for new line. Start with '/' to select a Canned Response.", + "PRIVATE_MSG_INPUT": "Shift + enter for new line. This will be visible only to Agents", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.", + "CLICK_HERE": "Click here to update", + "WHATSAPP_TEMPLATES": "Whatsapp Templates" + }, + "REPLYBOX": { + "REPLY": "Reply", + "PRIVATE_NOTE": "Private Note", + "SEND": "Send", + "CREATE": "Add Note", + "INSERT_READ_MORE": "Read more", + "DISMISS_REPLY": "Dismiss reply", + "REPLYING_TO": "Replying to:", + "TIP_EMOJI_ICON": "Show emoji selector", + "TIP_ATTACH_ICON": "Attach files", + "TIP_AUDIORECORDER_ICON": "Record audio", + "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", + "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "DRAG_DROP": "Drag and drop here to attach", + "START_AUDIO_RECORDING": "Start audio recording", + "STOP_AUDIO_RECORDING": "Stop audio recording", + "": "", + "EMAIL_HEAD": { + "TO": "TO", + "ADD_BCC": "Add bcc", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + }, + "BCC": { + "LABEL": "BCC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Undefined variables", + "MESSAGE": "You have {undefinedVariablesCount} undefined variables in your message: {undefinedVariables}. Would you like to send the message anyway?", + "CONFIRM": { + "YES": "Send", + "CANCEL": "Cancel" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "Private Note: Only visible to you and your team", + "CHANGE_STATUS": "Conversation status changed", + "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_AGENT": "Conversation Assignee changed", + "CHANGE_AGENT_FAILED": "Assignee change failed", + "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", + "ASSIGN_LABEL_FAILED": "Label assignment failed", + "CHANGE_TEAM": "Conversation team changed", + "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", + "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", + "MESSAGE_ERROR": "Unable to send this message, please try again later", + "SENT_BY": "Sent by:", + "BOT": "Bot", + "SEND_FAILED": "Couldn't send message! Try again", + "TRY_AGAIN": "retry", + "ASSIGNMENT": { + "SELECT_AGENT": "Select Agent", + "REMOVE": "Remove", + "ASSIGN": "Assign" + }, + "CONTEXT_MENU": { + "COPY": "Copy", + "REPLY_TO": "Reply to this message", + "DELETE": "Delete", + "CREATE_A_CANNED_RESPONSE": "Add to canned responses", + "TRANSLATE": "Translate", + "COPY_PERMALINK": "Copy link to the message", + "LINK_COPIED": "Message URL copied to the clipboard", + "DELETE_CONFIRMATION": { + "TITLE": "Are you sure you want to delete this message?", + "MESSAGE": "You cannot undo this action", + "DELETE": "Delete", + "CANCEL": "Cancel" + } + }, + "SIDEBAR": { + "CONTACT": "Contact", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Send conversation transcript", + "DESC": "Send a copy of the conversation transcript to the specified email address", + "SUBMIT": "Submit", + "CANCEL": "Cancel", + "SEND_EMAIL_SUCCESS": "The chat transcript was sent successfully", + "SEND_EMAIL_ERROR": "There was an error, please try again", + "FORM": { + "SEND_TO_CONTACT": "Send the transcript to the customer", + "SEND_TO_AGENT": "Send the transcript to the assigned agent", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Send the transcript to another email address", + "EMAIL": { + "PLACEHOLDER": "Enter an email address", + "ERROR": "Please enter a valid email address" + } + } + }, + "ONBOARDING": { + "TITLE": "Hey 👋, Welcome to {installationName}!", + "DESCRIPTION": "Thanks for signing up. We want you to get the most out of {installationName}. Here are a few things you can do in {installationName} to make the experience delightful.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "Read our latest updates", + "ALL_CONVERSATION": { + "TITLE": "All your conversations in one place", + "DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status.", + "NEW_LINK": "Click here to create an inbox" + }, + "TEAM_MEMBERS": { + "TITLE": "Invite your team members", + "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.", + "NEW_LINK": "Click here to invite a team member" + }, + "LABELS": { + "TITLE": "Organize conversations with labels", + "DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.", + "NEW_LINK": "Click here to create tags" + }, + "CANNED_RESPONSES": { + "TITLE": "Create canned responses", + "DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.", + "NEW_LINK": "Click here to create a canned response" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Assigned Agent", + "SELF_ASSIGN": "Assign to me", + "TEAM_LABEL": "Assigned Team", + "SELECT": { + "PLACEHOLDER": "None" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Contact Details", + "CONVERSATION_ACTIONS": "Conversation Actions", + "CONVERSATION_LABELS": "Conversation Labels", + "CONVERSATION_INFO": "Conversation Information", + "CONTACT_NOTES": "Contact Notes", + "CONTACT_ATTRIBUTES": "Contact Attributes", + "PREVIOUS_CONVERSATION": "Previous Conversations", + "MACROS": "Macros", + "LINEAR_ISSUES": "Linked Linear Issues", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "Pending", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Create attribute", + "NO_RECORDS_FOUND": "No attributes found", + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "ADD": { + "TITLE": "Add", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + } + }, + "EMAIL_HEADER": { + "FROM": "From", + "TO": "To", + "BCC": "Bcc", + "CC": "Cc", + "SUBJECT": "Subject", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Participating", + "SIDEBAR_TITLE": "Conversation participants", + "NO_RECORDS_FOUND": "No results found", + "ADD_PARTICIPANTS": "Select participants", + "REMANING_PARTICIPANTS_TEXT": "+{count} others", + "REMANING_PARTICIPANT_TEXT": "+{count} other", + "TOTAL_PARTICIPANTS_TEXT": "{count} people are participating.", + "TOTAL_PARTICIPANT_TEXT": "{count} person is participating.", + "NO_PARTICIPANTS_TEXT": "No one is participating!.", + "WATCH_CONVERSATION": "Join conversation", + "YOU_ARE_WATCHING": "You are participating", + "API": { + "ERROR_MESSAGE": "Could not update, try again!", + "SUCCESS_MESSAGE": "Participants updated!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "View translated content", + "DESC": "You can view the translated content in each langauge.", + "ORIGINAL_CONTENT": "Original Content", + "TRANSLATED_CONTENT": "Translated Content", + "NO_TRANSLATIONS_AVAILABLE": "No translations are available for this content" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/csatMgmt.json b/app/javascript/dashboard/i18n/locale/hy/csatMgmt.json new file mode 100644 index 0000000..9e16dc2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Rate your conversation", + "PLACEHOLDER": "Tell us more...", + "RATINGS": { + "POOR": "😞 Poor", + "FAIR": "😑 Fair", + "AVERAGE": "😐 Average", + "GOOD": "😀 Good", + "EXCELLENT": "😍 Excellent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/customRole.json b/app/javascript/dashboard/i18n/locale/hy/customRole.json new file mode 100644 index 0000000..ca01a1e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Custom Roles", + "LEARN_MORE": "Learn more about custom roles", + "DESCRIPTION": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "HEADER_BTN_TXT": "Add custom role", + "LOADING": "Fetching custom roles...", + "SEARCH_404": "There are no items matching this query.", + "PAYWALL": { + "TITLE": "Upgrade to create custom roles", + "AVAILABLE_ON": "The custom role feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The custom role feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Manage custom roles", + "DESC": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "TABLE_HEADER": { + "NAME": "Name", + "DESCRIPTION": "Description", + "PERMISSIONS": "Permissions", + "ACTIONS": "Actions" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "Name is required." + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "Description is required." + }, + "PERMISSIONS": { + "LABEL": "Permissions", + "ERROR": "Permissions are required." + }, + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "ADD": { + "TITLE": "Add custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Submit", + "API": { + "SUCCESS_MESSAGE": "Custom role added successfully." + } + }, + "EDIT": { + "BUTTON_TEXT": "Edit", + "TITLE": "Edit custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Update", + "API": { + "SUCCESS_MESSAGE": "Custom role updated successfully." + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Custom role deleted successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, delete ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/datePicker.json b/app/javascript/dashboard/i18n/locale/hy/datePicker.json new file mode 100644 index 0000000..c7ef068 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Apply", + "CLEAR_BUTTON": "Clear", + "DATE_RANGE_INPUT": { + "START": "Start Date", + "END": "End Date" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "DATE RANGE", + "LAST_7_DAYS": "Last 7 days", + "LAST_30_DAYS": "Last 30 days", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_RANGE": "Custom date range" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/emoji.json b/app/javascript/dashboard/i18n/locale/hy/emoji.json new file mode 100644 index 0000000..d5b96f0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Search emojis", + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/general.json b/app/javascript/dashboard/i18n/locale/hy/general.json new file mode 100644 index 0000000..283cf79 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Showing {firstIndex}-{lastIndex} of {totalCount} items", + "PHONE_INPUT": { + "PLACEHOLDER": "Search", + "EMPTY_STATE": "No results found" + }, + "CLOSE": "Close", + "BETA": "Beta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/generalSettings.json b/app/javascript/dashboard/i18n/locale/hy/generalSettings.json new file mode 100644 index 0000000..d924bff --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.", + "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.", + "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.", + "NON_ADMIN": "Please contact your administrator to upgrade the plan and continue using all features." + }, + "TITLE": "Account settings", + "SUBMIT": "Update settings", + "BACK": "Back", + "DISMISS": "Dismiss", + "UPDATE": { + "ERROR": "Could not update settings, try again!", + "SUCCESS": "Successfully updated account settings" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Delete your Account", + "NOTE": "Once you delete your account, all your data will be deleted.", + "BUTTON_TEXT": "Delete Your Account", + "CONFIRM": { + "TITLE": "Delete Account", + "MESSAGE": "Deleting your Account is irreversible. Enter your account name below to confirm you want to permanently delete it.", + "BUTTON_TEXT": "Delete", + "DISMISS": "Cancel", + "PLACE_HOLDER": "Please type {accountName} to confirm" + }, + "SUCCESS": "Account marked for deletion", + "FAILURE": "Could not delete account, try again!", + "SCHEDULED_DELETION": { + "TITLE": "Account Scheduled for Deletion", + "MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.", + "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.", + "CLEAR_BUTTON": "Cancel Scheduled Deletion" + } + }, + "FORM": { + "ERROR": "Please fix form errors", + "GENERAL_SECTION": { + "TITLE": "General settings", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "Account ID", + "NOTE": "This ID is required if you are building an API based integration" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.", + "DURATION": { + "LABEL": "Inactivity duration", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Preferences", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "Account name", + "PLACEHOLDER": "Your account name", + "ERROR": "Please enter a valid account name" + }, + "LANGUAGE": { + "LABEL": "Site language", + "PLACEHOLDER": "Your account name", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Incoming Email Domain", + "PLACEHOLDER": "The domain where you will receive the emails", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "Support Email", + "PLACEHOLDER": "Your company's support email", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclude unattended conversations", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a conversation should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "Update", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "Conversation continuity with emails is enabled for your account.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "You can receive emails in your custom domain now." + } + }, + "UPDATE_CHATWOOT": "An update {latestChatwootVersion} for Chatwoot is available. Please update your instance.", + "LEARN_MORE": "Learn more", + "PAYMENT_PENDING": "Your payment is pending. Please update your payment information to continue using Chatwoot", + "UPGRADE": "Upgrade to continue using Chatwoot", + "LIMITS_UPGRADE": "Your account has exceeded the usage limits, please upgrade your plan to continue using Chatwoot", + "OPEN_BILLING": "Open billing" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Press enter to select", + "ENTER_TO_REMOVE": "Press enter to remove", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "Select one", + "SELECT": "Select" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Notifications", + "MARK_ALL_DONE": "Mark All Done", + "DELETE_TITLE": "deleted", + "UNREAD_NOTIFICATION": { + "TITLE": "Unread Notifications", + "ALL_NOTIFICATIONS": "View all notifications", + "LOADING_UNREAD_MESSAGE": "Loading unread notifications...", + "EMPTY_MESSAGE": "You have no unread notifications" + }, + "LIST": { + "LOADING_MESSAGE": "Loading notifications...", + "404": "No Notifications", + "TABLE_HEADER": [ + "Name", + "Phone Number", + "Conversations", + "Last Contacted" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "New conversation", + "conversation_assignment": "Conversation Assigned", + "assigned_conversation_new_message": "New Message", + "participating_conversation_new_message": "New Message", + "conversation_mention": "Mention", + "sla_missed_first_response": "SLA Missed", + "sla_missed_next_response": "SLA Missed", + "sla_missed_resolution": "SLA Missed" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Offline", + "RECONNECTING": "Reconnecting...", + "RECONNECT_SUCCESS": "Reconnected" + }, + "BUTTON": { + "REFRESH": "Refresh" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Search or jump to", + "SECTIONS": { + "GENERAL": "General", + "REPORTS": "Reports", + "CONVERSATION": "Conversation", + "BULK_ACTIONS": "Bulk Actions", + "CHANGE_ASSIGNEE": "Change Assignee", + "CHANGE_PRIORITY": "Change Priority", + "CHANGE_TEAM": "Change Team", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "ADD_LABEL": "Add label to the conversation", + "REMOVE_LABEL": "Remove label from the conversation", + "SETTINGS": "Settings", + "AI_ASSIST": "AI Assist", + "APPEARANCE": "Appearance", + "SNOOZE_NOTIFICATION": "Snooze Notification" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview", + "GO_TO_CONVERSATION_REPORTS": "Go to Conversation Reports", + "GO_TO_AGENT_REPORTS": "Go to Agent Reports", + "GO_TO_LABEL_REPORTS": "Go to Label Reports", + "GO_TO_INBOX_REPORTS": "Go to Inbox Reports", + "GO_TO_TEAM_REPORTS": "Go to Team Reports", + "GO_TO_SETTINGS_AGENTS": "Go to Agent Settings", + "GO_TO_SETTINGS_TEAMS": "Go to Team Settings", + "GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings", + "GO_TO_SETTINGS_LABELS": "Go to Label Settings", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings", + "GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings", + "GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings", + "GO_TO_SETTINGS_PROFILE": "Go to Profile Settings", + "GO_TO_NOTIFICATIONS": "Go to Notifications", + "ADD_LABELS_TO_CONVERSATION": "Add label to the conversation", + "ASSIGN_AN_AGENT": "Assign an agent", + "AI_ASSIST": "AI Assist", + "ASSIGN_PRIORITY": "Assign priority", + "ASSIGN_A_TEAM": "Assign a team", + "MUTE_CONVERSATION": "Mute conversation", + "UNMUTE_CONVERSATION": "Unmute conversation", + "REMOVE_LABEL_FROM_CONVERSATION": "Remove label from the conversation", + "REOPEN_CONVERSATION": "Reopen conversation", + "RESOLVE_CONVERSATION": "Resolve conversation", + "SEND_TRANSCRIPT": "Send an email transcript", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "UNTIL_NEXT_REPLY": "Until next reply", + "UNTIL_NEXT_WEEK": "Until next week", + "UNTIL_TOMORROW": "Until tomorrow", + "UNTIL_NEXT_MONTH": "Until next month", + "AN_HOUR_FROM_NOW": "Until an hour from now", + "UNTIL_CUSTOM_TIME": "Custom...", + "CHANGE_APPEARANCE": "Change Appearance", + "LIGHT_MODE": "Light", + "DARK_MODE": "Dark", + "SYSTEM_MODE": "System", + "SNOOZE_NOTIFICATION": "Snooze Notification" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Loading Dashboard App..." + }, + "COMMON": { + "OR": "Or", + "CLICK_HERE": "click here" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/helpCenter.json b/app/javascript/dashboard/i18n/locale/hy/helpCenter.json new file mode 100644 index 0000000..0ab8d62 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Help Center", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "Create Portal" + }, + "HEADER": { + "FILTER": "Filter by", + "SORT": "Sort by", + "LOCALE": "Locale", + "SETTINGS_BUTTON": "Settings", + "NEW_BUTTON": "New Article", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Published", + "DRAFT": "Draft", + "ARCHIVED": "Archived" + }, + "TITLES": { + "ALL_ARTICLES": "All Articles", + "MINE": "My Articles", + "DRAFT": "Draft Articles", + "ARCHIVED": "Archived Articles" + }, + "LOCALE_SELECT": { + "TITLE": "Select locale", + "PLACEHOLDER": "Select locale", + "NO_RESULT": "No locale found", + "SEARCH_PLACEHOLDER": "Search locale" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "All Articles", + "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", + "PREVIEW": "Preview", + "ADD_TRANSLATION": "Add translation", + "OPEN_SIDEBAR": "Open sidebar", + "CLOSE_SIDEBAR": "Close sidebar", + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Upload image", + "UPLOADING": "Uploading...", + "SUCCESS": "Image uploaded successfully", + "ERROR": "Error while uploading image", + "UN_AUTHORIZED_ERROR": "You are not authorized to upload images", + "ERROR_FILE_SIZE": "Image size should be less than {size}MB", + "ERROR_FILE_FORMAT": "Image format should be jpg, jpeg or png", + "ERROR_FILE_DIMENSIONS": "Image dimensions should be less than 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Article Settings", + "FORM": { + "CATEGORY": { + "LABEL": "Category", + "TITLE": "Select category", + "PLACEHOLDER": "Select category", + "NO_RESULT": "No category found", + "SEARCH_PLACEHOLDER": "Search category" + }, + "AUTHOR": { + "LABEL": "Author", + "TITLE": "Select author", + "PLACEHOLDER": "Select author", + "NO_RESULT": "No authors found", + "SEARCH_PLACEHOLDER": "Search author" + }, + "META_TITLE": { + "LABEL": "Meta title", + "PLACEHOLDER": "Add a meta title" + }, + "META_DESCRIPTION": { + "LABEL": "Meta description", + "PLACEHOLDER": "Add your meta description for better SEO results..." + }, + "META_TAGS": { + "LABEL": "Meta tags", + "PLACEHOLDER": "Add meta tags separated by comma..." + } + }, + "BUTTONS": { + "ARCHIVE": "Archive article", + "DELETE": "Delete article" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Uncategorized", + "SEARCH_RESULTS": "Search results for {query}", + "EMPTY_TEXT": "Search for articles to insert into replies.", + "SEARCH_LOADER": "Searching...", + "INSERT_ARTICLE": "Insert", + "NO_RESULT": "No articles found", + "COPY_LINK": "Copy article link to clipboard", + "OPEN_LINK": "Open article in new tab", + "PREVIEW_LINK": "Preview article" + }, + "PORTAL": { + "HEADER": "Portals", + "DEFAULT": "Default", + "NEW_BUTTON": "New Portal", + "ACTIVE_BADGE": "active", + "CHOOSE_LOCALE_LABEL": "Choose a locale", + "LOADING_MESSAGE": "Loading portals...", + "ARTICLES_LABEL": "articles", + "NO_PORTALS_MESSAGE": "There are no available portals", + "ADD_NEW_LOCALE": "Add a new locale", + "POPOVER": { + "TITLE": "Portals", + "PORTAL_SETTINGS": "Portal settings", + "SUBTITLE": "You have multiple portals and can have different locales for each portal.", + "CANCEL_BUTTON_LABEL": "Cancel", + "CHOOSE_LOCALE_BUTTON": "Choose Locale" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "articles", + "ADD": "Add locale", + "VISIT": "Visit site", + "SETTINGS": "Settings", + "DELETE": "Delete" + }, + "PORTAL_CONFIG": { + "TITLE": "Portal Configurations", + "ITEMS": { + "NAME": "Name", + "DOMAIN": "Custom domain", + "SLUG": "Slug", + "TITLE": "Portal title", + "THEME": "Theme color", + "SUB_TEXT": "Portal sub text" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Available locales", + "TABLE": { + "NAME": "Locale name", + "CODE": "Locale code", + "ARTICLE_COUNT": "No. of articles", + "CATEGORIES": "No. of categories", + "SWAP": "Swap", + "DELETE": "Delete", + "DEFAULT_LOCALE": "Default" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Name", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Help center information", + "BODY": "Basic information about portal" + }, + "CUSTOMIZATION": { + "TITLE": "Help center customization", + "BODY": "Customize portal" + }, + "FINISH": { + "TITLE": "Voila! 🎉", + "BODY": "You're all set!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Back", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Create Portal", + "TITLE": "Help center information", + "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Portal customisation", + "TITLE": "Help center customization", + "UPDATE_PORTAL_BUTTON": "Update portal settings" + }, + "FINISH_PAGE": { + "TITLE": "Voila!🎉 You're all set up!", + "MESSAGE": "You can now see this created portal on your all portals page.", + "FINISH": "Go to all portals page" + } + }, + "LOGO": { + "LABEL": "Logo", + "UPLOAD_BUTTON": "Upload logo", + "HELP_TEXT": "This logo will be displayed on the portal header.", + "IMAGE_UPLOAD_SUCCESS": "Logo uploaded successfully", + "IMAGE_UPLOAD_ERROR": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Error while deleting logo" + }, + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Portal name", + "HELP_TEXT": "The name will be used in the public facing portal internally.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug for urls", + "ERROR": "Slug is required" + }, + "DOMAIN": { + "LABEL": "Custom Domain", + "PLACEHOLDER": "Portal custom domain", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}", + "ERROR": "Enter a valid domain URL" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home Page Link", + "PLACEHOLDER": "Portal home page link", + "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}", + "ERROR": "Enter a valid home page URL" + }, + "THEME_COLOR": { + "LABEL": "Portal theme color", + "HELP_TEXT": "This color will show as the theme color for the portal." + }, + "PAGE_TITLE": { + "LABEL": "Page Title", + "PLACEHOLDER": "Portal page title", + "HELP_TEXT": "The page title will be used in the public facing portal.", + "ERROR": "Page title is required" + }, + "HEADER_TEXT": { + "LABEL": "Header Text", + "PLACEHOLDER": "Portal header text", + "HELP_TEXT": "The Portal header text will be used in the public facing portal.", + "ERROR": "Portal header text is required" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", + "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", + "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Loading articles...", + "404": "No articles matches your search 🔍", + "NO_ARTICLES": "There are no available articles", + "HEADERS": { + "TITLE": "Title", + "CATEGORY": "Category", + "READ_COUNT": "Views", + "STATUS": "Status", + "LAST_EDITED": "Last edited" + }, + "COLUMNS": { + "BY": "by", + "AUTHOR_NOT_AVAILABLE": "Author is not available" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Loading article...", + "TITLE_PLACEHOLDER": "Article title goes here", + "CONTENT_PLACEHOLDER": "Write your article here", + "API": { + "ERROR": "Error while saving article" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article published successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Error while drafting article", + "SUCCESS": "Article drafted successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Yes, Delete", + "NO": "No, Keep it" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Search for articles" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Create a category", + "SUB_TITLE": "The category will be used in the public facing portal to categorize articles.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Create category", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Search articles", + "PLACEHOLDER": "Search articles", + "NO_RESULT": "No articles found", + "SEARCHING": "Searching...", + "SEARCH_BUTTON": "Search", + "INSERT_ARTICLE": "Insert link", + "IFRAME_ERROR": "URL is empty or invalid. Unable to display content.", + "OPEN_ARTICLE_SEARCH": "Insert article from Help Center", + "SUCCESS_ARTICLE_INSERTED": "Article inserted successfully", + "PREVIEW_LINK": "Preview article", + "CANCEL": "Close", + "BACK": "Back", + "BACK_RESULTS": "Back to results" + }, + "UPGRADE_PAGE": { + "TITLE": "Help Center", + "DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Upgrade your subscription to enable this feature.", + "SELF_HOSTED_DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Please contact your administrator to enable this feature.", + "BUTTON": { + "LEARN_MORE": "Learn more", + "UPGRADE": "Upgrade" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Multiple portals", + "DESCRIPTION": "Create multiple help center portals for different products using the same account." + }, + "LOCALES": { + "TITLE": "Full support for locales", + "DESCRIPTION": "Localize the portal in your language. We support all locales and allow translations for every article." + }, + "SEO": { + "TITLE": "SEO-friendly design", + "DESCRIPTION": "Customize your meta tags to improve your visibility on search engines with our SEO-friendly pages." + }, + "API": { + "TITLE": "Full API support", + "DESCRIPTION": "Use the portal as a headless CMS with third party front-end frameworks using our APIs." + } + } + }, + "LOADING": "Loading...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} view | {count} views", + "DROPDOWN_MENU": { + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "DELETE": "Delete" + }, + "STATUS": { + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "UNCATEGORISED": "Uncategorised" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "All articles", + "MINE": "Mine", + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "ALL": "All categories" + }, + "LOCALE": { + "ALL": "All locales" + }, + "NEW_ARTICLE": "New article" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Write an article", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "New article" + }, + "MINE": { + "TITLE": "You haven't written any articles here", + "SUBTITLE": "All articles written by you show up here for quick access." + }, + "DRAFT": { + "TITLE": "There are no articles in drafts", + "SUBTITLE": "Draft articles will appear here" + }, + "PUBLISHED": { + "TITLE": "There are no published articles", + "SUBTITLE": "Published articles will appear here" + }, + "ARCHIVED": { + "TITLE": "There are no articles in the archive", + "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages" + }, + "CATEGORY": { + "TITLE": "There are no articles in this category", + "SUBTITLE": "Articles in this category will appear here" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "New category", + "EDIT_CATEGORY": "Edit category", + "CATEGORIES_COUNT": "{n} category | {n} categories", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categories ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "No categories found", + "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + }, + "HEADER": { + "CREATE": "Create category", + "EDIT": "Edit category", + "DESCRIPTION": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale" + }, + "FORM": { + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "ERROR": "Slug is required", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + } + }, + "BUTTONS": { + "CREATE": "Create", + "EDIT": "Update", + "CANCEL": "Cancel" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "No locales available | {n} locale | {n} locales", + "NEW_LOCALE_BUTTON_TEXT": "New locale", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles", + "CATEGORIES_COUNT": "{count} category | {count} categories", + "DEFAULT": "Default", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Make default", + "DELETE": "Delete" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Add a new locale", + "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", + "COMBOBOX": { + "PLACEHOLDER": "Select locale..." + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "PREVIEW": "Preview", + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "BACK_TO_ARTICLES": "Back to articles" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "More properties", + "UNCATEGORIZED": "Uncategorized", + "EDITOR_PLACEHOLDER": "Write something..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Article properties", + "META_DESCRIPTION": "Meta description", + "META_DESCRIPTION_PLACEHOLDER": "Add meta description", + "META_TITLE": "Meta title", + "META_TITLE_PLACEHOLDER": "Add meta title", + "META_TAGS": "Meta tags", + "META_TAGS_PLACEHOLDER": "Add meta tags" + }, + "API": { + "ERROR": "Error while saving article" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "New portal", + "PORTALS": "Portals", + "CREATE_PORTAL": "Create and manage multiple portals", + "ARTICLES": "articles", + "DOMAIN": "domain", + "PORTAL_NAME": "Portal name" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Create new portal", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "Create", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "User Guide | Chatwoot", + "MESSAGE": "Choose an name for your portal.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Slug is required", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logo", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo", + "IMAGE_DELETE_SUCCESS": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Unable to delete logo", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Portal name", + "ERROR": "Name is required" + }, + "HEADER_TEXT": { + "LABEL": "Header text", + "PLACEHOLDER": "Portal header text" + }, + "PAGE_TITLE": { + "LABEL": "Page title", + "PLACEHOLDER": "Portal page title" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home page link", + "PLACEHOLDER": "Portal home page link", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Live chat widget", + "PLACEHOLDER": "Select live chat widget", + "HELP_TEXT": "Select a live chat widget that will appear on your help center", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Brand color" + }, + "SAVE_CHANGES": "Save changes" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Custom domain", + "LABEL": "Custom domain:", + "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Portal custom domain", + "EDIT_BUTTON": "Edit", + "ADD_BUTTON": "Add custom domain", + "STATUS": { + "LIVE": "Live", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Add custom domain", + "EDIT_HEADER": "Edit custom domain", + "ADD_CONFIRM_BUTTON_LABEL": "Add domain", + "EDIT_CONFIRM_BUTTON_LABEL": "Update domain", + "LABEL": "Custom domain", + "PLACEHOLDER": "Portal custom domain", + "ERROR": "Custom domain is required", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS configuration", + "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "Send" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Delete {portalName}", + "HEADER": "Delete portal", + "DESCRIPTION": "Permanently delete this portal. This action is irreversible", + "DIALOG": { + "HEADER": "Sure you want to delete {portalName}?", + "DESCRIPTION": "This is a permanent action that cannot be reversed.", + "CONFIRM_BUTTON_LABEL": "Delete" + } + }, + "EDIT_CONFIGURATION": "Edit configuration" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal created successfully", + "ERROR_MESSAGE": "Unable to create portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal updated successfully", + "ERROR_MESSAGE": "Unable to update portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "Uploading...", + "UPLOAD": "Upload & Process", + "CANCEL": "Cancel", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Generating...", + "CONFIRM_DELETE": "Are you sure you want to delete {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Completed", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/inbox.json b/app/javascript/dashboard/i18n/locale/hy/inbox.json new file mode 100644 index 0000000..385e9e4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "My Inbox", + "DISPLAY_DROPDOWN": "Display", + "LOADING": "Fetching notifications", + "404": "There are no active notifications in this group.", + "NO_NOTIFICATIONS": "No notifications", + "NOTE": "Notifications from all subscribed inboxes", + "NO_MESSAGES_AVAILABLE": "Oops! Not able to fetch messages", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week" + }, + "ACTION_HEADER": { + "SNOOZE": "Snooze notification", + "DELETE": "Delete notification", + "BACK": "Back" + }, + "TYPES": { + "CONVERSATION_MENTION": "You have been mentioned in a conversation", + "CONVERSATION_CREATION": "New conversation created", + "CONVERSATION_ASSIGNMENT": "A conversation has been assigned to you", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message in a conversation you are participating in", + "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation", + "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation", + "SLA_MISSED_RESOLUTION": "SLA target resolution missed for conversation" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Mentioned", + "CONVERSATION_ASSIGNMENT": "Assigned to you", + "CONVERSATION_CREATION": "New Conversation", + "SLA_MISSED_FIRST_RESPONSE": "SLA breach", + "SLA_MISSED_NEXT_RESPONSE": "SLA breach", + "SLA_MISSED_RESOLUTION": "SLA breach", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message", + "SNOOZED_UNTIL": "Snoozed for {time}", + "SNOOZED_ENDS": "Snooze ended" + }, + "NO_CONTENT": "No content available", + "MENU_ITEM": { + "MARK_AS_READ": "Mark as read", + "MARK_AS_UNREAD": "Mark as unread", + "SNOOZE": "Snooze", + "DELETE": "Delete", + "MARK_ALL_READ": "Mark all as read", + "DELETE_ALL": "Delete all", + "DELETE_ALL_READ": "Delete all read" + }, + "DISPLAY_MENU": { + "SORT": "Sort", + "DISPLAY": "Display :", + "SORT_OPTIONS": { + "NEWEST": "Newest", + "OLDEST": "Oldest", + "PRIORITY": "Priority" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Snoozed", + "READ": "Read", + "LABELS": "Labels", + "CONVERSATION_ID": "Conversation ID" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notification marked as read", + "MARK_AS_UNREAD": "Notification marked as unread", + "SNOOZE": "Notification snoozed", + "DELETE": "Notification deleted", + "MARK_ALL_READ": "All notifications marked as read", + "DELETE_ALL": "All notifications deleted", + "DELETE_ALL_READ": "All read notifications deleted" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hy/inboxMgmt.json new file mode 100644 index 0000000..7aaed01 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Inboxes", + "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.", + "LEARN_MORE": "Learn more about inboxes", + "RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.", + "CLICK_TO_RECONNECT": "Click here to reconnect.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "There are no inboxes attached to this account." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Choose Channel", + "BODY": "Choose the provider you want to integrate with Chatwoot." + }, + "INBOX": { + "TITLE": "Create Inbox", + "BODY": "Authenticate your account and create an inbox." + }, + "AGENT": { + "TITLE": "Add Agents", + "BODY": "Add agents to the created inbox." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "You are all set to go!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Enter your inbox name (eg: Acme Inc)", + "ERROR": "Please enter a valid inbox name" + }, + "WEBSITE_NAME": { + "LABEL": "Website Name", + "PLACEHOLDER": "Enter your website name (eg: Acme Inc)" + }, + "FB": { + "HELP": "PS: By signing in, we only get access to your Page's messages. Your private messages can never be accessed by Chatwoot.", + "CHOOSE_PAGE": "Choose Page", + "CHOOSE_PLACEHOLDER": "Select a page from the list", + "INBOX_NAME": "Inbox Name", + "ADD_NAME": "Add a name for your inbox", + "PICK_NAME": "Pick a Name for your Inbox", + "PICK_A_VALUE": "Pick a value", + "CREATE_INBOX": "Create Inbox" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continue with Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile", + "HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ", + "ERROR_MESSAGE": "There was an error connecting to Instagram, please try again", + "ERROR_AUTH": "There was an error connecting to Instagram, please try again", + "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "To add your Twitter profile as a channel, you need to authenticate your Twitter Profile by clicking on 'Sign in with Twitter' ", + "ERROR_MESSAGE": "There was an error connecting to Twitter, please try again", + "TWEETS": { + "ENABLE": "Create conversations from mentioned Tweets" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Website channel", + "DESC": "Create a channel for your website and start supporting your customers via our website widget.", + "LOADING_MESSAGE": "Creating Website Support Channel", + "CHANNEL_AVATAR": { + "LABEL": "Channel Avatar" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "Please enter your Webhook URL", + "ERROR": "Please enter a valid URL" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Website Domain", + "PLACEHOLDER": "Enter your website domain (eg: acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Welcome Heading", + "PLACEHOLDER": "Hi there !" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Welcome Tagline", + "PLACEHOLDER": "We make it simple to connect with us. Ask us anything, or share your feedback." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Channel greeting message", + "PLACEHOLDER": "Acme Inc typically replies in a few hours." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Enable channel greeting", + "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "REPLY_TIME": { + "TITLE": "Set Reply time", + "IN_A_FEW_MINUTES": "In a few minutes", + "IN_A_FEW_HOURS": "In a few hours", + "IN_A_DAY": "In a day", + "HELP_TEXT": "This reply time will be displayed on the live chat widget" + }, + "WIDGET_COLOR": { + "LABEL": "Widget Color", + "PLACEHOLDER": "Update the widget color used in widget" + }, + "SUBMIT_BUTTON": "Create inbox", + "API": { + "ERROR_MESSAGE": "We were not able to create a website channel, please try again" + } + }, + "TWILIO": { + "TITLE": "Twilio SMS/WhatsApp Channel", + "DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "Account SID", + "PLACEHOLDER": "Please enter your Twilio Account SID", + "ERROR": "This field is required" + }, + "API_KEY": { + "USE_API_KEY": "Use API Key Authentication", + "LABEL": "API Key SID", + "PLACEHOLDER": "Please enter your API Key SID", + "ERROR": "This field is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Please enter your API Key Secret", + "ERROR": "This field is required" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "Messaging Service SID", + "PLACEHOLDER": "Please enter your Twilio Messaging Service SID", + "ERROR": "This field is required", + "USE_MESSAGING_SERVICE": "Use a Twilio Messaging Service" + }, + "CHANNEL_TYPE": { + "LABEL": "Channel Type", + "ERROR": "Please select your Channel Type" + }, + "AUTH_TOKEN": { + "LABEL": "Auth Token", + "PLACEHOLDER": "Please enter your Twilio Auth Token", + "ERROR": "This field is required" + }, + "CHANNEL_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone Number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the message callback URL in Twilio with the URL mentioned here." + }, + "SUBMIT_BUTTON": "Create Twilio Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Twilio credentials, please try again" + } + }, + "SMS": { + "TITLE": "SMS Channel", + "DESC": "Start supporting your customers via SMS.", + "PROVIDERS": { + "LABEL": "API Provider", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandwidth" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the SMS channel" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "Account ID", + "PLACEHOLDER": "Please enter your Bandwidth Account ID", + "ERROR": "This field is required" + }, + "API_KEY": { + "LABEL": "API Key", + "PLACEHOLDER": "Please enter your Bandwidth API Key", + "ERROR": "This field is required" + }, + "API_SECRET": { + "LABEL": "API Secret", + "PLACEHOLDER": "Please enter your Bandwidth API Secret", + "ERROR": "This field is required" + }, + "APPLICATION_ID": { + "LABEL": "Application ID", + "PLACEHOLDER": "Please enter your Bandwidth Application ID", + "ERROR": "This field is required" + }, + "INBOX_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "SUBMIT_BUTTON": "Create Bandwidth Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Bandwidth credentials, please try again" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the message callback URL in Bandwidth with the URL mentioned here." + } + } + }, + "WHATSAPP": { + "TITLE": "WhatsApp Channel", + "DESC": "Start supporting your customers via WhatsApp.", + "PROVIDERS": { + "LABEL": "API Provider", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter an inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "PHONE_NUMBER_ID": { + "LABEL": "Phone number ID", + "PLACEHOLDER": "Please enter the Phone number ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "Business Account ID", + "PLACEHOLDER": "Please enter the Business Account ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook Verify Token", + "PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.", + "ERROR": "Please enter a valid value." + }, + "API_KEY": { + "LABEL": "API key", + "SUBTITLE": "Configure the WhatsApp API key.", + "PLACEHOLDER": "API key", + "ERROR": "Please enter a valid value." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL and the verification token in the Facebook Developer portal with the values shown below.", + "WEBHOOK_URL": "Webhook URL", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook Verification Token" + }, + "SUBMIT_BUTTON": "Create WhatsApp Channel", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "Phone Number", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "Account SID", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "Auth Token", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "API Key SID", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "API Channel", + "DESC": "Integrate with API channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "SUBTITLE": "Configure the URL where you want to receive callbacks on events.", + "PLACEHOLDER": "Webhook URL" + }, + "SUBMIT_BUTTON": "Create API Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the api channel" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "Email Channel", + "DESC": "Integrate your email inbox.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "EMAIL": { + "LABEL": "Email", + "SUBTITLE": "Provide the email address where your customers send support requests.", + "PLACEHOLDER": "Email" + }, + "SUBMIT_BUTTON": "Create Email Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the email channel" + }, + "FINISH_MESSAGE": "Start forwarding your emails to the following email address.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "Click here", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "LINE Channel", + "DESC": "Integrate with LINE channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "LINE_CHANNEL_ID": { + "LABEL": "LINE Channel ID", + "PLACEHOLDER": "LINE Channel ID" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "LINE Channel Secret", + "PLACEHOLDER": "LINE Channel Secret" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "LINE Channel Token", + "PLACEHOLDER": "LINE Channel Token" + }, + "SUBMIT_BUTTON": "Create LINE Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the LINE channel" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL in LINE application with the URL mentioned here." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Telegram Channel", + "DESC": "Integrate with Telegram channel and start supporting your customers.", + "BOT_TOKEN": { + "LABEL": "Bot Token", + "SUBTITLE": "Configure the bot token you have obtained from Telegram BotFather.", + "PLACEHOLDER": "Bot Token" + }, + "SUBMIT_BUTTON": "Create Telegram Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the telegram channel" + } + }, + "AUTH": { + "TITLE": "Choose a channel", + "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Website", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "Email", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Agents", + "DESC": "Here you can add agents to manage your newly created inbox. Only these selected agents will have access to your inbox. Agents which are not part of this inbox will not be able to see or respond to messages in this inbox when they login.Webhooks
Webhooks are HTTP callbacks which can be defined for every account. They are triggered by events like message creation in Chatwoot. You can create more than one webhook for this account.
For creating a webhook, click on the Add new webhook button. You can also remove any existing webhook by clicking on the Delete button.
Dashboard Apps
Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.
When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.
To add a new dashboard app, click on the button 'Add a new dashboard app'.
", + "DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.", + "LEARN_MORE": "Learn more about Dashboard Apps", + "LIST": { + "404": "There are no dashboard apps configured on this account yet", + "LOADING": "Fetching dashboard apps...", + "TABLE_HEADER": { + "NAME": "Name", + "ENDPOINT": "Endpoint" + }, + "EDIT_TOOLTIP": "Edit app", + "DELETE_TOOLTIP": "Delete app" + }, + "FORM": { + "TITLE_LABEL": "Name", + "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", + "TITLE_ERROR": "A name for the dashboard app is required", + "URL_LABEL": "Endpoint", + "URL_PLACEHOLDER": "Enter the endpoint URL where your app is hosted", + "URL_ERROR": "A valid URL is required" + }, + "CREATE": { + "HEADER": "Add a new dashboard app", + "FORM_SUBMIT": "Submit", + "FORM_CANCEL": "Cancel", + "API_SUCCESS": "Dashboard app configured successfully", + "API_ERROR": "We couldn't create an app. Please try again later" + }, + "UPDATE": { + "HEADER": "Edit dashboard app", + "FORM_SUBMIT": "Update", + "FORM_CANCEL": "Cancel", + "API_SUCCESS": "Dashboard app updated successfully", + "API_ERROR": "We couldn't update the app. Please try again later" + }, + "DELETE": { + "CONFIRM_YES": "Yes, delete it", + "CONFIRM_NO": "No, keep it", + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete the app - {appName}?", + "API_SUCCESS": "Dashboard app deleted successfully", + "API_ERROR": "We couldn't delete the app. Please try again later" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "Fetching linear issues...", + "LOADING_ERROR": "There was an error fetching the linear issues, please try again", + "CREATE": "Create", + "LINK": { + "SEARCH": "Search issues", + "SELECT": "Select issue", + "TITLE": "Link", + "EMPTY_LIST": "No linear issues found", + "LOADING": "Loading", + "ERROR": "There was an error fetching the linear issues, please try again", + "LINK_SUCCESS": "Issue linked successfully", + "LINK_ERROR": "There was an error linking the issue, please try again", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "Create Linear issues from conversations, or link existing ones for seamless tracking.", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter title", + "REQUIRED_ERROR": "Title is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Enter description" + }, + "TEAM": { + "LABEL": "Team", + "PLACEHOLDER": "Select team", + "SEARCH": "Search team", + "REQUIRED_ERROR": "Team is required" + }, + "ASSIGNEE": { + "LABEL": "Assignee", + "PLACEHOLDER": "Select assignee", + "SEARCH": "Search assignee" + }, + "PRIORITY": { + "LABEL": "Priority", + "PLACEHOLDER": "Select priority", + "SEARCH": "Search priority" + }, + "LABEL": { + "LABEL": "Label", + "PLACEHOLDER": "Select label", + "SEARCH": "Search label" + }, + "STATUS": { + "LABEL": "Status", + "PLACEHOLDER": "Select status", + "SEARCH": "Search status" + }, + "PROJECT": { + "LABEL": "Project", + "PLACEHOLDER": "Select project", + "SEARCH": "Search project" + } + }, + "CREATE": "Create", + "CANCEL": "Cancel", + "CREATE_SUCCESS": "Issue created successfully", + "CREATE_ERROR": "There was an error creating the issue, please try again", + "LOADING_TEAM_ERROR": "There was an error fetching the teams, please try again", + "LOADING_TEAM_ENTITIES_ERROR": "There was an error fetching the team entities, please try again" + }, + "ISSUE": { + "STATUS": "Status", + "PRIORITY": "Priority", + "ASSIGNEE": "Assignee", + "LABELS": "Labels", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Unlink", + "SUCCESS": "Issue unlinked successfully", + "ERROR": "There was an error unlinking the issue, please try again" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Yes, delete", + "CANCEL": "Cancel" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Yes, delete", + "CANCEL": "Cancel" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "Send message...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Captain is thinking", + "YOU": "You", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "You", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "Type your message...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "Cancel", + "CREATE": "Create", + "EDIT": "Update" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "Update", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "Features", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "Features", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "Settings", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Delete" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "Create", + "CANCEL": "Cancel", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Delete" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "Create", + "CANCEL": "Cancel", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Delete" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "Create", + "CANCEL": "Cancel" + } + } + }, + "UPDATE": { + "CANCEL": "Cancel", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "None", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "API Key" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "Password", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Type" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Number", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Required" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "Delete", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "All" + }, + "STATUS": { + "TITLE": "Status", + "PENDING": "Pending", + "APPROVED": "Approved", + "ALL": "All" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "Edit", + "DELETE_RESPONSE": "Delete" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Disconnect" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "Inbox", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/hy/labelsMgmt.json new file mode 100644 index 0000000..705b18d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Labels", + "HEADER_BTN_TXT": "Add label", + "LOADING": "Fetching labels", + "DESCRIPTION": "Labels help you categorize and prioritize conversations and leads. You can assign a label to a conversation or contact using the side panel.", + "LEARN_MORE": "Learn more about labels", + "SEARCH_404": "There are no items matching this query", + "LIST": { + "404": "There are no labels available in this account.", + "TITLE": "Manage labels", + "DESC": "Labels let you group the conversations together.", + "TABLE_HEADER": { + "NAME": "Name", + "DESCRIPTION": "Description", + "COLOR": "Color" + } + }, + "FORM": { + "NAME": { + "LABEL": "Label Name", + "PLACEHOLDER": "Label name", + "REQUIRED_ERROR": "Label name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Label Description" + }, + "COLOR": { + "LABEL": "Color" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Show label on sidebar" + }, + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Delete", + "CANCEL": "Cancel" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Add label to conversation", + "MULTIPLE_SUGGESTION": "Select this label", + "DESELECT": "Deselect label", + "DISMISS": "Dismiss suggestion" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Dismiss", + "ADD_SELECTED_LABELS": "Add selected labels", + "ADD_SELECTED_LABEL": "Add selected label", + "ADD_ALL_LABELS": "Add all labels", + "SUGGESTED_LABELS": "Suggested labels" + }, + "ADD": { + "TITLE": "Add label", + "DESC": "Labels let you group the conversations together.", + "API": { + "SUCCESS_MESSAGE": "Label added successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "EDIT": { + "TITLE": "Edit label", + "API": { + "SUCCESS_MESSAGE": "Label updated successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Label deleted successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/login.json b/app/javascript/dashboard/i18n/locale/hy/login.json new file mode 100644 index 0000000..8bf01d7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Login to Chatwoot", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "Please enter a valid email address" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password" + }, + "API": { + "SUCCESS_MESSAGE": "Login Successful", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later", + "UNAUTH": "Username / Password Incorrect. Please try again" + }, + "OAUTH": { + "GOOGLE_LOGIN": "Login with Google", + "BUSINESS_ACCOUNTS_ONLY": "Please use your company email address to login", + "NO_ACCOUNT_FOUND": "We couldn't find an account for your email address." + }, + "FORGOT_PASSWORD": "Forgot your password?", + "CREATE_NEW_ACCOUNT": "Create new account", + "SUBMIT": "Login", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/macros.json b/app/javascript/dashboard/i18n/locale/hy/macros.json new file mode 100644 index 0000000..fcb409f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Macros", + "DESCRIPTION": "A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click.", + "LEARN_MORE": "Learn more about macros", + "HEADER_BTN_TXT": "Add a new macro", + "HEADER_BTN_TXT_SAVE": "Save macro", + "LOADING": "Fetching macros", + "ERROR": "Something went wrong. Please try again", + "ORDER_INFO": "Macros will run in the order you add your actions. You can rearrange them by dragging them by the handle beside each node.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Macro name", + "PLACEHOLDER": "Enter a name for your macro", + "ERROR": "Name is required for creating a macro" + }, + "ACTIONS": { + "LABEL": "Actions" + } + }, + "API": { + "SUCCESS_MESSAGE": "Macro added successfully", + "ERROR_MESSAGE": "Unable to create macro, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Name", + "CREATED BY": "Created by", + "LAST_UPDATED_BY": "Last updated by", + "VISIBILITY": "Visibility" + }, + "404": "No macros found" + }, + "DELETE": { + "TOOLTIP": "Delete macro", + "CONFIRM": { + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete", + "NO": "No" + }, + "API": { + "SUCCESS_MESSAGE": "Macro deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the macro. Please try again later" + } + }, + "EDIT": { + "TOOLTIP": "Edit macro", + "API": { + "SUCCESS_MESSAGE": "Macro updated successfully", + "ERROR_MESSAGE": "Could not update Macro, Please try again later" + } + }, + "EDITOR": { + "START_FLOW": "Start Flow", + "END_FLOW": "End Flow", + "LOADING": "Fetching macro", + "ADD_BTN_TOOLTIP": "Add new action", + "DELETE_BTN_TOOLTIP": "Delete Action", + "VISIBILITY": { + "LABEL": "Macro Visibility", + "GLOBAL": { + "LABEL": "Public", + "DESCRIPTION": "This macro is available publicly for all agents in this account." + }, + "PERSONAL": { + "LABEL": "Private", + "DESCRIPTION": "This macro will be private to you and not be available to others." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Execute", + "PREVIEW": "Preview Macro", + "EXECUTED_SUCCESSFULLY": "Macro executed successfully" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Value is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Assign a Team", + "ASSIGN_AGENT": "Assign an Agent", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Mute Conversation", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "CHANGE_PRIORITY": "Change Priority", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "SEND_WEBHOOK_EVENT": "Send Webhook Event" + }, + "PRIORITY_TYPES": { + "NONE": "None", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/mfa.json b/app/javascript/dashboard/i18n/locale/hy/mfa.json new file mode 100644 index 0000000..f7556fd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "Enabled", + "DISABLED": "Disabled", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Loading...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "Copy", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "Cancel", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "Download", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "Password", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "Cancel", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "Cancel", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/report.json b/app/javascript/dashboard/i18n/locale/hy/report.json new file mode 100644 index 0000000..a2ad6bd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Conversations", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "DATA_FETCHING_FAILED": "Failed to fetch data, please try again later.", + "SUMMARY_FETCHING_FAILED": "Failed to fetch summary, please try again later.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Handoff Count", + "DESC": "( Total )" + }, + "REPLY_TIME": { + "NAME": "Customer waiting time", + "TOOLTIP_TEXT": "Waiting time is {metricValue} (based on {conversationCount} replies)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "Last 7 days", + "LAST_14_DAYS": "Last 14 days", + "LAST_30_DAYS": "Last 30 days", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_DATE_RANGE": "Custom date range" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Group By", + "DURATION_FILTER_LABEL": "Duration", + "GROUPING_OPTIONS": { + "DAY": "Day", + "WEEK": "Week", + "MONTH": "Month", + "YEAR": "Month" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "BUSINESS_HOURS": "Business Hours", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "No results found" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Agents Overview", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "FILTER_DROPDOWN_LABEL": "Select Agent", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "LABEL_REPORTS": { + "HEADER": "Labels Overview", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_LABEL_REPORTS": "Download label reports", + "FILTER_DROPDOWN_LABEL": "Select Label", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "INBOX_REPORTS": { + "HEADER": "Inbox Overview", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_INBOX_REPORTS": "Download inbox reports", + "FILTER_DROPDOWN_LABEL": "Select Inbox", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "TEAM_REPORTS": { + "HEADER": "Team Overview", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_TEAM_REPORTS": "Download team reports", + "FILTER_DROPDOWN_LABEL": "Select Team", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "CSAT_REPORTS": { + "HEADER": "CSAT Reports", + "NO_RECORDS": "There are no CSAT survey responses available.", + "DOWNLOAD": "Download CSAT Reports", + "DOWNLOAD_FAILED": "Failed to download CSAT Reports", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Choose Agents" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Contact", + "AGENT_NAME": "Assigned agent", + "RATING": "Rating", + "FEEDBACK_TEXT": "Feedback comment" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Total responses", + "TOOLTIP": "Total number of responses collected" + }, + "SATISFACTION_SCORE": { + "LABEL": "Satisfaction score", + "TOOLTIP": "Total number of positive responses / Total number of responses * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Response rate", + "TOOLTIP": "Total number of responses / Total number of CSAT survey messages sent * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Bot Reports", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "No. of Conversations", + "TOOLTIP": "Total number of conversations handled by the bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total Responses", + "TOOLTIP": "Total number of responses sent by the bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Resolution Rate", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Handoff Rate", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Overview", + "LIVE": "Live", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Open Conversations", + "LOADING_MESSAGE": "Loading conversation metrics...", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "UNASSIGNED": "Unassigned", + "PENDING": "Pending" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Conversation Traffic", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Conversations by agents", + "LOADING_MESSAGE": "Loading agent metrics...", + "NO_AGENTS": "There are no conversations by agents", + "TABLE_HEADER": { + "AGENT": "Agent", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "STATUS": "Status" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Team", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "STATUS": "Status" + } + }, + "AGENT_STATUS": { + "HEADER": "Agent status", + "ONLINE": "Online", + "BUSY": "Busy", + "OFFLINE": "Offline" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Sunday", + "MONDAY": "Monday", + "TUESDAY": "Tuesday", + "WEDNESDAY": "Wednesday", + "THURSDAY": "Thursday", + "FRIDAY": "Friday", + "SATURDAY": "Saturday" + }, + "SLA_REPORTS": { + "HEADER": "SLA Reports", + "NO_RECORDS": "SLA applied conversations are not available.", + "LOADING": "Loading SLA data...", + "DOWNLOAD_SLA_REPORTS": "Download SLA reports", + "DOWNLOAD_FAILED": "Failed to download SLA Reports", + "DROPDOWN": { + "ADD_FIlTER": "Add filter", + "CLEAR_ALL": "Clear all", + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "No results found", + "NO_FILTER": "No filters available", + "SEARCH": "Search filter", + "INPUT_PLACEHOLDER": { + "SLA": "SLA name", + "AGENTS": "Agent name", + "INBOXES": "Inbox name", + "LABELS": "Label name", + "TEAMS": "Team name" + }, + "SLA": "SLA Policy", + "INBOXES": "Inbox", + "AGENTS": "Agent", + "LABELS": "Label", + "TEAMS": "Team" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentage of SLAs created were completed successfully" + }, + "NO_OF_MISSES": { + "LABEL": "Number of Misses", + "TOOLTIP": "Total SLA misses in a certain period" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Number of Conversations", + "TOOLTIP": "Total number of conversations with SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "Conversation", + "AGENT": "Agent" + }, + "VIEW_DETAILS": "View Details" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Inbox", + "AGENT": "Agent", + "TEAM": "Team", + "LABEL": "Label", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "Resolution Count", + "CONVERSATIONS": "No. of conversations" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/resetPassword.json b/app/javascript/dashboard/i18n/locale/hy/resetPassword.json new file mode 100644 index 0000000..70d4897 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Reset Password", + "DESCRIPTION": "Enter the email address you use to log in to Chatwoot to get the password reset instructions.", + "GO_BACK_TO_LOGIN": "If you want to go back to the login page,", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "Please enter your email", + "ERROR": "Please enter a valid email" + }, + "API": { + "SUCCESS_MESSAGE": "Password reset link has been sent to your email", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "SUBMIT": "Submit" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/search.json b/app/javascript/dashboard/i18n/locale/hy/search.json new file mode 100644 index 0000000..f23a146 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "Contacts", + "CONVERSATIONS": "Conversations", + "MESSAGES": "Messages", + "ARTICLES": "Articles" + }, + "SECTION": { + "CONTACTS": "Contacts", + "CONVERSATIONS": "Conversations", + "MESSAGES": "Messages", + "ARTICLES": "Articles" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "Searching", + "LOADING_DATA": "Loading", + "EMPTY_STATE": "No {item} found for query '{query}'", + "EMPTY_STATE_FULL": "No results found for query '{query}'", + "PLACEHOLDER_KEYBINDING": "/to focus", + "INPUT_PLACEHOLDER": "Search messages, contacts or conversations", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Clear all", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Search by conversation id, email, phone number, messages for better search results.", + "BOT_LABEL": "Bot", + "READ_MORE": "Read more", + "READ_LESS": "Read less", + "WROTE": "wrote:", + "FROM": "From", + "EMAIL": "Email", + "EMAIL_SUBJECT": "Subject", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "Last 7 days", + "LAST_30_DAYS": "Last 30 days", + "LAST_60_DAYS": "Last 60 days", + "LAST_90_DAYS": "Last 90 days", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "Apply", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Clear filter" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Sender", + "IN": "Inbox", + "AGENTS": "Agents", + "CONTACTS": "Contacts", + "INBOXES": "Inboxes", + "NO_AGENTS": "No agents found", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/setNewPassword.json b/app/javascript/dashboard/i18n/locale/hy/setNewPassword.json new file mode 100644 index 0000000..ec2d947 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Set New Password", + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password", + "ERROR": "Password is too short" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm Password", + "PLACEHOLDER": "Confirm Password", + "ERROR": "Passwords do not match" + }, + "API": { + "SUCCESS_MESSAGE": "Successfully changed the password", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CAPTCHA": { + "ERROR": "Verification expired. Please solve captcha again." + }, + "SUBMIT": "Submit" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/settings.json b/app/javascript/dashboard/i18n/locale/hy/settings.json new file mode 100644 index 0000000..920da6f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Profile Settings", + "TITLE": "Profile Settings", + "BTN_TEXT": "Update Profile", + "DELETE_AVATAR": "Delete Avatar", + "AVATAR_DELETE_SUCCESS": "Avatar has been deleted successfully", + "AVATAR_DELETE_FAILED": "There is an error while deleting avatar, please try again", + "UPDATE_SUCCESS": "Your profile has been updated successfully", + "PASSWORD_UPDATE_SUCCESS": "Your password has been changed successfully", + "AFTER_EMAIL_CHANGED": "Your profile has been updated successfully, please login again as your login credentials are changed", + "FORM": { + "PICTURE": "Profile Picture", + "AVATAR": "Profile Image", + "ERROR": "Please fix form errors", + "REMOVE_IMAGE": "Remove", + "UPLOAD_IMAGE": "Upload image", + "UPDATE_IMAGE": "Update image", + "PROFILE_SECTION": { + "TITLE": "Profile", + "NOTE": "Your email address is your identity and is used to log in." + }, + "SEND_MESSAGE": { + "TITLE": "Hotkey to send messages", + "NOTE": "You can select a hotkey (either Enter or Cmd/Ctrl+Enter) based on your preference of writing.", + "UPDATE_SUCCESS": "Your settings have been updated successfully", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Send messages by pressing Enter key instead of clicking the send button." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Send messages by pressing Cmd/Ctrl + enter key instead of clicking the send button." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Default", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Personal message signature", + "NOTE": "Create a unique message signature to appear at the end of every message you send from any inbox. You can also include an inline image, which is supported in live-chat, email, and API inboxes.", + "BTN_TEXT": "Save message signature", + "API_ERROR": "Couldn't save signature! Try again", + "API_SUCCESS": "Signature saved successfully", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save to save the signature", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Message Signature", + "ERROR": "Message Signature cannot be empty", + "PLACEHOLDER": "Insert your personal message signature here." + }, + "PASSWORD_SECTION": { + "TITLE": "Password", + "NOTE": "Updating your password would reset your logins in multiple devices.", + "BTN_TEXT": "Change password" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "Access Token", + "NOTE": "This token can be used if you are building an API based integration", + "COPY": "Copy", + "RESET": "Reset", + "CONFIRM_RESET": "Are you sure?", + "CONFIRM_HINT": "Click again to confirm", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Alerts", + "NOTE": "Enable audio alerts in dashboard for new messages and conversations.", + "PLAY": "Play sound", + "ALERT_TYPES": { + "NONE": "None", + "MINE": "Assigned", + "ALL": "All", + "ASSIGNED": "My assigned conversations", + "UNASSIGNED": "Unassigned conversations", + "NOTME": "Open conversations assigned to others" + }, + "ALERT_COMBINATIONS": { + "NONE": "You haven't selected any options, you won't receive any audio alerts.", + "ASSIGNED": "You'll receive alerts for conversations assigned to you.", + "UNASSIGNED": "You'll receive alerts for any unassigned conversations.", + "NOTME": "You'll receive alerts for conversations assigned to others.", + "ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.", + "ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.", + "NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.", + "ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations." + }, + "ALERT_TYPE": { + "TITLE": "Alert events for conversations", + "NONE": "None", + "ASSIGNED": "Assigned Conversations", + "ALL_CONVERSATIONS": "All Conversations" + }, + "DEFAULT_TONE": { + "TITLE": "Alert tone:" + }, + "CONDITIONS": { + "TITLE": "Alert conditions:", + "CONDITION_ONE": "Send audio alerts only if the browser window is not active", + "CONDITION_TWO": "Send alerts every 30s until all the assigned conversations are read" + }, + "SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.", + "READ_MORE": "Read more" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "Email Notifications", + "NOTE": "Update your email notification preferences here", + "CONVERSATION_ASSIGNMENT": "Send email notifications when a conversation is assigned to me", + "CONVERSATION_CREATION": "Send email notifications when a new conversation is created", + "CONVERSATION_MENTION": "Send email notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "Send email notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send email notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send email notifications when a conversation misses resolution SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Notification preferences", + "TYPE_TITLE": "Notification type", + "EMAIL": "Email", + "PUSH": "Push notification", + "TYPES": { + "CONVERSATION_CREATED": "A new conversation is created", + "CONVERSATION_ASSIGNED": "A conversation is assigned to you", + "CONVERSATION_MENTION": "You are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "A new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "A new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "A conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "A conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "A conversation misses resolution SLA" + }, + "BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them" + }, + "API": { + "UPDATE_SUCCESS": "Your notification preferences are updated successfully", + "UPDATE_ERROR": "There is an error while updating the preferences, please try again" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Push Notifications", + "NOTE": "Update your push notification preferences here", + "CONVERSATION_ASSIGNMENT": "Send push notifications when a conversation is assigned to me", + "CONVERSATION_CREATION": "Send push notifications when a new conversation is created", + "CONVERSATION_MENTION": "Send push notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in a participating conversation", + "HAS_ENABLED_PUSH": "You have enabled push for this browser.", + "REQUEST_PUSH": "Enable push notifications", + "SLA_MISSED_FIRST_RESPONSE": "Send push notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send push notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send push notifications when a conversation misses resolution SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "Profile Image" + }, + "NAME": { + "LABEL": "Your full name", + "ERROR": "Please enter a valid full name", + "PLACEHOLDER": "Please enter your full name" + }, + "DISPLAY_NAME": { + "LABEL": "Display name", + "ERROR": "Please enter a valid display name", + "PLACEHOLDER": "Please enter a display name, this would be displayed in conversations" + }, + "AVAILABILITY": { + "LABEL": "Availability", + "STATUS": { + "ONLINE": "Online", + "BUSY": "Busy", + "OFFLINE": "Offline" + }, + "SET_AVAILABILITY_SUCCESS": "Availability has been set successfully", + "SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again", + "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user" + }, + "EMAIL": { + "LABEL": "Your email address", + "ERROR": "Please enter a valid email address", + "PLACEHOLDER": "Please enter your email address, this would be displayed in conversations" + }, + "CURRENT_PASSWORD": { + "LABEL": "Current password", + "ERROR": "Please enter the current password", + "PLACEHOLDER": "Please enter the current password" + }, + "PASSWORD": { + "LABEL": "New password", + "ERROR": "Please enter a password of length 6 or more", + "PLACEHOLDER": "Please enter a new password" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Confirm new password", + "ERROR": "Confirm password should match the password", + "PLACEHOLDER": "Please re-enter your new password" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Change", + "CHANGE_ACCOUNTS": "Switch account", + "SWITCH_ACCOUNT": "Switch account", + "CONTACT_SUPPORT": "Contact support", + "SELECTOR_SUBTITLE": "Select an account from the following list", + "PROFILE_SETTINGS": "Profile settings", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Keyboard shortcuts", + "APPEARANCE": "Change appearance", + "SUPER_ADMIN_CONSOLE": "SuperAdmin console", + "DOCS": "Read documentation", + "CHANGELOG": "Changelog", + "LOGOUT": "Log out" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "days trial remaining.", + "TRAIL_BUTTON": "Buy Now", + "DELETED_USER": "Deleted User", + "EMAIL_VERIFICATION_PENDING": "It seems that you haven't verified your email address yet. Please check your inbox for the verification email.", + "RESEND_VERIFICATION_MAIL": "Resend verification email", + "EMAIL_VERIFICATION_SENT": "Verification email has been sent. Please check your inbox.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Account Suspended", + "MESSAGE": "Your account is suspended. Please reach out to the support team for more information." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Log out" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Copy", + "CODEPEN": "Open in CodePen", + "COPY_SUCCESSFUL": "Copied to clipboard" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Show More", + "SHOW_LESS": "Show Less" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "Download", + "UPLOADING": "Uploading...", + "INSTAGRAM_STORY_UNAVAILABLE": "This story is no longer available." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "See on map" + }, + "FORM_BUBBLE": { + "SUBMIT": "Submit" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "This image is no longer available.", + "LOADING_FAILED": "Loading failed" + } + }, + "CONFIRM_EMAIL": "Verifying...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Add Inbox" + } + }, + "SIDEBAR": { + "NO_ITEMS": "No items", + "CURRENTLY_VIEWING_ACCOUNT": "Currently viewing:", + "SWITCH": "Switch", + "INBOX_VIEW": "Inbox View", + "CONVERSATIONS": "Conversations", + "INBOX": "My Inbox", + "ALL_CONVERSATIONS": "All Conversations", + "MENTIONED_CONVERSATIONS": "Mentions", + "PARTICIPATING_CONVERSATIONS": "Participating", + "UNATTENDED_CONVERSATIONS": "Unattended", + "REPORTS": "Reports", + "SETTINGS": "Settings", + "CONTACTS": "Contacts", + "ACTIVE": "Active", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistants", + "CAPTAIN_DOCUMENTS": "Documents", + "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_TOOLS": "Tools", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "Inboxes", + "CAPTAIN_SETTINGS": "Settings", + "HOME": "Home", + "AGENTS": "Agents", + "AGENT_BOTS": "Bots", + "AUDIT_LOGS": "Audit Logs", + "INBOXES": "Inboxes", + "NOTIFICATIONS": "Notifications", + "CANNED_RESPONSES": "Canned Responses", + "INTEGRATIONS": "Integrations", + "PROFILE_SETTINGS": "Profile Settings", + "ACCOUNT_SETTINGS": "Account Settings", + "APPLICATIONS": "Applications", + "LABELS": "Labels", + "CUSTOM_ATTRIBUTES": "Custom Attributes", + "AUTOMATION": "Automation", + "MACROS": "Macros", + "TEAMS": "Teams", + "BILLING": "Billing", + "CUSTOM_VIEWS_FOLDER": "Folders", + "CUSTOM_VIEWS_SEGMENTS": "Segments", + "ALL_CONTACTS": "All Contacts", + "TAGGED_WITH": "Tagged with", + "NEW_LABEL": "New label", + "NEW_TEAM": "New team", + "NEW_INBOX": "New inbox", + "REPORTS_CONVERSATION": "Conversations", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Campaigns", + "ONGOING": "Ongoing", + "ONE_OFF": "One off", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "Bot", + "REPORTS_AGENT": "Agents", + "REPORTS_LABEL": "Labels", + "REPORTS_INBOX": "Inbox", + "REPORTS_TEAM": "Team", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "Set yourself as", + "SET_YOUR_AVAILABILITY": "Set your availability", + "SLA": "SLA", + "CUSTOM_ROLES": "Custom Roles", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Overview", + "REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages", + "HELP_CENTER": { + "TITLE": "Help Center", + "ARTICLES": "Articles", + "CATEGORIES": "Categories", + "LOCALES": "Locales", + "SETTINGS": "Settings" + }, + "CHANNELS": "Channels", + "SET_AUTO_OFFLINE": { + "TEXT": "Mark offline automatically", + "INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard.", + "INFO_SHORT": "Automatically mark offline when you aren't using the app." + }, + "DOCS": "Read docs", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "Billing", + "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "CURRENT_PLAN": { + "TITLE": "Current Plan", + "PLAN_NOTE": "You are currently subscribed to the **{plan}** plan with **{quantity}** licenses", + "SEAT_COUNT": "Number of seats", + "RENEWS_ON": "Renews on" + }, + "VIEW_PRICING": "View Pricing", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Manage your subscription", + "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", + "BUTTON_TXT": "Go to the billing portal" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Manage usage and credits for Captain AI.", + "BUTTON_TXT": "Buy more credits", + "DOCUMENTS": "Documents", + "RESPONSES": "Responses", + "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more.", + "REFRESH_CREDITS": "Refresh" + }, + "CHAT_WITH_US": { + "TITLE": "Need help?", + "DESCRIPTION": "Do you face any issues in billing? We are here to help.", + "BUTTON_TXT": "Chat with us" + }, + "NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again.", + "TOPUP": { + "BUY_CREDITS": "Buy more credits", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Note:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "Cancel", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Go Back", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "Copied to clipboard", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.", + "NEW_ACCOUNT": "New Account", + "SELECTOR_SUBTITLE": "Create a new account", + "API": { + "SUCCESS_MESSAGE": "Account created successfully", + "EXIST_MESSAGE": "Account already exists", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "FORM": { + "NAME": { + "LABEL": "Company Name", + "PLACEHOLDER": "Wayne Enterprises" + }, + "SUBMIT": "Submit", + "CANCEL": "Cancel" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "View all shortcuts", + "TITLE": { + "OPEN_CONVERSATION": "Open conversation", + "RESOLVE_AND_NEXT": "Resolve and move to next", + "NAVIGATE_DROPDOWN": "Navigate dropdown items", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "ADD_ATTACHMENT": "Add Attachment", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "TOGGLE_SIDEBAR": "Toggle Sidebar", + "GO_TO_REPORTS_SIDEBAR": "Go to Reports sidebar", + "MOVE_TO_NEXT_TAB": "Move to next tab in conversation list", + "GO_TO_SETTINGS": "Go to Settings", + "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", + "SWITCH_TO_REPLY": "Switch to Reply", + "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "Priority", + "ACTIVE": "Active", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "Edit" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Description:", + "PLACEHOLDER": "Enter description" + }, + "STATUS": { + "LABEL": "Status:", + "PLACEHOLDER": "Select status", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "Add" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "Edit" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Description:", + "PLACEHOLDER": "Enter description" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "Add" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "Delete", + "CANCEL_BUTTON_LABEL": "Cancel" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/signup.json b/app/javascript/dashboard/i18n/locale/hy/signup.json new file mode 100644 index 0000000..f6a6e5b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Create an account", + "TITLE": "Register", + "TESTIMONIAL_HEADER": "All it takes is one step to move forward", + "TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.", + "TERMS_ACCEPT": "By creating an account, you agree to our T & C and Privacy policy", + "OAUTH": { + "GOOGLE_SIGNUP": "Sign up with Google" + }, + "COMPANY_NAME": { + "LABEL": "Company name", + "PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises", + "ERROR": "Company name is too short" + }, + "FULL_NAME": { + "LABEL": "Full name", + "PLACEHOLDER": "Enter your full name. eg: Bruce Wayne", + "ERROR": "Full name is too short" + }, + "EMAIL": { + "LABEL": "Work email", + "PLACEHOLDER": "Enter your work email address. E.g., bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Please enter a valid work email address" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password", + "ERROR": "Password is too short", + "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm Password", + "PLACEHOLDER": "Confirm Password", + "ERROR": "Passwords do not match" + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "SUBMIT": "Create account", + "HAVE_AN_ACCOUNT": "Already have an account?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/sla.json b/app/javascript/dashboard/i18n/locale/hy/sla.json new file mode 100644 index 0000000..0da7873 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Add SLA", + "ADD_ACTION_LONG": "Create a new SLA Policy", + "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", + "LEARN_MORE": "Learn more about SLA", + "LOADING": "Fetching SLAs", + "PAYWALL": { + "TITLE": "Upgrade to create SLAs", + "AVAILABLE_ON": "The SLA feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SLA feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no SLAs available in this account.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Issues raised by enterprise customers, that require immediate attention.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Issues raised by enterprise customers, that needs to be acknowledged quickly." + }, + "BUSINESS_HOURS_ON": "Business hours on", + "BUSINESS_HOURS_OFF": "Business hours off", + "RESPONSE_TYPES": { + "FRT": "First response time threshold", + "NRT": "Next response time threshold", + "RT": "Resolution time threshold", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA Name", + "PLACEHOLDER": "SLA Name", + "REQUIRED_ERROR": "SLA name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "SLA for premium customers" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "First Response Time", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Next Response Time", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "Resolution Time", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Business Hours", + "PLACEHOLDER": "Only during business hours" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Threshold should be a number and greater than zero" + }, + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Delete", + "CANCEL": "Cancel" + }, + "ADD": { + "TITLE": "Add SLA", + "DESC": "Friendly promises for great service!", + "API": { + "SUCCESS_MESSAGE": "SLA added successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "DELETE": { + "TITLE": "Delete SLA", + "API": { + "SUCCESS_MESSAGE": "SLA deleted successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure you want to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + } + }, + "EVENTS": { + "TITLE": "SLA Misses", + "FRT": "First response time", + "NRT": "Next response time", + "RT": "Resolution time", + "SHOW_MORE": "{count} more", + "HIDE": "Hide {count} rows" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/teamsSettings.json b/app/javascript/dashboard/i18n/locale/hy/teamsSettings.json new file mode 100644 index 0000000..f0a950f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Create new team", + "HEADER": "Teams", + "LOADING": "Fetching teams", + "DESCRIPTION": "Teams allow you to organize agents into groups based on their responsibilities. An agent can belong to multiple teams. When working collaboratively, you can assign conversations to specific teams.", + "LEARN_MORE": "Learn more about teams", + "LIST": { + "404": "There are no teams created on this account.", + "EDIT_TEAM": "Edit team", + "NONE": "None" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Create a new team", + "DESC": "Add a title and description to your new team." + }, + "AGENTS": { + "BUTTON_TEXT": "Add agents to team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation." + }, + "WIZARD_CREATE": { + "TITLE": "Create", + "BODY": "Create a new team of agents." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "Add Agents", + "BODY": "Add agents to the team." + }, + "WIZARD_FINISH": { + "TITLE": "Finish", + "BODY": "You are all set to go!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Edit your team details", + "DESC": "Edit title and description to your team.", + "BUTTON_TEXT": "Update team" + }, + "AGENTS": { + "BUTTON_TEXT": "Update agents in team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. All the added agents will be notified when a conversation is assigned to this team." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Team details", + "ROUTE": "settings_teams_edit", + "BODY": "Change name, description and other details." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Edit Agents", + "ROUTE": "settings_teams_edit_members", + "BODY": "Edit agents in your team." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Finish", + "ROUTE": "settings_teams_edit_finish", + "BODY": "You are all set to go!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Couldn't save the team details. Try again." + }, + "AGENTS": { + "AGENT": "AGENT", + "EMAIL": "EMAIL", + "BUTTON_TEXT": "Add agents", + "ADD_AGENTS": "Adding Agents to your Team...", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected." + }, + "ADD": { + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation.", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected.", + "BUTTON_TEXT": "Add agents", + "AGENT_VALIDATION_ERROR": "Select at least one agent." + }, + "FINISH": { + "TITLE": "Your team is ready!", + "MESSAGE": "You can now collaborate as a team on conversations. Happy supporting ", + "BUTTON_TEXT": "Finish" + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Team deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the team. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure you want to delete the team?", + "PLACE_HOLDER": "Please type {teamName} to confirm", + "MESSAGE": "Deleting the team will remove the team assignment from the conversations assigned to this team.", + "YES": "Delete ", + "NO": "Cancel" + } + }, + "SETTINGS": "Settings", + "FORM": { + "UPDATE": "Update team", + "CREATE": "Create team", + "NAME": { + "LABEL": "Team name", + "PLACEHOLDER": "Example: Sales, Customer Support" + }, + "DESCRIPTION": { + "LABEL": "Team Description", + "PLACEHOLDER": "Short description about this team." + }, + "AUTO_ASSIGN": { + "LABEL": "Allow auto assign for this team." + }, + "SUBMIT_CREATE": "Create team" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/webhooks.json b/app/javascript/dashboard/i18n/locale/hy/webhooks.json new file mode 100644 index 0000000..347c968 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Webhook Settings" + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/hy/whatsappTemplates.json new file mode 100644 index 0000000..cf28312 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Whatsapp Templates", + "SUBTITLE": "Select the whatsapp template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/hy/yearInReview.json b/app/javascript/dashboard/i18n/locale/hy/yearInReview.json new file mode 100644 index 0000000..d72e0c6 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/hy/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "Close", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "conversations", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "Download", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "Share" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/advancedFilters.json b/app/javascript/dashboard/i18n/locale/id/advancedFilters.json new file mode 100644 index 0000000..3af76d8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Filter percakapan", + "SUBTITLE": "Add your filters below and hit 'Apply filters' to cut through the chat clutter.", + "EDIT_CUSTOM_FILTER": "Edit Folder", + "CUSTOM_VIEWS_SUBTITLE": "Tambahkan atau hapus filter dan perbarui folder Anda.", + "ADD_NEW_FILTER": "Tambah filter", + "FILTER_DELETE_ERROR": "Oops, looks like we can't save nothing! Please add at least one filter to save it.", + "SUBMIT_BUTTON_LABEL": "Terapkan filter", + "UPDATE_BUTTON_LABEL": "Perbarui folder", + "CANCEL_BUTTON_LABEL": "Batalkan", + "CLEAR_BUTTON_LABEL": "Clear filters", + "FOLDER_LABEL": "Nama Folder", + "FOLDER_QUERY_LABEL": "Kueri Folder", + "EMPTY_VALUE_ERROR": "Nilai dibutuhkan.", + "TOOLTIP_LABEL": "Filter percakapan", + "QUERY_DROPDOWN_LABELS": { + "AND": "DAN", + "OR": "ATAU" + }, + "INPUT_PLACEHOLDER": "Enter value", + "OPERATOR_LABELS": { + "equal_to": "Sama dengan", + "not_equal_to": "Tidak sama dengan", + "does_not_contain": "Tidak berisi", + "is_present": "Ada", + "is_not_present": "Tidak ada", + "is_greater_than": "Lebih besar dari", + "is_less_than": "Lebih kecil dari", + "days_before": "X hari sebelum", + "starts_with": "Dimulai dengan", + "equalTo": "Sama dengan", + "notEqualTo": "Tidak sama dengan", + "contains": "Berisi", + "doesNotContain": "Tidak berisi", + "isPresent": "Ada", + "isNotPresent": "Tidak ada", + "isGreaterThan": "Lebih besar dari", + "isLessThan": "Lebih kecil dari", + "daysBefore": "X hari sebelum", + "startsWith": "Dimulai dengan" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "Benar", + "FALSE": "Salah" + }, + "ATTRIBUTES": { + "STATUS": "Status", + "ASSIGNEE_NAME": "Assignee name", + "INBOX_NAME": "Nama kotak masuk", + "TEAM_NAME": "Nama Tim", + "CONVERSATION_IDENTIFIER": "Conversation identifier", + "CAMPAIGN_NAME": "Campaign name", + "LABELS": "Label", + "BROWSER_LANGUAGE": "Bahasa peramban", + "PRIORITY": "Prioritas", + "COUNTRY_NAME": "Nama negara", + "REFERER_LINK": "Tautan Referer", + "CUSTOM_ATTRIBUTE_LIST": "Daftar", + "CUSTOM_ATTRIBUTE_TEXT": "Teks", + "CUSTOM_ATTRIBUTE_NUMBER": "Nomor", + "CUSTOM_ATTRIBUTE_LINK": "Tautan", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Kotak centang", + "CREATED_AT": "Dibuat pada", + "LAST_ACTIVITY": "Aktivitas terakhir" + }, + "ERRORS": { + "VALUE_REQUIRED": "Nilai dibutuhkan", + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard filters", + "ADDITIONAL_FILTERS": "Additional filters", + "CUSTOM_ATTRIBUTES": "Atribut kostum" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Apakah Anda ingin menyimpan filter ini?", + "LABEL": "Beri nama pada filter ini", + "PLACEHOLDER": "Name your filter to refer it later.", + "ERROR_MESSAGE": "Nama dibutuhkan.", + "SAVE_BUTTON": "Simpan filter", + "CANCEL_BUTTON": "Batalkan", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder berhasil dibuat.", + "ERROR_MESSAGE": "Galat saat membuat folder." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment berhasil dibuat.", + "ERROR_MESSAGE": "Galat saat membuat segment." + } + }, + "EDIT": { + "EDIT_BUTTON": "Edit folder" + }, + "DELETE": { + "DELETE_BUTTON": "Hapus filter", + "MODAL": { + "CONFIRM": { + "TITLE": "Konfirmasi penghapusan", + "MESSAGE": "Apakah Anda yakin ingin menghapus filter ", + "YES": "Ya, hapus", + "NO": "Tidak, simpan" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder berhasil dihapus.", + "ERROR_MESSAGE": "Galat saat menghapus folder." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment berhasil dihapus.", + "ERROR_MESSAGE": "Galat saat menghapus segment." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/agentBots.json b/app/javascript/dashboard/i18n/locale/id/agentBots.json new file mode 100644 index 0000000..e29fa82 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Bot", + "LOADING_EDITOR": "Memuat editor...", + "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try. You can manage your bots from this page or create new ones using the 'Add Bot' button.", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "System bot", + "GLOBAL_BOT_BADGE": "Sistem", + "AVATAR": { + "SUCCESS_DELETE": "Bot avatar deleted successfully", + "ERROR_DELETE": "Error deleting bot avatar, please try again" + }, + "BOT_CONFIGURATION": { + "TITLE": "Pilih bot agen", + "DESC": "Tetapkan Bot Agen ke kotak masuk Anda. Mereka dapat menangani percakapan awal dan meneruskannya ke agen manusia jika diperlukan.", + "SUBMIT": "Perbarui", + "DISCONNECT": "Putuskan koneksi", + "SUCCESS_MESSAGE": "Berhasil memperbarui bot agen.", + "DISCONNECTED_SUCCESS_MESSAGE": "Berhasil memutuskan hubungan bot agen.", + "ERROR_MESSAGE": "Could not update the agent bot. Please try again.", + "DISCONNECTED_ERROR_MESSAGE": "Could not disconnect the agent bot. Please try again.", + "SELECT_PLACEHOLDER": "Select bot" + }, + "ADD": { + "TITLE": "Add Bot", + "CANCEL_BUTTON_TEXT": "Batalkan", + "API": { + "SUCCESS_MESSAGE": "Bot berhasil ditambahkan.", + "ERROR_MESSAGE": "Could not add bot. Please try again later." + } + }, + "LIST": { + "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.", + "LOADING": "Fetching bots...", + "TABLE_HEADER": { + "DETAILS": "Bot Details", + "URL": "URL Webhook" + } + }, + "DELETE": { + "BUTTON_TEXT": "Hapus", + "TITLE": "Delete bot", + "CONFIRM": { + "TITLE": "Konfirmasi Penghapusan", + "MESSAGE": "Are you sure you want to delete {name}?", + "YES": "Ya, Hapus", + "NO": "Tidak, Simpan" + }, + "API": { + "SUCCESS_MESSAGE": "Bot berhasil dihapus.", + "ERROR_MESSAGE": "Could not delete bot. Please try again." + } + }, + "EDIT": { + "BUTTON_TEXT": "Edit", + "TITLE": "Edit bot", + "API": { + "SUCCESS_MESSAGE": "Bot berhasil diperbarui.", + "ERROR_MESSAGE": "Could not update bot. Please try again." + } + }, + "ACCESS_TOKEN": { + "TITLE": "Token Akses", + "DESCRIPTION": "Copy the access token and save it securely", + "COPY_SUCCESSFUL": "Access token copied to clipboard", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "Bot name", + "PLACEHOLDER": "Enter bot name", + "REQUIRED": "Nama bot wajib diisi" + }, + "DESCRIPTION": { + "LABEL": "Deskripsi", + "PLACEHOLDER": "Apa yang dilakukan bot ini?" + }, + "WEBHOOK_URL": { + "LABEL": "URL Webhook", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "Webhook URL is required" + }, + "ERRORS": { + "NAME": "Nama bot wajib diisi", + "URL": "Webhook URL is required", + "VALID_URL": "Please enter a valid URL starting with http:// or https://" + }, + "CANCEL": "Batalkan", + "CREATE": "Create Bot", + "UPDATE": "Update Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them." + }, + "TYPES": { + "WEBHOOK": "Webhook bot" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/agentMgmt.json b/app/javascript/dashboard/i18n/locale/id/agentMgmt.json new file mode 100644 index 0000000..adcd0be --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Agen", + "HEADER_BTN_TXT": "Tambahkan Agen", + "LOADING": "Mendapatkan Daftar Agen", + "DESCRIPTION": "An agent is a member of your customer support team who can view and respond to user messages. The list below shows all the agents in your account.", + "LEARN_MORE": "Learn about user roles", + "AGENT_TYPES": { + "ADMINISTRATOR": "Administrator", + "AGENT": "Agen" + }, + "LIST": { + "404": "Tidak ada agen yang terkait dengan akun ini", + "TITLE": "Kelola agen di tim Anda", + "DESC": "Anda dapat menambahkan/menghapus agen ke/di tim Anda.", + "NAME": "Nama", + "EMAIL": "Email", + "STATUS": "Status", + "ACTIONS": "Aksi", + "VERIFIED": "Diverifikasi", + "VERIFICATION_PENDING": "Verifikasi Pending", + "AVAILABLE_CUSTOM_ROLE": "Available custom role permissions" + }, + "ADD": { + "TITLE": "Tambahkan agen ke tim Anda", + "DESC": "Anda dapat menambahkan orang yang dapat menangani kotak masuk Anda.", + "CANCEL_BUTTON_TEXT": "Batalkan", + "FORM": { + "NAME": { + "LABEL": "Nama Agen", + "PLACEHOLDER": "Harap masukkan nama agen" + }, + "AGENT_TYPE": { + "LABEL": "Wewenang", + "PLACEHOLDER": "Harap pilih wewenang", + "ERROR": "Wewenang dibutuhkan" + }, + "EMAIL": { + "LABEL": "Alamat email", + "PLACEHOLDER": "Silakan masukkan alamat email agen" + }, + "SUBMIT": "Tambahkan Agen" + }, + "API": { + "SUCCESS_MESSAGE": "Agen berhasil ditambahkan", + "EXIST_MESSAGE": "Email agen sudah digunakan, Silakan coba alamat email lain", + "ERROR_MESSAGE": "Tidak dapat terhubung ke Server Woot, Silahkan coba lagi nanti" + } + }, + "DELETE": { + "BUTTON_TEXT": "Hapus", + "API": { + "SUCCESS_MESSAGE": "Agen berhasil dihapus", + "ERROR_MESSAGE": "Tidak dapat terhubung ke Server Woot, Silakan coba lagi nanti" + }, + "CONFIRM": { + "TITLE": "Konfirmasi Penghapusan", + "MESSAGE": "Apakah Anda yakin untuk menghapus ", + "YES": "Ya, Hapus ", + "NO": "Tidak, Simpan " + } + }, + "EDIT": { + "TITLE": "Edit Agen", + "FORM": { + "NAME": { + "LABEL": "Nama Agen", + "PLACEHOLDER": "Harap masukkan nama agen" + }, + "AGENT_TYPE": { + "LABEL": "Wewenang", + "PLACEHOLDER": "Harap pilih wewenang", + "ERROR": "Wewenang dibutuhkan" + }, + "EMAIL": { + "LABEL": "Alamat email", + "PLACEHOLDER": "Silakan masukkan alamat email agen" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Ketersediaan", + "PLACEHOLDER": "Pilih status ketersediaan", + "ERROR": "Ketersediaan diperlukan" + }, + "SUBMIT": "Edit Agen" + }, + "BUTTON_TEXT": "Edit", + "CANCEL_BUTTON_TEXT": "Batalkan", + "API": { + "SUCCESS_MESSAGE": "Agen berhasil diubah", + "ERROR_MESSAGE": "Tidak dapat terhubung ke Server Woot, Silakan coba lagi nanti" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Atur Ulang Kata Sandi", + "ADMIN_SUCCESS_MESSAGE": "Sebuah email dengan instruksi pengaturan ulang kata sandi telah dikirim ke agen", + "SUCCESS_MESSAGE": "Pengaturan ulang kata sandi agen berhasil", + "ERROR_MESSAGE": "Tidak dapat terhubung ke Server Woot, Silahkan coba lagi nanti" + } + }, + "SEARCH": { + "NO_RESULTS": "Tidak ada hasil ditemukan." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "Tidak ada", + "TITLE": { + "AGENT": "Pilih Agen", + "TEAM": "Pilih tim" + }, + "LIST": { + "NONE": "Tidak ada" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "Tidak ada agen", + "TEAM": "Tidak ada tim ditemukan" + }, + "PLACEHOLDER": { + "AGENT": "Mencari Agen", + "TEAM": "Mencari tim", + "INPUT": "Mencari Agen" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/id/attributesMgmt.json new file mode 100644 index 0000000..d989c3a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Atribut Kustom", + "HEADER_BTN_TXT": "Tambah Atribut Kustom", + "LOADING": "Mengambil atribut kustom", + "DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.", + "LEARN_MORE": "Learn more about custom attributes", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Percakapan", + "CONTACT": "Kontak" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Teks", + "NUMBER": "Nomor", + "LINK": "Tautan", + "DATE": "Date", + "LIST": "Daftar", + "CHECKBOX": "Kotak centang" + }, + "ADD": { + "TITLE": "Tambah Atribut Kustom", + "SUBMIT": "Buat", + "CANCEL_BUTTON_TEXT": "Batalkan", + "FORM": { + "NAME": { + "LABEL": "Nama Tampilan", + "PLACEHOLDER": "Masukkan nama tampilan atribut kustom", + "ERROR": "Nama dibutuhkan" + }, + "DESC": { + "LABEL": "Deskripsi", + "PLACEHOLDER": "Masukkan deskripsi atribut kustom", + "ERROR": "Deskripsi dibutuhkan" + }, + "MODEL": { + "LABEL": "Berlaku untuk", + "PLACEHOLDER": "Silakan pilih salah satu", + "ERROR": "Model dibutuhkan" + }, + "TYPE": { + "LABEL": "Tipe", + "PLACEHOLDER": "Silakan pilih sebuah tipe", + "ERROR": "Tipe dibutuhkan", + "LIST": { + "LABEL": "Nilai Daftar", + "PLACEHOLDER": "Masukkan nilai dan tekan tombol enter", + "ERROR": "Minimal harus memiliki satu nilai" + } + }, + "KEY": { + "LABEL": "Kunci", + "PLACEHOLDER": "Masukkan kunci atribut kustom", + "ERROR": "Kunci dibutuhkan", + "IN_VALID": "Kunci tidak valid" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "API": { + "SUCCESS_MESSAGE": "Atribut Kustom berhasil ditambahkan!", + "ERROR_MESSAGE": "Tidak dapat membuat Atribut Kustom. Harap coba lagi nanti." + } + }, + "DELETE": { + "BUTTON_TEXT": "Hapus", + "API": { + "SUCCESS_MESSAGE": "Atribut Kustom berhasil dihapus.", + "ERROR_MESSAGE": "Tidak dapat menghapus Atribut Kustom. Coba lagi." + }, + "CONFIRM": { + "TITLE": "Anda yakin akan menghapus - {attributeName}", + "PLACE_HOLDER": "Silakan ketik %{attributeName} untuk konfirmasi", + "MESSAGE": "Menghapus akan menghapus atribut kustom", + "YES": "Hapus ", + "NO": "Batalkan" + } + }, + "EDIT": { + "TITLE": "Edit Atribut Kustom", + "UPDATE_BUTTON_TEXT": "Perbarui", + "TYPE": { + "LIST": { + "LABEL": "Nilai Daftar", + "PLACEHOLDER": "Masukkan nilai dan tekan tombol enter" + } + }, + "API": { + "SUCCESS_MESSAGE": "Atribut Kustom berhasil diperbarui", + "ERROR_MESSAGE": "Ada kesalahan dalam memperbarui Atribut Kustom, harap coba lagi" + } + }, + "TABS": { + "HEADER": "Atribut Kustom", + "CONVERSATION": "Percakapan", + "CONTACT": "Kontak" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nama", + "DESCRIPTION": "Deskripsi", + "TYPE": "Tipe", + "KEY": "Kunci" + }, + "BUTTONS": { + "EDIT": "Edit", + "DELETE": "Hapus" + }, + "EMPTY_RESULT": { + "404": "Tidak ada atribut kustom yang dibuat", + "NOT_FOUND": "Tidak ada atribut kustom yang dikonfigurasi" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/auditLogs.json b/app/javascript/dashboard/i18n/locale/id/auditLogs.json new file mode 100644 index 0000000..f579ef4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Catatan Audit", + "HEADER_BTN_TXT": "Tambahkan Catatan Audit", + "LOADING": "Mengambil Catatan Audit", + "DESCRIPTION": "Audit Logs maintain a record of activities in your account, allowing you to track and audit your account, team, or services.", + "LEARN_MORE": "Learn more about audit logs", + "SEARCH_404": "Tidak ada item yang cocok dengan kueri ini", + "SIDEBAR_TXT": "Catatan Audit
Catatan Audit adalah jejak untuk peristiwa dan tindakan dalam Sistem Chatwoot.
", + "LIST": { + "404": "Tidak ada Catatan Audit yang tersedia di akun ini.", + "TITLE": "Kelola Catatan Audit", + "DESC": "Catatan Audit adalah jejak untuk peristiwa dan tindakan dalam Sistem Chatwoot.", + "TABLE_HEADER": { + "ACTIVITY": "Pengguna", + "TIME": "Tindakan", + "IP_ADDRESS": "Alamat IP" + } + }, + "API": { + "SUCCESS_MESSAGE": "Catatan Audit berhasil diambil", + "ERROR_MESSAGE": "Tidak dapat terhubung ke Server Woot, Silakan coba lagi nanti" + }, + "DEFAULT_USER": "Sistem", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} mengundang {invitee} ke akun sebagai {role}", + "EDIT": { + "SELF": "{agentName} mengubah {attributes} mereka menjadi {values}", + "OTHER": "{agentName} mengubah {attributes} dari {user} menjadi {values}", + "DELETED": "{agentName} changed {attributes} of a deleted user to {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} masuk", + "SIGN_OUT": "{agentName} keluar" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} deleted conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/automation.json b/app/javascript/dashboard/i18n/locale/id/automation.json new file mode 100644 index 0000000..155d75b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Otomatisasi", + "DESCRIPTION": "Automation can replace and streamline existing processes that require manual effort, such as adding labels and assigning conversations to the most suitable agent. This allows the team to focus on their strengths while reducing time spent on routine tasks.", + "LEARN_MORE": "Learn more about automation", + "HEADER_BTN_TXT": "Tambah Aturan Otomatisasi", + "LOADING": "Mengambil aturan otomatisasi", + "ADD": { + "TITLE": "Tambah Aturan Otomatisasi", + "SUBMIT": "Buat", + "CANCEL_BUTTON_TEXT": "Batalkan", + "FORM": { + "NAME": { + "LABEL": "Nama Aturan", + "PLACEHOLDER": "Masukkan nama aturan", + "ERROR": "Nama dibutuhkan" + }, + "DESC": { + "LABEL": "Deskripsi", + "PLACEHOLDER": "Masukkan deskripsi aturan", + "ERROR": "Deskripsi dibutuhkan" + }, + "EVENT": { + "LABEL": "Peristiwa", + "PLACEHOLDER": "Silakan pilih salah satu", + "ERROR": "Peristiwa dibutuhkan" + }, + "CONDITIONS": { + "LABEL": "Kondisi" + }, + "ACTIONS": { + "LABEL": "Aksi" + } + }, + "CONDITION_BUTTON_LABEL": "Tambah Kondisi", + "ACTION_BUTTON_LABEL": "Tambah Aksi", + "API": { + "SUCCESS_MESSAGE": "Aturan otomatisasi berhasil ditambahkan", + "ERROR_MESSAGE": "Tidak dapat membuat aturan otomatisasi, Harap coba lagi nanti" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nama", + "DESCRIPTION": "Deskripsi", + "ACTIVE": "Aktif", + "CREATED_ON": "Dibuat pada" + }, + "404": "Tidak ada aturan otomatisasi ditemukan" + }, + "DELETE": { + "TITLE": "Hapus Aturan Otomatisasi", + "SUBMIT": "Hapus", + "CANCEL_BUTTON_TEXT": "Batalkan", + "CONFIRM": { + "TITLE": "Konfirmasi Penghapusan", + "MESSAGE": "Apakah Anda yakin ingin menghapus ", + "YES": "Ya, Hapus ", + "NO": "Tidak, Simpan " + }, + "API": { + "SUCCESS_MESSAGE": "Aturan otomatisasi berhasil dihapus", + "ERROR_MESSAGE": "Tidak dapat menghapus aturan otomatisasi, Harap coba lagi nanti" + } + }, + "EDIT": { + "TITLE": "Edit Aturan Otomatisasi", + "SUBMIT": "Perbarui", + "CANCEL_BUTTON_TEXT": "Batalkan", + "API": { + "SUCCESS_MESSAGE": "Aturan otomatisasi berhasil diperbarui", + "ERROR_MESSAGE": "Tidak dapat memperbarui aturan otomatisasi, Harap coba lagi nanti" + } + }, + "CLONE": { + "TOOLTIP": "Klon", + "API": { + "SUCCESS_MESSAGE": "Otomatisasi berhasil dikloning", + "ERROR_MESSAGE": "Tidak dapat mengkloning aturan otomatisasi, Harap coba lagi nanti" + } + }, + "FORM": { + "EDIT": "Edit", + "CREATE": "Buat", + "DELETE": "Hapus", + "CANCEL": "Batalkan", + "RESET_MESSAGE": "Mengubah jenis peristiwa akan mengatur ulang kondisi dan peristiwa yang Anda tambahkan di bawah" + }, + "CONDITION": { + "DELETE_MESSAGE": "Anda harus memiliki setidaknya satu kondisi untuk disimpan", + "CONTACT_CUSTOM_ATTR_LABEL": "Atribut Kustom Kontak", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Atribut Kustom Percakapan" + }, + "ACTION": { + "DELETE_MESSAGE": "Anda harus memiliki setidaknya satu aksi untuk disimpan", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Masukkan pesan Anda di sini", + "TEAM_DROPDOWN_PLACEHOLDER": "Pilih tim", + "EMAIL_INPUT_PLACEHOLDER": "Enter email", + "URL_INPUT_PLACEHOLDER": "Enter URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Aktifkan Aturan Otomatisasi", + "DEACTIVATION_TITLE": "Nonaktifkan Aturan Otomatisasi", + "ACTIVATION_DESCRIPTION": "Tindakan ini akan mengaktifkan aturan otomatisasi '{automationName}'. Apakah Anda yakin ingin melanjutkan?", + "DEACTIVATION_DESCRIPTION": "Tindakan ini akan menonaktifkan aturan otomatisasi '{automationName}'. Apakah Anda yakin ingin melanjutkan?", + "ACTIVATION_SUCCESFUL": "Aturan Otomatisasi Berhasil Diaktifkan", + "DEACTIVATION_SUCCESFUL": "Aturan Otomatisasi Berhasil Dinonaktifkan", + "ACTIVATION_ERROR": "Tidak dapat Mengaktifkan Otomatisasi, Harap coba lagi nanti", + "DEACTIVATION_ERROR": "Tidak dapat Menonaktifkan Otomatisasi, Harap coba lagi nanti", + "CONFIRMATION_LABEL": "Ya", + "CANCEL_LABEL": "Tidak" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Tidak dapat mengunggah lampiran, Harap coba lagi", + "LABEL_IDLE": "Unggah Lampiran", + "LABEL_UPLOADING": "Mengunggah...", + "LABEL_UPLOADED": "Berhasil Diunggah", + "LABEL_UPLOAD_FAILED": "Gagal Mengunggah" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Nilai dibutuhkan", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "NONE_OPTION": "Tidak ada", + "EVENTS": { + "CONVERSATION_CREATED": "Percakapan Dibuat", + "CONVERSATION_UPDATED": "Percakapan Diperbarui", + "MESSAGE_CREATED": "Message Created", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Conversation Opened" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assign to Agent", + "ASSIGN_TEAM": "Assign a Team", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "SEND_EMAIL_TO_TEAM": "Send an Email to Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Matikan Suara Percakapan", + "SNOOZE_CONVERSATION": "Tunda Percakapan", + "RESOLVE_CONVERSATION": "Selesaikan Percakapan", + "SEND_WEBHOOK_EVENT": "Send Webhook Event", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "CHANGE_PRIORITY": "Ubah Prioritas", + "ADD_SLA": "Add SLA", + "OPEN_CONVERSATION": "Buka percakapan" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "Tidak ada", + "LOW": "Rendah", + "MEDIUM": "Sedang", + "HIGH": "Tinggi", + "URGENT": "Penting" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Message Type", + "MESSAGE_CONTAINS": "Message Contains", + "EMAIL": "Email", + "INBOX": "Kotak masuk", + "CONVERSATION_LANGUAGE": "Conversation Language", + "PHONE_NUMBER": "Nomor Telepon", + "STATUS": "Status", + "BROWSER_LANGUAGE": "Bahasa Browser", + "MAIL_SUBJECT": "Email Subject", + "COUNTRY_NAME": "Negara", + "REFERER_LINK": "Referrer Link", + "ASSIGNEE_NAME": "Assignee", + "TEAM_NAME": "Tim", + "PRIORITY": "Prioritas", + "LABELS": "Label" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/bulkActions.json b/app/javascript/dashboard/i18n/locale/id/bulkActions.json new file mode 100644 index 0000000..39f035d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} percakapan dipilih", + "AGENT_SELECT_LABEL": "Pilih Agen", + "ASSIGN_CONFIRMATION_LABEL": "Apakah Anda yakin ingin menugaskan {conversationCount} {conversationLabel} kepada", + "UNASSIGN_CONFIRMATION_LABEL": "Apakah Anda yakin ingin melepaskan penugasan dari {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Kembali", + "ASSIGN_LABEL": "Tugaskan", + "YES": "Ya", + "SEARCH_INPUT_PLACEHOLDER": "Cari", + "ASSIGN_AGENT_TOOLTIP": "Tugaskan agen", + "ASSIGN_TEAM_TOOLTIP": "Tugaskan tim", + "ASSIGN_SUCCESFUL": "Percakapan berhasil ditugaskan.", + "ASSIGN_FAILED": "Failed to assign conversations. Please try again.", + "RESOLVE_SUCCESFUL": "Percakapan berhasil diselesaikan.", + "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Percakapan yang terlihat di halaman ini hanya yang dipilih.", + "AGENT_LIST_LOADING": "Sedang memuat agen", + "UPDATE": { + "CHANGE_STATUS": "Ubah status", + "SNOOZE_UNTIL": "Tunda", + "UPDATE_SUCCESFUL": "Status percakapan berhasil diperbarui.", + "UPDATE_FAILED": "Failed to update conversations. Please try again." + }, + "LABELS": { + "ASSIGN_LABELS": "Assign labels", + "NO_LABELS_FOUND": "Tidak ada label", + "ASSIGN_SELECTED_LABELS": "Tugaskan label terpilih", + "ASSIGN_SUCCESFUL": "Label berhasil ditugaskan.", + "ASSIGN_FAILED": "Failed to assign labels. Please try again." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Pilih tim", + "NONE": "Tidak ada", + "NO_TEAMS_AVAILABLE": "Belum ada tim yang ditambahkan ke akun ini.", + "ASSIGN_SELECTED_TEAMS": "Tugaskan tim terpilih.", + "ASSIGN_SUCCESFUL": "Teams assigned successfully.", + "ASSIGN_FAILED": "Failed to assign team. Please try again." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/campaign.json b/app/javascript/dashboard/i18n/locale/id/campaign.json new file mode 100644 index 0000000..bae264a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "Diaktifkan", + "DISABLED": "Nonaktif" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Dikirim oleh", + "BOT": "Bot", + "FROM": "dari", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "Batalkan", + "CREATE_BUTTON_TEXT": "Buat", + "FORM": { + "TITLE": { + "LABEL": "Judul", + "PLACEHOLDER": "Silakan masukkan judul kampanye", + "ERROR": "Judul wajib diisi" + }, + "MESSAGE": { + "LABEL": "Pesan", + "PLACEHOLDER": "Silakan masukkan pesan kampanye", + "ERROR": "Pesan wajib diisi" + }, + "INBOX": { + "LABEL": "Pilih Kotak Masuk", + "PLACEHOLDER": "Pilih Kotak Masuk", + "ERROR": "Kotak Masuk wajib diisi" + }, + "SENT_BY": { + "LABEL": "Dikirim oleh", + "PLACEHOLDER": "Please select sender", + "ERROR": "Pengirim wajib diisi" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Silakan masukkan URL", + "ERROR": "Harap masukkan URL yang valid" + }, + "TIME_ON_PAGE": { + "LABEL": "Waktu pada halaman(detik)", + "PLACEHOLDER": "Silakan masukkan waktu", + "ERROR": "Waktu pada halaman wajib diisi" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "Aktifkan kampanye", + "TRIGGER_ONLY_BUSINESS_HOURS": "Pemicu hanya selama jam kerja" + }, + "BUTTONS": { + "CREATE": "Buat", + "CANCEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "Terjadi sebuah kesalahan. Silakan coba lagi." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "Terjadi sebuah kesalahan. Silakan coba lagi." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Selesai", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "Batalkan", + "CREATE_BUTTON_TEXT": "Buat", + "FORM": { + "TITLE": { + "LABEL": "Judul", + "PLACEHOLDER": "Silakan masukkan judul kampanye", + "ERROR": "Judul wajib diisi" + }, + "MESSAGE": { + "LABEL": "Pesan", + "PLACEHOLDER": "Silakan masukkan pesan kampanye", + "ERROR": "Pesan wajib diisi" + }, + "INBOX": { + "LABEL": "Pilih Kotak Masuk", + "PLACEHOLDER": "Pilih Kotak Masuk", + "ERROR": "Kotak Masuk wajib diisi" + }, + "AUDIENCE": { + "LABEL": "Hadirin", + "PLACEHOLDER": "Pilih label pelanggan", + "ERROR": "Hadirin wajib diisi" + }, + "SCHEDULED_AT": { + "LABEL": "Waktu penjadwalan", + "PLACEHOLDER": "Silakan pilih waktu", + "ERROR": "Jadwal waktu wajib diisi" + }, + "BUTTONS": { + "CREATE": "Buat", + "CANCEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "Terjadi sebuah kesalahan. Silakan coba lagi." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No WhatsApp campaigns are available", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Selesai", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "Batalkan", + "CREATE_BUTTON_TEXT": "Buat", + "FORM": { + "TITLE": { + "LABEL": "Judul", + "PLACEHOLDER": "Silakan masukkan judul kampanye", + "ERROR": "Judul wajib diisi" + }, + "INBOX": { + "LABEL": "Pilih Kotak Masuk", + "PLACEHOLDER": "Pilih Kotak Masuk", + "ERROR": "Kotak Masuk wajib diisi" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "Process {templateName}", + "LANGUAGE": "Bahasa", + "CATEGORY": "Kategori", + "VARIABLES_LABEL": "Variabel", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "Hadirin", + "PLACEHOLDER": "Pilih label pelanggan", + "ERROR": "Hadirin wajib diisi" + }, + "SCHEDULED_AT": { + "LABEL": "Waktu penjadwalan", + "PLACEHOLDER": "Silakan pilih waktu", + "ERROR": "Jadwal waktu wajib diisi" + }, + "BUTTONS": { + "CREATE": "Buat", + "CANCEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "Terjadi sebuah kesalahan. Silakan coba lagi." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Apakah Anda yakin ingin menghapus?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "Hapus", + "API": { + "SUCCESS_MESSAGE": "Kampanye berhasil dihapus", + "ERROR_MESSAGE": "Terjadi sebuah kesalahan. Silakan coba lagi." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/id/cannedMgmt.json new file mode 100644 index 0000000..58f77c8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Balasan Canned", + "LEARN_MORE": "Learn more about canned responses", + "DESCRIPTION": "Canned Responses are pre-written reply templates that help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a canned response during a conversation. ", + "HEADER_BTN_TXT": "Add canned response", + "LOADING": "Fetching canned responses...", + "SEARCH_404": "Tidak ada item yang cocok dengan kueri ini.", + "LIST": { + "404": "Tidak ada balasan canned yang tersedia di akun ini.", + "TITLE": "Kelola Balasan Canned", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "TABLE_HEADER": { + "SHORT_CODE": "Short code", + "CONTENT": "Konten", + "ACTIONS": "Aksi" + } + }, + "ADD": { + "TITLE": "Add canned response", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "CANCEL_BUTTON_TEXT": "Batalkan", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a short code.", + "ERROR": "Short Code is required." + }, + "CONTENT": { + "LABEL": "Pesan", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "Kirim" + }, + "API": { + "SUCCESS_MESSAGE": "Canned response added successfully.", + "ERROR_MESSAGE": "Tidak dapat terhubung ke Server Woot, Silahkan coba lagi nanti" + } + }, + "EDIT": { + "TITLE": "Edit canned response", + "CANCEL_BUTTON_TEXT": "Batalkan", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a shortcode.", + "ERROR": "Short code is required." + }, + "CONTENT": { + "LABEL": "Pesan", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Pesan wajib diisi." + }, + "SUBMIT": "Kirim" + }, + "BUTTON_TEXT": "Edit", + "API": { + "SUCCESS_MESSAGE": "Canned response is updated successfully.", + "ERROR_MESSAGE": "Tidak dapat terhubung ke Server Woot, Silahkan coba lagi nanti" + } + }, + "DELETE": { + "BUTTON_TEXT": "Hapus", + "API": { + "SUCCESS_MESSAGE": "Canned response deleted successfully.", + "ERROR_MESSAGE": "Tidak dapat terhubung ke Server Woot, Silahkan coba lagi nanti" + }, + "CONFIRM": { + "TITLE": "Konfirmasi penghapusan", + "MESSAGE": "Apakah Anda yakin untuk menghapus ", + "YES": "Yes, delete ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/chatlist.json b/app/javascript/dashboard/i18n/locale/id/chatlist.json new file mode 100644 index 0000000..cea5c7e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Mengambil percakapan", + "LOAD_MORE_CONVERSATIONS": "Muat lebih banyak percakapan", + "EOF": "Semua percakapan dimuat 🎉", + "LIST": { + "404": "Tidak ada percakapan aktif di grup ini." + }, + "FAILED_TO_SEND": "Failed to send", + "TAB_HEADING": "Percakapan", + "MENTION_HEADING": "Sebutkan", + "UNATTENDED_HEADING": "Belum dihadiri", + "SEARCH": { + "INPUT": "Telusuri Orang, Obrolan, Balasan Tersimpan.." + }, + "FILTER_ALL": "Semua", + "ASSIGNEE_TYPE_TABS": { + "me": "Milikku", + "unassigned": "Belum ditugaskan", + "all": "Semua" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Terbuka" + }, + "resolved": { + "TEXT": "Terselesaikan" + }, + "pending": { + "TEXT": "Ditunda" + }, + "snoozed": { + "TEXT": "Ditunda Sebentar" + }, + "all": { + "TEXT": "Semua" + } + }, + "VIEW_FILTER": "Lihat", + "SORT_TOOLTIP_LABEL": "Urutkan percakapan", + "CHAT_SORT": { + "STATUS": "Status", + "ORDER_BY": "Urut berdasarkan" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Dibuat", + "OLDEST": "Dibuat pada:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Aktivitas terakhir:", + "ACTIVE": "Aktivitas terakhir" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Last activity: Oldest first" + }, + "last_activity_at_desc": { + "TEXT": "Last activity: Newest first" + }, + "created_at_desc": { + "TEXT": "Created at: Newest first" + }, + "created_at_asc": { + "TEXT": "Created at: Oldest first" + }, + "priority_desc": { + "TEXT": "Priority: Highest first" + }, + "priority_asc": { + "TEXT": "Priority: Lowest first" + }, + "waiting_since_asc": { + "TEXT": "Pending Response: Longest first" + }, + "waiting_since_desc": { + "TEXT": "Pending Response: Shortest first" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Pesan gambar" + }, + "audio": { + "CONTENT": "Pesan audio" + }, + "video": { + "CONTENT": "Pesan video" + }, + "file": { + "CONTENT": "Lampiran File" + }, + "location": { + "CONTENT": "Lokasi" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "telah membagikan url" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Urutkan percakapan", + "DROPDOWN_TITLE": "Urutkan berdasarkan", + "ITEMS": { + "LATEST": { + "NAME": "Aktivitas terakhir pada", + "LABEL": "Aktivitas terakhir" + }, + "CREATED_AT": { + "NAME": "Dibuat pada", + "LABEL": "Dibuat pada" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Pesan terakhir dari pengguna pada", + "LABEL": "Pesan terakhir" + } + } + }, + "RECEIVED_VIA_EMAIL": "Diterima melalui email", + "VIEW_TWEET_IN_TWITTER": "Lihat tweet di Twitter", + "REPLY_TO_TWEET": "Balas tweet ini", + "LINK_TO_STORY": "Buka cerita di Instagram", + "SENT": "Berhasil terkirim", + "READ": "Berhasil dibaca", + "DELIVERED": "Berhasil dikirim", + "NO_MESSAGES": "Tidak Ada Pesan", + "NO_CONTENT": "Tidak ada konten yang tersedia", + "HIDE_QUOTED_TEXT": "Sembunyikan Teks yang Dikutip", + "SHOW_QUOTED_TEXT": "Tampilkan Teks yang Dikutip", + "MESSAGE_READ": "Dibaca", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/companies.json b/app/javascript/dashboard/i18n/locale/id/companies.json new file mode 100644 index 0000000..3a69a83 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Urutkan berdasarkan", + "OPTIONS": { + "NAME": "Nama", + "DOMAIN": "Domain", + "CREATED_AT": "Dibuat pada", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/components.json b/app/javascript/dashboard/i18n/locale/id/components.json new file mode 100644 index 0000000..2f1e680 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} of {totalPages} pages" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "Tidak ada hasil ditemukan.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} more" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "Tidak ada hasil ditemukan.", + "SEARCHING": "Sedang mencari..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Batalkan", + "CONFIRM": "Konfirmasi" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Search country", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Pilih kode panggilan dari daftar" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Author is not available" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Pelajari lebih lanjut", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/contact.json b/app/javascript/dashboard/i18n/locale/id/contact.json new file mode 100644 index 0000000..916235b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Tidak Tersedia", + "EMAIL_ADDRESS": "Alamat Email", + "PHONE_NUMBER": "Nomor Telepon", + "IDENTIFIER": "Pengenal", + "COPY_SUCCESSFUL": "Berhasil disalin ke clipboard", + "COMPANY": "Perusahaan", + "LOCATION": "Lokasi", + "BROWSER_LANGUAGE": "Bahasa Browser", + "CONVERSATION_TITLE": "Detail Percakapan", + "VIEW_PROFILE": "Lihat Profil", + "BROWSER": "Browser", + "OS": "Sistem Operasi", + "INITIATED_FROM": "Dimulai dari", + "INITIATED_AT": "Dimulai pada", + "IP_ADDRESS": "Alamat IP", + "CREATED_AT_LABEL": "Dibuat", + "NEW_MESSAGE": "Pesan baru", + "CALL": "Call", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "Tidak ada percakapan sebelumnya yang terkait dengan kontak ini.", + "TITLE": "Percakapan Sebelumnya" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Label Kontak", + "ERROR": "Tidak dapat mengupdate label" + }, + "CONVERSATION": { + "TITLE": "Label Percakapan", + "ADD_BUTTON": "Tambah label" + }, + "LABEL_SELECT": { + "TITLE": "Tambah label", + "PLACEHOLDER": "Cari label", + "NO_RESULT": "Tidak ada label", + "CREATE_LABEL": "Buat label baru" + } + }, + "MERGE_CONTACT": "Gabungkan Kontak", + "CONTACT_ACTIONS": "Tindakan Kontak", + "MUTE_CONTACT": "Block Contact", + "UNMUTE_CONTACT": "Unblock Contact", + "MUTED_SUCCESS": "This contact is blocked successfully. You will not be notified of any future conversations.", + "UNMUTED_SUCCESS": "This contact is unblocked successfully.", + "SEND_TRANSCRIPT": "Kirim Transkrip", + "EDIT_LABEL": "Edit", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Atribut Kustom", + "CONTACT_LABELS": "Label Kontak", + "PREVIOUS_CONVERSATIONS": "Percakapan Sebelumnya", + "NO_RECORDS_FOUND": "Tidak ditemukan atribut" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Edit Kontak", + "TITLE": "Edit kontak", + "DESC": "Edit detail kontak" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Hapus Kontak", + "TITLE": "Hapus kontak", + "DESC": "Hapus detil kontak", + "CONFIRM": { + "TITLE": "Konfirmasi Penghapusan", + "MESSAGE": "Apakah Anda yakin ingin menghapus ", + "YES": "Ya, Hapus", + "NO": "Tidak, Simpan" + }, + "API": { + "SUCCESS_MESSAGE": "Kontak berhasil dihapus", + "ERROR_MESSAGE": "Tidak dapat menghapus kontak. Silakan coba lagi nanti." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Kirim", + "CANCEL": "Batalkan", + "AVATAR": { + "LABEL": "Avatar Kontak" + }, + "NAME": { + "PLACEHOLDER": "Masukkan nama lengkap kontak", + "LABEL": "Nama Lengkap" + }, + "BIO": { + "PLACEHOLDER": "Masukkan biografi kontak", + "LABEL": "Biografi" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Masukkan alamat email kontak", + "LABEL": "Alamat Email", + "DUPLICATE": "Alamat email ini digunakan untuk kontak lain.", + "ERROR": "Harap masukkan alamat email yang valid." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Masukkan nomor telepon kontak tersebut", + "LABEL": "Nomor Telepon", + "HELP": "Nomor telepon harus dalam format E.164, misalnya: +1415555555 [+][kode negara][kode area][nomor telepon]", + "ERROR": "Nomor telepon harus kosong atau dalam format E.164", + "DIAL_CODE_ERROR": "Pilih kode panggilan dari daftar", + "DUPLICATE": "Nomor ini sudah digunakan oleh kontak lain." + }, + "LOCATION": { + "PLACEHOLDER": "Masukkan lokasi kontak", + "LABEL": "Lokasi" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Masukkan nama perusahaan", + "LABEL": "Nama Perusahaan" + }, + "COUNTRY": { + "PLACEHOLDER": "Masukkan nama negara", + "LABEL": "Nama Negara", + "SELECT_PLACEHOLDER": "Pilih", + "REMOVE": "Hapus", + "SELECT_COUNTRY": "Pilih Negara" + }, + "CITY": { + "PLACEHOLDER": "Masukkan nama kota", + "LABEL": "Nama Kota" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Masukkan nama pengguna Facebook", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Edit nama pengguna Twitter", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Edit nama pengguna LinkedIn", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Edit nama pengguna GitHub", + "LABEL": "GitHub" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Avatar kontak berhasil dihapus", + "ERROR_MESSAGE": "Tidak dapat menghapus avatar kontak. Silakan coba lagi nanti." + } + }, + "SUCCESS_MESSAGE": "Kontak berhasil disimpan", + "ERROR_MESSAGE": "Terjadi kesalahan, harap coba lagi" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Mulai Percakapan", + "TITLE": "Percakapan baru", + "DESC": "Mulai sebuah percakapan baru dengan mengirim pesan baru.", + "NO_INBOX": "Tidak dapat menemukan kotak masuk untuk memulai percakapan baru dengan kontak ini.", + "FORM": { + "TO": { + "LABEL": "Kepada" + }, + "INBOX": { + "LABEL": "Kotak Masuk", + "PLACEHOLDER": "Pilih kotak masuk", + "ERROR": "Pilih kotak masuk" + }, + "SUBJECT": { + "LABEL": "Subjek", + "PLACEHOLDER": "Masukkan subjek", + "ERROR": "Subjek tidak boleh kosong" + }, + "MESSAGE": { + "LABEL": "Pesan", + "PLACEHOLDER": "Tulis pesan Anda di sini", + "ERROR": "Pesan tidak boleh kosong" + }, + "ATTACHMENTS": { + "SELECT": "Choose files", + "HELP_TEXT": "Drag and drop files here or choose files to attach" + }, + "SUBMIT": "Kirim Pesan", + "CANCEL": "Batalkan", + "SUCCESS_MESSAGE": "Pesan terkirim!", + "GO_TO_CONVERSATION": "Lihat", + "ERROR_MESSAGE": "Tidak dapat mengirim pesan! Coba lagi" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Profil Sosial" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Tambahkan atribut kustom", + "COPY_SUCCESSFUL": "Berhasil disalin ke clipboard", + "SHOW_MORE": "Show all attributes", + "SHOW_LESS": "Show less attributes", + "ACTIONS": { + "COPY": "Salin Atribut", + "DELETE": "Hapus Atribut", + "EDIT": "Edit Atribut" + }, + "ADD": { + "TITLE": "Buat Atribut Kustom", + "DESC": "Tambahkan informasi kustom pada kontak ini." + }, + "FORM": { + "CREATE": "Tambahkan Atribut", + "CANCEL": "Batalkan", + "NAME": { + "LABEL": "Nama Atribut Kustom", + "PLACEHOLDER": "Misal: ID toko", + "ERROR": "Nama atribut kustom tidak valid" + }, + "VALUE": { + "LABEL": "Nilai Atribut", + "PLACEHOLDER": "Misal: 11901" + }, + "ADD": { + "TITLE": "Membuat Atribut Baru", + "SUCCESS": "Atribut berhasil ditambahkan", + "ERROR": "Tidak dapat membuat atribut, Silakan coba lagi nanti" + }, + "UPDATE": { + "SUCCESS": "Atribut berhasil diperbarui", + "ERROR": "Tidak dapat memperbarui atribut, Silakan coba lagi nanti" + }, + "DELETE": { + "SUCCESS": "Atribut berhasil dihapus", + "ERROR": "Tidak dapat menghapus atribut. Silakan coba lagi nanti" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Tambahkan Atribut", + "PLACEHOLDER": "Cari atribut", + "NO_RESULT": "Tidak ditemukan atribut" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Pilih nilai", + "SEARCH_INPUT_PLACEHOLDER": "Cari nilai", + "NO_RESULT": "Tidak ada hasil" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Nilai yang valid diperlukan", + "INVALID_URL": "URL tidak valid", + "INVALID_INPUT": "Masukan Tidak Valid" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Gabungkan Kontak", + "DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact’ s attributes will take precedence.", + "PRIMARY": { + "TITLE": "Kontak Utama", + "HELP_LABEL": "Akan dihapus" + }, + "PARENT": { + "TITLE": "Kontak yang akan Digabungkan", + "PLACEHOLDER": "Cari kontak", + "HELP_LABEL": "Akan tetap" + }, + "SUMMARY": { + "TITLE": "Ringkasan", + "DELETE_WARNING": "Kontak {primaryContactName} akan dihapus.", + "ATTRIBUTE_WARNING": "Detail kontak dari {primaryContactName} akan disalin ke {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": "Gabungkan Kontak", + "CANCEL": "Batalkan", + "CHILD_CONTACT": { + "ERROR": "Pilih kontak yang akan digabungkan" + }, + "SUCCESS_MESSAGE": "Kontak berhasil digabungkan", + "ERROR_MESSAGE": "Tidak dapat menggabungkan kontak, coba lagi!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Kontak", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "Active contacts", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "Pesan", + "SEND_MESSAGE": "Kirim Pesan", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "Kontak" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Tambahkan kontak", + "EXPORT_CONTACT": "Ekspor kontak", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Simpan kontak", + "EMAIL_ADDRESS_DUPLICATE": "Alamat email ini digunakan untuk kontak lain.", + "PHONE_NUMBER_DUPLICATE": "Nomor ini sudah digunakan oleh kontak lain.", + "SUCCESS_MESSAGE": "Kontak berhasil disimpan", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "This contact is unblocked successfully", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Impor kontak", + "DESCRIPTION": "Impor kontak melalui file CSV.", + "DOWNLOAD_LABEL": "Unduh contoh file CSV.", + "LABEL": "File CSV:", + "CHOOSE_FILE": "Pilih berkas", + "CHANGE": "Ubah", + "CANCEL": "Batalkan", + "IMPORT": "Impor", + "SUCCESS_MESSAGE": "You will be notified via email when the import is complete.", + "ERROR_MESSAGE": "Terjadi kesalahan, harap coba lagi" + }, + "EXPORT_CONTACT": { + "TITLE": "Ekspor kontak", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Ekspor", + "SUCCESS_MESSAGE": "Export is in progress, You will be notified via email when export file is ready to dowanlod.", + "ERROR_MESSAGE": "Terjadi kesalahan, harap coba lagi" + }, + "SORT_BY": { + "LABEL": "Urutkan berdasarkan", + "OPTIONS": { + "NAME": "Nama", + "EMAIL": "Email", + "PHONE_NUMBER": "Nomor Telepon", + "COMPANY": "Perusahaan", + "COUNTRY": "Negara", + "CITY": "Kota", + "LAST_ACTIVITY": "Aktivitas terakhir", + "CREATED_AT": "Dibuat pada" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Apakah Anda ingin menyimpan filter ini?", + "CONFIRM": "Simpan filter", + "LABEL": "Nama", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "Konfirmasi Penghapusan", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "Ya, Hapus", + "CANCEL": "No, Cancel", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "Nama", + "EMAIL": "Email", + "PHONE_NUMBER": "Nomor Telepon", + "IDENTIFIER": "Pengenal", + "COUNTRY": "Negara", + "CITY": "Kota", + "CREATED_AT": "Dibuat pada", + "LAST_ACTIVITY": "Aktivitas terakhir", + "REFERER_LINK": "Tautan Referer", + "BLOCKED": "Blocked", + "BLOCKED_TRUE": "Benar", + "BLOCKED_FALSE": "Salah", + "BUTTONS": { + "CLEAR_FILTERS": "Clear filters", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "Terapkan filter", + "ADD_FILTER": "Tambah filter" + }, + "TITLE": "Filter kontak", + "EDIT_SEGMENT": "Edit Segmen", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Clear filters" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "Lihat Detail", + "EDIT_DETAILS_FORM": { + "TITLE": "Edit detail kontak", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "Alamat email ini digunakan untuk kontak lain." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "Nomor ini sudah digunakan oleh kontak lain." + }, + "CITY": { + "PLACEHOLDER": "Masukkan nama kota" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Masukkan nama perusahaan" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "This action is permanent and irreversible.", + "BUTTON": "Delete now" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "Hapus kontak", + "DELETE_DIALOG": { + "TITLE": "Konfirmasi Penghapusan", + "DESCRIPTION": "Are you sure you want to delete this contact?", + "CONFIRM": "Ya, Hapus", + "API": { + "SUCCESS_MESSAGE": "Kontak berhasil dihapus", + "ERROR_MESSAGE": "Tidak dapat menghapus kontak. Silakan coba lagi nanti." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatar berhasil dihapus", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Atribut", + "HISTORY": "History", + "NOTES": "Catatan", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "Tidak ada percakapan sebelumnya yang terkait dengan kontak ini" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "Ya", + "NO": "Tidak", + "TRIGGER": { + "SELECT": "Pilih nilai", + "INPUT": "Enter value" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "Nilai yang valid diperlukan", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "URL tidak valid", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "Tidak ditemukan atribut", + "API": { + "SUCCESS_MESSAGE": "Atribut berhasil diperbarui", + "DELETE_SUCCESS_MESSAGE": "Atribut berhasil dihapus", + "UPDATE_ERROR": "Tidak dapat memperbarui atribut, Silakan coba lagi nanti", + "DELETE_ERROR": "Tidak dapat menghapus atribut. Silakan coba lagi nanti" + } + }, + "MERGE": { + "TITLE": "Gabungkan Kontak", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Kontak Utama", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "Akan dihapus", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Cari kontak", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Kontak berhasil digabungkan", + "ERROR_MESSAGE": "Tidak dapat menggabungkan kontak, coba lagi!", + "IS_SEARCHING": "Sedang mencari...", + "BUTTONS": { + "CANCEL": "Batalkan", + "CONFIRM": "Gabungkan Kontak" + } + }, + "NOTES": { + "PLACEHOLDER": "Tambahkan Catatan", + "WROTE": "menulis", + "YOU": "Anda", + "SAVE": "Save note", + "ADD_NOTE": "Add contact note", + "EXPAND": "Expand", + "COLLAPSE": "Collapse", + "NO_NOTES": "No notes, you can add notes from the contact details page.", + "EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "No contacts found in this account", + "SUBTITLE": "Start adding new contacts by clicking on the button below", + "BUTTON_LABEL": "Tambahkan kontak", + "SEARCH_EMPTY_STATE_TITLE": "Tidak ada kontak yang cocok dengan pencarian Anda 🔍", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Tugaskan Label", + "ASSIGN_LABELS_SUCCESS": "Label berhasil ditugaskan.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "Hapus", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Hapus kontak" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "Lihat", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "Kepada:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Masukkan subjek :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "Bcc:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "Bcc" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Tulis pesan Anda di sini..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Variabel", + "BACK": "Kembali", + "SEND_MESSAGE": "Kirim Pesan" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Kembali", + "SEND_MESSAGE": "Kirim Pesan" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/contactFilters.json b/app/javascript/dashboard/i18n/locale/id/contactFilters.json new file mode 100644 index 0000000..8360a06 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filter Kontak", + "SUBTITLE": "Tambahkan filter di bawah ini dan tekan 'Kirim' untuk menyaring kontak.", + "EDIT_CUSTOM_SEGMENT": "Sunting Segmen", + "CUSTOM_VIEWS_SUBTITLE": "Tambahkan atau hapus filter dan perbarui segmen Anda.", + "ADD_NEW_FILTER": "Tambahkan Filter Baru", + "CLEAR_ALL_FILTERS": "Hapus Semua Filter", + "FILTER_DELETE_ERROR": "Anda harus memiliki setidaknya satu filter yang disimpan", + "SUBMIT_BUTTON_LABEL": "Kirim", + "UPDATE_BUTTON_LABEL": "Perbarui Segmen", + "CANCEL_BUTTON_LABEL": "Batalkan", + "CLEAR_BUTTON_LABEL": "Hapus Filter", + "EMPTY_VALUE_ERROR": "Nilai dibutuhkan", + "SEGMENT_LABEL": "Nama Segmen", + "SEGMENT_QUERY_LABEL": "Kueri Segmen", + "TOOLTIP_LABEL": "Filter kontak", + "QUERY_DROPDOWN_LABELS": { + "AND": "DAN", + "OR": "ATAU" + }, + "OPERATOR_LABELS": { + "equal_to": "Sama dengan", + "not_equal_to": "Tidak sama dengan", + "contains": "Berisi", + "does_not_contain": "Tidak berisi", + "is_present": "Ada", + "is_not_present": "Tidak ada", + "is_greater_than": "Lebih besar dari", + "is_lesser_than": "Lebih kecil dari", + "days_before": "X hari sebelum" + }, + "ERRORS": { + "VALUE_REQUIRED": "Nilai dibutuhkan" + }, + "ATTRIBUTES": { + "NAME": "Nama", + "EMAIL": "Email", + "PHONE_NUMBER": "Nomor Telepon", + "IDENTIFIER": "Pengenal", + "CITY": "Kota", + "COUNTRY": "Negara", + "CUSTOM_ATTRIBUTE_LIST": "Daftar Kustom", + "CUSTOM_ATTRIBUTE_TEXT": "Teks Kustom", + "CUSTOM_ATTRIBUTE_NUMBER": "Nomor Kustom", + "CUSTOM_ATTRIBUTE_LINK": "Tautan Kustom", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Kotak Centang Kustom", + "CREATED_AT": "Dibuat pada", + "LAST_ACTIVITY": "Aktivitas Terakhir", + "REFERER_LINK": "Tautan Referrer", + "BLOCKED": "Blocked", + "LABELS": "Label" + }, + "GROUPS": { + "STANDARD_FILTERS": "Filter Standar", + "ADDITIONAL_FILTERS": "Filter Tambahan", + "CUSTOM_ATTRIBUTES": "Atribut Kustom" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/contentTemplates.json b/app/javascript/dashboard/i18n/locale/id/contentTemplates.json new file mode 100644 index 0000000..7745a36 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Cari Templat", + "NO_TEMPLATES_FOUND": "Tidak ditemukan templat untuk", + "NO_CONTENT": "No content", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Kategori", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Bahasa", + "TEMPLATE_BODY": "Isi Templat", + "CATEGORY": "Kategori" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Teks" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variabel", + "LANGUAGE": "Bahasa", + "CATEGORY": "Kategori", + "VARIABLE_PLACEHOLDER": "Masukkan nilai {variable}", + "GO_BACK_LABEL": "Kembali", + "SEND_MESSAGE_LABEL": "Kirim Pesan", + "FORM_ERROR_MESSAGE": "Harap isi semua variabel sebelum mengirim", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Kembali", + "SEND_MESSAGE_BUTTON": "Kirim Pesan" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/conversation.json b/app/javascript/dashboard/i18n/locale/id/conversation.json new file mode 100644 index 0000000..d64dd82 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Pilih percakapan dari panel kiri", + "CSAT_REPLY_MESSAGE": "Silakan beri peringkat percakapan ini", + "404": "Maaf, kami tidak dapat menemukan percakapan ini. Silakan coba lagi", + "SWITCH_VIEW_LAYOUT": "Ganti tampilan", + "DASHBOARD_APP_TAB_MESSAGES": "Pesan", + "UNVERIFIED_SESSION": "Identitas pengguna ini belum diverifikasi", + "NO_MESSAGE_1": "Aduh! Sepertinya tidak ada pesan dari pelanggan di kotak masuk Anda.", + "NO_MESSAGE_2": " untuk mengirim pesan ke halaman Anda!", + "NO_INBOX_1": "Halo! Sepertinya Anda belum menambahkan kotak masuk apa pun.", + "NO_INBOX_2": " untuk memulai", + "NO_INBOX_AGENT": "Aduh! Sepertinya Anda bukan bagian dari kotak masuk mana pun. Silakan hubungi administrator Anda", + "SEARCH_MESSAGES": "Mencari pesan dalam percakapan", + "VIEW_ORIGINAL": "Lihat asli", + "VIEW_TRANSLATED": "Lihat terjemahan", + "EMPTY_STATE": { + "CMD_BAR": "to open command menu", + "KEYBOARD_SHORTCUTS": "to view keyboard shortcuts" + }, + "SEARCH": { + "TITLE": "Mencari pesan", + "RESULT_TITLE": "Hasil Pencarian", + "LOADING_MESSAGE": "Mengolah data...", + "PLACEHOLDER": "Ketik teks apa saja untuk mencari pesan", + "NO_MATCHING_RESULTS": "Tidak ada hasil ditemukan." + }, + "UNREAD_MESSAGES": "Pesan Belum Terbaca", + "UNREAD_MESSAGE": "Pesan Belum Terbaca", + "CLICK_HERE": "Klik disini", + "LOADING_INBOXES": "Memuat kotak masuk", + "LOADING_CONVERSATIONS": "Memuat Percakapan", + "CANNOT_REPLY": "Anda tidak dapat membalas karena", + "24_HOURS_WINDOW": "Pembatasan jendela pesan 24 jam", + "48_HOURS_WINDOW": "Pembatasan jendela pesan 48 jam", + "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours", + "NOT_ASSIGNED_TO_YOU": "Percakapan ini tidak ditugaskan kepada Anda. Apakah Anda ingin menugaskan percakapan ini kepada diri Anda?", + "ASSIGN_TO_ME": "Tugaskan kepada saya", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "Anda hanya dapat membalas percakapan ini menggunakan pesan template karena", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "Pembatasan jendela pesan 24 jam", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "Anda membalas:", + "REMOVE_SELECTION": "Hapus Pilihan", + "DOWNLOAD": "Unduh", + "UNKNOWN_FILE_TYPE": "Jenis Berkas Tidak Dikenal", + "SAVE_CONTACT": "Simpan Kontak", + "NO_CONTENT": "Tidak ada konten untuk ditampilkan", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} membagikan sebuah kontak", + "LOCATION": "{sender} membagikan lokasi", + "FILE": "{sender} membagikan sebuah berkas", + "MEETING": "{sender} memulai percakapan" + }, + "UPLOADING_ATTACHMENTS": "Mengunggah lampiran...", + "REPLIED_TO_STORY": "Membalas cerita Anda", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", + "SUCCESS_DELETE_MESSAGE": "Pesan berhasil dihapus", + "FAIL_DELETE_MESSSAGE": "Tidak dapat menghapus pesan! Coba lagi", + "NO_RESPONSE": "Tidak ada respon", + "RESPONSE": "Response", + "RATING_TITLE": "Penilaian", + "FEEDBACK_TITLE": "Umpan Balik", + "REPLY_MESSAGE_NOT_FOUND": "Message not available", + "CARD": { + "SHOW_LABELS": "Tampilkan label", + "HIDE_LABELS": "Sembunyikan label" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "Menyelesaikan", + "REOPEN_ACTION": "Buka Kembali", + "OPEN_ACTION": "Terbuka", + "MORE_ACTIONS": "More actions", + "OPEN": "Selebihnya", + "CLOSE": "Tutup", + "DETAILS": "detail", + "SNOOZED_UNTIL": "Ditunda hingga", + "SNOOZED_UNTIL_TOMORROW": "Ditunda hingga besok", + "SNOOZED_UNTIL_NEXT_WEEK": "Ditunda hingga minggu depan", + "SNOOZED_UNTIL_NEXT_REPLY": "Ditunda hingga balasan selanjutnya", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "missed", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Tandai sebagai tertunda", + "SNOOZE_UNTIL": "Tunda", + "SNOOZE": { + "TITLE": "Tunda hingga", + "NEXT_REPLY": "Balasan selanjutnya", + "TOMORROW": "Besok", + "NEXT_WEEK": "Minggu depan" + } + }, + "MENTION": { + "AGENTS": "Agen", + "TEAMS": "Tim" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Tunda hingga", + "APPLY": "Tunda", + "CANCEL": "Batalkan" + }, + "PRIORITY": { + "TITLE": "Prioritas", + "OPTIONS": { + "NONE": "Tidak ada", + "URGENT": "Penting", + "HIGH": "Tinggi", + "MEDIUM": "Sedang", + "LOW": "Rendah" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "Tidak ada", + "INPUT_PLACEHOLDER": "Pilih prioritas", + "NO_RESULTS": "Tidak ada hasil ditemukan", + "SUCCESSFUL": "Berhasil mengubah prioritas percakapan dengan ID {conversationId} menjadi {priority}", + "FAILED": "Gagal mengubah prioritas. Silakan coba lagi." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Delete conversation #{conversationId}", + "DESCRIPTION": "Are you sure you want to delete this conversation?", + "CONFIRM": "Hapus" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Tandai sebagai tertunda", + "RESOLVED": "Tandai sebagai terselesaikan", + "MARK_AS_UNREAD": "Tandai sebagai belum terbaca", + "MARK_AS_READ": "Tanda telah dibaca", + "REOPEN": "Buka kembali percakapan", + "SNOOZE": { + "TITLE": "Tunda", + "NEXT_REPLY": "Hingga balasan berikutnya", + "TOMORROW": "Hingga besok", + "NEXT_WEEK": "Hingga minggu depan" + }, + "ASSIGN_AGENT": "Tugaskan agen", + "ASSIGN_LABEL": "Tugaskan label", + "AGENTS_LOADING": "Sedang memuat agen...", + "ASSIGN_TEAM": "Tugaskan tim", + "DELETE": "Delete conversation", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Id percakapan {conversationId} ditugaskan ke \"{agentName}\"", + "FAILED": "Tidak dapat menugaskan agen. Silakan coba lagi." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Tidak dapat menugaskan label. Silakan coba lagi." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Tim \"{team}\" ditugaskan ke id percakapan {conversationId}", + "FAILED": "Tidak dapat menugaskan tim. Silakan coba lagi." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Tanda tangan pesan", + "ENABLE_SIGN_TOOLTIP": "Aktifkan tanda tangan", + "DISABLE_SIGN_TOOLTIP": "Nonaktifkan tanda tangan", + "MSG_INPUT": "Shift + enter untuk baris baru. Mulailah dengan '/' untuk memilih Canned Response.", + "PRIVATE_MSG_INPUT": "Shift + enter untuk baris baru. Ini hanya akan terlihat oleh Agen", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Tanda tangan pesan tidak dikonfigurasi, harap konfigurasikan di pengaturan profil.", + "CLICK_HERE": "Klik di sini untuk memperbarui", + "WHATSAPP_TEMPLATES": "Templat Whatsapp" + }, + "REPLYBOX": { + "REPLY": "Balas", + "PRIVATE_NOTE": "Catatan Pribadi", + "SEND": "Kirim", + "CREATE": "Tambahkan Catatan", + "INSERT_READ_MORE": "Baca lebih lanjut", + "DISMISS_REPLY": "Dismiss reply", + "REPLYING_TO": "Replying to:", + "TIP_EMOJI_ICON": "Tampilkan pemilih emoji", + "TIP_ATTACH_ICON": "Lampirkan file", + "TIP_AUDIORECORDER_ICON": "Rekam audio", + "TIP_AUDIORECORDER_PERMISSION": "Izinkan akses ke audio", + "TIP_AUDIORECORDER_ERROR": "Tidak dapat membuka audio", + "DRAG_DROP": "Seret dan letakkan di sini untuk melampirkan", + "START_AUDIO_RECORDING": "Mulai merekam audio", + "STOP_AUDIO_RECORDING": "Berhenti merekam audio", + "": "", + "EMAIL_HEAD": { + "TO": "KEPADA", + "ADD_BCC": "Tambahkan bcc", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "Email dipisahkan dengan koma", + "ERROR": "Harap masukkan alamat email yang valid" + }, + "BCC": { + "LABEL": "BCC", + "PLACEHOLDER": "Email dipisahkan dengan koma", + "ERROR": "Harap masukkan alamat email yang valid" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Variabel tidak terdefinisi", + "MESSAGE": "Anda memiliki {undefinedVariablesCount} variabel tidak terdefinisi dalam pesan Anda: {undefinedVariables}. Apakah Anda ingin tetap mengirim pesan ini?", + "CONFIRM": { + "YES": "Kirim", + "CANCEL": "Batalkan" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "Catatan Pribadi: Hanya terlihat oleh Anda dan tim Anda", + "CHANGE_STATUS": "Status percakapan berubah", + "CHANGE_STATUS_FAILED": "Gagal mengubah status percakapan", + "CHANGE_AGENT": "Percakapan diubah oleh agen", + "CHANGE_AGENT_FAILED": "Gagal mengubah penugasan", + "ASSIGN_LABEL_SUCCESFUL": "Label berhasil ditugaskan", + "ASSIGN_LABEL_FAILED": "Gagal menugaskan label", + "CHANGE_TEAM": "Percakapan diubah oleh tim", + "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", + "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", + "FILE_SIZE_LIMIT": "Lampiran melebihi batas ukuran {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB", + "MESSAGE_ERROR": "Tidak dapat mengirim pesan ini, mohon coba lagi nanti", + "SENT_BY": "Dikirim oleh:", + "BOT": "Bot", + "SEND_FAILED": "Tidak dapat mengirim pesan! Coba lagi", + "TRY_AGAIN": "coba lagi", + "ASSIGNMENT": { + "SELECT_AGENT": "Pilih Agen", + "REMOVE": "Hapus", + "ASSIGN": "Tugaskan" + }, + "CONTEXT_MENU": { + "COPY": "Salin", + "REPLY_TO": "Balas pesan ini", + "DELETE": "Hapus", + "CREATE_A_CANNED_RESPONSE": "Tambahkan ke respon siap pakai", + "TRANSLATE": "Terjemahkan", + "COPY_PERMALINK": "Salin tautan ke pesan", + "LINK_COPIED": "Tautan pesan disalin ke clipboard", + "DELETE_CONFIRMATION": { + "TITLE": "Apakah Anda yakin ingin menghapus pesan ini?", + "MESSAGE": "Anda tidak dapat membatalkan tindakan ini", + "DELETE": "Hapus", + "CANCEL": "Batalkan" + } + }, + "SIDEBAR": { + "CONTACT": "Kontak", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Kirim transkrip percakapan", + "DESC": "Kirim salinan transkrip percakapan ke alamat email yang ditentukan", + "SUBMIT": "Kirim", + "CANCEL": "Batalkan", + "SEND_EMAIL_SUCCESS": "Transkrip percakapan berhasil terkirim", + "SEND_EMAIL_ERROR": "Terjadi kesalahan, mohon coba lagi", + "FORM": { + "SEND_TO_CONTACT": "Kirim transkrip ke pelanggan", + "SEND_TO_AGENT": "Kirim transkrip dari agen yang ditugaskan", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Kirim transkrip ke alamat email lainnya", + "EMAIL": { + "PLACEHOLDER": "Masukkan alamat email", + "ERROR": "Harap masukkan alamat email yang valid" + } + } + }, + "ONBOARDING": { + "TITLE": "Hai 👋, Selamat datang di {installationName}!", + "DESCRIPTION": "Terima kasih telah mendaftar. Kami ingin Anda mendapatkan hasil maksimal dari {installationName}. Berikut beberapa hal yang dapat Anda lakukan di {installationName} untuk membuat pengalaman menyenangkan.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "Baca pembaruan terbaru kami", + "ALL_CONVERSATION": { + "TITLE": "Semua percakapan Anda di satu tempat", + "DESCRIPTION": "Lihat semua percakapan dari pelanggan Anda dalam satu dasbor. Anda dapat memfilter percakapan berdasarkan saluran masuk, label, dan status.", + "NEW_LINK": "Klik di sini untuk membuat kotak masuk" + }, + "TEAM_MEMBERS": { + "TITLE": "Undang anggota tim Anda", + "DESCRIPTION": "Karena Anda bersiap untuk berbicara dengan pelanggan Anda, ajak rekan tim Anda untuk membantu Anda. Anda dapat mengundang rekan tim Anda dengan menambahkan alamat email mereka ke daftar agen.", + "NEW_LINK": "Klik di sini untuk mengundang anggota tim" + }, + "LABELS": { + "TITLE": "Atur percakapan dengan label", + "DESCRIPTION": "Label memberikan cara yang lebih mudah untuk mengkategorikan percakapan Anda. Buat beberapa label seperti #support-inquiry, #billing-question, dll., Sehingga Anda dapat menggunakannya dalam percakapan nanti.", + "NEW_LINK": "Klik di sini untuk membuat label" + }, + "CANNED_RESPONSES": { + "TITLE": "Create canned responses", + "DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.", + "NEW_LINK": "Click here to create a canned response" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Agen Ditugaskan", + "SELF_ASSIGN": "Tugaskan ke saya", + "TEAM_LABEL": "Tim Ditugaskan", + "SELECT": { + "PLACEHOLDER": "Tidak ada" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Detail Kontak", + "CONVERSATION_ACTIONS": "Tindakan Percakapan", + "CONVERSATION_LABELS": "Label Percakapan", + "CONVERSATION_INFO": "Informasi Percakapan", + "CONTACT_NOTES": "Contact Notes", + "CONTACT_ATTRIBUTES": "Atribut Kontak", + "PREVIOUS_CONVERSATION": "Percakapan Sebelumnya", + "MACROS": "Makro", + "LINEAR_ISSUES": "Linked Linear Issues", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "Ditunda", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Buat atribut", + "NO_RECORDS_FOUND": "Tidak ditemukan atribut", + "UPDATE": { + "SUCCESS": "Atribut berhasil diperbarui", + "ERROR": "Tidak dapat memperbarui atribut. Silakan coba lagi nanti" + }, + "ADD": { + "TITLE": "Tambahkan", + "SUCCESS": "Atribut berhasil ditambahkan", + "ERROR": "Tidak dapat membuat atribut. Silakan coba lagi nanti" + }, + "DELETE": { + "SUCCESS": "Atribut berhasil dihapus", + "ERROR": "Tidak dapat menghapus atribut. Silakan coba lagi nanti" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Tambahkan atribut", + "PLACEHOLDER": "Cari atribut", + "NO_RESULT": "Tidak ditemukan atribut" + } + }, + "EMAIL_HEADER": { + "FROM": "Dari", + "TO": "Ke", + "BCC": "Bcc", + "CC": "Cc", + "SUBJECT": "Subjek", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Berpartisipasi", + "SIDEBAR_TITLE": "Peserta Percakapan", + "NO_RECORDS_FOUND": "Tidak ada hasil ditemukan", + "ADD_PARTICIPANTS": "Pilih peserta", + "REMANING_PARTICIPANTS_TEXT": "+{count} lainnya", + "REMANING_PARTICIPANT_TEXT": "+{count} lainnya", + "TOTAL_PARTICIPANTS_TEXT": "{count} orang berpartisipasi.", + "TOTAL_PARTICIPANT_TEXT": "{count} orang berpartisipasi.", + "NO_PARTICIPANTS_TEXT": "Tidak ada yang berpartisipasi!.", + "WATCH_CONVERSATION": "Gabung dalam percakapan", + "YOU_ARE_WATCHING": "Anda berpartisipasi", + "API": { + "ERROR_MESSAGE": "Tidak dapat memperbarui, coba lagi!", + "SUCCESS_MESSAGE": "Peserta diperbarui!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "Lihat konten terjemahan", + "DESC": "Anda dapat melihat konten terjemahan dalam setiap bahasa.", + "ORIGINAL_CONTENT": "Konten Asli", + "TRANSLATED_CONTENT": "Konten Terjemahan", + "NO_TRANSLATIONS_AVAILABLE": "Tidak ada terjemahan yang tersedia untuk konten ini" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/csatMgmt.json b/app/javascript/dashboard/i18n/locale/id/csatMgmt.json new file mode 100644 index 0000000..0f934dd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Beri Nilai Percakapan Anda", + "PLACEHOLDER": "Ceritakan lebih lanjut...", + "RATINGS": { + "POOR": "😞 Buruk", + "FAIR": "😑 Cukup Baik", + "AVERAGE": "😐 Rata-rata", + "GOOD": "😀 Baik", + "EXCELLENT": "😍 Luar Biasa" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/customRole.json b/app/javascript/dashboard/i18n/locale/id/customRole.json new file mode 100644 index 0000000..bd22893 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Custom Roles", + "LEARN_MORE": "Learn more about custom roles", + "DESCRIPTION": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "HEADER_BTN_TXT": "Add custom role", + "LOADING": "Fetching custom roles...", + "SEARCH_404": "Tidak ada item yang cocok dengan kueri ini.", + "PAYWALL": { + "TITLE": "Upgrade to create custom roles", + "AVAILABLE_ON": "The custom role feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The custom role feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Manage custom roles", + "DESC": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "TABLE_HEADER": { + "NAME": "Nama", + "DESCRIPTION": "Deskripsi", + "PERMISSIONS": "Permissions", + "ACTIONS": "Aksi" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "Nama dibutuhkan." + }, + "DESCRIPTION": { + "LABEL": "Deskripsi", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "Deskripsi dibutuhkan." + }, + "PERMISSIONS": { + "LABEL": "Permissions", + "ERROR": "Permissions are required." + }, + "CANCEL_BUTTON_TEXT": "Batalkan", + "API": { + "ERROR_MESSAGE": "Tidak dapat terhubung ke Server Woot, Silahkan coba lagi nanti" + } + }, + "ADD": { + "TITLE": "Add custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Kirim", + "API": { + "SUCCESS_MESSAGE": "Custom role added successfully." + } + }, + "EDIT": { + "BUTTON_TEXT": "Edit", + "TITLE": "Edit custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Perbarui", + "API": { + "SUCCESS_MESSAGE": "Custom role updated successfully." + } + }, + "DELETE": { + "BUTTON_TEXT": "Hapus", + "API": { + "SUCCESS_MESSAGE": "Custom role deleted successfully.", + "ERROR_MESSAGE": "Tidak dapat terhubung ke Server Woot, Silahkan coba lagi nanti" + }, + "CONFIRM": { + "TITLE": "Konfirmasi penghapusan", + "MESSAGE": "Apakah Anda yakin untuk menghapus ", + "YES": "Ya, hapus ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/datePicker.json b/app/javascript/dashboard/i18n/locale/id/datePicker.json new file mode 100644 index 0000000..aaeaf76 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Terapkan", + "CLEAR_BUTTON": "Clear", + "DATE_RANGE_INPUT": { + "START": "Start Date", + "END": "End Date" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "DATE RANGE", + "LAST_7_DAYS": "7 hari terakhir", + "LAST_30_DAYS": "30 hari terakhir", + "LAST_3_MONTHS": "3 bulan terakhir", + "LAST_6_MONTHS": "6 bulan terakhir", + "LAST_YEAR": "Tahun terakhir", + "CUSTOM_RANGE": "Rentang tanggal kustom" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/emoji.json b/app/javascript/dashboard/i18n/locale/id/emoji.json new file mode 100644 index 0000000..0f84cae --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Cari emoji", + "NOT_FOUND": "Tidak ditemukan emoji yang sesuai dengan pencarian Anda", + "REMOVE": "Hapus" + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/general.json b/app/javascript/dashboard/i18n/locale/id/general.json new file mode 100644 index 0000000..b727db2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Showing {firstIndex}-{lastIndex} of {totalCount} items", + "PHONE_INPUT": { + "PLACEHOLDER": "Cari", + "EMPTY_STATE": "Tidak ada hasil ditemukan" + }, + "CLOSE": "Tutup", + "BETA": "Beta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/generalSettings.json b/app/javascript/dashboard/i18n/locale/id/generalSettings.json new file mode 100644 index 0000000..e540e8e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.", + "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.", + "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.", + "NON_ADMIN": "Please contact your administrator to upgrade the plan and continue using all features." + }, + "TITLE": "Pengaturan akun", + "SUBMIT": "Ubah pengaturan", + "BACK": "Kembali", + "DISMISS": "Tutup", + "UPDATE": { + "ERROR": "Tidak dapat memperbarui pengaturan, coba lagi!", + "SUCCESS": "Pengaturan akun berhasil diperbarui" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Delete your Account", + "NOTE": "Once you delete your account, all your data will be deleted.", + "BUTTON_TEXT": "Delete Your Account", + "CONFIRM": { + "TITLE": "Delete Account", + "MESSAGE": "Deleting your Account is irreversible. Enter your account name below to confirm you want to permanently delete it.", + "BUTTON_TEXT": "Hapus", + "DISMISS": "Batalkan", + "PLACE_HOLDER": "Silakan ketik %{accountName} untuk konfirmasi" + }, + "SUCCESS": "Account marked for deletion", + "FAILURE": "Could not delete account, try again!", + "SCHEDULED_DELETION": { + "TITLE": "Account Scheduled for Deletion", + "MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.", + "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.", + "CLEAR_BUTTON": "Cancel Scheduled Deletion" + } + }, + "FORM": { + "ERROR": "Harap perbaiki kesalahan pada formulir", + "GENERAL_SECTION": { + "TITLE": "Pengaturan Umum", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "ID Akun", + "NOTE": "ID ini diperlukan jika Anda membangun integrasi berbasis API" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.", + "DURATION": { + "LABEL": "Inactivity duration", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Preferences", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "Nama Akun", + "PLACEHOLDER": "Nama akun Anda", + "ERROR": "Harap masukkan nama akun yang valid" + }, + "LANGUAGE": { + "LABEL": "Bahasa Situs", + "PLACEHOLDER": "Bahasa situs Anda", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Domain Email Masuk", + "PLACEHOLDER": "Domain tempat Anda akan menerima email", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "Email Dukungan", + "PLACEHOLDER": "Email dukungan perusahaan Anda", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclude unattended conversations", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a conversation should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "Perbarui", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "Kelanjutan percakapan dengan email diaktifkan untuk akun Anda.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "Anda dapat menerima email di domain kustom Anda sekarang." + } + }, + "UPDATE_CHATWOOT": "Pembaharuan Chatwoot {latestChatwootVersion} telah tersedia. Silahkan lakukan pembaharuan instance Anda.", + "LEARN_MORE": "Pelajari lebih lanjut", + "PAYMENT_PENDING": "Pembayaran Anda tertunda. Harap perbarui informasi pembayaran Anda untuk melanjutkan menggunakan Chatwoot", + "UPGRADE": "Upgrade to continue using Chatwoot", + "LIMITS_UPGRADE": "Akun Anda telah melebihi batas penggunaan, harap tingkatkan paket Anda untuk terus menggunakan Chatwoot", + "OPEN_BILLING": "Buka tagihan" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Tekan enter untuk memilih", + "ENTER_TO_REMOVE": "Tekan enter untuk menghapus", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "Pilih satu", + "SELECT": "Pilih" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Notifikasi", + "MARK_ALL_DONE": "Tandai Semua Selesai", + "DELETE_TITLE": "terhapus", + "UNREAD_NOTIFICATION": { + "TITLE": "Notifikasi Belum Dibaca", + "ALL_NOTIFICATIONS": "Lihat semua notifikasi", + "LOADING_UNREAD_MESSAGE": "Memuat notifikasi belum dibaca...", + "EMPTY_MESSAGE": "Anda tidak memiliki notifikasi belum dibaca" + }, + "LIST": { + "LOADING_MESSAGE": "Memuat notifikasi...", + "404": "Tidak Ada Notifikasi", + "TABLE_HEADER": [ + "Nama", + "Nomor Telepon", + "Percakapan", + "Terakhir Dihubungi" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "Percakapan baru", + "conversation_assignment": "Percakapan ditugaskan", + "assigned_conversation_new_message": "Pesan Baru", + "participating_conversation_new_message": "Pesan Baru", + "conversation_mention": "Mention", + "sla_missed_first_response": "SLA Missed", + "sla_missed_next_response": "SLA Missed", + "sla_missed_resolution": "SLA Missed" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Offline", + "RECONNECTING": "Reconnecting...", + "RECONNECT_SUCCESS": "Reconnected" + }, + "BUTTON": { + "REFRESH": "Segarkan" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Cari atau loncat ke", + "SECTIONS": { + "GENERAL": "Umum", + "REPORTS": "Laporan", + "CONVERSATION": "Percakapan", + "BULK_ACTIONS": "Bulk Actions", + "CHANGE_ASSIGNEE": "Ubah Penerima Tugas", + "CHANGE_PRIORITY": "Ubah Prioritas", + "CHANGE_TEAM": "Ubah Tim", + "SNOOZE_CONVERSATION": "Tunda Percakapan", + "ADD_LABEL": "Tambahkan label ke percakapan", + "REMOVE_LABEL": "Hapus label dari percakapan", + "SETTINGS": "Pengaturan", + "AI_ASSIST": "AI Assist", + "APPEARANCE": "Appearance", + "SNOOZE_NOTIFICATION": "Snooze Notification" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Menuju ke Dasbor Percakapan", + "GO_TO_CONTACTS_DASHBOARD": "Menuju ke Dasbor Kontak", + "GO_TO_REPORTS_OVERVIEW": "Menuju ke Tinjauan Laporan", + "GO_TO_CONVERSATION_REPORTS": "Menuju ke Laporan Percakapan", + "GO_TO_AGENT_REPORTS": "Menuju ke Laporan Agen", + "GO_TO_LABEL_REPORTS": "Menuju ke Laporan Label", + "GO_TO_INBOX_REPORTS": "Menuju ke Laporan Kotak Masuk", + "GO_TO_TEAM_REPORTS": "Menuju ke Laporan Tim", + "GO_TO_SETTINGS_AGENTS": "Menuju ke Pengaturan Agen", + "GO_TO_SETTINGS_TEAMS": "Menuju ke Pengaturan Tim", + "GO_TO_SETTINGS_INBOXES": "Menuju ke Pengaturan Kotak Masuk", + "GO_TO_SETTINGS_LABELS": "Menuju ke Pengaturan Label", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Menuju ke Pengaturan Tanggapan Cepat", + "GO_TO_SETTINGS_APPLICATIONS": "Menuju ke Pengaturan Aplikasi", + "GO_TO_SETTINGS_ACCOUNT": "Menuju ke Pengaturan Akun", + "GO_TO_SETTINGS_PROFILE": "Menuju ke Pengaturan Profil", + "GO_TO_NOTIFICATIONS": "Menuju ke Notifikasi", + "ADD_LABELS_TO_CONVERSATION": "Tambahkan label ke percakapan", + "ASSIGN_AN_AGENT": "Tetapkan agen", + "AI_ASSIST": "AI Assist", + "ASSIGN_PRIORITY": "Tetapkan prioritas", + "ASSIGN_A_TEAM": "Tetapkan tim", + "MUTE_CONVERSATION": "Matikan suara percakapan", + "UNMUTE_CONVERSATION": "Hidupkan suara percakapan", + "REMOVE_LABEL_FROM_CONVERSATION": "Hapus label dari percakapan", + "REOPEN_CONVERSATION": "Buka kembali percakapan", + "RESOLVE_CONVERSATION": "Selesaikan percakapan", + "SEND_TRANSCRIPT": "Kirim transkrip email", + "SNOOZE_CONVERSATION": "Tunda Percakapan", + "UNTIL_NEXT_REPLY": "Hingga balasan berikutnya", + "UNTIL_NEXT_WEEK": "Hingga minggu depan", + "UNTIL_TOMORROW": "Hingga besok", + "UNTIL_NEXT_MONTH": "Hingga bulan depan", + "AN_HOUR_FROM_NOW": "Hingga satu jam dari sekarang", + "UNTIL_CUSTOM_TIME": "Kustom...", + "CHANGE_APPEARANCE": "Change Appearance", + "LIGHT_MODE": "Light", + "DARK_MODE": "Dark", + "SYSTEM_MODE": "Sistem", + "SNOOZE_NOTIFICATION": "Snooze Notification" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Memuat Aplikasi Dasbor..." + }, + "COMMON": { + "OR": "Or", + "CLICK_HERE": "klik disini" + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/helpCenter.json b/app/javascript/dashboard/i18n/locale/id/helpCenter.json new file mode 100644 index 0000000..db4b51f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Pusat Bantuan", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "Buat Portal" + }, + "HEADER": { + "FILTER": "Filter berdasarkan", + "SORT": "Urutkan berdasarkan", + "LOCALE": "Bahasa", + "SETTINGS_BUTTON": "Pengaturan", + "NEW_BUTTON": "Artikel Baru", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Diterbitkan", + "DRAFT": "Draf", + "ARCHIVED": "Diarsipkan" + }, + "TITLES": { + "ALL_ARTICLES": "Semua Artikel", + "MINE": "Artikel Saya", + "DRAFT": "Artikel Draf", + "ARCHIVED": "Artikel Diarsipkan" + }, + "LOCALE_SELECT": { + "TITLE": "Select locale", + "PLACEHOLDER": "Select locale", + "NO_RESULT": "No locale found", + "SEARCH_PLACEHOLDER": "Search locale" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "Semua Artikel", + "PUBLISH_BUTTON": "Terbitkan", + "MOVE_TO_ARCHIVE_BUTTON": "Pindahkan ke arsip", + "PREVIEW": "Pratinjau", + "ADD_TRANSLATION": "Tambahkan terjemahan", + "OPEN_SIDEBAR": "Buka sidebar", + "CLOSE_SIDEBAR": "Tutup sidebar", + "SAVING": "Menyimpan...", + "SAVED": "Tersimpan" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Unggah Gambar", + "UPLOADING": "Mengunggah...", + "SUCCESS": "Gambar berhasil diunggah", + "ERROR": "Terjadi kesalahan saat mengunggah gambar", + "UN_AUTHORIZED_ERROR": "You are not authorized to upload images", + "ERROR_FILE_SIZE": "Ukuran gambar harus kurang dari {size}MB", + "ERROR_FILE_FORMAT": "Format gambar harus jpg, jpeg, atau png", + "ERROR_FILE_DIMENSIONS": "Dimensi gambar harus kurang dari 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Pengaturan Artikel", + "FORM": { + "CATEGORY": { + "LABEL": "Kategori", + "TITLE": "Pilih kategori", + "PLACEHOLDER": "Pilih kategori", + "NO_RESULT": "Tidak ditemukan kategori", + "SEARCH_PLACEHOLDER": "Cari kategori" + }, + "AUTHOR": { + "LABEL": "Penulis", + "TITLE": "Pilih penulis", + "PLACEHOLDER": "Pilih penulis", + "NO_RESULT": "Tidak ditemukan penulis", + "SEARCH_PLACEHOLDER": "Cari penulis" + }, + "META_TITLE": { + "LABEL": "Judul Meta", + "PLACEHOLDER": "Tambahkan judul meta" + }, + "META_DESCRIPTION": { + "LABEL": "Deskripsi Meta", + "PLACEHOLDER": "Tambahkan deskripsi meta untuk hasil SEO yang lebih baik..." + }, + "META_TAGS": { + "LABEL": "Tag Meta", + "PLACEHOLDER": "Tambahkan tag meta dipisahkan oleh koma..." + } + }, + "BUTTONS": { + "ARCHIVE": "Arsipkan artikel", + "DELETE": "Hapus artikel" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Tanpa Kategori", + "SEARCH_RESULTS": "Search results for {query}", + "EMPTY_TEXT": "Search for articles to insert into replies.", + "SEARCH_LOADER": "Sedang mencari...", + "INSERT_ARTICLE": "Sisipkan", + "NO_RESULT": "Tidak ditemukan artikel", + "COPY_LINK": "Salin tautan artikel ke clipboard", + "OPEN_LINK": "Buka artikel di tab baru", + "PREVIEW_LINK": "Pratinjau artikel" + }, + "PORTAL": { + "HEADER": "Portal", + "DEFAULT": "Default", + "NEW_BUTTON": "Portal Baru", + "ACTIVE_BADGE": "aktif", + "CHOOSE_LOCALE_LABEL": "Pilih bahasa", + "LOADING_MESSAGE": "Memuat portal...", + "ARTICLES_LABEL": "artikel", + "NO_PORTALS_MESSAGE": "Tidak ada portal yang tersedia", + "ADD_NEW_LOCALE": "Tambahkan bahasa baru", + "POPOVER": { + "TITLE": "Portal", + "PORTAL_SETTINGS": "Pengaturan portal", + "SUBTITLE": "Anda memiliki beberapa portal dan dapat memiliki bahasa yang berbeda untuk setiap portal.", + "CANCEL_BUTTON_LABEL": "Batalkan", + "CHOOSE_LOCALE_BUTTON": "Pilih Bahasa" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "artikel", + "ADD": "Tambahkan bahasa", + "VISIT": "Kunjungi situs", + "SETTINGS": "Pengaturan", + "DELETE": "Hapus" + }, + "PORTAL_CONFIG": { + "TITLE": "Konfigurasi Portal", + "ITEMS": { + "NAME": "Nama", + "DOMAIN": "Domain kustom", + "SLUG": "Slug", + "TITLE": "Judul portal", + "THEME": "Warna tema", + "SUB_TEXT": "Teks sub portal" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Bahasa yang Tersedia", + "TABLE": { + "NAME": "Nama Bahasa", + "CODE": "Kode Bahasa", + "ARTICLE_COUNT": "Jumlah artikel", + "CATEGORIES": "Jumlah kategori", + "SWAP": "Ganti", + "DELETE": "Hapus", + "DEFAULT_LOCALE": "Default" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Hapus Portal", + "MESSAGE": "Apakah Anda yakin ingin menghapus portal ini", + "YES": "Ya, hapus portal", + "NO": "Tidak, simpan portal", + "API": { + "DELETE_SUCCESS": "Portal berhasil dihapus", + "DELETE_ERROR": "Terjadi kesalahan saat menghapus portal" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit Portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Informasi Dasar" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Kustomisasi Portal" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Kategori" + }, + "LOCALE_SETTINGS": { + "TITLE": "Bahasa" + } + }, + "CATEGORIES": { + "TITLE": "Kategori dalam", + "NEW_CATEGORY": "Kategori Baru", + "TABLE": { + "NAME": "Nama", + "DESCRIPTION": "Deskripsi", + "LOCALE": "Bahasa", + "ARTICLE_COUNT": "Jumlah artikel", + "ACTION_BUTTON": { + "EDIT": "Edit kategori", + "DELETE": "Hapus kategori" + }, + "EMPTY_TEXT": "Tidak ditemukan kategori" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Perbarui pengaturan dasar" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Informasi Pusat Bantuan", + "BODY": "Informasi dasar tentang portal" + }, + "CUSTOMIZATION": { + "TITLE": "Kustomisasi Pusat Bantuan", + "BODY": "Kustomisasi portal" + }, + "FINISH": { + "TITLE": "Voila! 🎉", + "BODY": "Semuanya siap!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Kembali", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Buat Portal", + "TITLE": "Informasi Pusat Bantuan", + "CREATE_BASIC_SETTING_BUTTON": "Buat pengaturan dasar portal" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Kustomisasi Portal", + "TITLE": "Kustomisasi Pusat Bantuan", + "UPDATE_PORTAL_BUTTON": "Perbarui pengaturan portal" + }, + "FINISH_PAGE": { + "TITLE": "Voila! 🎉 Semuanya sudah siap!", + "MESSAGE": "Anda sekarang dapat melihat portal yang dibuat di halaman semua portal Anda.", + "FINISH": "Buka halaman semua portal" + } + }, + "LOGO": { + "LABEL": "Logo", + "UPLOAD_BUTTON": "Unggah logo", + "HELP_TEXT": "Logo ini akan ditampilkan di bagian header portal.", + "IMAGE_UPLOAD_SUCCESS": "Logo uploaded successfully", + "IMAGE_UPLOAD_ERROR": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Error while deleting logo" + }, + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "Nama portal", + "HELP_TEXT": "Nama ini akan digunakan secara internal dalam portal yang dihadapkan ke publik.", + "ERROR": "Nama dibutuhkan" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug portal untuk URL", + "ERROR": "Slug diperlukan" + }, + "DOMAIN": { + "LABEL": "Domain Kustom", + "PLACEHOLDER": "Domain kustom portal", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}", + "ERROR": "Masukkan URL domain yang valid" + }, + "HOME_PAGE_LINK": { + "LABEL": "Tautan Halaman Utama", + "PLACEHOLDER": "Tautan halaman utama portal", + "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}", + "ERROR": "Masukkan URL halaman utama yang valid" + }, + "THEME_COLOR": { + "LABEL": "Warna tema portal", + "HELP_TEXT": "Warna ini akan ditampilkan sebagai warna tema untuk portal." + }, + "PAGE_TITLE": { + "LABEL": "Judul Halaman", + "PLACEHOLDER": "Judul halaman portal", + "HELP_TEXT": "Judul halaman ini akan digunakan dalam portal yang dihadapkan ke publik.", + "ERROR": "Judul halaman diperlukan" + }, + "HEADER_TEXT": { + "LABEL": "Teks Header", + "PLACEHOLDER": "Teks header portal", + "HELP_TEXT": "Teks header portal akan digunakan dalam portal yang dihadapkan ke publik.", + "ERROR": "Teks header portal dibutuhkan" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal berhasil dibuat.", + "ERROR_MESSAGE_FOR_BASIC": "Tidak dapat membuat portal. Coba lagi.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal berhasil diperbarui.", + "ERROR_MESSAGE_FOR_UPDATE": "Tidak dapat memperbarui portal. Coba lagi." + } + }, + "ADD_LOCALE": { + "TITLE": "Tambahkan bahasa baru", + "SUB_TITLE": "Ini menambahkan bahasa baru ke daftar terjemahan yang tersedia.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Bahasa", + "PLACEHOLDER": "Pilih bahasa", + "ERROR": "Bahasa dibutuhkan" + }, + "BUTTONS": { + "CREATE": "Buat bahasa", + "CANCEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "Bahasa berhasil ditambahkan", + "ERROR_MESSAGE": "Tidak dapat menambahkan bahasa. Coba lagi." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Bahasa default berhasil diperbarui", + "ERROR_MESSAGE": "Tidak dapat memperbarui bahasa default. Coba lagi." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Bahasa dihapus dari portal berhasil", + "ERROR_MESSAGE": "Tidak dapat menghapus bahasa dari portal. Coba lagi." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Memuat portal...", + "404": "Tidak ada artikel yang cocok dengan pencarian Anda 🔍", + "NO_ARTICLES": "Tidak ada artikel yang tersedia", + "HEADERS": { + "TITLE": "Judul", + "CATEGORY": "Kategori", + "READ_COUNT": "Views", + "STATUS": "Status", + "LAST_EDITED": "Terakhir diedit" + }, + "COLUMNS": { + "BY": "oleh", + "AUTHOR_NOT_AVAILABLE": "Author is not available" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Memuat artikel...", + "TITLE_PLACEHOLDER": "Judul artikel ada di sini", + "CONTENT_PLACEHOLDER": "Tulis artikel Anda di sini", + "API": { + "ERROR": "Terjadi kesalahan saat menyimpan artikel" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Terjadi kesalahan saat memublikasikan artikel", + "SUCCESS": "Artikel berhasil diterbitkan" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Terjadi kesalahan saat mengarsipkan artikel", + "SUCCESS": "Artikel berhasil diarsipkan" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Error while drafting article", + "SUCCESS": "Article drafted successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Konfirmasi Penghapusan", + "MESSAGE": "Apakah Anda yakin akan menghapus artikel tersebut?", + "YES": "Ya, Hapus", + "NO": "Tidak, Simpan" + } + }, + "API": { + "SUCCESS_MESSAGE": "Atribut berhasil dihapus", + "ERROR_MESSAGE": "Terjadi kesalahan saat menghapus artikel" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Harap tambahkan tajuk artikel dan konten maka hanya Anda yang dapat memperbarui pengaturan" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Cari artikel" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Buat kategori", + "SUB_TITLE": "Kategori tersebut akan digunakan di portal publik untuk mengkategorikan artikel.", + "PORTAL": "Portal", + "LOCALE": "Bahasa", + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "Nama kategori", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Nama dibutuhkan" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug kategori untuk url", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/id/kategori/my-slug", + "ERROR": "Slug diperlukan" + }, + "DESCRIPTION": { + "LABEL": "Deskripsi", + "PLACEHOLDER": "Berikan deskripsi singkat tentang kategori tersebut.", + "ERROR": "Deskripsi dibutuhkan" + }, + "BUTTONS": { + "CREATE": "Buat kategori", + "CANCEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "Kategori telah berhasil dibuat", + "ERROR_MESSAGE": "Tidak dapat membuat kategori" + } + }, + "EDIT": { + "TITLE": "Mengedit kategori", + "SUB_TITLE": "Mengedit kategori akan memperbarui kategori di portal menghadap publik.", + "PORTAL": "Portal", + "LOCALE": "Bahasa", + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "Nama kategori", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Nama dibutuhkan" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug kategori untuk url", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/id/kategori/my-slug", + "ERROR": "Slug diperlukan" + }, + "DESCRIPTION": { + "LABEL": "Deskripsi", + "PLACEHOLDER": "Berikan deskripsi singkat tentang kategori tersebut.", + "ERROR": "Deskripsi dibutuhkan" + }, + "BUTTONS": { + "CREATE": "Buat kategori", + "CANCEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "Kategori berhasil diperbarui", + "ERROR_MESSAGE": "Tidak dapat memperbarui kategori" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Kategori berhasil dihapus", + "ERROR_MESSAGE": "Tidak dapat menghapus kategori" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Search articles", + "PLACEHOLDER": "Search articles", + "NO_RESULT": "Tidak ditemukan artikel", + "SEARCHING": "Sedang mencari...", + "SEARCH_BUTTON": "Cari", + "INSERT_ARTICLE": "Insert link", + "IFRAME_ERROR": "URL is empty or invalid. Unable to display content.", + "OPEN_ARTICLE_SEARCH": "Insert article from Help Center", + "SUCCESS_ARTICLE_INSERTED": "Article inserted successfully", + "PREVIEW_LINK": "Pratinjau artikel", + "CANCEL": "Tutup", + "BACK": "Kembali", + "BACK_RESULTS": "Back to results" + }, + "UPGRADE_PAGE": { + "TITLE": "Pusat Bantuan", + "DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Upgrade your subscription to enable this feature.", + "SELF_HOSTED_DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Please contact your administrator to enable this feature.", + "BUTTON": { + "LEARN_MORE": "Pelajari lebih lanjut", + "UPGRADE": "Upgrade" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Multiple portals", + "DESCRIPTION": "Create multiple help center portals for different products using the same account." + }, + "LOCALES": { + "TITLE": "Full support for locales", + "DESCRIPTION": "Localize the portal in your language. We support all locales and allow translations for every article." + }, + "SEO": { + "TITLE": "SEO-friendly design", + "DESCRIPTION": "Customize your meta tags to improve your visibility on search engines with our SEO-friendly pages." + }, + "API": { + "TITLE": "Full API support", + "DESCRIPTION": "Use the portal as a headless CMS with third party front-end frameworks using our APIs." + } + } + }, + "LOADING": "Loading...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} view | {count} views", + "DROPDOWN_MENU": { + "PUBLISH": "Terbitkan", + "DRAFT": "Draf", + "ARCHIVE": "Archive", + "DELETE": "Hapus" + }, + "STATUS": { + "DRAFT": "Draf", + "PUBLISHED": "Diterbitkan", + "ARCHIVED": "Diarsipkan" + }, + "CATEGORY": { + "UNCATEGORISED": "Uncategorised" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "All articles", + "MINE": "Milikku", + "DRAFT": "Draf", + "PUBLISHED": "Diterbitkan", + "ARCHIVED": "Diarsipkan" + }, + "CATEGORY": { + "ALL": "All categories" + }, + "LOCALE": { + "ALL": "All locales" + }, + "NEW_ARTICLE": "New article" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Write an article", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "New article" + }, + "MINE": { + "TITLE": "You haven't written any articles here", + "SUBTITLE": "All articles written by you show up here for quick access." + }, + "DRAFT": { + "TITLE": "There are no articles in drafts", + "SUBTITLE": "Draft articles will appear here" + }, + "PUBLISHED": { + "TITLE": "There are no published articles", + "SUBTITLE": "Published articles will appear here" + }, + "ARCHIVED": { + "TITLE": "There are no articles in the archive", + "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages" + }, + "CATEGORY": { + "TITLE": "There are no articles in this category", + "SUBTITLE": "Articles in this category will appear here" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "Kategori Baru", + "EDIT_CATEGORY": "Edit kategori", + "CATEGORIES_COUNT": "{n} category | {n} categories", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categories ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "Tidak ditemukan kategori", + "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Kategori telah berhasil dibuat", + "ERROR_MESSAGE": "Tidak dapat membuat kategori" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Kategori berhasil diperbarui", + "ERROR_MESSAGE": "Tidak dapat memperbarui kategori" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Kategori berhasil dihapus", + "ERROR_MESSAGE": "Tidak dapat menghapus kategori" + } + }, + "HEADER": { + "CREATE": "Buat kategori", + "EDIT": "Edit kategori", + "DESCRIPTION": "Mengedit kategori akan memperbarui kategori di portal menghadap publik.", + "PORTAL": "Portal", + "LOCALE": "Bahasa" + }, + "FORM": { + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "Nama kategori", + "ERROR": "Nama dibutuhkan" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug kategori untuk url", + "ERROR": "Slug diperlukan", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Deskripsi", + "PLACEHOLDER": "Berikan deskripsi singkat tentang kategori tersebut.", + "ERROR": "Deskripsi dibutuhkan" + } + }, + "BUTTONS": { + "CREATE": "Buat", + "EDIT": "Perbarui", + "CANCEL": "Batalkan" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "No locales available | {n} locale | {n} locales", + "NEW_LOCALE_BUTTON_TEXT": "New locale", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles", + "CATEGORIES_COUNT": "{count} category | {count} categories", + "DEFAULT": "Default", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Make default", + "DELETE": "Hapus" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Tambahkan bahasa baru", + "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", + "COMBOBOX": { + "PLACEHOLDER": "Select locale..." + }, + "API": { + "SUCCESS_MESSAGE": "Bahasa berhasil ditambahkan", + "ERROR_MESSAGE": "Tidak dapat menambahkan bahasa. Coba lagi." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Menyimpan...", + "SAVED": "Tersimpan" + }, + "PREVIEW": "Pratinjau", + "PUBLISH": "Terbitkan", + "DRAFT": "Draf", + "ARCHIVE": "Archive", + "BACK_TO_ARTICLES": "Back to articles" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "More properties", + "UNCATEGORIZED": "Tanpa Kategori", + "EDITOR_PLACEHOLDER": "Write something..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Article properties", + "META_DESCRIPTION": "Deskripsi Meta", + "META_DESCRIPTION_PLACEHOLDER": "Add meta description", + "META_TITLE": "Judul Meta", + "META_TITLE_PLACEHOLDER": "Add meta title", + "META_TAGS": "Tag Meta", + "META_TAGS_PLACEHOLDER": "Add meta tags" + }, + "API": { + "ERROR": "Terjadi kesalahan saat menyimpan artikel" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "New portal", + "PORTALS": "Portal", + "CREATE_PORTAL": "Create and manage multiple portals", + "ARTICLES": "artikel", + "DOMAIN": "domain", + "PORTAL_NAME": "Nama portal" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Create new portal", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "Buat", + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "User Guide | Chatwoot", + "MESSAGE": "Choose an name for your portal.", + "ERROR": "Nama dibutuhkan" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Slug diperlukan", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logo", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo", + "IMAGE_DELETE_SUCCESS": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Unable to delete logo", + "IMAGE_UPLOAD_SIZE_ERROR": "Ukuran gambar harus kurang dari {size}MB" + }, + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "Nama portal", + "ERROR": "Nama dibutuhkan" + }, + "HEADER_TEXT": { + "LABEL": "Header text", + "PLACEHOLDER": "Teks header portal" + }, + "PAGE_TITLE": { + "LABEL": "Page title", + "PLACEHOLDER": "Judul halaman portal" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home page link", + "PLACEHOLDER": "Tautan halaman utama portal", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Live chat widget", + "PLACEHOLDER": "Select live chat widget", + "HELP_TEXT": "Select a live chat widget that will appear on your help center", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Brand color" + }, + "SAVE_CHANGES": "Save changes" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Domain kustom", + "LABEL": "Domain kustom:", + "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Domain kustom portal", + "EDIT_BUTTON": "Edit", + "ADD_BUTTON": "Add custom domain", + "STATUS": { + "LIVE": "Langsung", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Add custom domain", + "EDIT_HEADER": "Edit custom domain", + "ADD_CONFIRM_BUTTON_LABEL": "Add domain", + "EDIT_CONFIRM_BUTTON_LABEL": "Update domain", + "LABEL": "Domain kustom", + "PLACEHOLDER": "Domain kustom portal", + "ERROR": "Custom domain is required", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS configuration", + "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "Kirim" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Delete {portalName}", + "HEADER": "Hapus Portal", + "DESCRIPTION": "Permanently delete this portal. This action is irreversible", + "DIALOG": { + "HEADER": "Sure you want to delete {portalName}?", + "DESCRIPTION": "This is a permanent action that cannot be reversed.", + "CONFIRM_BUTTON_LABEL": "Hapus" + } + }, + "EDIT_CONFIGURATION": "Edit configuration" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal berhasil dibuat", + "ERROR_MESSAGE": "Unable to create portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal berhasil diperbarui", + "ERROR_MESSAGE": "Unable to update portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "Mengunggah...", + "UPLOAD": "Upload & Process", + "CANCEL": "Batalkan", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Menghasilkan...", + "CONFIRM_DELETE": "Are you sure you want to delete {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Selesai", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/inbox.json b/app/javascript/dashboard/i18n/locale/id/inbox.json new file mode 100644 index 0000000..3ff74b9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "Kotak Masuk Saya", + "DISPLAY_DROPDOWN": "Tampilan", + "LOADING": "Memuat notifikasi", + "404": "Tidak ada percakapan aktif di grup ini.", + "NO_NOTIFICATIONS": "Tidak Ada Notifikasi", + "NOTE": "Notifikasi dari semua kotak masuk yang Anda langgani", + "NO_MESSAGES_AVAILABLE": "Aduh! Tidak dapat mengambil pesan", + "SNOOZED_UNTIL": "Ditunda hingga", + "SNOOZED_UNTIL_TOMORROW": "Ditunda hingga besok", + "SNOOZED_UNTIL_NEXT_WEEK": "Ditunda hingga minggu depan" + }, + "ACTION_HEADER": { + "SNOOZE": "Tunda notifikasi", + "DELETE": "Hapus notifikasi", + "BACK": "Kembali" + }, + "TYPES": { + "CONVERSATION_MENTION": "Anda telah disebut dalam sebuah percakapan", + "CONVERSATION_CREATION": "Percakapan dibuat", + "CONVERSATION_ASSIGNMENT": "Sebuah percakapan telah ditugaskan kepada Anda", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message in a conversation you are participating in", + "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation", + "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation", + "SLA_MISSED_RESOLUTION": "Target penyelesaian SLA terlewatkan untuk percakapan" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Disebutkan", + "CONVERSATION_ASSIGNMENT": "Ditugaskan kepada Anda", + "CONVERSATION_CREATION": "Percakapan baru", + "SLA_MISSED_FIRST_RESPONSE": "SLA breach", + "SLA_MISSED_NEXT_RESPONSE": "SLA breach", + "SLA_MISSED_RESOLUTION": "SLA breach", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Pesan baru", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Pesan baru", + "SNOOZED_UNTIL": "Snoozed for {time}", + "SNOOZED_ENDS": "Snooze ended" + }, + "NO_CONTENT": "Tidak ada konten yang tersedia", + "MENU_ITEM": { + "MARK_AS_READ": "Tanda telah dibaca", + "MARK_AS_UNREAD": "Tandai sebagai belum terbaca", + "SNOOZE": "Tunda", + "DELETE": "Hapus", + "MARK_ALL_READ": "Tandai semua telah dibaca", + "DELETE_ALL": "Hapus semua", + "DELETE_ALL_READ": "Hapus semua telah dibaca" + }, + "DISPLAY_MENU": { + "SORT": "Sort", + "DISPLAY": "Display :", + "SORT_OPTIONS": { + "NEWEST": "Terbaru", + "OLDEST": "Terlama", + "PRIORITY": "Prioritas" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Ditunda Sebentar", + "READ": "Dibaca", + "LABELS": "Label", + "CONVERSATION_ID": "Conversation ID" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notification marked as read", + "MARK_AS_UNREAD": "Notification marked as unread", + "SNOOZE": "Notification snoozed", + "DELETE": "Notification deleted", + "MARK_ALL_READ": "All notifications marked as read", + "DELETE_ALL": "All notifications deleted", + "DELETE_ALL_READ": "All read notifications deleted" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json new file mode 100644 index 0000000..92df9be --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Kotak masuk", + "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.", + "LEARN_MORE": "Learn more about inboxes", + "RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.", + "CLICK_TO_RECONNECT": "Click here to reconnect.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "Tidak ada kotak masuk yang dilampirkan ke akun ini." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Pilih Channel", + "BODY": "Pilih penyedia yang ingin Anda integrasikan dengan Chatwoot." + }, + "INBOX": { + "TITLE": "Buat Kotak Masuk", + "BODY": "Otentikasi akun Anda dan buat kotak masuk." + }, + "AGENT": { + "TITLE": "Tambahkan Agen", + "BODY": "Tambahkan agen ke kotak masuk yang dibuat." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "Sekarang kotak masuk Anda sudah siap!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Nama Kotak Masuk", + "PLACEHOLDER": "Masukkan nama kotak masuk anda (mis: Acme Inc)", + "ERROR": "Harap masukkan nama inbox yang valid" + }, + "WEBSITE_NAME": { + "LABEL": "Nama Website", + "PLACEHOLDER": "Masukkan nama situs web Anda (misalnya: Acme Inc)" + }, + "FB": { + "HELP": "NB: Dengan masuk, kami hanya mendapatkan akses ke pesan Halaman Anda. Pesan pribadi Anda tidak akan pernah bisa diakses oleh Chatwoot.", + "CHOOSE_PAGE": "Pilih Halaman", + "CHOOSE_PLACEHOLDER": "Pilih halaman dari daftar", + "INBOX_NAME": "Nama Kotak Masuk", + "ADD_NAME": "Tambahkan nama untuk kotak masuk Anda", + "PICK_NAME": "Pick a Name for your Inbox", + "PICK_A_VALUE": "Pilih", + "CREATE_INBOX": "Buat Kotak Masuk" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continue with Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile", + "HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ", + "ERROR_MESSAGE": "There was an error connecting to Instagram, please try again", + "ERROR_AUTH": "There was an error connecting to Instagram, please try again", + "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "Untuk menambahkan profil Twitter Anda sebagai saluran, Anda perlu mengautentikasi Profil Twitter Anda dengan mengklik 'Masuk dengan Twitter' ", + "ERROR_MESSAGE": "Terjadi kesalahan saat menghubungkan ke Twitter, harap coba lagi", + "TWEETS": { + "ENABLE": "Buat percakapan dari Tweet yang disebutkan" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Channel Website", + "DESC": "Buat saluran untuk situs web Anda dan mulai dukung pelanggan Anda melalui widget di website.", + "LOADING_MESSAGE": "Membuat Saluran Dukungan Website", + "CHANNEL_AVATAR": { + "LABEL": "Avatar Channel" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "URL Webhook", + "PLACEHOLDER": "Please enter your Webhook URL", + "ERROR": "Harap masukkan URL yang valid" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Domain Website", + "PLACEHOLDER": "Masukkan domain situs web Anda (misalnya: acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Judul Selamat Datang", + "PLACEHOLDER": "Halo!" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Tagline Selamat Datang", + "PLACEHOLDER": "Kami membuatnya mudah untuk terhubung dengan kami. Tanyakan apa saja kepada kami, atau bagikan tanggapan Anda." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Pesan sambutan channel", + "PLACEHOLDER": "Acme Inc biasanya membalas dalam beberapa jam." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Aktifkan sambutan channel", + "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", + "ENABLED": "Diaktifkan", + "DISABLED": "Nonaktif" + }, + "REPLY_TIME": { + "TITLE": "Atur waktu Balasan", + "IN_A_FEW_MINUTES": "Dalam beberapa menit", + "IN_A_FEW_HOURS": "Dalam beberapa jam", + "IN_A_DAY": "Dalam sehari", + "HELP_TEXT": "Waktu balasan ini akan ditampilkan di widget live chat" + }, + "WIDGET_COLOR": { + "LABEL": "Warna Widget", + "PLACEHOLDER": "Perbarui warna yang digunakan di widget" + }, + "SUBMIT_BUTTON": "Buat Kotak Masuk", + "API": { + "ERROR_MESSAGE": "Kami tidak dapat membuat saluran situs web, harap coba lagi" + } + }, + "TWILIO": { + "TITLE": "Twilio SMS/Saluran WhatsApp", + "DESC": "Integrasikan Twilio dan mulailah mendukung pelanggan Anda melalui SMS atau WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "Account SID", + "PLACEHOLDER": "Silakan masukkan SID Akun Twilio Anda", + "ERROR": "Bagian ini diperlukan" + }, + "API_KEY": { + "USE_API_KEY": "Use API Key Authentication", + "LABEL": "API Key SID", + "PLACEHOLDER": "Please enter your API Key SID", + "ERROR": "Bagian ini diperlukan" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Please enter your API Key Secret", + "ERROR": "Bagian ini diperlukan" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "SID Layanan Pesan", + "PLACEHOLDER": "Masukkan SID Layanan Pesan Twilio Anda", + "ERROR": "Bagian ini diperlukan", + "USE_MESSAGING_SERVICE": "Gunakan Layanan Pesan Twilio" + }, + "CHANNEL_TYPE": { + "LABEL": "Tipe Channel", + "ERROR": "Harap pilih Tipe Channel Anda" + }, + "AUTH_TOKEN": { + "LABEL": "Token Auth", + "PLACEHOLDER": "Harap masukkan Token Twilio Auth Anda", + "ERROR": "Bagian ini diperlukan" + }, + "CHANNEL_NAME": { + "LABEL": "Nama Kotak Masuk", + "PLACEHOLDER": "Masukkan nama kotak masuk", + "ERROR": "Bagian ini diperlukan" + }, + "PHONE_NUMBER": { + "LABEL": "Nomor Telepon", + "PLACEHOLDER": "Silakan masukkan nomor telepon dari mana pesan akan dikirim.", + "ERROR": "Berikan nomor telepon yang valid yang dimulai dengan tanda `+` dan tidak mengandung spasi." + }, + "API_CALLBACK": { + "TITLE": "URL Callback", + "SUBTITLE": "Anda harus mengkonfigurasi pesan URL callback di Twilio dengan URL yang disebutkan di sini." + }, + "SUBMIT_BUTTON": "Buat Channel Twilio", + "API": { + "ERROR_MESSAGE": "Kami tidak dapat mengautentikasi kredensial Twilio, harap coba lagi" + } + }, + "SMS": { + "TITLE": "Saluran SMS", + "DESC": "Mulailah mendukung pelanggan Anda melalui SMS.", + "PROVIDERS": { + "LABEL": "Penyedia API", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandwidth" + }, + "API": { + "ERROR_MESSAGE": "Kami tidak dapat menyimpan saluran SMS" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "ID Akun", + "PLACEHOLDER": "Silakan masukkan ID Akun Bandwidth Anda", + "ERROR": "Bagian ini diperlukan" + }, + "API_KEY": { + "LABEL": "API Key", + "PLACEHOLDER": "Please enter your Bandwidth API Key", + "ERROR": "Bagian ini diperlukan" + }, + "API_SECRET": { + "LABEL": "API Secret", + "PLACEHOLDER": "Please enter your Bandwidth API Secret", + "ERROR": "Bagian ini diperlukan" + }, + "APPLICATION_ID": { + "LABEL": "ID Aplikasi", + "PLACEHOLDER": "Silakan masukkan ID Aplikasi Bandwidth Anda", + "ERROR": "Bagian ini diperlukan" + }, + "INBOX_NAME": { + "LABEL": "Nama Kotak Masuk", + "PLACEHOLDER": "Harap masukkan nama inbox", + "ERROR": "Bagian ini diperlukan" + }, + "PHONE_NUMBER": { + "LABEL": "Nomor Telpon", + "PLACEHOLDER": "Silakan masukkan nomor telepon dari mana pesan akan dikirim.", + "ERROR": "Berikan nomor telepon yang valid yang dimulai dengan tanda `+` dan tidak mengandung spasi." + }, + "SUBMIT_BUTTON": "Buat Saluran Bandwidth", + "API": { + "ERROR_MESSAGE": "Kami tidak dapat mengautentikasi kredensial Bandwidth, harap coba lagi" + }, + "API_CALLBACK": { + "TITLE": "URL Callback", + "SUBTITLE": "Anda harus mengonfigurasi URL panggilan balik pesan di Bandwidth dengan URL yang disebutkan di sini." + } + } + }, + "WHATSAPP": { + "TITLE": "Saluran WhatsApp", + "DESC": "Mulailah mendukung pelanggan Anda melalui WhatsApp.", + "PROVIDERS": { + "LABEL": "Penyedia API", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "Nama Kotak Masuk", + "PLACEHOLDER": "Masukkan nama kotak masuk", + "ERROR": "Bagian ini diperlukan" + }, + "PHONE_NUMBER": { + "LABEL": "Nomor Telpon", + "PLACEHOLDER": "Silakan masukkan nomor telepon dari mana pesan akan dikirim.", + "ERROR": "Berikan nomor telepon yang valid yang dimulai dengan tanda `+` dan tidak mengandung spasi." + }, + "PHONE_NUMBER_ID": { + "LABEL": "ID nomor telepon", + "PLACEHOLDER": "Silakan masukkan ID nomor Telepon yang diperoleh dari dasbor pengembang Facebook.", + "ERROR": "Harap masukkan nilai yang valid." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "ID Akun Bisnis", + "PLACEHOLDER": "Silakan masukkan ID Akun Bisnis yang diperoleh dari dasbor pengembang Facebook.", + "ERROR": "Harap masukkan nilai yang valid." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Token Verifikasi Webhook", + "PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.", + "ERROR": "Harap masukkan nilai yang valid." + }, + "API_KEY": { + "LABEL": "API Key", + "SUBTITLE": "Konfigurasikan kunci WhatsApp API.", + "PLACEHOLDER": "API Key", + "ERROR": "Harap masukkan nilai yang valid." + }, + "API_CALLBACK": { + "TITLE": "URL Callback", + "SUBTITLE": "Anda harus mengonfigurasi URL webhook dan token verifikasi di portal Pengembang Facebook dengan nilai yang ditunjukkan di bawah ini.", + "WEBHOOK_URL": "URL Webhook", + "WEBHOOK_VERIFICATION_TOKEN": "Token Verifikasi Webhook" + }, + "SUBMIT_BUTTON": "Buat Saluran WhatsApp", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "Kami tidak dapat menyimpan saluran WhatsApp" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "Nomor Telepon", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "Account SID", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "Token Auth", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "API Key SID", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "API Channel", + "DESC": "Integrasikan dengan saluran API dan mulai dukung pelanggan Anda.", + "CHANNEL_NAME": { + "LABEL": "Nama Channel", + "PLACEHOLDER": "Harap masukkan nama channel", + "ERROR": "Bagian ini diperlukan" + }, + "WEBHOOK_URL": { + "LABEL": "URL Webhook", + "SUBTITLE": "Configure the URL where you want to receive callbacks on events.", + "PLACEHOLDER": "URL Webhook" + }, + "SUBMIT_BUTTON": "Buat Channel API", + "API": { + "ERROR_MESSAGE": "Kami tidak dapat menyimpan channel api" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "Channel Email", + "DESC": "Integrate your email inbox.", + "CHANNEL_NAME": { + "LABEL": "Nama Channel", + "PLACEHOLDER": "Harap masukkan nama channel", + "ERROR": "Bagian ini diperlukan" + }, + "EMAIL": { + "LABEL": "Email", + "SUBTITLE": "Kirim email ke tempat pelanggan Anda mengirimkan tiket dukungan", + "PLACEHOLDER": "Email" + }, + "SUBMIT_BUTTON": "Buat Channel Email", + "API": { + "ERROR_MESSAGE": "Kami tidak dapat menyimpan channel email" + }, + "FINISH_MESSAGE": "Mulailah meneruskan email Anda ke alamat email berikut.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "Klik disini", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "Channel LINE", + "DESC": "Integrasikan dengan channel LINE dan mulai mendukung pelanggan Anda.", + "CHANNEL_NAME": { + "LABEL": "Nama Channel", + "PLACEHOLDER": "Harap masukkan nama channel", + "ERROR": "Bagian ini diperlukan" + }, + "LINE_CHANNEL_ID": { + "LABEL": "Channel ID LINE", + "PLACEHOLDER": "Channel ID LINE" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "LINE Channel Secret", + "PLACEHOLDER": "LINE Channel Secret" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "Token Channel LINE", + "PLACEHOLDER": "Token Channel LINE" + }, + "SUBMIT_BUTTON": "Buat channel LINE", + "API": { + "ERROR_MESSAGE": "Kami tidak dapat menyimpan channel LINE" + }, + "API_CALLBACK": { + "TITLE": "URL Callback", + "SUBTITLE": "Anda harus mengatur webhook URL pada aplikasi LINE dengan URL yang tercantum disini." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Channel Telegram", + "DESC": "Integrasikan dengan channel Telegram dan mulai mendukung pelanggan Anda.", + "BOT_TOKEN": { + "LABEL": "Token Bot", + "SUBTITLE": "Konfigurasikan token bot yang Anda peroleh dari Telegram BotFather.", + "PLACEHOLDER": "Token Bot" + }, + "SUBMIT_BUTTON": "Buat Channel Telegram", + "API": { + "ERROR_MESSAGE": "Kami tidak dapat menyimpan channel telegram" + } + }, + "AUTH": { + "TITLE": "Pilih sebuah channel", + "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Website", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "Email", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Agen", + "DESC": "Di sini Anda dapat menambahkan agen untuk mengelola kotak masuk yang baru Anda buat. Hanya agen terpilih ini yang akan memiliki akses ke kotak masuk Anda. Agen yang bukan bagian dari kotak masuk ini tidak akan dapat melihat atau menanggapi pesan di kotak masuk ini saat mereka masuk.Webhook
Webhook adalah callback HTTP yang dapat ditentukan untuk setiap akun. Mereka dipicu oleh peristiwa seperti pembuatan pesan di Chatwoot. Anda dapat menambah lebih dari satu webhook untuk akun ini.
Untuk menambahkan webhook, klik tombol Tambahkan webhook baru. Anda juga dapat menghapus webhook yang ada dengan mengklik tombol Hapus.
Aplikasi Dasbor
Aplikasi Dasbor memungkinkan organisasi untuk menyematkan aplikasi di dalam dasbor Chatwoot untuk menyediakan konteks bagi agen dukungan pelanggan. Fitur ini memungkinkan Anda membuat aplikasi secara independen dan menyematkannya di dalam dasbor untuk menyediakan informasi pengguna, pesanan, atau riwayat pembayaran sebelumnya.
Ketika Anda menyematkan aplikasi Anda menggunakan dasbor di Chatwoot, aplikasi Anda akan mendapatkan konteks percakapan dan kontak sebagai acara window. Implementasikan penerima untuk acara pesan di halaman Anda untuk menerima konteks.
Untuk menambahkan aplikasi dasbor baru, klik tombol 'Tambahkan aplikasi dasbor baru'.
", + "DESCRIPTION": "Aplikasi Dasbor memungkinkan organisasi untuk menyematkan aplikasi di dalam dasbor untuk menyediakan konteks bagi agen dukungan pelanggan. Fitur ini memungkinkan Anda membuat aplikasi secara independen dan menyematkannya untuk menyediakan informasi pengguna, pesanan, atau riwayat pembayaran sebelumnya.", + "LEARN_MORE": "Learn more about Dashboard Apps", + "LIST": { + "404": "Belum ada aplikasi dasbor yang dikonfigurasi untuk akun ini", + "LOADING": "Mengambil aplikasi dasbor...", + "TABLE_HEADER": { + "NAME": "Nama", + "ENDPOINT": "Titik akhir" + }, + "EDIT_TOOLTIP": "Edit aplikasi", + "DELETE_TOOLTIP": "Hapus aplikasi" + }, + "FORM": { + "TITLE_LABEL": "Nama", + "TITLE_PLACEHOLDER": "Masukkan nama aplikasi dasbor Anda", + "TITLE_ERROR": "Nama untuk aplikasi dasbor diperlukan", + "URL_LABEL": "Titik akhir", + "URL_PLACEHOLDER": "Masukkan URL endpoint tempat aplikasi Anda dihosting", + "URL_ERROR": "URL valid diperlukan" + }, + "CREATE": { + "HEADER": "Tambahkan aplikasi dasbor baru", + "FORM_SUBMIT": "Kirim", + "FORM_CANCEL": "Batalkan", + "API_SUCCESS": "Aplikasi dasbor berhasil dikonfigurasi", + "API_ERROR": "Kami tidak dapat membuat aplikasi. Harap coba lagi nanti" + }, + "UPDATE": { + "HEADER": "Edit aplikasi dasbor", + "FORM_SUBMIT": "Perbarui", + "FORM_CANCEL": "Batalkan", + "API_SUCCESS": "Aplikasi dasbor berhasil diperbarui", + "API_ERROR": "Kami tidak dapat memperbarui aplikasi. Harap coba lagi nanti" + }, + "DELETE": { + "CONFIRM_YES": "Ya, hapus", + "CONFIRM_NO": "Tidak, simpan", + "TITLE": "Konfirmasi Penghapusan", + "MESSAGE": "Apakah Anda yakin ingin menghapus aplikasi - {appName}?", + "API_SUCCESS": "Aplikasi dasbor berhasil dihapus", + "API_ERROR": "Kami tidak dapat menghapus aplikasi. Harap coba lagi nanti" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "Fetching linear issues...", + "LOADING_ERROR": "There was an error fetching the linear issues, please try again", + "CREATE": "Buat", + "LINK": { + "SEARCH": "Search issues", + "SELECT": "Select issue", + "TITLE": "Tautan", + "EMPTY_LIST": "No linear issues found", + "LOADING": "Loading", + "ERROR": "There was an error fetching the linear issues, please try again", + "LINK_SUCCESS": "Issue linked successfully", + "LINK_ERROR": "There was an error linking the issue, please try again", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "Create Linear issues from conversations, or link existing ones for seamless tracking.", + "FORM": { + "TITLE": { + "LABEL": "Judul", + "PLACEHOLDER": "Enter title", + "REQUIRED_ERROR": "Judul wajib diisi" + }, + "DESCRIPTION": { + "LABEL": "Deskripsi", + "PLACEHOLDER": "Enter description" + }, + "TEAM": { + "LABEL": "Tim", + "PLACEHOLDER": "Pilih tim", + "SEARCH": "Search team", + "REQUIRED_ERROR": "Team is required" + }, + "ASSIGNEE": { + "LABEL": "Assignee", + "PLACEHOLDER": "Select assignee", + "SEARCH": "Search assignee" + }, + "PRIORITY": { + "LABEL": "Prioritas", + "PLACEHOLDER": "Pilih prioritas", + "SEARCH": "Search priority" + }, + "LABEL": { + "LABEL": "Label", + "PLACEHOLDER": "Select label", + "SEARCH": "Search label" + }, + "STATUS": { + "LABEL": "Status", + "PLACEHOLDER": "Select status", + "SEARCH": "Search status" + }, + "PROJECT": { + "LABEL": "Project", + "PLACEHOLDER": "Select project", + "SEARCH": "Search project" + } + }, + "CREATE": "Buat", + "CANCEL": "Batalkan", + "CREATE_SUCCESS": "Issue created successfully", + "CREATE_ERROR": "There was an error creating the issue, please try again", + "LOADING_TEAM_ERROR": "There was an error fetching the teams, please try again", + "LOADING_TEAM_ENTITIES_ERROR": "There was an error fetching the team entities, please try again" + }, + "ISSUE": { + "STATUS": "Status", + "PRIORITY": "Prioritas", + "ASSIGNEE": "Assignee", + "LABELS": "Label", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Unlink", + "SUCCESS": "Issue unlinked successfully", + "ERROR": "There was an error unlinking the issue, please try again" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Ya, hapus", + "CANCEL": "Batalkan" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Ya, hapus", + "CANCEL": "Batalkan" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "Kirim Pesan...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Captain is thinking", + "YOU": "Anda", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "Anda", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "Ketik pesan Anda...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "Batalkan", + "CREATE": "Buat", + "EDIT": "Perbarui" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Ya, hapus", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "Perbarui", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "Fitur", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "Deskripsi", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "Fitur", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "Pengaturan", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Hapus" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "Buat", + "CANCEL": "Batalkan", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Hapus" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "Buat", + "CANCEL": "Batalkan", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Hapus" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Judul", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "Deskripsi", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "Buat", + "CANCEL": "Batalkan" + } + } + }, + "UPDATE": { + "CANCEL": "Batalkan", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Ya, hapus", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Ya, hapus", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "Deskripsi", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "Tidak ada", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "API Key" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "Kata Sandi", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Tipe" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Nomor", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Diperlukan" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "Hapus", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Ya, hapus", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "Semua" + }, + "STATUS": { + "TITLE": "Status", + "PENDING": "Ditunda", + "APPROVED": "Approved", + "ALL": "Semua" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "Edit", + "DELETE_RESPONSE": "Hapus" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Putuskan koneksi" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Ya, hapus", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "Kotak masuk", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/id/labelsMgmt.json new file mode 100644 index 0000000..133e3e5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Label", + "HEADER_BTN_TXT": "Tambah label", + "LOADING": "Mengambil label", + "DESCRIPTION": "Labels help you categorize and prioritize conversations and leads. You can assign a label to a conversation or contact using the side panel.", + "LEARN_MORE": "Learn more about labels", + "SEARCH_404": "Tidak ada item yang cocok dengan kueri ini", + "LIST": { + "404": "Tidak ada label yang tersedia di akun ini.", + "TITLE": "Kelola label", + "DESC": "Label memungkinkan Anda mengelompokkan percakapan menjadi satu.", + "TABLE_HEADER": { + "NAME": "Nama", + "DESCRIPTION": "Deskripsi", + "COLOR": "Warna" + } + }, + "FORM": { + "NAME": { + "LABEL": "Nama Label", + "PLACEHOLDER": "Nama label", + "REQUIRED_ERROR": "Nama label wajib diisi", + "MINIMUM_LENGTH_ERROR": "Panjang minimal 2 diperlukan", + "VALID_ERROR": "Hanya Abjad, Angka, Tanda Hubung, dan Garis Bawah yang diperbolehkan" + }, + "DESCRIPTION": { + "LABEL": "Deskripsi", + "PLACEHOLDER": "Deskripsi Label" + }, + "COLOR": { + "LABEL": "Warna" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Tampilkan label di sidebar" + }, + "EDIT": "Edit", + "CREATE": "Buat", + "DELETE": "Hapus", + "CANCEL": "Batalkan" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Add label to conversation", + "MULTIPLE_SUGGESTION": "Select this label", + "DESELECT": "Deselect label", + "DISMISS": "Dismiss suggestion" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Tutup", + "ADD_SELECTED_LABELS": "Add selected labels", + "ADD_SELECTED_LABEL": "Add selected label", + "ADD_ALL_LABELS": "Add all labels", + "SUGGESTED_LABELS": "Suggested labels" + }, + "ADD": { + "TITLE": "Tambah label", + "DESC": "Label memungkinkan Anda mengelompokkan percakapan menjadi satu.", + "API": { + "SUCCESS_MESSAGE": "Label berhasil ditambahkan", + "ERROR_MESSAGE": "Terjadi kesalahan, harap coba lagi" + } + }, + "EDIT": { + "TITLE": "Edit label", + "API": { + "SUCCESS_MESSAGE": "Label berhasil diperbarui", + "ERROR_MESSAGE": "Terjadi kesalahan, harap coba lagi" + } + }, + "DELETE": { + "BUTTON_TEXT": "Hapus", + "API": { + "SUCCESS_MESSAGE": "Label berhasil dihapus", + "ERROR_MESSAGE": "Terjadi kesalahan, harap coba lagi" + }, + "CONFIRM": { + "TITLE": "Konfirmasi Penghapusan", + "MESSAGE": "Apakah Anda yakin untuk menghapus ", + "YES": "Ya, Hapus ", + "NO": "Tidak, Simpan " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/login.json b/app/javascript/dashboard/i18n/locale/id/login.json new file mode 100644 index 0000000..1b86fba --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Masuk ke Chatwoot", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "Harap masukkan alamat email yang valid" + }, + "PASSWORD": { + "LABEL": "Kata Sandi", + "PLACEHOLDER": "Kata Sandi" + }, + "API": { + "SUCCESS_MESSAGE": "Berhasil Masuk", + "ERROR_MESSAGE": "Tidak dapat terhubung ke Server Woot, Silahkan coba lagi nanti", + "UNAUTH": "Nama Pengguna / Kata Sandi Salah. Silahkan coba lagi" + }, + "OAUTH": { + "GOOGLE_LOGIN": "Masuk dengan Google", + "BUSINESS_ACCOUNTS_ONLY": "Harap gunakan alamat email perusahaan Anda untuk masuk", + "NO_ACCOUNT_FOUND": "Kami tidak dapat menemukan akun untuk alamat email Anda." + }, + "FORGOT_PASSWORD": "Lupa kata sandi Anda?", + "CREATE_NEW_ACCOUNT": "Buat akun baru", + "SUBMIT": "Masuk", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/macros.json b/app/javascript/dashboard/i18n/locale/id/macros.json new file mode 100644 index 0000000..4d39b93 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Makro", + "DESCRIPTION": "A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click.", + "LEARN_MORE": "Learn more about macros", + "HEADER_BTN_TXT": "Tambahkan makro baru", + "HEADER_BTN_TXT_SAVE": "Simpan makro", + "LOADING": "Mengambil makro", + "ERROR": "Terjadi kesalahan. Silakan coba lagi", + "ORDER_INFO": "Makro akan dijalankan sesuai dengan urutan penambahan tindakan-tindakan Anda. Anda dapat mengatur ulang tindakan-tindakan tersebut dengan menggesernya menggunakan pegangan di sebelah setiap node.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Nama makro", + "PLACEHOLDER": "Masukkan nama untuk makro Anda", + "ERROR": "Nama diperlukan untuk membuat makro" + }, + "ACTIONS": { + "LABEL": "Tindakan" + } + }, + "API": { + "SUCCESS_MESSAGE": "Makro berhasil ditambahkan", + "ERROR_MESSAGE": "Tidak dapat membuat makro, Silakan coba lagi nanti" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nama", + "CREATED BY": "Dibuat oleh", + "LAST_UPDATED_BY": "Terakhir diperbarui oleh", + "VISIBILITY": "Visibilitas" + }, + "404": "Tidak ditemukan makro" + }, + "DELETE": { + "TOOLTIP": "Hapus makro", + "CONFIRM": { + "MESSAGE": "Apakah Anda yakin ingin menghapus ", + "YES": "Ya, Hapus", + "NO": "Tidak" + }, + "API": { + "SUCCESS_MESSAGE": "Makro berhasil dihapus", + "ERROR_MESSAGE": "Terjadi kesalahan saat menghapus makro. Silakan coba lagi nanti" + } + }, + "EDIT": { + "TOOLTIP": "Edit makro", + "API": { + "SUCCESS_MESSAGE": "Makro berhasil diperbarui", + "ERROR_MESSAGE": "Tidak dapat memperbarui makro, Silakan coba lagi nanti" + } + }, + "EDITOR": { + "START_FLOW": "Mulai Aliran", + "END_FLOW": "Selesaikan Aliran", + "LOADING": "Mengambil makro", + "ADD_BTN_TOOLTIP": "Tambahkan tindakan baru", + "DELETE_BTN_TOOLTIP": "Hapus Tindakan", + "VISIBILITY": { + "LABEL": "Visibilitas Makro", + "GLOBAL": { + "LABEL": "Publik", + "DESCRIPTION": "Makro ini tersedia secara publik untuk semua agen dalam akun ini." + }, + "PERSONAL": { + "LABEL": "Pribadi", + "DESCRIPTION": "Makro ini akan bersifat pribadi bagi Anda dan tidak akan tersedia untuk orang lain." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Jalankan", + "PREVIEW": "Pratinjau Makro", + "EXECUTED_SUCCESSFULLY": "Makro berhasil dijalankan" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Nilai dibutuhkan", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Assign a Team", + "ASSIGN_AGENT": "Assign an Agent", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Matikan Suara Percakapan", + "SNOOZE_CONVERSATION": "Tunda Percakapan", + "RESOLVE_CONVERSATION": "Selesaikan Percakapan", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "CHANGE_PRIORITY": "Ubah Prioritas", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "SEND_WEBHOOK_EVENT": "Send Webhook Event" + }, + "PRIORITY_TYPES": { + "NONE": "Tidak ada", + "LOW": "Rendah", + "MEDIUM": "Sedang", + "HIGH": "Tinggi", + "URGENT": "Penting" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/mfa.json b/app/javascript/dashboard/i18n/locale/id/mfa.json new file mode 100644 index 0000000..dee8f80 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "Diaktifkan", + "DISABLED": "Nonaktif", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Loading...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "Salin", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "Batalkan", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "Unduh", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "Kata Sandi", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "Batalkan", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "Batalkan", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/report.json b/app/javascript/dashboard/i18n/locale/id/report.json new file mode 100644 index 0000000..35393f1 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Percakapan", + "LOADING_CHART": "Memuat data grafik...", + "NO_ENOUGH_DATA": "Kami belum menerima cukup data untuk membuat laporan, Silakan coba lagi nanti.", + "DOWNLOAD_AGENT_REPORTS": "Unduh laporan agen", + "DATA_FETCHING_FAILED": "Gagal mengambil data, silakan coba lagi nanti.", + "SUMMARY_FETCHING_FAILED": "Gagal mengambil ringkasan, silakan coba lagi nanti.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Percakapan", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Pesan Masuk", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Pesan Keluar", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Waktu Respon Pertama", + "DESC": "( Rata-Rata )", + "INFO_TEXT": "Total jumlah percakapan yang digunakan untuk perhitungan:", + "TOOLTIP_TEXT": "Waktu Respon Pertama adalah {metricValue} (berdasarkan {conversationCount} percakapan)" + }, + "RESOLUTION_TIME": { + "NAME": "Waktu Penyelesaian", + "DESC": "( Rata-Rata )", + "INFO_TEXT": "Total jumlah percakapan yang digunakan untuk perhitungan:", + "TOOLTIP_TEXT": "Waktu Penyelesaian adalah {metricValue} (berdasarkan {conversationCount} percakapan)" + }, + "RESOLUTION_COUNT": { + "NAME": "Jumlah Terselesaikan", + "DESC": "( Total )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Jumlah Terselesaikan", + "DESC": "( Total )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Handoff Count", + "DESC": "( Total )" + }, + "REPLY_TIME": { + "NAME": "Customer waiting time", + "TOOLTIP_TEXT": "Waiting time is {metricValue} (based on {conversationCount} replies)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "7 hari terakhir", + "LAST_14_DAYS": "14 hari terakhir", + "LAST_30_DAYS": "30 hari terakhir", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "3 bulan terakhir", + "LAST_6_MONTHS": "6 bulan terakhir", + "LAST_YEAR": "Tahun terakhir", + "CUSTOM_DATE_RANGE": "Rentang tanggal kustom" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Terapkan", + "PLACEHOLDER": "Pilih rentang tanggal" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Kelompokkan Berdasarkan", + "DURATION_FILTER_LABEL": "Durasi", + "GROUPING_OPTIONS": { + "DAY": "Hari", + "WEEK": "Minggu", + "MONTH": "Bulan", + "YEAR": "Tahun" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Hari" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Hari" + }, + { + "id": 2, + "groupBy": "Minggu" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Hari" + }, + { + "id": 2, + "groupBy": "Minggu" + }, + { + "id": 3, + "groupBy": "Bulan" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "BUSINESS_HOURS": "Jam Kerja", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Tidak ada hasil ditemukan" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Gambaran Agen", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "Memuat data grafik...", + "NO_ENOUGH_DATA": "Kami belum menerima cukup data untuk membuat laporan, Silakan coba lagi nanti.", + "DOWNLOAD_AGENT_REPORTS": "Unduh laporan agen", + "FILTER_DROPDOWN_LABEL": "Pilih Agen", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Percakapan", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Pesan Masuk", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Pesan Keluar", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Waktu Respon Pertama", + "DESC": "( Rata-Rata )", + "INFO_TEXT": "Total jumlah percakapan yang digunakan untuk perhitungan:", + "TOOLTIP_TEXT": "Waktu Respon Pertama adalah {metricValue} (berdasarkan {conversationCount} percakapan)" + }, + "RESOLUTION_TIME": { + "NAME": "Waktu Penyelesaian", + "DESC": "( Rata-Rata )", + "INFO_TEXT": "Total jumlah percakapan yang digunakan untuk perhitungan:", + "TOOLTIP_TEXT": "Waktu Penyelesaian adalah {metricValue} (berdasarkan {conversationCount} percakapan)" + }, + "RESOLUTION_COUNT": { + "NAME": "Jumlah Terselesaikan", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "7 hari terakhir" + }, + { + "id": 1, + "name": "30 hari terakhir" + }, + { + "id": 2, + "name": "3 bulan terakhir" + }, + { + "id": 3, + "name": "6 bulan terakhir" + }, + { + "id": 4, + "name": "Tahun terakhir" + }, + { + "id": 5, + "name": "Rentang tanggal kustom" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Terapkan", + "PLACEHOLDER": "Pilih rentang tanggal" + } + }, + "LABEL_REPORTS": { + "HEADER": "Gambaran Label", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "Memuat data grafik...", + "NO_ENOUGH_DATA": "Kami belum menerima cukup data untuk membuat laporan, Silakan coba lagi nanti.", + "DOWNLOAD_LABEL_REPORTS": "Unduh laporan label", + "FILTER_DROPDOWN_LABEL": "Pilih label", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Percakapan", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Pesan Masuk", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Pesan Keluar", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Waktu Respon Pertama", + "DESC": "( Rata-Rata )", + "INFO_TEXT": "Total jumlah percakapan yang digunakan untuk perhitungan:", + "TOOLTIP_TEXT": "Waktu Respon Pertama adalah {metricValue} (berdasarkan {conversationCount} percakapan)" + }, + "RESOLUTION_TIME": { + "NAME": "Waktu Penyelesaian", + "DESC": "( Rata-Rata )", + "INFO_TEXT": "Total jumlah percakapan yang digunakan untuk perhitungan:", + "TOOLTIP_TEXT": "Waktu Penyelesaian adalah {metricValue} (berdasarkan {conversationCount} percakapan)" + }, + "RESOLUTION_COUNT": { + "NAME": "Jumlah Terselesaikan", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "7 hari terakhir" + }, + { + "id": 1, + "name": "30 hari terakhir" + }, + { + "id": 2, + "name": "3 bulan terakhir" + }, + { + "id": 3, + "name": "6 bulan terakhir" + }, + { + "id": 4, + "name": "Tahun terakhir" + }, + { + "id": 5, + "name": "Rentang tanggal kustom" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Terapkan", + "PLACEHOLDER": "Pilih rentang tanggal" + } + }, + "INBOX_REPORTS": { + "HEADER": "Gambaran kontak masuk", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "Memuat data grafik...", + "NO_ENOUGH_DATA": "Kami belum menerima cukup data untuk membuat laporan, Silakan coba lagi nanti.", + "DOWNLOAD_INBOX_REPORTS": "Unduh laporan kotak masuk", + "FILTER_DROPDOWN_LABEL": "Pilih kotak masuk", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Percakapan", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Pesan Masuk", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Pesan Keluar", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Waktu Respon Pertama", + "DESC": "( Rata-Rata )", + "INFO_TEXT": "Total jumlah percakapan yang digunakan untuk perhitungan:", + "TOOLTIP_TEXT": "Waktu Respon Pertama adalah {metricValue} (berdasarkan {conversationCount} percakapan)" + }, + "RESOLUTION_TIME": { + "NAME": "Waktu Penyelesaian", + "DESC": "( Rata-Rata )", + "INFO_TEXT": "Total jumlah percakapan yang digunakan untuk perhitungan:", + "TOOLTIP_TEXT": "Waktu Penyelesaian adalah {metricValue} (berdasarkan {conversationCount} percakapan)" + }, + "RESOLUTION_COUNT": { + "NAME": "Jumlah Terselesaikan", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "7 hari terakhir" + }, + { + "id": 1, + "name": "30 hari terakhir" + }, + { + "id": 2, + "name": "3 bulan terakhir" + }, + { + "id": 3, + "name": "6 bulan terakhir" + }, + { + "id": 4, + "name": "Tahun terakhir" + }, + { + "id": 5, + "name": "Rentang tanggal kustom" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Terapkan", + "PLACEHOLDER": "Pilih rentang tanggal" + } + }, + "TEAM_REPORTS": { + "HEADER": "Gambaran Tim", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "Memuat data grafik...", + "NO_ENOUGH_DATA": "Kami belum menerima cukup data untuk membuat laporan, Silakan coba lagi nanti.", + "DOWNLOAD_TEAM_REPORTS": "Unduh laporan tim", + "FILTER_DROPDOWN_LABEL": "Pilih Tim", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Percakapan", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Pesan Masuk", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Pesan Keluar", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Waktu Respon Pertama", + "DESC": "( Rata-Rata )", + "INFO_TEXT": "Total jumlah percakapan yang digunakan untuk perhitungan:", + "TOOLTIP_TEXT": "Waktu Respon Pertama adalah {metricValue} (berdasarkan {conversationCount} percakapan)" + }, + "RESOLUTION_TIME": { + "NAME": "Waktu Penyelesaian", + "DESC": "( Rata-Rata )", + "INFO_TEXT": "Total jumlah percakapan yang digunakan untuk perhitungan:", + "TOOLTIP_TEXT": "Waktu Penyelesaian adalah {metricValue} (berdasarkan {conversationCount} percakapan)" + }, + "RESOLUTION_COUNT": { + "NAME": "Jumlah Terselesaikan", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "7 hari terakhir" + }, + { + "id": 1, + "name": "30 hari terakhir" + }, + { + "id": 2, + "name": "3 bulan terakhir" + }, + { + "id": 3, + "name": "6 bulan terakhir" + }, + { + "id": 4, + "name": "Tahun terakhir" + }, + { + "id": 5, + "name": "Rentang tanggal kustom" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Terapkan", + "PLACEHOLDER": "Pilih rentang tanggal" + } + }, + "CSAT_REPORTS": { + "HEADER": "Laporan CSAT", + "NO_RECORDS": "Tidak ada respons survey CSAT yang tersedia.", + "DOWNLOAD": "Unduh Laporan CSAT", + "DOWNLOAD_FAILED": "Gagal mengunduh Laporan CSAT", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Pilih Agen" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Kontak", + "AGENT_NAME": "Agen yang ditugaskan", + "RATING": "Peringkat", + "FEEDBACK_TEXT": "Komentar umpan balik" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Total respons", + "TOOLTIP": "Total jumlah respons yang terkumpul" + }, + "SATISFACTION_SCORE": { + "LABEL": "Nilai kepuasan", + "TOOLTIP": "Total jumlah respons positif / Total jumlah respons * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Peringkat respons", + "TOOLTIP": "Total jumlah respons / Total jumlah pesan survey CSAT yang terkirim * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Bot Reports", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "No. of Conversations", + "TOOLTIP": "Total number of conversations handled by the bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total Responses", + "TOOLTIP": "Total number of responses sent by the bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Resolution Rate", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Handoff Rate", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Gambaran", + "LIVE": "Langsung", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Percakapan Terbuka", + "LOADING_MESSAGE": "Memuat metrik percakapan...", + "OPEN": "Terbuka", + "UNATTENDED": "Tidak Ditangani", + "UNASSIGNED": "Belum Ditugaskan", + "PENDING": "Ditunda" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Lalu Lintas Percakapan", + "NO_CONVERSATIONS": "Tidak ada percakapan", + "CONVERSATION": "{count} percakapan", + "CONVERSATIONS": "{count} percakapan", + "DOWNLOAD_REPORT": "Download report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "Tidak ada percakapan", + "CONVERSATION": "{count} percakapan", + "CONVERSATIONS": "{count} percakapan", + "DOWNLOAD_REPORT": "Download report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Percakapan oleh Agen", + "LOADING_MESSAGE": "Memuat metrik agen...", + "NO_AGENTS": "Tidak ada percakapan oleh agen", + "TABLE_HEADER": { + "AGENT": "Agen", + "OPEN": "Terbuka", + "UNATTENDED": "Tidak Ditangani", + "STATUS": "Status" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Tim", + "OPEN": "Terbuka", + "UNATTENDED": "Tidak Ditangani", + "STATUS": "Status" + } + }, + "AGENT_STATUS": { + "HEADER": "Status Agen", + "ONLINE": "Online", + "BUSY": "Sibuk", + "OFFLINE": "Offline" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Minggu", + "MONDAY": "Senin", + "TUESDAY": "Selasa", + "WEDNESDAY": "Rabu", + "THURSDAY": "Kamis", + "FRIDAY": "Jumat", + "SATURDAY": "Sabtu" + }, + "SLA_REPORTS": { + "HEADER": "SLA Reports", + "NO_RECORDS": "SLA applied conversations are not available.", + "LOADING": "Loading SLA data...", + "DOWNLOAD_SLA_REPORTS": "Download SLA reports", + "DOWNLOAD_FAILED": "Failed to download SLA Reports", + "DROPDOWN": { + "ADD_FIlTER": "Tambah filter", + "CLEAR_ALL": "Clear all", + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Tidak ada hasil ditemukan", + "NO_FILTER": "No filters available", + "SEARCH": "Search filter", + "INPUT_PLACEHOLDER": { + "SLA": "SLA name", + "AGENTS": "Nama agen", + "INBOXES": "Nama kotak masuk", + "LABELS": "Nama label", + "TEAMS": "Nama Tim" + }, + "SLA": "SLA Policy", + "INBOXES": "Kotak masuk", + "AGENTS": "Agen", + "LABELS": "Label", + "TEAMS": "Tim" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentage of SLAs created were completed successfully" + }, + "NO_OF_MISSES": { + "LABEL": "Number of Misses", + "TOOLTIP": "Total SLA misses in a certain period" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Number of Conversations", + "TOOLTIP": "Total number of conversations with SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "Percakapan", + "AGENT": "Agen" + }, + "VIEW_DETAILS": "View Details" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Kotak masuk", + "AGENT": "Agen", + "TEAM": "Tim", + "LABEL": "Label", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "Jumlah Terselesaikan", + "CONVERSATIONS": "Jumlah percakapan" + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/resetPassword.json b/app/javascript/dashboard/i18n/locale/id/resetPassword.json new file mode 100644 index 0000000..d31a404 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Reset kata sandi", + "DESCRIPTION": "Enter the email address you use to log in to Chatwoot to get the password reset instructions.", + "GO_BACK_TO_LOGIN": "If you want to go back to the login page,", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "Harap masukkan email Anda.", + "ERROR": "Harap masukkan email yang valid." + }, + "API": { + "SUCCESS_MESSAGE": "Link pengaturan ulang kata sandi telah dikirim ke email Anda.", + "ERROR_MESSAGE": "Tidak dapat terhubung ke Server Woot, Silahkan coba lagi nanti" + }, + "SUBMIT": "Kirim" + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/search.json b/app/javascript/dashboard/i18n/locale/id/search.json new file mode 100644 index 0000000..467781a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "Kontak", + "CONVERSATIONS": "Percakapan", + "MESSAGES": "Pesan", + "ARTICLES": "Articles" + }, + "SECTION": { + "CONTACTS": "Kontak", + "CONVERSATIONS": "Percakapan", + "MESSAGES": "Pesan", + "ARTICLES": "Articles" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "Sedang mencari", + "LOADING_DATA": "Loading", + "EMPTY_STATE": "Tidak ada {item} ditemukan untuk kueri '{query}'", + "EMPTY_STATE_FULL": "Tidak ada hasil ditemukan untuk kueri '{query}'", + "PLACEHOLDER_KEYBINDING": "/untuk fokus", + "INPUT_PLACEHOLDER": "Cari pesan, kontak, atau percakapan", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Clear all", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Cari dengan ID percakapan, email, nomor telepon, atau pesan untuk hasil pencarian yang lebih baik.", + "BOT_LABEL": "Bot", + "READ_MORE": "Baca lebih lanjut", + "READ_LESS": "Read less", + "WROTE": "menulis:", + "FROM": "Dari", + "EMAIL": "Email", + "EMAIL_SUBJECT": "Subjek", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "7 hari terakhir", + "LAST_30_DAYS": "30 hari terakhir", + "LAST_60_DAYS": "60 hari terakhir", + "LAST_90_DAYS": "90 hari terakhir", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "Terapkan", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Clear filter" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Pengirim", + "IN": "Kotak masuk", + "AGENTS": "Agen", + "CONTACTS": "Kontak", + "INBOXES": "Kotak masuk", + "NO_AGENTS": "Tidak ada agen", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/setNewPassword.json b/app/javascript/dashboard/i18n/locale/id/setNewPassword.json new file mode 100644 index 0000000..4ccb263 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Atur kata sandi baru", + "PASSWORD": { + "LABEL": "Kata Sandi", + "PLACEHOLDER": "Kata Sandi", + "ERROR": "Kata sandi terlalu pendek." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Konfirmasi kata sandi", + "PLACEHOLDER": "Konfirmasi Kata Sandi", + "ERROR": "Kata Sandi tidak cocok." + }, + "API": { + "SUCCESS_MESSAGE": "Berhasil mengubah kata sandi.", + "ERROR_MESSAGE": "Tidak dapat terhubung ke Server Woot, Silahkan coba lagi nanti" + }, + "CAPTCHA": { + "ERROR": "Verifikasi telah kedaluwarsa. Silakan selesaikan captcha kembali." + }, + "SUBMIT": "Kirim" + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/settings.json b/app/javascript/dashboard/i18n/locale/id/settings.json new file mode 100644 index 0000000..efbc193 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Pengaturan Profil", + "TITLE": "Pengaturan Profil", + "BTN_TEXT": "Perbarui Profil", + "DELETE_AVATAR": "Hapus Avatar", + "AVATAR_DELETE_SUCCESS": "Avatar berhasil dihapus", + "AVATAR_DELETE_FAILED": "Terjadi kesalahan saat menghapus avatar, silakan coba lagi", + "UPDATE_SUCCESS": "Profil Anda berhasil diperbarui", + "PASSWORD_UPDATE_SUCCESS": "Kata sandi Anda berhasil diubah", + "AFTER_EMAIL_CHANGED": "Profil Anda telah berhasil diperbarui, silakan masuk lagi dengan data akun yang baru diubah", + "FORM": { + "PICTURE": "Profile Picture", + "AVATAR": "Foto Profil", + "ERROR": "Perbaiki kesalahan formulir", + "REMOVE_IMAGE": "Hapus", + "UPLOAD_IMAGE": "Unggah Gambar", + "UPDATE_IMAGE": "Perbarui Gambar", + "PROFILE_SECTION": { + "TITLE": "Profil", + "NOTE": "Alamat email Anda adalah identitas Anda dan digunakan untuk masuk." + }, + "SEND_MESSAGE": { + "TITLE": "Pintasan keyboard untuk mengirim pesan", + "NOTE": "Anda dapat memilih pintasan keyboard (baik Enter atau Cmd/Ctrl+Enter) berdasarkan preferensi Anda dalam menulis.", + "UPDATE_SUCCESS": "Pengaturan Anda berhasil diperbarui", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Kirim pesan dengan menekan tombol Enter daripada mengklik tombol kirim." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Kirim pesan dengan menekan tombol Cmd/Ctrl + Enter daripada mengklik tombol kirim." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Default", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Tanda tangan pesan pribadi", + "NOTE": "Create a unique message signature to appear at the end of every message you send from any inbox. You can also include an inline image, which is supported in live-chat, email, and API inboxes.", + "BTN_TEXT": "Simpan tanda tangan pesan", + "API_ERROR": "Tidak dapat menyimpan tanda tangan! Coba lagi", + "API_SUCCESS": "Tanda tangan berhasil disimpan", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save to save the signature", + "IMAGE_UPLOAD_SIZE_ERROR": "Ukuran gambar harus kurang dari {size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Tanda Tangan Pesan", + "ERROR": "Tanda Tangan Pesan tidak boleh kosong", + "PLACEHOLDER": "Masukkan tanda tangan pesan pribadi Anda di sini." + }, + "PASSWORD_SECTION": { + "TITLE": "Kata Sandi", + "NOTE": "Memperbarui kata sandi Anda akan mengatur ulang login Anda di beberapa perangkat.", + "BTN_TEXT": "Ubah Kata Sandi" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "Token Akses", + "NOTE": "Token ini dapat digunakan jika Anda sedang membangun integrasi berbasis API", + "COPY": "Salin", + "RESET": "Reset", + "CONFIRM_RESET": "Are you sure?", + "CONFIRM_HINT": "Click again to confirm", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Alerts", + "NOTE": "Enable audio alerts in dashboard for new messages and conversations.", + "PLAY": "Play sound", + "ALERT_TYPES": { + "NONE": "Tidak ada", + "MINE": "Assigned", + "ALL": "Semua", + "ASSIGNED": "My assigned conversations", + "UNASSIGNED": "Unassigned conversations", + "NOTME": "Open conversations assigned to others" + }, + "ALERT_COMBINATIONS": { + "NONE": "You haven't selected any options, you won't receive any audio alerts.", + "ASSIGNED": "You'll receive alerts for conversations assigned to you.", + "UNASSIGNED": "You'll receive alerts for any unassigned conversations.", + "NOTME": "You'll receive alerts for conversations assigned to others.", + "ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.", + "ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.", + "NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.", + "ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations." + }, + "ALERT_TYPE": { + "TITLE": "Alert events for conversations", + "NONE": "Tidak ada", + "ASSIGNED": "Percakapan yang ditetapkan", + "ALL_CONVERSATIONS": "Semua Percakapan" + }, + "DEFAULT_TONE": { + "TITLE": "Nada pemberitahuan:" + }, + "CONDITIONS": { + "TITLE": "Kondisi pemberitahuan:", + "CONDITION_ONE": "Kirim pemberitahuan audio hanya jika jendela browser tidak aktif", + "CONDITION_TWO": "Kirim pemberitahuan setiap 30 detik hingga semua percakapan yang ditetapkan dibaca" + }, + "SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.", + "READ_MORE": "Baca lebih lanjut" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "Notifikasi Email", + "NOTE": "Perbarui preferensi notifikasi email Anda di sini", + "CONVERSATION_ASSIGNMENT": "Kirim notifikasi email saat percakapan ditugaskan kepada saya", + "CONVERSATION_CREATION": "Kirim notifikasi email ketika percakapan baru dibuat", + "CONVERSATION_MENTION": "Kirim notifikasi email saat Anda disebut dalam percakapan", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Kirim notifikasi email ketika pesan baru dibuat dalam percakapan yang telah ditugaskan", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Kirim notifikasi email ketika pesan baru dibuat dalam percakapan yang Anda ikuti", + "SLA_MISSED_FIRST_RESPONSE": "Send email notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send email notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send email notifications when a conversation misses resolution SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Notification preferences", + "TYPE_TITLE": "Notification type", + "EMAIL": "Email", + "PUSH": "Push notification", + "TYPES": { + "CONVERSATION_CREATED": "A new conversation is created", + "CONVERSATION_ASSIGNED": "A conversation is assigned to you", + "CONVERSATION_MENTION": "You are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "A new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "A new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "A conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "A conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "A conversation misses resolution SLA" + }, + "BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them" + }, + "API": { + "UPDATE_SUCCESS": "Preferensi notifikasi Anda berhasil diperbarui", + "UPDATE_ERROR": "Terjadi kesalahan saat memperbarui preferensi, silakan coba lagi" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Notifikasi Push", + "NOTE": "Perbarui preferensi notifikasi push Anda di sini", + "CONVERSATION_ASSIGNMENT": "Kirim notifikasi push ketika percakapan ditugaskan kepada saya", + "CONVERSATION_CREATION": "Kirim notifikasi push ketika percakapan baru dibuat", + "CONVERSATION_MENTION": "Kirim notifikasi push ketika Anda disebut dalam percakapan", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Kirim notifikasi push ketika pesan baru dibuat dalam percakapan yang telah ditugaskan", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Kirim notifikasi push ketika pesan baru dibuat dalam percakapan yang Anda ikuti", + "HAS_ENABLED_PUSH": "Anda telah mengaktifkan notifikasi push untuk browser ini.", + "REQUEST_PUSH": "Aktifkan notifikasi push", + "SLA_MISSED_FIRST_RESPONSE": "Send push notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send push notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send push notifications when a conversation misses resolution SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "Foto Profil" + }, + "NAME": { + "LABEL": "Nama lengkap Anda", + "ERROR": "Harap masukkan nama lengkap yang valid", + "PLACEHOLDER": "Harap masukkan nama lengkap Anda yang valid" + }, + "DISPLAY_NAME": { + "LABEL": "Nama tampilan", + "ERROR": "Harap masukkan nama tampilan yang valid", + "PLACEHOLDER": "Harap masukkan nama tampilan, ini akan ditampilkan dalam percakapan" + }, + "AVAILABILITY": { + "LABEL": "Ketersediaan", + "STATUS": { + "ONLINE": "Online", + "BUSY": "Sibuk", + "OFFLINE": "Offline" + }, + "SET_AVAILABILITY_SUCCESS": "Ketersediaan berhasil diatur", + "SET_AVAILABILITY_ERROR": "Tidak dapat mengatur ketersediaan, silakan coba lagi", + "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user" + }, + "EMAIL": { + "LABEL": "Alamat email Anda", + "ERROR": "Harap masukkan alamat email yang valid", + "PLACEHOLDER": "Silakan masukkan alamat email Anda, ini akan ditampilkan dalam percakapan" + }, + "CURRENT_PASSWORD": { + "LABEL": "Kata sandi saat ini", + "ERROR": "Silakan masukkan kata sandi saat ini", + "PLACEHOLDER": "Silakan masukkan kata sandi saat ini" + }, + "PASSWORD": { + "LABEL": "Kata Sandi Baru", + "ERROR": "Silakan masukkan kata sandi dengan panjang minimal 6 karakter", + "PLACEHOLDER": "Silakan masukkan kata sandi baru Anda" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Konfirmasi Kata Sandi Baru", + "ERROR": "Konfirmasi kata sandi harus sama dengan kata sandi", + "PLACEHOLDER": "Silakan masukkan ulang kata sandi baru Anda" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Ubah", + "CHANGE_ACCOUNTS": "Switch account", + "SWITCH_ACCOUNT": "Switch account", + "CONTACT_SUPPORT": "Contact support", + "SELECTOR_SUBTITLE": "Pilih akun dari daftar berikut", + "PROFILE_SETTINGS": "Profile settings", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Keyboard shortcuts", + "APPEARANCE": "Change appearance", + "SUPER_ADMIN_CONSOLE": "SuperAdmin console", + "DOCS": "Read documentation", + "CHANGELOG": "Changelog", + "LOGOUT": "Log out" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "hari percobaan tersisa.", + "TRAIL_BUTTON": "Beli Sekarang", + "DELETED_USER": "Pengguna Dihapus", + "EMAIL_VERIFICATION_PENDING": "It seems that you haven't verified your email address yet. Please check your inbox for the verification email.", + "RESEND_VERIFICATION_MAIL": "Resend verification email", + "EMAIL_VERIFICATION_SENT": "Verification email has been sent. Please check your inbox.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Akun Ditangguhkan", + "MESSAGE": "Akun Anda ditangguhkan. Silakan hubungi tim dukungan untuk informasi lebih lanjut." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Log out" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Salin", + "CODEPEN": "Buka di CodePen", + "COPY_SUCCESSFUL": "Kode berhasil disalin ke clipboard" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Tampilkan Lebih Banyak", + "SHOW_LESS": "Tampilkan Lebih Sedikit" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "Unduh", + "UPLOADING": "Mengunggah...", + "INSTAGRAM_STORY_UNAVAILABLE": "Cerita ini tidak lagi tersedia." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "Lihat di peta" + }, + "FORM_BUBBLE": { + "SUBMIT": "Kirim" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "This image is no longer available.", + "LOADING_FAILED": "Loading failed" + } + }, + "CONFIRM_EMAIL": "Memverifikasi...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Tambah Kotak Masuk" + } + }, + "SIDEBAR": { + "NO_ITEMS": "No items", + "CURRENTLY_VIEWING_ACCOUNT": "Saat ini dilihat:", + "SWITCH": "Ganti", + "INBOX_VIEW": "Inbox View", + "CONVERSATIONS": "Percakapan", + "INBOX": "Kotak Masuk Saya", + "ALL_CONVERSATIONS": "Semua Percakapan", + "MENTIONED_CONVERSATIONS": "Disebutkan", + "PARTICIPATING_CONVERSATIONS": "Berpartisipasi", + "UNATTENDED_CONVERSATIONS": "Belum Ditangani", + "REPORTS": "Laporan", + "SETTINGS": "Pengaturan", + "CONTACTS": "Kontak", + "ACTIVE": "Aktif", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistants", + "CAPTAIN_DOCUMENTS": "Documents", + "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_TOOLS": "Tools", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "Kotak masuk", + "CAPTAIN_SETTINGS": "Pengaturan", + "HOME": "Beranda", + "AGENTS": "Agen", + "AGENT_BOTS": "Bot Agen", + "AUDIT_LOGS": "Log Audit", + "INBOXES": "Kotak Masuk", + "NOTIFICATIONS": "Notifikasi", + "CANNED_RESPONSES": "Jawaban Cepat", + "INTEGRATIONS": "Integrasi", + "PROFILE_SETTINGS": "Pengaturan Profil", + "ACCOUNT_SETTINGS": "Pengaturan Akun", + "APPLICATIONS": "Aplikasi", + "LABELS": "Label", + "CUSTOM_ATTRIBUTES": "Atribut Kustom", + "AUTOMATION": "Otomatisasi", + "MACROS": "Makro", + "TEAMS": "Tim", + "BILLING": "Pembayaran", + "CUSTOM_VIEWS_FOLDER": "Folder", + "CUSTOM_VIEWS_SEGMENTS": "Segmen", + "ALL_CONTACTS": "Semua Kontak", + "TAGGED_WITH": "Tandai dengan", + "NEW_LABEL": "Label Baru", + "NEW_TEAM": "Tim Baru", + "NEW_INBOX": "Kotak Masuk Baru", + "REPORTS_CONVERSATION": "Percakapan", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Kampanye", + "ONGOING": "Berlangsung", + "ONE_OFF": "Sekali", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "Bot", + "REPORTS_AGENT": "Agen", + "REPORTS_LABEL": "Label", + "REPORTS_INBOX": "Kotak Masuk", + "REPORTS_TEAM": "Tim", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "Atur diri anda sebagai", + "SET_YOUR_AVAILABILITY": "Atur ketersediaan Anda", + "SLA": "SLA", + "CUSTOM_ROLES": "Custom Roles", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Gambaran", + "REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages", + "HELP_CENTER": { + "TITLE": "Pusat Bantuan", + "ARTICLES": "Articles", + "CATEGORIES": "Kategori", + "LOCALES": "Bahasa", + "SETTINGS": "Pengaturan" + }, + "CHANNELS": "Channel", + "SET_AUTO_OFFLINE": { + "TEXT": "Tandai offline secara otomatis", + "INFO_TEXT": "Biarkan sistem secara otomatis menandai Anda offline saat Anda tidak menggunakan aplikasi atau dasbor.", + "INFO_SHORT": "Automatically mark offline when you aren't using the app." + }, + "DOCS": "Baca dokumen", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "Pembayaran", + "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "CURRENT_PLAN": { + "TITLE": "Paket Saat Ini", + "PLAN_NOTE": "Anda saat ini berlangganan paket **{plan}** dengan **{quantity}** lisensi", + "SEAT_COUNT": "Number of seats", + "RENEWS_ON": "Renews on" + }, + "VIEW_PRICING": "View Pricing", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Kelola langganan Anda", + "DESCRIPTION": "Lihat faktur sebelumnya, edit rincian pembayaran, atau batalkan langganan Anda.", + "BUTTON_TXT": "Buka portal pembayaran" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Manage usage and credits for Captain AI.", + "BUTTON_TXT": "Buy more credits", + "DOCUMENTS": "Documents", + "RESPONSES": "Responses", + "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more.", + "REFRESH_CREDITS": "Segarkan" + }, + "CHAT_WITH_US": { + "TITLE": "Butuh bantuan?", + "DESCRIPTION": "Mengalami masalah dalam pembayaran? Kami di sini untuk membantu.", + "BUTTON_TXT": "Chat dengan kami" + }, + "NO_BILLING_USER": "Akun pembayaran Anda sedang dikonfigurasi. Silakan segarkan halaman dan coba lagi.", + "TOPUP": { + "BUY_CREDITS": "Buy more credits", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Catatan:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "Batalkan", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Kembali", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "Kode berhasil disalin ke clipboard", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Uh oh! Kami tidak dapat menemukan akun Chatwoot apa pun. Harap buat akun baru untuk melanjutkan.", + "NEW_ACCOUNT": "Akun Baru", + "SELECTOR_SUBTITLE": "Buat akun baru", + "API": { + "SUCCESS_MESSAGE": "Akun berhasil dibuat", + "EXIST_MESSAGE": "Akun sudah ada", + "ERROR_MESSAGE": "Tidak dapat terhubung ke Server Woot, Silakan coba lagi nanti" + }, + "FORM": { + "NAME": { + "LABEL": "Nama Perusahaan", + "PLACEHOLDER": "Wayne Enterprises" + }, + "SUBMIT": "Kirim", + "CANCEL": "Batalkan" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "Lihat semua pintasan", + "TITLE": { + "OPEN_CONVERSATION": "Buka percakapan", + "RESOLVE_AND_NEXT": "Selesaikan dan pindah ke berikutnya", + "NAVIGATE_DROPDOWN": "Navigasi item dropdown", + "RESOLVE_CONVERSATION": "Selesaikan Percakapan", + "GO_TO_CONVERSATION_DASHBOARD": "Buka Dasbor Percakapan", + "ADD_ATTACHMENT": "Tambahkan Lampiran", + "GO_TO_CONTACTS_DASHBOARD": "Buka Dasbor Kontak", + "TOGGLE_SIDEBAR": "Buka/Tutup Sidebar", + "GO_TO_REPORTS_SIDEBAR": "Buka sidebar Laporan", + "MOVE_TO_NEXT_TAB": "Pindah ke tab berikutnya dalam daftar percakapan", + "GO_TO_SETTINGS": "Buka Pengaturan", + "SWITCH_TO_PRIVATE_NOTE": "Beralih ke Catatan Pribadi", + "SWITCH_TO_REPLY": "Beralih ke Balasan", + "TOGGLE_SNOOZE_DROPDOWN": "Buka/Tutup dropdown penundaan" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "Prioritas", + "ACTIVE": "Aktif", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "Edit" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Deskripsi:", + "PLACEHOLDER": "Enter description" + }, + "STATUS": { + "LABEL": "Status:", + "PLACEHOLDER": "Select status", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "Tambahkan" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "Edit" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Deskripsi:", + "PLACEHOLDER": "Enter description" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "Tambahkan" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "Hapus", + "CANCEL_BUTTON_LABEL": "Batalkan" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/signup.json b/app/javascript/dashboard/i18n/locale/id/signup.json new file mode 100644 index 0000000..dac2bee --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Buat akun", + "TITLE": "Daftar", + "TESTIMONIAL_HEADER": "Hanya butuh satu langkah untuk maju", + "TESTIMONIAL_CONTENT": "Anda hanya tinggal selangkah lagi untuk berinteraksi dengan pelanggan Anda, mempertahankan mereka, dan menemukan yang baru.", + "TERMS_ACCEPT": "Dengan membuat akun, Anda menyetujui Syarat & Ketentuan dan Kebijakan Privasi kami.", + "OAUTH": { + "GOOGLE_SIGNUP": "Daftar dengan Google" + }, + "COMPANY_NAME": { + "LABEL": "Nama Perusahaan", + "PLACEHOLDER": "Masukkan nama perusahaan Anda. contoh: Wayne Enterprises", + "ERROR": "Nama perusahaan terlalu pendek" + }, + "FULL_NAME": { + "LABEL": "Nama Lengkap", + "PLACEHOLDER": "Masukkan nama lengkap Anda. contoh: Bruce Wayne", + "ERROR": "Nama lengkap terlalu pendek" + }, + "EMAIL": { + "LABEL": "Email kantor", + "PLACEHOLDER": "Enter your work email address. E.g., bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Harap masukkan alamat email kantor yang valid" + }, + "PASSWORD": { + "LABEL": "Kata Sandi", + "PLACEHOLDER": "Kata Sandi", + "ERROR": "Kata sandi terlalu pendek", + "IS_INVALID_PASSWORD": "Kata sandi harus mengandung setidaknya 1 huruf kapital, 1 huruf kecil, 1 angka, dan 1 karakter khusus", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Konfirmasi Kata Sandi", + "PLACEHOLDER": "Konfirmasi Kata Sandi", + "ERROR": "Kata Sandi tidak cocok." + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "Tidak dapat terhubung ke Server Woot, Silahkan coba lagi nanti" + }, + "SUBMIT": "Buat akun", + "HAVE_AN_ACCOUNT": "Sudah punya akun?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/sla.json b/app/javascript/dashboard/i18n/locale/id/sla.json new file mode 100644 index 0000000..053d134 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Add SLA", + "ADD_ACTION_LONG": "Create a new SLA Policy", + "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", + "LEARN_MORE": "Learn more about SLA", + "LOADING": "Fetching SLAs", + "PAYWALL": { + "TITLE": "Upgrade to create SLAs", + "AVAILABLE_ON": "The SLA feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SLA feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no SLAs available in this account.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Issues raised by enterprise customers, that require immediate attention.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Issues raised by enterprise customers, that needs to be acknowledged quickly." + }, + "BUSINESS_HOURS_ON": "Business hours on", + "BUSINESS_HOURS_OFF": "Business hours off", + "RESPONSE_TYPES": { + "FRT": "First response time threshold", + "NRT": "Next response time threshold", + "RT": "Resolution time threshold", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA Name", + "PLACEHOLDER": "SLA Name", + "REQUIRED_ERROR": "SLA name is required", + "MINIMUM_LENGTH_ERROR": "Panjang minimal 2 diperlukan", + "VALID_ERROR": "Hanya Abjad, Angka, Tanda Hubung, dan Garis Bawah yang diperbolehkan" + }, + "DESCRIPTION": { + "LABEL": "Deskripsi", + "PLACEHOLDER": "SLA for premium customers" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "Waktu Respon Pertama", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Next Response Time", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "Waktu Penyelesaian", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Jam Kerja", + "PLACEHOLDER": "Only during business hours" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Threshold should be a number and greater than zero" + }, + "EDIT": "Edit", + "CREATE": "Buat", + "DELETE": "Hapus", + "CANCEL": "Batalkan" + }, + "ADD": { + "TITLE": "Add SLA", + "DESC": "Friendly promises for great service!", + "API": { + "SUCCESS_MESSAGE": "SLA added successfully", + "ERROR_MESSAGE": "Terjadi kesalahan, harap coba lagi" + } + }, + "DELETE": { + "TITLE": "Delete SLA", + "API": { + "SUCCESS_MESSAGE": "SLA deleted successfully", + "ERROR_MESSAGE": "Terjadi kesalahan, harap coba lagi" + }, + "CONFIRM": { + "TITLE": "Konfirmasi Penghapusan", + "MESSAGE": "Are you sure you want to delete ", + "YES": "Ya, Hapus ", + "NO": "Tidak, Simpan " + } + }, + "EVENTS": { + "TITLE": "SLA Misses", + "FRT": "Waktu respons pertama", + "NRT": "Next response time", + "RT": "Resolution time", + "SHOW_MORE": "{count} more", + "HIDE": "Hide {count} rows" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/teamsSettings.json b/app/javascript/dashboard/i18n/locale/id/teamsSettings.json new file mode 100644 index 0000000..4894ecb --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Buat tim baru", + "HEADER": "Tim", + "LOADING": "Fetching teams", + "DESCRIPTION": "Teams allow you to organize agents into groups based on their responsibilities. An agent can belong to multiple teams. When working collaboratively, you can assign conversations to specific teams.", + "LEARN_MORE": "Learn more about teams", + "LIST": { + "404": "Belum ada tim yang dibuat pada akun ini.", + "EDIT_TEAM": "Edit Tim", + "NONE": "Tidak ada" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Buat tim", + "DESC": "Tambahkan judul dan deskripsi untuk tim baru Anda." + }, + "AGENTS": { + "BUTTON_TEXT": "Tambahkan agen ke tim Anda", + "TITLE": "Tambahkan agen ke tim - {teamName}", + "DESC": "Tambahkan agen pada tim baru Anda. Ini memungkinkan Anda berkolaborasi sebagai sebuah tim pada percakapan, mendapatkan notifikasi atas peristiwa baru dalam percakapan yang sama." + }, + "WIZARD_CREATE": { + "TITLE": "Buat", + "BODY": "Buat tim baru dari agen-agen." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "Tambahkan Agen", + "BODY": "Tambahkan agen-agen ke dalam tim." + }, + "WIZARD_FINISH": { + "TITLE": "Selesai", + "BODY": "Sekarang kotak masuk Anda sudah siap!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Edit detil tim Anda", + "DESC": "Edit judul dan deskripsi tim Anda.", + "BUTTON_TEXT": "Update tim" + }, + "AGENTS": { + "BUTTON_TEXT": "Update agen dalam tim", + "TITLE": "Tambahkan agen ke tim - {teamName}", + "DESC": "Tambahkan agen-agen pada tim baru Anda. Semua agen yang telah ditambahkan akan mendapatkan notifikasi ketika sebuah percakapan dialokasikan pada tim ini." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Detil tim", + "ROUTE": "pengaturan_tim_edit", + "BODY": "Ubah nama, deskripsi, dan detil lainnya." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Edit Agen", + "ROUTE": "pengaturan_tim_edit_anggota", + "BODY": "Edit agen-agen dalam tim Anda." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Selesai", + "ROUTE": "pengaturan_tim_edit_selesai", + "BODY": "Sekarang kotak masuk Anda sudah siap!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Tidak dapat menyimpan detil tim. Coba lagi." + }, + "AGENTS": { + "AGENT": "Agen", + "EMAIL": "Email", + "BUTTON_TEXT": "Tambahkan Agen", + "ADD_AGENTS": "Menambahkan Agen ke Tim Anda...", + "SELECT": "pilih", + "SELECT_ALL": "pilih semua agen", + "SELECTED_COUNT": "{selected} dari {total} agen terpilih." + }, + "ADD": { + "TITLE": "Tambahkan agen ke tim - {teamName}", + "DESC": "Tambahkan agen-agen pada tim baru Anda. Ini memungkinkan Anda berkolaborasi sebagai sebuah tim pada percakapan, mendapatkan notifikasi atas peristiwa baru dalam percakapan yang sama.", + "SELECT": "pilih", + "SELECT_ALL": "pilih semua agen", + "SELECTED_COUNT": "{selected} dari {total} agen terpilih.", + "BUTTON_TEXT": "Tambahkan Agen", + "AGENT_VALIDATION_ERROR": "Pilih setidaknya satu agen." + }, + "FINISH": { + "TITLE": "Tim Anda siap!", + "MESSAGE": "Sekarang Anda dapat berkolaborasi sebagai sebuah tim pada percakapan. Selamat mendukung ", + "BUTTON_TEXT": "Selesai" + }, + "DELETE": { + "BUTTON_TEXT": "Hapus", + "API": { + "SUCCESS_MESSAGE": "Tim berhasil dihapus.", + "ERROR_MESSAGE": "Tidak dapat menghapus tim. Coba lagi." + }, + "CONFIRM": { + "TITLE": "Are you sure you want to delete the team?", + "PLACE_HOLDER": "Silakan ketik %{teamName} untuk konfirmasi", + "MESSAGE": "Menghapus tim akan menghilangkan alokasi tim dari percakapan yang telah ditetapkan terhadap tim ini.", + "YES": "Hapus ", + "NO": "Batalkan" + } + }, + "SETTINGS": "Pengaturan", + "FORM": { + "UPDATE": "Update tim", + "CREATE": "Buat tim", + "NAME": { + "LABEL": "Nama Tim", + "PLACEHOLDER": "Contoh: Sales, Customer Support" + }, + "DESCRIPTION": { + "LABEL": "Deskripsi Tim", + "PLACEHOLDER": "Deskripsi singkat tentang tim ini." + }, + "AUTO_ASSIGN": { + "LABEL": "Izinkan penugasan otomatis untuk tim ini." + }, + "SUBMIT_CREATE": "Buat tim" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/webhooks.json b/app/javascript/dashboard/i18n/locale/id/webhooks.json new file mode 100644 index 0000000..4486c61 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Pengaturan Webhook" + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/id/whatsappTemplates.json new file mode 100644 index 0000000..06a9119 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Templat Whatsapp", + "SUBTITLE": "Pilih templat Whatsapp yang ingin Anda kirim", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Cari Templat", + "NO_TEMPLATES_FOUND": "Tidak ditemukan templat untuk", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Kategori", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Bahasa", + "TEMPLATE_BODY": "Isi Templat", + "CATEGORY": "Kategori" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variabel", + "LANGUAGE": "Bahasa", + "CATEGORY": "Kategori", + "VARIABLE_PLACEHOLDER": "Masukkan nilai {variable}", + "GO_BACK_LABEL": "Kembali", + "SEND_MESSAGE_LABEL": "Kirim Pesan", + "FORM_ERROR_MESSAGE": "Harap isi semua variabel sebelum mengirim", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/id/yearInReview.json b/app/javascript/dashboard/i18n/locale/id/yearInReview.json new file mode 100644 index 0000000..43606bb --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/id/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "Tutup", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "Percakapan", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "Unduh", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "Share" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/advancedFilters.json b/app/javascript/dashboard/i18n/locale/is/advancedFilters.json new file mode 100644 index 0000000..6b1a17e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Filter conversations", + "SUBTITLE": "Add your filters below and hit 'Apply filters' to cut through the chat clutter.", + "EDIT_CUSTOM_FILTER": "Edit Folder", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your folder.", + "ADD_NEW_FILTER": "Add filter", + "FILTER_DELETE_ERROR": "Oops, looks like we can't save nothing! Please add at least one filter to save it.", + "SUBMIT_BUTTON_LABEL": "Apply filters", + "UPDATE_BUTTON_LABEL": "Update folder", + "CANCEL_BUTTON_LABEL": "Hætta við", + "CLEAR_BUTTON_LABEL": "Clear filters", + "FOLDER_LABEL": "Folder Name", + "FOLDER_QUERY_LABEL": "Folder Query", + "EMPTY_VALUE_ERROR": "Value is required.", + "TOOLTIP_LABEL": "Filter conversations", + "QUERY_DROPDOWN_LABELS": { + "AND": "AND", + "OR": "OR" + }, + "INPUT_PLACEHOLDER": "Enter value", + "OPERATOR_LABELS": { + "equal_to": "Equal to", + "not_equal_to": "Not equal to", + "does_not_contain": "Does not contain", + "is_present": "Is present", + "is_not_present": "Is not present", + "is_greater_than": "Is greater than", + "is_less_than": "Is lesser than", + "days_before": "Is x days before", + "starts_with": "Starts with", + "equalTo": "Equal to", + "notEqualTo": "Not equal to", + "contains": "Contains", + "doesNotContain": "Does not contain", + "isPresent": "Is present", + "isNotPresent": "Is not present", + "isGreaterThan": "Is greater than", + "isLessThan": "Is lesser than", + "daysBefore": "Is x days before", + "startsWith": "Starts with" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "True", + "FALSE": "False" + }, + "ATTRIBUTES": { + "STATUS": "Staða", + "ASSIGNEE_NAME": "Assignee name", + "INBOX_NAME": "Inbox name", + "TEAM_NAME": "Team name", + "CONVERSATION_IDENTIFIER": "Conversation identifier", + "CAMPAIGN_NAME": "Campaign name", + "LABELS": "Labels", + "BROWSER_LANGUAGE": "Browser language", + "PRIORITY": "Priority", + "COUNTRY_NAME": "Country name", + "REFERER_LINK": "Referer link", + "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_TEXT": "Text", + "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Created at", + "LAST_ACTIVITY": "Last activity" + }, + "ERRORS": { + "VALUE_REQUIRED": "Value is required", + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard filters", + "ADDITIONAL_FILTERS": "Additional filters", + "CUSTOM_ATTRIBUTES": "Custom attributes" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Do you want to save this filter?", + "LABEL": "Name this filter", + "PLACEHOLDER": "Name your filter to refer it later.", + "ERROR_MESSAGE": "Name is required.", + "SAVE_BUTTON": "Save filter", + "CANCEL_BUTTON": "Hætta við", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder created successfully.", + "ERROR_MESSAGE": "Error while creating folder." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment created successfully.", + "ERROR_MESSAGE": "Error while creating segment." + } + }, + "EDIT": { + "EDIT_BUTTON": "Edit folder" + }, + "DELETE": { + "DELETE_BUTTON": "Delete filter", + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete the filter ", + "YES": "Yes, delete", + "NO": "No, keep it" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder deleted successfully.", + "ERROR_MESSAGE": "Error while deleting folder." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment deleted successfully.", + "ERROR_MESSAGE": "Error while deleting segment." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/agentBots.json b/app/javascript/dashboard/i18n/locale/is/agentBots.json new file mode 100644 index 0000000..3086c79 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Bots", + "LOADING_EDITOR": "Loading editor...", + "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try. You can manage your bots from this page or create new ones using the 'Add Bot' button.", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "System bot", + "GLOBAL_BOT_BADGE": "System", + "AVATAR": { + "SUCCESS_DELETE": "Bot avatar deleted successfully", + "ERROR_DELETE": "Error deleting bot avatar, please try again" + }, + "BOT_CONFIGURATION": { + "TITLE": "Select an agent bot", + "DESC": "Assign an Agent Bot to your inbox. They can handle initial conversations and transfer them to a live agent when necessary.", + "SUBMIT": "Uppfæra", + "DISCONNECT": "Disconnect bot", + "SUCCESS_MESSAGE": "Successfully updated the agent bot.", + "DISCONNECTED_SUCCESS_MESSAGE": "Successfully disconnected the agent bot.", + "ERROR_MESSAGE": "Could not update the agent bot. Please try again.", + "DISCONNECTED_ERROR_MESSAGE": "Could not disconnect the agent bot. Please try again.", + "SELECT_PLACEHOLDER": "Select bot" + }, + "ADD": { + "TITLE": "Add Bot", + "CANCEL_BUTTON_TEXT": "Hætta við", + "API": { + "SUCCESS_MESSAGE": "Bot added successfully.", + "ERROR_MESSAGE": "Could not add bot. Please try again later." + } + }, + "LIST": { + "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.", + "LOADING": "Fetching bots...", + "TABLE_HEADER": { + "DETAILS": "Bot Details", + "URL": "Webhook URL" + } + }, + "DELETE": { + "BUTTON_TEXT": "Eyða", + "TITLE": "Delete bot", + "CONFIRM": { + "TITLE": "Staðfesta eyðingu", + "MESSAGE": "Are you sure you want to delete {name}?", + "YES": "Yes, Delete", + "NO": "Nei, hætta við eyðingu" + }, + "API": { + "SUCCESS_MESSAGE": "Bot deleted successfully.", + "ERROR_MESSAGE": "Could not delete bot. Please try again." + } + }, + "EDIT": { + "BUTTON_TEXT": "Breyta", + "TITLE": "Edit bot", + "API": { + "SUCCESS_MESSAGE": "Bot updated successfully.", + "ERROR_MESSAGE": "Could not update bot. Please try again." + } + }, + "ACCESS_TOKEN": { + "TITLE": "Aðgangslykill", + "DESCRIPTION": "Copy the access token and save it securely", + "COPY_SUCCESSFUL": "Access token copied to clipboard", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "Bot name", + "PLACEHOLDER": "Enter bot name", + "REQUIRED": "Bot name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "What does this bot do?" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "Webhook URL is required" + }, + "ERRORS": { + "NAME": "Bot name is required", + "URL": "Webhook URL is required", + "VALID_URL": "Please enter a valid URL starting with http:// or https://" + }, + "CANCEL": "Hætta við", + "CREATE": "Create Bot", + "UPDATE": "Update Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them." + }, + "TYPES": { + "WEBHOOK": "Webhook bot" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/agentMgmt.json b/app/javascript/dashboard/i18n/locale/is/agentMgmt.json new file mode 100644 index 0000000..c782fa8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Þjónustufulltrúar", + "HEADER_BTN_TXT": "Bæta við þjónustufulltrúa", + "LOADING": "Sækja lista yfir þjónustufulltrúa", + "DESCRIPTION": "An agent is a member of your customer support team who can view and respond to user messages. The list below shows all the agents in your account.", + "LEARN_MORE": "Learn about user roles", + "AGENT_TYPES": { + "ADMINISTRATOR": "Stjórnandi", + "AGENT": "Þjónustufulltrúi" + }, + "LIST": { + "404": "Það eru engir þjónustufulltrúar tengdir við þennan reikning", + "TITLE": "Umsýsla þjónustufulltrúa í þínu teymi", + "DESC": "Þú getur bætt við/fjarlægt þjónustufulltrúa við/í liðinu þínu.", + "NAME": "Nafn", + "EMAIL": "NETFANG", + "STATUS": "Staða", + "ACTIONS": "Aðgerðir", + "VERIFIED": "Staðfest", + "VERIFICATION_PENDING": "Bíður staðfestingar", + "AVAILABLE_CUSTOM_ROLE": "Available custom role permissions" + }, + "ADD": { + "TITLE": "Bæta þjónustufulltrúa við teymið", + "DESC": "Þú getur bætt við fólki sem getur séð um þjónustu í innhólfinu þínu.", + "CANCEL_BUTTON_TEXT": "Hætta við", + "FORM": { + "NAME": { + "LABEL": "Nafn þjónustufulltrúa", + "PLACEHOLDER": "Vinsamlegast skrifið nafn þjónustufulltrúa" + }, + "AGENT_TYPE": { + "LABEL": "Hlutverk", + "PLACEHOLDER": "Vinsamlegast veljið hlutverk", + "ERROR": "Hlutverk vantar" + }, + "EMAIL": { + "LABEL": "Netfang", + "PLACEHOLDER": "Vinsamlegast skráið netfang þjónustufulltrúa" + }, + "SUBMIT": "Bæta við þjónustufulltrúa" + }, + "API": { + "SUCCESS_MESSAGE": "Þjónustufulltrúa bætt við", + "EXIST_MESSAGE": "Netfang þjónustufulltrúa nú þegar í notkun, vinsamlegast notið annað netfang", + "ERROR_MESSAGE": "Náði ekki að tengjast við netþjóna Woot, vinsamlegast reynið aftur" + } + }, + "DELETE": { + "BUTTON_TEXT": "Eyða", + "API": { + "SUCCESS_MESSAGE": "Þjónustufulltrúa eytt", + "ERROR_MESSAGE": "Náði ekki að tengjast við netþjóna Woot, vinsamlegast reynið aftur" + }, + "CONFIRM": { + "TITLE": "Staðfesta eyðingu", + "MESSAGE": "Ertu viss um að þú viljir eyða", + "YES": "Já, eyða", + "NO": "Nei, hætta við eyðingu" + } + }, + "EDIT": { + "TITLE": "Breyta þjónustufulltrúa", + "FORM": { + "NAME": { + "LABEL": "Nafn þjónustufulltrúa", + "PLACEHOLDER": "Vinsamlegast skrifið nafn þjónustufulltrúa" + }, + "AGENT_TYPE": { + "LABEL": "Hlutverk", + "PLACEHOLDER": "Vinsamlegast veljið hlutverk", + "ERROR": "Hlutverk vantar" + }, + "EMAIL": { + "LABEL": "Netfang", + "PLACEHOLDER": "Vinsamlegast skráið netfang þjónustufulltrúa" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Framboð", + "PLACEHOLDER": "Please select an availability status", + "ERROR": "Availability is required" + }, + "SUBMIT": "Breyta þjónustufulltrúa" + }, + "BUTTON_TEXT": "Breyta", + "CANCEL_BUTTON_TEXT": "Hætta við", + "API": { + "SUCCESS_MESSAGE": "Þjónustufulltrúa hefur verið breytt", + "ERROR_MESSAGE": "Náði ekki að tengjast við netþjóna Woot, vinsamlegast reynið aftur" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Endurstilla lykilorð", + "ADMIN_SUCCESS_MESSAGE": "Tölvupóstur með leiðbeiningum um endurstillingu lykilorðs hefur verið sendur til þjónustufulltrúa", + "SUCCESS_MESSAGE": "Lykilorð þjónustufulltrúa var endurstillt", + "ERROR_MESSAGE": "Náði ekki að tengjast við netþjóna Woot, vinsamlegast reynið aftur" + } + }, + "SEARCH": { + "NO_RESULTS": "Engar niðurstöður fundust." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "Engin", + "TITLE": { + "AGENT": "Velja þjónustufulltrúa", + "TEAM": "Velja teymi" + }, + "LIST": { + "NONE": "Enginn" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "Engir þjónustufulltrúar fundust", + "TEAM": "Ekkert teymi fannst" + }, + "PLACEHOLDER": { + "AGENT": "Leita að þjónustufulltrúum", + "TEAM": "Leita að teymum", + "INPUT": "Search for agents" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/is/attributesMgmt.json new file mode 100644 index 0000000..84f0837 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Custom Attributes", + "HEADER_BTN_TXT": "Add Custom Attribute", + "LOADING": "Fetching custom attributes", + "DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.", + "LEARN_MORE": "Learn more about custom attributes", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Text", + "NUMBER": "Number", + "LINK": "Link", + "DATE": "Date", + "LIST": "List", + "CHECKBOX": "Checkbox" + }, + "ADD": { + "TITLE": "Add Custom Attribute", + "SUBMIT": "Create", + "CANCEL_BUTTON_TEXT": "Hætta við", + "FORM": { + "NAME": { + "LABEL": "Display Name", + "PLACEHOLDER": "Enter custom attribute display name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Enter custom attribute description", + "ERROR": "Description is required" + }, + "MODEL": { + "LABEL": "Applies to", + "PLACEHOLDER": "Please select one", + "ERROR": "Model is required" + }, + "TYPE": { + "LABEL": "Type", + "PLACEHOLDER": "Please select a type", + "ERROR": "Type is required", + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter value and press enter key", + "ERROR": "Must have at least one value" + } + }, + "KEY": { + "LABEL": "Key", + "PLACEHOLDER": "Enter custom attribute key", + "ERROR": "Key is required", + "IN_VALID": "Invalid key" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute added successfully!", + "ERROR_MESSAGE": "Could not create a Custom Attribute. Please try again later." + } + }, + "DELETE": { + "BUTTON_TEXT": "Eyða", + "API": { + "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.", + "ERROR_MESSAGE": "Ekki tókst að eyða sérsniðnu eigindinni. Reyndu aftur." + }, + "CONFIRM": { + "TITLE": "Ertu viss um að þú viljir eyða - {attributeName}", + "PLACE_HOLDER": "Please type {attributeName} to confirm", + "MESSAGE": "Deleting will remove the custom attribute", + "YES": "Delete ", + "NO": "Hætta við" + } + }, + "EDIT": { + "TITLE": "Edit Custom Attribute", + "UPDATE_BUTTON_TEXT": "Uppfæra", + "TYPE": { + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter values and press enter key" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute updated successfully", + "ERROR_MESSAGE": "Villa kom upp við að uppfæra sérsniðna eiginleika, vinsamlegast reyndu aftur" + } + }, + "TABS": { + "HEADER": "Custom Attributes", + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nafn", + "DESCRIPTION": "Description", + "TYPE": "Type", + "KEY": "Key" + }, + "BUTTONS": { + "EDIT": "Breyta", + "DELETE": "Eyða" + }, + "EMPTY_RESULT": { + "404": "There are no custom attributes created", + "NOT_FOUND": "There are no custom attributes configured" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/auditLogs.json b/app/javascript/dashboard/i18n/locale/is/auditLogs.json new file mode 100644 index 0000000..d2d5371 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Aðgerðaskrá", + "HEADER_BTN_TXT": "Bæta við Aðgerðaskrá", + "LOADING": "Hleð Aðgerðaskrá", + "DESCRIPTION": "Audit Logs maintain a record of activities in your account, allowing you to track and audit your account, team, or services.", + "LEARN_MORE": "Learn more about audit logs", + "SEARCH_404": "Það eru engin atriði sem passa við þessa fyrirspurn", + "SIDEBAR_TXT": "Aðgerðaskrá
Aðgerðaskrá heldur utan um alla atburði og aðgerðir í Chatwoot.
", + "LIST": { + "404": "Það eru engar aðgerðaskrár tiltækar á þessum reikning.", + "TITLE": "Stjórna Aðgerðaskrám", + "DESC": "Aðgerðaskrár heldur utan um alla atburði og aðgerðir í Chatwoot.", + "TABLE_HEADER": { + "ACTIVITY": "Notandi", + "TIME": "Aðgerð", + "IP_ADDRESS": "IP tala" + } + }, + "API": { + "SUCCESS_MESSAGE": "Aðgerðaskrá sótt", + "ERROR_MESSAGE": "Náði ekki að tengjast við netþjóna Woot, vinsamlegast reynið aftur" + }, + "DEFAULT_USER": "System", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} invited {invitee} to the account as an {role}", + "EDIT": { + "SELF": "{agentName} changed their {attributes} to {values}", + "OTHER": "{agentName} changed {attributes} of {user} to {values}", + "DELETED": "{agentName} changed {attributes} of a deleted user to {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} signed in", + "SIGN_OUT": "{agentName} signed out" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} deleted conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/automation.json b/app/javascript/dashboard/i18n/locale/is/automation.json new file mode 100644 index 0000000..b183ba5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automation", + "DESCRIPTION": "Automation can replace and streamline existing processes that require manual effort, such as adding labels and assigning conversations to the most suitable agent. This allows the team to focus on their strengths while reducing time spent on routine tasks.", + "LEARN_MORE": "Learn more about automation", + "HEADER_BTN_TXT": "Add Automation Rule", + "LOADING": "Fetching automation rules", + "ADD": { + "TITLE": "Add Automation Rule", + "SUBMIT": "Create", + "CANCEL_BUTTON_TEXT": "Hætta við", + "FORM": { + "NAME": { + "LABEL": "Rule Name", + "PLACEHOLDER": "Enter rule name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Enter rule description", + "ERROR": "Description is required" + }, + "EVENT": { + "LABEL": "Event", + "PLACEHOLDER": "Please select one", + "ERROR": "Event is required" + }, + "CONDITIONS": { + "LABEL": "Conditions" + }, + "ACTIONS": { + "LABEL": "Aðgerðir" + } + }, + "CONDITION_BUTTON_LABEL": "Add Condition", + "ACTION_BUTTON_LABEL": "Add Action", + "API": { + "SUCCESS_MESSAGE": "Automation rule added successfully", + "ERROR_MESSAGE": "Gat ekki búið til sjálfvirknireglu. Reyndu aftur síðar" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nafn", + "DESCRIPTION": "Description", + "ACTIVE": "Active", + "CREATED_ON": "Created on" + }, + "404": "No automation rules found" + }, + "DELETE": { + "TITLE": "Delete Automation Rule", + "SUBMIT": "Eyða", + "CANCEL_BUTTON_TEXT": "Hætta við", + "CONFIRM": { + "TITLE": "Staðfesta eyðingu", + "MESSAGE": "Ertu viss um að þú viljir eyða", + "YES": "Já, eyða", + "NO": "Nei, hætta við eyðingu" + }, + "API": { + "SUCCESS_MESSAGE": "Automation rule deleted successfully", + "ERROR_MESSAGE": "Gat ekki eytt sjálfvirknireglu. Reyndu aftur síðar" + } + }, + "EDIT": { + "TITLE": "Edit Automation Rule", + "SUBMIT": "Uppfæra", + "CANCEL_BUTTON_TEXT": "Hætta við", + "API": { + "SUCCESS_MESSAGE": "Automation rule updated successfully", + "ERROR_MESSAGE": "Ekki tókst að uppfæra sjálfvirknireglu. Reyndu aftur síðar" + } + }, + "CLONE": { + "TOOLTIP": "Clone", + "API": { + "SUCCESS_MESSAGE": "Automation cloned successfully", + "ERROR_MESSAGE": "Ekki tókst að afrita sjálfvirknireglu, vinsamlegast reyndu aftur síðar" + } + }, + "FORM": { + "EDIT": "Breyta", + "CREATE": "Create", + "DELETE": "Eyða", + "CANCEL": "Hætta við", + "RESET_MESSAGE": "Að breyta gerð viðburðar mun endurstilla skilyrðin og viðburðina sem þú hefur bætt við hér að neðan" + }, + "CONDITION": { + "DELETE_MESSAGE": "Þú þarft að hafa að minnsta kosti eitt skilyrði til að vista", + "CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes" + }, + "ACTION": { + "DELETE_MESSAGE": "Þú þarft að hafa að minnsta kosti eina aðgerð til að vista", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Enter your message here", + "TEAM_DROPDOWN_PLACEHOLDER": "Select teams", + "EMAIL_INPUT_PLACEHOLDER": "Enter email", + "URL_INPUT_PLACEHOLDER": "Enter URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Activate Automation Rule", + "DEACTIVATION_TITLE": "Deactivate Automation Rule", + "ACTIVATION_DESCRIPTION": "Þessi aðgerð mun virkja sjálfvirkniregluna '{automationName}'. Ertu viss um að þú viljir halda áfram?", + "DEACTIVATION_DESCRIPTION": "Þessi aðgerð mun slökkva á sjálfvirknireglunni '{automationName}'. Ertu viss um að þú viljir halda áfram?", + "ACTIVATION_SUCCESFUL": "Automation Rule Activated Successfully", + "DEACTIVATION_SUCCESFUL": "Automation Rule Deactivated Successfully", + "ACTIVATION_ERROR": "Gat ekki virkjað sjálfvirkni, vinsamlegast reyndu aftur síðar", + "DEACTIVATION_ERROR": "Gat ekki slökkt á sjálfvirkni, vinsamlegast reyndu aftur síðar", + "CONFIRMATION_LABEL": "Já", + "CANCEL_LABEL": "Nei" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Gat ekki hlaðið upp viðhengi, vinsamlegast reyndu aftur", + "LABEL_IDLE": "Upload Attachment", + "LABEL_UPLOADING": "Hleður upp...", + "LABEL_UPLOADED": "Successfully Uploaded", + "LABEL_UPLOAD_FAILED": "Upload Failed" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Value is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "NONE_OPTION": "Enginn", + "EVENTS": { + "CONVERSATION_CREATED": "Conversation Created", + "CONVERSATION_UPDATED": "Conversation Updated", + "MESSAGE_CREATED": "Message Created", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Conversation Opened" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assign to Agent", + "ASSIGN_TEAM": "Assign a Team", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "SEND_EMAIL_TO_TEAM": "Send an Email to Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Þagga Samtal", + "SNOOZE_CONVERSATION": "Fresta Samtali", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_WEBHOOK_EVENT": "Send Webhook Event", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "CHANGE_PRIORITY": "Change Priority", + "ADD_SLA": "Add SLA", + "OPEN_CONVERSATION": "Opna samtal" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "Enginn", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Message Type", + "MESSAGE_CONTAINS": "Message Contains", + "EMAIL": "Tölvupóstfang", + "INBOX": "Innhólf", + "CONVERSATION_LANGUAGE": "Conversation Language", + "PHONE_NUMBER": "Símanúmer", + "STATUS": "Staða", + "BROWSER_LANGUAGE": "Tungumál Vafra", + "MAIL_SUBJECT": "Email Subject", + "COUNTRY_NAME": "Land", + "REFERER_LINK": "Referrer Link", + "ASSIGNEE_NAME": "Assignee", + "TEAM_NAME": "Team", + "PRIORITY": "Priority", + "LABELS": "Labels" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/bulkActions.json b/app/javascript/dashboard/i18n/locale/is/bulkActions.json new file mode 100644 index 0000000..91c4458 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} samtöl valin", + "AGENT_SELECT_LABEL": "Velja þjónustufulltrúa", + "ASSIGN_CONFIRMATION_LABEL": "Ertu viss um að úthluta {conversationCount} {conversationLabel} á", + "UNASSIGN_CONFIRMATION_LABEL": "Ertu viss um að hætta við úthlutun {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Go back", + "ASSIGN_LABEL": "Úthluta", + "YES": "Já", + "SEARCH_INPUT_PLACEHOLDER": "Leit", + "ASSIGN_AGENT_TOOLTIP": "Assign agent", + "ASSIGN_TEAM_TOOLTIP": "Assign team", + "ASSIGN_SUCCESFUL": "Conversations assigned successfully.", + "ASSIGN_FAILED": "Failed to assign conversations. Please try again.", + "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", + "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Samtöl sem sjást á þessari síðu eru aðeins valin.", + "AGENT_LIST_LOADING": "Loading agents", + "UPDATE": { + "CHANGE_STATUS": "Change status", + "SNOOZE_UNTIL": "Snooze", + "UPDATE_SUCCESFUL": "Conversation status updated successfully.", + "UPDATE_FAILED": "Failed to update conversations. Please try again." + }, + "LABELS": { + "ASSIGN_LABELS": "Assign labels", + "NO_LABELS_FOUND": "Engar merkingar fundust", + "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "ASSIGN_SUCCESFUL": "Labels assigned successfully.", + "ASSIGN_FAILED": "Failed to assign labels. Please try again." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Velja teymi", + "NONE": "Enginn", + "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", + "ASSIGN_SELECTED_TEAMS": "Assign selected team.", + "ASSIGN_SUCCESFUL": "Teams assigned successfully.", + "ASSIGN_FAILED": "Failed to assign team. Please try again." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/campaign.json b/app/javascript/dashboard/i18n/locale/is/campaign.json new file mode 100644 index 0000000..0b3d92d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "Virkt", + "DISABLED": "Slökkt" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Sent af", + "BOT": "Bot", + "FROM": "frá", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "Hætta við", + "CREATE_BUTTON_TEXT": "Stofna", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Skilaboð", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "SENT_BY": { + "LABEL": "Sent af", + "PLACEHOLDER": "Please select sender", + "ERROR": "Sender is required" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Please enter the URL", + "ERROR": "Vinsamlega skráðu gilt URL" + }, + "TIME_ON_PAGE": { + "LABEL": "Time on page(Seconds)", + "PLACEHOLDER": "Please enter the time", + "ERROR": "Time on page is required" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "Enable campaign", + "TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours" + }, + "BUTTONS": { + "CREATE": "Stofna", + "CANCEL": "Hætta við" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "Hætta við", + "CREATE_BUTTON_TEXT": "Stofna", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Skilaboð", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Stofna", + "CANCEL": "Hætta við" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No WhatsApp campaigns are available", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "Hætta við", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "Process {templateName}", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLES_LABEL": "Variables", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Hætta við" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Are you sure to delete?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "Eyða", + "API": { + "SUCCESS_MESSAGE": "Campaign deleted successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/is/cannedMgmt.json new file mode 100644 index 0000000..10a215c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Stöðluð svör", + "LEARN_MORE": "Learn more about canned responses", + "DESCRIPTION": "Canned Responses are pre-written reply templates that help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a canned response during a conversation. ", + "HEADER_BTN_TXT": "Add canned response", + "LOADING": "Fetching canned responses...", + "SEARCH_404": "Það eru engin atriði sem passa við þessa fyrirspurn.", + "LIST": { + "404": "Það eru engin stöðluð svör aðgengileg á þessum reikning.", + "TITLE": "Stjórna stöðluðum svörum", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "TABLE_HEADER": { + "SHORT_CODE": "Short code", + "CONTENT": "Efnistexti", + "ACTIONS": "Aðgerðir" + } + }, + "ADD": { + "TITLE": "Add canned response", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "CANCEL_BUTTON_TEXT": "Hætta við", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a short code.", + "ERROR": "Short Code is required." + }, + "CONTENT": { + "LABEL": "Skilaboð", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "Senda" + }, + "API": { + "SUCCESS_MESSAGE": "Canned response added successfully.", + "ERROR_MESSAGE": "Náði ekki að tengjast við netþjóna Woot, vinsamlegast reynið aftur" + } + }, + "EDIT": { + "TITLE": "Edit canned response", + "CANCEL_BUTTON_TEXT": "Hætta við", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a shortcode.", + "ERROR": "Short code is required." + }, + "CONTENT": { + "LABEL": "Skilaboð", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "Senda" + }, + "BUTTON_TEXT": "Breyta", + "API": { + "SUCCESS_MESSAGE": "Canned response is updated successfully.", + "ERROR_MESSAGE": "Náði ekki að tengjast við netþjóna Woot, vinsamlegast reynið aftur" + } + }, + "DELETE": { + "BUTTON_TEXT": "Eyða", + "API": { + "SUCCESS_MESSAGE": "Canned response deleted successfully.", + "ERROR_MESSAGE": "Náði ekki að tengjast við netþjóna Woot, vinsamlegast reynið aftur" + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Ertu viss um að þú viljir eyða", + "YES": "Yes, delete ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/chatlist.json b/app/javascript/dashboard/i18n/locale/is/chatlist.json new file mode 100644 index 0000000..44ec158 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Sæki samtöl", + "LOAD_MORE_CONVERSATIONS": "Sækja fleiri spjöll", + "EOF": "Öll spjöll eru hlaðin🎉", + "LIST": { + "404": "Það eru engin virk spjöll í þessum hóp." + }, + "FAILED_TO_SEND": "Failed to send", + "TAB_HEADING": "Samtöl", + "MENTION_HEADING": "Mentions", + "UNATTENDED_HEADING": "Unattended", + "SEARCH": { + "INPUT": "Leita að Fólki, Spjöllum, Vistuðum Svörum .." + }, + "FILTER_ALL": "Allt", + "ASSIGNEE_TYPE_TABS": { + "me": "Mitt", + "unassigned": "Óúthlutað", + "all": "Allt" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Opin" + }, + "resolved": { + "TEXT": "Leyst" + }, + "pending": { + "TEXT": "Í bið" + }, + "snoozed": { + "TEXT": "Blundað" + }, + "all": { + "TEXT": "Allt" + } + }, + "VIEW_FILTER": "Skoða", + "SORT_TOOLTIP_LABEL": "Sort conversations", + "CHAT_SORT": { + "STATUS": "Staða", + "ORDER_BY": "Order by" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Skráð", + "OLDEST": "Created at:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Last activity:", + "ACTIVE": "Last activity" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Last activity: Oldest first" + }, + "last_activity_at_desc": { + "TEXT": "Last activity: Newest first" + }, + "created_at_desc": { + "TEXT": "Created at: Newest first" + }, + "created_at_asc": { + "TEXT": "Created at: Oldest first" + }, + "priority_desc": { + "TEXT": "Priority: Highest first" + }, + "priority_asc": { + "TEXT": "Priority: Lowest first" + }, + "waiting_since_asc": { + "TEXT": "Pending Response: Longest first" + }, + "waiting_since_desc": { + "TEXT": "Pending Response: Shortest first" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Myndaskilaboð" + }, + "audio": { + "CONTENT": "Hljóðskilaboð" + }, + "video": { + "CONTENT": "Myndbandsskilaboð" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Staðsetning" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "hefur deilt vefslóð" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Sort conversation", + "DROPDOWN_TITLE": "Sort by", + "ITEMS": { + "LATEST": { + "NAME": "Last activity at", + "LABEL": "Last activity" + }, + "CREATED_AT": { + "NAME": "Created at", + "LABEL": "Created at" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Last user message at", + "LABEL": "Last message" + } + } + }, + "RECEIVED_VIA_EMAIL": "Móttekið í tölvupósti", + "VIEW_TWEET_IN_TWITTER": "Opna tíst á Twitter", + "REPLY_TO_TWEET": "Svara þessu tísti", + "LINK_TO_STORY": "Opna instagram sögu", + "SENT": "Sent", + "READ": "Lesið", + "DELIVERED": "Afhent", + "NO_MESSAGES": "Engin skilaboð", + "NO_CONTENT": "Ekkert efni fannst", + "HIDE_QUOTED_TEXT": "Fela tilvitnaðan texta", + "SHOW_QUOTED_TEXT": "Sýna tilvitnaðan texta", + "MESSAGE_READ": "Lesið", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/companies.json b/app/javascript/dashboard/i18n/locale/is/companies.json new file mode 100644 index 0000000..c38b7d2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "Nafn", + "DOMAIN": "Lén", + "CREATED_AT": "Created at", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/components.json b/app/javascript/dashboard/i18n/locale/is/components.json new file mode 100644 index 0000000..d3c75b1 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} of {totalPages} pages" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "Engar niðurstöður fundust.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} more" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "Engar niðurstöður fundust.", + "SEARCHING": "Searching..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Hætta við", + "CONFIRM": "Confirm" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Search country", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Vinsamlegast veldu landsnúmer úr listanum" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Author is not available" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Læra meira", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/contact.json b/app/javascript/dashboard/i18n/locale/is/contact.json new file mode 100644 index 0000000..6cca350 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Ekki í boði", + "EMAIL_ADDRESS": "Netfang", + "PHONE_NUMBER": "Símanúmer", + "IDENTIFIER": "Einkenni", + "COPY_SUCCESSFUL": "Afritað á klemmuspjald", + "COMPANY": "Fyrirtæki", + "LOCATION": "Staðsetning", + "BROWSER_LANGUAGE": "Tungumál Vafra", + "CONVERSATION_TITLE": "Nánari upplýsingar samtals", + "VIEW_PROFILE": "Skoða prófíl", + "BROWSER": "Vafri", + "OS": "Stýrikerfi", + "INITIATED_FROM": "Hafið frá", + "INITIATED_AT": "Hafið", + "IP_ADDRESS": "IP tala", + "CREATED_AT_LABEL": "Skráð", + "NEW_MESSAGE": "Ný skilaboð", + "CALL": "Call", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "Engin fyrri samtöl eru tengd þessum tengilið.", + "TITLE": "Fyrri samtöl" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Merkingar Tengiliða", + "ERROR": "Tókst ekki að uppfæra merkingar" + }, + "CONVERSATION": { + "TITLE": "Merkingar Samtala", + "ADD_BUTTON": "Bæta við Merkingum" + }, + "LABEL_SELECT": { + "TITLE": "Bæta við Merkingum", + "PLACEHOLDER": "Leita að merkingum", + "NO_RESULT": "Engar merkingar fundust", + "CREATE_LABEL": "Create new label" + } + }, + "MERGE_CONTACT": "Sameina tengilið", + "CONTACT_ACTIONS": "Aðgerðir tengiliðs", + "MUTE_CONTACT": "Block Contact", + "UNMUTE_CONTACT": "Unblock Contact", + "MUTED_SUCCESS": "This contact is blocked successfully. You will not be notified of any future conversations.", + "UNMUTED_SUCCESS": "This contact is unblocked successfully.", + "SEND_TRANSCRIPT": "Senda Afrit", + "EDIT_LABEL": "Breyta", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Sérsniðnir Eiginleikar", + "CONTACT_LABELS": "Merkingar Tengiliða", + "PREVIOUS_CONVERSATIONS": "Fyrri samtöl", + "NO_RECORDS_FOUND": "Engir eiginleikar fundust" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Breyta tengilið", + "TITLE": "Breyta tengilið", + "DESC": "Breyta smáatriðum tengiliðs" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Eyða tengilið", + "TITLE": "Eyða tengilið", + "DESC": "Eyða smáatriðum tengiliðs", + "CONFIRM": { + "TITLE": "Staðfesta eyðingu", + "MESSAGE": "Ertu viss um að þú viljir eyða", + "YES": "Já, eyða", + "NO": "Nei, hætta við eyðingu" + }, + "API": { + "SUCCESS_MESSAGE": "Tengilið eytt", + "ERROR_MESSAGE": "Gat ekki eytt tengilið. Vinsamlegast reyndu aftur síðar." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Senda", + "CANCEL": "Hætta við", + "AVATAR": { + "LABEL": "Mynd tengiliðs" + }, + "NAME": { + "PLACEHOLDER": "Sláðu inn fullt nafn tengiliðsins", + "LABEL": "Fullt nafn" + }, + "BIO": { + "PLACEHOLDER": "Sláðu inn sögu tengiliðs", + "LABEL": "Saga" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Sláðu inn netfang tengiliðs", + "LABEL": "Netfang", + "DUPLICATE": "Þetta netfang er í notkun fyrir annan tengilið.", + "ERROR": "Vinsamlegast sláðu inn gilt netfang." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Sláðu inn símanúmer tengiliðs", + "LABEL": "Símanúmer", + "HELP": "Símanúmer ætti að vera á E.164 sniði, td: +3541234567 [+][landsnúmer][svæðisnúmer][staðbundið símanúmer]", + "ERROR": "Símanúmer ætti að vera annað hvort autt eða á E.164 sniði", + "DIAL_CODE_ERROR": "Vinsamlegast veldu landsnúmer úr listanum", + "DUPLICATE": "Þetta símanúmer er í notkun fyrir annan tengilið." + }, + "LOCATION": { + "PLACEHOLDER": "Sláðu staðsetningu tengiliðs", + "LABEL": "Staðsetning" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Sláðu inn nafn fyrirtækis", + "LABEL": "Nafn fyrirtækis" + }, + "COUNTRY": { + "PLACEHOLDER": "Sláðu inn nafn lands", + "LABEL": "Nafn lands", + "SELECT_PLACEHOLDER": "Velja", + "REMOVE": "Fjarlægja", + "SELECT_COUNTRY": "Veldu land" + }, + "CITY": { + "PLACEHOLDER": "Sláðu inn nafn borgar", + "LABEL": "Nafn borgar" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Sláðu inn Facebook notandanafn", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Sláðu inn Twitter notandanafn", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Sláðu inn LinkedIn notandanafn", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Sláðu inn Github notandanafn", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Notandamynd tengiliðs eytt", + "ERROR_MESSAGE": "Gat ekki eytt notandamynd tengiliða. Vinsamlegast reyndu aftur síðar." + } + }, + "SUCCESS_MESSAGE": "Tengiliðurinn var vistaður", + "ERROR_MESSAGE": "Það kom upp villa, vinsamlegast reyndu aftur" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Hefja samtal", + "TITLE": "Nýtt samtal", + "DESC": "Byrjaðu nýtt samtal með því að senda ný skilaboð.", + "NO_INBOX": "Gat ekki fundið innhólf til að hefja nýtt samtal við þennan tengilið.", + "FORM": { + "TO": { + "LABEL": "Til" + }, + "INBOX": { + "LABEL": "Inbox", + "PLACEHOLDER": "Choose source inbox", + "ERROR": "Veldu innhólf" + }, + "SUBJECT": { + "LABEL": "Viðfangsefni", + "PLACEHOLDER": "Viðfangsefni", + "ERROR": "Viðfangsefni má ekki vera tómt" + }, + "MESSAGE": { + "LABEL": "Skilaboð", + "PLACEHOLDER": "Skrifaðu skilaboðin þín hér", + "ERROR": "Skilaboð mega ekki vera tóm" + }, + "ATTACHMENTS": { + "SELECT": "Choose files", + "HELP_TEXT": "Drag and drop files here or choose files to attach" + }, + "SUBMIT": "Senda skilaboð", + "CANCEL": "Hætta við", + "SUCCESS_MESSAGE": "Skilaboð send!", + "GO_TO_CONVERSATION": "Skoða", + "ERROR_MESSAGE": "Gat ekki sent! Reyndu aftur" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Social Profiles" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Bæta við sérsniðnum eiginleika", + "COPY_SUCCESSFUL": "Afritað á klemmuspjald", + "SHOW_MORE": "Show all attributes", + "SHOW_LESS": "Show less attributes", + "ACTIONS": { + "COPY": "Afrita eiginleika", + "DELETE": "Eyða eiginleika", + "EDIT": "Breyta eiginleika" + }, + "ADD": { + "TITLE": "Búa til sérsniðin eiginleika", + "DESC": "Bæta sérsniðnum eiginleika á þennan tengilið." + }, + "FORM": { + "CREATE": "Bæta við eiginleika", + "CANCEL": "Hætta við", + "NAME": { + "LABEL": "Nafn sérsniðins eiginleika", + "PLACEHOLDER": "T.d. shopify id", + "ERROR": "Ógilt nafn sérsniðins eiginleika" + }, + "VALUE": { + "LABEL": "Gildi eiginleika", + "PLACEHOLDER": "T.d. 11901" + }, + "ADD": { + "TITLE": "Skrá nýjan eiginleika ", + "SUCCESS": "Eiginleika bætt við", + "ERROR": "Ekki er hægt að bæta við eigindi. Vinsamlegast reyndu aftur síðar" + }, + "UPDATE": { + "SUCCESS": "Eiginleika breytt", + "ERROR": "Ekki er hægt að uppfæra eigindina. Vinsamlegast reyndu aftur síðar" + }, + "DELETE": { + "SUCCESS": "Eiginleika eytt", + "ERROR": "Ekki er hægt að eyða eigindinni. Vinsamlegast reyndu aftur síðar" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Bæta við eiginleikum", + "PLACEHOLDER": "Leita í eiginleikum", + "NO_RESULT": "Engir eiginleikar fundust" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Veldu gildi", + "SEARCH_INPUT_PLACEHOLDER": "Leita að gildi", + "NO_RESULT": "Engar niðurstöður fundust" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Það þarf að slá inn gilt gildi", + "INVALID_URL": "Ógilt URL", + "INVALID_INPUT": "Invalid Input" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Sameina tengiliði", + "DESCRIPTION": "Sameina tengiliði til að sameina tvo prófíla í einn, þar á meðal alla eiginleika og samtöl. Ef til árekstra kemur munu eiginleikar aðaltengiliðs hafa forgang.", + "PRIMARY": { + "TITLE": "Aðaltengiliður", + "HELP_LABEL": "Eyða" + }, + "PARENT": { + "TITLE": "Tengiliður til að sameina", + "PLACEHOLDER": "Leita að tengilið", + "HELP_LABEL": "Halda eftir" + }, + "SUMMARY": { + "TITLE": "Samantekt", + "DELETE_WARNING": "Tengilið {primaryContactName} verður eytt.", + "ATTRIBUTE_WARNING": "Samskiptaupplýsingar {primaryContactName} verða afritaðar á {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": " Sameina tengiliði", + "CANCEL": "Hætta við", + "CHILD_CONTACT": { + "ERROR": "Veldu undir-tengilið til að sameina" + }, + "SUCCESS_MESSAGE": "Tengiliður sameinaður", + "ERROR_MESSAGE": "Tókst ekki að sameina tengiliði, reyndu aftur!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Tengiliðir", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "Active contacts", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "Skilaboð", + "SEND_MESSAGE": "Senda skilaboð", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "Tengiliðir" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Add contact", + "EXPORT_CONTACT": "Export contacts", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Save contact", + "EMAIL_ADDRESS_DUPLICATE": "Þetta netfang er í notkun fyrir annan tengilið.", + "PHONE_NUMBER_DUPLICATE": "Þetta símanúmer er í notkun fyrir annan tengilið.", + "SUCCESS_MESSAGE": "Tengiliðurinn var vistaður", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "This contact is unblocked successfully", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Import contacts", + "DESCRIPTION": "Hlaða inn tengiliðum með CSV skrá.", + "DOWNLOAD_LABEL": "Sækja csv sýnishorn.", + "LABEL": "CSV skrá:", + "CHOOSE_FILE": "Choose file", + "CHANGE": "Breyta", + "CANCEL": "Hætta við", + "IMPORT": "Hlaða inn", + "SUCCESS_MESSAGE": "You will be notified via email when the import is complete.", + "ERROR_MESSAGE": "Það kom upp villa, vinsamlegast reyndu aftur" + }, + "EXPORT_CONTACT": { + "TITLE": "Export contacts", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Export", + "SUCCESS_MESSAGE": "Export is in progress, You will be notified via email when export file is ready to dowanlod.", + "ERROR_MESSAGE": "Það kom upp villa, vinsamlegast reyndu aftur" + }, + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "Nafn", + "EMAIL": "Tölvupóstfang", + "PHONE_NUMBER": "Símanúmer", + "COMPANY": "Fyrirtæki", + "COUNTRY": "Land", + "CITY": "Borg", + "LAST_ACTIVITY": "Last activity", + "CREATED_AT": "Created at" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Do you want to save this filter?", + "CONFIRM": "Vista síu", + "LABEL": "Nafn", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "Staðfesta eyðingu", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "Já, eyða", + "CANCEL": "No, Cancel", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "Nafn", + "EMAIL": "Tölvupóstfang", + "PHONE_NUMBER": "Símanúmer", + "IDENTIFIER": "Einkenni", + "COUNTRY": "Land", + "CITY": "Borg", + "CREATED_AT": "Created at", + "LAST_ACTIVITY": "Last activity", + "REFERER_LINK": "Referer link", + "BLOCKED": "Blocked", + "BLOCKED_TRUE": "True", + "BLOCKED_FALSE": "False", + "BUTTONS": { + "CLEAR_FILTERS": "Clear filters", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "Apply filters", + "ADD_FILTER": "Add filter" + }, + "TITLE": "Filter contacts", + "EDIT_SEGMENT": "Edit segment", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Clear filters" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "Sjá smáatriði", + "EDIT_DETAILS_FORM": { + "TITLE": "Breyta smáatriðum tengiliðs", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "Þetta netfang er í notkun fyrir annan tengilið." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "Þetta símanúmer er í notkun fyrir annan tengilið." + }, + "CITY": { + "PLACEHOLDER": "Sláðu inn nafn borgar" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Sláðu inn nafn fyrirtækis" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "This action is permanent and irreversible.", + "BUTTON": "Delete now" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "Eyða tengilið", + "DELETE_DIALOG": { + "TITLE": "Staðfesta eyðingu", + "DESCRIPTION": "Are you sure you want to delete this contact?", + "CONFIRM": "Já, eyða", + "API": { + "SUCCESS_MESSAGE": "Tengilið eytt", + "ERROR_MESSAGE": "Gat ekki eytt tengilið. Vinsamlegast reyndu aftur síðar." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Vefsíðumynd eytt", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributes", + "HISTORY": "History", + "NOTES": "Athugasemdir", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "Engin fyrri samtöl eru tengd þessum tengilið" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "Já", + "NO": "Nei", + "TRIGGER": { + "SELECT": "Veldu gildi", + "INPUT": "Enter value" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "Það þarf að slá inn gilt gildi", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "Ógilt URL", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "Engir eiginleikar fundust", + "API": { + "SUCCESS_MESSAGE": "Eiginleika breytt", + "DELETE_SUCCESS_MESSAGE": "Eiginleika eytt", + "UPDATE_ERROR": "Ekki er hægt að uppfæra eigindina. Vinsamlegast reyndu aftur síðar", + "DELETE_ERROR": "Ekki er hægt að eyða eigindinni. Vinsamlegast reyndu aftur síðar" + } + }, + "MERGE": { + "TITLE": "Sameina tengilið", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Aðaltengiliður", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "Eyða", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Leita að tengilið", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Tengiliður sameinaður", + "ERROR_MESSAGE": "Tókst ekki að sameina tengiliði, reyndu aftur!", + "IS_SEARCHING": "Searching...", + "BUTTONS": { + "CANCEL": "Hætta við", + "CONFIRM": "Sameina tengilið" + } + }, + "NOTES": { + "PLACEHOLDER": "Bæta við athugasemd", + "WROTE": "wrote", + "YOU": "You", + "SAVE": "Save note", + "ADD_NOTE": "Add contact note", + "EXPAND": "Expand", + "COLLAPSE": "Collapse", + "NO_NOTES": "No notes, you can add notes from the contact details page.", + "EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "No contacts found in this account", + "SUBTITLE": "Start adding new contacts by clicking on the button below", + "BUTTON_LABEL": "Add contact", + "SEARCH_EMPTY_STATE_TITLE": "Engir tengiliðir fundust", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Assign Labels", + "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "Eyða", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Eyða tengilið" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "Skoða", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "Til:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Viðfangsefni :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "Bcc:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "Bcc" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Skrifaðu skilaboðin þín hér..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Variables", + "BACK": "Go back", + "SEND_MESSAGE": "Senda skilaboð" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Go back", + "SEND_MESSAGE": "Senda skilaboð" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/contactFilters.json b/app/javascript/dashboard/i18n/locale/is/contactFilters.json new file mode 100644 index 0000000..3231afa --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filter Contacts", + "SUBTITLE": "Bættu við síum fyrir neðan og smelltu á 'Senda' til að sía tengiliði.", + "EDIT_CUSTOM_SEGMENT": "Edit Segment", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your segment.", + "ADD_NEW_FILTER": "Add Filter", + "CLEAR_ALL_FILTERS": "Clear All Filters", + "FILTER_DELETE_ERROR": "Þú ættir að hafa að minnsta kosti eina síu til að vista", + "SUBMIT_BUTTON_LABEL": "Senda", + "UPDATE_BUTTON_LABEL": "Update Segment", + "CANCEL_BUTTON_LABEL": "Hætta við", + "CLEAR_BUTTON_LABEL": "Clear Filters", + "EMPTY_VALUE_ERROR": "Value is required", + "SEGMENT_LABEL": "Segment Name", + "SEGMENT_QUERY_LABEL": "Segment Query", + "TOOLTIP_LABEL": "Filter contacts", + "QUERY_DROPDOWN_LABELS": { + "AND": "AND", + "OR": "OR" + }, + "OPERATOR_LABELS": { + "equal_to": "Equal to", + "not_equal_to": "Not equal to", + "contains": "Contains", + "does_not_contain": "Does not contain", + "is_present": "Is present", + "is_not_present": "Is not present", + "is_greater_than": "Is greater than", + "is_lesser_than": "Is lesser than", + "days_before": "Is x days before" + }, + "ERRORS": { + "VALUE_REQUIRED": "Value is required" + }, + "ATTRIBUTES": { + "NAME": "Nafn", + "EMAIL": "Tölvupóstfang", + "PHONE_NUMBER": "Símanúmer", + "IDENTIFIER": "Identifier", + "CITY": "Borg", + "COUNTRY": "Land", + "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_TEXT": "Text", + "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Created At", + "LAST_ACTIVITY": "Seinasta virkni", + "REFERER_LINK": "Referrer link", + "BLOCKED": "Blocked", + "LABELS": "Labels" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard Filters", + "ADDITIONAL_FILTERS": "Additional Filters", + "CUSTOM_ATTRIBUTES": "Custom Attributes" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/contentTemplates.json b/app/javascript/dashboard/i18n/locale/is/contentTemplates.json new file mode 100644 index 0000000..1385054 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "NO_CONTENT": "No content", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Text" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Til baka", + "SEND_MESSAGE_BUTTON": "Send Message" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/conversation.json b/app/javascript/dashboard/i18n/locale/is/conversation.json new file mode 100644 index 0000000..3f42732 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Vinsamlegast veldu samtal úr vinstri glugganum", + "CSAT_REPLY_MESSAGE": "Vinsamlegast gefðu samtalinu einkun", + "404": "Því miður finnum við ekki samtalið. Vinsamlegast reyndu aftur", + "SWITCH_VIEW_LAYOUT": "Breyta uppsetningu", + "DASHBOARD_APP_TAB_MESSAGES": "Skilaboð", + "UNVERIFIED_SESSION": "Það er ekki búið að staðfesta einkenni þessa notanda", + "NO_MESSAGE_1": "Uh ó! Svo virðist sem engin skilaboð séu frá viðskiptavinum í innhólfinu þínu.", + "NO_MESSAGE_2": " til að senda skilaboð á síðuna þína!", + "NO_INBOX_1": "Halló! Svo virðist sem þú hafir ekki bætt við neinum innhólfum ennþá.", + "NO_INBOX_2": " til að byrja", + "NO_INBOX_AGENT": "Uh Ó! Þú virðist ekki vera hluti af neinu innhólfi. Vinsamlegast hafðu samband við kerfisstjóra", + "SEARCH_MESSAGES": "Leita að skilaboðum í samtölum", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "to open command menu", + "KEYBOARD_SHORTCUTS": "to view keyboard shortcuts" + }, + "SEARCH": { + "TITLE": "Leita í skilaboðum", + "RESULT_TITLE": "Leitarniðurstöður", + "LOADING_MESSAGE": "Vinn úr gögnum...", + "PLACEHOLDER": "Sláðu inn texta til að leita í skilaboðum", + "NO_MATCHING_RESULTS": "Engar niðurstöður fundust." + }, + "UNREAD_MESSAGES": "Ólesin skilaboð", + "UNREAD_MESSAGE": "Ólesið skilaboð", + "CLICK_HERE": "Smelltu hér", + "LOADING_INBOXES": "Hleð innhólfum", + "LOADING_CONVERSATIONS": "Loading Conversations", + "CANNOT_REPLY": "You cannot reply due to", + "24_HOURS_WINDOW": "24 hour message window restriction", + "48_HOURS_WINDOW": "48 hour message window restriction", + "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours", + "NOT_ASSIGNED_TO_YOU": "Þetta samtal er ekki úthlutað á þig. Viltu úthluta þessu samtali á þig?", + "ASSIGN_TO_ME": "Úthluta á mig", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "Þú getur aðeins svarað þessu samtali með því að nota sniðmátskilaboð vegna þess að", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hour message window restriction", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "You are replying to:", + "REMOVE_SELECTION": "Remove Selection", + "DOWNLOAD": "Sækja", + "UNKNOWN_FILE_TYPE": "Óþekkt skrá", + "SAVE_CONTACT": "Save Contact", + "NO_CONTENT": "No content to display", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} has shared a contact", + "LOCATION": "{sender} has shared a location", + "FILE": "{sender} has shared a file", + "MEETING": "{sender} has started a meeting" + }, + "UPLOADING_ATTACHMENTS": "Hleður upp viðhengi...", + "REPLIED_TO_STORY": "Replied to your story", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", + "SUCCESS_DELETE_MESSAGE": "Skilaboðum eytt", + "FAIL_DELETE_MESSSAGE": "Gat ekki eytt skilaboðum! Reynið aftur", + "NO_RESPONSE": "Ekkert svar", + "RESPONSE": "Response", + "RATING_TITLE": "Rating", + "FEEDBACK_TITLE": "Endurgjöf", + "REPLY_MESSAGE_NOT_FOUND": "Message not available", + "CARD": { + "SHOW_LABELS": "Show labels", + "HIDE_LABELS": "Hide labels" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "Resolve", + "REOPEN_ACTION": "Reopen", + "OPEN_ACTION": "Open", + "MORE_ACTIONS": "More actions", + "OPEN": "More", + "CLOSE": "Close", + "DETAILS": "details", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", + "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "missed", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Mark as pending", + "SNOOZE_UNTIL": "Snooze", + "SNOOZE": { + "TITLE": "Snooze until", + "NEXT_REPLY": "Next reply", + "TOMORROW": "Tomorrow", + "NEXT_WEEK": "Next week" + } + }, + "MENTION": { + "AGENTS": "Þjónustufulltrúar", + "TEAMS": "Teams" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Snooze until", + "APPLY": "Snooze", + "CANCEL": "Hætta við" + }, + "PRIORITY": { + "TITLE": "Priority", + "OPTIONS": { + "NONE": "Enginn", + "URGENT": "Urgent", + "HIGH": "High", + "MEDIUM": "Medium", + "LOW": "Low" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "Enginn", + "INPUT_PLACEHOLDER": "Select priority", + "NO_RESULTS": "Engar niðurstöður fundust", + "SUCCESSFUL": "Changed priority of conversation id {conversationId} to {priority}", + "FAILED": "Couldn't change priority. Please try again." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Delete conversation #{conversationId}", + "DESCRIPTION": "Are you sure you want to delete this conversation?", + "CONFIRM": "Eyða" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Mark as pending", + "RESOLVED": "Mark as resolved", + "MARK_AS_UNREAD": "Mark as unread", + "MARK_AS_READ": "Mark as read", + "REOPEN": "Enduropna samtal", + "SNOOZE": { + "TITLE": "Snooze", + "NEXT_REPLY": "Þar til að næsta svar berst", + "TOMORROW": "Þar til á morgun", + "NEXT_WEEK": "Þar til í næstu viku" + }, + "ASSIGN_AGENT": "Assign agent", + "ASSIGN_LABEL": "Assign label", + "AGENTS_LOADING": "Loading agents...", + "ASSIGN_TEAM": "Assign team", + "DELETE": "Delete conversation", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Samtalsauðkenni {conversationId} úthlutað á „{agentName}“", + "FAILED": "Couldn't assign agent. Please try again." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Couldn't assign label. Please try again." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Úthlutaði teymi #{team} á samtalsauðkenni {conversationId}", + "FAILED": "Couldn't assign team. Please try again." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Message signature", + "ENABLE_SIGN_TOOLTIP": "Enable signature", + "DISABLE_SIGN_TOOLTIP": "Disable signature", + "MSG_INPUT": "Shift + enter fyrir nýja línu. Byrjaðu á '/' til að velja tilbúið svar.", + "PRIVATE_MSG_INPUT": "Shift + enter fyrir nýja línu. Þetta verður aðeins sýnilegt fyrir þjónustufulltrúa", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Skilaboðundirskrift er ekki stillt, vinsamlegast stilltu hana í prófílstillingum.", + "CLICK_HERE": "Click here to update", + "WHATSAPP_TEMPLATES": "Whatsapp Templates" + }, + "REPLYBOX": { + "REPLY": "Reply", + "PRIVATE_NOTE": "Private Note", + "SEND": "Send", + "CREATE": "Add Note", + "INSERT_READ_MORE": "Read more", + "DISMISS_REPLY": "Dismiss reply", + "REPLYING_TO": "Replying to:", + "TIP_EMOJI_ICON": "Show emoji selector", + "TIP_ATTACH_ICON": "Bæta við viðhengjum", + "TIP_AUDIORECORDER_ICON": "Taka upp hljóð", + "TIP_AUDIORECORDER_PERMISSION": "Leyfa aðgang að hljóði", + "TIP_AUDIORECORDER_ERROR": "Tókst ekki að opna hljóðið", + "DRAG_DROP": "Dragðu og slepptu viðhenginu hingað", + "START_AUDIO_RECORDING": "Hefja hljóðupptöku", + "STOP_AUDIO_RECORDING": "Stoppa hljóðupptöku", + "": "", + "EMAIL_HEAD": { + "TO": "TO", + "ADD_BCC": "Bæta við bcc", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "Netföng aðskilin með kommum", + "ERROR": "Vinsamlegast sláðu inn gilt netfang" + }, + "BCC": { + "LABEL": "BCC", + "PLACEHOLDER": "Netföng aðskilin með kommum", + "ERROR": "Vinsamlegast sláðu inn gilt netfang" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Undefined variables", + "MESSAGE": "You have {undefinedVariablesCount} undefined variables in your message: {undefinedVariables}. Would you like to send the message anyway?", + "CONFIRM": { + "YES": "Send", + "CANCEL": "Hætta við" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "Einkaglósa: Aðeins sýnilegt þér og teymi þínu", + "CHANGE_STATUS": "Stöðu samtals breytt", + "CHANGE_STATUS_FAILED": "Tókst ekki að breyta stöðu samtals", + "CHANGE_AGENT": "Úthlutuðum þjónustufulltrúa samtals breytt", + "CHANGE_AGENT_FAILED": "Tókst ekki að úthluta samtali", + "ASSIGN_LABEL_SUCCESFUL": "Merki úthlutað", + "ASSIGN_LABEL_FAILED": "Tókst ekki að úthluta merki", + "CHANGE_TEAM": "Teymi samtals breytt", + "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", + "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", + "FILE_SIZE_LIMIT": "Skráin fer framyfir hámarksstærð viðhengja ({MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE})", + "MESSAGE_ERROR": "Ekki er hægt að senda þessi skilaboð, vinsamlegast reyndu aftur síðar", + "SENT_BY": "Sent af:", + "BOT": "Bot", + "SEND_FAILED": "Tókst ekki að senda skilaboð! Reyndu aftur", + "TRY_AGAIN": "reyna aftur", + "ASSIGNMENT": { + "SELECT_AGENT": "Veldu Þjónustufulltrúa", + "REMOVE": "Fjarlægja", + "ASSIGN": "Úthluta" + }, + "CONTEXT_MENU": { + "COPY": "Afrita", + "REPLY_TO": "Reply to this message", + "DELETE": "Eyða", + "CREATE_A_CANNED_RESPONSE": "Bæta við stöðluðu svari", + "TRANSLATE": "Translate", + "COPY_PERMALINK": "Copy link to the message", + "LINK_COPIED": "Message URL copied to the clipboard", + "DELETE_CONFIRMATION": { + "TITLE": "Are you sure you want to delete this message?", + "MESSAGE": "You cannot undo this action", + "DELETE": "Eyða", + "CANCEL": "Hætta við" + } + }, + "SIDEBAR": { + "CONTACT": "Contact", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Senda afrit af samtali", + "DESC": "Sendu afrit af samtali á tilgreint netfang", + "SUBMIT": "Senda", + "CANCEL": "Hætta við", + "SEND_EMAIL_SUCCESS": "Afritið af samtalinu var sent", + "SEND_EMAIL_ERROR": "Það kom villa, vinsamlegas reyndu aftur", + "FORM": { + "SEND_TO_CONTACT": "Senda afritið á viðskiptavinin", + "SEND_TO_AGENT": "Sendu afritið til úthlutaðs þjónustufulltrúa", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Sendu afritið á annað netfang", + "EMAIL": { + "PLACEHOLDER": "Sláðu inn netfang", + "ERROR": "Vinsamlegast sláðu inn gilt netfang" + } + } + }, + "ONBOARDING": { + "TITLE": "Velkomin/n á {installationName}!", + "DESCRIPTION": "Takk fyrir að skrá þig. Við viljum að þú fáir sem mest út úr {installationName}. Hér eru nokkur atriði sem þú getur gert í {installationName} til að gera upplifunina ánægjulega.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "Sjáðu nýjustu uppfærslurnar okkar", + "ALL_CONVERSATION": { + "TITLE": "Öll samtölin þin á einum stað", + "DESCRIPTION": "Skoðaðu öll samtöl viðskiptavina þinna á einu mælaborði. Þú getur síað samtölin eftir innkominni rás, merkingu og stöðu.", + "NEW_LINK": "Smelltu hér til að bæta við innhólfi" + }, + "TEAM_MEMBERS": { + "TITLE": "Bjóða í teymið", + "DESCRIPTION": "Þar sem þú ert að búa þig undir að tala við viðskiptavini þína skaltu fá samstarfsfélaga þína til að aðstoða þig. Þú getur boðið samstarfsfélögum þínum með því að bæta netföngum þeirra við þjónustufulltrúalistann.", + "NEW_LINK": "Smelltu hér til að bjóða meðlim í teymið" + }, + "LABELS": { + "TITLE": "Flokkaðu samtöl með merkjum", + "DESCRIPTION": "Merkingar eru auðveldari leið til að flokka samtalið þitt. Búðu til merki eins og #support-enquiry, #billing-question o.s.frv., svo þú getir notað þau í samtali síðar.", + "NEW_LINK": "Smelltu hér til að búa til merki" + }, + "CANNED_RESPONSES": { + "TITLE": "Create canned responses", + "DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.", + "NEW_LINK": "Click here to create a canned response" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Úthlutaður Þjónustufulltrúi", + "SELF_ASSIGN": "Úthluta á mig", + "TEAM_LABEL": "Úthlutað Teymi", + "SELECT": { + "PLACEHOLDER": "Enginn" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Nánari Upplýsingar Tengiliðs", + "CONVERSATION_ACTIONS": "Samtals Aðgerðir", + "CONVERSATION_LABELS": "Merkingar Samtala", + "CONVERSATION_INFO": "Samtals Upplýsingar", + "CONTACT_NOTES": "Contact Notes", + "CONTACT_ATTRIBUTES": "Contact Attributes", + "PREVIOUS_CONVERSATION": "Fyrri samtöl", + "MACROS": "Macros", + "LINEAR_ISSUES": "Linked Linear Issues", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "Í bið", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Create attribute", + "NO_RECORDS_FOUND": "Engir eiginleikar fundust", + "UPDATE": { + "SUCCESS": "Eiginleika breytt", + "ERROR": "Ekki er hægt að uppfæra eigindina. Vinsamlegast reyndu aftur síðar" + }, + "ADD": { + "TITLE": "Bæta við", + "SUCCESS": "Eiginleika bætt við", + "ERROR": "Ekki er hægt að bæta við eigindi. Vinsamlegast reyndu aftur síðar" + }, + "DELETE": { + "SUCCESS": "Eiginleika eytt", + "ERROR": "Ekki er hægt að eyða eigindinni. Vinsamlegast reyndu aftur síðar" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Bæta við eiginleikum", + "PLACEHOLDER": "Leita í eiginleikum", + "NO_RESULT": "Engir eiginleikar fundust" + } + }, + "EMAIL_HEADER": { + "FROM": "From", + "TO": "Til", + "BCC": "Bcc", + "CC": "Cc", + "SUBJECT": "Subject", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Participating", + "SIDEBAR_TITLE": "Conversation participants", + "NO_RECORDS_FOUND": "Engar niðurstöður fundust", + "ADD_PARTICIPANTS": "Select participants", + "REMANING_PARTICIPANTS_TEXT": "+{count} others", + "REMANING_PARTICIPANT_TEXT": "+{count} other", + "TOTAL_PARTICIPANTS_TEXT": "{count} people are participating.", + "TOTAL_PARTICIPANT_TEXT": "{count} person is participating.", + "NO_PARTICIPANTS_TEXT": "No one is participating!.", + "WATCH_CONVERSATION": "Join conversation", + "YOU_ARE_WATCHING": "You are participating", + "API": { + "ERROR_MESSAGE": "Could not update, try again!", + "SUCCESS_MESSAGE": "Participants updated!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "View translated content", + "DESC": "You can view the translated content in each langauge.", + "ORIGINAL_CONTENT": "Original Content", + "TRANSLATED_CONTENT": "Translated Content", + "NO_TRANSLATIONS_AVAILABLE": "No translations are available for this content" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/csatMgmt.json b/app/javascript/dashboard/i18n/locale/is/csatMgmt.json new file mode 100644 index 0000000..9e16dc2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Rate your conversation", + "PLACEHOLDER": "Tell us more...", + "RATINGS": { + "POOR": "😞 Poor", + "FAIR": "😑 Fair", + "AVERAGE": "😐 Average", + "GOOD": "😀 Good", + "EXCELLENT": "😍 Excellent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/customRole.json b/app/javascript/dashboard/i18n/locale/is/customRole.json new file mode 100644 index 0000000..10e1aae --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Custom Roles", + "LEARN_MORE": "Learn more about custom roles", + "DESCRIPTION": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "HEADER_BTN_TXT": "Add custom role", + "LOADING": "Fetching custom roles...", + "SEARCH_404": "Það eru engin atriði sem passa við þessa fyrirspurn.", + "PAYWALL": { + "TITLE": "Upgrade to create custom roles", + "AVAILABLE_ON": "The custom role feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The custom role feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Manage custom roles", + "DESC": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "TABLE_HEADER": { + "NAME": "Nafn", + "DESCRIPTION": "Description", + "PERMISSIONS": "Permissions", + "ACTIONS": "Aðgerðir" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "Nafn", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "Name is required." + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "Description is required." + }, + "PERMISSIONS": { + "LABEL": "Permissions", + "ERROR": "Permissions are required." + }, + "CANCEL_BUTTON_TEXT": "Hætta við", + "API": { + "ERROR_MESSAGE": "Náði ekki að tengjast við netþjóna Woot, vinsamlegast reynið aftur" + } + }, + "ADD": { + "TITLE": "Add custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Senda", + "API": { + "SUCCESS_MESSAGE": "Custom role added successfully." + } + }, + "EDIT": { + "BUTTON_TEXT": "Breyta", + "TITLE": "Edit custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Uppfæra", + "API": { + "SUCCESS_MESSAGE": "Custom role updated successfully." + } + }, + "DELETE": { + "BUTTON_TEXT": "Eyða", + "API": { + "SUCCESS_MESSAGE": "Custom role deleted successfully.", + "ERROR_MESSAGE": "Náði ekki að tengjast við netþjóna Woot, vinsamlegast reynið aftur" + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Ertu viss um að þú viljir eyða", + "YES": "Yes, delete ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/datePicker.json b/app/javascript/dashboard/i18n/locale/is/datePicker.json new file mode 100644 index 0000000..90bf342 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Apply", + "CLEAR_BUTTON": "Clear", + "DATE_RANGE_INPUT": { + "START": "Start Date", + "END": "End Date" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "DATE RANGE", + "LAST_7_DAYS": "Síðustu 7 daga", + "LAST_30_DAYS": "Síðustu 30 daga", + "LAST_3_MONTHS": "Síðustu 3 mánuði", + "LAST_6_MONTHS": "Síðustu 6 mánuði", + "LAST_YEAR": "Síðasta ár", + "CUSTOM_RANGE": "Custom date range" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/emoji.json b/app/javascript/dashboard/i18n/locale/is/emoji.json new file mode 100644 index 0000000..6ef642c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Search emojis", + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Fjarlægja" + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/general.json b/app/javascript/dashboard/i18n/locale/is/general.json new file mode 100644 index 0000000..d1c1a46 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Showing {firstIndex}-{lastIndex} of {totalCount} items", + "PHONE_INPUT": { + "PLACEHOLDER": "Leit", + "EMPTY_STATE": "Engar niðurstöður fundust" + }, + "CLOSE": "Close", + "BETA": "Beta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/generalSettings.json b/app/javascript/dashboard/i18n/locale/is/generalSettings.json new file mode 100644 index 0000000..6c7af2b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.", + "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.", + "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.", + "NON_ADMIN": "Please contact your administrator to upgrade the plan and continue using all features." + }, + "TITLE": "Aðgangs stillingar", + "SUBMIT": "Uppfæra stillingar", + "BACK": "Til baka", + "DISMISS": "Dismiss", + "UPDATE": { + "ERROR": "Gat ekki uppfært stillingar, reyndu aftur!", + "SUCCESS": "Tókst að uppfæra stillingar" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Delete your Account", + "NOTE": "Once you delete your account, all your data will be deleted.", + "BUTTON_TEXT": "Delete Your Account", + "CONFIRM": { + "TITLE": "Delete Account", + "MESSAGE": "Deleting your Account is irreversible. Enter your account name below to confirm you want to permanently delete it.", + "BUTTON_TEXT": "Eyða", + "DISMISS": "Hætta við", + "PLACE_HOLDER": "Please type {accountName} to confirm" + }, + "SUCCESS": "Account marked for deletion", + "FAILURE": "Could not delete account, try again!", + "SCHEDULED_DELETION": { + "TITLE": "Account Scheduled for Deletion", + "MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.", + "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.", + "CLEAR_BUTTON": "Cancel Scheduled Deletion" + } + }, + "FORM": { + "ERROR": "Vinsamlegast lagfærðu villurnar", + "GENERAL_SECTION": { + "TITLE": "Almennar stillingar", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "Númer aðgangs", + "NOTE": "Þetta auðkenni er nauðsynlegt ef þú ert að byggja upp API byggða samþættingu" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.", + "DURATION": { + "LABEL": "Inactivity duration", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Preferences", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "Aðgangsnafn", + "PLACEHOLDER": "Þitt aðgangsnafn", + "ERROR": "Vinsamlegast sláðu inn samþykkt aðgangsnafn" + }, + "LANGUAGE": { + "LABEL": "Tungumál síðu", + "PLACEHOLDER": "Þitt aðgangsnafn", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Incoming Email Domain", + "PLACEHOLDER": "Lénið þar sem þú færð tölvupóstinn", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "Þjónustu tölvupóstur", + "PLACEHOLDER": "Þjónustu tölvupóstur fyrirtækisins", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclude unattended conversations", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a conversation should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "Uppfæra", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "Samfellu samtals með tölvupósti er virkjuð fyrir reikninginn þinn.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "Þú getur fengið tölvupóst á þitt lén núna." + } + }, + "UPDATE_CHATWOOT": "Uppfærsla {latestChatwootVersion} fyrir Chatwoot er fáanleg. Vinsamlegast uppfærðu tilvikið þitt.", + "LEARN_MORE": "Læra meira", + "PAYMENT_PENDING": "Your payment is pending. Please update your payment information to continue using Chatwoot", + "UPGRADE": "Upgrade to continue using Chatwoot", + "LIMITS_UPGRADE": "Your account has exceeded the usage limits, please upgrade your plan to continue using Chatwoot", + "OPEN_BILLING": "Open billing" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Enter til þess að velja", + "ENTER_TO_REMOVE": "Enter til þess að fjarlægja", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "Veldu eitt", + "SELECT": "Velja" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Skilaboð", + "MARK_ALL_DONE": "Merkja allt tilbúð", + "DELETE_TITLE": "eyða", + "UNREAD_NOTIFICATION": { + "TITLE": "Ólesnar tilkynningar", + "ALL_NOTIFICATIONS": "Skoða allar tilkynningar", + "LOADING_UNREAD_MESSAGE": "Hleð ólesnum skilaboðum...", + "EMPTY_MESSAGE": "Þú átt enginn ólesin skilaboð" + }, + "LIST": { + "LOADING_MESSAGE": "Hleð skilaboðum...", + "404": "Engin skilaboð", + "TABLE_HEADER": [ + "Nafn", + "Símanúmer", + "Samtöl", + "Síðast samband" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "Nýtt samtal", + "conversation_assignment": "Samtali úthlutað", + "assigned_conversation_new_message": "Nýtt skilaboð", + "participating_conversation_new_message": "Nýtt skilaboð", + "conversation_mention": "Nefna", + "sla_missed_first_response": "SLA Missed", + "sla_missed_next_response": "SLA Missed", + "sla_missed_resolution": "SLA Missed" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Offline", + "RECONNECTING": "Reconnecting...", + "RECONNECT_SUCCESS": "Reconnected" + }, + "BUTTON": { + "REFRESH": "Uppfæra" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Leita eða stökkva til", + "SECTIONS": { + "GENERAL": "Almennar", + "REPORTS": "Skýrslur", + "CONVERSATION": "Samtal", + "BULK_ACTIONS": "Bulk Actions", + "CHANGE_ASSIGNEE": "Breyta úthlutun", + "CHANGE_PRIORITY": "Change Priority", + "CHANGE_TEAM": "Breyta Teymi", + "SNOOZE_CONVERSATION": "Fresta Samtali", + "ADD_LABEL": "Merkja samtalið", + "REMOVE_LABEL": "Fjarlægja merki af samtali", + "SETTINGS": "Stillingar", + "AI_ASSIST": "AI Assist", + "APPEARANCE": "Appearance", + "SNOOZE_NOTIFICATION": "Snooze Notification" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Opna Stjórnborð Samtals", + "GO_TO_CONTACTS_DASHBOARD": "Opna Stjórnborð Tengiliða", + "GO_TO_REPORTS_OVERVIEW": "Opna yfirlit Skýrslna", + "GO_TO_CONVERSATION_REPORTS": "Opna Samtals Skýrslur", + "GO_TO_AGENT_REPORTS": "Opna Þjónustufulltrúa Skýrslur", + "GO_TO_LABEL_REPORTS": "Opna Merkja Skýrslur", + "GO_TO_INBOX_REPORTS": "Opna Innhólfs Skýrslur", + "GO_TO_TEAM_REPORTS": "Opna Teymis Skýrslur", + "GO_TO_SETTINGS_AGENTS": "Opna Stillingar Þjónustufulltrúa", + "GO_TO_SETTINGS_TEAMS": "Opna Stillingar Teymis", + "GO_TO_SETTINGS_INBOXES": "Opna Stillingar Innhólfs", + "GO_TO_SETTINGS_LABELS": "Opna Stillingar Merkja", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Opna Stillingar Staðlaðra Svara", + "GO_TO_SETTINGS_APPLICATIONS": "Opna Stillingar Forrits", + "GO_TO_SETTINGS_ACCOUNT": "Opna Stillingar Aðgangs", + "GO_TO_SETTINGS_PROFILE": "Opna Stillingar Prófíls", + "GO_TO_NOTIFICATIONS": "Opna Tilkynningar", + "ADD_LABELS_TO_CONVERSATION": "Merkja samtalið", + "ASSIGN_AN_AGENT": "Úthluta á þjónustufulltrúa", + "AI_ASSIST": "AI Assist", + "ASSIGN_PRIORITY": "Assign priority", + "ASSIGN_A_TEAM": "Úthluta á teymi", + "MUTE_CONVERSATION": "Þagga samtal", + "UNMUTE_CONVERSATION": "Afþagga samtal", + "REMOVE_LABEL_FROM_CONVERSATION": "Fjarlægja merki af samtali", + "REOPEN_CONVERSATION": "Enduropna samtal", + "RESOLVE_CONVERSATION": "Leysa samtal", + "SEND_TRANSCRIPT": "Senda afrit með tölvupósti", + "SNOOZE_CONVERSATION": "Fresta Samtali", + "UNTIL_NEXT_REPLY": "Þar til að næsta svar berst", + "UNTIL_NEXT_WEEK": "Þar til í næstu viku", + "UNTIL_TOMORROW": "Þar til á morgun", + "UNTIL_NEXT_MONTH": "Until next month", + "AN_HOUR_FROM_NOW": "Until an hour from now", + "UNTIL_CUSTOM_TIME": "Custom...", + "CHANGE_APPEARANCE": "Change Appearance", + "LIGHT_MODE": "Light", + "DARK_MODE": "Dark", + "SYSTEM_MODE": "System", + "SNOOZE_NOTIFICATION": "Snooze Notification" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Hleð Stjórnborði..." + }, + "COMMON": { + "OR": "Or", + "CLICK_HERE": "smelltu hér" + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/helpCenter.json b/app/javascript/dashboard/i18n/locale/is/helpCenter.json new file mode 100644 index 0000000..8783528 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Help Center", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "Create Portal" + }, + "HEADER": { + "FILTER": "Filter by", + "SORT": "Sort by", + "LOCALE": "Locale", + "SETTINGS_BUTTON": "Stillingar", + "NEW_BUTTON": "New Article", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Published", + "DRAFT": "Draft", + "ARCHIVED": "Archived" + }, + "TITLES": { + "ALL_ARTICLES": "All Articles", + "MINE": "My Articles", + "DRAFT": "Draft Articles", + "ARCHIVED": "Archived Articles" + }, + "LOCALE_SELECT": { + "TITLE": "Select locale", + "PLACEHOLDER": "Select locale", + "NO_RESULT": "No locale found", + "SEARCH_PLACEHOLDER": "Search locale" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "All Articles", + "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", + "PREVIEW": "Preview", + "ADD_TRANSLATION": "Add translation", + "OPEN_SIDEBAR": "Open sidebar", + "CLOSE_SIDEBAR": "Close sidebar", + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Hlaða upp mynd", + "UPLOADING": "Hleður upp...", + "SUCCESS": "Image uploaded successfully", + "ERROR": "Error while uploading image", + "UN_AUTHORIZED_ERROR": "You are not authorized to upload images", + "ERROR_FILE_SIZE": "Image size should be less than {size}MB", + "ERROR_FILE_FORMAT": "Image format should be jpg, jpeg or png", + "ERROR_FILE_DIMENSIONS": "Image dimensions should be less than 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Article Settings", + "FORM": { + "CATEGORY": { + "LABEL": "Category", + "TITLE": "Select category", + "PLACEHOLDER": "Select category", + "NO_RESULT": "No category found", + "SEARCH_PLACEHOLDER": "Search category" + }, + "AUTHOR": { + "LABEL": "Author", + "TITLE": "Select author", + "PLACEHOLDER": "Select author", + "NO_RESULT": "No authors found", + "SEARCH_PLACEHOLDER": "Search author" + }, + "META_TITLE": { + "LABEL": "Meta title", + "PLACEHOLDER": "Add a meta title" + }, + "META_DESCRIPTION": { + "LABEL": "Meta description", + "PLACEHOLDER": "Bættu við meta lýsingu til að fá betri niðurstöður í leitarvélarbestun..." + }, + "META_TAGS": { + "LABEL": "Meta tags", + "PLACEHOLDER": "Add meta tags separated by comma..." + } + }, + "BUTTONS": { + "ARCHIVE": "Archive article", + "DELETE": "Delete article" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Uncategorized", + "SEARCH_RESULTS": "Search results for {query}", + "EMPTY_TEXT": "Search for articles to insert into replies.", + "SEARCH_LOADER": "Searching...", + "INSERT_ARTICLE": "Insert", + "NO_RESULT": "No articles found", + "COPY_LINK": "Copy article link to clipboard", + "OPEN_LINK": "Open article in new tab", + "PREVIEW_LINK": "Preview article" + }, + "PORTAL": { + "HEADER": "Portals", + "DEFAULT": "Default", + "NEW_BUTTON": "New Portal", + "ACTIVE_BADGE": "active", + "CHOOSE_LOCALE_LABEL": "Choose a locale", + "LOADING_MESSAGE": "Loading portals...", + "ARTICLES_LABEL": "articles", + "NO_PORTALS_MESSAGE": "There are no available portals", + "ADD_NEW_LOCALE": "Add a new locale", + "POPOVER": { + "TITLE": "Portals", + "PORTAL_SETTINGS": "Portal settings", + "SUBTITLE": "Þú ert með margar gáttir og getur haft mismunandi landastaðla fyrir hverja gátt.", + "CANCEL_BUTTON_LABEL": "Hætta við", + "CHOOSE_LOCALE_BUTTON": "Choose Locale" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "articles", + "ADD": "Add locale", + "VISIT": "Visit site", + "SETTINGS": "Stillingar", + "DELETE": "Eyða" + }, + "PORTAL_CONFIG": { + "TITLE": "Portal Configurations", + "ITEMS": { + "NAME": "Nafn", + "DOMAIN": "Custom domain", + "SLUG": "Slug", + "TITLE": "Portal title", + "THEME": "Theme color", + "SUB_TEXT": "Portal sub text" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Available locales", + "TABLE": { + "NAME": "Locale name", + "CODE": "Locale code", + "ARTICLE_COUNT": "No. of articles", + "CATEGORIES": "No. of categories", + "SWAP": "Swap", + "DELETE": "Eyða", + "DEFAULT_LOCALE": "Default" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Ertu viss um að þú viljir eyða þessari gátt", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Nafn", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Help center information", + "BODY": "Basic information about portal" + }, + "CUSTOMIZATION": { + "TITLE": "Help center customization", + "BODY": "Customize portal" + }, + "FINISH": { + "TITLE": "Voila! 🎉", + "BODY": "You're all set!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Til baka", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Create Portal", + "TITLE": "Help center information", + "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Portal customisation", + "TITLE": "Help center customization", + "UPDATE_PORTAL_BUTTON": "Update portal settings" + }, + "FINISH_PAGE": { + "TITLE": "Voila!🎉 You're all set up!", + "MESSAGE": "Þú getur nú séð þessa stofnuðu gátt á síðunni þinni fyrir allar gáttir.", + "FINISH": "Go to all portals page" + } + }, + "LOGO": { + "LABEL": "Logo", + "UPLOAD_BUTTON": "Upload logo", + "HELP_TEXT": "Þetta lógó mun birtast á haus gáttarinnar.", + "IMAGE_UPLOAD_SUCCESS": "Logo uploaded successfully", + "IMAGE_UPLOAD_ERROR": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Error while deleting logo" + }, + "NAME": { + "LABEL": "Nafn", + "PLACEHOLDER": "Portal name", + "HELP_TEXT": "Nafnið verður notað í almannagáttinni innbyrðis.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug for urls", + "ERROR": "Slug is required" + }, + "DOMAIN": { + "LABEL": "Custom Domain", + "PLACEHOLDER": "Portal custom domain", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}", + "ERROR": "Enter a valid domain URL" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home Page Link", + "PLACEHOLDER": "Portal home page link", + "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}", + "ERROR": "Enter a valid home page URL" + }, + "THEME_COLOR": { + "LABEL": "Portal theme color", + "HELP_TEXT": "Þessi litur mun birtast sem þemalitur gáttarinnar." + }, + "PAGE_TITLE": { + "LABEL": "Page Title", + "PLACEHOLDER": "Portal page title", + "HELP_TEXT": "Titill síðunnar verður notaður í gáttinni sem snýr að almenningi.", + "ERROR": "Page title is required" + }, + "HEADER_TEXT": { + "LABEL": "Header Text", + "PLACEHOLDER": "Portal header text", + "HELP_TEXT": "Texti gáttarhaussins verður notaður í gáttinni sem snýr að almenningi.", + "ERROR": "Portal header text is required" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", + "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", + "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "Þetta bætir nýjum landstaðli við tiltæka þýðingarlistann þinn.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Hætta við" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Ekki er hægt að uppfæra sjálfgefna landstaðal. Reyndu aftur." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Ekki tókst að fjarlægja landstaðli úr gáttinni. Reyndu aftur." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Loading articles...", + "404": "No articles matches your search 🔍", + "NO_ARTICLES": "There are no available articles", + "HEADERS": { + "TITLE": "Title", + "CATEGORY": "Category", + "READ_COUNT": "Views", + "STATUS": "Staða", + "LAST_EDITED": "Last edited" + }, + "COLUMNS": { + "BY": "by", + "AUTHOR_NOT_AVAILABLE": "Author is not available" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Loading article...", + "TITLE_PLACEHOLDER": "Article title goes here", + "CONTENT_PLACEHOLDER": "Write your article here", + "API": { + "ERROR": "Error while saving article" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article published successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Error while drafting article", + "SUCCESS": "Article drafted successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Staðfesta eyðingu", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Yes, Delete", + "NO": "No, Keep it" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Vinsamlegast bættu við fyrirsögn greinarinnar og innihaldi þá er aðeins þú sem getur uppfært stillingarnar" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Search for articles" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Create a category", + "SUB_TITLE": "Flokkurinn verður notað í gáttinni sem snýr að almenningi til að flokka greinar.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Nafn", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/slodin-min", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Gefðu stutta lýsingu á flokknum.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Create category", + "CANCEL": "Hætta við" + }, + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Breyting á flokki mun uppfæra flokkinn í opinberu gáttinni.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Nafn", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/slodin-min", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Gefðu stutta lýsingu á flokknum.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Hætta við" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Search articles", + "PLACEHOLDER": "Search articles", + "NO_RESULT": "No articles found", + "SEARCHING": "Searching...", + "SEARCH_BUTTON": "Leit", + "INSERT_ARTICLE": "Insert link", + "IFRAME_ERROR": "URL is empty or invalid. Unable to display content.", + "OPEN_ARTICLE_SEARCH": "Insert article from Help Center", + "SUCCESS_ARTICLE_INSERTED": "Article inserted successfully", + "PREVIEW_LINK": "Preview article", + "CANCEL": "Loka", + "BACK": "Til baka", + "BACK_RESULTS": "Back to results" + }, + "UPGRADE_PAGE": { + "TITLE": "Help Center", + "DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Upgrade your subscription to enable this feature.", + "SELF_HOSTED_DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Please contact your administrator to enable this feature.", + "BUTTON": { + "LEARN_MORE": "Læra meira", + "UPGRADE": "Upgrade" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Multiple portals", + "DESCRIPTION": "Create multiple help center portals for different products using the same account." + }, + "LOCALES": { + "TITLE": "Full support for locales", + "DESCRIPTION": "Localize the portal in your language. We support all locales and allow translations for every article." + }, + "SEO": { + "TITLE": "SEO-friendly design", + "DESCRIPTION": "Customize your meta tags to improve your visibility on search engines with our SEO-friendly pages." + }, + "API": { + "TITLE": "Full API support", + "DESCRIPTION": "Use the portal as a headless CMS with third party front-end frameworks using our APIs." + } + } + }, + "LOADING": "Loading...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} view | {count} views", + "DROPDOWN_MENU": { + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "DELETE": "Eyða" + }, + "STATUS": { + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "UNCATEGORISED": "Uncategorised" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "All articles", + "MINE": "Mitt", + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "ALL": "All categories" + }, + "LOCALE": { + "ALL": "All locales" + }, + "NEW_ARTICLE": "New article" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Write an article", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "New article" + }, + "MINE": { + "TITLE": "You haven't written any articles here", + "SUBTITLE": "All articles written by you show up here for quick access." + }, + "DRAFT": { + "TITLE": "There are no articles in drafts", + "SUBTITLE": "Draft articles will appear here" + }, + "PUBLISHED": { + "TITLE": "There are no published articles", + "SUBTITLE": "Published articles will appear here" + }, + "ARCHIVED": { + "TITLE": "There are no articles in the archive", + "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages" + }, + "CATEGORY": { + "TITLE": "There are no articles in this category", + "SUBTITLE": "Articles in this category will appear here" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "New category", + "EDIT_CATEGORY": "Edit category", + "CATEGORIES_COUNT": "{n} category | {n} categories", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categories ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "No categories found", + "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + }, + "HEADER": { + "CREATE": "Create category", + "EDIT": "Edit category", + "DESCRIPTION": "Breyting á flokki mun uppfæra flokkinn í opinberu gáttinni.", + "PORTAL": "Portal", + "LOCALE": "Locale" + }, + "FORM": { + "NAME": { + "LABEL": "Nafn", + "PLACEHOLDER": "Category name", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "ERROR": "Slug is required", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Gefðu stutta lýsingu á flokknum.", + "ERROR": "Description is required" + } + }, + "BUTTONS": { + "CREATE": "Stofna", + "EDIT": "Uppfæra", + "CANCEL": "Hætta við" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "No locales available | {n} locale | {n} locales", + "NEW_LOCALE_BUTTON_TEXT": "New locale", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles", + "CATEGORIES_COUNT": "{count} category | {count} categories", + "DEFAULT": "Default", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Make default", + "DELETE": "Eyða" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Add a new locale", + "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", + "COMBOBOX": { + "PLACEHOLDER": "Select locale..." + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "PREVIEW": "Preview", + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "BACK_TO_ARTICLES": "Back to articles" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "More properties", + "UNCATEGORIZED": "Uncategorized", + "EDITOR_PLACEHOLDER": "Write something..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Article properties", + "META_DESCRIPTION": "Meta description", + "META_DESCRIPTION_PLACEHOLDER": "Add meta description", + "META_TITLE": "Meta title", + "META_TITLE_PLACEHOLDER": "Add meta title", + "META_TAGS": "Meta tags", + "META_TAGS_PLACEHOLDER": "Add meta tags" + }, + "API": { + "ERROR": "Error while saving article" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "New portal", + "PORTALS": "Portals", + "CREATE_PORTAL": "Create and manage multiple portals", + "ARTICLES": "articles", + "DOMAIN": "lén", + "PORTAL_NAME": "Portal name" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Create new portal", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "Stofna", + "NAME": { + "LABEL": "Nafn", + "PLACEHOLDER": "User Guide | Chatwoot", + "MESSAGE": "Choose an name for your portal.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Slug is required", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logo", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo", + "IMAGE_DELETE_SUCCESS": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Unable to delete logo", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "NAME": { + "LABEL": "Nafn", + "PLACEHOLDER": "Portal name", + "ERROR": "Name is required" + }, + "HEADER_TEXT": { + "LABEL": "Header text", + "PLACEHOLDER": "Portal header text" + }, + "PAGE_TITLE": { + "LABEL": "Page title", + "PLACEHOLDER": "Portal page title" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home page link", + "PLACEHOLDER": "Portal home page link", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Live chat widget", + "PLACEHOLDER": "Select live chat widget", + "HELP_TEXT": "Select a live chat widget that will appear on your help center", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Brand color" + }, + "SAVE_CHANGES": "Save changes" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Custom domain", + "LABEL": "Custom domain:", + "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Portal custom domain", + "EDIT_BUTTON": "Breyta", + "ADD_BUTTON": "Add custom domain", + "STATUS": { + "LIVE": "Live", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Add custom domain", + "EDIT_HEADER": "Edit custom domain", + "ADD_CONFIRM_BUTTON_LABEL": "Add domain", + "EDIT_CONFIRM_BUTTON_LABEL": "Update domain", + "LABEL": "Custom domain", + "PLACEHOLDER": "Portal custom domain", + "ERROR": "Custom domain is required", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS configuration", + "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "Send" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Delete {portalName}", + "HEADER": "Delete portal", + "DESCRIPTION": "Permanently delete this portal. This action is irreversible", + "DIALOG": { + "HEADER": "Sure you want to delete {portalName}?", + "DESCRIPTION": "This is a permanent action that cannot be reversed.", + "CONFIRM_BUTTON_LABEL": "Eyða" + } + }, + "EDIT_CONFIGURATION": "Edit configuration" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal created successfully", + "ERROR_MESSAGE": "Unable to create portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal updated successfully", + "ERROR_MESSAGE": "Unable to update portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "Hleður upp...", + "UPLOAD": "Upload & Process", + "CANCEL": "Hætta við", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Generating...", + "CONFIRM_DELETE": "Are you sure you want to delete {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Completed", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/inbox.json b/app/javascript/dashboard/i18n/locale/is/inbox.json new file mode 100644 index 0000000..116bb3c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "My Inbox", + "DISPLAY_DROPDOWN": "Display", + "LOADING": "Fetching notifications", + "404": "There are no active notifications in this group.", + "NO_NOTIFICATIONS": "No notifications", + "NOTE": "Notifications from all subscribed inboxes", + "NO_MESSAGES_AVAILABLE": "Oops! Not able to fetch messages", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week" + }, + "ACTION_HEADER": { + "SNOOZE": "Snooze notification", + "DELETE": "Delete notification", + "BACK": "Til baka" + }, + "TYPES": { + "CONVERSATION_MENTION": "You have been mentioned in a conversation", + "CONVERSATION_CREATION": "New conversation created", + "CONVERSATION_ASSIGNMENT": "A conversation has been assigned to you", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message in a conversation you are participating in", + "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation", + "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation", + "SLA_MISSED_RESOLUTION": "SLA target resolution missed for conversation" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Mentioned", + "CONVERSATION_ASSIGNMENT": "Assigned to you", + "CONVERSATION_CREATION": "New Conversation", + "SLA_MISSED_FIRST_RESPONSE": "SLA breach", + "SLA_MISSED_NEXT_RESPONSE": "SLA breach", + "SLA_MISSED_RESOLUTION": "SLA breach", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Ný skilaboð", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Ný skilaboð", + "SNOOZED_UNTIL": "Snoozed for {time}", + "SNOOZED_ENDS": "Snooze ended" + }, + "NO_CONTENT": "Ekkert efni fannst", + "MENU_ITEM": { + "MARK_AS_READ": "Mark as read", + "MARK_AS_UNREAD": "Mark as unread", + "SNOOZE": "Snooze", + "DELETE": "Eyða", + "MARK_ALL_READ": "Mark all as read", + "DELETE_ALL": "Delete all", + "DELETE_ALL_READ": "Delete all read" + }, + "DISPLAY_MENU": { + "SORT": "Sort", + "DISPLAY": "Display :", + "SORT_OPTIONS": { + "NEWEST": "Newest", + "OLDEST": "Oldest", + "PRIORITY": "Priority" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Blundað", + "READ": "Lesið", + "LABELS": "Labels", + "CONVERSATION_ID": "Conversation ID" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notification marked as read", + "MARK_AS_UNREAD": "Notification marked as unread", + "SNOOZE": "Notification snoozed", + "DELETE": "Notification deleted", + "MARK_ALL_READ": "All notifications marked as read", + "DELETE_ALL": "All notifications deleted", + "DELETE_ALL_READ": "All read notifications deleted" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/is/inboxMgmt.json new file mode 100644 index 0000000..e545296 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Innhólf", + "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.", + "LEARN_MORE": "Learn more about inboxes", + "RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.", + "CLICK_TO_RECONNECT": "Click here to reconnect.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "Það eru engin innhólf tengd við þennan reikning." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Veldu rás", + "BODY": "Veldu þjónustuveituna sem þú vilt samþætta við Chatwoot." + }, + "INBOX": { + "TITLE": "Nýtt innhólf", + "BODY": "Staðfestu reikninginn þinn og búðu til pósthólf." + }, + "AGENT": { + "TITLE": "Bæta við þjónustufulltrúa", + "BODY": "Bæta þjónustufulltrúum á nýja innhólfið." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "Þú ert tilbúin til að halda áfram!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Nafn Innhólfs", + "PLACEHOLDER": "Sláðu inn nafn innhólfsins (Dæmi: Acme ehf)", + "ERROR": "Vinsamlegast sláðu inn gilt nafn innhólfs" + }, + "WEBSITE_NAME": { + "LABEL": "Nafn Vefsíðu", + "PLACEHOLDER": "Sláðu inn nafn vefsíðu (Dæmi: Acme ehf)" + }, + "FB": { + "HELP": "PS: Með því að skrá þig inn fáum við aðeins aðgang að skilaboðum síðunnar þinnar. Chatwoot getur aldrei nálgast einkaskilaboðin þín.", + "CHOOSE_PAGE": "Veldu Síðu", + "CHOOSE_PLACEHOLDER": "Veldu síðu úr listanum", + "INBOX_NAME": "Nafn Innhólfs", + "ADD_NAME": "Bættu við nafni á innhólfið", + "PICK_NAME": "Pick a Name for your Inbox", + "PICK_A_VALUE": "Veldu gildi", + "CREATE_INBOX": "Nýtt innhólf" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continue with Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile", + "HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ", + "ERROR_MESSAGE": "There was an error connecting to Instagram, please try again", + "ERROR_AUTH": "There was an error connecting to Instagram, please try again", + "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "Til að bæta Twitter prófílnum þínum við sem rás þarftu að auðkenna Twitter prófílinn þinn með því að smella á 'Skráðu þig inn með Twitter'", + "ERROR_MESSAGE": "Villa kom upp við að tengjast Twitter, vinsamlegast reyndu aftur", + "TWEETS": { + "ENABLE": "Búðu til samtöl úr merktum Tweet-um" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Vefsíðu rás", + "DESC": "Búðu til rás fyrir vefsíðuna þína og byrjaðu að aðstoða viðskiptavini þína í gegnum netspjallið okkar.", + "LOADING_MESSAGE": "Búa til Vefsíðu Þjónustu Rás", + "CHANNEL_AVATAR": { + "LABEL": "Rásamynd" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "Vefkróks URL", + "PLACEHOLDER": "Please enter your Webhook URL", + "ERROR": "Vinsamlega skráðu gilt URL" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Lén Vefsíðu", + "PLACEHOLDER": "Sláðu lénið á vefsíðunni þinni (dæmi: acme.is)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Móttöku Fyrirsögn", + "PLACEHOLDER": "Hæ!" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Móttöku taglína", + "PLACEHOLDER": "Við gerum það einfalt að tengjast okkur. Spyrðu okkur hvað sem er eða deildu þínu áliti." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Móttökuskilaboð rásar", + "PLACEHOLDER": "Acme Inc svarar iðulega innan nokkura klukkustunda." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Virkja móttöku skilaboð", + "HELP_TEXT": "Sendu sjálfkrafa kveðjuskilaboð þegar nýtt samtal er búið til.", + "ENABLED": "Virkt", + "DISABLED": "Slökkt" + }, + "REPLY_TIME": { + "TITLE": "Skrá Svartíma", + "IN_A_FEW_MINUTES": "Eftir örfáar mínútur", + "IN_A_FEW_HOURS": "Eftir nokkrar klukkustundir", + "IN_A_DAY": "Eftir sólarhring", + "HELP_TEXT": "Þessi svartími mun birtast á netspjallinu" + }, + "WIDGET_COLOR": { + "LABEL": "Litur Widgets", + "PLACEHOLDER": "Uppfæra litinn notaðan í widgetinu" + }, + "SUBMIT_BUTTON": "Skrá innhólf", + "API": { + "ERROR_MESSAGE": "Við gátum ekki búið til vefsíðurás, vinsamlegast reyndu aftur" + } + }, + "TWILIO": { + "TITLE": "Twilio SMS/WhatsApp Rás", + "DESC": "Innleiddu Twilio og byrjaðu að aðstoða viðskiptavini þína með SMS eða WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "SID Aðgangs", + "PLACEHOLDER": "Vinsamlegast sláðu inn SID á Twilio Aðganginum þínum", + "ERROR": "Það er nauðsynlegt að fylla út þennan reit" + }, + "API_KEY": { + "USE_API_KEY": "Use API Key Authentication", + "LABEL": "API Key SID", + "PLACEHOLDER": "Please enter your API Key SID", + "ERROR": "Það er nauðsynlegt að fylla út þennan reit" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Please enter your API Key Secret", + "ERROR": "Það er nauðsynlegt að fylla út þennan reit" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "SID Skilaboðaþjónustu", + "PLACEHOLDER": "Vinsamlegast sláðu inn Twilio Messaging Service SID", + "ERROR": "Það er nauðsynlegt að fylla út þennan reit", + "USE_MESSAGING_SERVICE": "Nota Twilio Skilaboðaþjónustuna" + }, + "CHANNEL_TYPE": { + "LABEL": "Tegund Rásar", + "ERROR": "Vinsamlegast veldu tegund rásar" + }, + "AUTH_TOKEN": { + "LABEL": "Auðkenningar token", + "PLACEHOLDER": "Please enter your Twilio Auth Token", + "ERROR": "Það er nauðsynlegt að fylla út þennan reit" + }, + "CHANNEL_NAME": { + "LABEL": "Nafn Innhólfs", + "PLACEHOLDER": "Vinsamlegast sláðu inn nafn innhólfs", + "ERROR": "Það er nauðsynlegt að fylla út þennan reit" + }, + "PHONE_NUMBER": { + "LABEL": "Símanúmer", + "PLACEHOLDER": "Vinsamlega sláðu inn símanúmerið sem skilaboð verða send frá.", + "ERROR": "Vinsamlegast sláðu inn gilt símanúmer sem byrjar með ´+´ merki og inniheldur ekki nein bil." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "Þú verður að stilla afturhringingarslóð skilaboða í Twilio með slóðinni sem nefnd er hér." + }, + "SUBMIT_BUTTON": "Skrá Twilio Rás", + "API": { + "ERROR_MESSAGE": "Við gátum ekki auðkennt Twilio auðkenni, vinsamlegast reyndu aftur" + } + }, + "SMS": { + "TITLE": "SMS Rás", + "DESC": "Byrjaðu að aðstoða viðskiptavinina þína í gegnum SMS.", + "PROVIDERS": { + "LABEL": "API Provider", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandbreidd" + }, + "API": { + "ERROR_MESSAGE": "Það tókst ekki að skrá SMS rásina" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "Reikningsnúmer", + "PLACEHOLDER": "Please enter your Bandwidth Account ID", + "ERROR": "Það er nauðsynlegt að fylla út þennan reit" + }, + "API_KEY": { + "LABEL": "API Lykill", + "PLACEHOLDER": "Please enter your Bandwidth API Key", + "ERROR": "Það er nauðsynlegt að fylla út þennan reit" + }, + "API_SECRET": { + "LABEL": "API Secret", + "PLACEHOLDER": "Please enter your Bandwidth API Secret", + "ERROR": "Það er nauðsynlegt að fylla út þennan reit" + }, + "APPLICATION_ID": { + "LABEL": "Application ID", + "PLACEHOLDER": "Vinsamlegast sláðu inn Bandwidth Application ID", + "ERROR": "Það er nauðsynlegt að fylla út þennan reit" + }, + "INBOX_NAME": { + "LABEL": "Nafn Innhólfs", + "PLACEHOLDER": "Vinsamlegast sláðu inn nafn innhólfs", + "ERROR": "Það er nauðsynlegt að fylla út þennan reit" + }, + "PHONE_NUMBER": { + "LABEL": "Símanúmer", + "PLACEHOLDER": "Vinsamlega sláðu inn símanúmerið sem skilaboð verða send frá.", + "ERROR": "Vinsamlegast sláðu inn gilt símanúmer sem byrjar með ´+´ merki og inniheldur ekki nein bil." + }, + "SUBMIT_BUTTON": "Create Bandwidth Channel", + "API": { + "ERROR_MESSAGE": "Við gátum ekki auðkennt Bandwidth auðkenni, vinsamlegast reyndu aftur" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "Þú verður að stilla afturhringingarslóð skilaboða í Bandwidth með slóðinni sem nefnd er hér." + } + } + }, + "WHATSAPP": { + "TITLE": "WhatsApp Channel", + "DESC": "Byrjaðu að þjónusta viðskiptavini þína í gegnum WhatsApp.", + "PROVIDERS": { + "LABEL": "API Provider", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "Nafn Innhólfs", + "PLACEHOLDER": "Vinsamlegast sláðu inn nafn innhólfs", + "ERROR": "Það er nauðsynlegt að fylla út þennan reit" + }, + "PHONE_NUMBER": { + "LABEL": "Símanúmer", + "PLACEHOLDER": "Vinsamlega sláðu inn símanúmerið sem skilaboð verða send frá.", + "ERROR": "Vinsamlegast sláðu inn gilt símanúmer sem byrjar með ´+´ merki og inniheldur ekki nein bil." + }, + "PHONE_NUMBER_ID": { + "LABEL": "Phone number ID", + "PLACEHOLDER": "Vinsamlega sláðu inn auðkenni símanúmers sem þú færð frá stjórnborði Facebook Developer.", + "ERROR": "Vinsamlegast sláðu inn gilt gildi." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "Business Account ID", + "PLACEHOLDER": "Vinsamlega sláðu inn auðkenni fyrirtækjareiknings sem þú færð frá stjórnborði Facebook Developer.", + "ERROR": "Vinsamlegast sláðu inn gilt gildi." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook Verify Token", + "PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.", + "ERROR": "Vinsamlegast sláðu inn gilt gildi." + }, + "API_KEY": { + "LABEL": "API key", + "SUBTITLE": "Configure the WhatsApp API key.", + "PLACEHOLDER": "API key", + "ERROR": "Vinsamlegast sláðu inn gilt gildi." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "Þú verður að stilla vefkrók (e. webhook) slóðina og staðfestingarígildið (e. verification token) í Facebook Developer Portal með gildunum sem sýnd eru hér að neðan.", + "WEBHOOK_URL": "Webhook URL", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook Verification Token" + }, + "SUBMIT_BUTTON": "Create WhatsApp Channel", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "Við gátum ekki vistað WhatsApp rásina" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "Símanúmer", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "SID Aðgangs", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "Auðkenningar token", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "API Key SID", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "API Channel", + "DESC": "Samþættu við API rásina og byrjaðu að þjónusta viðskiptavini þína.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "Það er nauðsynlegt að fylla út þennan reit" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "SUBTITLE": "Configure the URL where you want to receive callbacks on events.", + "PLACEHOLDER": "URL Vefkróks" + }, + "SUBMIT_BUTTON": "Skrá API Rás", + "API": { + "ERROR_MESSAGE": "Það tókst ekki að vista api rásina" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "Tölvupóst Rás", + "DESC": "Integrate your email inbox.", + "CHANNEL_NAME": { + "LABEL": "Nafn Rásar", + "PLACEHOLDER": "Vinsamlegast sláðu inn nafn rásar", + "ERROR": "Það er nauðsynlegt að fylla út þennan reit" + }, + "EMAIL": { + "LABEL": "Netfang", + "SUBTITLE": "Tölvupóstur þar sem viðskiptavinir þínir senda þér þjónustubeiðnir", + "PLACEHOLDER": "Netfang" + }, + "SUBMIT_BUTTON": "Skrá Tölvupóst Rás", + "API": { + "ERROR_MESSAGE": "Við gátum ekki vistað tölvupóstrásina" + }, + "FINISH_MESSAGE": "Byrja að áframsenda tölvupóstinn þinn á eftirfarandi netfang.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "Smelltu hér", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "LINE Rás", + "DESC": "Samþættu við LINE rásina og byrjaðu að þjónusta viðskiptavini þína.", + "CHANNEL_NAME": { + "LABEL": "Nafn Rásar", + "PLACEHOLDER": "Vinsamlegast sláðu inn nafn rásar", + "ERROR": "Það er nauðsynlegt að fylla út þennan reit" + }, + "LINE_CHANNEL_ID": { + "LABEL": "Einkennisnúmer LINE Rásar", + "PLACEHOLDER": "Einkennisnúmer LINE Rásar" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "Leyndarmál LINE Rásar", + "PLACEHOLDER": "Leyndarmál LINE Rásar" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "Token LINE Rásar", + "PLACEHOLDER": "Token LINE Rásar" + }, + "SUBMIT_BUTTON": "Skrá LINE Rás", + "API": { + "ERROR_MESSAGE": "Við gátum ekki vistað LINE rásina" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "Þú verður að stilla webhook slóðina í LINE forritinu með slóðinni sem nefnd er hér." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Telegram Rás", + "DESC": "Samþættu við Telegram rásina og byrjaðu að þjónusta viðskiptavini þína.", + "BOT_TOKEN": { + "LABEL": "Bot Token", + "SUBTITLE": "Stilltu bot token sem þú hefur fengið frá Telegram BotFather.", + "PLACEHOLDER": "Bot Token" + }, + "SUBMIT_BUTTON": "Skrá Telegram Rás", + "API": { + "ERROR_MESSAGE": "Við gátum ekki vistað Telegram rásina" + } + }, + "AUTH": { + "TITLE": "Veldu rás", + "DESC": "Chatwoot styður vefspjall, Facebook Messenger, Twitter prófíla, WhatsApp, tölvupóst osfrv., Sem rásir. Ef þú vilt búa til sérsniðna rás geturðu búið hana til með því að nota API rásina. Til að byrja skaltu velja eina af rásunum hér að neðan.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Website", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "Tölvupóstfang", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Þjónustufulltrúar", + "DESC": "Hér geturðu bætt við þjónustufulltrúum til að hafa umsjón með nýstofnuða innhólfinu þínu. Aðeins þessir völdu Þjónustufulltrúar munu hafa aðgang að innhólfinu þínu. Þjónustufulltrúar sem eru ekki hluti af þessu innhólfi munu ekki geta séð eða svarað skilaboðum í þessu innhólfi þegar þeir skrá sig inn.Webhooks
Webhooks eru HTTP svarhringingar sem hægt er að skilgreina fyrir hvern reikning. Þeir koma af stað af atburðum eins og sköpun skilaboða í Chatwoot. Þú getur búið til fleiri en einn webhook fyrir þennan reikning.
Til að búa til webhook, smelltu á hnappinn Bæta við nýjum webhook. Þú getur líka fjarlægt hvaða webhook sem fyrir er með því að smella á Eyða hnappinn.
Mælaborðsforrit
Mælaborðsforrit gera fyrirtækjum kleift að innsteypa (e. embed) forrit inn í Chatwoot mælaborðið til að veita þjónustufulltrúum samhengi. Þessi eiginleiki gerir þér kleift að búa til forrit sjálfstætt og innsteypa það inn í mælaborðið til að veita notendaupplýsingar, pantanir þeirra eða fyrri greiðsluferla.
Þegar þú innsteypir forritið þitt með því að nota mælaborðið í Chatwoot mun forritið þitt fáðu samhengi samtalsins og sambandsins sem gluggaviðburð (e. window event). Settu upp hlustanda fyrir skilaboðaviðburðinn á síðunni þinni til að fá samhengið.
Til að bæta við nýju stjórnborðsforriti skaltu smella á hnappinn 'Bæta við nýju stjórnborðsforriti'.
", + "DESCRIPTION": "Mælaborðsforrit gera fyrirtækjum kleift að innsteypa (e. embed) forrit inn í mælaborðið til að veita þjónustufulltrúa samhengi. Þessi eiginleiki gerir þér kleift að búa til forrit sjálfstætt og innsteypa það inn til að veita notendaupplýsingar, pantanir þeirra eða fyrri greiðsluferil.", + "LEARN_MORE": "Learn more about Dashboard Apps", + "LIST": { + "404": "Engin mælaborðsforrit eru stillt á þessum reikningi ennþá", + "LOADING": "Fetching dashboard apps...", + "TABLE_HEADER": { + "NAME": "Nafn", + "ENDPOINT": "Endpoint" + }, + "EDIT_TOOLTIP": "Edit app", + "DELETE_TOOLTIP": "Delete app" + }, + "FORM": { + "TITLE_LABEL": "Nafn", + "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", + "TITLE_ERROR": "A name for the dashboard app is required", + "URL_LABEL": "Endpoint", + "URL_PLACEHOLDER": "Sláðu inn slóð endapunkts þar sem appið þitt er hýst", + "URL_ERROR": "A valid URL is required" + }, + "CREATE": { + "HEADER": "Add a new dashboard app", + "FORM_SUBMIT": "Senda", + "FORM_CANCEL": "Hætta við", + "API_SUCCESS": "Dashboard app configured successfully", + "API_ERROR": "Ekki tókst að bæta við forriti. Vinsamlegast reyndu aftur síðar" + }, + "UPDATE": { + "HEADER": "Edit dashboard app", + "FORM_SUBMIT": "Uppfæra", + "FORM_CANCEL": "Hætta við", + "API_SUCCESS": "Dashboard app updated successfully", + "API_ERROR": "Ekki tókst að uppfæra forrit. Vinsamlegast reyndu aftur síðar" + }, + "DELETE": { + "CONFIRM_YES": "Yes, delete it", + "CONFIRM_NO": "No, keep it", + "TITLE": "Confirm deletion", + "MESSAGE": "Ertu viss um að eyða appinu - {appName}?", + "API_SUCCESS": "Dashboard app deleted successfully", + "API_ERROR": "Ekki tókst að eyða forriti. Vinsamlegast reyndu aftur síðar" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "Fetching linear issues...", + "LOADING_ERROR": "There was an error fetching the linear issues, please try again", + "CREATE": "Stofna", + "LINK": { + "SEARCH": "Search issues", + "SELECT": "Select issue", + "TITLE": "Link", + "EMPTY_LIST": "No linear issues found", + "LOADING": "Loading", + "ERROR": "There was an error fetching the linear issues, please try again", + "LINK_SUCCESS": "Issue linked successfully", + "LINK_ERROR": "There was an error linking the issue, please try again", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "Create Linear issues from conversations, or link existing ones for seamless tracking.", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter title", + "REQUIRED_ERROR": "Title is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Enter description" + }, + "TEAM": { + "LABEL": "Team", + "PLACEHOLDER": "Velja teymi", + "SEARCH": "Search team", + "REQUIRED_ERROR": "Team is required" + }, + "ASSIGNEE": { + "LABEL": "Assignee", + "PLACEHOLDER": "Select assignee", + "SEARCH": "Search assignee" + }, + "PRIORITY": { + "LABEL": "Priority", + "PLACEHOLDER": "Select priority", + "SEARCH": "Search priority" + }, + "LABEL": { + "LABEL": "Label", + "PLACEHOLDER": "Select label", + "SEARCH": "Search label" + }, + "STATUS": { + "LABEL": "Staða", + "PLACEHOLDER": "Select status", + "SEARCH": "Search status" + }, + "PROJECT": { + "LABEL": "Project", + "PLACEHOLDER": "Select project", + "SEARCH": "Search project" + } + }, + "CREATE": "Stofna", + "CANCEL": "Hætta við", + "CREATE_SUCCESS": "Issue created successfully", + "CREATE_ERROR": "There was an error creating the issue, please try again", + "LOADING_TEAM_ERROR": "There was an error fetching the teams, please try again", + "LOADING_TEAM_ENTITIES_ERROR": "There was an error fetching the team entities, please try again" + }, + "ISSUE": { + "STATUS": "Staða", + "PRIORITY": "Priority", + "ASSIGNEE": "Assignee", + "LABELS": "Labels", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Unlink", + "SUCCESS": "Issue unlinked successfully", + "ERROR": "There was an error unlinking the issue, please try again" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Yes, delete", + "CANCEL": "Hætta við" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Yes, delete", + "CANCEL": "Hætta við" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "Senda skilaboð...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Captain is thinking", + "YOU": "You", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "You", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "Skrifaðu skilaboðin hér...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "Hætta við", + "CREATE": "Stofna", + "EDIT": "Uppfæra" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "Uppfæra", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "Fídusar", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "Nafn", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "Fídusar", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "Stillingar", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Eyða" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "Create", + "CANCEL": "Hætta við", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Eyða" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "Create", + "CANCEL": "Hætta við", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Eyða" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "Create", + "CANCEL": "Hætta við" + } + } + }, + "UPDATE": { + "CANCEL": "Hætta við", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "Enginn", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "API Lykill" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "Lykilorð", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Type" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Number", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Nauðsynlegt" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "Eyða", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "Allt" + }, + "STATUS": { + "TITLE": "Staða", + "PENDING": "Í bið", + "APPROVED": "Approved", + "ALL": "Allt" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "Breyta", + "DELETE_RESPONSE": "Eyða" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Disconnect" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "Innhólf", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/is/labelsMgmt.json new file mode 100644 index 0000000..ad4a5b2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Labels", + "HEADER_BTN_TXT": "Add label", + "LOADING": "Fetching labels", + "DESCRIPTION": "Labels help you categorize and prioritize conversations and leads. You can assign a label to a conversation or contact using the side panel.", + "LEARN_MORE": "Learn more about labels", + "SEARCH_404": "Það eru engin atriði sem passa við þessa fyrirspurn", + "LIST": { + "404": "Engar merkingar eru tiltækir á þessum reikningi.", + "TITLE": "Manage labels", + "DESC": "Merkingar gera þér kleift að flokka samtölin saman.", + "TABLE_HEADER": { + "NAME": "Nafn", + "DESCRIPTION": "Description", + "COLOR": "Color" + } + }, + "FORM": { + "NAME": { + "LABEL": "Label Name", + "PLACEHOLDER": "Label name", + "REQUIRED_ERROR": "Label name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Aðeins stafrófsstafir, tölustafir, bandstrik og undirstrik eru leyfð" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Label Description" + }, + "COLOR": { + "LABEL": "Color" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Show label on sidebar" + }, + "EDIT": "Breyta", + "CREATE": "Create", + "DELETE": "Eyða", + "CANCEL": "Hætta við" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Add label to conversation", + "MULTIPLE_SUGGESTION": "Select this label", + "DESELECT": "Deselect label", + "DISMISS": "Dismiss suggestion" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Dismiss", + "ADD_SELECTED_LABELS": "Add selected labels", + "ADD_SELECTED_LABEL": "Add selected label", + "ADD_ALL_LABELS": "Add all labels", + "SUGGESTED_LABELS": "Suggested labels" + }, + "ADD": { + "TITLE": "Add label", + "DESC": "Merkingar gera þér kleift að flokka samtölin saman.", + "API": { + "SUCCESS_MESSAGE": "Label added successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "EDIT": { + "TITLE": "Edit label", + "API": { + "SUCCESS_MESSAGE": "Label updated successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "DELETE": { + "BUTTON_TEXT": "Eyða", + "API": { + "SUCCESS_MESSAGE": "Label deleted successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "CONFIRM": { + "TITLE": "Staðfesta eyðingu", + "MESSAGE": "Ertu viss um að þú viljir eyða", + "YES": "Já, eyða", + "NO": "Nei, hætta við eyðingu" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/login.json b/app/javascript/dashboard/i18n/locale/is/login.json new file mode 100644 index 0000000..7448478 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Login to Chatwoot", + "EMAIL": { + "LABEL": "Tölvupóstfang", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "Vinsamlegast skrifaðu gilt netfang" + }, + "PASSWORD": { + "LABEL": "Lykilorð", + "PLACEHOLDER": "Lykilorð" + }, + "API": { + "SUCCESS_MESSAGE": "Innskráning tókst", + "ERROR_MESSAGE": "Náði ekki að tengjast við netþjóna Woot, vinsamlegast reynið aftur", + "UNAUTH": "Notandanafn / lykilorð rangt. Vinsamlegast reyndu aftur" + }, + "OAUTH": { + "GOOGLE_LOGIN": "Login with Google", + "BUSINESS_ACCOUNTS_ONLY": "Please use your company email address to login", + "NO_ACCOUNT_FOUND": "We couldn't find an account for your email address." + }, + "FORGOT_PASSWORD": "Gleymt lykilorð?", + "CREATE_NEW_ACCOUNT": "Stofna nýjan aðgang", + "SUBMIT": "Innskráning", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/macros.json b/app/javascript/dashboard/i18n/locale/is/macros.json new file mode 100644 index 0000000..2e9daa2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Macros", + "DESCRIPTION": "A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click.", + "LEARN_MORE": "Learn more about macros", + "HEADER_BTN_TXT": "Add a new macro", + "HEADER_BTN_TXT_SAVE": "Save macro", + "LOADING": "Fetching macros", + "ERROR": "Something went wrong. Please try again", + "ORDER_INFO": "Fjölvi mun keyra í þeirri röð sem þú bætir við aðgerðum þínum. Þú getur endurraðað þeim með því að draga þau í handfangið við hlið hverrar nóðu.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Macro name", + "PLACEHOLDER": "Enter a name for your macro", + "ERROR": "Name is required for creating a macro" + }, + "ACTIONS": { + "LABEL": "Aðgerðir" + } + }, + "API": { + "SUCCESS_MESSAGE": "Macro added successfully", + "ERROR_MESSAGE": "Ekki tókst að búa til fjölvi, vinsamlegast reyndu aftur síðar" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nafn", + "CREATED BY": "Created by", + "LAST_UPDATED_BY": "Last updated by", + "VISIBILITY": "Visibility" + }, + "404": "No macros found" + }, + "DELETE": { + "TOOLTIP": "Delete macro", + "CONFIRM": { + "MESSAGE": "Ertu viss um að þú viljir eyða", + "YES": "Yes, Delete", + "NO": "Nei" + }, + "API": { + "SUCCESS_MESSAGE": "Macro deleted successfully", + "ERROR_MESSAGE": "Villa kom upp við að eyða fjölva. Vinsamlegast reyndu aftur síðar" + } + }, + "EDIT": { + "TOOLTIP": "Edit macro", + "API": { + "SUCCESS_MESSAGE": "Macro updated successfully", + "ERROR_MESSAGE": "Ekki tókst að uppfæra fjölva, vinsamlegast reyndu aftur síðar" + } + }, + "EDITOR": { + "START_FLOW": "Start Flow", + "END_FLOW": "End Flow", + "LOADING": "Fetching macro", + "ADD_BTN_TOOLTIP": "Add new action", + "DELETE_BTN_TOOLTIP": "Delete Action", + "VISIBILITY": { + "LABEL": "Macro Visibility", + "GLOBAL": { + "LABEL": "Public", + "DESCRIPTION": "Þessi fjölvi er aðgengileg opinberlega fyrir alla þjónustufulltrúa á þessum reikningi." + }, + "PERSONAL": { + "LABEL": "Private", + "DESCRIPTION": "Þessi fjölvi verður persónulegur fyrir þig og ekki aðgengilegur öðrum." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Execute", + "PREVIEW": "Preview Macro", + "EXECUTED_SUCCESSFULLY": "Macro executed successfully" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Value is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Assign a Team", + "ASSIGN_AGENT": "Assign an Agent", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Þagga Samtal", + "SNOOZE_CONVERSATION": "Fresta Samtali", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "CHANGE_PRIORITY": "Change Priority", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "SEND_WEBHOOK_EVENT": "Send Webhook Event" + }, + "PRIORITY_TYPES": { + "NONE": "Enginn", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/mfa.json b/app/javascript/dashboard/i18n/locale/is/mfa.json new file mode 100644 index 0000000..aa7da19 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "Virkt", + "DISABLED": "Slökkt", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Loading...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "Copy", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "Hætta við", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "Sækja", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "Lykilorð", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "Hætta við", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "Hætta við", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/report.json b/app/javascript/dashboard/i18n/locale/is/report.json new file mode 100644 index 0000000..923b609 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Samtöl", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "Við höfum ekki fengið nógu marga gagnapunkta til að búa til skýrslu, vinsamlegast reyndu aftur síðar.", + "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "DATA_FETCHING_FAILED": "Failed to fetch data, please try again later.", + "SUMMARY_FETCHING_FAILED": "Failed to fetch summary, please try again later.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Samtöl", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Heildarfjöldi samtala sem notuð eru við útreikning:", + "TOOLTIP_TEXT": "Fyrsti viðbragðstími er {metricValue} (byggt á {conversationCount} samtölum)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Heildarfjöldi samtala sem notuð eru við útreikning:", + "TOOLTIP_TEXT": "Lausnartími er {metricValue} (byggt á {conversationCount} samtölum)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Handoff Count", + "DESC": "( Total )" + }, + "REPLY_TIME": { + "NAME": "Customer waiting time", + "TOOLTIP_TEXT": "Waiting time is {metricValue} (based on {conversationCount} replies)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "Síðustu 7 daga", + "LAST_14_DAYS": "Síðustu 14 daga", + "LAST_30_DAYS": "Síðustu 30 daga", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "Síðustu 3 mánuði", + "LAST_6_MONTHS": "Síðustu 6 mánuði", + "LAST_YEAR": "Síðasta ár", + "CUSTOM_DATE_RANGE": "Custom date range" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Group By", + "DURATION_FILTER_LABEL": "Duration", + "GROUPING_OPTIONS": { + "DAY": "Dagur", + "WEEK": "Vika", + "MONTH": "Mánuður", + "YEAR": "Ár" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Dagur" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Dagur" + }, + { + "id": 2, + "groupBy": "Vika" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Dagur" + }, + { + "id": 2, + "groupBy": "Vika" + }, + { + "id": 3, + "groupBy": "Mánuður" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "Dagur" + }, + { + "id": 2, + "groupBy": "Vika" + }, + { + "id": 3, + "groupBy": "Mánuður" + } + ], + "BUSINESS_HOURS": "Business Hours", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Engar niðurstöður fundust" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Agents Overview", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "Við höfum ekki fengið nógu marga gagnapunkta til að búa til skýrslu, vinsamlegast reyndu aftur síðar.", + "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "FILTER_DROPDOWN_LABEL": "Veldu Þjónustufulltrúa", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Samtöl", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Heildarfjöldi samtala sem notuð eru við útreikning:", + "TOOLTIP_TEXT": "Fyrsti viðbragðstími er {metricValue} (byggt á {conversationCount} samtölum)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Heildarfjöldi samtala sem notuð eru við útreikning:", + "TOOLTIP_TEXT": "Lausnartími er {metricValue} (byggt á {conversationCount} samtölum)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Síðustu 7 daga" + }, + { + "id": 1, + "name": "Síðustu 30 daga" + }, + { + "id": 2, + "name": "Síðustu 3 mánuði" + }, + { + "id": 3, + "name": "Síðustu 6 mánuði" + }, + { + "id": 4, + "name": "Síðasta ár" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "LABEL_REPORTS": { + "HEADER": "Labels Overview", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "Við höfum ekki fengið nógu marga gagnapunkta til að búa til skýrslu, vinsamlegast reyndu aftur síðar.", + "DOWNLOAD_LABEL_REPORTS": "Download label reports", + "FILTER_DROPDOWN_LABEL": "Select Label", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Samtöl", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Heildarfjöldi samtala sem notuð eru við útreikning:", + "TOOLTIP_TEXT": "Fyrsti viðbragðstími er {metricValue} (byggt á {conversationCount} samtölum)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Heildarfjöldi samtala sem notuð eru við útreikning:", + "TOOLTIP_TEXT": "Lausnartími er {metricValue} (byggt á {conversationCount} samtölum)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Síðustu 7 daga" + }, + { + "id": 1, + "name": "Síðustu 30 daga" + }, + { + "id": 2, + "name": "Síðustu 3 mánuði" + }, + { + "id": 3, + "name": "Síðustu 6 mánuði" + }, + { + "id": 4, + "name": "Síðasta ár" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "INBOX_REPORTS": { + "HEADER": "Inbox Overview", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "Við höfum ekki fengið nógu marga gagnapunkta til að búa til skýrslu, vinsamlegast reyndu aftur síðar.", + "DOWNLOAD_INBOX_REPORTS": "Download inbox reports", + "FILTER_DROPDOWN_LABEL": "Select Inbox", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Samtöl", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Heildarfjöldi samtala sem notuð eru við útreikning:", + "TOOLTIP_TEXT": "Fyrsti viðbragðstími er {metricValue} (byggt á {conversationCount} samtölum)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Heildarfjöldi samtala sem notuð eru við útreikning:", + "TOOLTIP_TEXT": "Lausnartími er {metricValue} (byggt á {conversationCount} samtölum)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Síðustu 7 daga" + }, + { + "id": 1, + "name": "Síðustu 30 daga" + }, + { + "id": 2, + "name": "Síðustu 3 mánuði" + }, + { + "id": 3, + "name": "Síðustu 6 mánuði" + }, + { + "id": 4, + "name": "Síðasta ár" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "TEAM_REPORTS": { + "HEADER": "Team Overview", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "Við höfum ekki fengið nógu marga gagnapunkta til að búa til skýrslu, vinsamlegast reyndu aftur síðar.", + "DOWNLOAD_TEAM_REPORTS": "Download team reports", + "FILTER_DROPDOWN_LABEL": "Select Team", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Samtöl", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Heildarfjöldi samtala sem notuð eru við útreikning:", + "TOOLTIP_TEXT": "Fyrsti viðbragðstími er {metricValue} (byggt á {conversationCount} samtölum)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Heildarfjöldi samtala sem notuð eru við útreikning:", + "TOOLTIP_TEXT": "Lausnartími er {metricValue} (byggt á {conversationCount} samtölum)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Síðustu 7 daga" + }, + { + "id": 1, + "name": "Síðustu 30 daga" + }, + { + "id": 2, + "name": "Síðustu 3 mánuði" + }, + { + "id": 3, + "name": "Síðustu 6 mánuði" + }, + { + "id": 4, + "name": "Síðasta ár" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Veldu tímabil" + } + }, + "CSAT_REPORTS": { + "HEADER": "CSAT Reports", + "NO_RECORDS": "Engin svör við CSAT könnun eru fáanleg.", + "DOWNLOAD": "Download CSAT Reports", + "DOWNLOAD_FAILED": "Failed to download CSAT Reports", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Choose Agents" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Contact", + "AGENT_NAME": "Assigned agent", + "RATING": "Rating", + "FEEDBACK_TEXT": "Feedback comment" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Total responses", + "TOOLTIP": "Total number of responses collected" + }, + "SATISFACTION_SCORE": { + "LABEL": "Satisfaction score", + "TOOLTIP": "Heildarfjöldi jákvæðra svara / Heildarfjöldi svara * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Response rate", + "TOOLTIP": "Heildarfjöldi svara / Heildarfjöldi sendra CSAT könnunarskilaboða * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Bot Reports", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "No. of Conversations", + "TOOLTIP": "Total number of conversations handled by the bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total Responses", + "TOOLTIP": "Total number of responses sent by the bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Resolution Rate", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Handoff Rate", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Overview", + "LIVE": "Live", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Open Conversations", + "LOADING_MESSAGE": "Loading conversation metrics...", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "UNASSIGNED": "Unassigned", + "PENDING": "Í bið" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Conversation Traffic", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Conversations by agents", + "LOADING_MESSAGE": "Loading agent metrics...", + "NO_AGENTS": "There are no conversations by agents", + "TABLE_HEADER": { + "AGENT": "Þjónustufulltrúi", + "OPEN": "Opin", + "UNATTENDED": "Unattended", + "STATUS": "Staða" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Team", + "OPEN": "Opin", + "UNATTENDED": "Unattended", + "STATUS": "Staða" + } + }, + "AGENT_STATUS": { + "HEADER": "Agent status", + "ONLINE": "Online", + "BUSY": "Upptekinn", + "OFFLINE": "Offline" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Sunday", + "MONDAY": "Monday", + "TUESDAY": "Tuesday", + "WEDNESDAY": "Wednesday", + "THURSDAY": "Thursday", + "FRIDAY": "Friday", + "SATURDAY": "Saturday" + }, + "SLA_REPORTS": { + "HEADER": "SLA Reports", + "NO_RECORDS": "SLA applied conversations are not available.", + "LOADING": "Loading SLA data...", + "DOWNLOAD_SLA_REPORTS": "Download SLA reports", + "DOWNLOAD_FAILED": "Failed to download SLA Reports", + "DROPDOWN": { + "ADD_FIlTER": "Add filter", + "CLEAR_ALL": "Clear all", + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Engar niðurstöður fundust", + "NO_FILTER": "No filters available", + "SEARCH": "Search filter", + "INPUT_PLACEHOLDER": { + "SLA": "SLA name", + "AGENTS": "Agent name", + "INBOXES": "Inbox name", + "LABELS": "Label name", + "TEAMS": "Team name" + }, + "SLA": "SLA Policy", + "INBOXES": "Innhólf", + "AGENTS": "Þjónustufulltrúi", + "LABELS": "Label", + "TEAMS": "Team" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentage of SLAs created were completed successfully" + }, + "NO_OF_MISSES": { + "LABEL": "Number of Misses", + "TOOLTIP": "Total SLA misses in a certain period" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Number of Conversations", + "TOOLTIP": "Total number of conversations with SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "Samtal", + "AGENT": "Þjónustufulltrúi" + }, + "VIEW_DETAILS": "View Details" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Innhólf", + "AGENT": "Þjónustufulltrúi", + "TEAM": "Team", + "LABEL": "Label", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "Resolution Count", + "CONVERSATIONS": "No. of conversations" + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/resetPassword.json b/app/javascript/dashboard/i18n/locale/is/resetPassword.json new file mode 100644 index 0000000..dfc0d09 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Reset password", + "DESCRIPTION": "Enter the email address you use to log in to Chatwoot to get the password reset instructions.", + "GO_BACK_TO_LOGIN": "If you want to go back to the login page,", + "EMAIL": { + "LABEL": "Tölvupóstfang", + "PLACEHOLDER": "Vinsamlegast sláðu inn netfangið þitt.", + "ERROR": "Vinsamlegast skrifaðu gilt netfang." + }, + "API": { + "SUCCESS_MESSAGE": "Tengill til að endurstilla lykilorð hefur verið sendur á netfangið þitt.", + "ERROR_MESSAGE": "Náði ekki að tengjast við netþjóna Woot, vinsamlegast reynið aftur" + }, + "SUBMIT": "Senda" + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/search.json b/app/javascript/dashboard/i18n/locale/is/search.json new file mode 100644 index 0000000..2023181 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "Tengiliðir", + "CONVERSATIONS": "Samtöl", + "MESSAGES": "Skilaboð", + "ARTICLES": "Articles" + }, + "SECTION": { + "CONTACTS": "Tengiliðir", + "CONVERSATIONS": "Samtöl", + "MESSAGES": "Skilaboð", + "ARTICLES": "Articles" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "Searching", + "LOADING_DATA": "Loading", + "EMPTY_STATE": "No {item} found for query '{query}'", + "EMPTY_STATE_FULL": "No results found for query '{query}'", + "PLACEHOLDER_KEYBINDING": "/to focus", + "INPUT_PLACEHOLDER": "Search messages, contacts or conversations", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Clear all", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Search by conversation id, email, phone number, messages for better search results.", + "BOT_LABEL": "Bot", + "READ_MORE": "Read more", + "READ_LESS": "Read less", + "WROTE": "wrote:", + "FROM": "From", + "EMAIL": "Tölvupóstfang", + "EMAIL_SUBJECT": "Subject", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "Síðustu 7 daga", + "LAST_30_DAYS": "Síðustu 30 daga", + "LAST_60_DAYS": "Síðustu 60 daga", + "LAST_90_DAYS": "Síðustu 90 daga", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "Apply", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Clear filter" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Sender", + "IN": "Innhólf", + "AGENTS": "Þjónustufulltrúar", + "CONTACTS": "Tengiliðir", + "INBOXES": "Innhólf", + "NO_AGENTS": "Engir þjónustufulltrúar fundust", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/setNewPassword.json b/app/javascript/dashboard/i18n/locale/is/setNewPassword.json new file mode 100644 index 0000000..0606878 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Set new password", + "PASSWORD": { + "LABEL": "Lykilorð", + "PLACEHOLDER": "Lykilorð", + "ERROR": "Lykilorið er of stutt." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm password", + "PLACEHOLDER": "Confirm Password", + "ERROR": "Passwords do not match." + }, + "API": { + "SUCCESS_MESSAGE": "Successfully changed the password.", + "ERROR_MESSAGE": "Náði ekki að tengjast við netþjóna Woot, vinsamlegast reynið aftur" + }, + "CAPTCHA": { + "ERROR": "Staðfesting rann út. Vinsamlegast leystu captcha aftur." + }, + "SUBMIT": "Senda" + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/settings.json b/app/javascript/dashboard/i18n/locale/is/settings.json new file mode 100644 index 0000000..2d3c2b6 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Stillingar Prófíls", + "TITLE": "Stillingar Prófíls", + "BTN_TEXT": "Uppfæra Prófíl", + "DELETE_AVATAR": "Eyða mynd", + "AVATAR_DELETE_SUCCESS": "Avatar has been deleted successfully", + "AVATAR_DELETE_FAILED": "Villa kom upp við að eyða notendamynd, vinsamlegast reyndu aftur", + "UPDATE_SUCCESS": "Prófíllinn þinn hefur verið uppfærður", + "PASSWORD_UPDATE_SUCCESS": "Lykilorðinu þínu hefur verið breytt", + "AFTER_EMAIL_CHANGED": "Prófíllinn þinn hefur verið uppfærður, vinsamlegast skráðu þig inn aftur þar sem innskráningarskilríkjum þínum er breytt", + "FORM": { + "PICTURE": "Profile Picture", + "AVATAR": "Prófílmynd", + "ERROR": "Vinsamlegast lagfærðu villurnar", + "REMOVE_IMAGE": "Fjarlægja", + "UPLOAD_IMAGE": "Hlaða upp mynd", + "UPDATE_IMAGE": "Uppfæra mynd", + "PROFILE_SECTION": { + "TITLE": "Prófíll", + "NOTE": "Netfangið þitt er auðkenni þitt og er notað til að skrá þig inn." + }, + "SEND_MESSAGE": { + "TITLE": "Flýtilykill til að senda skilaboð", + "NOTE": "Þú getur valið flýtilykil (annaðhvort Enter eða Cmd/Ctrl+Enter) eftir því hvernig þú vilt skrifa.", + "UPDATE_SUCCESS": "Stillingar þínar hafa verið uppfærðar", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Sendu skilaboð með því að ýta á Enter takkann í stað þess að smella á senda takkann." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Sendu skilaboð með því að ýta á Cmd/Ctrl + enter takkann í stað þess að smella á senda takkann." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Default", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Persónuleg undirskrift á skilaboðum", + "NOTE": "Create a unique message signature to appear at the end of every message you send from any inbox. You can also include an inline image, which is supported in live-chat, email, and API inboxes.", + "BTN_TEXT": "Vista undirskrift á skilaboðum", + "API_ERROR": "Gat ekki vistað undirskrift! Reyndu aftur", + "API_SUCCESS": "Undirskrift var vistuð", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save to save the signature", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Undirskrift skilaboða", + "ERROR": "Undirskrift skilaboða getur ekki verið tóm", + "PLACEHOLDER": "Settu inn persónulegu skilaboðaundirskriftina þína hér." + }, + "PASSWORD_SECTION": { + "TITLE": "Lykilorð", + "NOTE": "Að uppfæra lykilorðið þitt myndi endurstilla innskráningar þínar í mörgum tækjum.", + "BTN_TEXT": "Breyta lykilorði" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "Aðgangslykill", + "NOTE": "Þetta token er hægt að nota ef þú ert að byggja upp API byggða samþættingu", + "COPY": "Afrita", + "RESET": "Reset", + "CONFIRM_RESET": "Are you sure?", + "CONFIRM_HINT": "Click again to confirm", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Alerts", + "NOTE": "Enable audio alerts in dashboard for new messages and conversations.", + "PLAY": "Play sound", + "ALERT_TYPES": { + "NONE": "Enginn", + "MINE": "Assigned", + "ALL": "Allt", + "ASSIGNED": "My assigned conversations", + "UNASSIGNED": "Unassigned conversations", + "NOTME": "Open conversations assigned to others" + }, + "ALERT_COMBINATIONS": { + "NONE": "You haven't selected any options, you won't receive any audio alerts.", + "ASSIGNED": "You'll receive alerts for conversations assigned to you.", + "UNASSIGNED": "You'll receive alerts for any unassigned conversations.", + "NOTME": "You'll receive alerts for conversations assigned to others.", + "ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.", + "ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.", + "NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.", + "ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations." + }, + "ALERT_TYPE": { + "TITLE": "Alert events for conversations", + "NONE": "Enginn", + "ASSIGNED": "Úthlutuð Samtöl", + "ALL_CONVERSATIONS": "Öll Samtöl" + }, + "DEFAULT_TONE": { + "TITLE": "Alert tone:" + }, + "CONDITIONS": { + "TITLE": "Alert conditions:", + "CONDITION_ONE": "Senda hljóðviðvaranir aðeins ef vafraglugginn er ekki virkur", + "CONDITION_TWO": "Send alerts every 30s until all the assigned conversations are read" + }, + "SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.", + "READ_MORE": "Read more" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "Tilkynningar í tölvupósti", + "NOTE": "Uppfærðu stillingar þínar fyrir tölvupósttilkynningar hér", + "CONVERSATION_ASSIGNMENT": "Senda tilkynningar í tölvupósti þegar mér er úthlutað samtali", + "CONVERSATION_CREATION": "Senda tilkynningar í tölvupósti þegar nýtt samtal er stofnað", + "CONVERSATION_MENTION": "Sendu tilkynningar í tölvupósti þegar minnst er á þig í samtali", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Sendu tilkynningar í tölvupósti þegar ný skilaboð eru búin til í úthlutuðu samtali", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "Send email notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send email notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send email notifications when a conversation misses resolution SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Notification preferences", + "TYPE_TITLE": "Notification type", + "EMAIL": "Tölvupóstfang", + "PUSH": "Push notification", + "TYPES": { + "CONVERSATION_CREATED": "A new conversation is created", + "CONVERSATION_ASSIGNED": "A conversation is assigned to you", + "CONVERSATION_MENTION": "You are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "A new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "A new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "A conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "A conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "A conversation misses resolution SLA" + }, + "BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them" + }, + "API": { + "UPDATE_SUCCESS": "Tilkynningarstillingarnar þínar hafa verið uppfærðar", + "UPDATE_ERROR": "Villa kom upp við að uppfæra stillingarnar, vinsamlegast reyndu aftur" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Push Notifications", + "NOTE": "Uppfærðu stillingar þínar fyrir þrýstitilkynningar hér", + "CONVERSATION_ASSIGNMENT": "Senda þrýstitilkynningar þegar mér er úthlutað samtali", + "CONVERSATION_CREATION": "Senda þrýstitilkynningar þegar nýtt samtal er stofnað", + "CONVERSATION_MENTION": "Sendu þrýstitilkynningar þegar minnst er á þig í samtali", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Sendu push tilkynningar þegar ný skilaboð eru búin til í úthlutuðu samtali", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in a participating conversation", + "HAS_ENABLED_PUSH": "You have enabled push for this browser.", + "REQUEST_PUSH": "Enable push notifications", + "SLA_MISSED_FIRST_RESPONSE": "Send push notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send push notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send push notifications when a conversation misses resolution SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "Prófílmynd" + }, + "NAME": { + "LABEL": "Your full name", + "ERROR": "Vinsamlegast skrifaðu gilt nafn", + "PLACEHOLDER": "Vinsamlegast sláðu inn nafnið þitt" + }, + "DISPLAY_NAME": { + "LABEL": "Display name", + "ERROR": "Please enter a valid display name", + "PLACEHOLDER": "Vinsamlegast sláðu inn birtingarnafn, þetta birtist í samtölum" + }, + "AVAILABILITY": { + "LABEL": "Availability", + "STATUS": { + "ONLINE": "Online", + "BUSY": "Upptekinn", + "OFFLINE": "Offline" + }, + "SET_AVAILABILITY_SUCCESS": "Availability has been set successfully", + "SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again", + "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user" + }, + "EMAIL": { + "LABEL": "Þitt tölvupóstfang", + "ERROR": "Vinsamlegast skrifaðu gilt netfang", + "PLACEHOLDER": "Vinsamlegast sláðu inn netfangið þitt, þetta myndi birtast í samtölum" + }, + "CURRENT_PASSWORD": { + "LABEL": "Núverandi lykilorð", + "ERROR": "Vinsamlegast sláðu inn núverandi lykilorð", + "PLACEHOLDER": "Vinsamlegast sláðu inn núverandi lykilorð" + }, + "PASSWORD": { + "LABEL": "Nýtt lykilorð", + "ERROR": "Vinsamlegast sláðu inn lykilorð 6 stafa lengd eða meira", + "PLACEHOLDER": "Vinsamlegast sláðu inn nýja lykilorðið" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Staðfesta nýtt lykilorð", + "ERROR": "Staðfest lykilorð ætti að passa við lykilorðið", + "PLACEHOLDER": "Vinsamlegasts staðfestu nýja lykilorðið" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Breyta", + "CHANGE_ACCOUNTS": "Switch account", + "SWITCH_ACCOUNT": "Switch account", + "CONTACT_SUPPORT": "Contact support", + "SELECTOR_SUBTITLE": "Veldu reikning úr eftirfarandi lista", + "PROFILE_SETTINGS": "Profile settings", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Keyboard shortcuts", + "APPEARANCE": "Change appearance", + "SUPER_ADMIN_CONSOLE": "SuperAdmin console", + "DOCS": "Read documentation", + "CHANGELOG": "Changelog", + "LOGOUT": "Log out" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "days trial remaining.", + "TRAIL_BUTTON": "Buy Now", + "DELETED_USER": "Deleted User", + "EMAIL_VERIFICATION_PENDING": "It seems that you haven't verified your email address yet. Please check your inbox for the verification email.", + "RESEND_VERIFICATION_MAIL": "Resend verification email", + "EMAIL_VERIFICATION_SENT": "Verification email has been sent. Please check your inbox.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Account Suspended", + "MESSAGE": "Reikningnum þínum er lokað. Vinsamlegast hafðu samband við þjónustusviðið okkar til að fá frekari upplýsingar." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Log out" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Copy", + "CODEPEN": "Open in CodePen", + "COPY_SUCCESSFUL": "Code copied to clipboard successfully" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Show More", + "SHOW_LESS": "Show Less" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "Sækja", + "UPLOADING": "Hleður upp...", + "INSTAGRAM_STORY_UNAVAILABLE": "This story is no longer available." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "See on map" + }, + "FORM_BUBBLE": { + "SUBMIT": "Senda" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "This image is no longer available.", + "LOADING_FAILED": "Loading failed" + } + }, + "CONFIRM_EMAIL": "Verifying...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Add Inbox" + } + }, + "SIDEBAR": { + "NO_ITEMS": "No items", + "CURRENTLY_VIEWING_ACCOUNT": "Currently viewing:", + "SWITCH": "Switch", + "INBOX_VIEW": "Inbox View", + "CONVERSATIONS": "Samtöl", + "INBOX": "My Inbox", + "ALL_CONVERSATIONS": "Öll Samtöl", + "MENTIONED_CONVERSATIONS": "Mentions", + "PARTICIPATING_CONVERSATIONS": "Participating", + "UNATTENDED_CONVERSATIONS": "Unattended", + "REPORTS": "Reports", + "SETTINGS": "Stillingar", + "CONTACTS": "Tengiliðir", + "ACTIVE": "Active", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistants", + "CAPTAIN_DOCUMENTS": "Documents", + "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_TOOLS": "Tools", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "Innhólf", + "CAPTAIN_SETTINGS": "Stillingar", + "HOME": "Home", + "AGENTS": "Þjónustufulltrúar", + "AGENT_BOTS": "Bots", + "AUDIT_LOGS": "Aðgerðaskrá", + "INBOXES": "Innhólf", + "NOTIFICATIONS": "Skilaboð", + "CANNED_RESPONSES": "Stöðluð svör", + "INTEGRATIONS": "Integrations", + "PROFILE_SETTINGS": "Stillingar Prófíls", + "ACCOUNT_SETTINGS": "Account Settings", + "APPLICATIONS": "Applications", + "LABELS": "Labels", + "CUSTOM_ATTRIBUTES": "Custom Attributes", + "AUTOMATION": "Automation", + "MACROS": "Macros", + "TEAMS": "Teams", + "BILLING": "Billing", + "CUSTOM_VIEWS_FOLDER": "Folders", + "CUSTOM_VIEWS_SEGMENTS": "Segments", + "ALL_CONTACTS": "All Contacts", + "TAGGED_WITH": "Tagged with", + "NEW_LABEL": "New label", + "NEW_TEAM": "New team", + "NEW_INBOX": "New inbox", + "REPORTS_CONVERSATION": "Samtöl", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Herferð", + "ONGOING": "Ongoing", + "ONE_OFF": "One off", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "Bot", + "REPORTS_AGENT": "Þjónustufulltrúar", + "REPORTS_LABEL": "Labels", + "REPORTS_INBOX": "Innhólf", + "REPORTS_TEAM": "Team", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "Set yourself as", + "SET_YOUR_AVAILABILITY": "Set your availability", + "SLA": "SLA", + "CUSTOM_ROLES": "Custom Roles", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Overview", + "REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages", + "HELP_CENTER": { + "TITLE": "Help Center", + "ARTICLES": "Articles", + "CATEGORIES": "Categories", + "LOCALES": "Locales", + "SETTINGS": "Stillingar" + }, + "CHANNELS": "Channels", + "SET_AUTO_OFFLINE": { + "TEXT": "Mark offline automatically", + "INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard.", + "INFO_SHORT": "Automatically mark offline when you aren't using the app." + }, + "DOCS": "Read docs", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "Billing", + "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "CURRENT_PLAN": { + "TITLE": "Current Plan", + "PLAN_NOTE": "Þú ert áskrifandi að **{plan}** áætluninni með **{quantity}** leyfi", + "SEAT_COUNT": "Number of seats", + "RENEWS_ON": "Renews on" + }, + "VIEW_PRICING": "View Pricing", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Manage your subscription", + "DESCRIPTION": "Skoðaðu fyrri reikninga þína, breyttu innheimtuupplýsingum þínum eða sagði upp áskriftinni þinni.", + "BUTTON_TXT": "Go to the billing portal" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Manage usage and credits for Captain AI.", + "BUTTON_TXT": "Buy more credits", + "DOCUMENTS": "Documents", + "RESPONSES": "Responses", + "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more.", + "REFRESH_CREDITS": "Uppfæra" + }, + "CHAT_WITH_US": { + "TITLE": "Vantar þig aðstoð?", + "DESCRIPTION": "Stendur þú frammi fyrir einhverjum vandamálum í innheimtu? Við erum hér til að hjálpa.", + "BUTTON_TXT": "Spjallaðu við okkur" + }, + "NO_BILLING_USER": "Verið er að stilla innheimtureikninginn þinn. Endurnýjaðu síðuna og reyndu aftur.", + "TOPUP": { + "BUY_CREDITS": "Buy more credits", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Merkimiði:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "Hætta við", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Go Back", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "Code copied to clipboard successfully", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Uh ó! Við fundum enga Chatwoot reikninga. Vinsamlegast búðu til nýjan reikning til að halda áfram.", + "NEW_ACCOUNT": "New Account", + "SELECTOR_SUBTITLE": "Stofna nýjan aðgang", + "API": { + "SUCCESS_MESSAGE": "Account created successfully", + "EXIST_MESSAGE": "Account already exists", + "ERROR_MESSAGE": "Náði ekki að tengjast við netþjóna Woot, vinsamlegast reynið aftur" + }, + "FORM": { + "NAME": { + "LABEL": "Nafn fyrirtækis", + "PLACEHOLDER": "Wayne Enterprises" + }, + "SUBMIT": "Senda", + "CANCEL": "Hætta við" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "View all shortcuts", + "TITLE": { + "OPEN_CONVERSATION": "Opna samtal", + "RESOLVE_AND_NEXT": "Resolve and move to next", + "NAVIGATE_DROPDOWN": "Navigate dropdown items", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "ADD_ATTACHMENT": "Add Attachment", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "TOGGLE_SIDEBAR": "Toggle Sidebar", + "GO_TO_REPORTS_SIDEBAR": "Go to Reports sidebar", + "MOVE_TO_NEXT_TAB": "Move to next tab in conversation list", + "GO_TO_SETTINGS": "Go to Settings", + "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", + "SWITCH_TO_REPLY": "Switch to Reply", + "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "Priority", + "ACTIVE": "Active", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "Breyta" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Hætta við" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Description:", + "PLACEHOLDER": "Enter description" + }, + "STATUS": { + "LABEL": "Staða:", + "PLACEHOLDER": "Select status", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "Bæta við" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "Breyta" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Hætta við" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Description:", + "PLACEHOLDER": "Enter description" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "Bæta við" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "Eyða", + "CANCEL_BUTTON_LABEL": "Hætta við" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/signup.json b/app/javascript/dashboard/i18n/locale/is/signup.json new file mode 100644 index 0000000..e199471 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Create an account", + "TITLE": "Nýskráning", + "TESTIMONIAL_HEADER": "Það þarf aðeins eitt skref framávið", + "TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.", + "TERMS_ACCEPT": "By creating an account, you agree to our T & C and Privacy policy", + "OAUTH": { + "GOOGLE_SIGNUP": "Sign up with Google" + }, + "COMPANY_NAME": { + "LABEL": "Nafn fyrirtækis", + "PLACEHOLDER": "Sláðu inn nafn fyrirtækisins þíns. Dæmi: Wayne Enterprises", + "ERROR": "Nafn fyrirtækis er of stutt" + }, + "FULL_NAME": { + "LABEL": "Fullt nafn", + "PLACEHOLDER": "Skráðu inn fullt nafn. Dæmi: Bruce Wayne", + "ERROR": "Fullt nafn er of stutt" + }, + "EMAIL": { + "LABEL": "Vinnu netfang", + "PLACEHOLDER": "Enter your work email address. E.g., bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Vinsamlegast sláðu inn gilt vinnu netfang" + }, + "PASSWORD": { + "LABEL": "Lykilorð", + "PLACEHOLDER": "Lykilorð", + "ERROR": "Lykilorið er of stutt", + "IS_INVALID_PASSWORD": "Lykilorð ætti að innihalda að minnsta kosti 1 hástaf, 1 lágstaf, 1 tölustaf og 1 tákn", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Staðfesta Lykilorð", + "PLACEHOLDER": "Staðfesta Lykilorð", + "ERROR": "Passwords do not match." + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "Náði ekki að tengjast við netþjóna Woot, vinsamlegast reynið aftur" + }, + "SUBMIT": "Create account", + "HAVE_AN_ACCOUNT": "Ertu nú þegar með aðgang?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/sla.json b/app/javascript/dashboard/i18n/locale/is/sla.json new file mode 100644 index 0000000..aa7c06a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Add SLA", + "ADD_ACTION_LONG": "Create a new SLA Policy", + "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", + "LEARN_MORE": "Learn more about SLA", + "LOADING": "Fetching SLAs", + "PAYWALL": { + "TITLE": "Upgrade to create SLAs", + "AVAILABLE_ON": "The SLA feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SLA feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no SLAs available in this account.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Issues raised by enterprise customers, that require immediate attention.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Issues raised by enterprise customers, that needs to be acknowledged quickly." + }, + "BUSINESS_HOURS_ON": "Business hours on", + "BUSINESS_HOURS_OFF": "Business hours off", + "RESPONSE_TYPES": { + "FRT": "First response time threshold", + "NRT": "Next response time threshold", + "RT": "Resolution time threshold", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA Name", + "PLACEHOLDER": "SLA Name", + "REQUIRED_ERROR": "SLA name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Aðeins stafrófsstafir, tölustafir, bandstrik og undirstrik eru leyfð" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "SLA for premium customers" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "First Response Time", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Next Response Time", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "Resolution Time", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Business Hours", + "PLACEHOLDER": "Only during business hours" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Threshold should be a number and greater than zero" + }, + "EDIT": "Breyta", + "CREATE": "Stofna", + "DELETE": "Eyða", + "CANCEL": "Hætta við" + }, + "ADD": { + "TITLE": "Add SLA", + "DESC": "Friendly promises for great service!", + "API": { + "SUCCESS_MESSAGE": "SLA added successfully", + "ERROR_MESSAGE": "Það kom upp villa, vinsamlegast reyndu aftur" + } + }, + "DELETE": { + "TITLE": "Delete SLA", + "API": { + "SUCCESS_MESSAGE": "SLA deleted successfully", + "ERROR_MESSAGE": "Það kom upp villa, vinsamlegast reyndu aftur" + }, + "CONFIRM": { + "TITLE": "Staðfesta eyðingu", + "MESSAGE": "Are you sure you want to delete ", + "YES": "Já, eyða", + "NO": "Nei, hætta við eyðingu" + } + }, + "EVENTS": { + "TITLE": "SLA Misses", + "FRT": "First response time", + "NRT": "Next response time", + "RT": "Resolution time", + "SHOW_MORE": "{count} more", + "HIDE": "Hide {count} rows" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/teamsSettings.json b/app/javascript/dashboard/i18n/locale/is/teamsSettings.json new file mode 100644 index 0000000..bb87ccf --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Stofna nýtt teymi", + "HEADER": "Teymi", + "LOADING": "Fetching teams", + "DESCRIPTION": "Teams allow you to organize agents into groups based on their responsibilities. An agent can belong to multiple teams. When working collaboratively, you can assign conversations to specific teams.", + "LEARN_MORE": "Learn more about teams", + "LIST": { + "404": "Það eru engin teymi til á þessum reikningi.", + "EDIT_TEAM": "Breyta teymi", + "NONE": "Enginn" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Stofna nýtt teymi", + "DESC": "Bættu titli og lýsingu við nýja teymið þitt." + }, + "AGENTS": { + "BUTTON_TEXT": "Bæta þjónustufulltrúum við teymið", + "TITLE": "Bæta þjónustufulltrúa við teymið - {teamName}", + "DESC": "Bættu þjónustufullrtúum við nýstofnað teymið þitt. Þetta gerir þér kleift að vinna sem teymi í samtölum, fá tilkynningu um nýja atburði í sama samtali." + }, + "WIZARD_CREATE": { + "TITLE": "Stofna", + "BODY": "Stofna nýtt teymi af þjónustufulltrúum." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "Bæta við þjónustufulltrúa", + "BODY": "Add agents to the team." + }, + "WIZARD_FINISH": { + "TITLE": "Finish", + "BODY": "Þú ert tilbúin til að halda áfram!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Edit your team details", + "DESC": "Edit title and description to your team.", + "BUTTON_TEXT": "Update team" + }, + "AGENTS": { + "BUTTON_TEXT": "Update agents in team", + "TITLE": "Bæta þjónustufulltrúa við teymið - {teamName}", + "DESC": "Bættu þjónustufulltrúum við nýstofnaða teymið þitt. Allir þjónustufulltrúar sem bætt er við verða látnir vita þegar samtali er úthlutað þessu teymi." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Team details", + "ROUTE": "settings_teams_edit", + "BODY": "Breyttu nafni, lýsingu og öðrum upplýsingum." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Edit Agents", + "ROUTE": "settings_teams_edit_members", + "BODY": "Edit agents in your team." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Finish", + "ROUTE": "settings_teams_edit_finish", + "BODY": "Þú ert tilbúin til að halda áfram!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Ekki tókst að vista teymisupplýsingarnar. Reyndu aftur." + }, + "AGENTS": { + "AGENT": "AGENT", + "EMAIL": "NETFANG", + "BUTTON_TEXT": "Bæta við þjónustufulltrúum", + "ADD_AGENTS": "Adding Agents to your Team...", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} af {total} þjónustufulltrúum valdir." + }, + "ADD": { + "TITLE": "Bæta þjónustufulltrúa við teymið - {teamName}", + "DESC": "Bættu þjónustufullrtúum við nýstofnað teymið þitt. Þetta gerir þér kleift að vinna sem teymi í samtölum, fá tilkynningu um nýja atburði í sama samtali.", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} af {total} þjónustufulltrúum valdir.", + "BUTTON_TEXT": "Bæta við þjónustufulltrúum", + "AGENT_VALIDATION_ERROR": "Select at least one agent." + }, + "FINISH": { + "TITLE": "Your team is ready!", + "MESSAGE": "Þú getur nú unnið sem teymi í samtölum. Gangi þér vel að þjónusta", + "BUTTON_TEXT": "Finish" + }, + "DELETE": { + "BUTTON_TEXT": "Eyða", + "API": { + "SUCCESS_MESSAGE": "Team deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the team. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure you want to delete the team?", + "PLACE_HOLDER": "Please type {teamName} to confirm", + "MESSAGE": "Ef teyminu er eytt verður liðsúthlutunin fjarlægð úr samtölunum sem þessu teymi hefur verið úthlutað.", + "YES": "Delete ", + "NO": "Hætta við" + } + }, + "SETTINGS": "Stillingar", + "FORM": { + "UPDATE": "Update team", + "CREATE": "Create team", + "NAME": { + "LABEL": "Team name", + "PLACEHOLDER": "Example: Sales, Customer Support" + }, + "DESCRIPTION": { + "LABEL": "Team Description", + "PLACEHOLDER": "Short description about this team." + }, + "AUTO_ASSIGN": { + "LABEL": "Allow auto assign for this team." + }, + "SUBMIT_CREATE": "Create team" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/webhooks.json b/app/javascript/dashboard/i18n/locale/is/webhooks.json new file mode 100644 index 0000000..347c968 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Webhook Settings" + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/is/whatsappTemplates.json new file mode 100644 index 0000000..1f030be --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Whatsapp Templates", + "SUBTITLE": "Veldu WhatsApp sniðmátið sem þú vilt senda", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/is/yearInReview.json b/app/javascript/dashboard/i18n/locale/is/yearInReview.json new file mode 100644 index 0000000..0301ca5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/is/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "Close", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "samtöl", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "Sækja", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "Share" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/advancedFilters.json b/app/javascript/dashboard/i18n/locale/it/advancedFilters.json new file mode 100644 index 0000000..fe968cf --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Filtra conversazioni", + "SUBTITLE": "Aggiungi i filtri qui sotto e clicca su “Applica filtri” per trovare subito le conversazioni che ti interessano.", + "EDIT_CUSTOM_FILTER": "Modifica Cartella", + "CUSTOM_VIEWS_SUBTITLE": "Aggiungi o rimuovi filtri e aggiorna la cartella.", + "ADD_NEW_FILTER": "Aggiungi filtro", + "FILTER_DELETE_ERROR": "Impossibile salvare: aggiungi almeno un filtro per continuare.", + "SUBMIT_BUTTON_LABEL": "Applica filtri", + "UPDATE_BUTTON_LABEL": "Aggiorna cartella", + "CANCEL_BUTTON_LABEL": "Annulla", + "CLEAR_BUTTON_LABEL": "Rimuovi filtri", + "FOLDER_LABEL": "Nome Cartella", + "FOLDER_QUERY_LABEL": "Query Cartella", + "EMPTY_VALUE_ERROR": "Valore richiesto.", + "TOOLTIP_LABEL": "Filtra conversazioni", + "QUERY_DROPDOWN_LABELS": { + "AND": "E", + "OR": "O" + }, + "INPUT_PLACEHOLDER": "Inserisci valore", + "OPERATOR_LABELS": { + "equal_to": "Uguale a", + "not_equal_to": "Non uguale a", + "does_not_contain": "Non contiene", + "is_present": "È presente", + "is_not_present": "Non è presente", + "is_greater_than": "È maggiore di", + "is_less_than": "È minore di", + "days_before": "È x giorni prima", + "starts_with": "Inizia con", + "equalTo": "Uguale a", + "notEqualTo": "Non uguale a", + "contains": "Contiene", + "doesNotContain": "Non contiene", + "isPresent": "È presente", + "isNotPresent": "Non è presente", + "isGreaterThan": "È maggiore di", + "isLessThan": "È minore di", + "daysBefore": "È x giorni prima", + "startsWith": "Inizia con" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "Vero", + "FALSE": "Falso" + }, + "ATTRIBUTES": { + "STATUS": "Stato", + "ASSIGNEE_NAME": "Nome assegnatario", + "INBOX_NAME": "Nome Inbox", + "TEAM_NAME": "Nome team", + "CONVERSATION_IDENTIFIER": "Identificativo conversazione", + "CAMPAIGN_NAME": "Nome campagna", + "LABELS": "Etichette", + "BROWSER_LANGUAGE": "Lingua del browser", + "PRIORITY": "Priorità", + "COUNTRY_NAME": "Nome del Paese", + "REFERER_LINK": "Link referente", + "CUSTOM_ATTRIBUTE_LIST": "Elenco", + "CUSTOM_ATTRIBUTE_TEXT": "Testo", + "CUSTOM_ATTRIBUTE_NUMBER": "Numero", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Creato il", + "LAST_ACTIVITY": "Ultima attività" + }, + "ERRORS": { + "VALUE_REQUIRED": "Valore richiesto", + "ATTRIBUTE_KEY_REQUIRED": "Chiave attributo richiesta", + "FILTER_OPERATOR_REQUIRED": "Operatore di filtro richiesto", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Il valore deve essere compreso tra 1 e 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Filtri standard", + "ADDITIONAL_FILTERS": "Filtri aggiuntivi", + "CUSTOM_ATTRIBUTES": "Attributi personalizzati" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Vuoi salvare questo filtro?", + "LABEL": "Dai un nome a questo filtro", + "PLACEHOLDER": "Dai un nome al filtro per poterlo richiamare in seguito.", + "ERROR_MESSAGE": "Nome richiesto.", + "SAVE_BUTTON": "Salva filtro", + "CANCEL_BUTTON": "Annulla", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Cartella creata con successo.", + "ERROR_MESSAGE": "Errore durante la creazione della cartella." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segmento creato con successo.", + "ERROR_MESSAGE": "Errore durante la creazione del segmento." + } + }, + "EDIT": { + "EDIT_BUTTON": "Modifica cartella" + }, + "DELETE": { + "DELETE_BUTTON": "Elimina filtro", + "MODAL": { + "CONFIRM": { + "TITLE": "Conferma eliminazione", + "MESSAGE": "Sei sicuro di voler eliminare il filtro ", + "YES": "Sì, elimina", + "NO": "No, mantienilo" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Cartella eliminata con successo.", + "ERROR_MESSAGE": "Errore durante l'eliminazione della cartella." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segmento eliminato con successo.", + "ERROR_MESSAGE": "Errore durante l'eliminazione del segmento." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/agentBots.json b/app/javascript/dashboard/i18n/locale/it/agentBots.json new file mode 100644 index 0000000..36cd36b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Bots", + "LOADING_EDITOR": "Caricamento editor...", + "DESCRIPTION": "Gli Agent Bot sono membri virtuali del tuo team: gestiscono le attività di routine, lasciandoti più tempo per ciò che conta. Puoi gestirli da questa pagina o crearne di nuovi con il pulsante “Aggiungi Bot”.", + "LEARN_MORE": "Informazioni sugli agent bot", + "GLOBAL_BOT": "System bot", + "GLOBAL_BOT_BADGE": "System", + "AVATAR": { + "SUCCESS_DELETE": "Avatar del bot eliminato con successo", + "ERROR_DELETE": "Errore nell'eliminare l'avatar del bot, riprova" + }, + "BOT_CONFIGURATION": { + "TITLE": "Select an agent bot", + "DESC": "Assegna un agent bot alla tua inbox. Potrà gestire le nuove conversazioni e trasferirle a un operatore umano quando necessario.", + "SUBMIT": "Aggiorna", + "DISCONNECT": "Disconnetti bot", + "SUCCESS_MESSAGE": "Agent bot aggiornato con successo.", + "DISCONNECTED_SUCCESS_MESSAGE": "Agent bot disconnesso con successo.", + "ERROR_MESSAGE": "Impossibile aggiornare agent bot. Riprova.", + "DISCONNECTED_ERROR_MESSAGE": "Impossibile disconnettere agent bot. Riprova.", + "SELECT_PLACEHOLDER": "Seleziona bot" + }, + "ADD": { + "TITLE": "Aggiungi Bot", + "CANCEL_BUTTON_TEXT": "Annulla", + "API": { + "SUCCESS_MESSAGE": "Bot aggiunto correttamente.", + "ERROR_MESSAGE": "Impossibile aggiungere bot. Riprova più tardi." + } + }, + "LIST": { + "404": "Nessun bot trovato. Puoi creare un bot cliccando sul pulsante 'Aggiungi Bot'.", + "LOADING": "Caricamento bot...", + "TABLE_HEADER": { + "DETAILS": "Dettagli Bot", + "URL": "URL Webhook" + } + }, + "DELETE": { + "BUTTON_TEXT": "Elimina", + "TITLE": "Elimina bot", + "CONFIRM": { + "TITLE": "Conferma Eliminazione", + "MESSAGE": "Sei sicuro di voler eliminare {name}?", + "YES": "Sì, elimina", + "NO": "No, Mantieni" + }, + "API": { + "SUCCESS_MESSAGE": "Bot eliminato con successo.", + "ERROR_MESSAGE": "Impossibile eliminare il bot. Riprova." + } + }, + "EDIT": { + "BUTTON_TEXT": "Modifica", + "TITLE": "Modifica bot", + "API": { + "SUCCESS_MESSAGE": "Bot aggiornato con successo.", + "ERROR_MESSAGE": "Impossibile aggiornare il bot. Riprova." + } + }, + "ACCESS_TOKEN": { + "TITLE": "Token di Accesso", + "DESCRIPTION": "Copia il token di accesso e salvalo in un luogo sicuro", + "COPY_SUCCESSFUL": "Token di accesso copiato negli appunti", + "RESET_SUCCESS": "Token di accesso rigenerato correttamente", + "RESET_ERROR": "Impossibile rigenerare il token di accesso. Riprova" + }, + "FORM": { + "AVATAR": { + "LABEL": "Avatar del Bot" + }, + "NAME": { + "LABEL": "Nome Bot", + "PLACEHOLDER": "Inserisci il nome del Bot", + "REQUIRED": "Nome Bot richiesto" + }, + "DESCRIPTION": { + "LABEL": "Descrizione", + "PLACEHOLDER": "Cosa fa questo Bot?" + }, + "WEBHOOK_URL": { + "LABEL": "URL Webhook", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "L'URL del Webhook è richiesto" + }, + "ERRORS": { + "NAME": "Nome Bot richiesto", + "URL": "L'URL del Webhook è richiesto", + "VALID_URL": "Inserisci un URL valido che inizi con http:// o https://" + }, + "CANCEL": "Annulla", + "CREATE": "Crea Bot", + "UPDATE": "Aggiorna Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configura un Bot Webhook per integrarlo con i tuoi servizi. Il Bot riceverà e gestirà gli eventi delle conversazioni e potrà rispondere automaticamente." + }, + "TYPES": { + "WEBHOOK": "Bot Webhook" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/agentMgmt.json b/app/javascript/dashboard/i18n/locale/it/agentMgmt.json new file mode 100644 index 0000000..22a38f4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Operatori", + "HEADER_BTN_TXT": "Aggiungi Operatore", + "LOADING": "Recupero Operatori", + "DESCRIPTION": "Un operatore è un membro del tuo team di assistenza clienti che può visualizzare e rispondere ai messaggi degli utenti. L’elenco qui sotto mostra tutti gli operatori presenti nel tuo account.", + "LEARN_MORE": "Scopri i ruoli utente", + "AGENT_TYPES": { + "ADMINISTRATOR": "Amministratore", + "AGENT": "Operatore" + }, + "LIST": { + "404": "Non ci sono operatori associati a questo account", + "TITLE": "Gestisci gli operatori nel tuo team", + "DESC": "Puoi aggiungere/rimuovere operatori dal tuo team.", + "NAME": "Nome", + "EMAIL": "EMAIL", + "STATUS": "Stato", + "ACTIONS": "Azioni", + "VERIFIED": "Verificato", + "VERIFICATION_PENDING": "Verifica in Sospeso", + "AVAILABLE_CUSTOM_ROLE": "Permessi di ruolo personalizzati disponibili" + }, + "ADD": { + "TITLE": "Aggiungi operatore al tuo team", + "DESC": "Puoi aggiungere persone per gestire il supporto nelle tue Inbox.", + "CANCEL_BUTTON_TEXT": "Annulla", + "FORM": { + "NAME": { + "LABEL": "Nome Operatore", + "PLACEHOLDER": "Inserisci un nome operatore" + }, + "AGENT_TYPE": { + "LABEL": "Ruolo", + "PLACEHOLDER": "Seleziona un ruolo", + "ERROR": "Ruolo richiesto" + }, + "EMAIL": { + "LABEL": "Indirizzo Email", + "PLACEHOLDER": "Inserisci un indirizzo email dell'operatore" + }, + "SUBMIT": "Aggiungi Operatore" + }, + "API": { + "SUCCESS_MESSAGE": "Operatore aggiunto correttamente", + "EXIST_MESSAGE": "Email dell'operatore già in uso, prova con un altro indirizzo email", + "ERROR_MESSAGE": "Impossibile connettersi al server Woot, riprova più tardi" + } + }, + "DELETE": { + "BUTTON_TEXT": "Elimina", + "API": { + "SUCCESS_MESSAGE": "Operatore eliminato correttamente", + "ERROR_MESSAGE": "Impossibile connettersi al server Woot, riprova più tardi" + }, + "CONFIRM": { + "TITLE": "Conferma Eliminazione", + "MESSAGE": "Sei sicuro di voler eliminare ", + "YES": "Sì, Elimina ", + "NO": "No, Mantieni " + } + }, + "EDIT": { + "TITLE": "Modifica operatore", + "FORM": { + "NAME": { + "LABEL": "Nome Operatore", + "PLACEHOLDER": "Inserisci un nome operatore" + }, + "AGENT_TYPE": { + "LABEL": "Ruolo", + "PLACEHOLDER": "Seleziona un ruolo", + "ERROR": "Ruolo richiesto" + }, + "EMAIL": { + "LABEL": "Indirizzo Email", + "PLACEHOLDER": "Inserisci un indirizzo email dell'operatore" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Disponibilità", + "PLACEHOLDER": "Seleziona uno stato di disponibilità", + "ERROR": "Disponibilità richiesta" + }, + "SUBMIT": "Modifica Operatore" + }, + "BUTTON_TEXT": "Modifica", + "CANCEL_BUTTON_TEXT": "Annulla", + "API": { + "SUCCESS_MESSAGE": "Operatore aggiornato correttamente", + "ERROR_MESSAGE": "Impossibile connettersi al server Woot, riprova più tardi" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Reimposta la password", + "ADMIN_SUCCESS_MESSAGE": "Un'email con le istruzioni per reimpostare la password è stata inviata all'operatore", + "SUCCESS_MESSAGE": "Password dell'operatore reimpostata correttamente", + "ERROR_MESSAGE": "Impossibile connettersi al server Woot, riprova più tardi" + } + }, + "SEARCH": { + "NO_RESULTS": "Nessun risultato trovato." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "Nessuno", + "TITLE": { + "AGENT": "Seleziona operatore", + "TEAM": "Seleziona team" + }, + "LIST": { + "NONE": "Nessuno" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "Nessun operatore trovato", + "TEAM": "Nessun team trovato" + }, + "PLACEHOLDER": { + "AGENT": "Cerca operatori", + "TEAM": "Cerca team", + "INPUT": "Cerca operatori" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/it/attributesMgmt.json new file mode 100644 index 0000000..f23da23 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Attributi Personalizzati", + "HEADER_BTN_TXT": "Aggiungi Attributo Personalizzato", + "LOADING": "Caricamento attributi personalizzati", + "DESCRIPTION": "Un attributo personalizzato tiene traccia di informazioni aggiuntive sui tuoi contatti o sulle conversazioni — ad esempio il piano di abbonamento o la data del primo acquisto. Puoi aggiungere diversi tipi di attributi personalizzati, come testo, elenchi o numeri, per raccogliere le informazioni specifiche di cui hai bisogno.", + "LEARN_MORE": "Scopri di più sugli attributi personalizzati", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Conversazione", + "CONTACT": "Contatto" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Testo", + "NUMBER": "Numero", + "LINK": "Link", + "DATE": "Data", + "LIST": "Elenco", + "CHECKBOX": "Checkbox" + }, + "ADD": { + "TITLE": "Aggiungi Attributo Personalizzato", + "SUBMIT": "Crea", + "CANCEL_BUTTON_TEXT": "Annulla", + "FORM": { + "NAME": { + "LABEL": "Nome Visualizzato", + "PLACEHOLDER": "Inserisci il nome da mostrare per l’attributo personalizzato", + "ERROR": "Nome richiesto" + }, + "DESC": { + "LABEL": "Descrizione", + "PLACEHOLDER": "Inserisci una descrizione dell'attributo personalizzato", + "ERROR": "Descrizione richiesta" + }, + "MODEL": { + "LABEL": "Si applica a", + "PLACEHOLDER": "Selezionane uno", + "ERROR": "Modello richiesto" + }, + "TYPE": { + "LABEL": "Tipo", + "PLACEHOLDER": "Seleziona un tipo di attributo", + "ERROR": "Tipo richiesto", + "LIST": { + "LABEL": "Valori dell’elenco", + "PLACEHOLDER": "Inserisci un valore da aggiungere all'elenco e premi il tasto invio", + "ERROR": "Deve avere almeno un valore" + } + }, + "KEY": { + "LABEL": "Chiave", + "PLACEHOLDER": "Inserisci la chiave dell'attributo personalizzato", + "ERROR": "Chiave richiesta", + "IN_VALID": "Chiave non valida" + }, + "REGEX_PATTERN": { + "LABEL": "Espressione regolare", + "PLACEHOLDER": "Inserisci un'espressione regolare per validare gli attributi personalizzati. (Opzionale)" + }, + "REGEX_CUE": { + "LABEL": "Suggerimento espressione regolare", + "PLACEHOLDER": "Inserisci un suggerimento per l'espressione regolare. (Opzionale)" + }, + "ENABLE_REGEX": { + "LABEL": "Abilita convalida espressione regolare" + } + }, + "API": { + "SUCCESS_MESSAGE": "Attributo personalizzato aggiunto con successo!", + "ERROR_MESSAGE": "Impossibile creare un Attributo Personalizzato. Riprova più tardi." + } + }, + "DELETE": { + "BUTTON_TEXT": "Elimina", + "API": { + "SUCCESS_MESSAGE": "Attributo Personalizzato eliminato con successo.", + "ERROR_MESSAGE": "Impossibile eliminare l'attributo personalizzato. Riprova." + }, + "CONFIRM": { + "TITLE": "Sei sicuro di voler eliminare - {attributeName}", + "PLACE_HOLDER": "Digita {attributeName} per confermare", + "MESSAGE": "L'eliminazione rimuoverà l'attributo personalizzato", + "YES": "Elimina ", + "NO": "Annulla" + } + }, + "EDIT": { + "TITLE": "Modifica Attributo Personalizzato", + "UPDATE_BUTTON_TEXT": "Aggiorna", + "TYPE": { + "LIST": { + "LABEL": "Valori dell’elenco", + "PLACEHOLDER": "Inserisci i valori da aggiungere all'elenco e premi il tasto invio" + } + }, + "API": { + "SUCCESS_MESSAGE": "Attributo Personalizzato aggiornato correttamente", + "ERROR_MESSAGE": "Si è verificato un errore durante l'aggiornamento dell'attributo personalizzato, riprova" + } + }, + "TABS": { + "HEADER": "Attributi Personalizzati", + "CONVERSATION": "Conversazione", + "CONTACT": "Contatto" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nome", + "DESCRIPTION": "Descrizione", + "TYPE": "Tipo", + "KEY": "Chiave" + }, + "BUTTONS": { + "EDIT": "Modifica", + "DELETE": "Elimina" + }, + "EMPTY_RESULT": { + "404": "Non ci sono attributi personalizzati creati", + "NOT_FOUND": "Non ci sono attributi personalizzati configurati" + }, + "REGEX_PATTERN": { + "LABEL": "Espressione regolare", + "PLACEHOLDER": "Inserisci un'espressione regolare per validare gli attributi personalizzati. (Opzionale)" + }, + "REGEX_CUE": { + "LABEL": "Suggerimento espressione regolare", + "PLACEHOLDER": "Inserisci un suggerimento per l'espressione regolare. (Opzionale)" + }, + "ENABLE_REGEX": { + "LABEL": "Abilita convalida espressione regolare" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Risoluzione" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/auditLogs.json b/app/javascript/dashboard/i18n/locale/it/auditLogs.json new file mode 100644 index 0000000..730365a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Audit Logs", + "HEADER_BTN_TXT": "Aggiungi Audit Logs", + "LOADING": "Caricamento Audit Logs", + "DESCRIPTION": "Gli Audit Logs mantengono un registro di tutte le attività del tuo account, consentendoti di monitorare il tuo account, team o servizi.", + "LEARN_MORE": "Scopri di più sugli audit logs", + "SEARCH_404": "Non ci sono elementi che corrispondono a questa richiesta", + "SIDEBAR_TXT": "Audit Logs
Gli Audit Logs sono registri di eventi e azioni eseguite in un sistema Chatwoot.
", + "LIST": { + "404": "Non ci sono Audit Logs disponibili in questo account.", + "TITLE": "Gestisci Audit Logs", + "DESC": "Gli Audit Logs sono registri di eventi e azioni eseguite in un sistema Chatwoot.", + "TABLE_HEADER": { + "ACTIVITY": "Attività", + "TIME": "Orario", + "IP_ADDRESS": "Indirizzo IP" + } + }, + "API": { + "SUCCESS_MESSAGE": "Audit Logs caricati correttamente", + "ERROR_MESSAGE": "Impossibile connettersi al server Woot, riprova più tardi" + }, + "DEFAULT_USER": "System", + "AUTOMATION_RULE": { + "ADD": "{agentName} ha creato una nuova regola di automazione (#{id})", + "EDIT": "{agentName} ha aggiornato una regola di automazione (#{id})", + "DELETE": "{agentName} ha eliminato una regola di automazione (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} ha invitato {invitee} nell'account come {role}", + "EDIT": { + "SELF": "{agentName} ha cambiato il suo {attributes} in {values}", + "OTHER": "{agentName} ha cambiato {attributes} di {user} in {values}", + "DELETED": "{agentName} ha cambiato {attributes} di un utente eliminato in {values}" + } + }, + "INBOX": { + "ADD": "{agentName} ha creato una nuova inbox (#{id})", + "EDIT": "{agentName} ha aggiornato una inbox (#{id})", + "DELETE": "{agentName} ha eliminato una inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} ha creato un nuovo webhook (#{id})", + "EDIT": "{agentName} ha aggiornato un webhook (#{id})", + "DELETE": "{agentName} ha eliminato un webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} ha eseguito l'accesso", + "SIGN_OUT": "{agentName} si è disconnesso" + }, + "TEAM": { + "ADD": "{agentName} ha creato un nuovo team (#{id})", + "EDIT": "{agentName} ha aggiornato un team (#{id})", + "DELETE": "{agentName} ha eliminato un team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} ha creato una nuova macro (#{id})", + "EDIT": "{agentName} ha aggiornato una macro (#{id})", + "DELETE": "{agentName} ha eliminato una macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} ha aggiunto {user} alla inbox (#{inbox_id})", + "REMOVE": "{agentName} ha rimosso {user} dalla inbox (#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} ha aggiunto {user} al team (#{team_id})", + "REMOVE": "{agentName} ha rimosso {user} dal team (#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} ha aggiornato la configurazione dell'account (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} ha eliminato la conversazione #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/automation.json b/app/javascript/dashboard/i18n/locale/it/automation.json new file mode 100644 index 0000000..b4d400e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automazioni", + "DESCRIPTION": "Le automazioni possono sostituire e semplificare i processi esistenti che richiedono azioni manuale, ad esempio l'aggiunta di etichette e l'assegnazione di conversazioni all'operatore più adatto. Grazie alle automazioni i team possono concentrarsi sui propri punti di forza e ridurre il tempo dedicato alle attività ripetitive.", + "LEARN_MORE": "Scopri di più sulle automazioni", + "HEADER_BTN_TXT": "Aggiungi Regola di Automazione", + "LOADING": "Caricamento regole di automazione", + "ADD": { + "TITLE": "Aggiungi Regola di Automazione", + "SUBMIT": "Crea", + "CANCEL_BUTTON_TEXT": "Annulla", + "FORM": { + "NAME": { + "LABEL": "Nome Regola", + "PLACEHOLDER": "Inserisci il nome della regola", + "ERROR": "Nome richiesto" + }, + "DESC": { + "LABEL": "Descrizione", + "PLACEHOLDER": "Inserisci la descrizione della regola", + "ERROR": "Descrizione richiesta" + }, + "EVENT": { + "LABEL": "Evento", + "PLACEHOLDER": "Selezionane uno", + "ERROR": "Evento richiesto" + }, + "CONDITIONS": { + "LABEL": "Condizioni" + }, + "ACTIONS": { + "LABEL": "Azioni" + } + }, + "CONDITION_BUTTON_LABEL": "Aggiungi Condizione", + "ACTION_BUTTON_LABEL": "Aggiungi Azione", + "API": { + "SUCCESS_MESSAGE": "Regola di automazione aggiunta con successo", + "ERROR_MESSAGE": "Impossibile creare una regola di automazione, riprova più tardi" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nome", + "DESCRIPTION": "Descrizione", + "ACTIVE": "Attiva", + "CREATED_ON": "Creata il" + }, + "404": "Nessuna regola di automazione trovata" + }, + "DELETE": { + "TITLE": "Elimina Regola Di Automazione", + "SUBMIT": "Elimina", + "CANCEL_BUTTON_TEXT": "Annulla", + "CONFIRM": { + "TITLE": "Conferma Eliminazione", + "MESSAGE": "Sei sicuro di voler eliminare ", + "YES": "Sì, Elimina ", + "NO": "No, Mantienila " + }, + "API": { + "SUCCESS_MESSAGE": "Regola di automazione eliminata con successo", + "ERROR_MESSAGE": "Impossibile eliminare la regola di automazione, riprova più tardi" + } + }, + "EDIT": { + "TITLE": "Modifica Regola Di Automazione", + "SUBMIT": "Aggiorna", + "CANCEL_BUTTON_TEXT": "Annulla", + "API": { + "SUCCESS_MESSAGE": "Regola di automazione aggiornata con successo", + "ERROR_MESSAGE": "Impossibile aggiornare la regola di automazione, riprova più tardi" + } + }, + "CLONE": { + "TOOLTIP": "Clona", + "API": { + "SUCCESS_MESSAGE": "Automazione clonata con successo", + "ERROR_MESSAGE": "Impossibile clonare la regola di automazione, riprova più tardi" + } + }, + "FORM": { + "EDIT": "Modifica", + "CREATE": "Crea", + "DELETE": "Elimina", + "CANCEL": "Annulla", + "RESET_MESSAGE": "Cambiare il tipo di evento resetterà le condizioni e gli eventi che hai aggiunto di seguito" + }, + "CONDITION": { + "DELETE_MESSAGE": "È necessaria almeno una condizione per salvare", + "CONTACT_CUSTOM_ATTR_LABEL": "Attributi Personalizzati Contatti", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Attributi Personalizzati Conversazioni" + }, + "ACTION": { + "DELETE_MESSAGE": "È necessario avere almeno una azione da salvare", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Inserisci qui il tuo messaggio", + "TEAM_DROPDOWN_PLACEHOLDER": "Seleziona i team", + "EMAIL_INPUT_PLACEHOLDER": "Inserisci email", + "URL_INPUT_PLACEHOLDER": "Inserisci URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Attiva Regola di Automazione", + "DEACTIVATION_TITLE": "Disattiva Regola di Automazione", + "ACTIVATION_DESCRIPTION": "Questa azione attiverà la regola di automazione '{automationName}'. Sei sicuro di voler procedere?", + "DEACTIVATION_DESCRIPTION": "Questa azione disattiverà la regola di automazione '{automationName}'. Sei sicuro di voler procedere?", + "ACTIVATION_SUCCESFUL": "Regola di automazione attivata con successo", + "DEACTIVATION_SUCCESFUL": "Regola di automazione disattivata con successo", + "ACTIVATION_ERROR": "Impossibile attivare l'automazione, riprova più tardi", + "DEACTIVATION_ERROR": "Impossibile disattivare l'automazione, riprova più tardi", + "CONFIRMATION_LABEL": "Sì", + "CANCEL_LABEL": "No" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Impossibile caricare l'allegato, riprova", + "LABEL_IDLE": "Carica Allegato", + "LABEL_UPLOADING": "Caricamento...", + "LABEL_UPLOADED": "Caricato Con Successo", + "LABEL_UPLOAD_FAILED": "Caricamento Fallito" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Chiave dell'attributo richiesta", + "FILTER_OPERATOR_REQUIRED": "Operatore di filtro richiesto", + "VALUE_REQUIRED": "Valore richiesto", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Il valore deve essere compreso tra 1 e 998", + "ACTION_PARAMETERS_REQUIRED": "Parametri di azione richiesti", + "ATLEAST_ONE_CONDITION_REQUIRED": "È richiesta almeno una condizione", + "ATLEAST_ONE_ACTION_REQUIRED": "È necessaria almeno un'azione" + }, + "NONE_OPTION": "Nessuno", + "EVENTS": { + "CONVERSATION_CREATED": "Conversazione Creata", + "CONVERSATION_UPDATED": "Conversazione Aggiornata", + "MESSAGE_CREATED": "Messaggio Creato", + "CONVERSATION_RESOLVED": "Conversazione Risolta", + "CONVERSATION_OPENED": "Conversazione Aperta" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assegna a un Operatore", + "ASSIGN_TEAM": "Assegna a un Team", + "ADD_LABEL": "Aggiungi Etichetta", + "REMOVE_LABEL": "Rimuovi Etichetta", + "SEND_EMAIL_TO_TEAM": "Invia un'email al Team", + "SEND_EMAIL_TRANSCRIPT": "Invia una Trascrizione Email", + "MUTE_CONVERSATION": "Silenzia Conversazione", + "SNOOZE_CONVERSATION": "Posticipa Conversazione", + "RESOLVE_CONVERSATION": "Risolvi Conversazione", + "SEND_WEBHOOK_EVENT": "Invia Evento Webhook", + "SEND_ATTACHMENT": "Invia Allegato", + "SEND_MESSAGE": "Invia un Messaggio", + "ADD_PRIVATE_NOTE": "Aggiungi una Nota Privata", + "CHANGE_PRIORITY": "Modifica Priorità", + "ADD_SLA": "Aggiungi SLA", + "OPEN_CONVERSATION": "Riapri conversazione" + }, + "MESSAGE_TYPES": { + "INCOMING": "Messaggio in Arrivo", + "OUTGOING": "Messaggio in Uscita" + }, + "PRIORITY_TYPES": { + "NONE": "Nessuna", + "LOW": "Bassa", + "MEDIUM": "Media", + "HIGH": "Alta", + "URGENT": "Urgente" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Tipo di Messaggio", + "MESSAGE_CONTAINS": "Il Messaggio Contiene", + "EMAIL": "Email", + "INBOX": "Inbox", + "CONVERSATION_LANGUAGE": "Lingua Conversazione", + "PHONE_NUMBER": "Numero di Telefono", + "STATUS": "Stato", + "BROWSER_LANGUAGE": "Lingua del Browser", + "MAIL_SUBJECT": "Oggetto Email", + "COUNTRY_NAME": "Paese", + "REFERER_LINK": "Link Referrer", + "ASSIGNEE_NAME": "Assegnatario", + "TEAM_NAME": "Team", + "PRIORITY": "Priorità", + "LABELS": "Etichette" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/bulkActions.json b/app/javascript/dashboard/i18n/locale/it/bulkActions.json new file mode 100644 index 0000000..55431f7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} conversazioni selezionate", + "AGENT_SELECT_LABEL": "Seleziona un operatore", + "ASSIGN_CONFIRMATION_LABEL": "Sei sicuro di voler assegnare {conversationCount} {conversationLabel} a", + "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Torna indietro", + "ASSIGN_LABEL": "Assegna", + "YES": "Sì", + "SEARCH_INPUT_PLACEHOLDER": "Cerca", + "ASSIGN_AGENT_TOOLTIP": "Assegna operatore", + "ASSIGN_TEAM_TOOLTIP": "Assegna team", + "ASSIGN_SUCCESFUL": "Conversazioni assegnate correttamente.", + "ASSIGN_FAILED": "Impossibile assegnare le conversazioni. Riprova.", + "RESOLVE_SUCCESFUL": "Conversazioni risolte correttamente.", + "RESOLVE_FAILED": "Impossibile risolvere le conversazioni. Riprova.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Solo le conversazioni visibili in questa pagina sono selezionate.", + "AGENT_LIST_LOADING": "Caricamento operatori", + "UPDATE": { + "CHANGE_STATUS": "Cambia stato", + "SNOOZE_UNTIL": "Posticipa", + "UPDATE_SUCCESFUL": "Stato della conversazione aggiornato correttamente.", + "UPDATE_FAILED": "Impossibile aggiornare le conversazioni. Riprova." + }, + "LABELS": { + "ASSIGN_LABELS": "Assegna etichette", + "NO_LABELS_FOUND": "Nessuna etichetta trovata", + "ASSIGN_SELECTED_LABELS": "Assegna etichette selezeionate", + "ASSIGN_SUCCESFUL": "Etichette assegnate correttamente.", + "ASSIGN_FAILED": "Impossibile assegnare le etichette. Riprova." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Seleziona team", + "NONE": "Nessuno", + "NO_TEAMS_AVAILABLE": "Non ci sono ancora team aggiunti a questo account.", + "ASSIGN_SELECTED_TEAMS": "Assegna team selezionato.", + "ASSIGN_SUCCESFUL": "Team assegnati con successo.", + "ASSIGN_FAILED": "Impossibile assegnare il team. Riprova." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/campaign.json b/app/javascript/dashboard/i18n/locale/it/campaign.json new file mode 100644 index 0000000..9831fe8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Campagne live chat", + "NEW_CAMPAIGN": "Crea campagna", + "CARD": { + "STATUS": { + "ENABLED": "Attiva", + "DISABLED": "Inattiva" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Inviata da", + "BOT": "Bot", + "FROM": "da", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "Nessuna campagna live chat disponibile", + "SUBTITLE": "Connettiti con i tuoi clienti usando messaggi proattivi. Clicca su 'Crea campagna' per iniziare." + }, + "CREATE": { + "TITLE": "Crea una campagna live chat", + "CANCEL_BUTTON_TEXT": "Annulla", + "CREATE_BUTTON_TEXT": "Crea", + "FORM": { + "TITLE": { + "LABEL": "Titolo", + "PLACEHOLDER": "Inserisci il titolo della campagna", + "ERROR": "Titolo richiesto" + }, + "MESSAGE": { + "LABEL": "Messaggio", + "PLACEHOLDER": "Inserisci il messaggio della campagna", + "ERROR": "Messaggio richiesto" + }, + "INBOX": { + "LABEL": "Seleziona Inbox", + "PLACEHOLDER": "Seleziona Inbox", + "ERROR": "Inbox richiesta" + }, + "SENT_BY": { + "LABEL": "Inviata da", + "PLACEHOLDER": "Seleziona mittente", + "ERROR": "Mittente richiesto" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Inserisci un URL valido", + "ERROR": "Inserisci un URL valido" + }, + "TIME_ON_PAGE": { + "LABEL": "Tempo sulla pagina (secondi)", + "PLACEHOLDER": "Inserisci il tempo in secondi", + "ERROR": "Tempo sulla pagina richiesto" + }, + "OTHER_PREFERENCES": { + "TITLE": "Altre preferenze", + "ENABLED": "Attiva campagna", + "TRIGGER_ONLY_BUSINESS_HOURS": "Attiva solo durante l'orario lavorativo" + }, + "BUTTONS": { + "CREATE": "Crea", + "CANCEL": "Annulla" + }, + "API": { + "SUCCESS_MESSAGE": "Campagna live chat creata con successo", + "ERROR_MESSAGE": "Si è verificato un errore, riprova." + } + } + }, + "EDIT": { + "TITLE": "Modifica campagna live chat", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Campagna live chat aggiornata con successo", + "ERROR_MESSAGE": "Si è verificato un errore, riprova." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "Campagne SMS", + "NEW_CAMPAIGN": "Crea campagna", + "EMPTY_STATE": { + "TITLE": "Nessuna campagna SMS disponibile", + "SUBTITLE": "Avvia una campagna SMS per raggiungere direttamente i tuoi clienti. Invia offerte o fai annunci con facilità. Clicca su 'Crea campagna' per iniziare." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completata", + "SCHEDULED": "Programmata" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Inviata da", + "ON": "il" + } + }, + "CREATE": { + "TITLE": "Crea campagna SMS", + "CANCEL_BUTTON_TEXT": "Annulla", + "CREATE_BUTTON_TEXT": "Crea", + "FORM": { + "TITLE": { + "LABEL": "Titolo", + "PLACEHOLDER": "Inserisci il titolo della campagna", + "ERROR": "Titolo richiesto" + }, + "MESSAGE": { + "LABEL": "Messaggio", + "PLACEHOLDER": "Inserisci il messaggio della campagna", + "ERROR": "Messaggio richiesto" + }, + "INBOX": { + "LABEL": "Seleziona Inbox", + "PLACEHOLDER": "Seleziona Inbox", + "ERROR": "Inbox richiesta" + }, + "AUDIENCE": { + "LABEL": "Pubblico", + "PLACEHOLDER": "Seleziona le etichette dei clienti", + "ERROR": "Pubblico richiesto" + }, + "SCHEDULED_AT": { + "LABEL": "Orario programmato", + "PLACEHOLDER": "Seleziona l'orario", + "ERROR": "È richiesto un orario programmato" + }, + "BUTTONS": { + "CREATE": "Crea", + "CANCEL": "Annulla" + }, + "API": { + "SUCCESS_MESSAGE": "Campagna SMS creata con successo", + "ERROR_MESSAGE": "Si è verificato un errore. Riprova." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "Campagne WhatsApp", + "NEW_CAMPAIGN": "Crea campagna", + "EMPTY_STATE": { + "TITLE": "Nessuna campagna WhatsApp disponibile", + "SUBTITLE": "Avvia una campagna WhatsApp per raggiungere direttamente i tuoi clienti. Invia offerte o fai annunci con facilità. Clicca su 'Crea campagna' per iniziare." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completata", + "SCHEDULED": "Programmata" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Inviata da", + "ON": "il" + } + }, + "CREATE": { + "TITLE": "Crea campagna WhatsApp", + "CANCEL_BUTTON_TEXT": "Annulla", + "CREATE_BUTTON_TEXT": "Crea", + "FORM": { + "TITLE": { + "LABEL": "Titolo", + "PLACEHOLDER": "Inserisci il titolo della campagna", + "ERROR": "Titolo richiesto" + }, + "INBOX": { + "LABEL": "Seleziona Inbox", + "PLACEHOLDER": "Seleziona Inbox", + "ERROR": "Inbox richiesta" + }, + "TEMPLATE": { + "LABEL": "Modello WhatsApp", + "PLACEHOLDER": "Seleziona un modello", + "INFO": "Seleziona un modello da utilizzare per questa campagna.", + "ERROR": "Modello richiesto", + "PREVIEW_TITLE": "Elabora {templateName}", + "LANGUAGE": "Lingua", + "CATEGORY": "Categoria", + "VARIABLES_LABEL": "Variabili", + "VARIABLE_PLACEHOLDER": "Inserisci il valore per {variable}" + }, + "AUDIENCE": { + "LABEL": "Pubblico", + "PLACEHOLDER": "Seleziona le etichette dei clienti", + "ERROR": "Pubblico richiesto" + }, + "SCHEDULED_AT": { + "LABEL": "Orario programmato", + "PLACEHOLDER": "Seleziona l'orario", + "ERROR": "È richiesto un orario programmato" + }, + "BUTTONS": { + "CREATE": "Crea", + "CANCEL": "Annulla" + }, + "API": { + "SUCCESS_MESSAGE": "Campagna WhatsApp creata con successo", + "ERROR_MESSAGE": "Si è verificato un errore. Riprova." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Sei sicuro di voler eliminare?", + "DESCRIPTION": "L'azione di eliminazione è permanente e non può essere annullata.", + "CONFIRM": "Elimina", + "API": { + "SUCCESS_MESSAGE": "Campagna eliminata con successo", + "ERROR_MESSAGE": "Si è verificato un errore. Riprova." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/it/cannedMgmt.json new file mode 100644 index 0000000..69273f6 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Risposte Predefinite", + "LEARN_MORE": "Scopri di più sulle risposte predefinite", + "DESCRIPTION": "Le Risposte Predefinite sono modelli di risposte preparate che ti aiutano a rispondere rapidamente alle conversazioni. Gli operatori possono digitare il carattere '/' seguito dallo shortcode per inserire una risposta predefinita durante una conversazione. ", + "HEADER_BTN_TXT": "Aggiungi risposta predefinita", + "LOADING": "Caricamento risposte predefinite...", + "SEARCH_404": "Non ci sono elementi che corrispondono a questa richiesta.", + "LIST": { + "404": "Non ci sono risposte predefinite disponibili in questo account.", + "TITLE": "Gestisci le risposte predefinite", + "DESC": "Le risposte predefinite sono modelli di risposte preparate che possono essere utilizzate per rispondere rapidamente alle conversazioni.", + "TABLE_HEADER": { + "SHORT_CODE": "Short code", + "CONTENT": "Contenuto", + "ACTIONS": "Azioni" + } + }, + "ADD": { + "TITLE": "Aggiungi risposta predefinita", + "DESC": "Le risposte predefinite sono modelli di risposte preparate che possono essere utilizzate per rispondere rapidamente alle conversazioni.", + "CANCEL_BUTTON_TEXT": "Annulla", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Inserisci uno short code.", + "ERROR": "Short Code richiesto." + }, + "CONTENT": { + "LABEL": "Messaggio", + "PLACEHOLDER": "Scrivi il messaggio che vuoi salvare come modello da usare più tardi.", + "ERROR": "Messaggio richiesto." + }, + "SUBMIT": "Invia" + }, + "API": { + "SUCCESS_MESSAGE": "Risposta predefinita aggiunta correttamente.", + "ERROR_MESSAGE": "Impossibile connettersi al server Woot, riprova più tardi" + } + }, + "EDIT": { + "TITLE": "Modifica risposta predefinita", + "CANCEL_BUTTON_TEXT": "Annulla", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Inserisci uno shortcode.", + "ERROR": "Short code richiesto." + }, + "CONTENT": { + "LABEL": "Messaggio", + "PLACEHOLDER": "Scrivi il messaggio che vuoi salvare come modello da usare più tardi.", + "ERROR": "Messaggio richiesto." + }, + "SUBMIT": "Invia" + }, + "BUTTON_TEXT": "Modifica", + "API": { + "SUCCESS_MESSAGE": "Risposta predefinita aggiornata correttamente.", + "ERROR_MESSAGE": "Impossibile connettersi al server Woot, riprova più tardi" + } + }, + "DELETE": { + "BUTTON_TEXT": "Elimina", + "API": { + "SUCCESS_MESSAGE": "Risposta predefinita eliminata correttamente.", + "ERROR_MESSAGE": "Impossibile connettersi al server Woot, riprova più tardi" + }, + "CONFIRM": { + "TITLE": "Conferma eliminazione", + "MESSAGE": "Sei sicuro di voler eliminare ", + "YES": "Sì, elimina ", + "NO": "No, mantieni " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/chatlist.json b/app/javascript/dashboard/i18n/locale/it/chatlist.json new file mode 100644 index 0000000..0e0c7f5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Caricamento conversazioni", + "LOAD_MORE_CONVERSATIONS": "Carica altre conversazioni", + "EOF": "Tutte le conversazioni caricate 🎉", + "LIST": { + "404": "Non ci sono conversazioni attive in questo gruppo." + }, + "FAILED_TO_SEND": "Invio non riuscito", + "TAB_HEADING": "Conversazioni", + "MENTION_HEADING": "Menzioni", + "UNATTENDED_HEADING": "Non Partecipate", + "SEARCH": { + "INPUT": "Cerca persone, chat, risposte salvate .." + }, + "FILTER_ALL": "Tutte", + "ASSIGNEE_TYPE_TABS": { + "me": "Mie", + "unassigned": "Non Assegnate", + "all": "Tutte" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Aperte" + }, + "resolved": { + "TEXT": "Risolte" + }, + "pending": { + "TEXT": "In Sospeso" + }, + "snoozed": { + "TEXT": "Posticipate" + }, + "all": { + "TEXT": "Tutte" + } + }, + "VIEW_FILTER": "Visualizza", + "SORT_TOOLTIP_LABEL": "Ordina conversazioni", + "CHAT_SORT": { + "STATUS": "Stato", + "ORDER_BY": "Ordina per" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Creata", + "OLDEST": "Creata il:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Ultima attività:", + "ACTIVE": "Ultima attività" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Ultima attività: prima le più vecchie" + }, + "last_activity_at_desc": { + "TEXT": "Ultima attività: prima le più recenti" + }, + "created_at_desc": { + "TEXT": "Data creazione: prima le più recenti" + }, + "created_at_asc": { + "TEXT": "Data creazione: prima le più vecchie" + }, + "priority_desc": { + "TEXT": "Priorità: prima le più importanti" + }, + "priority_asc": { + "TEXT": "Priorità: prima le meno importanti" + }, + "waiting_since_asc": { + "TEXT": "In attesa di risposta: prima più tempo in attesa" + }, + "waiting_since_desc": { + "TEXT": "In attesa di risposta: prima meno tempo in attesa" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Messaggio immagine" + }, + "audio": { + "CONTENT": "Messaggio audio" + }, + "video": { + "CONTENT": "Messaggio video" + }, + "file": { + "CONTENT": "File Allegato" + }, + "location": { + "CONTENT": "Posizione" + }, + "ig_reel": { + "CONTENT": "Reel Instagram" + }, + "fallback": { + "CONTENT": "ha condiviso un url" + }, + "contact": { + "CONTENT": "Contatto condiviso" + }, + "embed": { + "CONTENT": "Contenuto embeddato" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Ordina conversazione", + "DROPDOWN_TITLE": "Ordina per", + "ITEMS": { + "LATEST": { + "NAME": "Ultima attività", + "LABEL": "Ultima attività" + }, + "CREATED_AT": { + "NAME": "Creata alle", + "LABEL": "Creata alle" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Ultimo messaggio dell'utente alle", + "LABEL": "Ultimo messaggio" + } + } + }, + "RECEIVED_VIA_EMAIL": "Ricevuto via email", + "VIEW_TWEET_IN_TWITTER": "Visualizza tweet su Twitter", + "REPLY_TO_TWEET": "Rispondi a questo tweet", + "LINK_TO_STORY": "Vai alla storia di Instagram", + "SENT": "Inviato correttamente", + "READ": "Letto correttamente", + "DELIVERED": "Consegnato correttamente", + "NO_MESSAGES": "Nessun Messaggio", + "NO_CONTENT": "Nessun contenuto disponibile", + "HIDE_QUOTED_TEXT": "Nascondi Testo Citato", + "SHOW_QUOTED_TEXT": "Mostra Testo Citato", + "MESSAGE_READ": "Letto", + "SENDING": "Invio" + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/companies.json b/app/javascript/dashboard/i18n/locale/it/companies.json new file mode 100644 index 0000000..96c4d38 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Aziende", + "SORT_BY": { + "LABEL": "Ordina per", + "OPTIONS": { + "NAME": "Nome", + "DOMAIN": "Dominio", + "CREATED_AT": "Creata alle", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Ordina", + "OPTIONS": { + "ASCENDING": "Ascendente", + "DESCENDING": "Discendente" + } + }, + "SEARCH_PLACEHOLDER": "Cerca aziende...", + "LOADING": "Caricamento aziende...", + "UNNAMED": "Azienda Senza Nome", + "CONTACTS_COUNT": "{n} contatto | {n} contatti", + "EMPTY_STATE": { + "TITLE": "Nessuna azienda trovata" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Mostrando {startItem} – {endItem} di {totalItems} azienda | Mostrando {startItem} – {endItem} di {totalItems} aziende" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/components.json b/app/javascript/dashboard/i18n/locale/it/components.json new file mode 100644 index 0000000..9f559ca --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Mostrando {startItem} - {endItem} di {totalItems} elementi", + "CURRENT_PAGE_INFO": "{currentPage} di {totalPages} pagine" + }, + "COMBOBOX": { + "PLACEHOLDER": "Seleziona un'opzione...", + "EMPTY_SEARCH_RESULTS": "Nessun elemento trovato per il termine di ricerca `{searchTerm}`", + "EMPTY_STATE": "Nessun risultato trovato.", + "SEARCH_PLACEHOLDER": "Cerca...", + "MORE": "+{count} altre" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Cerca...", + "EMPTY_STATE": "Nessun risultato trovato.", + "SEARCHING": "Ricerca..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Annulla", + "CONFIRM": "Conferma" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Cerca Paese", + "ERROR": "Il numero di telefono deve essere vuoto o in formato E.164", + "DIAL_CODE_ERROR": "Seleziona un codice di chiamata dalla lista" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Autore non disponibile" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Scopri di più", + "WATCH_VIDEO": "Guarda video" + }, + "DURATION_INPUT": { + "MINUTES": "Minuti", + "HOURS": "Ore", + "DAYS": "Giorni", + "PLACEHOLDER": "Inserisci durata" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/contact.json b/app/javascript/dashboard/i18n/locale/it/contact.json new file mode 100644 index 0000000..710a694 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Non Disponibile", + "EMAIL_ADDRESS": "Indirizzo Email", + "PHONE_NUMBER": "Numero di telefono", + "IDENTIFIER": "Identificatore", + "COPY_SUCCESSFUL": "Copiato negli appunti", + "COMPANY": "Azienda", + "LOCATION": "Posizione", + "BROWSER_LANGUAGE": "Lingua del Browser", + "CONVERSATION_TITLE": "Dettagli Conversazione", + "VIEW_PROFILE": "Visualizza Profilo", + "BROWSER": "Browser", + "OS": "Sistema Operativo", + "INITIATED_FROM": "Iniziato da", + "INITIATED_AT": "Avviata alle", + "IP_ADDRESS": "Indirizzo IP", + "CREATED_AT_LABEL": "Creato il", + "NEW_MESSAGE": "Nuovo messaggio", + "CALL": "Chiama", + "CALL_INITIATED": "Chiamando il contatto…", + "CALL_FAILED": "Impossibile avviare la chiamata. Riprova.", + "VOICE_INBOX_PICKER": { + "TITLE": "Scegli una inbox vocale" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "Non ci sono precedenti conversazioni associate a questo contatto.", + "TITLE": "Conversazioni Precedenti" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Etichette di Contatto", + "ERROR": "Impossibile aggiornare le etichette" + }, + "CONVERSATION": { + "TITLE": "Etichette di Conversazione", + "ADD_BUTTON": "Aggiungi Etichette" + }, + "LABEL_SELECT": { + "TITLE": "Aggiungi Etichette", + "PLACEHOLDER": "Cerca etichette", + "NO_RESULT": "Nessuna etichetta trovata", + "CREATE_LABEL": "Crea nuova etichetta" + } + }, + "MERGE_CONTACT": "Unisci contatto", + "CONTACT_ACTIONS": "Azioni contatto", + "MUTE_CONTACT": "Blocca Contatto", + "UNMUTE_CONTACT": "Sblocca Contatto", + "MUTED_SUCCESS": "Questo contatto è stato bloccato. Non sarai avvisato di nessuna conversazione futura.", + "UNMUTED_SUCCESS": "Questo contatto è stato sbloccato.", + "SEND_TRANSCRIPT": "Invia Trascrizione", + "EDIT_LABEL": "Modifica", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Attributi Personalizzati", + "CONTACT_LABELS": "Etichette di Contatto", + "PREVIOUS_CONVERSATIONS": "Conversazioni Precedenti", + "NO_RECORDS_FOUND": "Nessun attributo trovato" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Modifica Contatto", + "TITLE": "Modifica Contatto", + "DESC": "Modifica dettagli contatto" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Elimina Contatto", + "TITLE": "Elimina contatto", + "DESC": "Elimina dettagli contatto", + "CONFIRM": { + "TITLE": "Conferma eliminazione", + "MESSAGE": "Sei sicuro di voler eliminare ", + "YES": "Sì, Elimina", + "NO": "No, Mantieni" + }, + "API": { + "SUCCESS_MESSAGE": "Contatto eliminato con successo", + "ERROR_MESSAGE": "Impossibile eliminare il contatto. Riprova più tardi." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Invia", + "CANCEL": "Annulla", + "AVATAR": { + "LABEL": "Avatar del contatto" + }, + "NAME": { + "PLACEHOLDER": "Inserisci il nome completo del contatto", + "LABEL": "Nome Completo" + }, + "BIO": { + "PLACEHOLDER": "Inserisci la bio del contatto", + "LABEL": "Bio" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Inserisci l'indirizzo email del contatto", + "LABEL": "Indirizzo Email", + "DUPLICATE": "Questo indirizzo email è in uso per un altro contatto.", + "ERROR": "Inserisci un indirizzo email valido." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Inserisci il numero di telefono del contatto", + "LABEL": "Numero di Telefono", + "HELP": "Il numero di telefono dovrebbe essere di formato E.164 es.: +3915555555 [+][codice nazione][codice zona][numero di telefono locale]", + "ERROR": "Il numero di telefono deve essere vuoto o di formato E.164", + "DIAL_CODE_ERROR": "Seleziona un codice di chiamata dalla lista", + "DUPLICATE": "Questo numero di telefono è in uso per un altro contatto." + }, + "LOCATION": { + "PLACEHOLDER": "Inserisci la posizione del contatto", + "LABEL": "Posizione" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Inserisci il nome dell'azienda", + "LABEL": "Nome Azienda" + }, + "COUNTRY": { + "PLACEHOLDER": "Inserisci il nome del Paese", + "LABEL": "Nome Paese", + "SELECT_PLACEHOLDER": "Seleziona", + "REMOVE": "Rimuovi", + "SELECT_COUNTRY": "Seleziona Paese" + }, + "CITY": { + "PLACEHOLDER": "Inserisci il nome della città", + "LABEL": "Nome Città" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Inserisci il nome utente di Facebook", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Inserisci il nome utente Twitter", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Inserisci il nome utente LinkedIn", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Inserisci il nome utente GitHub", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Avatar del contatto eliminato correttamente", + "ERROR_MESSAGE": "Impossibile eliminare l'avatar del contatto. Riprova più tardi." + } + }, + "SUCCESS_MESSAGE": "Contatto salvato con successo", + "ERROR_MESSAGE": "Si è verificato un errore, riprova" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Avvia conversazione", + "TITLE": "Nuova conversazione", + "DESC": "Avvia una nuova conversazione inviando un nuovo messaggio.", + "NO_INBOX": "Impossibile trovare una Inbox per avviare una nuova conversazione con questo contatto.", + "FORM": { + "TO": { + "LABEL": "A" + }, + "INBOX": { + "LABEL": "Via Inbox", + "PLACEHOLDER": "Seleziona una inbox di origine", + "ERROR": "Seleziona una Inbox" + }, + "SUBJECT": { + "LABEL": "Oggetto", + "PLACEHOLDER": "Oggetto", + "ERROR": "L'oggetto non può essere vuoto" + }, + "MESSAGE": { + "LABEL": "Messaggio", + "PLACEHOLDER": "Scrivi qui il tuo messaggio", + "ERROR": "Il messaggio non può essere vuoto" + }, + "ATTACHMENTS": { + "SELECT": "Seleziona file", + "HELP_TEXT": "Trascina qui i file o seleziona i file da allegare" + }, + "SUBMIT": "Invia messaggio", + "CANCEL": "Annulla", + "SUCCESS_MESSAGE": "Messaggio inviato!", + "GO_TO_CONVERSATION": "Visualizza", + "ERROR_MESSAGE": "Impossibile inviare! Riprova" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Profili Social" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Aggiungi attributo personalizzato", + "COPY_SUCCESSFUL": "Copiato negli appunti", + "SHOW_MORE": "Mostra tutti gli attributi", + "SHOW_LESS": "Mostra meno attributi", + "ACTIONS": { + "COPY": "Copia attributo", + "DELETE": "Elimina attributo", + "EDIT": "Modifica attributo" + }, + "ADD": { + "TITLE": "Crea attributo personalizzato", + "DESC": "Aggiungi informazioni personalizzate a questo contatto." + }, + "FORM": { + "CREATE": "Aggiungi attributo", + "CANCEL": "Annulla", + "NAME": { + "LABEL": "Nome attributo personalizzato", + "PLACEHOLDER": "Es: id shopify", + "ERROR": "Nome dell'attributo personalizzato non valido" + }, + "VALUE": { + "LABEL": "Valore attributo", + "PLACEHOLDER": "Es: 11901 " + }, + "ADD": { + "TITLE": "Crea nuovo attributo ", + "SUCCESS": "Attributo aggiunto con successo", + "ERROR": "Impossibile aggiungere l'attributo. Riprova più tardi" + }, + "UPDATE": { + "SUCCESS": "Attributo aggiornato con successo", + "ERROR": "Impossibile aggiornare l'attributo. Riprova più tardi" + }, + "DELETE": { + "SUCCESS": "Attributo eliminato con successo", + "ERROR": "Impossibile eliminare l'attributo. Riprova più tardi" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Aggiungi attributi", + "PLACEHOLDER": "Cerca attributi", + "NO_RESULT": "Nessun attributo trovato" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Seleziona valore", + "SEARCH_INPUT_PLACEHOLDER": "Cerca valore", + "NO_RESULT": "Nessun risultato trovato" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "È richiesto un valore valido", + "INVALID_URL": "URL non valido", + "INVALID_INPUT": "Input non valido" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Unisci contatti", + "DESCRIPTION": "Unisci i contatti per combinare due profili in uno, inclusi tutti gli attributi e le conversazioni. In caso di conflitto, gli attributi del contatto primario avranno la precedenza.", + "PRIMARY": { + "TITLE": "Contatto primario", + "HELP_LABEL": "Da eliminare" + }, + "PARENT": { + "TITLE": "Contatto da unire", + "PLACEHOLDER": "Cerca un contatto", + "HELP_LABEL": "Da mantenere" + }, + "SUMMARY": { + "TITLE": "Riepilogo", + "DELETE_WARNING": "Il contatto di {primaryContactName} verrà eliminato.", + "ATTRIBUTE_WARNING": "I dettagli del contatto di {primaryContactName} verranno copiati in {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Qualcosa è andato storto. Riprova più tardi." + }, + "FORM": { + "SUBMIT": " Unisci contatti", + "CANCEL": "Annulla", + "CHILD_CONTACT": { + "ERROR": "Seleziona un contatto figlio da unire" + }, + "SUCCESS_MESSAGE": "Contatto unito con successo", + "ERROR_MESSAGE": "Impossibile unire i contatti, riprova!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Contatti", + "SEARCH_TITLE": "Cerca contatti", + "ACTIVE_TITLE": "Contatti attivi", + "SEARCH_PLACEHOLDER": "Cerca...", + "MESSAGE_BUTTON": "Messaggio", + "SEND_MESSAGE": "Invia messaggio", + "BLOCK_CONTACT": "Blocca contatto", + "UNBLOCK_CONTACT": "Sblocca contatto", + "BREADCRUMB": { + "CONTACTS": "Contatti" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Aggiungi contatto", + "EXPORT_CONTACT": "Esporta contatti", + "IMPORT_CONTACT": "Importa contatti", + "SAVE_CONTACT": "Salva contatto", + "EMAIL_ADDRESS_DUPLICATE": "Questo indirizzo email è in uso per un altro contatto.", + "PHONE_NUMBER_DUPLICATE": "Questo numero di telefono è in uso per un altro contatto.", + "SUCCESS_MESSAGE": "Contatto salvato con successo", + "ERROR_MESSAGE": "Impossibile salvare il contatto. Riprova più tardi." + }, + "BLOCK_SUCCESS_MESSAGE": "Questo contatto è stato bloccato correttamente", + "BLOCK_ERROR_MESSAGE": "Impossibile bloccare il contatto. Riprova più tardi.", + "UNBLOCK_SUCCESS_MESSAGE": "Questo contatto è stato sbloccato correttamente", + "UNBLOCK_ERROR_MESSAGE": "Impossibile sbloccare il contatto. Riprova più tardi.", + "IMPORT_CONTACT": { + "TITLE": "Importa contatti", + "DESCRIPTION": "Importa contatti da un file CSV.", + "DOWNLOAD_LABEL": "Scarica un csv di esempio.", + "LABEL": "File CSV:", + "CHOOSE_FILE": "Seleziona file", + "CHANGE": "Cambia", + "CANCEL": "Annulla", + "IMPORT": "Importa", + "SUCCESS_MESSAGE": "Riceverai una notifica via email quando l'importazione sarà completata.", + "ERROR_MESSAGE": "Si è verificato un errore, riprova" + }, + "EXPORT_CONTACT": { + "TITLE": "Esporta contatti", + "DESCRIPTION": "Esporta rapidamente un file csv con i dettagli completi dei tuoi contatti", + "CONFIRM": "Esporta", + "SUCCESS_MESSAGE": "Esportazione in corso. Riceverai una notifica via email quando il file di esportazione sarà pronto per essere scaricato.", + "ERROR_MESSAGE": "Si è verificato un errore, riprova" + }, + "SORT_BY": { + "LABEL": "Ordina per", + "OPTIONS": { + "NAME": "Nome", + "EMAIL": "Email", + "PHONE_NUMBER": "Numero di telefono", + "COMPANY": "Azienda", + "COUNTRY": "Paese", + "CITY": "Città", + "LAST_ACTIVITY": "Ultima attività", + "CREATED_AT": "Data creazione" + } + }, + "ORDER": { + "LABEL": "Ordinamento", + "OPTIONS": { + "ASCENDING": "Ascendente", + "DESCENDING": "Discendente" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Vuoi salvare questo filtro?", + "CONFIRM": "Salva filtro", + "LABEL": "Nome", + "PLACEHOLDER": "Inserisci il nome del filtro", + "ERROR": "Inserisci un nome valido", + "SUCCESS_MESSAGE": "Filtro salvato correttamente", + "ERROR_MESSAGE": "Impossibile salvare il filtro. Riprova più tardi." + }, + "DELETE_SEGMENT": { + "TITLE": "Conferma Eliminazione", + "DESCRIPTION": "Sei sicuro di voler eliminare questo filtro?", + "CONFIRM": "Sì, Elimina", + "CANCEL": "No, Annulla", + "SUCCESS_MESSAGE": "Filtro eliminato con successo", + "ERROR_MESSAGE": "Impossibile eliminare il filtro. Riprova più tardi." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Mostrando {startItem} - {endItem} di {totalItems} contatti" + }, + "FILTER": { + "NAME": "Nome", + "EMAIL": "Email", + "PHONE_NUMBER": "Numero di telefono", + "IDENTIFIER": "Identificatore", + "COUNTRY": "Paese", + "CITY": "Città", + "CREATED_AT": "Data creazione", + "LAST_ACTIVITY": "Ultima attività", + "REFERER_LINK": "Link referente", + "BLOCKED": "Bloccato", + "BLOCKED_TRUE": "Vero", + "BLOCKED_FALSE": "Falso", + "BUTTONS": { + "CLEAR_FILTERS": "Rimuovi filtri", + "UPDATE_SEGMENT": "Aggiorna segmento", + "APPLY_FILTERS": "Applica filtri", + "ADD_FILTER": "Aggiungi filtro" + }, + "TITLE": "Filtra contatti", + "EDIT_SEGMENT": "Modifica segmento", + "SEGMENT": { + "LABEL": "Nome segmento", + "INPUT_PLACEHOLDER": "Inserisci il nome del segmento" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} altri filtri", + "CLEAR_FILTERS": "Rimuovi filtri" + } + }, + "CARD": { + "OF": "di", + "VIEW_DETAILS": "Visualizza dettagli", + "EDIT_DETAILS_FORM": { + "TITLE": "Modifica dettagli contatto", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Inserisci il nome" + }, + "LAST_NAME": { + "PLACEHOLDER": "Inserisci il cognome" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Inserisci l'indirizzo email", + "DUPLICATE": "Questo indirizzo email è in uso per un altro contatto." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Inserisci il numero di telefono", + "DUPLICATE": "Questo numero di telefono è in uso per un altro contatto." + }, + "CITY": { + "PLACEHOLDER": "Inserisci il nome della città" + }, + "COUNTRY": { + "PLACEHOLDER": "Seleziona Paese" + }, + "BIO": { + "PLACEHOLDER": "Inserisci la bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Inserisci il nome dell'azienda" + } + }, + "UPDATE_BUTTON": "Aggiorna contatto", + "SUCCESS_MESSAGE": "Contatto aggiornato correttamente", + "ERROR_MESSAGE": "Impossibile aggiornare il contatto. Riprova più tardi." + }, + "SOCIAL_MEDIA": { + "TITLE": "Modifica link social", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Aggiungi Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Aggiungi Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Aggiungi Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Aggiungi TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Aggiungi LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Aggiungi Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "Questa azione è permanente e irreversibile.", + "BUTTON": "Elimina ora" + } + }, + "DETAILS": { + "CREATED_AT": "Creato {date}", + "LAST_ACTIVITY": "Ultima attività {date}", + "DELETE_CONTACT_DESCRIPTION": "Elimina definitivamente questo contatto. Questa azione è irreversibile", + "DELETE_CONTACT": "Elimina contatto", + "DELETE_DIALOG": { + "TITLE": "Conferma eliminazione", + "DESCRIPTION": "Sei sicuro di voler eliminare questo contatto?", + "CONFIRM": "Sì, Elimina", + "API": { + "SUCCESS_MESSAGE": "Contatto eliminato con successo", + "ERROR_MESSAGE": "Impossibile eliminare il contatto. Riprova più tardi." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Impossibile caricare l'avatar. Riprova più tardi.", + "SUCCESS_MESSAGE": "Avatar caricato con successo" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatar eliminato con successo", + "ERROR_MESSAGE": "Impossibile eliminare l'avatar. Riprova più tardi." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributi", + "HISTORY": "Cronologia", + "NOTES": "Note", + "MERGE": "Unisci" + }, + "HISTORY": { + "EMPTY_STATE": "Non ci sono precedenti conversazioni associate a questo contatto" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Cerca attributi", + "UNUSED_ATTRIBUTES": "{count} Attributi utilizzati | {count} Attributi inutilizzati", + "EMPTY_STATE": "Non ci sono attributi personalizzati dei contatti disponibili in questo account. Puoi creare un attributo personalizzato nelle impostazioni.", + "YES": "Sì", + "NO": "No", + "TRIGGER": { + "SELECT": "Seleziona valore", + "INPUT": "Inserisci valore" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Numero non valido", + "REQUIRED": "È richiesto un valore valido", + "INVALID_INPUT": "Input non valido", + "INVALID_URL": "URL non valido", + "INVALID_DATE": "Data non valida" + }, + "NO_ATTRIBUTES": "Nessun attributo trovato", + "API": { + "SUCCESS_MESSAGE": "Attributo aggiornato con successo", + "DELETE_SUCCESS_MESSAGE": "Attributo eliminato con successo", + "UPDATE_ERROR": "Impossibile aggiornare l'attributo. Riprova più tardi", + "DELETE_ERROR": "Impossibile eliminare l'attributo. Riprova più tardi" + } + }, + "MERGE": { + "TITLE": "Unisci contatto", + "DESCRIPTION": "Unisci due profili in uno solo, inclusi tutti gli attributi e le conversazioni. In caso di conflitti, gli attributi del contatto primario avranno la precedenza.", + "PRIMARY": "Contatto primario", + "PRIMARY_HELP_LABEL": "Da salvare", + "PRIMARY_REQUIRED_ERROR": "Seleziona un contatto da unire prima di procedere", + "PARENT": "Da unire", + "PARENT_HELP_LABEL": "Da eliminare", + "EMPTY_STATE": "Nessun contatto trovato", + "PLACEHOLDER": "Cerca contatto primario", + "SEARCH_PLACEHOLDER": "Cerca un contatto", + "SEARCH_ERROR_MESSAGE": "Impossibile cercare i contatti. Riprova più tardi.", + "SUCCESS_MESSAGE": "Contatto unito con successo", + "ERROR_MESSAGE": "Impossibile unire i contatti, riprova!", + "IS_SEARCHING": "Ricerca...", + "BUTTONS": { + "CANCEL": "Annulla", + "CONFIRM": "Unisci contatto" + } + }, + "NOTES": { + "PLACEHOLDER": "Aggiungi una nota", + "WROTE": "ha scritto", + "YOU": "Tu", + "SAVE": "Salva nota", + "ADD_NOTE": "Aggiungi nota contatto", + "EXPAND": "Espandi", + "COLLAPSE": "Comprimi", + "NO_NOTES": "Nessuna nota, puoi aggiungere note dalla pagina dei dettagli del contatto.", + "EMPTY_STATE": "Non ci sono note associate a questo contatto. Puoi aggiungere una nota digitando nella casella sopra.", + "CONVERSATION_EMPTY_STATE": "Non ci sono ancora note. Usa il pulsante Aggiungi nota per crearne una." + } + }, + "EMPTY_STATE": { + "TITLE": "Nessun contatto trovato in questo account", + "SUBTITLE": "Inizia ad aggiungere nuovi contatti cliccando sul pulsante qui sotto", + "BUTTON_LABEL": "Aggiungi contatto", + "SEARCH_EMPTY_STATE_TITLE": "Nessun contatto corrisponde alla tua ricerca 🔍", + "LIST_EMPTY_STATE_TITLE": "Nessun contatto disponibile in questa vista 📋", + "ACTIVE_EMPTY_STATE_TITLE": "Nessun contatto attivo al momento 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Assegna Etichette", + "ASSIGN_LABELS_SUCCESS": "Etichette assegnate correttamente.", + "ASSIGN_LABELS_FAILED": "Assegnazione delle etichette non riuscita", + "DESCRIPTION": "Selezionare le etichette da aggiungere ai contatti selezionati.", + "NO_LABELS_FOUND": "Nessuna etichetta disponibile.", + "SELECTED_COUNT": "{count} selezionate", + "CLEAR_SELECTION": "Annulla selezione", + "SELECT_ALL": "Seleziona tutto ({count})", + "DELETE_CONTACTS": "Elimina", + "DELETE_SUCCESS": "Contatti eliminati con successo.", + "DELETE_FAILED": "Impossibile eliminare i contatti.", + "DELETE_DIALOG": { + "TITLE": "Elimina i contatti selezionati", + "SINGULAR_TITLE": "Elimina il contatto selezionato", + "DESCRIPTION": "Questo eliminerà definitivamente i {count} contatti selezionati. Questa azione non può essere annullata.", + "SINGULAR_DESCRIPTION": "Questo eliminerà definitivamente il contatto selezionato. Questa azione non può essere annullata.", + "CONFIRM_MULTIPLE": "Elimina contatti", + "CONFIRM_SINGLE": "Elimina contatto" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "Non siamo riusciti a completare la ricerca. Riprova." + }, + "FORM": { + "GO_TO_CONVERSATION": "Visualizza", + "SUCCESS_MESSAGE": "Messaggio inviato con successo!", + "ERROR_MESSAGE": "Si è verificato un errore durante la creazione della conversazione. Riprova più tardi.", + "NO_INBOX_ALERT": "Non ci sono inbox disponibili per avviare una conversazione con questo contatto.", + "CONTACT_SELECTOR": { + "LABEL": "A:", + "TAG_INPUT_PLACEHOLDER": "Cerca un contatto tramite nome, email o numero di telefono", + "CONTACT_CREATING": "Creazione contatto..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Mostra inbox" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Oggetto :", + "SUBJECT_PLACEHOLDER": "Inserisci qui l'oggetto email", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Cerca un contatto con il suo indirizzo email", + "BCC_LABEL": "Ccn:", + "BCC_PLACEHOLDER": "Cerca un contatto con il suo indirizzo email", + "BCC_BUTTON": "Ccn" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Scrivi qui il tuo messaggio..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Seleziona modello", + "SEARCH_PLACEHOLDER": "Cerca modelli", + "EMPTY_STATE": "Nessun modello trovato", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "Modello WhatsApp: {templateName}", + "VARIABLES": "Variabili", + "BACK": "Torna indietro", + "SEND_MESSAGE": "Invia messaggio" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Seleziona modello", + "SEARCH_PLACEHOLDER": "Cerca modelli", + "EMPTY_STATE": "Nessun modello trovato", + "TEMPLATE_PARSER": { + "BACK": "Torna indietro", + "SEND_MESSAGE": "Invia messaggio" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Annulla", + "SEND": "Invia ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/contactFilters.json b/app/javascript/dashboard/i18n/locale/it/contactFilters.json new file mode 100644 index 0000000..61c3dda --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filtra Contatti", + "SUBTITLE": "Aggiungi filtri qui sotto e premi 'Invia' per filtrare i contatti.", + "EDIT_CUSTOM_SEGMENT": "Edit Segment", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your segment.", + "ADD_NEW_FILTER": "Aggiungi filtro", + "CLEAR_ALL_FILTERS": "Cancella tutti i filtri", + "FILTER_DELETE_ERROR": "Dovresti avere almeno un filtro da salvare", + "SUBMIT_BUTTON_LABEL": "Invia", + "UPDATE_BUTTON_LABEL": "Aggiorna Segmento", + "CANCEL_BUTTON_LABEL": "Annulla", + "CLEAR_BUTTON_LABEL": "Rimuovi Filtri", + "EMPTY_VALUE_ERROR": "Valore richiesto", + "SEGMENT_LABEL": "Nome Segmento", + "SEGMENT_QUERY_LABEL": "Query Segmento", + "TOOLTIP_LABEL": "Filtra contatti", + "QUERY_DROPDOWN_LABELS": { + "AND": "E", + "OR": "O" + }, + "OPERATOR_LABELS": { + "equal_to": "Uguale a", + "not_equal_to": "Non uguale a", + "contains": "Contiene", + "does_not_contain": "Non contiene", + "is_present": "È presente", + "is_not_present": "Non è presente", + "is_greater_than": "È maggiore di", + "is_lesser_than": "È minore di", + "days_before": "È x giorni prima" + }, + "ERRORS": { + "VALUE_REQUIRED": "Il valore è obbligatorio" + }, + "ATTRIBUTES": { + "NAME": "Nome", + "EMAIL": "Email", + "PHONE_NUMBER": "Numero di telefono", + "IDENTIFIER": "Identificatore", + "CITY": "Città", + "COUNTRY": "Paese", + "CUSTOM_ATTRIBUTE_LIST": "Elenco", + "CUSTOM_ATTRIBUTE_TEXT": "Testo", + "CUSTOM_ATTRIBUTE_NUMBER": "Numero", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Creato il", + "LAST_ACTIVITY": "Ultima Attività", + "REFERER_LINK": "Link referente", + "BLOCKED": "Bloccato", + "LABELS": "Etichette" + }, + "GROUPS": { + "STANDARD_FILTERS": "Filtri Standard", + "ADDITIONAL_FILTERS": "Filtri Aggiuntivi", + "CUSTOM_ATTRIBUTES": "Attributi Personalizzati" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/contentTemplates.json b/app/javascript/dashboard/i18n/locale/it/contentTemplates.json new file mode 100644 index 0000000..57c5ce5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Modelli Twilio", + "SUBTITLE": "Seleziona il modello Twilio che vuoi inviare", + "TEMPLATE_SELECTED_SUBTITLE": "Configura modello: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Cerca Modelli", + "NO_TEMPLATES_FOUND": "Nessun modello trovato per", + "NO_CONTENT": "Nessun contenuto", + "HEADER": "Intestazione", + "BODY": "Corpo", + "FOOTER": "Piè", + "BUTTONS": "Pulsanti", + "CATEGORY": "Categoria", + "MEDIA_CONTENT": "Contenuto Multimediale", + "MEDIA_CONTENT_FALLBACK": "contenuto multimediale", + "NO_TEMPLATES_AVAILABLE": "Nessun modello Twilio disponibile. Fai clic su aggiorna per sincronizzare i modelli da Twilio.", + "REFRESH_BUTTON": "Aggiorna modelli", + "REFRESH_SUCCESS": "Aggiornamento modelli iniziato. Potrebbe volerci qualche minuto per aggiornare.", + "REFRESH_ERROR": "Impossibile aggiornare i modelli. Per favore riprova.", + "LABELS": { + "LANGUAGE": "Lingua", + "TEMPLATE_BODY": "Corpo Modello", + "CATEGORY": "Categoria" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Risposta Rapida", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Testo" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variabili", + "LANGUAGE": "Lingua", + "CATEGORY": "Categoria", + "VARIABLE_PLACEHOLDER": "Inserisci il valore di {variable}", + "GO_BACK_LABEL": "Torna Indietro", + "SEND_MESSAGE_LABEL": "Invia Messaggio", + "FORM_ERROR_MESSAGE": "Inserisci tutte le variabili prima di inviare", + "MEDIA_HEADER_LABEL": "Intestazione {type}", + "MEDIA_URL_LABEL": "Inserisci l'URL completo del media", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Indietro", + "SEND_MESSAGE_BUTTON": "Invia Messaggio" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/conversation.json b/app/javascript/dashboard/i18n/locale/it/conversation.json new file mode 100644 index 0000000..fdc691c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Seleziona una conversazione dal pannello a sinistra", + "CSAT_REPLY_MESSAGE": "Valuta la conversazione", + "404": "Siamo spiacenti, non siamo riusciti a trovare la conversazione. Riprova", + "SWITCH_VIEW_LAYOUT": "Cambia layout", + "DASHBOARD_APP_TAB_MESSAGES": "Messaggi", + "UNVERIFIED_SESSION": "L'identità di questo utente non è verificata", + "NO_MESSAGE_1": "Oh oh! Sembra che non ci siano messaggi dai clienti nella tua inbox.", + "NO_MESSAGE_2": " per inviare un messaggio alla tua pagina!", + "NO_INBOX_1": "Ciao! Sembra che tu non abbia ancora aggiunto nessuna inbox.", + "NO_INBOX_2": " per iniziare", + "NO_INBOX_AGENT": "Oh oh! Sembra che tu non faccia parte di nessuna inbox. Per favore contatta il tuo amministratore", + "SEARCH_MESSAGES": "Cerca messaggi nelle conversazioni", + "VIEW_ORIGINAL": "Visualizza originale", + "VIEW_TRANSLATED": "Visualizza traduzione", + "EMPTY_STATE": { + "CMD_BAR": "per aprire il menu dei comandi", + "KEYBOARD_SHORTCUTS": "per visualizzare le scorciatoie da tastiera" + }, + "SEARCH": { + "TITLE": "Cerca messaggi", + "RESULT_TITLE": "Risultati di Ricerca", + "LOADING_MESSAGE": "Elaborazione...", + "PLACEHOLDER": "Digita qualsiasi testo per cercare i messaggi", + "NO_MATCHING_RESULTS": "Nessun risultato trovato." + }, + "UNREAD_MESSAGES": "Messaggi Non Letti", + "UNREAD_MESSAGE": "Messaggio Non Letto", + "CLICK_HERE": "Clicca qui", + "LOADING_INBOXES": "Caricamento inbox", + "LOADING_CONVERSATIONS": "Caricamento Conversazioni", + "CANNOT_REPLY": "Non puoi rispondere a causa di", + "24_HOURS_WINDOW": "Restrizione finestra messaggio 24 ore", + "48_HOURS_WINDOW": "Restrizione finestra messaggio 48 ore", + "API_HOURS_WINDOW": "Puoi rispondere a questa conversazione solo entro {hours} ore", + "NOT_ASSIGNED_TO_YOU": "Questa conversazione non è assegnata. Vuoi assegnare questa conversazione a te stesso?", + "ASSIGN_TO_ME": "Assegna a me", + "BOT_HANDOFF_MESSAGE": "Si sta rispondendo a una conversazione che è attualmente gestita da un assistente o un bot.", + "BOT_HANDOFF_ACTION": "Segna aperta e assegna a te", + "BOT_HANDOFF_REOPEN_ACTION": "Segna conversazione aperta", + "BOT_HANDOFF_SUCCESS": "La conversazione ti è stata assegnata", + "BOT_HANDOFF_ERROR": "Impossibile prendere la conversazione. Riprova.", + "TWILIO_WHATSAPP_CAN_REPLY": "È possibile rispondere a questa conversazione solo utilizzando un messaggio modello a causa di", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "Restrizione finestra messaggio 24 ore", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "Questo account Instagram è stato migrato alla nuova Inbox del canale Instagram. Tutti i nuovi messaggi verranno visualizzati lì. Non sarà più possibile inviare messaggi da questa conversazione.", + "REPLYING_TO": "Stai rispondendo a:", + "REMOVE_SELECTION": "Rimuovi Selezione", + "DOWNLOAD": "Scarica", + "UNKNOWN_FILE_TYPE": "File Sconosciuto", + "SAVE_CONTACT": "Salva Contatto", + "NO_CONTENT": "Nessun contenuto da visualizzare", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} ha condiviso un contatto", + "LOCATION": "{sender} ha condiviso una posizione", + "FILE": "{sender} ha condiviso un file", + "MEETING": "{sender} ha avviato una riunione" + }, + "UPLOADING_ATTACHMENTS": "Caricamento allegati...", + "REPLIED_TO_STORY": "Ha risposto alla tua storia", + "UNSUPPORTED_MESSAGE": "Questo messaggio non è supportato. Puoi visualizzare questo messaggio sull'app Facebook / Instagram.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "Questo messaggio non è supportato. Puoi visualizzare questo messaggio sull'app Facebook Messenger.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "Questo messaggio non è supportato. Puoi visualizzare questo messaggio sull'app Instagram.", + "SUCCESS_DELETE_MESSAGE": "Messaggio eliminato con successo", + "FAIL_DELETE_MESSSAGE": "Impossibile eliminare il messaggio! Riprova", + "NO_RESPONSE": "Nessuna risposta", + "RESPONSE": "Risposta", + "RATING_TITLE": "Valutazione", + "FEEDBACK_TITLE": "Feedback", + "REPLY_MESSAGE_NOT_FOUND": "Messaggio non disponibile", + "CARD": { + "SHOW_LABELS": "Mostra etichette", + "HIDE_LABELS": "Nascondi etichette" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Chiamata in arrivo", + "OUTGOING_CALL": "Chiamata in uscita", + "CALL_IN_PROGRESS": "Chiamata in corso", + "NO_ANSWER": "Nessuna risposta", + "MISSED_CALL": "Chiamata persa", + "CALL_ENDED": "Chiamata terminata", + "NOT_ANSWERED_YET": "Non ancora risposta", + "THEY_ANSWERED": "Hanno risposto", + "YOU_ANSWERED": "Hai risposto" + }, + "HEADER": { + "RESOLVE_ACTION": "Risolvi", + "REOPEN_ACTION": "Riapri", + "OPEN_ACTION": "Apri", + "MORE_ACTIONS": "Più azioni", + "OPEN": "Altro", + "CLOSE": "Chiudi", + "DETAILS": "dettagli", + "SNOOZED_UNTIL": "Posticipata fino a", + "SNOOZED_UNTIL_TOMORROW": "Posticipata fino a domani", + "SNOOZED_UNTIL_NEXT_WEEK": "Posticipata fino alla prossima settimana", + "SNOOZED_UNTIL_NEXT_REPLY": "Posticipata fino alla prossima risposta", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "persa", + "DUE": "in scadenza" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Segna come in sospeso", + "SNOOZE_UNTIL": "Posticipa", + "SNOOZE": { + "TITLE": "Posticipa fino a", + "NEXT_REPLY": "Risposta successiva", + "TOMORROW": "Domani", + "NEXT_WEEK": "Prossima settimana" + } + }, + "MENTION": { + "AGENTS": "Operatori", + "TEAMS": "Team" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Posticipa fino a", + "APPLY": "Posticipa", + "CANCEL": "Annulla" + }, + "PRIORITY": { + "TITLE": "Priorità", + "OPTIONS": { + "NONE": "Nessuna", + "URGENT": "Urgente", + "HIGH": "Alta", + "MEDIUM": "Media", + "LOW": "Bassa" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "Nessuna", + "INPUT_PLACEHOLDER": "Seleziona priorità", + "NO_RESULTS": "Nessun risultato trovato", + "SUCCESSFUL": "Cambiata priorità della conversazione id {conversationId} in {priority}", + "FAILED": "Impossibile cambiare la priorità. Riprova." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Elimina conversazione #{conversationId}", + "DESCRIPTION": "Sei sicuro di voler eliminare questa conversazione?", + "CONFIRM": "Elimina" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Segna come in sospeso", + "RESOLVED": "Segna come risolta", + "MARK_AS_UNREAD": "Segna come da leggere", + "MARK_AS_READ": "Segna come letta", + "REOPEN": "Riapri la conversazione", + "SNOOZE": { + "TITLE": "Posticipa", + "NEXT_REPLY": "Fino alla prossima risposta", + "TOMORROW": "Fino a domani", + "NEXT_WEEK": "Fino alla prossima settimana" + }, + "ASSIGN_AGENT": "Assegna operatore", + "ASSIGN_LABEL": "Assegna etichetta", + "AGENTS_LOADING": "Caricamento operatori...", + "ASSIGN_TEAM": "Assegna team", + "DELETE": "Elimina conversazione", + "OPEN_IN_NEW_TAB": "Apri in una nuova scheda", + "COPY_LINK": "Copia link conversazione", + "COPY_LINK_SUCCESS": "Link conversazione copiato negli appunti", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Conversazione id {conversationId} assegnata a \"{agentName}\"", + "FAILED": "Impossibile assegnare l'operatore. Per favore riprova." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assegnata etichetta #{labelName} alla conversazione id {conversationId}", + "FAILED": "Impossibile assegnare l'etichetta. Per favore riprova." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Assegnato il team \"{team}\" alla conversazione id {conversationId}", + "FAILED": "Impossibile assegnare il team. Riprova." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Firma messaggio", + "ENABLE_SIGN_TOOLTIP": "Abilita firma", + "DISABLE_SIGN_TOOLTIP": "Disabilita firma", + "MSG_INPUT": "Premi MAIUSC + INVIO per andare a capo. Digita '/' per inserire una Risposta Predefinita.", + "PRIVATE_MSG_INPUT": "Premi MAIUSC + INVIO per andare a capo. Sarà visibile solo agli Operatori", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "La firma del messaggio non è configurata, configurala nelle impostazioni del profilo.", + "CLICK_HERE": "Clicca qui per aggiornare", + "WHATSAPP_TEMPLATES": "Modelli Whatsapp" + }, + "REPLYBOX": { + "REPLY": "Rispondi", + "PRIVATE_NOTE": "Nota Privata", + "SEND": "Invia", + "CREATE": "Aggiungi Nota", + "INSERT_READ_MORE": "Leggi di più", + "DISMISS_REPLY": "Ignora risposta", + "REPLYING_TO": "Rispondendo a:", + "TIP_EMOJI_ICON": "Mostra selettore emoji", + "TIP_ATTACH_ICON": "Allega file", + "TIP_AUDIORECORDER_ICON": "Registra audio", + "TIP_AUDIORECORDER_PERMISSION": "Consenti l'accesso all'audio", + "TIP_AUDIORECORDER_ERROR": "Impossibile aprire l'audio", + "DRAG_DROP": "Trascina qui per allegare", + "START_AUDIO_RECORDING": "Avvia registrazione audio", + "STOP_AUDIO_RECORDING": "Interrompi registrazione audio", + "": "", + "EMAIL_HEAD": { + "TO": "A", + "ADD_BCC": "Aggiungi Ccn", + "CC": { + "LABEL": "Cc", + "PLACEHOLDER": "Email separate da virgole", + "ERROR": "Inserisci indirizzi email validi" + }, + "BCC": { + "LABEL": "Ccn", + "PLACEHOLDER": "Email separate da virgole", + "ERROR": "Inserisci indirizzi email validi" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Variabili non definite", + "MESSAGE": "Hai {undefinedVariablesCount} variabili non definite nel tuo messaggio: {undefinedVariables}. Vuoi inviare il messaggio comunque?", + "CONFIRM": { + "YES": "Invia", + "CANCEL": "Annulla" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Includi discussione email citata", + "DISABLE_TOOLTIP": "Non includere discussione email citata", + "REMOVE_PREVIEW": "Rimuovi discussione email citata", + "COLLAPSE": "Comprimi anteprima", + "EXPAND": "Espandi anteprima" + } + }, + "VISIBLE_TO_AGENTS": "Nota Privata: visibile solo a te e al tuo team", + "CHANGE_STATUS": "Stato conversazione cambiato", + "CHANGE_STATUS_FAILED": "Cambio di stato conversazione non riuscito", + "CHANGE_AGENT": "Modifica assegnatario conversazione", + "CHANGE_AGENT_FAILED": "Cambio assegnatario non riuscito", + "ASSIGN_LABEL_SUCCESFUL": "Etichetta assegnata correttamente", + "ASSIGN_LABEL_FAILED": "Assegnazione etichetta non riuscita", + "CHANGE_TEAM": "Team conversazione cambiato", + "SUCCESS_DELETE_CONVERSATION": "Conversazione eliminata con successo", + "FAIL_DELETE_CONVERSATION": "Impossibile eliminare la conversazione! Riprova", + "FILE_SIZE_LIMIT": "Il file supera il limite di {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB per l'allegato", + "MESSAGE_ERROR": "Impossibile inviare questo messaggio, riprova più tardi", + "SENT_BY": "Inviato da:", + "BOT": "Bot", + "SEND_FAILED": "Impossibile inviare il messaggio! Riprova", + "TRY_AGAIN": "riprova", + "ASSIGNMENT": { + "SELECT_AGENT": "Seleziona Operatore", + "REMOVE": "Rimuovi", + "ASSIGN": "Assegna" + }, + "CONTEXT_MENU": { + "COPY": "Copia", + "REPLY_TO": "Rispondi a questo messaggio", + "DELETE": "Elimina", + "CREATE_A_CANNED_RESPONSE": "Aggiungi alle Risposte Predefinite", + "TRANSLATE": "Traduci", + "COPY_PERMALINK": "Copia il link al messaggio", + "LINK_COPIED": "URL del messaggio copiato negli appunti", + "DELETE_CONFIRMATION": { + "TITLE": "Sei sicuro di voler eliminare questo messaggio?", + "MESSAGE": "Non puoi annullare questa azione", + "DELETE": "Elimina", + "CANCEL": "Annulla" + } + }, + "SIDEBAR": { + "CONTACT": "Contatto", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Chiamata in arrivo", + "OUTGOING_CALL": "Chiamata in uscita", + "CALL_IN_PROGRESS": "Chiamata in corso", + "NOT_ANSWERED_YET": "Non ancora risposta", + "HANDLED_IN_ANOTHER_TAB": "Gestita in un'altra scheda", + "REJECT_CALL": "Rifiuta", + "JOIN_CALL": "Entra nella chiamata", + "END_CALL": "Termina chiamata" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Invia trascrizione conversazione", + "DESC": "Invia una copia della trascrizione della conversazione all'indirizzo email specificato", + "SUBMIT": "Invia", + "CANCEL": "Annulla", + "SEND_EMAIL_SUCCESS": "La trascrizione della chat è stata inviata con successo", + "SEND_EMAIL_ERROR": "Si è verificato un errore, riprova", + "FORM": { + "SEND_TO_CONTACT": "Invia la trascrizione al cliente", + "SEND_TO_AGENT": "Invia la trascrizione all'operatore assegnato", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Invia la trascrizione a un altro indirizzo email", + "EMAIL": { + "PLACEHOLDER": "Inserisci un indirizzo email", + "ERROR": "Inserisci un indirizzo email valido" + } + } + }, + "ONBOARDING": { + "TITLE": "Ciao👋 Benvenuto in {installationName}!", + "DESCRIPTION": "Grazie per averci scelto! Vogliamo che tu ottenga il massimo da {installationName}. Ecco alcune cose che puoi fare in {installationName} per massimizzare la tua esperienza.", + "GREETING_MORNING": "👋 Buongiorno, {name}. Benvenuto in {installationName}.", + "GREETING_AFTERNOON": "👋 Buon pomeriggio, {name}. Benvenuto in {installationName}.", + "GREETING_EVENING": "👋 Buona sera, {name}. Benvenuto su {installationName}.", + "READ_LATEST_UPDATES": "Leggi gli ultimi aggiornamenti", + "ALL_CONVERSATION": { + "TITLE": "Tutte le tue conversazioni in un unico luogo", + "DESCRIPTION": "Visualizza tutte le conversazioni con i clienti in una singola dashboard. Puoi filtrare le conversazioni in base al canale, all'etichetta e allo stato.", + "NEW_LINK": "Clicca qui per creare una Inbox" + }, + "TEAM_MEMBERS": { + "TITLE": "Invita i membri del tuo team", + "DESCRIPTION": "Dato che ti stai preparando a parlare con i tuoi clienti, invita i tuoi colleghi ad aiutarti. Puoi invitarli aggiungendo i loro indirizzi email all’elenco degli operatori.", + "NEW_LINK": "Clicca qui per invitare un membro del team" + }, + "LABELS": { + "TITLE": "Organizza le conversazioni con etichette", + "DESCRIPTION": "Le etichette offrono un modo semplice per categorizzare le conversazioni. Crea etichette come #supporto, #pagamenti ecc., così da poterle usare successivamente.", + "NEW_LINK": "Clicca qui per creare etichette" + }, + "CANNED_RESPONSES": { + "TITLE": "Crea Risposte Predefinite", + "DESCRIPTION": "I modelli di risposta rapida predefiniti ti aiutano a rispondere rapidamente alle conversazioni. Gli operatori possono digitare il carattere '/' seguito dallo shortcode per inserire una risposta.", + "NEW_LINK": "Clicca qui per creare una Risposta Predefinita" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Operatore Assegnato", + "SELF_ASSIGN": "Assegna a me", + "TEAM_LABEL": "Team Assegnato", + "SELECT": { + "PLACEHOLDER": "Nessuno" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Dettagli Contatto", + "CONVERSATION_ACTIONS": "Azioni Conversazione", + "CONVERSATION_LABELS": "Etichette Conversazione", + "CONVERSATION_INFO": "Informazioni Conversazione", + "CONTACT_NOTES": "Note del Contatto", + "CONTACT_ATTRIBUTES": "Attributi Contatto", + "PREVIOUS_CONVERSATION": "Conversazioni Precedenti", + "MACROS": "Macro", + "LINEAR_ISSUES": "Issue Linear Connessi", + "SHOPIFY_ORDERS": "Ordini Shopify" + }, + "SHOPIFY": { + "ORDER_ID": "Ordine #{id}", + "ERROR": "Errore nel caricamento degli ordini", + "NO_SHOPIFY_ORDERS": "Nessun ordine trovato", + "FINANCIAL_STATUS": { + "PENDING": "In Sospeso", + "AUTHORIZED": "Autorizzato", + "PARTIALLY_PAID": "Parzialmente Pagato", + "PAID": "Pagato", + "PARTIALLY_REFUNDED": "Parzialmente Rimborsato", + "REFUNDED": "Rimborsato", + "VOIDED": "Annullato" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Completato", + "PARTIALLY_FULFILLED": "Parzialmente Completato", + "UNFULFILLED": "Non Completato" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Crea attributo", + "NO_RECORDS_FOUND": "Nessun attributo trovato", + "UPDATE": { + "SUCCESS": "Attributo aggiornato con successo", + "ERROR": "Impossibile aggiornare l'attributo. Riprova più tardi" + }, + "ADD": { + "TITLE": "Aggiungi", + "SUCCESS": "Attributo aggiunto con successo", + "ERROR": "Impossibile aggiungere l'attributo. Riprova più tardi" + }, + "DELETE": { + "SUCCESS": "Attributo eliminato con successo", + "ERROR": "Impossibile eliminare l'attributo. Riprova più tardi" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Aggiungi attributi", + "PLACEHOLDER": "Cerca attributi", + "NO_RESULT": "Nessun attributo trovato" + } + }, + "EMAIL_HEADER": { + "FROM": "Da", + "TO": "A", + "BCC": "Ccn", + "CC": "Cc", + "SUBJECT": "Oggetto", + "EXPAND": "Espandi email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Partecipate", + "SIDEBAR_TITLE": "Partecipanti alla conversazione", + "NO_RECORDS_FOUND": "Nessun risultato trovato", + "ADD_PARTICIPANTS": "Seleziona partecipanti", + "REMANING_PARTICIPANTS_TEXT": "+{count} altri", + "REMANING_PARTICIPANT_TEXT": "+{count} altro", + "TOTAL_PARTICIPANTS_TEXT": "{count} persone stanno partecipando.", + "TOTAL_PARTICIPANT_TEXT": "{count} persona sta partecipando.", + "NO_PARTICIPANTS_TEXT": "Nessuno sta partecipando!", + "WATCH_CONVERSATION": "Unisciti alla conversazione", + "YOU_ARE_WATCHING": "Stai partecipando", + "API": { + "ERROR_MESSAGE": "Impossibile aggiornare, riprova!", + "SUCCESS_MESSAGE": "Partecipanti aggiornati!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "Visualizza contenuto tradotto", + "DESC": "Puoi visualizzare il contenuto tradotto in ogni lingua.", + "ORIGINAL_CONTENT": "Contenuto Originale", + "TRANSLATED_CONTENT": "Contenuto Tradotto", + "NO_TRANSLATIONS_AVAILABLE": "Nessuna traduzione disponibile per questo contenuto" + }, + "TYPING": { + "ONE": "{user} sta scrivendo", + "TWO": "{user} e {secondUser} stanno scrivendo", + "MULTIPLE": "{user} e altri {count} stanno scrivendo" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Prova questi prompt" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Impossibile scaricare l'allegato. Riprova" + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/csatMgmt.json b/app/javascript/dashboard/i18n/locale/it/csatMgmt.json new file mode 100644 index 0000000..7d6e556 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Valuta la conversazione", + "PLACEHOLDER": "Dicci di più...", + "RATINGS": { + "POOR": "😞 Scarsa", + "FAIR": "😑 Sufficiente", + "AVERAGE": "😐 Nella Media", + "GOOD": "😀 Buona", + "EXCELLENT": "😍 Eccellente" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/customRole.json b/app/javascript/dashboard/i18n/locale/it/customRole.json new file mode 100644 index 0000000..6e6203c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Ruoli Personalizzati", + "LEARN_MORE": "Scopri di più sui ruoli personalizzati", + "DESCRIPTION": "I ruoli personalizzati sono ruoli creati dal proprietario o amministratore dell'account. Questi ruoli possono essere assegnati agli operatori per definire i loro accessi e i loro permessi all'interno dell'account. I ruoli personalizzati possono essere creati con permessi e livelli di accesso specifici per soddisfare le esigenze dell'organizzazione.", + "HEADER_BTN_TXT": "Aggiungi ruolo personalizzato", + "LOADING": "Caricamento ruoli personalizzati...", + "SEARCH_404": "Non ci sono elementi che corrispondono a questa richiesta.", + "PAYWALL": { + "TITLE": "Aggiorna per creare ruoli personalizzati", + "AVAILABLE_ON": "La funzionalità ruoli personalizzati è disponibile solo nei piani Business e Enterprise.", + "UPGRADE_PROMPT": "Aggiorna il tuo piano per ottenere l'accesso a funzionalità avanzate come gestione del team, automazioni, attributi personalizzati e altro ancora.", + "UPGRADE_NOW": "Aggiorna ora", + "CANCEL_ANYTIME": "Puoi modificare o annullare il tuo piano in qualsiasi momento" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "La funzionalità ruoli personalizzati è disponibile solo nei piani a pagamento.", + "UPGRADE_PROMPT": "Passa a un piano a pagamento per accedere a funzionalità avanzate come audit logs, capacità degli operatori e altro ancora.", + "ASK_ADMIN": "Contatta il tuo amministratore per l'aggiornamento." + }, + "LIST": { + "404": "Non ci sono ruoli personalizzati disponibili in questo account.", + "TITLE": "Gestisci ruoli personalizzati", + "DESC": "I ruoli personalizzati sono ruoli creati dal proprietario o amministratore dell'account. Questi ruoli possono essere assegnati agli operatori per definire i loro accessi e i loro permessi all'interno dell'account. I ruoli personalizzati possono essere creati con permessi e livelli di accesso specifici per soddisfare le esigenze dell'organizzazione.", + "TABLE_HEADER": { + "NAME": "Nome", + "DESCRIPTION": "Descrizione", + "PERMISSIONS": "Permessi", + "ACTIONS": "Azioni" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Gestisci tutte le conversazioni", + "CONVERSATION_UNASSIGNED_MANAGE": "Gestisci le conversazioni non assegnate e quelle a loro assegnate", + "CONVERSATION_PARTICIPATING_MANAGE": "Gestisci le conversazioni partecipanti e quelle a loro assegnate", + "CONTACT_MANAGE": "Gestisci contatti", + "REPORT_MANAGE": "Gestisci report", + "KNOWLEDGE_BASE_MANAGE": "Gestisci knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Inserisci un nome.", + "ERROR": "Il nome è obbligatorio." + }, + "DESCRIPTION": { + "LABEL": "Descrizione", + "PLACEHOLDER": "Inserisci una descrizione.", + "ERROR": "La descrizione è obbligatoria." + }, + "PERMISSIONS": { + "LABEL": "Permessi", + "ERROR": "I permessi sono obbligatori." + }, + "CANCEL_BUTTON_TEXT": "Annulla", + "API": { + "ERROR_MESSAGE": "Impossibile connettersi al server Woot. Riprova." + } + }, + "ADD": { + "TITLE": "Aggiungi ruolo personalizzato", + "DESC": " I ruoli personalizzati consentono di creare ruoli con permessi e livelli di accesso specifici per soddisfare le esigenze dell'organizzazione.", + "SUBMIT": "Invia", + "API": { + "SUCCESS_MESSAGE": "Ruolo personalizzato aggiunto con successo." + } + }, + "EDIT": { + "BUTTON_TEXT": "Modifica", + "TITLE": "Modifica ruolo personalizzato", + "DESC": " I ruoli personalizzati consentono di creare ruoli con permessi e livelli di accesso specifici per soddisfare le esigenze dell'organizzazione.", + "SUBMIT": "Aggiorna", + "API": { + "SUCCESS_MESSAGE": "Ruolo personalizzato aggiornato con successo." + } + }, + "DELETE": { + "BUTTON_TEXT": "Elimina", + "API": { + "SUCCESS_MESSAGE": "Ruolo personalizzato eliminato con successo.", + "ERROR_MESSAGE": "Impossibile connettersi al server Woot. Riprova." + }, + "CONFIRM": { + "TITLE": "Conferma eliminazione", + "MESSAGE": "Sei sicuro di voler eliminare ", + "YES": "Sì, elimina ", + "NO": "No, mantieni " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/datePicker.json b/app/javascript/dashboard/i18n/locale/it/datePicker.json new file mode 100644 index 0000000..de8850b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Applica", + "CLEAR_BUTTON": "Rimuovi", + "DATE_RANGE_INPUT": { + "START": "Data di Inizio", + "END": "Data di Fine" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "RANGE DATE", + "LAST_7_DAYS": "Ultimi 7 giorni", + "LAST_30_DAYS": "Ultimi 30 giorni", + "LAST_3_MONTHS": "Ultimi 3 mesi", + "LAST_6_MONTHS": "Ultimi 6 mesi", + "LAST_YEAR": "Ultimo anno", + "CUSTOM_RANGE": "Intervallo di date personalizzato" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/emoji.json b/app/javascript/dashboard/i18n/locale/it/emoji.json new file mode 100644 index 0000000..bd9cb3a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Cerca emoji", + "NOT_FOUND": "Nessuna emoji corrisponde alla tua ricerca", + "REMOVE": "Rimuovi" + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/general.json b/app/javascript/dashboard/i18n/locale/it/general.json new file mode 100644 index 0000000..00f724b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Mostrando {firstIndex}-{lastIndex} di {totalCount} elementi", + "PHONE_INPUT": { + "PLACEHOLDER": "Cerca", + "EMPTY_STATE": "Nessun risultato trovato" + }, + "CLOSE": "Chiudi", + "BETA": "Beta", + "BETA_DESCRIPTION": "Questa funzione è in beta e può subire variazioni mentre la miglioriamo." + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/generalSettings.json b/app/javascript/dashboard/i18n/locale/it/generalSettings.json new file mode 100644 index 0000000..1b84b3b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "Hai superato il limite di conversazioni. Il piano Hacker consente fino a 500 conversazioni.", + "INBOXES": "Hai superato il limite di Inbox. Il piano Hacker supporta solo la live-chat sul sito web. Ulteriori Inbox come e-mail, WhatsApp ecc. richiedono un piano a pagamento.", + "AGENTS": "Hai superato il limite di operatori. Il tuo piano consente solo {allowedAgents} operatori.", + "NON_ADMIN": "Contatta l'amministratore per aggiornare il piano e continuare a utilizzare tutte le funzionalità." + }, + "TITLE": "Impostazioni account", + "SUBMIT": "Aggiorna impostazioni", + "BACK": "Indietro", + "DISMISS": "Ignora", + "UPDATE": { + "ERROR": "Impossibile aggiornare le impostazioni, riprova!", + "SUCCESS": "Impostazioni account aggiornate con successo" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Elimina il tuo Account", + "NOTE": "Una volta eliminato il tuo account, tutti i tuoi dati verranno eliminati.", + "BUTTON_TEXT": "Elimina il tuo Account", + "CONFIRM": { + "TITLE": "Elimina Account", + "MESSAGE": "L'eliminazione del tuo account è irreversibile. Inserisci il nome del tuo account qui sotto per confermare che vuoi eliminarlo in modo permanente.", + "BUTTON_TEXT": "Elimina", + "DISMISS": "Annulla", + "PLACE_HOLDER": "Digita {accountName} per confermare" + }, + "SUCCESS": "Account contrassegnato per l'eliminazione", + "FAILURE": "Impossibile eliminare l'account, riprova!", + "SCHEDULED_DELETION": { + "TITLE": "Account pianificato per l'eliminazione", + "MESSAGE_MANUAL": "Questo account è pianificato per la cancellazione il {deletionDate}. Questo è stato richiesto da un amministratore. Puoi annullare la cancellazione prima di questa data.", + "MESSAGE_INACTIVITY": "Questo account è programmato per la cancellazione il {deletionDate} a causa dell'inattività dell'account. Puoi annullare la cancellazione prima di questa data.", + "CLEAR_BUTTON": "Annulla Eliminazione Pianificata" + } + }, + "FORM": { + "ERROR": "Correggi gli errori del modulo", + "GENERAL_SECTION": { + "TITLE": "Impostazioni generali", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "ID Account", + "NOTE": "Questo ID è utile per costruire integrazioni basate su API" + }, + "AUTO_RESOLVE": { + "TITLE": "Risoluzione automatica delle conversazioni", + "NOTE": "Questa configurazione consente di risolvere automaticamente la conversazione dopo un certo periodo d'inattività.", + "DURATION": { + "LABEL": "Durata inattività", + "HELP": "Periodo d'inattività dopo il quale la conversazione è risolta automaticamente", + "PLACEHOLDER": "30", + "ERROR": "La durata della risoluzione automatica deve essere compresa tra 10 minuti e 999 giorni", + "API": { + "SUCCESS": "Impostazioni di risoluzione automatica aggiornate con successo", + "ERROR": "Impossibile aggiornare le impostazioni di risoluzione automatica" + } + }, + "MESSAGE": { + "LABEL": "Messaggio di risoluzione automatica personalizzato", + "PLACEHOLDER": "La conversazione è stata contrassegnata come risolta dal sistema a causa di 15 giorni d'inattività", + "HELP": "Messaggio inviato al cliente dopo che la conversazione è stata risolta automaticamente" + }, + "PREFERENCES": "Preferenze", + "LABEL": { + "LABEL": "Aggiungi etichetta dopo la risoluzione automatica", + "PLACEHOLDER": "Seleziona un'etichetta" + }, + "IGNORE_WAITING": { + "LABEL": "Salta le conversazioni in attesa di risposta dell'operatore" + }, + "UPDATE_BUTTON": "Salva Modifiche" + }, + "NAME": { + "LABEL": "Nome account", + "PLACEHOLDER": "Nome del tuo account", + "ERROR": "Inserisci un nome account valido" + }, + "LANGUAGE": { + "LABEL": "Lingua del sito", + "PLACEHOLDER": "Nome del tuo account", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Dominio Email In Arrivo", + "PLACEHOLDER": "Il dominio in cui riceverai le email", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "Email di Supporto", + "PLACEHOLDER": "Email di supporto della tua azienda", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Escludi conversazioni non partecipate", + "HELP": "Se abilitato, il sistema salterà la risoluzione delle conversazioni che sono ancora in attesa della risposta di un operatore." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Trascrizione Messaggi Audio", + "NOTE": "Trascrivi automaticamente i messaggi audio nelle conversazioni. Genera una trascrizione di testo ogni volta che un messaggio audio viene inviato o ricevuto, mostrandolo accanto al messaggio.", + "API": { + "SUCCESS": "Impostazioni di trascrizione audio aggiornate con successo", + "ERROR": "Aggiornamento delle impostazioni di trascrizione audio non riuscito" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Durata dell'inattività per la risoluzione", + "HELP": "Durata dopo la quale una conversazione si risolve automaticamente se non c'è attività", + "PLACEHOLDER": "30", + "ERROR": "La durata della risoluzione automatica deve essere compresa tra 10 minuti e 999 giorni", + "API": { + "SUCCESS": "Impostazioni di risoluzione automatica aggiornate con successo", + "ERROR": "Impossibile aggiornare le impostazioni di risoluzione automatica" + }, + "UPDATE_BUTTON": "Aggiorna", + "MESSAGE_LABEL": "Messaggio di risoluzione personalizzato", + "MESSAGE_PLACEHOLDER": "La conversazione è stata contrassegnata come risolta dal sistema a causa di 15 giorni d'inattività", + "MESSAGE_HELP": "Questo messaggio viene inviato al cliente quando una conversazione viene risolta automaticamente dal sistema a causa di inattività." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "La continuità della conversazione via email è abilitata per il tuo account.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "Puoi ricevere email nel tuo dominio personalizzato ora." + } + }, + "UPDATE_CHATWOOT": "È disponibile un aggiornamento {latestChatwootVersion} per Chatwoot. Aggiorna la tua istanza.", + "LEARN_MORE": "Scopri di più", + "PAYMENT_PENDING": "Il tuo pagamento è in sospeso. Aggiorna le informazioni di pagamento per continuare a utilizzare Chatwoot", + "UPGRADE": "Aggiorna per continuare a usare Chatwoot", + "LIMITS_UPGRADE": "Il tuo account ha superato i limiti di utilizzo, aggiorna il tuo piano per continuare a utilizzare Chatwoot", + "OPEN_BILLING": "Apri fatturazione" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Premi Invio per selezionare", + "ENTER_TO_REMOVE": "Premi Invio per rimuovere", + "NO_OPTIONS": "L'elenco è vuoto", + "SELECT_ONE": "Selezionane uno", + "SELECT": "Seleziona" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Notifiche", + "MARK_ALL_DONE": "Contrassegna tutto come fatto", + "DELETE_TITLE": "eliminato", + "UNREAD_NOTIFICATION": { + "TITLE": "Notifiche non lette", + "ALL_NOTIFICATIONS": "Visualizza tutte le notifiche", + "LOADING_UNREAD_MESSAGE": "Caricamento notifiche non lette...", + "EMPTY_MESSAGE": "Non hai nessuna nuova notifica" + }, + "LIST": { + "LOADING_MESSAGE": "Caricamento notifiche...", + "404": "Nessuna notifica", + "TABLE_HEADER": [ + "Nome", + "Numero di Telefono", + "Conversazioni", + "Ultimo Contatto" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "Nuova conversazione", + "conversation_assignment": "Conversazione assegnata", + "assigned_conversation_new_message": "Nuovo Messaggio", + "participating_conversation_new_message": "Nuovo Messaggio", + "conversation_mention": "Menzione", + "sla_missed_first_response": "SLA Mancata", + "sla_missed_next_response": "SLA Mancata", + "sla_missed_resolution": "SLA Mancata" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Offline", + "RECONNECTING": "Riconnessione...", + "RECONNECT_SUCCESS": "Riconnesso" + }, + "BUTTON": { + "REFRESH": "Aggiorna" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Cerca o vai a", + "SECTIONS": { + "GENERAL": "Generale", + "REPORTS": "Report", + "CONVERSATION": "Conversazione", + "BULK_ACTIONS": "Azioni Bulk", + "CHANGE_ASSIGNEE": "Cambia assegnatario", + "CHANGE_PRIORITY": "Cambia Priorità", + "CHANGE_TEAM": "Cambia Team", + "SNOOZE_CONVERSATION": "Posticipa Conversazione", + "ADD_LABEL": "Aggiungi etichetta alla conversazione", + "REMOVE_LABEL": "Rimuovi etichetta dalla conversazione", + "SETTINGS": "Impostazioni", + "AI_ASSIST": "AI Assist", + "APPEARANCE": "Aspetto", + "SNOOZE_NOTIFICATION": "Posticipa Notifica" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Vai alla Dashboard Conversazioni", + "GO_TO_CONTACTS_DASHBOARD": "Vai alla Dashboard Contatti", + "GO_TO_REPORTS_OVERVIEW": "Vai alla Panoramica dei Report", + "GO_TO_CONVERSATION_REPORTS": "Vai ai Report delle Conversazioni", + "GO_TO_AGENT_REPORTS": "Vai ai Report degli Operatori", + "GO_TO_LABEL_REPORTS": "Vai ai Report delle Etichette", + "GO_TO_INBOX_REPORTS": "Vai ai Report delle Inbox", + "GO_TO_TEAM_REPORTS": "Vai ai Report dei Team", + "GO_TO_SETTINGS_AGENTS": "Vai alle Impostazioni Operatore", + "GO_TO_SETTINGS_TEAMS": "Vai alle Impostazioni Team", + "GO_TO_SETTINGS_INBOXES": "Vai alle Impostazioni Inbox", + "GO_TO_SETTINGS_LABELS": "Vai alle Impostazioni Etichette", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Vai alle Impostazioni delle Risposte Predefinite", + "GO_TO_SETTINGS_APPLICATIONS": "Vai alle Impostazioni Applicazione", + "GO_TO_SETTINGS_ACCOUNT": "Vai alle Impostazioni Account", + "GO_TO_SETTINGS_PROFILE": "Vai alle Impostazioni Profilo", + "GO_TO_NOTIFICATIONS": "Vai alle notifiche", + "ADD_LABELS_TO_CONVERSATION": "Aggiungi etichetta alla conversazione", + "ASSIGN_AN_AGENT": "Assegna un operatore", + "AI_ASSIST": "AI Assist", + "ASSIGN_PRIORITY": "Assegna priorità", + "ASSIGN_A_TEAM": "Assegna un team", + "MUTE_CONVERSATION": "Silenzia conversazione", + "UNMUTE_CONVERSATION": "Riattiva conversazione", + "REMOVE_LABEL_FROM_CONVERSATION": "Rimuovi etichetta dalla conversazione", + "REOPEN_CONVERSATION": "Riapri la conversazione", + "RESOLVE_CONVERSATION": "Risolvi la conversazione", + "SEND_TRANSCRIPT": "Invia una trascrizione email", + "SNOOZE_CONVERSATION": "Posticipa Conversazione", + "UNTIL_NEXT_REPLY": "Fino alla prossima risposta", + "UNTIL_NEXT_WEEK": "Fino alla prossima settimana", + "UNTIL_TOMORROW": "Fino a domani", + "UNTIL_NEXT_MONTH": "Fino al prossimo mese", + "AN_HOUR_FROM_NOW": "Fino a un'ora da adesso", + "UNTIL_CUSTOM_TIME": "Personalizza...", + "CHANGE_APPEARANCE": "Modifica Aspetto", + "LIGHT_MODE": "Chiaro", + "DARK_MODE": "Scuro", + "SYSTEM_MODE": "Sistema", + "SNOOZE_NOTIFICATION": "Posticipa Notifica" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Caricamento Dashboard App..." + }, + "COMMON": { + "OR": "Oppure", + "CLICK_HERE": "clicca qui" + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/helpCenter.json b/app/javascript/dashboard/i18n/locale/it/helpCenter.json new file mode 100644 index 0000000..920199c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Help Center", + "NEW_PAGE": { + "DESCRIPTION": "Crea portali di assistenza self-service per i tuoi clienti. Aiutali a trovare rapidamente le risposte che cercano, senza attese. Semplifica le richieste, migliora l'efficienza degli operatori e migliora l'assistenza clienti.", + "CREATE_PORTAL_BUTTON": "Crea Portale" + }, + "HEADER": { + "FILTER": "Filtra per", + "SORT": "Ordina per", + "LOCALE": "Lingua", + "SETTINGS_BUTTON": "Impostazioni", + "NEW_BUTTON": "Nuovo Articolo", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Pubblicato", + "DRAFT": "Bozza", + "ARCHIVED": "Archiviato" + }, + "TITLES": { + "ALL_ARTICLES": "Tutti Gli Articoli", + "MINE": "I Miei Articoli", + "DRAFT": "Articoli in Bozza", + "ARCHIVED": "Articoli Archiviati" + }, + "LOCALE_SELECT": { + "TITLE": "Seleziona lingua", + "PLACEHOLDER": "Seleziona lingua", + "NO_RESULT": "Nessuna lingua trovata", + "SEARCH_PLACEHOLDER": "Cerca lingua" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "Tutti gli Articoli", + "PUBLISH_BUTTON": "Pubblica", + "MOVE_TO_ARCHIVE_BUTTON": "Sposta nell'archivio", + "PREVIEW": "Anteprima", + "ADD_TRANSLATION": "Aggiungi traduzione", + "OPEN_SIDEBAR": "Apri barra laterale", + "CLOSE_SIDEBAR": "Chiudi barra laterale", + "SAVING": "Salvataggio...", + "SAVED": "Salvato" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Carica immagine", + "UPLOADING": "Caricamento...", + "SUCCESS": "Immagine caricata correttamente", + "ERROR": "Errore nel caricamento dell'immagine", + "UN_AUTHORIZED_ERROR": "Non sei autorizzato a caricare immagini", + "ERROR_FILE_SIZE": "La dimensione dell'immagine deve essere inferiore a {size}MB", + "ERROR_FILE_FORMAT": "Il formato immagine deve essere jpg, jpeg o png", + "ERROR_FILE_DIMENSIONS": "Le dimensioni dell'immagine dovrebbero essere inferiori a 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Impostazioni Articolo", + "FORM": { + "CATEGORY": { + "LABEL": "Categoria", + "TITLE": "Seleziona categoria", + "PLACEHOLDER": "Seleziona categoria", + "NO_RESULT": "Nessuna categoria trovata", + "SEARCH_PLACEHOLDER": "Cerca categoria" + }, + "AUTHOR": { + "LABEL": "Autore", + "TITLE": "Seleziona autore", + "PLACEHOLDER": "Seleziona autore", + "NO_RESULT": "Nessun autore trovato", + "SEARCH_PLACEHOLDER": "Cerca autore" + }, + "META_TITLE": { + "LABEL": "Titolo meta", + "PLACEHOLDER": "Aggiungi un titolo meta" + }, + "META_DESCRIPTION": { + "LABEL": "Descrizione meta", + "PLACEHOLDER": "Aggiungi la tua descrizione meta per migliori risultati SEO..." + }, + "META_TAGS": { + "LABEL": "Tag meta", + "PLACEHOLDER": "Aggiungi tag meta separati da virgola..." + } + }, + "BUTTONS": { + "ARCHIVE": "Archivia articolo", + "DELETE": "Elimina articolo" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Senza categoria", + "SEARCH_RESULTS": "Risultati ricerca per {query}", + "EMPTY_TEXT": "Cerca articoli da inserire nelle risposte.", + "SEARCH_LOADER": "Ricerca...", + "INSERT_ARTICLE": "Inserisci", + "NO_RESULT": "Nessun articolo trovato", + "COPY_LINK": "Copia il link dell'articolo negli appunti", + "OPEN_LINK": "Apri articolo in una nuova scheda", + "PREVIEW_LINK": "Anteprima articolo" + }, + "PORTAL": { + "HEADER": "Portali", + "DEFAULT": "Predefinito", + "NEW_BUTTON": "Nuovo Portale", + "ACTIVE_BADGE": "attivo", + "CHOOSE_LOCALE_LABEL": "Scegli una lingua", + "LOADING_MESSAGE": "Caricamento portali...", + "ARTICLES_LABEL": "articoli", + "NO_PORTALS_MESSAGE": "Non ci sono portali disponibili", + "ADD_NEW_LOCALE": "Aggiungi una nuova lingua", + "POPOVER": { + "TITLE": "Portali", + "PORTAL_SETTINGS": "Impostazioni Portale", + "SUBTITLE": "Hai più portali e puoi avere diverse lingue per ogni portale.", + "CANCEL_BUTTON_LABEL": "Annulla", + "CHOOSE_LOCALE_BUTTON": "Scegli lingua" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "articoli", + "ADD": "Aggiungi lingua", + "VISIT": "Visita sito", + "SETTINGS": "Impostazioni", + "DELETE": "Elimina" + }, + "PORTAL_CONFIG": { + "TITLE": "Configurazioni portale", + "ITEMS": { + "NAME": "Nome", + "DOMAIN": "Dominio personalizzato", + "SLUG": "Slug", + "TITLE": "Titolo del portale", + "THEME": "Colore del tema", + "SUB_TEXT": "Sottotesto del portale" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Lingue disponibili", + "TABLE": { + "NAME": "Nome lingua", + "CODE": "Codice lingua", + "ARTICLE_COUNT": "N° di articoli", + "CATEGORIES": "N° di categorie", + "SWAP": "Scambia", + "DELETE": "Elimina", + "DEFAULT_LOCALE": "Predefinito" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Elimina portale", + "MESSAGE": "Sei sicuro di voler eliminare questo portale", + "YES": "Sì, elimina il portale", + "NO": "No, mantieni il portale", + "API": { + "DELETE_SUCCESS": "Portale eliminato con successo", + "DELETE_ERROR": "Errore durante l'eliminazione del portale" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "Istruzioni CNAME inviate correttamente", + "ERROR_MESSAGE": "Errore nell'invio delle istruzioni CNAME" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Modifica portale", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Informazioni di base" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Personalizzazione del portale" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categorie" + }, + "LOCALE_SETTINGS": { + "TITLE": "Lingue" + } + }, + "CATEGORIES": { + "TITLE": "Categorie in", + "NEW_CATEGORY": "Nuova categoria", + "TABLE": { + "NAME": "Nome", + "DESCRIPTION": "Descrizione", + "LOCALE": "Lingua", + "ARTICLE_COUNT": "N° di articoli", + "ACTION_BUTTON": { + "EDIT": "Modifica categoria", + "DELETE": "Elimina categoria" + }, + "EMPTY_TEXT": "Nessuna categoria trovata" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Aggiorna impostazioni di base" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Informazioni del centro assistenza", + "BODY": "Informazioni di base sul portale" + }, + "CUSTOMIZATION": { + "TITLE": "Personalizzazione del centro assistenza", + "BODY": "Personalizza portale" + }, + "FINISH": { + "TITLE": "Voila! 🎉", + "BODY": "È tutto pronto!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Indietro", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Crea Portale", + "TITLE": "Informazioni Help Center", + "CREATE_BASIC_SETTING_BUTTON": "Crea impostazioni di base del portale" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Personalizzazione del portale", + "TITLE": "Personalizzazione help center", + "UPDATE_PORTAL_BUTTON": "Aggiorna impostazioni del portale" + }, + "FINISH_PAGE": { + "TITLE": "Voila!🎉 È tutto configurato!", + "MESSAGE": "Ora puoi vedere questo portale creato sulla pagina di tutti i portali.", + "FINISH": "Vai a tutti i portali" + } + }, + "LOGO": { + "LABEL": "Logo", + "UPLOAD_BUTTON": "Carica logo", + "HELP_TEXT": "Questo logo verrà visualizzato nell'intestazione del portale.", + "IMAGE_UPLOAD_SUCCESS": "Logo caricato correttamente", + "IMAGE_UPLOAD_ERROR": "Logo eliminato correttamente", + "IMAGE_DELETE_ERROR": "Errore durante l'eliminazione del logo" + }, + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Nome del portale", + "HELP_TEXT": "Il nome sarà utilizzato nel portale pubblico rivolto internamente.", + "ERROR": "Il nome è obbligatorio" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug portale per URL", + "ERROR": "Slug è obbligatorio" + }, + "DOMAIN": { + "LABEL": "Dominio personalizzato", + "PLACEHOLDER": "Dominio personalizzato del portale", + "HELP_TEXT": "Aggiungi solo se vuoi usare un dominio personalizzato per i tuoi portali. Per es.: {exampleURL}", + "ERROR": "Inserisci un URL di dominio valido" + }, + "HOME_PAGE_LINK": { + "LABEL": "Link Pagina Iniziale", + "PLACEHOLDER": "Link della pagina iniziale del portale", + "HELP_TEXT": "Il link utilizzato per tornare dal portale alla home page. Per es.: {exampleURL}", + "ERROR": "Inserisci un URL valido per la pagina iniziale" + }, + "THEME_COLOR": { + "LABEL": "Colore tema del portale", + "HELP_TEXT": "Questo colore verrà mostrato come colore del tema per il portale." + }, + "PAGE_TITLE": { + "LABEL": "Titolo pagina", + "PLACEHOLDER": "Titolo pagina del portale", + "HELP_TEXT": "Il titolo della pagina verrà utilizzato nel portale pubblico.", + "ERROR": "Il titolo della pagina è obbligatorio" + }, + "HEADER_TEXT": { + "LABEL": "Testo intestazione", + "PLACEHOLDER": "Testo intestazione del portale", + "HELP_TEXT": "Il testo dell'intestazione del portale sarà utilizzato nel portale pubblico.", + "ERROR": "Il testo dell'intestazione del portale è obbligatorio" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portale creato con successo.", + "ERROR_MESSAGE_FOR_BASIC": "Impossibile creare il portale. Riprova.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portale aggiornato con successo.", + "ERROR_MESSAGE_FOR_UPDATE": "Impossibile aggiornare il portale. Riprova." + } + }, + "ADD_LOCALE": { + "TITLE": "Aggiungi una nuova lingua", + "SUB_TITLE": "Questo aggiunge un nuova lingua alla tua lista di traduzioni disponibili.", + "PORTAL": "Portale", + "LOCALE": { + "LABEL": "Lingua", + "PLACEHOLDER": "Scegli una lingua", + "ERROR": "Lingua richiesta" + }, + "BUTTONS": { + "CREATE": "Crea lingua", + "CANCEL": "Annulla" + }, + "API": { + "SUCCESS_MESSAGE": "Lingua aggiunta con successo", + "ERROR_MESSAGE": "Impossibile aggiungere la lingua. Riprova." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Lingua predefinita aggiornata correttamente", + "ERROR_MESSAGE": "Impossibile aggiornare la lingua predefinita. Riprova." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Lingua rimossa dal portale con successo", + "ERROR_MESSAGE": "Impossibile rimuovere la lingua dal portale. Riprova." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Caricamento articoli...", + "404": "Nessun articolo corrisponde alla tua ricerca 🔍", + "NO_ARTICLES": "Non ci sono articoli disponibili", + "HEADERS": { + "TITLE": "Titolo", + "CATEGORY": "Categoria", + "READ_COUNT": "Visualizzazioni", + "STATUS": "Stato", + "LAST_EDITED": "Ultima modifica" + }, + "COLUMNS": { + "BY": "di", + "AUTHOR_NOT_AVAILABLE": "Autore non disponibile" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Caricamento articolo...", + "TITLE_PLACEHOLDER": "Il titolo dell'articolo va qui", + "CONTENT_PLACEHOLDER": "Scrivi qui il tuo articolo", + "API": { + "ERROR": "Errore durante il salvataggio dell'articolo" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Errore durante la pubblicazione dell'articolo", + "SUCCESS": "Articolo pubblicato correttamente" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Errore durante l'archiviazione dell'articolo", + "SUCCESS": "Articolo archiviato con successo" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Errore durante il salvataggio in bozza dell'articolo", + "SUCCESS": "Articolo salvato in bozza" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Conferma eliminazione", + "MESSAGE": "Sei sicuro di voler eliminare l'articolo?", + "YES": "Sì, elimina", + "NO": "No, conserva" + } + }, + "API": { + "SUCCESS_MESSAGE": "Articolo eliminato con successo", + "ERROR_MESSAGE": "Errore durante l'eliminazione dell'articolo" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Si prega di aggiungere l'intestazione e il contenuto dell'articolo quindi solo è possibile aggiornare le impostazioni" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Cerca articoli" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Crea una categoria", + "SUB_TITLE": "La categoria sarà utilizzata nel portale pubblico per classificare gli articoli.", + "PORTAL": "Portale", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Nome categoria", + "HELP_TEXT": "Il nome e l'icona della categoria saranno usati nel portale pubblico per categorizzare gli articoli.", + "ERROR": "Il nome è obbligatorio" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug categoria per url", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug è obbligatorio" + }, + "DESCRIPTION": { + "LABEL": "Descrizione", + "PLACEHOLDER": "Fornisci una breve descrizione della categoria.", + "ERROR": "La descrizione è obbligatoria" + }, + "BUTTONS": { + "CREATE": "Crea categoria", + "CANCEL": "Annulla" + }, + "API": { + "SUCCESS_MESSAGE": "Categoria creata con successo", + "ERROR_MESSAGE": "Impossibile creare la categoria" + } + }, + "EDIT": { + "TITLE": "Modifica una categoria", + "SUB_TITLE": "Modificare una categoria aggiornerà la categoria nel portale pubblico.", + "PORTAL": "Portale", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Nome categoria", + "HELP_TEXT": "Il nome e l'icona della categoria saranno usati nel portale pubblico per categorizzare gli articoli.", + "ERROR": "Il nome è obbligatorio" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug categoria per url", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug è obbligatorio" + }, + "DESCRIPTION": { + "LABEL": "Descrizione", + "PLACEHOLDER": "Fornisci una breve descrizione della categoria.", + "ERROR": "La descrizione è obbligatoria" + }, + "BUTTONS": { + "CREATE": "Aggiorna categoria", + "CANCEL": "Annulla" + }, + "API": { + "SUCCESS_MESSAGE": "Categoria aggiornata con successo", + "ERROR_MESSAGE": "Impossibile aggiornare la categoria" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Categoria eliminata con successo", + "ERROR_MESSAGE": "Impossibile eliminare la categoria" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Cerca articoli", + "PLACEHOLDER": "Cerca articoli", + "NO_RESULT": "Nessun articolo trovato", + "SEARCHING": "Ricerca...", + "SEARCH_BUTTON": "Cerca", + "INSERT_ARTICLE": "Inserisci link", + "IFRAME_ERROR": "URL vuoto o non valido. Impossibile visualizzare il contenuto.", + "OPEN_ARTICLE_SEARCH": "Inserisci articolo dall'Help Center", + "SUCCESS_ARTICLE_INSERTED": "Articolo inserito correttamente", + "PREVIEW_LINK": "Anteprima articolo", + "CANCEL": "Chiudi", + "BACK": "Indietro", + "BACK_RESULTS": "Torna ai risultati" + }, + "UPGRADE_PAGE": { + "TITLE": "Help Center", + "DESCRIPTION": "Crea portali self-service user-friendly. Aiuta i tuoi utenti ad accedere agli articoli e ottieni supporto 24/7. Aggiorna il tuo abbonamento per abilitare questa funzionalità.", + "SELF_HOSTED_DESCRIPTION": "Crea portali self-service user-friendly. Aiuta i tuoi utenti ad accedere agli articoli e ottieni supporto 24/7. Contatta l'amministratore per abilitare questa funzione.", + "BUTTON": { + "LEARN_MORE": "Scopri di più", + "UPGRADE": "Aggiorna" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Più portali", + "DESCRIPTION": "Crea più portali help center per diversi prodotti utilizzando lo stesso account." + }, + "LOCALES": { + "TITLE": "Supporto completo per le lingue", + "DESCRIPTION": "Localizza il portale nella tua lingua. Supportiamo tutte le lingue e permettiamo traduzioni per ogni articolo." + }, + "SEO": { + "TITLE": "Design SEO-friendly", + "DESCRIPTION": "Personalizza i tuoi meta tag per migliorare la tua visibilità sui motori di ricerca con le nostre pagine SEO-friendly." + }, + "API": { + "TITLE": "Supporto API completo", + "DESCRIPTION": "Utilizzare il portale come un headless CMS con front-end di terze parti utilizzando le nostre API." + } + } + }, + "LOADING": "Caricamento...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} visualizzazione | {count} visualizzazioni", + "DROPDOWN_MENU": { + "PUBLISH": "Pubblica", + "DRAFT": "Bozza", + "ARCHIVE": "Archivia", + "DELETE": "Elimina" + }, + "STATUS": { + "DRAFT": "Bozza", + "PUBLISHED": "Pubblicato", + "ARCHIVED": "Archiviato" + }, + "CATEGORY": { + "UNCATEGORISED": "Senza categoria" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "Tutti gli articoli", + "MINE": "Mie", + "DRAFT": "Bozza", + "PUBLISHED": "Pubblicato", + "ARCHIVED": "Archiviato" + }, + "CATEGORY": { + "ALL": "Tutte le categorie" + }, + "LOCALE": { + "ALL": "Tutte le lingue" + }, + "NEW_ARTICLE": "Nuovo articolo" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Scrivi un articolo", + "SUBTITLE": "Scrivi un articolo, iniziamo!", + "BUTTON_LABEL": "Nuovo articolo" + }, + "MINE": { + "TITLE": "Non hai scritto nessun articolo qui", + "SUBTITLE": "Tutti gli articoli scritti da te appaiono qui per un rapido accesso." + }, + "DRAFT": { + "TITLE": "Non ci sono articoli nelle bozze", + "SUBTITLE": "Gli articoli in bozza appariranno qui" + }, + "PUBLISHED": { + "TITLE": "Non ci sono articoli pubblicati", + "SUBTITLE": "Gli articoli pubblicati appariranno qui" + }, + "ARCHIVED": { + "TITLE": "Non ci sono articoli nell'archivio", + "SUBTITLE": "Gli articoli archiviati non vengono visualizzati sul portale, puoi usarli per contrassegnare pagine obsolete o deprecate" + }, + "CATEGORY": { + "TITLE": "Non ci sono articoli in questa categoria", + "SUBTITLE": "Gli articoli in questa categoria appariranno qui" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "Nuova categoria", + "EDIT_CATEGORY": "Modifica categoria", + "CATEGORIES_COUNT": "{n} categoria | {n} categorie", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categorie ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articoli) | {categoryName} ({categoryCount} articolo)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "Nessuna categoria trovata", + "SUBTITLE": "Le categorie appariranno qui. Puoi aggiungere una categoria cliccando sul pulsante 'Nuova Categoria'." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} articolo | {count} articoli" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Categoria creata con successo", + "ERROR_MESSAGE": "Impossibile creare la categoria" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Categoria aggiornata con successo", + "ERROR_MESSAGE": "Impossibile aggiornare la categoria" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Categoria eliminata con successo", + "ERROR_MESSAGE": "Impossibile eliminare la categoria" + } + }, + "HEADER": { + "CREATE": "Crea categoria", + "EDIT": "Modifica categoria", + "DESCRIPTION": "Modificare una categoria aggiornerà la categoria nel portale pubblico.", + "PORTAL": "Portale", + "LOCALE": "Locale" + }, + "FORM": { + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Nome categoria", + "ERROR": "Il nome è obbligatorio" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug categoria per url", + "ERROR": "Slug è obbligatorio", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Descrizione", + "PLACEHOLDER": "Fornisci una breve descrizione della categoria.", + "ERROR": "La descrizione è obbligatoria" + } + }, + "BUTTONS": { + "CREATE": "Crea", + "EDIT": "Aggiorna", + "CANCEL": "annulla" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "Nessuna lingua disponibile | {n} lingua | {n} lingue", + "NEW_LOCALE_BUTTON_TEXT": "Nuova lingua", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} articolo | {count} articoli", + "CATEGORIES_COUNT": "{count} categoria | {count} categorie", + "DEFAULT": "Predefinito", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Imposta predefinito", + "DELETE": "Elimina" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Aggiungi una nuova lingua", + "DESCRIPTION": "Seleziona la lingua in cui questo articolo verrà scritto. Questo sarà aggiunto alla tua lista di traduzioni e puoi aggiungerne di più in seguito.", + "COMBOBOX": { + "PLACEHOLDER": "Seleziona lingua..." + }, + "API": { + "SUCCESS_MESSAGE": "Lingua aggiunta con successo", + "ERROR_MESSAGE": "Impossibile aggiungere la lingua. Riprova." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Salvataggio...", + "SAVED": "Salvato" + }, + "PREVIEW": "Anteprima", + "PUBLISH": "Pubblica", + "DRAFT": "Bozza", + "ARCHIVE": "Archivia", + "BACK_TO_ARTICLES": "Torna agli articoli" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "Altre proprietà", + "UNCATEGORIZED": "Senza categoria", + "EDITOR_PLACEHOLDER": "Scrivi qualcosa..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Proprietà articolo", + "META_DESCRIPTION": "Descrizione meta", + "META_DESCRIPTION_PLACEHOLDER": "Aggiungi descrizione meta", + "META_TITLE": "Titolo meta", + "META_TITLE_PLACEHOLDER": "Aggiungi titolo meta", + "META_TAGS": "Tag meta", + "META_TAGS_PLACEHOLDER": "Aggiungi tag meta" + }, + "API": { + "ERROR": "Errore durante il salvataggio dell'articolo" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "Nuovo portale", + "PORTALS": "Portali", + "CREATE_PORTAL": "Crea e gestisci più portali", + "ARTICLES": "articoli", + "DOMAIN": "dominio", + "PORTAL_NAME": "Nome del portale" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Crea nuovo portale", + "DESCRIPTION": "Dai un nome al tuo portale e crea uno slug URL user-friendly. Puoi modificare entrambi in seguito nelle impostazioni.", + "CONFIRM_BUTTON_LABEL": "Crea", + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Guida Utente | Chatwoot", + "MESSAGE": "Scegli un nome per il tuo portale.", + "ERROR": "Nome richiesto" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Slug è obbligatorio", + "FORMAT_ERROR": "Inserisci uno slug valido, ad esempio: guida-utente" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logo", + "IMAGE_UPLOAD_ERROR": "Impossibile caricare l'immagine! Riprova", + "IMAGE_UPLOAD_SUCCESS": "Immagine aggiunta con successo. Clicca su salva le modifiche per salvare il logo", + "IMAGE_DELETE_SUCCESS": "Logo eliminato correttamente", + "IMAGE_DELETE_ERROR": "Impossibile eliminare il logo", + "IMAGE_UPLOAD_SIZE_ERROR": "La dimensione dell'immagine deve essere inferiore a {size}MB" + }, + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Nome del portale", + "ERROR": "Nome richiesto" + }, + "HEADER_TEXT": { + "LABEL": "Testo intestazione", + "PLACEHOLDER": "Testo intestazione del portale" + }, + "PAGE_TITLE": { + "LABEL": "Titolo della pagina", + "PLACEHOLDER": "Titolo pagina del portale" + }, + "HOME_PAGE_LINK": { + "LABEL": "Link pagina iniziale", + "PLACEHOLDER": "Link della pagina iniziale del portale", + "ERROR": "Inserisci un URL valido. Il link della Home page deve iniziare con 'http://' o 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug del portale" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Widget live chat", + "PLACEHOLDER": "Seleziona widget live chat", + "HELP_TEXT": "Seleziona un widget di live chat che apparirà nel tuo help center", + "NONE_OPTION": "Nessun widget" + }, + "BRAND_COLOR": { + "LABEL": "Colore del brand" + }, + "SAVE_CHANGES": "Salva modifiche" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Dominio personalizzato", + "LABEL": "Dominio personalizzato:", + "DESCRIPTION": "Puoi ospitare il tuo portale su un dominio personalizzato. Per esempio, se il tuo sito web è tuodominio.com e vuoi che il tuo portale sia disponibile su docs.tuodominio.com, semplicemente inseriscilo in questo campo.", + "STATUS_DESCRIPTION": "Il tuo portale personalizzato inizierà a funzionare non appena verrà verificato.", + "PLACEHOLDER": "Dominio personalizzato del portale", + "EDIT_BUTTON": "Modifica", + "ADD_BUTTON": "Aggiungi dominio personalizzato", + "STATUS": { + "LIVE": "Live", + "PENDING": "In attesa di verifica", + "ERROR": "Verifica non riuscita" + }, + "DIALOG": { + "ADD_HEADER": "Aggiungi dominio personalizzato", + "EDIT_HEADER": "Modifica dominio personalizzato", + "ADD_CONFIRM_BUTTON_LABEL": "Aggiungi dominio", + "EDIT_CONFIRM_BUTTON_LABEL": "Aggiorna dominio", + "LABEL": "Dominio personalizzato", + "PLACEHOLDER": "Dominio personalizzato del portale", + "ERROR": "Il dominio personalizzato è obbligatorio", + "FORMAT_ERROR": "Inserisci un URL di dominio valido, ad esempio: docs.tuodominio.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "Configurazione DNS", + "DESCRIPTION": "Accedi al tuo provider DNS e aggiungi un record CNAME per subdominio che punta a chatwoot.help", + "COPY": "CNAME copiato", + "SEND_INSTRUCTIONS": { + "HEADER": "Invia istruzioni", + "DESCRIPTION": "Se preferisci avere qualcuno dal tuo team di sviluppo per gestire questo passaggio, puoi inserire l'indirizzo email qui sotto, e invieremo loro le istruzioni richieste.", + "PLACEHOLDER": "Inserisci il loro indirizzo email", + "ERROR": "Inserisci un indirizzo email valido", + "SEND_BUTTON": "Invia" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Elimina {portalName}", + "HEADER": "Elimina portale", + "DESCRIPTION": "Elimina definitivamente questo portale. Questa azione è irreversibile", + "DIALOG": { + "HEADER": "Sei sicuro di voler eliminare {portalName}?", + "DESCRIPTION": "Si tratta di un'azione permanente che non può essere annullata.", + "CONFIRM_BUTTON_LABEL": "Elimina" + } + }, + "EDIT_CONFIGURATION": "Modifica configurazione" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portale creato con successo", + "ERROR_MESSAGE": "Impossibile creare il portale" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portale aggiornato con successo", + "ERROR_MESSAGE": "Impossibile aggiornare il portale" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Carica Documento PDF", + "DESCRIPTION": "Carica un documento PDF per generare automaticamente FAQ utilizzando AI", + "DRAG_DROP_TEXT": "Trascina il tuo file PDF qui, o fai clic per selezionare", + "SELECT_FILE": "Seleziona File PDF", + "ADDITIONAL_CONTEXT_LABEL": "Contesto Aggiuntivo (Opzionale)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Fornisci contesto o istruzioni aggiuntive per la generazione delle FAQ...", + "UPLOADING": "Caricamento...", + "UPLOAD": "Carica ed elabora", + "CANCEL": "Annulla", + "ERROR_INVALID_TYPE": "Seleziona un file PDF valido", + "ERROR_FILE_TOO_LARGE": "La dimensione del file deve essere inferiore a 512MB", + "ERROR_UPLOAD_FAILED": "Impossibile caricare il PDF. Riprova." + }, + "PDF_DOCUMENTS": { + "TITLE": "Documenti PDF", + "DESCRIPTION": "Gestisci i documenti PDF caricati e genera FAQ da essi", + "UPLOAD_PDF": "Carica PDF", + "UPLOAD_FIRST_PDF": "Carica il tuo primo PDF", + "UPLOADED_BY": "Caricato da", + "GENERATE_FAQS": "Genera FAQ", + "GENERATING": "Generazione...", + "CONFIRM_DELETE": "Sei sicuro di voler eliminare {filename}?", + "EMPTY_STATE": { + "TITLE": "Nessun documento PDF", + "DESCRIPTION": "Carica documenti PDF per generare automaticamente FAQ utilizzando AI" + }, + "STATUS": { + "UPLOADED": "Pronto", + "PROCESSING": "Elaborazione", + "PROCESSED": "Completata", + "FAILED": "Non Riuscito" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Generazione Contenuti", + "DESCRIPTION": "Carica documenti PDF per generare automaticamente contenuti FAQ utilizzando AI", + "UPLOAD_TITLE": "Carica Documento PDF", + "DRAG_DROP": "Trascina il tuo file PDF qui, o fai clic per selezionare", + "SELECT_FILE": "Seleziona File PDF", + "UPLOADING": "Elaborazione documento...", + "UPLOAD_SUCCESS": "Documento elaborato con successo!", + "UPLOAD_ERROR": "Impossibile caricare il documento. Riprova.", + "INVALID_FILE_TYPE": "Seleziona un file PDF valido", + "FILE_TOO_LARGE": "La dimensione del file deve essere inferiore a 512MB", + "GENERATED_CONTENT": "Contenuti FAQ Generati", + "PUBLISH_SELECTED": "Pubblica Selezionati", + "PUBLISHING": "Pubblicazione...", + "FROM_DOCUMENT": "Dal documento", + "NO_CONTENT": "Nessun contenuto generato disponibile. Carica un documento PDF per iniziare.", + "LOADING": "Caricamento contenuti generati..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/inbox.json b/app/javascript/dashboard/i18n/locale/it/inbox.json new file mode 100644 index 0000000..997f34f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "La mia Inbox", + "DISPLAY_DROPDOWN": "Visualizza", + "LOADING": "Caricamento notifiche", + "404": "Non ci sono notifiche attive in questo gruppo.", + "NO_NOTIFICATIONS": "Nessuna notifica", + "NOTE": "Notifiche da tutte le Inbox", + "NO_MESSAGES_AVAILABLE": "Oops! Impossibile recuperare i messaggi", + "SNOOZED_UNTIL": "Posticipata fino a", + "SNOOZED_UNTIL_TOMORROW": "Posticipata fino a domani", + "SNOOZED_UNTIL_NEXT_WEEK": "Posticipata fino alla prossima settimana" + }, + "ACTION_HEADER": { + "SNOOZE": "Posticipa notifica", + "DELETE": "Elimina notifica", + "BACK": "Indietro" + }, + "TYPES": { + "CONVERSATION_MENTION": "Sei stato menzionato in una conversazione", + "CONVERSATION_CREATION": "Nuova conversazione creata", + "CONVERSATION_ASSIGNMENT": "Ti è stata assegnata una conversazione", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Nuovo messaggio in una conversazione assegnata", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Nuovo messaggio in una conversazione a cui partecipi", + "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation", + "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation", + "SLA_MISSED_RESOLUTION": "SLA target resolution missed for conversation" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Menzioni", + "CONVERSATION_ASSIGNMENT": "Assegnate a te", + "CONVERSATION_CREATION": "Nuova Conversazione", + "SLA_MISSED_FIRST_RESPONSE": "Violazione SLA", + "SLA_MISSED_NEXT_RESPONSE": "Violazione SLA", + "SLA_MISSED_RESOLUTION": "Violazione SLA", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Nuovo messaggio", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Nuovo messaggio", + "SNOOZED_UNTIL": "Posticipata per {time}", + "SNOOZED_ENDS": "Posticipo terminato" + }, + "NO_CONTENT": "Nessun contenuto disponibile", + "MENU_ITEM": { + "MARK_AS_READ": "Segna come letta", + "MARK_AS_UNREAD": "Segna come da leggere", + "SNOOZE": "Posticipa", + "DELETE": "Elimina", + "MARK_ALL_READ": "Segna tutte come lette", + "DELETE_ALL": "Elimina tutte", + "DELETE_ALL_READ": "Elimina tutte le lette" + }, + "DISPLAY_MENU": { + "SORT": "Ordina", + "DISPLAY": "Visualizza:", + "SORT_OPTIONS": { + "NEWEST": "Più Recenti", + "OLDEST": "Meno Recenti", + "PRIORITY": "Priorità" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Posticipate", + "READ": "Lette", + "LABELS": "Etichette", + "CONVERSATION_ID": "ID Conversazione" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notifica segnata come letta", + "MARK_AS_UNREAD": "Notifica segnata come non letta", + "SNOOZE": "Notifica posticipata", + "DELETE": "Notifica eliminata", + "MARK_ALL_READ": "Tutte le notifiche segnate come lette", + "DELETE_ALL": "Tutte le notifiche eliminate", + "DELETE_ALL_READ": "Tutte le notifiche lette cancellate" + }, + "REAUTHORIZE": { + "TITLE": "Riautorizzazione Necessaria", + "DESCRIPTION": "La tua connessione a WhatsApp è scaduta. Ti preghiamo di riconnetterti per continuare a ricevere e inviare messaggi.", + "BUTTON_TEXT": "Riconnetti WhatsApp", + "LOADING_FACEBOOK": "Caricamento del Facebook SDK...", + "SUCCESS": "WhatsApp riconnesso correttamente", + "ERROR": "Impossibile riconnettere WhatsApp. Per favore riprova.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID non è configurato. Si prega di contattare l'amministratore.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID non è configurato. Si prega di contattare l'amministratore.", + "CONFIGURATION_ERROR": "Errore di configurazione durante la riautorizzazione.", + "FACEBOOK_LOAD_ERROR": "Impossibile caricare Facebook SDK. Per favore riprova.", + "TROUBLESHOOTING": { + "TITLE": "Risoluzione Problemi", + "POPUP_BLOCKED": "Assicurati che i pop-up siano permessi per questo sito", + "COOKIES": "I cookie di terze parti devono essere abilitati", + "ADMIN_ACCESS": "Hai bisogno di accesso amministratore all'account WhatsApp Business" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json new file mode 100644 index 0000000..0963fd3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Inbox", + "DESCRIPTION": "Un canale è il mezzo di comunicazione che il cliente usa per interagire con te. Una Inbox è lo spazio in cui gestisci le interazioni di uno specifico canale. Può includere comunicazioni provenienti da diverse fonti, come email, live chat e social media.", + "LEARN_MORE": "Scopri di più sulle Inbox", + "RECONNECTION_REQUIRED": "La tua Inbox è disconnessa. Non riceverai nuovi messaggi finché non la autorizzerai nuovamente.", + "CLICK_TO_RECONNECT": "Clicca qui per riconnetterti.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "La registrazione di WhatsApp Business non è completa. Si prega di controllare lo stato del nome visualizzato in Meta Business Manager prima di riconnettersi.", + "COMPLETE_REGISTRATION": "Completa Registrazione", + "LIST": { + "404": "Non ci sono inbox allegate a questo account." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Scegli il canale", + "BODY": "Scegli il provider che vuoi integrare con Chatwoot." + }, + "INBOX": { + "TITLE": "Crea Inbox", + "BODY": "Autentica il tuo account e crea una inbox." + }, + "AGENT": { + "TITLE": "Aggiungi Operatori", + "BODY": "Aggiungi operatori alla inbox creata." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "Sei pronto per iniziare!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Nome Inbox", + "PLACEHOLDER": "Inserisci il nome della tua Inbox (ad esempio: Acme Srl)", + "ERROR": "Inserisci un nome Inbox valido" + }, + "WEBSITE_NAME": { + "LABEL": "Nome Sito Web", + "PLACEHOLDER": "Inserisci il nome del tuo sito web (ad esempio: Acme Srl)" + }, + "FB": { + "HELP": "PS: Accedendo, abbiamo accesso solo ai messaggi della tua pagina. Chatwoot non potrà accedere ai tuoi messaggi privati.", + "CHOOSE_PAGE": "Scegli una Pagina", + "CHOOSE_PLACEHOLDER": "Seleziona una pagina dalla lista", + "INBOX_NAME": "Nome Inbox", + "ADD_NAME": "Aggiungi un nome per la tua inbox", + "PICK_NAME": "Scegli un nome per la tua Inbox", + "PICK_A_VALUE": "Scegli un valore", + "CREATE_INBOX": "Crea Inbox" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continua con Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Collega il tuo profilo Instagram", + "HELP": "Per aggiungere il tuo profilo Instagram come canale, devi autenticare il tuo profilo Instagram cliccando su 'Continua con Instagram' ", + "ERROR_MESSAGE": "Si è verificato un errore nella connessione a Instagram, riprova", + "ERROR_AUTH": "Si è verificato un errore nella connessione a Instagram, riprova", + "NEW_INBOX_SUGGESTION": "Questo account Instagram era precedentemente collegato a una Inbox diversa ed è stato ora migrato qui. Tutti i nuovi messaggi appariranno qui. La vecchia Inbox non sarà più in grado di inviare o ricevere messaggi per questo account.", + "DUPLICATE_INBOX_BANNER": "Questo account Instagram è stato migrato alla nuova Inbox del canale Instagram. Non sarai più in grado di inviare/ricevere messaggi Instagram da questa Inbox." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continua con TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connetti il tuo profilo TikTok", + "HELP": "Per aggiungere il tuo profilo TikTok come canale, devi autenticare il tuo profilo TikTok cliccando su 'Continua con TikTok' ", + "ERROR_MESSAGE": "Si è verificato un errore nella connessione a TikTok, riprova", + "ERROR_AUTH": "Si è verificato un errore nella connessione a TikTok, riprova" + }, + "TWITTER": { + "HELP": "Per aggiungere il tuo profilo Twitter come canale, devi autenticare il tuo profilo Twitter cliccando su 'Accedi con Twitter' ", + "ERROR_MESSAGE": "Si è verificato un errore nella connessione a Twitter, riprova", + "TWEETS": { + "ENABLE": "Crea conversazioni dai Tweet menzionati" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Canale sito web", + "DESC": "Crea un canale per il tuo sito web ed inizia a dare supporto ai tuoi clienti tramite il nostro widget per siti web.", + "LOADING_MESSAGE": "Creazione del Canale di Supporto Sito Web", + "CHANNEL_AVATAR": { + "LABEL": "Avatar del canale" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "URL del webhook", + "PLACEHOLDER": "Inserisci il tuo URL Webhook", + "ERROR": "Inserisci un URL valido" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Dominio del Sito", + "PLACEHOLDER": "Inserisci il dominio del tuo sito web (es: acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Intestazione di benvenuto", + "PLACEHOLDER": "Ciao!" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Titolo di benvenuto", + "PLACEHOLDER": "Siamo qui per aiutarti. Facci una domanda o condividi il tuo feedback." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Messaggio di saluto del canale", + "PLACEHOLDER": "Acme Srl generalmente risponde in poche ore." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Abilita messaggio di benvenuto sul canale", + "HELP_TEXT": "Invia automaticamente un messaggio di benvenuto quando un cliente avvia una nuova conversazione.", + "ENABLED": "Abilitato", + "DISABLED": "Disabilitato" + }, + "REPLY_TIME": { + "TITLE": "Imposta tempo di risposta", + "IN_A_FEW_MINUTES": "In pochi minuti", + "IN_A_FEW_HOURS": "In poche ore", + "IN_A_DAY": "In un giorno", + "HELP_TEXT": "Questo tempo di risposta verrà mostrato sul widget della live chat" + }, + "WIDGET_COLOR": { + "LABEL": "Colore del widget", + "PLACEHOLDER": "Aggiorna il colore del widget utilizzato nel widget" + }, + "SUBMIT_BUTTON": "Crea Inbox", + "API": { + "ERROR_MESSAGE": "Impossibile creare il canale sito web, riprova" + } + }, + "TWILIO": { + "TITLE": "Canale Twilio SMS/WhatsApp", + "DESC": "Integra Twilio e inizia a supportare i tuoi clienti tramite SMS o WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "SID dell'account", + "PLACEHOLDER": "Inserisci il tuo SID Account Twilio", + "ERROR": "Questo campo è obbligatorio" + }, + "API_KEY": { + "USE_API_KEY": "Usa l’autenticazione con chiave API", + "LABEL": "API Key SID", + "PLACEHOLDER": "Inserisci la tua API Key SID", + "ERROR": "Questo campo è obbligatorio" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Inserisci la tua API Key Secret", + "ERROR": "Questo campo è obbligatorio" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "SID Servizio Messaggi", + "PLACEHOLDER": "Inserisci il SID Servizio Messaggi di Twilio", + "ERROR": "Questo campo è obbligatorio", + "USE_MESSAGING_SERVICE": "Usa un servizio di messaggistica Twilio" + }, + "CHANNEL_TYPE": { + "LABEL": "Tipo di canale", + "ERROR": "Seleziona il tipo di canale" + }, + "AUTH_TOKEN": { + "LABEL": "Token di autenticazione", + "PLACEHOLDER": "Inserisci il tuo Token Autenticazione Twilio", + "ERROR": "Questo campo è obbligatorio" + }, + "CHANNEL_NAME": { + "LABEL": "Nome Inbox", + "PLACEHOLDER": "Inserisci un nome della Inbox", + "ERROR": "Questo campo è obbligatorio" + }, + "PHONE_NUMBER": { + "LABEL": "Numero di Telefono", + "PLACEHOLDER": "Inserisci il numero di telefono dal quale verrà inviato il messaggio.", + "ERROR": "Inserisci un numero di telefono valido che inizi con un `+` e non contenga spazi." + }, + "API_CALLBACK": { + "TITLE": "URL di callback", + "SUBTITLE": "È necessario configurare l'URL di callback del messaggio in Twilio con l'URL menzionato qui." + }, + "SUBMIT_BUTTON": "Crea un canale Twilio", + "API": { + "ERROR_MESSAGE": "Non siamo stati in grado di autenticare le credenziali di Twilio, riprova" + } + }, + "SMS": { + "TITLE": "Canale SMS", + "DESC": "Inizia a supportare i tuoi clienti tramite SMS.", + "PROVIDERS": { + "LABEL": "Provider API", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandwidth" + }, + "API": { + "ERROR_MESSAGE": "Impossibile salvare il canale SMS" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "ID Account", + "PLACEHOLDER": "Inserisci il tuo Account ID Bandwidth", + "ERROR": "Questo campo è obbligatorio" + }, + "API_KEY": { + "LABEL": "Chiave API", + "PLACEHOLDER": "Inserisci la tua chiave API di Bandwidth", + "ERROR": "Questo campo è obbligatorio" + }, + "API_SECRET": { + "LABEL": "Chiave API segreta", + "PLACEHOLDER": "Inserisci la tua API Secret di Bandwidth", + "ERROR": "Questo campo è obbligatorio" + }, + "APPLICATION_ID": { + "LABEL": "ID Applicazione", + "PLACEHOLDER": "Inserisci il tuo ID Applicazione di Bandwidth", + "ERROR": "Questo campo è obbligatorio" + }, + "INBOX_NAME": { + "LABEL": "Nome Inbox", + "PLACEHOLDER": "Inserisci un nome della Inbox", + "ERROR": "Questo campo è obbligatorio" + }, + "PHONE_NUMBER": { + "LABEL": "Numero di telefono", + "PLACEHOLDER": "Inserisci il numero di telefono dal quale verrà inviato il messaggio.", + "ERROR": "Inserisci un numero di telefono valido che inizi con un `+` e non contenga spazi." + }, + "SUBMIT_BUTTON": "Crea un Canale Bandwidth", + "API": { + "ERROR_MESSAGE": "Impossibile autenticare le credenziali di Bandwidth, riprova" + }, + "API_CALLBACK": { + "TITLE": "URL di callback", + "SUBTITLE": "È necessario configurare l'URL di callback del messaggio in Bandwidth con l'URL menzionato qui." + } + } + }, + "WHATSAPP": { + "TITLE": "Canale WhatsApp", + "DESC": "Inizia a supportare i tuoi clienti tramite WhatsApp.", + "PROVIDERS": { + "LABEL": "Provider API", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Configurazione rapida tramite Meta", + "TWILIO_DESC": "Connetti tramite credenziali Twilio", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Seleziona il tuo API provider", + "DESCRIPTION": "Scegli il tuo provider WhatsApp. Puoi connetterti direttamente tramite Meta che non richiede alcuna configurazione o connetterti tramite Twilio utilizzando le credenziali del tuo account." + }, + "INBOX_NAME": { + "LABEL": "Nome Inbox", + "PLACEHOLDER": "Inserisci un nome della Inbox", + "ERROR": "Questo campo è obbligatorio" + }, + "PHONE_NUMBER": { + "LABEL": "Numero di telefono", + "PLACEHOLDER": "Inserisci il numero di telefono dal quale verrà inviato il messaggio.", + "ERROR": "Inserisci un numero di telefono valido che inizi con un `+` e non contenga spazi." + }, + "PHONE_NUMBER_ID": { + "LABEL": "ID numero di telefono", + "PLACEHOLDER": "Inserisci l'ID del numero di telefono ottenuto dalla dashboard sviluppatore di Facebook.", + "ERROR": "Inserisci un valore valido." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "ID Account Business", + "PLACEHOLDER": "Inserisci l'ID dell'Account Business ottenuto dalla dashboard sviluppatore di Facebook.", + "ERROR": "Inserisci un valore valido." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook verifica token", + "PLACEHOLDER": "Inserisci un token di verifica che vuoi configurare per i webhook Facebook.", + "ERROR": "Inserisci un valore valido." + }, + "API_KEY": { + "LABEL": "Chiave API", + "SUBTITLE": "Configura la chiave API di WhatsApp.", + "PLACEHOLDER": "Chiave API", + "ERROR": "Inserisci un valore valido." + }, + "API_CALLBACK": { + "TITLE": "URL di callback", + "SUBTITLE": "È necessario configurare l'URL del webhook e il token di verifica nel portale Facebook Developer con i valori mostrati di seguito.", + "WEBHOOK_URL": "URL del webhook", + "WEBHOOK_VERIFICATION_TOKEN": "Token Di Verifica Webhook" + }, + "SUBMIT_BUTTON": "Crea Canale WhatsApp", + "EMBEDDED_SIGNUP": { + "TITLE": "Configurazione rapida tramite Meta", + "DESC": "Utilizza il WhatsApp Embedded Signup per collegare rapidamente nuovi numeri. Sarai reindirizzato a Meta per accedere al tuo account WhatsApp Business. Avere accesso amministratore aiuterà a rendere la configurazione semplice e facile.", + "BENEFITS": { + "TITLE": "Vantaggi della registrazione integrata:", + "EASY_SETUP": "Nessuna configurazione manuale richiesta", + "SECURE_AUTH": "Autenticazione sicura basata su OAuth", + "AUTO_CONFIG": "Configurazione automatica del webhook e del numero di telefono" + }, + "LEARN_MORE": { + "TEXT": "Per saperne di più su embedded signup, prezzi e limitazioni, visita {link}.", + "LINK_TEXT": "questo link" + }, + "SUBMIT_BUTTON": "Connetti con WhatsApp Business", + "AUTH_PROCESSING": "Autenticazione con Meta", + "WAITING_FOR_BUSINESS_INFO": "Completa la configurazione aziendale nella finestra Meta...", + "PROCESSING": "Configurazione del tuo account WhatsApp Business", + "LOADING_SDK": "Caricamento del Facebook SDK...", + "CANCELLED": "Registrazione WhatsApp annullata", + "SUCCESS_TITLE": "Account WhatsApp Business connesso!", + "WAITING_FOR_AUTH": "In attesa dell'autenticazione...", + "INVALID_BUSINESS_DATA": "Dati aziendali non validi ricevuti da Facebook. Riprova.", + "SIGNUP_ERROR": "Errore di registrazione", + "AUTH_NOT_COMPLETED": "Autenticazione non completata. Riavvia il processo.", + "SUCCESS_FALLBACK": "Account WhatsApp Business è stato configurato con successo", + "MANUAL_FALLBACK": "Se il tuo numero è già connesso alla WhatsApp Business Platform (API), o se sei un provider tecnologico, si prega di utilizzare il {link}", + "MANUAL_LINK_TEXT": "flow di registrazione manuale" + }, + "API": { + "ERROR_MESSAGE": "Impossibile salvare il canale WhatsApp" + } + }, + "VOICE": { + "TITLE": "Canale Vocale", + "DESC": "Integra Twilio Voice e inizia a supportare i tuoi clienti tramite telefonate.", + "PHONE_NUMBER": { + "LABEL": "Numero di Telefono", + "PLACEHOLDER": "Inserisci il tuo numero di telefono (es. +1234567890)", + "ERROR": "Fornisci un numero di telefono valido in formato E.164 (ad es. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "SID dell'account", + "PLACEHOLDER": "Inserisci il tuo Account SID Twilio", + "REQUIRED": "Account SID richiesto" + }, + "AUTH_TOKEN": { + "LABEL": "Token di autenticazione", + "PLACEHOLDER": "Inserisci il tuo Auth Token Twilio", + "REQUIRED": "Auth Token richiesto" + }, + "API_KEY_SID": { + "LABEL": "API Key SID", + "PLACEHOLDER": "Inserisci il tuo SID API Twilio", + "REQUIRED": "API Key SID richiesto" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Inserisci il tuo API Key Secret Twilio", + "REQUIRED": "API Key Secret richiesto" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configura questo URL come Voice URL sul tuo numero di telefono Twilio e TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configurare questo URL come URL di Callback di Stato sul tuo numero di telefono Twilio." + }, + "SUBMIT_BUTTON": "Crea Canale Vocale", + "API": { + "ERROR_MESSAGE": "Non siamo stati in grado di creare il canale vocale" + } + }, + "API_CHANNEL": { + "TITLE": "Canale API", + "DESC": "Integra con il canale API e inizia a supportare i tuoi clienti.", + "CHANNEL_NAME": { + "LABEL": "Nome Canale", + "PLACEHOLDER": "Inserisci un nome del canale", + "ERROR": "Questo campo è obbligatorio" + }, + "WEBHOOK_URL": { + "LABEL": "URL del webhook", + "SUBTITLE": "Configura l'URL in cui ricevere i callback sugli eventi.", + "PLACEHOLDER": "URL del webhook" + }, + "SUBMIT_BUTTON": "Crea Canale API", + "API": { + "ERROR_MESSAGE": "Impossibile salvare il Canale API" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "Canale Email", + "DESC": "Integra la tua casella di posta elettronica.", + "CHANNEL_NAME": { + "LABEL": "Nome Canale", + "PLACEHOLDER": "Inserisci un nome del canale", + "ERROR": "Questo campo è obbligatorio" + }, + "EMAIL": { + "LABEL": "Email", + "SUBTITLE": "Email dove i tuoi clienti inviano i ticket di supporto.", + "PLACEHOLDER": "Email" + }, + "SUBMIT_BUTTON": "Crea Canale Email", + "API": { + "ERROR_MESSAGE": "Impossibile salvare il canale email" + }, + "FINISH_MESSAGE": "Inizia a inoltrare le tue email al seguente indirizzo email.", + "FINISH_MESSAGE_NO_FORWARDING": "La tua Inbox email è stata creata con successo! Devi configurare le credenziali SMTP e IMAP per inviare e ricevere e-mail. Senza queste impostazioni non sarà possibile gestire le email.", + "FORWARDING_ADDRESS_LABEL": "Inoltra le email a questo indirizzo:", + "CONFIGURE_SMTP_IMAP_LINK": "Clicca qui", + "CONFIGURE_SMTP_IMAP_TEXT": " per configurare le impostazioni IMAP e SMTP" + }, + "LINE_CHANNEL": { + "TITLE": "Canale LINE", + "DESC": "Integra con il canale LINE e inizia a supportare i tuoi clienti.", + "CHANNEL_NAME": { + "LABEL": "Nome Canale", + "PLACEHOLDER": "Inserisci un nome del canale", + "ERROR": "Questo campo è obbligatorio" + }, + "LINE_CHANNEL_ID": { + "LABEL": "ID canale LINE", + "PLACEHOLDER": "ID canale LINE" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "Chiave segreta canale LINE", + "PLACEHOLDER": "Chiave segreta canale LINE" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "Token canale LINE", + "PLACEHOLDER": "Token canale LINE" + }, + "SUBMIT_BUTTON": "Crea un canale LINE", + "API": { + "ERROR_MESSAGE": "Non siamo stati in grado di salvare il canale LINE" + }, + "API_CALLBACK": { + "TITLE": "URL di callback", + "SUBTITLE": "È necessario configurare l'URL del webhook nell'applicazione LINE con l'URL menzionato qui." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Canale Telegram", + "DESC": "Integra con il canale Telegram e inizia a supportare i tuoi clienti.", + "BOT_TOKEN": { + "LABEL": "Token Bot", + "SUBTITLE": "Configura il token del bot che hai ottenuto da Telegram BotFather.", + "PLACEHOLDER": "Token Bot" + }, + "SUBMIT_BUTTON": "Crea Canale Telegram", + "API": { + "ERROR_MESSAGE": "Non siamo stati in grado di salvare il canale Telegram" + } + }, + "AUTH": { + "TITLE": "Scegli un canale", + "DESC": "Chatwoot supporta widget di live chat, Facebook Messenger, WhatsApp, Email e altro, come canali di comunicazione. Se vuoi creare un canale personalizzato, puoi farlo tramite il canale API. Per iniziare, scegli uno dei canali qui sotto.", + "TITLE_NEXT": "Completa la configurazione", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Sito Web", + "DESCRIPTION": "Crea un widget live-chat" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connetti la tua pagina Facebook" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Supporta i tuoi clienti su WhatsApp" + }, + "EMAIL": { + "TITLE": "Email", + "DESCRIPTION": "Connettiti con Gmail, Outlook, o altri provider" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integra il canale SMS con Twilio o Bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Crea un canale personalizzato utilizzando le nostre API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configura canale Telegram utilizzando il token Bot" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integra il tuo canale Line" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connetti il tuo account Instagram" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Collega il tuo account TikTok" + }, + "VOICE": { + "TITLE": "Voce", + "DESCRIPTION": "Integra con Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Operatori", + "DESC": "Qui puoi aggiungere operatori per gestire la tua inbox appena creata. Solo questi operatori selezionati avranno accesso alla tua inbox. Gli operatori che non fanno parte di questa inbox non saranno in grado di vedere o rispondere ai messaggi in questa inbox quando effettuano il login.Webhooks
I Webhooks sono callback HTTP che possono essere definiti per ogni account. Sono innescati da eventi come la creazione di messaggi in Chatwoot. Puoi creare più di un webhook per questo account.
Per creare un webhook, clicca sul pulsante Aggiungi nuovo webhook. Puoi anche rimuovere qualsiasi webhook esistente cliccando sul pulsante Elimina.
App dashboard
Le app dashboard consentono alle organizzazioni di incorporare un'applicazione all'interno di Chatwoot per fornire informazioni aggiuntive agli operatorii. Questa funzione consente di creare un'applicazione in modo indipendente e incorporata all'interno della dashboard per fornire informazioni degli utenti, ad esempio ordini o pagamenti effettuati.
Quando integri la tua applicazione usando la dashboard Chatwoot, la tua applicazione avrà il context della conversazione e del contatto come evento window. Implementa un listener per l'evento del messaggio sulla tua pagina per ricevere i dati.
Per aggiungere una nuova app dashboard, clicca sul pulsante 'Aggiungi una nuova app dashboard'.
", + "DESCRIPTION": "Le app dashboard consentono alle organizzazioni di incorporare un'applicazione all'interno della dashboard per fornire dati aggiuntivi agli operatori. Questa funzione consente di creare un'applicazione in modo indipendente e incorporarla per fornire informazioni sull'utente, i suoi ordini o la loro cronologia di pagamento precedente.", + "LEARN_MORE": "Scopri di più sulle App Dashboard", + "LIST": { + "404": "Non ci sono ancora app dashboard configurate su questo account", + "LOADING": "Caricamento app dashboard...", + "TABLE_HEADER": { + "NAME": "Nome", + "ENDPOINT": "Endpoint" + }, + "EDIT_TOOLTIP": "Modifica app", + "DELETE_TOOLTIP": "Elimina app" + }, + "FORM": { + "TITLE_LABEL": "Nome", + "TITLE_PLACEHOLDER": "Inserisci un nome per la tua app dashboard", + "TITLE_ERROR": "È richiesto un nome per l'app dashboard", + "URL_LABEL": "Endpoint", + "URL_PLACEHOLDER": "Inserisci l'URL dell'endpoint dove la tua app è hostata", + "URL_ERROR": "È richiesto un URL valido" + }, + "CREATE": { + "HEADER": "Aggiungi una nuova App Dashboard", + "FORM_SUBMIT": "Invia", + "FORM_CANCEL": "Annulla", + "API_SUCCESS": "App dashboard configurata con successo", + "API_ERROR": "Non siamo riusciti a creare un'app. Riprova più tardi" + }, + "UPDATE": { + "HEADER": "Modifica app dashboard", + "FORM_SUBMIT": "Aggiorna", + "FORM_CANCEL": "Annulla", + "API_SUCCESS": "App dashboard aggiornata con successo", + "API_ERROR": "Non è stato possibile aggiornare l'app. Riprova più tardi" + }, + "DELETE": { + "CONFIRM_YES": "Sì, elimina", + "CONFIRM_NO": "No, mantieni", + "TITLE": "Conferma eliminazione", + "MESSAGE": "Sei sicuro di voler eliminare l'app - {appName}?", + "API_SUCCESS": "App dashboard cancellata con successo", + "API_ERROR": "Non è stato possibile eliminare l'app. Riprova più tardi" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Crea/collega issue Linear", + "LOADING": "Caricamento issue Linear...", + "LOADING_ERROR": "Si è verificato un errore nel recupero delle issue Linear, si prega di riprovare", + "CREATE": "Crea", + "LINK": { + "SEARCH": "Cerca issue", + "SELECT": "Seleziona issue", + "TITLE": "Link", + "EMPTY_LIST": "Nessuna issue Linear trovata", + "LOADING": "Caricamento", + "ERROR": "Si è verificato un errore nel recupero delle issue Linear, si prega di riprovare", + "LINK_SUCCESS": "Issue collegata con successo", + "LINK_ERROR": "Si è verificato un errore durante il collegamento della issue, per favore riprova", + "LINK_TITLE": "Conversazione (#{conversationId}) con {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Crea/collega issue Linear", + "DESCRIPTION": "Creare issue Linear dalle conversazioni, o collega quelle esistenti per un monitoraggio costante.", + "FORM": { + "TITLE": { + "LABEL": "Titolo", + "PLACEHOLDER": "Inserisci titolo", + "REQUIRED_ERROR": "Titolo richiesto" + }, + "DESCRIPTION": { + "LABEL": "Descrizione", + "PLACEHOLDER": "Inserisci descrizione" + }, + "TEAM": { + "LABEL": "Team", + "PLACEHOLDER": "Seleziona team", + "SEARCH": "Cerca team", + "REQUIRED_ERROR": "Team richiesto" + }, + "ASSIGNEE": { + "LABEL": "Assegnatario", + "PLACEHOLDER": "Seleziona assegnatario", + "SEARCH": "Cerca assegnatario" + }, + "PRIORITY": { + "LABEL": "Priorità", + "PLACEHOLDER": "Seleziona priorità", + "SEARCH": "Cerca priorità" + }, + "LABEL": { + "LABEL": "Etichetta", + "PLACEHOLDER": "Seleziona etichetta", + "SEARCH": "Cerca etichetta" + }, + "STATUS": { + "LABEL": "Stato", + "PLACEHOLDER": "Seleziona stato", + "SEARCH": "Cerca stato" + }, + "PROJECT": { + "LABEL": "Progetto", + "PLACEHOLDER": "Seleziona progetto", + "SEARCH": "Cerca progetto" + } + }, + "CREATE": "Crea", + "CANCEL": "Annulla", + "CREATE_SUCCESS": "Issue creata con successo", + "CREATE_ERROR": "Si è verificato un errore durante la creazione della issue, per favore riprova", + "LOADING_TEAM_ERROR": "Si è verificato un errore nel caricamento dei team, riprova", + "LOADING_TEAM_ENTITIES_ERROR": "Si è verificato un errore nel caricamento delle entità dei team, riprova" + }, + "ISSUE": { + "STATUS": "Stato", + "PRIORITY": "Priorità", + "ASSIGNEE": "Assegnatario", + "LABELS": "Etichette", + "CREATED_AT": "Creato {createdAt}" + }, + "UNLINK": { + "TITLE": "Disconnetti", + "SUCCESS": "Issue scollegata con successo", + "ERROR": "Si è verificato un errore durante lo scollegamento della issue, riprova" + }, + "NO_LINKED_ISSUES": "Nessuna issue collegata trovata", + "DELETE": { + "TITLE": "Sei sicuro di voler eliminare l'integrazione?", + "MESSAGE": "Sei sicuro di voler eliminare l'integrazione?", + "CONFIRM": "Sì, elimina", + "CANCEL": "Annulla" + }, + "CTA": { + "TITLE": "Connetti a Linear", + "AGENT_DESCRIPTION": "Il workspace di Linear non è connesso. Richiedi all'amministratore di connettere un workspace per utilizzare questa integrazione.", + "DESCRIPTION": "Il workspace di Linear non è connesso. Fai clic sul pulsante qui sotto per collegare il workspace per utilizzare questa integrazione.", + "BUTTON_TEXT": "Connetti workspace Linear" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Sei sicuro di voler eliminare l'integrazione di Notion?", + "MESSAGE": "L'eliminazione di questa integrazione rimuoverà l'accesso al tuo workspace Notion e interromperà tutte le funzionalità correlate.", + "CONFIRM": "Sì, elimina", + "CANCEL": "Annulla" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Scopri di più", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistenti", + "SWITCH_ASSISTANT": "Cambia assistenti", + "NEW_ASSISTANT": "Crea Assistente", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Prova questi prompt", + "PANEL_TITLE": "Inizia a usare Copilot", + "KICK_OFF_MESSAGE": "Hai bisogno di un riassunto rapido, vuoi controllare le conversazioni passate o vuoi scrivere risposte migliori? Copilot è qui per te.", + "SEND_MESSAGE": "Invia messaggio...", + "EMPTY_MESSAGE": "Si è verificato un errore durante la generazione della risposta. Riprova.", + "LOADER": "Captain sta pensando", + "YOU": "Tu", + "USE": "Usa questo", + "RESET": "Reset", + "SHOW_STEPS": "Mostra i passaggi", + "SELECT_ASSISTANT": "Seleziona Assistente", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Riassumi questa conversazione", + "CONTENT": "Riassumi i punti chiave discussi tra il cliente e l'operatore, compresi i dubbi, le domande del cliente e le soluzioni o risposte fornite dall'operatore" + }, + "SUGGEST": { + "LABEL": "Suggerisci una risposta", + "CONTENT": "Analizzare la richiesta del cliente e prepara una risposta che risponda efficacemente ai suoi dubbi o domande. Assicurati che la risposta sia chiara, concisa e fornisca informazioni utili." + }, + "RATE": { + "LABEL": "Valuta questa conversazione", + "CONTENT": "Valuta la conversazione per vedere quanto soddisfa le esigenze del cliente. Dai una valutazione da 1 a 5 in base al tono, alla chiarezza e all'efficacia." + }, + "HIGH_PRIORITY": { + "LABEL": "Conversazioni ad alta priorità", + "CONTENT": "Dammi un riassunto di tutte le conversazioni aperte ad alta priorità. Includi l'ID della conversazione, il nome del cliente (se disponibile), il contenuto dell'ultimo messaggio e l'operatore assegnato. Raggruppa per stato se pertinente." + }, + "LIST_CONTACTS": { + "LABEL": "Elenca contatti", + "CONTENT": "Mostrami l'elenco dei primi 10 contatti. Includi nome, email o numero di telefono (se disponibile), orario di ultima lettura, tag (se presenti)." + } + } + }, + "PLAYGROUND": { + "USER": "Tu", + "ASSISTANT": "Assistente", + "MESSAGE_PLACEHOLDER": "Scrivi il tuo messaggio...", + "HEADER": "Playground", + "DESCRIPTION": "Usa questo playground per inviare messaggi al tuo assistente e controllare se risponde correttamente, rapidamente e con il tono che ti aspetti.", + "CREDIT_NOTE": "I messaggi inviati qui vengono scalati dai crediti Captain." + }, + "PAYWALL": { + "TITLE": "Aggiorna per usare Captain AI", + "AVAILABLE_ON": "Captain non è disponibile sul piano gratuito.", + "UPGRADE_PROMPT": "Aggiorna il tuo piano per ottenere l'accesso ai nostri assistenti, copilot e altro ancora.", + "UPGRADE_NOW": "Aggiorna ora", + "CANCEL_ANYTIME": "Puoi modificare o annullare il tuo piano in qualsiasi momento" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Aggiorna il tuo piano per ottenere l'accesso ai nostri assistenti, copilot e altro ancora.", + "ASK_ADMIN": "Contatta il tuo amministratore per l'aggiornamento." + }, + "BANNER": { + "RESPONSES": "Hai usato oltre l'80% del tuo limite di risposte. Per continuare a utilizzare Captain AI, per favore aggiorna.", + "DOCUMENTS": "Raggiunto il limite di documenti. Aggiorna per continuare a usare Captain AI." + }, + "FORM": { + "CANCEL": "Annulla", + "CREATE": "Crea", + "EDIT": "Aggiorna" + }, + "ASSISTANTS": { + "HEADER": "Assistenti", + "NO_ASSISTANTS_AVAILABLE": "Non ci sono assistenti disponibili nel tuo account.", + "ADD_NEW": "Crea un nuovo assistente", + "DELETE": { + "TITLE": "Sei sicuro di voler eliminare l'assistente?", + "DESCRIPTION": "Questa azione è permanente. L'eliminazione di questo assistente la rimuoverà da tutte le inbox connesse e cancellerà definitivamente tutte le knowledge generate.", + "CONFIRM": "Sì, elimina", + "SUCCESS_MESSAGE": "L'assistente è stato eliminato con successo", + "ERROR_MESSAGE": "Si è verificato un errore durante l'eliminazione dell'assistente, riprova." + }, + "FORM_DESCRIPTION": "Compila i dettagli qui sotto per dare un nome al tuo assistente, descriverne lo scopo e specificare il prodotto per cui offirà supporto.", + "CREATE": { + "TITLE": "Crea un assistente", + "SUCCESS_MESSAGE": "L'assistente è stato creato correttamente", + "ERROR_MESSAGE": "Si è verificato un errore durante la creazione dell'assistente, riprova." + }, + "FORM": { + "UPDATE": "Aggiorna", + "SECTIONS": { + "BASIC_INFO": "Informazioni di Base", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Istruzioni", + "FEATURES": "Funzionalità", + "TOOLS": "Strumenti " + }, + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Inserisci il nome dell'assistente", + "ERROR": "Il nome è richiesto" + }, + "TEMPERATURE": { + "LABEL": "Temperatura della Risposta", + "DESCRIPTION": "Regola quanto dovrebbero essere creative o restrittive le risposte dell'assistente. I valori più bassi producono risposte più mirate e deterministiche, mentre i valori più elevati consentono di ottenere risultati più creativi e variegati." + }, + "DESCRIPTION": { + "LABEL": "Descrizione", + "PLACEHOLDER": "Inserisci la descrizione dell'assistente", + "ERROR": "La descrizione è richiesta" + }, + "PRODUCT_NAME": { + "LABEL": "Nome Prodotto", + "PLACEHOLDER": "Inserisci il nome del prodotto", + "ERROR": "Il nome del prodotto è richiesto" + }, + "WELCOME_MESSAGE": { + "LABEL": "Messaggio di Benvenuto", + "PLACEHOLDER": "Inserisci il messaggio di benvenuto" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Messaggio di Handoff", + "PLACEHOLDER": "Inserisci messaggio di handoff" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Messaggio di Risoluzione", + "PLACEHOLDER": "Inserisci il messaggio di risoluzione" + }, + "INSTRUCTIONS": { + "LABEL": "Istruzioni", + "PLACEHOLDER": "Inserisci le istruzioni per l'assistente" + }, + "FEATURES": { + "TITLE": "Funzionalità", + "ALLOW_CONVERSATION_FAQS": "Genera FAQ dalle conversazioni risolte", + "ALLOW_MEMORIES": "Salva memorie e dettagli chiave dalle interazioni con i clienti.", + "ALLOW_CITATIONS": "Includi citazioni alle fonti nelle risposte" + } + }, + "EDIT": { + "TITLE": "Aggiorna l'assistente", + "SUCCESS_MESSAGE": "L'assistente è stato aggiornato correttamente", + "ERROR_MESSAGE": "Si è verificato un errore durante l'aggiornamento dell'assistente, riprova.", + "NOT_FOUND": "Impossibile trovare l'assistente. Riprova." + }, + "SETTINGS": { + "HEADER": "Impostazioni", + "BASIC_SETTINGS": { + "TITLE": "Impostazioni di base", + "DESCRIPTION": "Personalizza ciò che l'assistente dice quando termina una conversazione o la trasferisce a un umano." + }, + "SYSTEM_SETTINGS": { + "TITLE": "Impostazioni di sistema", + "DESCRIPTION": "Personalizza ciò che l'assistente dice quando termina una conversazione o la trasferisce a un umano." + }, + "CONTROL_ITEMS": { + "TITLE": "Impostazioni avanzate", + "DESCRIPTION": "Aggiungi maggiore controllo all’assistente. (Funziona come un flusso: guardrails → scenari → output) Incoraggia a sfruttare al meglio queste impostazioni.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrail", + "DESCRIPTION": "Mantieni l’assistente concentrato: risponde solo ai tipi di domande che desideri, evitando argomenti fuori tema o non consentiti." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Linee guida per le risposte", + "DESCRIPTION": "Imposta il tono e la struttura delle risposte del tuo assistente: chiare e amichevoli? Brevi e dirette? Dettagliate e formali?" + } + } + }, + "DELETE": { + "TITLE": "Elimina Assistente", + "DESCRIPTION": "Questa azione è permanente. L'eliminazione di questo assistente la rimuoverà da tutte le inbox connesse e cancellerà definitivamente tutte le knowledge generate.", + "BUTTON_TEXT": "Elimina {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Modifica Assistente", + "DELETE_ASSISTANT": "Elimina Assistente", + "VIEW_CONNECTED_INBOXES": "Visualizza inbox connesse" + }, + "EMPTY_STATE": { + "TITLE": "Nessun assistente disponibile", + "SUBTITLE": "Crea un assistente per fornire risposte rapide e accurate agli utenti. Può imparare dagli articoli dell'Help Center e dalle conversazioni passate.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant interagisce direttamente con i clienti, impara dai documenti e dalle conversazioni passate e fornisce risposte rapide e accurate. Gestisce le richieste iniziali, fornendo risoluzioni rapide prima di trasferire ad un operatore quando necessario." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrail", + "DESCRIPTION": "Mantieni l’assistente concentrato: risponde solo ai tipi di domande che desideri, evitando argomenti fuori tema o non consentiti.", + "BULK_ACTION": { + "SELECTED": "{count} elemento selezionato | {count} elementi selezionati", + "SELECT_ALL": "Seleziona tutto ({count})", + "UNSELECT_ALL": "Deseleziona tutto ({count})", + "BULK_DELETE_BUTTON": "Elimina" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Guardrail di esempio", + "ADD": "Aggiungi tutto", + "ADD_SINGLE": "Aggiungi questo", + "SAVE": "Aggiungi e salva (↵)", + "PLACEHOLDER": "Digita un altro guardrail..." + }, + "NEW": { + "TITLE": "Aggiungi un guardrail", + "CREATE": "Crea", + "CANCEL": "Annulla", + "PLACEHOLDER": "Digita un altro guardrail...", + "TEST_ALL": "Testa tutto" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Cerca..." + }, + "EMPTY_MESSAGE": "Nessun guardrail trovato. Crea o aggiungi esempi per iniziare.", + "SEARCH_EMPTY_MESSAGE": "Nessun guardrail trovato per questa ricerca.", + "API": { + "ADD": { + "SUCCESS": "Guardrail aggiunti correttamente", + "ERROR": "Si è verificato un errore nell'aggiunta di guardrail, riprova." + }, + "UPDATE": { + "SUCCESS": "Guardrail aggiornati con successo", + "ERROR": "Si è verificato un errore durante l'aggiornamento dei guardrail, riprova." + }, + "DELETE": { + "SUCCESS": "Guardrail eliminati con successo", + "ERROR": "Si è verificato un errore nell'eliminazione dei guardrail, riprova." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Linee Guida per le Risposte", + "DESCRIPTION": "Imposta il tono e la struttura delle risposte del tuo assistente: chiare e amichevoli? Brevi e dirette? Dettagliate e formali?", + "BULK_ACTION": { + "SELECTED": "{count} elemento selezionato | {count} elementi selezionati", + "SELECT_ALL": "Seleziona tutto ({count})", + "UNSELECT_ALL": "Deseleziona tutto ({count})", + "BULK_DELETE_BUTTON": "Elimina" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Esempio di Linee Guida per le Risposte", + "ADD": "Aggiungi tutto", + "ADD_SINGLE": "Aggiungi questo", + "SAVE": "Aggiungi e salva (↵)", + "PLACEHOLDER": "Digita un'altra linea guida di risposta..." + }, + "NEW": { + "TITLE": "Aggiungi una linea guida per le risposte", + "CREATE": "Crea", + "CANCEL": "Annulla", + "PLACEHOLDER": "Digita un'altra linea guida di risposta...", + "TEST_ALL": "Testa tutto" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Cerca..." + }, + "EMPTY_MESSAGE": "Nessuna linea guida per le risposte trovata. Crea o aggiungi esempi per iniziare.", + "SEARCH_EMPTY_MESSAGE": "Nessuna linea guida per le risposte trovata per questa ricerca.", + "API": { + "ADD": { + "SUCCESS": "Linee guida per le risposte aggiunte correttamente", + "ERROR": "Si è verificato un errore nell'aggiunta delle linee guida, riprova." + }, + "UPDATE": { + "SUCCESS": "Linee guida aggiornate correttamente", + "ERROR": "Si è verificato un errore durante l'aggiornamento delle linee guida, riprova." + }, + "DELETE": { + "SUCCESS": "Linee guida eliminate correttamente", + "ERROR": "Si è verificato un errore durante l'eliminazione delle linee guida, riprova." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenari", + "DESCRIPTION": "Fornisci contesto aggiuntivo al tuo assistente, ad esempio “cosa fare quando un utente è bloccato” o “come comportarsi durante una richiesta di rimborso”.", + "BULK_ACTION": { + "SELECTED": "{count} elemento selezionato | {count} elementi selezionati", + "SELECT_ALL": "Seleziona tutto ({count})", + "UNSELECT_ALL": "Deseleziona tutto ({count})", + "BULK_DELETE_BUTTON": "Elimina" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Scenari di esempio", + "ADD": "Aggiungi tutto", + "ADD_SINGLE": "Aggiungi questo", + "TOOLS_USED": "Strumenti utilizzati:" + }, + "NEW": { + "CREATE": "Aggiungi uno scenario", + "TITLE": "Crea uno scenario", + "FORM": { + "TITLE": { + "LABEL": "Titolo", + "PLACEHOLDER": "Inserisci un nome per lo scenario", + "ERROR": "Nome dello scenario richiesto" + }, + "DESCRIPTION": { + "LABEL": "Descrizione", + "PLACEHOLDER": "Descrivi come e dove questo scenario verrà utilizzato", + "ERROR": "Descrizione dello scenario richiesta" + }, + "INSTRUCTION": { + "LABEL": "Come gestire", + "PLACEHOLDER": "Descrivere come e dove sarà gestito questo scenario", + "ERROR": "Il contenuto dello scenario è richiesto" + }, + "CREATE": "Crea", + "CANCEL": "Annulla" + } + } + }, + "UPDATE": { + "CANCEL": "Annulla", + "UPDATE": "Aggiorna le modifiche" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Cerca..." + }, + "EMPTY_MESSAGE": "Nessun scenario trovato. Crea o aggiungi esempi per iniziare.", + "SEARCH_EMPTY_MESSAGE": "Nessun scenario trovato per questa ricerca.", + "API": { + "ADD": { + "SUCCESS": "Scenari aggiunti correttamente", + "ERROR": "Si è verificato un errore durante l'aggiunta degli scenari, riprova." + }, + "UPDATE": { + "SUCCESS": "Scenari aggiornati correttamente", + "ERROR": "Si è verificato un errore durante l'aggiornamento degli scenari, riprova." + }, + "DELETE": { + "SUCCESS": "Scenari eliminati correttamente", + "ERROR": "Si è verificato un errore durante l'eliminazione degli scenari, riprova." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documenti", + "ADD_NEW": "Crea un nuovo documento", + "RELATED_RESPONSES": { + "TITLE": "FAQ Correlate", + "DESCRIPTION": "Queste FAQ vengono generate direttamente dai Documenti." + }, + "FORM_DESCRIPTION": "Inserisci l'URL del documento per aggiungerlo come fonte e scegli l'assistente con cui associarlo.", + "CREATE": { + "TITLE": "Aggiungi un documento", + "SUCCESS_MESSAGE": "Il documento è stato creato correttamente", + "ERROR_MESSAGE": "Si è verificato un errore durante la creazione del documento, riprova." + }, + "FORM": { + "TYPE": { + "LABEL": "Tipo di Documento", + "URL": "URL", + "PDF": "File PDF" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Inserisci l'URL del documento", + "ERROR": "Inserisci un URL valido per il documento" + }, + "PDF_FILE": { + "LABEL": "File PDF", + "CHOOSE_FILE": "Seleziona file PDF", + "ERROR": "Seleziona un file PDF", + "HELP_TEXT": "Dimensione massima del file: 10MB", + "INVALID_TYPE": "Seleziona un file PDF valido", + "TOO_LARGE": "La dimensione del file supera il limite di 10MB" + }, + "NAME": { + "LABEL": "Nome Documento (Opzionale)", + "PLACEHOLDER": "Inserisci un nome per il documento" + } + }, + "DELETE": { + "TITLE": "Sei sicuro di voler eliminare il documento?", + "DESCRIPTION": "Questa azione è permanente. L'eliminazione di questo documento cancellerà definitivamente tutte le conoscenze generate.", + "CONFIRM": "Sì, elimina", + "SUCCESS_MESSAGE": "Il documento è stato eliminato con successo", + "ERROR_MESSAGE": "Si è verificato un errore durante l'eliminazione del documento, riprova." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "Visualizza FAQ Correlate", + "DELETE_DOCUMENT": "Elimina Documento" + }, + "EMPTY_STATE": { + "TITLE": "Nessun documento disponibile", + "SUBTITLE": "I documenti sono utilizzati dal tuo assistente per generare FAQ. Puoi importare documenti per fornire contesto al tuo assistente.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Documento Captain", + "NOTE": "Un documento in Captain serve come risorsa di knowledge base per l'assistente. Collegando documenti help center e guide, Captain può analizzare il contenuto e fornire risposte accurate per le richieste dei clienti." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Strumenti", + "ADD_NEW": "Crea un nuovo strumento", + "EMPTY_STATE": { + "TITLE": "Nessuno strumento personalizzato disponibile", + "SUBTITLE": "Crea strumenti personalizzati per collegare il tuo assistente con API e servizi esterni, consentendogli di recuperare dati ed eseguire azioni per tuo conto.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Strumenti Personalizzati", + "NOTE": "Gli strumenti personalizzati consentono all'assistente di interagire con API e servizi esterni. Crea strumenti per recuperare dati, eseguire azioni o integrare con i sistemi esistenti per migliorare le capacità del tuo assistente." + } + }, + "FORM_DESCRIPTION": "Configura il tuo strumento personalizzato per connetterti con API esterne", + "OPTIONS": { + "EDIT_TOOL": "Modifica strumento", + "DELETE_TOOL": "Elimina strumento" + }, + "CREATE": { + "TITLE": "Crea Strumento Personalizzato", + "SUCCESS_MESSAGE": "Strumento personalizzato creato correttamente", + "ERROR_MESSAGE": "Impossibile creare uno strumento personalizzato" + }, + "EDIT": { + "TITLE": "Modifica Strumento Personalizzato", + "SUCCESS_MESSAGE": "Strumento personalizzato aggiornato correttamente", + "ERROR_MESSAGE": "Impossibile aggiornare strumento personalizzato" + }, + "DELETE": { + "TITLE": "Elimina Strumento Personalizzato", + "DESCRIPTION": "Sei sicuro di voler eliminare questo strumento personalizzato? Questa azione non può essere annullata.", + "CONFIRM": "Sì, elimina", + "SUCCESS_MESSAGE": "Strumento personalizzato eliminato correttamente", + "ERROR_MESSAGE": "Impossibile eliminare lo strumento personalizzato" + }, + "FORM": { + "TITLE": { + "LABEL": "Nome Strumento", + "PLACEHOLDER": "Ricerca Ordini", + "ERROR": "Nome strumento richiesto" + }, + "DESCRIPTION": { + "LABEL": "Descrizione", + "PLACEHOLDER": "Cerca i dettagli di un ordine tramite l'ID ordine" + }, + "HTTP_METHOD": { + "LABEL": "Metodo" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "È richiesto un URL valido" + }, + "AUTH_TYPE": { + "LABEL": "Tipo di Autenticazione" + }, + "AUTH_TYPES": { + "NONE": "Nessuno", + "BEARER": "Bearer Token", + "BASIC": "Autenticazione Base", + "API_KEY": "Chiave API" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Inserisci il tuo Bearer Token", + "USERNAME": "Nome Utente", + "USERNAME_PLACEHOLDER": "Inserisci il nome utente", + "PASSWORD": "Password", + "PASSWORD_PLACEHOLDER": "Inserire la password", + "API_KEY": "Nome Header", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Valore Header", + "API_VALUE_PLACEHOLDER": "Inserisci valore chiave API" + }, + "PARAMETERS": { + "LABEL": "Parametri", + "HELP_TEXT": "Definisci i parametri che verranno estratti dalle query utente" + }, + "ADD_PARAMETER": "Aggiungi Parametro", + "PARAM_NAME": { + "PLACEHOLDER": "Nome del parametro (es. order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Tipo" + }, + "PARAM_TYPES": { + "STRING": "Stringa", + "NUMBER": "Numero", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Oggetto" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Descrizione del parametro" + }, + "PARAM_REQUIRED": { + "LABEL": "Richiesto" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Opzionale)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Opzionale)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Nome del parametro richiesto" + } + } + }, + "RESPONSES": { + "HEADER": "FAQ", + "PENDING_FAQS": "FAQ In Attesa", + "ADD_NEW": "Crea nuova FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversazione #{id}" + }, + "SELECTED": "{count} selezionate", + "SELECT_ALL": "Seleziona tutto ({count})", + "UNSELECT_ALL": "Deseleziona tutto ({count})", + "SEARCH_PLACEHOLDER": "Cerca FAQ...", + "BULK_APPROVE_BUTTON": "Approva", + "BULK_DELETE_BUTTON": "Elimina", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQ approvate con successo", + "ERROR_MESSAGE": "Si è verificato un errore nell'approvazione delle FAQ, riprova." + }, + "BULK_DELETE": { + "TITLE": "Eliminare FAQ?", + "DESCRIPTION": "Sei sicuro di voler eliminare le FAQ selezionate? Questa azione non può essere annullata.", + "CONFIRM": "Sì, elimina tutte", + "SUCCESS_MESSAGE": "FAQ eliminate con successo", + "ERROR_MESSAGE": "Si è verificato un errore durante l'eliminazione delle FAQ, riprova." + }, + "DELETE": { + "TITLE": "Sei sicuro di voler eliminare la FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Sì, elimina", + "SUCCESS_MESSAGE": "FAQ eliminata con successo", + "ERROR_MESSAGE": "Si è verificato un errore durante l'eliminazione della FAQ, riprova." + }, + "FILTER": { + "ASSISTANT": "Assistente: {selected}", + "STATUS": "Stato: {selected}", + "ALL_ASSISTANTS": "Tutti" + }, + "STATUS": { + "TITLE": "Stato", + "PENDING": "In Sospeso", + "APPROVED": "Approvate", + "ALL": "Tutte" + }, + "PENDING_BANNER": { + "TITLE": "Captain ha trovato delle FAQ tra le domande dei tuoi clienti.", + "ACTION": "Clicca qui per rivedere" + }, + "FORM_DESCRIPTION": "Aggiungi una domanda e la sua risposta corrispondente alla knowledge base e seleziona l'assistente con cui dovrebbe essere associata.", + "CREATE": { + "TITLE": "Aggiungi una FAQ", + "SUCCESS_MESSAGE": "La risposta è stata aggiunta con successo.", + "ERROR_MESSAGE": "Si è verificato un errore durante l'aggiunta della risposta. Riprova." + }, + "FORM": { + "QUESTION": { + "LABEL": "Domanda", + "PLACEHOLDER": "Inserisci qui la domanda", + "ERROR": "Inserisci una domanda valida." + }, + "ANSWER": { + "LABEL": "Risposta", + "PLACEHOLDER": "Inserisci qui la risposta", + "ERROR": "Inserisci una risposta valida." + } + }, + "EDIT": { + "TITLE": "Aggiorna FAQ", + "SUCCESS_MESSAGE": "Le FAQ sono state aggiornate correttamente", + "ERROR_MESSAGE": "Si è verificato un errore durante l'aggiornamento delle FAQ, riprova", + "APPROVE_SUCCESS_MESSAGE": "La FAQ è stata contrassegnata come approvata" + }, + "OPTIONS": { + "APPROVE": "Approva", + "EDIT_RESPONSE": "Modifica", + "DELETE_RESPONSE": "Elimina" + }, + "EMPTY_STATE": { + "TITLE": "Nessuna FAQ Trovata", + "NO_PENDING_TITLE": "Non ci sono più FAQ in attesa da rivedere", + "SUBTITLE": "Le FAQ aiutano il tuo assistente a fornire risposte rapide e accurate alle domande dei tuoi clienti. Possono essere generate automaticamente dai tuoi contenuti o possono essere aggiunte manualmente.", + "CLEAR_SEARCH": "Rimuovi filtri attivi", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQ rileva le domande più frequenti dei clienti, anche se mancano dalla tua knowledge base, e suggerisce delle FAQ per migliorare il supporto. È possibile rivedere ogni suggerimento e decidere se approvarlo o rifiutarlo." + } + } + }, + "INBOXES": { + "HEADER": "Inbox Connesse", + "ADD_NEW": "Collega una nuova inbox", + "OPTIONS": { + "DISCONNECT": "Disconnetti" + }, + "DELETE": { + "TITLE": "Sei sicuro di voler disconnettere la inbox?", + "DESCRIPTION": "", + "CONFIRM": "Sì, elimina", + "SUCCESS_MESSAGE": "Inbox disconnessa con successo.", + "ERROR_MESSAGE": "Si è verificato un errore durante la disconnessione della inbox, riprova." + }, + "FORM_DESCRIPTION": "Scegli una inbox da connettere all'assistente.", + "CREATE": { + "TITLE": "Connetti una Inbox", + "SUCCESS_MESSAGE": "Inbox connessa con successo.", + "ERROR_MESSAGE": "Si è verificato un errore durante la connessione della inbox. Riprova." + }, + "FORM": { + "INBOX": { + "LABEL": "Inbox", + "PLACEHOLDER": "Scegli la inbox in cui deployare l'assistente.", + "ERROR": "È richiesta una inbox." + } + }, + "EMPTY_STATE": { + "TITLE": "Nessuna Inbox Connessa", + "SUBTITLE": "Connettendo una inbox, l'assistente potrà gestire le richieste iniziali dei clienti, ed eventualmente trasferirle a voi." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/it/labelsMgmt.json new file mode 100644 index 0000000..985b86f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Etichette", + "HEADER_BTN_TXT": "Aggiungi etichetta", + "LOADING": "Recupero etichette", + "DESCRIPTION": "Le etichette aiutano a categorizzare e dare priorità alle conversazioni e ai lead. È possibile assegnare un'etichetta a una conversazione o a un contatto utilizzando il pannello laterale.", + "LEARN_MORE": "Maggiori informazioni sulle etichette", + "SEARCH_404": "Non ci sono elementi che corrispondono a questa richiesta", + "LIST": { + "404": "Non ci sono etichette disponibili in questo account.", + "TITLE": "Gestisci etichette", + "DESC": "Le etichette consentono di raggruppare le conversazioni insieme.", + "TABLE_HEADER": { + "NAME": "Nome", + "DESCRIPTION": "Descrizione", + "COLOR": "Colore" + } + }, + "FORM": { + "NAME": { + "LABEL": "Nome Etichetta", + "PLACEHOLDER": "Nome etichetta", + "REQUIRED_ERROR": "Nome etichetta obbligatorio", + "MINIMUM_LENGTH_ERROR": "È richiesta una lunghezza minima di 2", + "VALID_ERROR": "Sono ammessi solo lettere, numeri, trattino e underscore" + }, + "DESCRIPTION": { + "LABEL": "Descrizione", + "PLACEHOLDER": "Descrizione Etichetta" + }, + "COLOR": { + "LABEL": "Colore" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Mostra etichetta nella barra laterale" + }, + "EDIT": "Modifica", + "CREATE": "Crea", + "DELETE": "Elimina", + "CANCEL": "Annulla" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Aggiungi etichetta alla conversazione", + "MULTIPLE_SUGGESTION": "Seleziona questa etichetta", + "DESELECT": "Deseleziona etichetta", + "DISMISS": "Ignora suggerimento" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Ignora", + "ADD_SELECTED_LABELS": "Aggiungi etichette selezionate", + "ADD_SELECTED_LABEL": "Aggiungi etichetta selezionata", + "ADD_ALL_LABELS": "Aggiungi tutte le etichette", + "SUGGESTED_LABELS": "Etichette suggerite" + }, + "ADD": { + "TITLE": "Aggiungi etichetta", + "DESC": "Le etichette consentono di raggruppare le conversazioni insieme.", + "API": { + "SUCCESS_MESSAGE": "Etichetta aggiunta correttamente", + "ERROR_MESSAGE": "Si è verificato un errore, riprova" + } + }, + "EDIT": { + "TITLE": "Modifica etichetta", + "API": { + "SUCCESS_MESSAGE": "Etichetta aggiornata con successo", + "ERROR_MESSAGE": "Si è verificato un errore, riprova" + } + }, + "DELETE": { + "BUTTON_TEXT": "Elimina", + "API": { + "SUCCESS_MESSAGE": "Etichetta eliminata con successo", + "ERROR_MESSAGE": "Si è verificato un errore, riprova" + }, + "CONFIRM": { + "TITLE": "Conferma Eliminazione", + "MESSAGE": "Sei sicuro di voler eliminare ", + "YES": "Sì, Elimina ", + "NO": "No, Mantieni " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/login.json b/app/javascript/dashboard/i18n/locale/it/login.json new file mode 100644 index 0000000..75c9d1f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Accedi a Chatwoot", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "esempio{'@'}nomeazienda.com", + "ERROR": "Inserisci un indirizzo email valido" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password" + }, + "API": { + "SUCCESS_MESSAGE": "Accesso riuscito", + "ERROR_MESSAGE": "Impossibile connettersi al server Woot. Riprova.", + "UNAUTH": "Nome utente o password errati. Riprova." + }, + "OAUTH": { + "GOOGLE_LOGIN": "Accedi tramite Google", + "BUSINESS_ACCOUNTS_ONLY": "Utilizza il tuo indirizzo email aziendale per effettuare il login", + "NO_ACCOUNT_FOUND": "Non siamo riusciti a trovare un account per il tuo indirizzo email." + }, + "FORGOT_PASSWORD": "Password dimenticata?", + "CREATE_NEW_ACCOUNT": "Crea un nuovo account", + "SUBMIT": "Accedi", + "SAML": { + "LABEL": "Accedi tramite SSO", + "TITLE": "Avvia Single Sign-on (SSO)", + "SUBTITLE": "Inserisci la tua email di lavoro per accedere alla tua organizzazione", + "BACK_TO_LOGIN": "Accedi tramite Password", + "WORK_EMAIL": { + "LABEL": "Email di Lavoro", + "PLACEHOLDER": "Inserisci la tua email di lavoro" + }, + "SUBMIT": "Prosegui con SSO", + "API": { + "ERROR_MESSAGE": "Autenticazione SSO fallita. Verifica le credenziali e riprova." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/macros.json b/app/javascript/dashboard/i18n/locale/it/macros.json new file mode 100644 index 0000000..263042a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Macro", + "DESCRIPTION": "Una macro è un insieme di azioni salvate che aiutano gli operatori del servizio clienti a completare facilmente le attività. Gli operatori possono definire un insieme di azioni, come l'aggiunta di un'etichetta a una converazione, l'invio di una trascrizione e-mail, l'aggiornamento di un attributo personalizzato, ecc. e possono eseguire queste azioni in un solo clic.", + "LEARN_MORE": "Scopri di più sulle macro", + "HEADER_BTN_TXT": "Aggiungi una nuova macro", + "HEADER_BTN_TXT_SAVE": "Salva macro", + "LOADING": "Caricamento macro", + "ERROR": "Qualcosa è andato storto. Riprova", + "ORDER_INFO": "Le macro verranno eseguite nell'ordine in cui aggiungi le azioni. Puoi riordinarle trascinandole con la maniglia accanto ad ogni nodo.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Nome macro", + "PLACEHOLDER": "Inserisci un nome per la tua macro", + "ERROR": "Il nome è richiesto per creare una macro" + }, + "ACTIONS": { + "LABEL": "Azioni" + } + }, + "API": { + "SUCCESS_MESSAGE": "Macro aggiunta correttamente", + "ERROR_MESSAGE": "Impossibile creare macro, riprova più tardi" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nome", + "CREATED BY": "Creata da", + "LAST_UPDATED_BY": "Ultimo aggiornamento di", + "VISIBILITY": "Visibilità" + }, + "404": "Nessuna macro trovata" + }, + "DELETE": { + "TOOLTIP": "Elimina macro", + "CONFIRM": { + "MESSAGE": "Sei sicuro di voler eliminare ", + "YES": "Sì, elimina", + "NO": "No" + }, + "API": { + "SUCCESS_MESSAGE": "Macro eliminata con successo", + "ERROR_MESSAGE": "Si è verificato un errore durante l'eliminazione della macro. Riprova più tardi" + } + }, + "EDIT": { + "TOOLTIP": "Modifica macro", + "API": { + "SUCCESS_MESSAGE": "Macro aggiornato con successo", + "ERROR_MESSAGE": "Impossibile aggiornare la macro, riprova più tardi" + } + }, + "EDITOR": { + "START_FLOW": "Inizia Flow", + "END_FLOW": "End Flow", + "LOADING": "Recupero macro", + "ADD_BTN_TOOLTIP": "Aggiungi nuova azione", + "DELETE_BTN_TOOLTIP": "Rimuovi Azione", + "VISIBILITY": { + "LABEL": "Visibilità Macro", + "GLOBAL": { + "LABEL": "Pubblica", + "DESCRIPTION": "Questa macro è disponibile pubblicamente per tutti gli operatori di questo account." + }, + "PERSONAL": { + "LABEL": "Privata", + "DESCRIPTION": "Questa macro sarà privata per te e non sarà disponibile ad altri." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Esegui", + "PREVIEW": "Anteprima Macro", + "EXECUTED_SUCCESSFULLY": "Macro eseguita correttamente" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Chiave dell'attributo richiesta", + "FILTER_OPERATOR_REQUIRED": "Operatore di filtro richiesto", + "VALUE_REQUIRED": "Il valore è richiesto", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Il valore deve essere compreso tra 1 e 998", + "ACTION_PARAMETERS_REQUIRED": "Parametri di azione richiesti", + "ATLEAST_ONE_CONDITION_REQUIRED": "È richiesta almeno una condizione", + "ATLEAST_ONE_ACTION_REQUIRED": "È richiesta almeno un'azione" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Assegna a un Team", + "ASSIGN_AGENT": "Assegna un Operatore", + "ADD_LABEL": "Aggiungi Etichetta", + "REMOVE_LABEL": "Rimuovi Etichetta", + "REMOVE_ASSIGNED_TEAM": "Rimuovi Team Assegnato", + "SEND_EMAIL_TRANSCRIPT": "Invia una Trascrizione Email", + "MUTE_CONVERSATION": "Silenzia Conversazione", + "SNOOZE_CONVERSATION": "Posticipa Conversazione", + "RESOLVE_CONVERSATION": "Risolvi Conversazione", + "SEND_ATTACHMENT": "Invia Allegato", + "SEND_MESSAGE": "Invia un Messaggio", + "CHANGE_PRIORITY": "Cambia Priorità", + "ADD_PRIVATE_NOTE": "Aggiungi una Nota Privata", + "SEND_WEBHOOK_EVENT": "Invia Evento Webhook" + }, + "PRIORITY_TYPES": { + "NONE": "Nessuna", + "LOW": "Bassa", + "MEDIUM": "Media", + "HIGH": "Alta", + "URGENT": "Urgente" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/mfa.json b/app/javascript/dashboard/i18n/locale/it/mfa.json new file mode 100644 index 0000000..23d6846 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Autenticazione a Due Fattori", + "SUBTITLE": "Proteggi il tuo account con autenticazione basata su TOTP", + "DESCRIPTION": "Aggiungi un ulteriore livello di sicurezza al tuo account utilizzando una password monouso a tempo (TOTP)", + "STATUS_TITLE": "Stato dell'Autenticazione", + "STATUS_DESCRIPTION": "Gestisci le impostazioni di autenticazione a due fattori e i codici di recupero di backup", + "ENABLED": "Abilitato", + "DISABLED": "Disabilitato", + "STATUS_ENABLED": "L'autenticazione a due fattori è attiva", + "STATUS_ENABLED_DESC": "Il tuo account è protetto con un ulteriore livello di sicurezza", + "ENABLE_BUTTON": "Attiva Autenticazione A Due Fattori", + "ENHANCE_SECURITY": "Migliora La Sicurezza Del Tuo Account", + "ENHANCE_SECURITY_DESC": "L'autenticazione a due fattori aggiunge un ulteriore livello di sicurezza richiedendo un codice di verifica dalla tua app di autenticazione in aggiunta alla password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scansiona il QR Code con la tua app di autenticazione", + "STEP1_DESCRIPTION": "Utilizza Google Authenticator, Authy, o qualsiasi app compatibile con TOTP", + "LOADING_QR": "Caricamento...", + "MANUAL_ENTRY": "Non riesci a scansionare? Inserisci il codice manualmente", + "SECRET_KEY": "Chiave Segreta", + "COPY": "Copia", + "ENTER_CODE": "Inserisci il codice a 6 cifre dalla tua app di autenticazione", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verifica e Continua", + "CANCEL": "Annulla", + "ERROR_STARTING": "MFA non abilitata. Contatta l'amministratore.", + "INVALID_CODE": "Codice di verifica non valido", + "SECRET_COPIED": "Chiave segreta copiata negli appunti", + "SUCCESS": "L'autenticazione a due fattori è stata attivata con successo" + }, + "BACKUP": { + "TITLE": "Salva i tuoi Codici Di Backup", + "DESCRIPTION": "Mantieni questi codici al sicuro. Ognuno può essere utilizzato una sola volta se perdi l'accesso alla tua app di autenticazione", + "IMPORTANT": "Importante:", + "IMPORTANT_NOTE": " Salva questi codici in un luogo sicuro. Non sarai in grado di visualizzarli ancora.", + "DOWNLOAD": "Scarica", + "COPY_ALL": "Copia Tutto", + "CONFIRM": "Ho salvato i miei codici di backup in un luogo sicuro e comprendo che non sarò in grado di visualizzarli ancora", + "COMPLETE_SETUP": "Completa Configurazione", + "CODES_COPIED": "Codici di backup copiati negli appunti" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Codici di Backup", + "BACKUP_CODES_DESC": "Genera nuovi codici se hai perso o utilizzato quelli esistenti", + "REGENERATE": "Rigenera Codici di Backup", + "DISABLE_MFA": "Disattiva 2FA", + "DISABLE_MFA_DESC": "Rimuovi l'autenticazione a due fattori dal tuo account", + "DISABLE_BUTTON": "Disattiva Autenticazione A Due Fattori" + }, + "DISABLE": { + "TITLE": "Disattiva Autenticazione A Due Fattori", + "DESCRIPTION": "Dovrai inserire la tua password e un codice di verifica per disabilitare l'autenticazione a due fattori.", + "PASSWORD": "Password", + "OTP_CODE": "Codice Di Verifica", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disattiva 2FA", + "CANCEL": "Annulla", + "SUCCESS": "L'autenticazione a due fattori è stata disattivata", + "ERROR": "Impossibile disattivare MFA. Verifica le tue credenziali." + }, + "REGENERATE": { + "TITLE": "Rigenera Codici di Backup", + "DESCRIPTION": "Questo invaliderà i tuoi codici di backup esistenti e ne genererà di nuovi. Inserisci il tuo codice di verifica per continuare.", + "OTP_CODE": "Codice Di Verifica", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Genera Nuovi Codici", + "CANCEL": "Annulla", + "NEW_CODES_TITLE": "Nuovi Codici di Backup Generati", + "NEW_CODES_DESC": "I tuoi vecchi codici di backup sono stati invalidati. Salva questi nuovi codici in un luogo sicuro.", + "CODES_IMPORTANT": "Importante:", + "CODES_IMPORTANT_NOTE": "Ogni codice può essere usato solo una volta. Salvali prima di chiudere questa finestra.", + "DOWNLOAD_CODES": "Scarica Codici", + "COPY_ALL_CODES": "Copia Tutti i Codici", + "CODES_SAVED": "Ho Salvato i Miei Codici", + "SUCCESS": "Nuovi codici di backup sono stati generati", + "ERROR": "Impossibile rigenerare i codici di backup" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Autenticazione a Due Fattori", + "DESCRIPTION": "Inserisci il tuo codice di verifica per continuare", + "AUTHENTICATOR_APP": "App di Autenticazione", + "BACKUP_CODE": "Codice di Backup", + "ENTER_OTP_CODE": "Inserisci il codice a 6 cifre dalla tua app di autenticazione", + "ENTER_BACKUP_CODE": "Inserisci uno dei tuoi codici di backup", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verifica", + "TRY_ANOTHER_METHOD": "Prova un altro metodo di verifica", + "CANCEL_LOGIN": "Annulla e torna al login", + "HELP_TEXT": "Hai problemi ad accedere?", + "LEARN_MORE": "Maggiori informazioni su 2FA", + "HELP_MODAL": { + "TITLE": "Aiuto Autenticazione A Due Fattori", + "AUTHENTICATOR_TITLE": "Utilizzando un'app di autenticazione", + "AUTHENTICATOR_DESC": "Apri la tua app di autenticazione (Google Authenticator, Authy, ecc.) e inserisci il codice a 6 cifre mostrato per il tuo account.", + "BACKUP_TITLE": "Utilizzando un Codice di Backup", + "BACKUP_DESC": "Se non hai accesso alla tua app di autenticazione, puoi usare uno dei codici di backup salvati durante la configurazione 2FA. Ogni codice può essere utilizzato una sola volta.", + "CONTACT_TITLE": "Serve Più Aiuto?", + "CONTACT_DESC_CLOUD": "Se hai perso l'accesso sia alla tua app di autenticazione che ai codici di backup, contatta il supporto di Chatwoot per ricevere assistenza.", + "CONTACT_DESC_SELF_HOSTED": "Se hai perso l'accesso sia alla tua app di autenticazione che ai codici di backup, contatta il tuo amministratore per ricevere assistenza." + }, + "VERIFICATION_FAILED": "Verifica non riuscita. Riprova." + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/report.json b/app/javascript/dashboard/i18n/locale/it/report.json new file mode 100644 index 0000000..13694e2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Conversazioni", + "LOADING_CHART": "Caricamento dati grafici...", + "NO_ENOUGH_DATA": "Non ci sono abbastanza dati per generare il report, riprova più tardi.", + "DOWNLOAD_AGENT_REPORTS": "Scarica report operatori", + "DATA_FETCHING_FAILED": "Impossibile recuperare i dati, riprova più tardi.", + "SUMMARY_FETCHING_FAILED": "Impossibile recuperare il riepilogo, riprova più tardi.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversazioni", + "DESC": "( Totale )" + }, + "INCOMING_MESSAGES": { + "NAME": "Messaggi in arrivo", + "DESC": "( Totale )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Messaggi in uscita", + "DESC": "( Totale )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Tempo di prima risposta", + "DESC": "( Media )", + "INFO_TEXT": "Numero totale di conversazioni utilizzate per il calcolo:", + "TOOLTIP_TEXT": "Il tempo di prima risposta è {metricValue} (basato su {conversationCount} conversazioni)" + }, + "RESOLUTION_TIME": { + "NAME": "Tempo di Risoluzione", + "DESC": "( Media )", + "INFO_TEXT": "Numero totale di conversazioni utilizzate per il calcolo:", + "TOOLTIP_TEXT": "Il tempo di risoluzione è {metricValue} (basato su {conversationCount} conversazioni)" + }, + "RESOLUTION_COUNT": { + "NAME": "Conteggio risoluzioni", + "DESC": "( Totale )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Conteggio risoluzioni", + "DESC": "( Totale )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Conteggio Handoff", + "DESC": "( Totale )" + }, + "REPLY_TIME": { + "NAME": "Tempo di attesa del cliente", + "TOOLTIP_TEXT": "Il tempo di attesa è {metricValue} (basato su {conversationCount} risposte)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "Ultimi 7 giorni", + "LAST_14_DAYS": "Ultimi 14 giorni", + "LAST_30_DAYS": "Ultimi 30 giorni", + "THIS_MONTH": "Questo mese", + "LAST_MONTH": "Il mese scorso", + "LAST_3_MONTHS": "Ultimi 3 mesi", + "LAST_6_MONTHS": "Ultimi 6 mesi", + "LAST_YEAR": "Ultimo anno", + "CUSTOM_DATE_RANGE": "Intervallo di date personalizzato" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Applica", + "PLACEHOLDER": "Seleziona intervallo di date" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Raggruppa per", + "DURATION_FILTER_LABEL": "Durata", + "GROUPING_OPTIONS": { + "DAY": "Giorno", + "WEEK": "Settimana", + "MONTH": "Mese", + "YEAR": "Mese" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Giorno" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Giorno" + }, + { + "id": 2, + "groupBy": "Settimana" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Giorno" + }, + { + "id": 2, + "groupBy": "Settimana" + }, + { + "id": 3, + "groupBy": "Mese" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 2, + "groupBy": "Settimana" + }, + { + "id": 3, + "groupBy": "Mese" + }, + { + "id": 4, + "groupBy": "Mese" + } + ], + "BUSINESS_HOURS": "Orario Di Lavoro", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Rimuovi filtro", + "EMPTY_LIST": "Nessun risultato trovato" + }, + "PAGINATION": { + "RESULTS": "Mostrando da {start} a {end} di {total} risultati", + "PER_PAGE_TEMPLATE": "{size} / pagina" + } + }, + "AGENT_REPORTS": { + "HEADER": "Panoramica degli Operatori", + "DESCRIPTION": "Monitora la performance degli operatori con metriche chiave, tra cui conversazioni, tempi di risposta, tempi di risoluzione e casi risolti. Fai clic sul nome di un operatore per saperne di più.", + "LOADING_CHART": "Caricamento dati grafici...", + "NO_ENOUGH_DATA": "Non ci sono abbastanza dati per generare il report, riprova più tardi.", + "DOWNLOAD_AGENT_REPORTS": "Scarica report operatori", + "FILTER_DROPDOWN_LABEL": "Seleziona Operatore", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversazioni", + "DESC": "( Totale )" + }, + "INCOMING_MESSAGES": { + "NAME": "Messaggi in arrivo", + "DESC": "( Totale )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Messaggi in uscita", + "DESC": "( Totale )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Tempo di prima risposta", + "DESC": "( Media )", + "INFO_TEXT": "Numero totale di conversazioni utilizzate per il calcolo:", + "TOOLTIP_TEXT": "Il tempo di prima risposta è {metricValue} (basato su {conversationCount} conversazioni)" + }, + "RESOLUTION_TIME": { + "NAME": "Tempo di risoluzione", + "DESC": "( Media )", + "INFO_TEXT": "Numero totale di conversazioni utilizzate per il calcolo:", + "TOOLTIP_TEXT": "Il tempo di risoluzione è {metricValue} (basato su {conversationCount} conversazioni)" + }, + "RESOLUTION_COUNT": { + "NAME": "Conteggio risoluzioni", + "DESC": "( Totale )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Ultimi 7 giorni" + }, + { + "id": 1, + "name": "Ultimi 30 giorni" + }, + { + "id": 2, + "name": "Ultimi 3 mesi" + }, + { + "id": 3, + "name": "Ultimi 6 mesi" + }, + { + "id": 4, + "name": "Ultimo anno" + }, + { + "id": 5, + "name": "Intervallo di date personalizzato" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Applica", + "PLACEHOLDER": "Seleziona intervallo di date" + } + }, + "LABEL_REPORTS": { + "HEADER": "Panoramica Etichette", + "DESCRIPTION": "Monitora la performance delle etichette con metriche chiave, tra cui conversazioni, tempi di risposta, tempi di risoluzione e casi risolti. Fai clic sul nome di un'etichetta per approfondimenti dettagliati.", + "LOADING_CHART": "Caricamento dati grafici...", + "NO_ENOUGH_DATA": "Non ci sono abbastanza dati per generare il report, riprova più tardi.", + "DOWNLOAD_LABEL_REPORTS": "Scarica report etichette", + "FILTER_DROPDOWN_LABEL": "Seleziona etichetta", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversazioni", + "DESC": "( Totale )" + }, + "INCOMING_MESSAGES": { + "NAME": "Messaggi in arrivo", + "DESC": "( Totale )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Messaggi in uscita", + "DESC": "( Totale )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Tempo di prima risposta", + "DESC": "( Media )", + "INFO_TEXT": "Numero totale di conversazioni utilizzate per il calcolo:", + "TOOLTIP_TEXT": "Il tempo di prima risposta è {metricValue} (basato su {conversationCount} conversazioni)" + }, + "RESOLUTION_TIME": { + "NAME": "Tempo di Risoluzione", + "DESC": "( Media )", + "INFO_TEXT": "Numero totale di conversazioni utilizzate per il calcolo:", + "TOOLTIP_TEXT": "Il tempo di risoluzione è {metricValue} (basato su {conversationCount} conversazioni)" + }, + "RESOLUTION_COUNT": { + "NAME": "Conteggio risoluzioni", + "DESC": "( Totale )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Ultimi 7 giorni" + }, + { + "id": 1, + "name": "Ultimi 30 giorni" + }, + { + "id": 2, + "name": "Ultimi 3 mesi" + }, + { + "id": 3, + "name": "Ultimi 6 mesi" + }, + { + "id": 4, + "name": "Ultimo anno" + }, + { + "id": 5, + "name": "Intervallo di date personalizzato" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Applica", + "PLACEHOLDER": "Seleziona intervallo di date" + } + }, + "INBOX_REPORTS": { + "HEADER": "Panoramica Inbox", + "DESCRIPTION": "Visualizza rapidamente le performance della tua inbox con metriche chiave come conversazioni, tempi di risposta, tempi di risoluzione e casi risolti — tutto in un unico posto. Fai clic su una inbox per maggiori dettagli.", + "LOADING_CHART": "Caricamento dati grafici...", + "NO_ENOUGH_DATA": "Non ci sono abbastanza dati per generare il report, riprova più tardi.", + "DOWNLOAD_INBOX_REPORTS": "Scarica report Inbox", + "FILTER_DROPDOWN_LABEL": "Seleziona Inbox", + "ALL_INBOXES": "Tutte le Inbox", + "SEARCH_INBOX": "Ricerca Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversazioni", + "DESC": "( Totale )" + }, + "INCOMING_MESSAGES": { + "NAME": "Messaggi in arrivo", + "DESC": "( Totale )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Messaggi in uscita", + "DESC": "( Totale )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Tempo di prima risposta", + "DESC": "( Media )", + "INFO_TEXT": "Numero totale di conversazioni utilizzate per il calcolo:", + "TOOLTIP_TEXT": "Il tempo di prima risposta è {metricValue} (basato su {conversationCount} conversazioni)" + }, + "RESOLUTION_TIME": { + "NAME": "Tempo di risoluzione", + "DESC": "( Media )", + "INFO_TEXT": "Numero totale di conversazioni utilizzate per il calcolo:", + "TOOLTIP_TEXT": "Il tempo di risoluzione è {metricValue} (basato su {conversationCount} conversazioni)" + }, + "RESOLUTION_COUNT": { + "NAME": "Conteggio risoluzioni", + "DESC": "( Totale )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Ultimi 7 giorni" + }, + { + "id": 1, + "name": "Ultimi 30 giorni" + }, + { + "id": 2, + "name": "Ultimi 3 mesi" + }, + { + "id": 3, + "name": "Ultimi 6 mesi" + }, + { + "id": 4, + "name": "Ultimo anno" + }, + { + "id": 5, + "name": "Intervallo di date personalizzato" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Applica", + "PLACEHOLDER": "Seleziona intervallo di date" + } + }, + "TEAM_REPORTS": { + "HEADER": "Panoramica Team", + "DESCRIPTION": "Ottieni un'istantanea delle prestazioni del tuo team con metriche essenziali, tra cui conversazioni, tempi di risposta, tempi di risoluzione e casi risolti. Fare clic su un nome del team per maggiori dettagli.", + "LOADING_CHART": "Caricamento dati grafici...", + "NO_ENOUGH_DATA": "Non ci sono abbastanza dati per generare il report, riprova più tardi.", + "DOWNLOAD_TEAM_REPORTS": "Scarica report del team", + "FILTER_DROPDOWN_LABEL": "Seleziona Team", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversazioni", + "DESC": "( Totale )" + }, + "INCOMING_MESSAGES": { + "NAME": "Messaggi in arrivo", + "DESC": "( Totale )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Messaggi in uscita", + "DESC": "( Totale )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Tempo di prima risposta", + "DESC": "( Media )", + "INFO_TEXT": "Numero totale di conversazioni utilizzate per il calcolo:", + "TOOLTIP_TEXT": "Il tempo di prima risposta è {metricValue} (basato su {conversationCount} conversazioni)" + }, + "RESOLUTION_TIME": { + "NAME": "Tempo di risoluzione", + "DESC": "( Media )", + "INFO_TEXT": "Numero totale di conversazioni utilizzate per il calcolo:", + "TOOLTIP_TEXT": "Il tempo di risoluzione è {metricValue} (basato su {conversationCount} conversazioni)" + }, + "RESOLUTION_COUNT": { + "NAME": "Conteggio risoluzioni", + "DESC": "( Totale )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Ultimi 7 giorni" + }, + { + "id": 1, + "name": "Ultimi 30 giorni" + }, + { + "id": 2, + "name": "Ultimi 3 mesi" + }, + { + "id": 3, + "name": "Ultimi 6 mesi" + }, + { + "id": 4, + "name": "Ultimo anno" + }, + { + "id": 5, + "name": "Intervallo di date personalizzato" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Applica", + "PLACEHOLDER": "Seleziona intervallo di date" + } + }, + "CSAT_REPORTS": { + "HEADER": "Report CSAT", + "NO_RECORDS": "Non ci sono risposte ai sondaggi CSAT disponibili.", + "DOWNLOAD": "Scarica report CSAT", + "DOWNLOAD_FAILED": "Download dei report CSAT non riuscito", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Scegli Operatori" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Contatto", + "AGENT_NAME": "Operatore assegnato", + "RATING": "Valutazione", + "FEEDBACK_TEXT": "Commento del feedback" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Risposte totali", + "TOOLTIP": "Numero totale di risposte raccolte" + }, + "SATISFACTION_SCORE": { + "LABEL": "Punteggio di soddisfazione", + "TOOLTIP": "Numero totale di risposte positive / Numero totale di risposte * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Tasso di risposta", + "TOOLTIP": "Numero totale di risposte / Numero totale di messaggi di sondaggio CSAT inviati * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Report Bot", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "Numero di Conversazioni", + "TOOLTIP": "Numero totale di conversazioni gestite dal bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Risposte totali", + "TOOLTIP": "Numero totale di risposte inviate dal bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Tasso Di Risoluzione", + "TOOLTIP": "Numero totale di conversazioni risolte dal bot / Numero totale di conversazioni gestite dal bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Tasso di Handoff", + "TOOLTIP": "Numero totale di conversazioni passate agli agenti / Numero totale di conversazioni gestite dal bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Panoramica", + "LIVE": "Live", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Conversazioni aperte", + "LOADING_MESSAGE": "Caricamento metriche conversazioni...", + "OPEN": "Aperte", + "UNATTENDED": "Non partecipate", + "UNASSIGNED": "Non assegnate", + "PENDING": "In Sospeso" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Traffico delle Conversazioni", + "NO_CONVERSATIONS": "Nessuna conversazione", + "CONVERSATION": "{count} conversazione", + "CONVERSATIONS": "{count} conversazioni", + "DOWNLOAD_REPORT": "Scarica report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Risoluzioni", + "NO_CONVERSATIONS": "Nessuna conversazione", + "CONVERSATION": "{count} conversazione", + "CONVERSATIONS": "{count} conversazioni", + "DOWNLOAD_REPORT": "Scarica report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Conversazioni per operatore", + "LOADING_MESSAGE": "Caricamento metriche operatori...", + "NO_AGENTS": "Non ci sono conversazioni per operatore", + "TABLE_HEADER": { + "AGENT": "Operatore", + "OPEN": "Aperte", + "UNATTENDED": "Non partecipate", + "STATUS": "Stato" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "Tutti i Team", + "HEADER": "Conversazioni per team", + "LOADING_MESSAGE": "Caricamento metriche team...", + "NO_TEAMS": "Nessun dato disponibile", + "TABLE_HEADER": { + "TEAM": "Team", + "OPEN": "Aperte", + "UNATTENDED": "Non partecipate", + "STATUS": "Stato" + } + }, + "AGENT_STATUS": { + "HEADER": "Stato operatore", + "ONLINE": "Online", + "BUSY": "Occupato", + "OFFLINE": "Offline" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Domenica", + "MONDAY": "Lunedì", + "TUESDAY": "Martedì", + "WEDNESDAY": "Mercoledì", + "THURSDAY": "Giovedì", + "FRIDAY": "Venerdì", + "SATURDAY": "Sabato" + }, + "SLA_REPORTS": { + "HEADER": "Report SLA", + "NO_RECORDS": "Conversazioni SLA non disponibili.", + "LOADING": "Caricamento dati SLA...", + "DOWNLOAD_SLA_REPORTS": "Scarica report SLA", + "DOWNLOAD_FAILED": "Impossibile scaricare i report SLA", + "DROPDOWN": { + "ADD_FIlTER": "Aggiungi filtro", + "CLEAR_ALL": "Rimuovi tutto", + "CLEAR_FILTER": "Rimuovi filtro", + "EMPTY_LIST": "Nessun risultato trovato", + "NO_FILTER": "Nessun filtro disponibile", + "SEARCH": "Filtro ricerca", + "INPUT_PLACEHOLDER": { + "SLA": "Nome SLA", + "AGENTS": "Nome operatore", + "INBOXES": "Nome inbox", + "LABELS": "Nome etichetta", + "TEAMS": "Nome del team" + }, + "SLA": "Policy SLA", + "INBOXES": "Inbox", + "AGENTS": "Operatore", + "LABELS": "Etichetta", + "TEAMS": "Team" + }, + "WITH": "con", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentuale di SLA creati completata con successo" + }, + "NO_OF_MISSES": { + "LABEL": "Numero di Mancate", + "TOOLTIP": "Totale SLA mancate in un determinato periodo" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Numero di Conversazioni", + "TOOLTIP": "Numero totale di conversazioni con SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "Conversazione", + "AGENT": "Operatore" + }, + "VIEW_DETAILS": "Visualizza Dettagli" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Inbox", + "AGENT": "Operatore", + "TEAM": "Team", + "LABEL": "Etichetta", + "AVG_RESOLUTION_TIME": "Tempo Medio Di Risoluzione", + "AVG_FIRST_RESPONSE_TIME": "Tempo Medio Di Prima Risposta", + "AVG_REPLY_TIME": "Tempo Medio Di Attesa Del Cliente", + "RESOLUTION_COUNT": "Conteggio risoluzioni", + "CONVERSATIONS": "Numero di conversazioni" + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/resetPassword.json b/app/javascript/dashboard/i18n/locale/it/resetPassword.json new file mode 100644 index 0000000..b2a4da7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Reimposta password", + "DESCRIPTION": "Inserisci l'indirizzo email che usi per accedere a Chatwoot per ottenere le istruzioni per reimpostare la password.", + "GO_BACK_TO_LOGIN": "Se vuoi tornare alla pagina di login,", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "Inserisci il tuo indirizzo email.", + "ERROR": "Inserisci un indirizzo email valido." + }, + "API": { + "SUCCESS_MESSAGE": "Il link per reimpostare la password è stato inviato alla tua email.", + "ERROR_MESSAGE": "Impossibile connettersi al server Woot. Riprova." + }, + "SUBMIT": "Invia" + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/search.json b/app/javascript/dashboard/i18n/locale/it/search.json new file mode 100644 index 0000000..f5ae0f0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "Tutti i risultati", + "CONTACTS": "Contatti", + "CONVERSATIONS": "Conversazioni", + "MESSAGES": "Messaggi", + "ARTICLES": "Articoli" + }, + "SECTION": { + "CONTACTS": "Contatti", + "CONVERSATIONS": "Conversazioni", + "MESSAGES": "Messaggi", + "ARTICLES": "Articoli" + }, + "VIEW_MORE": "Mostra di più", + "LOAD_MORE": "Carica altro", + "SEARCHING_DATA": "Ricerca", + "LOADING_DATA": "Caricamento", + "EMPTY_STATE": "Nessun {item} trovato per la ricerca '{query}'", + "EMPTY_STATE_FULL": "Nessun risultato trovato per la ricerca '{query}'", + "PLACEHOLDER_KEYBINDING": "/per evidenziare", + "INPUT_PLACEHOLDER": "Digita 3 o più caratteri da cercare", + "RECENT_SEARCHES": "Ricerche recenti", + "CLEAR_ALL": "Rimuovi tutto", + "MOST_RECENT": "Più recenti", + "EMPTY_STATE_DEFAULT": "Ricerca per id conversazione, email, numero di telefono, messaggi per risultati di ricerca migliori. ", + "BOT_LABEL": "Bot", + "READ_MORE": "Leggi di più", + "READ_LESS": "Leggi meno", + "WROTE": "ha scritto:", + "FROM": "Da", + "EMAIL": "Email", + "EMAIL_SUBJECT": "Oggetto", + "PRIVATE": "Nota Privata", + "TRANSCRIPT": "Trascrizione", + "CREATED_AT": "creato {time}", + "UPDATED_AT": "aggiornato {time}", + "SORT_BY": { + "RELEVANCE": "Rilevanza" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "Ultimi 7 giorni", + "LAST_30_DAYS": "Ultimi 30 giorni", + "LAST_60_DAYS": "Ultimi 60 giorni", + "LAST_90_DAYS": "Ultimi 90 giorni", + "CUSTOM_RANGE": "Range personalizzato:", + "CREATED_BETWEEN": "Creato tra", + "AND": "e", + "APPLY": "Applica", + "BEFORE_DATE": "Prima del {date}", + "AFTER_DATE": "Dopo il {date}", + "TIME_RANGE": "Filtra per orario", + "CLEAR_FILTER": "Rimuovi filtro" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filtra i messaggi per:", + "FROM": "Mittente", + "IN": "Inbox", + "AGENTS": "Operatori", + "CONTACTS": "Contatti", + "INBOXES": "Inbox", + "NO_AGENTS": "Nessun operatore trovato", + "NO_CONTACTS": "Avvia una ricerca per vedere risultati", + "NO_INBOXES": "Nessuna Inbox trovata" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/setNewPassword.json b/app/javascript/dashboard/i18n/locale/it/setNewPassword.json new file mode 100644 index 0000000..1343561 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Set new password", + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password", + "ERROR": "Password troppo corta." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Conferma password", + "PLACEHOLDER": "Conferma Password", + "ERROR": "Le password non corrispondono." + }, + "API": { + "SUCCESS_MESSAGE": "Password cambiata con successo.", + "ERROR_MESSAGE": "Impossibile connettersi al server Woot. Riprova." + }, + "CAPTCHA": { + "ERROR": "Verifica scaduta. Si prega di risolvere nuovamente il captcha." + }, + "SUBMIT": "Invia" + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/settings.json b/app/javascript/dashboard/i18n/locale/it/settings.json new file mode 100644 index 0000000..e577391 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Impostazioni Profilo", + "TITLE": "Impostazioni Profilo", + "BTN_TEXT": "Aggiorna Profilo", + "DELETE_AVATAR": "Elimina Avatar", + "AVATAR_DELETE_SUCCESS": "L'avatar è stato eliminato con successo", + "AVATAR_DELETE_FAILED": "C'è un errore durante l'eliminazione dell'avatar, si prega di riprovare", + "UPDATE_SUCCESS": "Il tuo profilo è stato aggiornato con successo", + "PASSWORD_UPDATE_SUCCESS": "La tua password è stata modificata con successo", + "AFTER_EMAIL_CHANGED": "Il tuo profilo è stato aggiornato correttamente, effettua nuovamente l'accesso visto che le credenziali di accesso sono state modificate", + "FORM": { + "PICTURE": "Immagine del Profilo", + "AVATAR": "Immagine del Profilo", + "ERROR": "Correggi gli errori del modulo", + "REMOVE_IMAGE": "Rimuovi", + "UPLOAD_IMAGE": "Carica immagine", + "UPDATE_IMAGE": "Aggiorna immagine", + "PROFILE_SECTION": { + "TITLE": "Profilo", + "NOTE": "Il tuo indirizzo email è la tua identità e viene utilizzato per l'accesso." + }, + "SEND_MESSAGE": { + "TITLE": "Tasto per inviare messaggi", + "NOTE": "Puoi selezionare un tasto di scelta rapida (Invio o Cmd/Ctrl+Invio) in base alle tue preferenze di scrittura.", + "UPDATE_SUCCESS": "Impostazioni aggiornate con successo", + "CARD": { + "ENTER_KEY": { + "HEADING": "Invio (↵)", + "CONTENT": "Invia messaggi premendo il tasto Invio invece di fare clic sul pulsante Invia." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Invio (⌘ + ↵)", + "CONTENT": "Invia messaggi premendo Cmd/Ctrl + Invio invece di dover cliccare sul pulsante Invia." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interfaccia", + "NOTE": "Personalizza l'aspetto della tua dashboard.", + "FONT_SIZE": { + "TITLE": "Grandezza font", + "NOTE": "Regola la dimensione del testo sulla dashboard in base alle tue preferenze.", + "UPDATE_SUCCESS": "Le impostazioni del font sono state aggiornate con successo", + "UPDATE_ERROR": "C'è stato un errore durante l'aggiornamento del font, si prega di riprovare", + "OPTIONS": { + "SMALLER": "Più piccolo", + "SMALL": "Piccolo", + "DEFAULT": "Predefinito", + "LARGE": "Grande", + "LARGER": "Più Grande", + "EXTRA_LARGE": "Molto Grande" + } + }, + "LANGUAGE": { + "TITLE": "Lingua Preferita", + "NOTE": "Scegli la lingua che vuoi utilizzare.", + "UPDATE_SUCCESS": "Le impostazioni della lingua sono state aggiornate con successo", + "UPDATE_ERROR": "C'è stato un errore durante l'aggiornamento della lingua, si prega di riprovare", + "USE_ACCOUNT_DEFAULT": "Predefinita account" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Firma del messaggio", + "NOTE": "Crea una firma di messaggio univoca da visualizzare alla fine di ogni messaggio che invii da qualsiasi Inbox. È anche possibile includere un'immagine inline, che è supportata in live-chat, e-mail e API.", + "BTN_TEXT": "Salva firma del messaggio", + "API_ERROR": "Impossibile salvare la firma! Riprova", + "API_SUCCESS": "Firma salvata con successo", + "IMAGE_UPLOAD_ERROR": "Impossibile caricare l'immagine! Riprova", + "IMAGE_UPLOAD_SUCCESS": "Immagine aggiunta con successo. Clicca su Salva per salvare la firma", + "IMAGE_UPLOAD_SIZE_ERROR": "La dimensione dell'immagine deve essere inferiore a {size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Firma del messaggio", + "ERROR": "La firma del messaggio non può essere vuota", + "PLACEHOLDER": "Inserisci qui la firma del tuo messaggio personale." + }, + "PASSWORD_SECTION": { + "TITLE": "Password", + "NOTE": "Aggiornare la tua password reimposterà i tuoi accessi in più dispositivi.", + "BTN_TEXT": "Cambia password" + }, + "SECURITY_SECTION": { + "TITLE": "Sicurezza", + "NOTE": "Gestisci funzionalità di sicurezza aggiuntive per il tuo account.", + "MFA_BUTTON": "Gestisci Autenticazione A Due Fattori" + }, + "ACCESS_TOKEN": { + "TITLE": "Token di accesso", + "NOTE": "Questo token può essere usato se stai costruendo un'integrazione basata su API", + "COPY": "Copia", + "RESET": "Reset", + "CONFIRM_RESET": "Sei sicuro?", + "CONFIRM_HINT": "Clicca di nuovo per confermare", + "RESET_SUCCESS": "Token di accesso rigenerato correttamente", + "RESET_ERROR": "Impossibile rigenerare il token di accesso. Riprova" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Avvisi Audio", + "NOTE": "Abilita gli avvisi audio nella dashboard per nuovi messaggi e conversazioni.", + "PLAY": "Riproduci suono", + "ALERT_TYPES": { + "NONE": "Nessuno", + "MINE": "Assegnate", + "ALL": "Tutti", + "ASSIGNED": "Le conversazioni assegnate a me", + "UNASSIGNED": "Conversazioni non assegnate", + "NOTME": "Conversazioni aperte assegnate ad altri" + }, + "ALERT_COMBINATIONS": { + "NONE": "Non hai selezionato nessuna opzione, non riceverai alcun avviso audio.", + "ASSIGNED": "Riceverai avvisi per le conversazioni assegnate a te.", + "UNASSIGNED": "Riceverai avvisi per qualsiasi conversazione non assegnata.", + "NOTME": "Riceverai avvisi per le conversazioni assegnate ad altri.", + "ASSIGNED+UNASSIGNED": "Riceverai avvisi per le conversazioni assegnate a te e per quelle non risposte.", + "ASSIGNED+NOTME": "Riceverai avvisi per le conversazioni assegnate a te e agli altri, ma non per quelle non assegnate.", + "NOTME+UNASSIGNED": "Riceverai avvisi per conversazioni non risposte e per quelle assegnate ad altri.", + "ASSIGNED+NOTME+UNASSIGNED": "Riceverai avvisi per tutte le conversazioni." + }, + "ALERT_TYPE": { + "TITLE": "Eventi di avviso per le conversazioni", + "NONE": "Nessuno", + "ASSIGNED": "Conversazioni Assegnate", + "ALL_CONVERSATIONS": "Tutte le Conversazioni" + }, + "DEFAULT_TONE": { + "TITLE": "Tono avviso:" + }, + "CONDITIONS": { + "TITLE": "Condizioni di avviso:", + "CONDITION_ONE": "Invia avvisi audio solo se la finestra del browser non è attiva", + "CONDITION_TWO": "Invia avvisi ogni 30s fino alla lettura di tutte le conversazioni assegnate" + }, + "SOUND_PERMISSION_ERROR": "La riproduzione automatica è disabilitata nel tuo browser. Per sentire gli avvisi automaticamente, abilita i permessi audio nelle impostazioni del tuo browser o interagisci con la pagina.", + "READ_MORE": "Leggi di più" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "Notifiche email", + "NOTE": "Aggiorna qui le tue preferenze di notifica email", + "CONVERSATION_ASSIGNMENT": "Invia notifiche email quando viene assegnata una conversazione a me", + "CONVERSATION_CREATION": "Invia notifiche email quando viene creata una nuova conversazione", + "CONVERSATION_MENTION": "Invia notifiche email quando sei menzionato in una conversazione", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Invia notifiche email quando viene creato un nuovo messaggio in una conversazione assegnata", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Invia notifiche email quando un nuovo messaggio viene creato in una conversazione partecipata", + "SLA_MISSED_FIRST_RESPONSE": "Invia notifiche email quando una conversazione manca il tempo di risposta SLA", + "SLA_MISSED_NEXT_RESPONSE": "Invia notifiche email quando una conversazione manca il tempo di prossima risposta SLA", + "SLA_MISSED_RESOLUTION": "Invia notifiche email quando una conversazione manca il tempo di risoluzione SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Preferenze di notifica", + "TYPE_TITLE": "Tipo di notifica", + "EMAIL": "Email", + "PUSH": "Notifica push", + "TYPES": { + "CONVERSATION_CREATED": "Una nuova conversazione è stata creata", + "CONVERSATION_ASSIGNED": "Una conversazione ti viene assegnata", + "CONVERSATION_MENTION": "Vieni menzionato in una conversazione", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Un nuovo messaggio è stato creato in una conversazione assegnata", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Un nuovo messaggio è stato creato in una conversazione partecipata", + "SLA_MISSED_FIRST_RESPONSE": "Una conversazione manca il tempo di prima risposta SLA", + "SLA_MISSED_NEXT_RESPONSE": "Una conversazione manca il tempo di risposta successiva SLA", + "SLA_MISSED_RESOLUTION": "Una conversazione manca il tempo di risoluzione SLA" + }, + "BROWSER_PERMISSION": "Abilita le notifiche push per il browser in modo da poterle ricevere" + }, + "API": { + "UPDATE_SUCCESS": "Le preferenze per le notifiche sono state aggiornate con successo", + "UPDATE_ERROR": "C'è stato un errore durante l'aggiornamento delle preferenze, si prega di riprovare" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Notifiche Push", + "NOTE": "Aggiorna qui le tue preferenze di notifiche push", + "CONVERSATION_ASSIGNMENT": "Invia notifiche push quando una conversazione mi viene assegnata", + "CONVERSATION_CREATION": "Invia notifiche push quando viene creata una nuova conversazione", + "CONVERSATION_MENTION": "Invia notifiche push quando sei menzionato in una conversazione", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Invia notifiche push quando viene creato un nuovo messaggio in una conversazione assegnata", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Invia notifiche push quando viene creato un nuovo messaggio in una conversazione partecipata", + "HAS_ENABLED_PUSH": "Hai abilitato notifiche push per questo browser.", + "REQUEST_PUSH": "Abilita notifiche push", + "SLA_MISSED_FIRST_RESPONSE": "Invia notifiche push quando una conversazione manca il tempo di prima risposta SLA", + "SLA_MISSED_NEXT_RESPONSE": "Invia notifiche push quando una conversazione manca il tempo di risposta successiva SLA", + "SLA_MISSED_RESOLUTION": "Invia notifiche push quando una conversazione manca il tempo di risoluzione SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "Immagine del Profilo" + }, + "NAME": { + "LABEL": "Il tuo nome completo", + "ERROR": "Inserisci un nome completo valido", + "PLACEHOLDER": "Inserisci il tuo nome completo" + }, + "DISPLAY_NAME": { + "LABEL": "Nome visualizzato", + "ERROR": "Inserisci un nome visualizzato valido", + "PLACEHOLDER": "Inserisci un nome visualizzato, questo verrà mostrato nelle conversazioni" + }, + "AVAILABILITY": { + "LABEL": "Disponibilità", + "STATUS": { + "ONLINE": "Online", + "BUSY": "Occupato", + "OFFLINE": "Offline" + }, + "SET_AVAILABILITY_SUCCESS": "Disponibilità impostata correttamente", + "SET_AVAILABILITY_ERROR": "Impossibile impostare la disponibilità, riprova", + "IMPERSONATING_ERROR": "Impossibile modificare la disponibilità durante l'impersonazione di un utente" + }, + "EMAIL": { + "LABEL": "Il tuo indirizzo email", + "ERROR": "Inserisci un indirizzo email valido", + "PLACEHOLDER": "Inserisci il tuo indirizzo email, questo verrà mostrato nelle conversazioni" + }, + "CURRENT_PASSWORD": { + "LABEL": "Password attuale", + "ERROR": "Inserisci la password attuale", + "PLACEHOLDER": "Inserisci la password attuale" + }, + "PASSWORD": { + "LABEL": "Nuova password", + "ERROR": "Inserisci una password di lunghezza 6 o più", + "PLACEHOLDER": "Inserisci una nuova password" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Conferma nuova password", + "ERROR": "La password di conferma deve corrispondere alla password", + "PLACEHOLDER": "Inserisci nuovamente la nuova password" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Cambia", + "CHANGE_ACCOUNTS": "Cambia account", + "SWITCH_ACCOUNT": "Cambia account", + "CONTACT_SUPPORT": "Contatta il supporto", + "SELECTOR_SUBTITLE": "Seleziona un account dall'elenco", + "PROFILE_SETTINGS": "Impostazioni profilo", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Scorciatoie da tastiera", + "APPEARANCE": "Personalizza aspetto", + "SUPER_ADMIN_CONSOLE": "Console SuperAdmin", + "DOCS": "Leggi la documentazione", + "CHANGELOG": "Changelog", + "LOGOUT": "Disconnetti" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "giorni di prova rimanenti.", + "TRAIL_BUTTON": "Acquista Ora", + "DELETED_USER": "Utente Eliminato", + "EMAIL_VERIFICATION_PENDING": "Sembra che tu non abbia ancora verificato il tuo indirizzo email. Controlla la tua casella di posta per l'email di verifica.", + "RESEND_VERIFICATION_MAIL": "Invia nuovamente email di verifica", + "EMAIL_VERIFICATION_SENT": "L'email di verifica è stata inviata. Controlla la tua casella di posta.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Account Sospeso", + "MESSAGE": "Il tuo account è sospeso. Contatta il team di supporto per ulteriori informazioni." + }, + "NO_ACCOUNTS": { + "TITLE": "Nessun account trovato", + "MESSAGE_CLOUD": "Non fai parte di nessun account al momento. Se pensi che sia un errore, contatta il nostro team di supporto.", + "MESSAGE_SELF_HOSTED": "Non fai parte di nessun account al momento. Per favore contatta il tuo amministratore.", + "LOGOUT": "Disconnetti" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Copia", + "CODEPEN": "Apri in CodePen", + "COPY_SUCCESSFUL": "Copiato negli appunti" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Mostra di più", + "SHOW_LESS": "Mostra meno" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "Scarica", + "UPLOADING": "Caricamento...", + "INSTAGRAM_STORY_UNAVAILABLE": "Questa storia non è più disponibile." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "Vedi sulla mappa" + }, + "FORM_BUBBLE": { + "SUBMIT": "Invia" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "Questa immagine non è più disponibile.", + "LOADING_FAILED": "Caricamento non riuscito" + } + }, + "CONFIRM_EMAIL": "Verifica...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Aggiungi Inbox" + } + }, + "SIDEBAR": { + "NO_ITEMS": "Nessun elemento", + "CURRENTLY_VIEWING_ACCOUNT": "Visualizzazione attuale:", + "SWITCH": "Cambia", + "INBOX_VIEW": "Vista Inbox", + "CONVERSATIONS": "Conversazioni", + "INBOX": "La mia Inbox", + "ALL_CONVERSATIONS": "Tutte le Conversazioni", + "MENTIONED_CONVERSATIONS": "Menzioni", + "PARTICIPATING_CONVERSATIONS": "Partecipate", + "UNATTENDED_CONVERSATIONS": "Non partecipate", + "REPORTS": "Report", + "SETTINGS": "Impostazioni", + "CONTACTS": "Contatti", + "ACTIVE": "Attivi", + "COMPANIES": "Aziende", + "ALL_COMPANIES": "Tutte le Aziende", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistenti", + "CAPTAIN_DOCUMENTS": "Documenti", + "CAPTAIN_RESPONSES": "FAQ", + "CAPTAIN_TOOLS": "Strumenti", + "CAPTAIN_SCENARIOS": "Scenari", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "Inbox", + "CAPTAIN_SETTINGS": "Impostazioni", + "HOME": "Home", + "AGENTS": "Operatori", + "AGENT_BOTS": "Bots", + "AUDIT_LOGS": "Audit Logs", + "INBOXES": "Inbox", + "NOTIFICATIONS": "Notifiche", + "CANNED_RESPONSES": "Risposte Predefinite", + "INTEGRATIONS": "Integrazioni", + "PROFILE_SETTINGS": "Impostazioni Profilo", + "ACCOUNT_SETTINGS": "Impostazioni Account", + "APPLICATIONS": "Applicazioni", + "LABELS": "Etichette", + "CUSTOM_ATTRIBUTES": "Attributi Personalizzati", + "AUTOMATION": "Automazioni", + "MACROS": "Macro", + "TEAMS": "Team", + "BILLING": "Fatturazione", + "CUSTOM_VIEWS_FOLDER": "Cartelle", + "CUSTOM_VIEWS_SEGMENTS": "Segmenti", + "ALL_CONTACTS": "Tutti i Contatti", + "TAGGED_WITH": "Etichettato con", + "NEW_LABEL": "Nuova etichetta", + "NEW_TEAM": "Nuovo team", + "NEW_INBOX": "Nuova Inbox", + "REPORTS_CONVERSATION": "Conversazioni", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Campagne", + "ONGOING": "In corso", + "ONE_OFF": "Una-tantum", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "Bot", + "REPORTS_AGENT": "Operatori", + "REPORTS_LABEL": "Etichette", + "REPORTS_INBOX": "Inbox", + "REPORTS_TEAM": "Team", + "AGENT_ASSIGNMENT": "Assegnazione Operatori", + "SET_AVAILABILITY_TITLE": "Impostati come", + "SET_YOUR_AVAILABILITY": "Imposta la tua disponibilità", + "SLA": "SLA", + "CUSTOM_ROLES": "Ruoli Personalizzati", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Panoramica", + "REAUTHORIZE": "La tua connessione alla Inbox è scaduta, ricollegati per continuare a ricevere e inviare messaggi", + "HELP_CENTER": { + "TITLE": "Help Center", + "ARTICLES": "Articoli", + "CATEGORIES": "Categorie", + "LOCALES": "Lingue", + "SETTINGS": "Impostazioni" + }, + "CHANNELS": "Canali", + "SET_AUTO_OFFLINE": { + "TEXT": "Imposta offline automaticamente", + "INFO_TEXT": "Consenti al sistema di impostarti automaticamente offline quando non utilizzi l'app o la dashboard.", + "INFO_SHORT": "Imposta automaticamente offline quando non stai usando l'app." + }, + "DOCS": "Leggi i documenti", + "SECURITY": "Sicurezza" + }, + "BILLING_SETTINGS": { + "TITLE": "Fatturazione", + "DESCRIPTION": "Gestisci qui il tuo abbonamento, aggiorna il tuo piano e ottieni di più per il tuo team.", + "CURRENT_PLAN": { + "TITLE": "Piano attuale", + "PLAN_NOTE": "Sei attualmente abbonato al piano **{plan}** con **{quantity}** licenze", + "SEAT_COUNT": "Numero di seat", + "RENEWS_ON": "Si rinnova il" + }, + "VIEW_PRICING": "Visualizza Prezzi", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Gestisci il tuo abbonamento", + "DESCRIPTION": "Visualizza le tue fatture precedenti, modifica i tuoi dati di fatturazione o annulla il tuo abbonamento.", + "BUTTON_TXT": "Vai al portale di fatturazione" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Gestisci utilizzo e crediti per Captain AI.", + "BUTTON_TXT": "Acquista più crediti", + "DOCUMENTS": "Documenti", + "RESPONSES": "Risposte", + "UPGRADE": "Captain non è disponibile sul piano gratuito, aggiorna ora per ottenere l'accesso agli assistenti, copilot e altro ancora.", + "REFRESH_CREDITS": "Aggiorna" + }, + "CHAT_WITH_US": { + "TITLE": "Hai bisogno di aiuto?", + "DESCRIPTION": "Hai qualche problema di fatturazione? Siamo qui per aiutarti.", + "BUTTON_TXT": "Chatta con noi" + }, + "NO_BILLING_USER": "Il tuo account di fatturazione è in fase di configurazione. Per favore aggiorna la pagina e riprova.", + "TOPUP": { + "BUY_CREDITS": "Acquista più crediti", + "MODAL_TITLE": "Acquista Crediti AI", + "MODAL_DESCRIPTION": "Acquista crediti aggiuntivi per Captain AI.", + "CREDITS": "CREDITI", + "ONE_TIME": "una tantum", + "POPULAR": "Più Popolare", + "NOTE_TITLE": "Nota:", + "NOTE_DESCRIPTION": "I crediti vengono aggiunti immediatamente e scadono in 6 mesi. È necessario un abbonamento attivo per utilizzare i crediti. I crediti acquistati vengono consumati dopo i crediti mensili del piano.", + "CANCEL": "Annulla", + "PURCHASE": "Acquista Crediti", + "LOADING": "Caricamento opzioni...", + "FETCH_ERROR": "Impossibile caricare le opzioni crediti. Riprova.", + "PURCHASE_ERROR": "Impossibile elaborare l'acquisto. Riprova.", + "PURCHASE_SUCCESS": "{credits} crediti aggiunti correttamente al tuo account", + "CONFIRM": { + "TITLE": "Conferma Acquisto", + "DESCRIPTION": "Stai per acquistare {credits} crediti per {amount}.", + "INSTANT_DEDUCTION_NOTE": "L'importo verrà addebitato immediatamente sulla tua carta salvata al momento della conferma.", + "GO_BACK": "Torna Indietro", + "CONFIRM_PURCHASE": "Conferma Acquisto" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Sicurezza", + "DESCRIPTION": "Gestisci le impostazioni di sicurezza del tuo account.", + "LINK_TEXT": "Ulteriori informazioni su SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO è attualmente disabilitato. Contatta l'amministratore per abilitare questa funzionalità.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configura SAML single sign-on per il tuo account. Gli utenti si autenticeranno tramite il tuo provider di identità invece di utilizzare email/password.", + "ACS_URL": { + "LABEL": "URL ACS", + "TOOLTIP": "URL Assertion Consumer Service - Configura questo URL nel tuo IdP come destinazione per le risposte SAML" + }, + "SSO_URL": { + "LABEL": "URL SSO", + "HELP": "L'URL dove verranno inviate le richieste di autenticazione SAML", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Certificato di firma in formato PEM", + "HELP": "Il certificato pubblico del provider di identità utilizzato per verificare le risposte SAML", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "Fingerprint SHA-1 del certificato — utilizzala per verificare il certificato nella configurazione del tuo IdP" + }, + "COPY_SUCCESS": "Copiato negli appunti", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Identificatore univoco per questa applicazione come Service Provider (generato automaticamente).", + "TOOLTIP": "Identificatore univoco di Chatwoot come Service Provider — configuralo nelle impostazioni del tuo IdP" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Identificatore univoco del tuo Identity Provider (di solito presente nella configurazione dell’IdP)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Aggiorna Impostazioni SAML", + "API": { + "SUCCESS": "Impostazioni SAML aggiornate correttamente", + "ERROR": "Impossibile aggiornare le impostazioni SAML", + "ERROR_LOADING": "Impossibile caricare le impostazioni SAML", + "DISABLED": "Impostazioni SAML disabilitate correttamente" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID e Certificate sono campi obbligatori", + "SSO_URL_ERROR": "Inserisci un URL SSO valido", + "CERTIFICATE_ERROR": "Certificato richiesto", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID è richiesto" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "La funzionalità SAML SSO è disponibile solo nei piani Enterprise.", + "UPGRADE_PROMPT": "Passa a un piano Enterprise per accedere a SAML single sign-on e ad altre funzionalità di sicurezza avanzate.", + "ASK_ADMIN": "Contatta il tuo amministratore per l'aggiornamento." + }, + "PAYWALL": { + "TITLE": "Aggiorna per abilitare SAML SSO", + "AVAILABLE_ON": "La funzionalità SAML SSO è disponibile solo nei piani Enterprise.", + "UPGRADE_PROMPT": "Aggiorna il tuo piano per ottenere l'accesso a SAML single sign-on e altre funzionalità avanzate.", + "UPGRADE_NOW": "Aggiorna ora", + "CANCEL_ANYTIME": "Puoi modificare o annullare il tuo piano in qualsiasi momento" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "Impostazioni Attributi SAML", + "DESCRIPTION": "I seguenti mapping degli attributi devono essere configurati nel tuo Identity Provider" + }, + "INFO_SECTION": { + "TITLE": "Informazioni sul Service Provider", + "TOOLTIP": "Copia questi valori e configurali nel tuo Identity Provider per stabilire la connessione SAML" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Uh oh! Non abbiamo trovato alcun account Chatwoot. Si prega di creare un nuovo account per continuare.", + "NEW_ACCOUNT": "Nuovo account", + "SELECTOR_SUBTITLE": "Crea un nuovo account", + "API": { + "SUCCESS_MESSAGE": "Account creato con successo", + "EXIST_MESSAGE": "Account già esistente", + "ERROR_MESSAGE": "Impossibile connettersi al server Woot, riprova più tardi" + }, + "FORM": { + "NAME": { + "LABEL": "Nome Azienda", + "PLACEHOLDER": "Wayne Enterprises" + }, + "SUBMIT": "Invia", + "CANCEL": "Annulla" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "View all shortcuts", + "TITLE": { + "OPEN_CONVERSATION": "Apri conversazione", + "RESOLVE_AND_NEXT": "Risolvi e vai alla prossima", + "NAVIGATE_DROPDOWN": "Naviga con gli elementi a discesa", + "RESOLVE_CONVERSATION": "Risolvi Conversazione", + "GO_TO_CONVERSATION_DASHBOARD": "Vai alla Dashboard Conversazioni", + "ADD_ATTACHMENT": "Aggiungi allegato", + "GO_TO_CONTACTS_DASHBOARD": "Vai alla Dashboard Contatti", + "TOGGLE_SIDEBAR": "Attiva/Disattiva barra laterale", + "GO_TO_REPORTS_SIDEBAR": "Vai alla barra laterale dei Report", + "MOVE_TO_NEXT_TAB": "Vai alla scheda successiva nell'elenco delle conversazioni", + "GO_TO_SETTINGS": "Vai alle Impostazioni", + "SWITCH_TO_PRIVATE_NOTE": "Passa alle Note Private", + "SWITCH_TO_REPLY": "Passa a Risposta", + "TOGGLE_SNOOZE_DROPDOWN": "Attiva/Disattiva menu a discesa per la Sospensione" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assegnazione operatori", + "DESCRIPTION": "Definisci delle policy per gestire al meglio il carico di lavoro e indirizzare le conversazioni in base alle esigenze delle Inbox e degli operatori. Scopri di più qui" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Policy di assegnazione", + "DESCRIPTION": "Gestisci come vengono assegnate le conversazioni nelle Inbox.", + "FEATURES": [ + "Assegna le conversazioni in modo uniforme o in base al limite di conversazioni per operatore", + "Aggiungi regole di distribuzione equa per evitare di sovraccaricare gli operatori", + "Aggiungi le inbox a una policy — una policy per ogni inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Policy sul limite di conversazioni per operatore", + "DESCRIPTION": "Gestisci il carico di lavoro degli operatori.", + "FEATURES": [ + "Definisci il numero massimo di conversazioni per inbox", + "Crea eccezioni basate su etichette e tempo", + "Aggiungi gli operatori a una policy — una policy per ogni operatore" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Policy di assegnazione", + "CREATE_POLICY": "Nuova policy" + }, + "CARD": { + "ORDER": "Ordina", + "PRIORITY": "Priorità", + "ACTIVE": "Attiva", + "INACTIVE": "Inattive", + "POPOVER": "Inbox aggiunte", + "EDIT": "Modifica" + }, + "NO_RECORDS_FOUND": "Nessuna policy di assegnazione trovata" + }, + "CREATE": { + "HEADER": { + "TITLE": "Crea policy di assegnazione" + }, + "CREATE_BUTTON": "Crea policy", + "API": { + "SUCCESS_MESSAGE": "Policy di assegnazione creata con successo", + "ERROR_MESSAGE": "Impossibile creare la policy di assegnazione" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Modifica policy di assegnazione" + }, + "EDIT_BUTTON": "Aggiorna policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Aggiungi Inbox", + "DESCRIPTION": "La Inbox {inboxName} è già collegata ad un'altra policy. Sei sicuro di volerla collegare a questa policy? Sarà scollegata dall'altra policy.", + "CONFIRM_BUTTON_LABEL": "Continua", + "CANCEL_BUTTON_LABEL": "Annulla" + }, + "API": { + "SUCCESS_MESSAGE": "Policy di assegnazione aggiornata con successo", + "ERROR_MESSAGE": "Aggiornamento della policy di assegnazione non riuscito" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox aggiunta con successo alla policy", + "ERROR_MESSAGE": "Impossibile aggiungere la Inbox alla policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox rimossa dalla policy correttamente", + "ERROR_MESSAGE": "Impossibile rimuovere la Inbox dalla policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Nome policy:", + "PLACEHOLDER": "Inserisci il nome della policy" + }, + "DESCRIPTION": { + "LABEL": "Descrizione:", + "PLACEHOLDER": "Inserisci descrizione" + }, + "STATUS": { + "LABEL": "Stato:", + "PLACEHOLDER": "Seleziona stato", + "ACTIVE": "Policy attiva", + "INACTIVE": "Policy inattiva" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Ordine di assegnazione", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assegna le conversazioni in modo uniforme tra gli operatori." + }, + "BALANCED": { + "LABEL": "Bilanciato", + "DESCRIPTION": "Assegna le conversazioni in base alla capacità disponibile." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Priorità di assegnazione", + "EARLIEST_CREATED": { + "LABEL": "Creata prima", + "DESCRIPTION": "La conversazione che è stata creata per prima viene assegnata per prima." + }, + "LONGEST_WAITING": { + "LABEL": "Attesa più lunga", + "DESCRIPTION": "La conversazione con il tempo di attesa più lungo viene assegnata per prima." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Policy di distribuzione equa", + "DESCRIPTION": "Imposta il numero massimo di conversazioni che possono essere assegnate per operatore in una finestra temporale per evitare di sovraccaricarlo. Questo campo obbligatorio è impostato di default a 100 conversazioni l'ora.", + "INPUT_MAX": "Assegna max", + "DURATION": "Conversazioni per operatore ogni" + }, + "INBOXES": { + "LABEL": "Inbox aggiunte", + "DESCRIPTION": "Aggiungi le inbox a cui applicare questa policy.", + "ADD_BUTTON": "Aggiungi Inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Cerca e seleziona le inbox da aggiungere", + "ADD_BUTTON": "Aggiungi" + }, + "EMPTY_STATE": "Nessuna inbox aggiunta a questa policy, aggiungine una per iniziare", + "API": { + "SUCCESS_MESSAGE": "Inbox aggiunta correttamente alla policy", + "ERROR_MESSAGE": "Impossibile aggiungere la Inbox alla policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Policy di assegnazione eliminata correttamente", + "ERROR_MESSAGE": "Impossibile eliminare la policy di assegnazione" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Limite di conversazioni per operatore", + "CREATE_POLICY": "Nuova policy" + }, + "CARD": { + "POPOVER": "Operatori aggiunti", + "EDIT": "Modifica" + }, + "NO_RECORDS_FOUND": "Nessuna policy sul limite di conversazioni per operatore trovata" + }, + "CREATE": { + "HEADER": { + "TITLE": "Crea una policy sul limite di conversazioni per operatore" + }, + "CREATE_BUTTON": "Crea policy", + "API": { + "SUCCESS_MESSAGE": "Policy sul limite di conversazioni per operatore creata correttamente", + "ERROR_MESSAGE": "Impossibile eliminare la policy di assegnazione" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Modifica la policy sul limite di conversazioni per operatore" + }, + "EDIT_BUTTON": "Aggiorna policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Aggiungi operatore", + "DESCRIPTION": "{agentName} è già collegato a un’altra policy. Vuoi davvero collegarlo a questa policy? Verrà scollegato dall’altra.", + "CONFIRM_BUTTON_LABEL": "Continua", + "CANCEL_BUTTON_LABEL": "Annulla" + }, + "API": { + "SUCCESS_MESSAGE": "Policy sul limite conversazioni per operatore aggiornata correttamente", + "ERROR_MESSAGE": "Impossibile aggiornare la policy sul limite conversazioni per operatore" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Operatore aggiunto correttamente alla policy", + "ERROR_MESSAGE": "Impossibile aggiungere l’operatore alla policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Operatore rimosso correttamente dalla policy", + "ERROR_MESSAGE": "Impossibile rimuovere l’operatore dalla policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Nome policy:", + "PLACEHOLDER": "Inserisci il nome della policy" + }, + "DESCRIPTION": { + "LABEL": "Descrizione:", + "PLACEHOLDER": "Inserisci descrizione" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Limiti di conversazioni per inbox", + "ADD_BUTTON": "Aggiungi Inbox", + "FIELD": { + "SELECT_INBOX": "Seleziona Inbox", + "MAX_CONVERSATIONS": "Max conversazioni", + "SET_LIMIT": "Imposta limite" + }, + "EMPTY_STATE": "Nessun limite Inbox impostato" + }, + "EXCLUSION_RULES": { + "LABEL": "Regole di esclusione", + "DESCRIPTION": "Le conversazioni che soddisfano le seguenti condizioni non verranno conteggiate nel limite di conversazioni per operatore", + "TAGS": { + "LABEL": "Escludi conversazioni taggate con etichette specifiche", + "ADD_TAG": "aggiungi tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Cerca e seleziona i tag da aggiungere" + }, + "EMPTY_STATE": "Nessun tag aggiunto a questa policy." + }, + "DURATION": { + "LABEL": "Escludi conversazioni più vecchie di una durata specificata", + "PLACEHOLDER": "Imposta tempo" + } + }, + "USERS": { + "LABEL": "Operatori assegnati", + "DESCRIPTION": "Aggiungi operatori per i quali questa policy verrà applicata.", + "ADD_BUTTON": "Aggiungi operatore", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Cerca e seleziona operatori da aggiungere", + "ADD_BUTTON": "Aggiungi" + }, + "EMPTY_STATE": "Nessun operatore aggiunto", + "API": { + "SUCCESS_MESSAGE": "Operatore aggiunto correttamente alla policy", + "ERROR_MESSAGE": "Impossibile aggiungere l’operatore alla policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "La policy sul limite di conversazioni per operatore è stata eliminata correttamente", + "ERROR_MESSAGE": "Impossibile eliminare la policy sul limite di conversazioni per operatore" + } + }, + "DELETE_POLICY": { + "TITLE": "Elimina policy", + "DESCRIPTION": "Sei sicuro di voler eliminare questa policy? Questa azione non può essere annullata.", + "CONFIRM_BUTTON_LABEL": "Elimina", + "CANCEL_BUTTON_LABEL": "Annulla" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/signup.json b/app/javascript/dashboard/i18n/locale/it/signup.json new file mode 100644 index 0000000..ab825e5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Crea un account", + "TITLE": "Registrati", + "TESTIMONIAL_HEADER": "Basta uno step per proseguire", + "TESTIMONIAL_CONTENT": "Sei a un passo dal coinvolgere i tuoi clienti, fidelizzarli e trovarne di nuovi.", + "TERMS_ACCEPT": "Creando un account, accetti Termini e Condizioni e Privacy policy", + "OAUTH": { + "GOOGLE_SIGNUP": "Registrati con Google" + }, + "COMPANY_NAME": { + "LABEL": "Nome azienda", + "PLACEHOLDER": "Inserisci il nome della tua azienda. Ad esempio: Wayne Enterprises", + "ERROR": "Il nome dell'azienda è troppo corto." + }, + "FULL_NAME": { + "LABEL": "Nome completo", + "PLACEHOLDER": "Inserisci il tuo nome completo, es.: Bruce Wayne", + "ERROR": "Nome account troppo corto." + }, + "EMAIL": { + "LABEL": "Email di lavoro", + "PLACEHOLDER": "Inserisci il tuo indirizzo email di lavoro. es.: bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Inserisci un indirizzo email di lavoro valido." + }, + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password", + "ERROR": "Password troppo corta.", + "IS_INVALID_PASSWORD": "La password deve contenere almeno 1 lettera maiuscola, 1 lettera minuscola, 1 numero e 1 carattere speciale.", + "REQUIREMENTS_LENGTH": "Almeno 6 caratteri", + "REQUIREMENTS_UPPERCASE": "Almeno una lettera maiuscola", + "REQUIREMENTS_LOWERCASE": "Almeno una lettera minuscola", + "REQUIREMENTS_NUMBER": "Almeno un numero", + "REQUIREMENTS_SPECIAL": "Almeno un carattere speciale" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Conferma password", + "PLACEHOLDER": "Conferma password", + "ERROR": "Le password non corrispondono." + }, + "API": { + "SUCCESS_MESSAGE": "Registrazione Riuscita", + "ERROR_MESSAGE": "Impossibile connettersi al server Woot. Riprova." + }, + "SUBMIT": "Crea account", + "HAVE_AN_ACCOUNT": "Hai già un account?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/sla.json b/app/javascript/dashboard/i18n/locale/it/sla.json new file mode 100644 index 0000000..9be1f91 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Aggiungi SLA", + "ADD_ACTION_LONG": "Crea una nuova policy SLA", + "DESCRIPTION": "I Service Level Agreement (SLA) sono contratti che definiscono chiare aspettative tra il team e i clienti. Stabiliscono norme per i tempi di risposta e di risoluzione, creando un quadro per la responsabilità e garantendo un'esperienza coerente e di alta qualità.", + "LEARN_MORE": "Scopri di più su SLA", + "LOADING": "Caricamento SLA", + "PAYWALL": { + "TITLE": "Aggiorna per creare SLA", + "AVAILABLE_ON": "La funzionalità SLA è disponibile solo nei piani Business e Enterprise.", + "UPGRADE_PROMPT": "Aggiorna il tuo piano per ottenere l'accesso a funzionalità avanzate come gestione del team, automazioni, attributi personalizzati e altro ancora.", + "UPGRADE_NOW": "Aggiorna ora", + "CANCEL_ANYTIME": "Puoi modificare o annullare il tuo piano in qualsiasi momento" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "La funzionalità SLA è disponibile solo nei piani a pagamento.", + "UPGRADE_PROMPT": "Passa a un piano a pagamento per accedere a funzionalità avanzate come audit logs, capacità degli operatori e altro ancora.", + "ASK_ADMIN": "Contatta il tuo amministratore per l'aggiornamento." + }, + "LIST": { + "404": "Non ci sono SLA disponibili in questo account.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Problemi sollevati dai clienti enterprise, che richiedono un'attenzione immediata.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Problemi sollevati dai clienti enterprise, che devono essere riconosciuti rapidamente." + }, + "BUSINESS_HOURS_ON": "Orario di lavoro attivo", + "BUSINESS_HOURS_OFF": "Orario di lavoro disattivo", + "RESPONSE_TYPES": { + "FRT": "Soglia tempo di prima risposta", + "NRT": "Soglia tempo di risposta successiva", + "RT": "Soglia tempo di risoluzione", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Nome SLA", + "PLACEHOLDER": "Nome SLA", + "REQUIRED_ERROR": "SLA name is required", + "MINIMUM_LENGTH_ERROR": "È richiesta una lunghezza minima di 2", + "VALID_ERROR": "Sono ammessi solo lettere, numeri, trattino e underscore" + }, + "DESCRIPTION": { + "LABEL": "Descrizione", + "PLACEHOLDER": "SLA per clienti premium" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "Tempo di prima risposta", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Tempo di Risposta Successiva", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "Tempo di Risoluzione", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Orario Di Lavoro", + "PLACEHOLDER": "Solo durante l'orario di lavoro" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "La soglia deve essere un numero e maggiore di zero" + }, + "EDIT": "Modifica", + "CREATE": "Crea", + "DELETE": "Elimina", + "CANCEL": "Annulla" + }, + "ADD": { + "TITLE": "Aggiungi SLA", + "DESC": "Amichevoli promesse per un grande servizio!", + "API": { + "SUCCESS_MESSAGE": "SLA aggiunta correttamente", + "ERROR_MESSAGE": "Si è verificato un errore, riprova" + } + }, + "DELETE": { + "TITLE": "Elimina SLA", + "API": { + "SUCCESS_MESSAGE": "SLA eliminata correttamente", + "ERROR_MESSAGE": "Si è verificato un errore, riprova" + }, + "CONFIRM": { + "TITLE": "Conferma Eliminazione", + "MESSAGE": "Sei sicuro di voler eliminare ", + "YES": "Sì, Elimina ", + "NO": "No, Mantieni " + } + }, + "EVENTS": { + "TITLE": "SLA Mancate", + "FRT": "Tempo di prima risposta", + "NRT": "Tempo di risposta successiva", + "RT": "Tempo di risoluzione", + "SHOW_MORE": "{count} altre", + "HIDE": "Nascondi {count} righe" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/teamsSettings.json b/app/javascript/dashboard/i18n/locale/it/teamsSettings.json new file mode 100644 index 0000000..d83e61d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Crea un nuovo team", + "HEADER": "Team", + "LOADING": "Caricamento team", + "DESCRIPTION": "I Team ti permettono di organizzare gli operatori in gruppi in base alle loro responsabilità. Un operatore può appartenere a più team. Quando si lavora in collaborazione, è possibile assegnare conversazioni a team specifici.", + "LEARN_MORE": "Scopri di più sui team", + "LIST": { + "404": "Non ci sono team creati su questo account.", + "EDIT_TEAM": "Modifica team", + "NONE": "Nessuno" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Crea un nuovo team", + "DESC": "Aggiungi un titolo e una descrizione al tuo nuovo team." + }, + "AGENTS": { + "BUTTON_TEXT": "Aggiungi operatori al team", + "TITLE": "Aggiungi operatori al team - {teamName}", + "DESC": "Aggiungi operatori al tuo team appena creato. Questo ti permette di collaborare come team alle conversazioni, ricevere una notifica sui nuovi eventi nella stessa conversazione." + }, + "WIZARD_CREATE": { + "TITLE": "Crea", + "BODY": "Crea un nuovo team di operatori." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "Aggiungi Operatori", + "BODY": "Aggiungi operatori al team." + }, + "WIZARD_FINISH": { + "TITLE": "Termina", + "BODY": "Sei pronto per iniziare!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Modifica i dettagli del tuo team", + "DESC": "Modifica titolo e descrizione del tuo team.", + "BUTTON_TEXT": "Aggiorna il team" + }, + "AGENTS": { + "BUTTON_TEXT": "Aggiorna operatori nel team", + "TITLE": "Aggiungi operatori al team - {teamName}", + "DESC": "Aggiungi operatori al tuo team appena creato. Tutti gli operatori aggiunti verranno avvisati quando una conversazione viene assegnata a questo team." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Dettagli del team", + "ROUTE": "settings_teams_edit", + "BODY": "Cambia nome, descrizione e altri dettagli." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Modifica Operatori", + "ROUTE": "settings_teams_edit_members", + "BODY": "Modifica gli operatori nel tuo team." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Termina", + "ROUTE": "settings_teams_edit_finish", + "BODY": "Sei pronto per iniziare!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Impossibile salvare i dettagli del team. Riprova." + }, + "AGENTS": { + "AGENT": "OPERATORE", + "EMAIL": "EMAIL", + "BUTTON_TEXT": "Aggiungi operatori", + "ADD_AGENTS": "Aggiungendo gli Operatori al tuo Team...", + "SELECT": "seleziona", + "SELECT_ALL": "seleziona tutti gli operatori", + "SELECTED_COUNT": "{selected} su {total} operatori selezionati." + }, + "ADD": { + "TITLE": "Aggiungi operatori al team - {teamName}", + "DESC": "Aggiungi operatori al tuo team appena creato. Questo ti permette di collaborare come team alle conversazioni, ricevere una notifica sui nuovi eventi nella stessa conversazione.", + "SELECT": "seleziona", + "SELECT_ALL": "seleziona tutti gli operatori", + "SELECTED_COUNT": "{selected} su {total} operatori selezionati.", + "BUTTON_TEXT": "Aggiungi operatori", + "AGENT_VALIDATION_ERROR": "Seleziona almeno un operatore." + }, + "FINISH": { + "TITLE": "Il tuo team è pronto!", + "MESSAGE": "Ora puoi collaborare come team sulle conversazioni. Buon supporto ", + "BUTTON_TEXT": "Termina" + }, + "DELETE": { + "BUTTON_TEXT": "Elimina", + "API": { + "SUCCESS_MESSAGE": "Team eliminato con successo.", + "ERROR_MESSAGE": "Impossibile eliminare il team. Riprova." + }, + "CONFIRM": { + "TITLE": "Sei sicuro di voler eliminare il team?", + "PLACE_HOLDER": "Digita {teamName} per confermare", + "MESSAGE": "L'eliminazione del team rimuoverà l'assegnazione del team dalle conversazioni assegnate a questo team.", + "YES": "Elimina ", + "NO": "Annulla" + } + }, + "SETTINGS": "Impostazioni", + "FORM": { + "UPDATE": "Aggiorna il team", + "CREATE": "Crea un nuovo team", + "NAME": { + "LABEL": "Nome del team", + "PLACEHOLDER": "Esempio: Vendite, Assistenza Clienti" + }, + "DESCRIPTION": { + "LABEL": "Descrizione Team", + "PLACEHOLDER": "Breve descrizione di questo team." + }, + "AUTO_ASSIGN": { + "LABEL": "Consenti l'assegnazione automatica per questo team." + }, + "SUBMIT_CREATE": "Crea un nuovo team" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/webhooks.json b/app/javascript/dashboard/i18n/locale/it/webhooks.json new file mode 100644 index 0000000..f9939c8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Impostazioni Webhook" + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/it/whatsappTemplates.json new file mode 100644 index 0000000..1005e8b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Modelli Whatsapp", + "SUBTITLE": "Seleziona il modello whatsapp che vuoi inviare", + "TEMPLATE_SELECTED_SUBTITLE": "Configura template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Cerca Modelli", + "NO_TEMPLATES_FOUND": "Nessun modello trovato per", + "HEADER": "Intestazione", + "BODY": "Corpo", + "FOOTER": "Piè", + "BUTTONS": "Pulsanti", + "CATEGORY": "Categoria", + "MEDIA_CONTENT": "Contenuto Multimediale", + "MEDIA_CONTENT_FALLBACK": "contenuto multimediale", + "NO_TEMPLATES_AVAILABLE": "Nessun modello WhatsApp disponibile. Fai clic su aggiorna per sincronizzare i modelli da WhatsApp.", + "REFRESH_BUTTON": "Aggiorna modelli", + "REFRESH_SUCCESS": "Aggiornamento modelli iniziato. Potrebbe volerci qualche minuto per aggiornare.", + "REFRESH_ERROR": "Impossibile aggiornare i modelli. Per favore riprova.", + "LABELS": { + "LANGUAGE": "Lingua", + "TEMPLATE_BODY": "Corpo Modello", + "CATEGORY": "Categoria" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variabili", + "LANGUAGE": "Lingua", + "CATEGORY": "Categoria", + "VARIABLE_PLACEHOLDER": "Inserisci il valore di {variable}", + "GO_BACK_LABEL": "Torna Indietro", + "SEND_MESSAGE_LABEL": "Invia Messaggio", + "FORM_ERROR_MESSAGE": "Inserisci tutte le variabili prima di inviare", + "MEDIA_HEADER_LABEL": "Intestazione {type}", + "OTP_CODE": "Inserisci OTP da 4 a 8 cifre", + "EXPIRY_MINUTES": "Inserisci minuti di scadenza", + "BUTTON_PARAMETERS": "Parametri Pulsanti", + "BUTTON_LABEL": "Pulsante {index}", + "COUPON_CODE": "Inserisci il codice coupon (max 15 caratteri)", + "MEDIA_URL_LABEL": "Inserisci l’URL del {type}", + "DOCUMENT_NAME_PLACEHOLDER": "Inserisci il nome del file (es. Fattura_2025.pdf)", + "BUTTON_PARAMETER": "Inserisci parametro pulsante" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/it/yearInReview.json b/app/javascript/dashboard/i18n/locale/it/yearInReview.json new file mode 100644 index 0000000..d1bef20 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/it/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Caricamento del tuo Year in Review...", + "ERROR": "Impossibile caricare lo Year in Review", + "CLOSE": "Chiudi", + "CONVERSATIONS": { + "TITLE": "Hai gestito", + "SUBTITLE": "conversazioni", + "FALLBACK": "Quest’anno non contavano i numeri. Contava esserci.", + "COMPARISON": { + "0_50": "Ti sei fatto trovare pronto. È così che nasce ogni inbox che si rispetti.", + "50_100": "Hai tenuto le risposte in movimento e le conversazioni ben vive.", + "100_500": "Hai gestito un bel po’ di traffico senza perdere il controllo.", + "500_2000": "Tutto è andato avanti, anche mentre il volume saliva.", + "2000_10000": "Hai fatto passare un traffico da ora di punta senza sudare.", + "10000_PLUS": "Una città intera di clienti che bussa alla porta. Tu? Tutto liscio come niente." + } + }, + "BUSIEST_DAY": { + "TITLE": "Il tuo giorno più intenso è stato", + "MESSAGE": "{count} conversazioni quel giorno.", + "COMPARISON": { + "0_5": "Un giro di riscaldamento. L’inbox quasi non se n’è accorta.", + "5_10": "Abbastanza azione da giustificare un secondo caffè.", + "10_25": "Il ritmo è salito e l’inbox è rimasta sull’attenti.", + "25_50": "Una vera corsa, ma senza neanche sudare.", + "50_100": "Caos controllato, gestito come fosse un martedì qualunque.", + "100_500": "Un incendio totale. Eppure le risposte continuavano a partire.", + "500_PLUS": "L’inbox ha perso ogni calma e non ha mai rallentato." + } + }, + "PERSONALITY": { + "TITLE": "Il tuo stile di supporto è", + "MESSAGES": { + "SWIFT_HELPER": "In media hai risposto in {time}. Più veloce della maggior parte delle notifiche.", + "QUICK_RESPONDER": "In media hai risposto in {time}. L’inbox non ha quasi mai aspettato.", + "STEADY_SUPPORT": "In media hai risposto in {time}. Ritmo tranquillo, risposte solide.", + "THOUGHTFUL_ADVISOR": "In media hai risposto in {time}. Il tempo giusto per fare le cose per bene." + } + }, + "THANK_YOU": { + "TITLE": "Congratulazioni per essere sopravvissuto all’inbox del {year}.", + "MESSAGE": "Grazie per la dedizione incredibile con cui hai supportato i clienti durante quest’anno. Il tuo lavoro ha fatto davvero la differenza e siamo felici di averti in questo viaggio. Rendiamo il {nextYear} ancora migliore, insieme!" + }, + "SHARE_MODAL": { + "TITLE": "Condividi il tuo Year in Review", + "PREPARING": "Preparazione dell'immagine...", + "DOWNLOAD": "Scarica", + "SHARE_TITLE": "Il mio Year in Review {year}", + "SHARE_TEXT": "Dai un'occhiata al mio Year in Review {year} con Chatwoot!", + "BRANDING": "Realizzato con Chatwoot" + }, + "BANNER": { + "TITLE": "Il tuo Year in Review {year} è qui", + "BUTTON": "Vedi il tuo impatto" + }, + "NAVIGATION": { + "PREVIOUS": "Precedente", + "NEXT": "Successivo", + "SHARE": "Condividi conversazione" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/advancedFilters.json b/app/javascript/dashboard/i18n/locale/ja/advancedFilters.json new file mode 100644 index 0000000..97a2509 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "会話をフィルターする", + "SUBTITLE": "フィルターを追加して「フィルターを適用」を押すと、チャットを整理できます。", + "EDIT_CUSTOM_FILTER": "フォルダーを編集", + "CUSTOM_VIEWS_SUBTITLE": "フィルターを追加または削除し、フォルダーを更新します。", + "ADD_NEW_FILTER": "フィルターを追加", + "FILTER_DELETE_ERROR": "何も保存できないようです!保存するには、少なくとも1つのフィルターを追加してください。", + "SUBMIT_BUTTON_LABEL": "フィルターを適用", + "UPDATE_BUTTON_LABEL": "フォルダーを更新", + "CANCEL_BUTTON_LABEL": "キャンセル", + "CLEAR_BUTTON_LABEL": "フィルターをクリア", + "FOLDER_LABEL": "フォルダー名", + "FOLDER_QUERY_LABEL": "フォルダーのクエリ", + "EMPTY_VALUE_ERROR": "値は必須です。", + "TOOLTIP_LABEL": "会話をフィルターする", + "QUERY_DROPDOWN_LABELS": { + "AND": "AND", + "OR": "OR" + }, + "INPUT_PLACEHOLDER": "値を入力", + "OPERATOR_LABELS": { + "equal_to": "等しい", + "not_equal_to": "等しくない", + "does_not_contain": "含まない", + "is_present": "存在する", + "is_not_present": "存在しない", + "is_greater_than": "より大きい", + "is_less_than": "より小さい", + "days_before": "x日前", + "starts_with": "で始まる", + "equalTo": "等しい", + "notEqualTo": "等しくない", + "contains": "含む", + "doesNotContain": "含まない", + "isPresent": "存在する", + "isNotPresent": "存在しない", + "isGreaterThan": "より大きい", + "isLessThan": "より小さい", + "daysBefore": "x日前", + "startsWith": "で始まる" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "真", + "FALSE": "偽" + }, + "ATTRIBUTES": { + "STATUS": "ステータス", + "ASSIGNEE_NAME": "担当者名", + "INBOX_NAME": "受信トレイ名", + "TEAM_NAME": "チーム名", + "CONVERSATION_IDENTIFIER": "会話識別子", + "CAMPAIGN_NAME": "キャンペーン名", + "LABELS": "ラベル", + "BROWSER_LANGUAGE": "ブラウザ言語", + "PRIORITY": "優先度", + "COUNTRY_NAME": "国名", + "REFERER_LINK": "参照リンク", + "CUSTOM_ATTRIBUTE_LIST": "リスト", + "CUSTOM_ATTRIBUTE_TEXT": "テキスト", + "CUSTOM_ATTRIBUTE_NUMBER": "数値", + "CUSTOM_ATTRIBUTE_LINK": "リンク", + "CUSTOM_ATTRIBUTE_CHECKBOX": "チェックボックス", + "CREATED_AT": "作成日時", + "LAST_ACTIVITY": "最終活動日時" + }, + "ERRORS": { + "VALUE_REQUIRED": "値は必須です。", + "ATTRIBUTE_KEY_REQUIRED": "属性キーは必須です。", + "FILTER_OPERATOR_REQUIRED": "フィルター演算子は必須です。", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "値は1から998の間でなければなりません。" + }, + "GROUPS": { + "STANDARD_FILTERS": "標準フィルター", + "ADDITIONAL_FILTERS": "追加フィルター", + "CUSTOM_ATTRIBUTES": "カスタム属性" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "このフィルターを保存しますか?", + "LABEL": "このフィルターに名前を付けてください", + "PLACEHOLDER": "後で参照するためにフィルターに名前を付けてください。", + "ERROR_MESSAGE": "名前が必須です。", + "SAVE_BUTTON": "フィルターを保存", + "CANCEL_BUTTON": "キャンセル", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "フォルダーが正常に作成されました。", + "ERROR_MESSAGE": "フォルダーの作成中にエラーが発生しました。" + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "セグメントが正常に作成されました。", + "ERROR_MESSAGE": "セグメントの作成中にエラーが発生しました。" + } + }, + "EDIT": { + "EDIT_BUTTON": "フォルダーを編集" + }, + "DELETE": { + "DELETE_BUTTON": "フィルターを削除", + "MODAL": { + "CONFIRM": { + "TITLE": "削除を確認", + "MESSAGE": "本当にこのフィルターを削除しますか", + "YES": "はい、削除します", + "NO": "いいえ、保持します" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "フォルダーが正常に削除されました。", + "ERROR_MESSAGE": "フォルダーの削除中にエラーが発生しました。" + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "セグメントが正常に削除されました。", + "ERROR_MESSAGE": "セグメントの削除中にエラーが発生しました。" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/agentBots.json b/app/javascript/dashboard/i18n/locale/ja/agentBots.json new file mode 100644 index 0000000..0b50ce7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "ボット", + "LOADING_EDITOR": "エディターを読み込んでいます...", + "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try. You can manage your bots from this page or create new ones using the 'Add Bot' button.", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "System bot", + "GLOBAL_BOT_BADGE": "システム", + "AVATAR": { + "SUCCESS_DELETE": "Bot avatar deleted successfully", + "ERROR_DELETE": "Error deleting bot avatar, please try again" + }, + "BOT_CONFIGURATION": { + "TITLE": "エージェントボットを選択", + "DESC": "エージェントボットを受信トレイに割り当てます。初期の会話を処理し、必要に応じてライブエージェントに転送することができます。", + "SUBMIT": "更新", + "DISCONNECT": "ボットを切断", + "SUCCESS_MESSAGE": "エージェントボットが正常に更新されました。", + "DISCONNECTED_SUCCESS_MESSAGE": "エージェントボットが正常に切断されました。", + "ERROR_MESSAGE": "エージェントボットを更新できませんでした。再試行してください。", + "DISCONNECTED_ERROR_MESSAGE": "エージェントボットを切断できませんでした。再試行してください。", + "SELECT_PLACEHOLDER": "ボットを選択" + }, + "ADD": { + "TITLE": "Add Bot", + "CANCEL_BUTTON_TEXT": "キャンセル", + "API": { + "SUCCESS_MESSAGE": "ボットが正常に追加されました。", + "ERROR_MESSAGE": "ボットを追加できませんでした。後でもう一度お試しください。" + } + }, + "LIST": { + "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.", + "LOADING": "ボットを取得中...", + "TABLE_HEADER": { + "DETAILS": "Bot Details", + "URL": "Webhook URL" + } + }, + "DELETE": { + "BUTTON_TEXT": "削除", + "TITLE": "ボットを削除", + "CONFIRM": { + "TITLE": "削除の確認", + "MESSAGE": "Are you sure you want to delete {name}?", + "YES": "削除する", + "NO": "いいえ" + }, + "API": { + "SUCCESS_MESSAGE": "ボットが正常に削除されました。", + "ERROR_MESSAGE": "ボットを削除できませんでした。再試行してください。" + } + }, + "EDIT": { + "BUTTON_TEXT": "編集", + "TITLE": "ボットを編集", + "API": { + "SUCCESS_MESSAGE": "ボットが正常に更新されました。", + "ERROR_MESSAGE": "ボットを更新できませんでした。再試行してください。" + } + }, + "ACCESS_TOKEN": { + "TITLE": "アクセストークン", + "DESCRIPTION": "Copy the access token and save it securely", + "COPY_SUCCESSFUL": "Access token copied to clipboard", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "ボット名", + "PLACEHOLDER": "Enter bot name", + "REQUIRED": "Bot name is required" + }, + "DESCRIPTION": { + "LABEL": "説明", + "PLACEHOLDER": "このボットは何をしますか?" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "Webhook URL is required" + }, + "ERRORS": { + "NAME": "Bot name is required", + "URL": "Webhook URL is required", + "VALID_URL": "Please enter a valid URL starting with http:// or https://" + }, + "CANCEL": "キャンセル", + "CREATE": "Create Bot", + "UPDATE": "Update Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them." + }, + "TYPES": { + "WEBHOOK": "Webhookボット" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/agentMgmt.json b/app/javascript/dashboard/i18n/locale/ja/agentMgmt.json new file mode 100644 index 0000000..03440c5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "担当者", + "HEADER_BTN_TXT": "担当者を追加", + "LOADING": "担当者リストを設定中...", + "DESCRIPTION": "担当者は、カスタマーサポートチームのメンバーで、ユーザーからのメッセージを閲覧して返信することができます。以下のリストには、アカウントに登録されている全ての担当者が表示されます。", + "LEARN_MORE": "ユーザーのロールについて学ぶ", + "AGENT_TYPES": { + "ADMINISTRATOR": "管理者", + "AGENT": "担当者" + }, + "LIST": { + "404": "このアカウントに関連付けられている担当者はありません。", + "TITLE": "チームの担当者を管理する", + "DESC": "チームに担当者を追加または除外することができます。", + "NAME": "名前", + "EMAIL": "Eメール", + "STATUS": "状況", + "ACTIONS": "操作", + "VERIFIED": "確認済み", + "VERIFICATION_PENDING": "確認保留中", + "AVAILABLE_CUSTOM_ROLE": "利用可能なカスタムロール権限" + }, + "ADD": { + "TITLE": "チームに担当者を追加", + "DESC": "受信トレイのサポートができる人を追加できます。", + "CANCEL_BUTTON_TEXT": "キャンセル", + "FORM": { + "NAME": { + "LABEL": "担当者名", + "PLACEHOLDER": "担当者の名前を入力してください" + }, + "AGENT_TYPE": { + "LABEL": "ロール", + "PLACEHOLDER": "ロールを選択してください", + "ERROR": "ロールは必須です" + }, + "EMAIL": { + "LABEL": "Eメールアドレス", + "PLACEHOLDER": "担当者のEメールアドレスを入力してください" + }, + "SUBMIT": "担当者を追加" + }, + "API": { + "SUCCESS_MESSAGE": "担当者の追加が完了しました", + "EXIST_MESSAGE": "入力された担当者のEメールアドレスは既に使用されています。別のメールアドレスをお試しください。", + "ERROR_MESSAGE": "サーバーに接続できませんでした。後でもう一度お試しください。" + } + }, + "DELETE": { + "BUTTON_TEXT": "削除", + "API": { + "SUCCESS_MESSAGE": "担当者の削除が完了しました", + "ERROR_MESSAGE": "サーバーに接続できませんでした。後でもう一度お試しください。" + }, + "CONFIRM": { + "TITLE": "削除の確認", + "MESSAGE": "削除してもよろしいですか?", + "YES": "削除する", + "NO": "いいえ" + } + }, + "EDIT": { + "TITLE": "担当者の編集", + "FORM": { + "NAME": { + "LABEL": "担当者名", + "PLACEHOLDER": "担当者の名前を入力してください" + }, + "AGENT_TYPE": { + "LABEL": "ロール", + "PLACEHOLDER": "ロールを選択してください", + "ERROR": "ロールは必須です" + }, + "EMAIL": { + "LABEL": "Eメールアドレス", + "PLACEHOLDER": "担当者のEメールアドレスを入力してください" + }, + "AGENT_AVAILABILITY": { + "LABEL": "利用可能状況", + "PLACEHOLDER": "利用可能状況を選択してください", + "ERROR": "利用可能状況は必須です" + }, + "SUBMIT": "担当者の編集" + }, + "BUTTON_TEXT": "編集", + "CANCEL_BUTTON_TEXT": "キャンセル", + "API": { + "SUCCESS_MESSAGE": "担当者の情報を更新しました", + "ERROR_MESSAGE": "Woot Serverに接続できませんでした。後でもう一度お試しください。" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "パスワードをリセット", + "ADMIN_SUCCESS_MESSAGE": "担当者にパスワードをリセットする手順を記載したメールを送信しました", + "SUCCESS_MESSAGE": "担当者のパスワードは正常にリセットされました", + "ERROR_MESSAGE": "Woot Serverに接続できませんでした。後でもう一度お試しください。" + } + }, + "SEARCH": { + "NO_RESULTS": "該当する結果が見つかりませんでした。" + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "該当なし", + "TITLE": { + "AGENT": "担当者を選択", + "TEAM": "チームを選択" + }, + "LIST": { + "NONE": "なし" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "担当者が見つかりません", + "TEAM": "チームが見つかりません" + }, + "PLACEHOLDER": { + "AGENT": "担当者を検索", + "TEAM": "チームを検索", + "INPUT": "担当者を検索" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/ja/attributesMgmt.json new file mode 100644 index 0000000..79698ca --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "カスタム属性", + "HEADER_BTN_TXT": "カスタム属性を追加", + "LOADING": "カスタム属性を取得中", + "DESCRIPTION": "カスタム属性は、連絡先や会話に関する追加の詳細(例:サブスクリプションプランや初回購入日など)を記録します。必要な情報をキャプチャするために、テキスト、リスト、数値など、さまざまなタイプのカスタム属性を追加できます。", + "LEARN_MORE": "カスタム属性について詳しく学ぶ", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "会話", + "CONTACT": "連絡先" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "テキスト", + "NUMBER": "数値", + "LINK": "リンク", + "DATE": "Date", + "LIST": "リスト", + "CHECKBOX": "チェックボックス" + }, + "ADD": { + "TITLE": "カスタム属性を追加", + "SUBMIT": "作成", + "CANCEL_BUTTON_TEXT": "キャンセル", + "FORM": { + "NAME": { + "LABEL": "表示名", + "PLACEHOLDER": "カスタム属性の表示名を入力してください", + "ERROR": "名前が必須です" + }, + "DESC": { + "LABEL": "説明", + "PLACEHOLDER": "カスタム属性の説明を入力してください", + "ERROR": "説明は必須です" + }, + "MODEL": { + "LABEL": "適用先", + "PLACEHOLDER": "選択してください", + "ERROR": "モデルは必須です" + }, + "TYPE": { + "LABEL": "タイプ", + "PLACEHOLDER": "タイプを選択してください", + "ERROR": "タイプは必須です", + "LIST": { + "LABEL": "リストの値", + "PLACEHOLDER": "値を入力してEnterキーを押してください", + "ERROR": "少なくとも1つの値が必要です" + } + }, + "KEY": { + "LABEL": "キー", + "PLACEHOLDER": "カスタム属性のキーを入力してください", + "ERROR": "キーは必須です", + "IN_VALID": "無効なキー" + }, + "REGEX_PATTERN": { + "LABEL": "正規表現パターン", + "PLACEHOLDER": "カスタム属性の正規表現パターンを入力してください(オプション)" + }, + "REGEX_CUE": { + "LABEL": "正規表現のヒント", + "PLACEHOLDER": "正規表現パターンのヒントを入力してください(オプション)" + }, + "ENABLE_REGEX": { + "LABEL": "正規表現の検証を有効にする" + } + }, + "API": { + "SUCCESS_MESSAGE": "カスタム属性が正常に追加されました!", + "ERROR_MESSAGE": "カスタム属性を作成できませんでした。後でもう一度お試しください。" + } + }, + "DELETE": { + "BUTTON_TEXT": "削除", + "API": { + "SUCCESS_MESSAGE": "カスタム属性が正常に削除されました。", + "ERROR_MESSAGE": "カスタム属性を削除できませんでした。再試行してください。" + }, + "CONFIRM": { + "TITLE": "{attributeName} を削除してもよろしいですか?", + "PLACE_HOLDER": "確認するために {attributeName} を入力してください", + "MESSAGE": "削除するとカスタム属性が削除されます", + "YES": "削除", + "NO": "キャンセル" + } + }, + "EDIT": { + "TITLE": "カスタム属性を編集", + "UPDATE_BUTTON_TEXT": "更新", + "TYPE": { + "LIST": { + "LABEL": "リストの値", + "PLACEHOLDER": "値を入力してEnterキーを押してください" + } + }, + "API": { + "SUCCESS_MESSAGE": "カスタム属性が正常に更新されました", + "ERROR_MESSAGE": "カスタム属性の更新中にエラーが発生しました。再試行してください" + } + }, + "TABS": { + "HEADER": "カスタム属性", + "CONVERSATION": "会話", + "CONTACT": "連絡先" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "名前", + "DESCRIPTION": "説明", + "TYPE": "タイプ", + "KEY": "キー" + }, + "BUTTONS": { + "EDIT": "編集", + "DELETE": "削除" + }, + "EMPTY_RESULT": { + "404": "作成されたカスタム属性はありません", + "NOT_FOUND": "設定されたカスタム属性はありません" + }, + "REGEX_PATTERN": { + "LABEL": "正規表現パターン", + "PLACEHOLDER": "カスタム属性の正規表現パターンを入力してください(オプション)" + }, + "REGEX_CUE": { + "LABEL": "正規表現のヒント", + "PLACEHOLDER": "正規表現パターンのヒントを入力してください(オプション)" + }, + "ENABLE_REGEX": { + "LABEL": "正規表現の検証を有効にする" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/auditLogs.json b/app/javascript/dashboard/i18n/locale/ja/auditLogs.json new file mode 100644 index 0000000..60ee357 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "監査ログ", + "HEADER_BTN_TXT": "監査ログを追加", + "LOADING": "監査ログを取得中", + "DESCRIPTION": "監査ログはアカウント内の活動の記録を保持し、アカウント、チーム、またはサービスを追跡して監査することを可能にします。", + "LEARN_MORE": "監査ログについて学ぶ", + "SEARCH_404": "検索内容(クエリ)に一致する項目はありませんでした", + "SIDEBAR_TXT": "監査ログ
監査ログは、Chatwootシステム内でのイベントやアクションの履歴を示します。
", + "LIST": { + "404": "このアカウントに利用可能な監査ログはありません。", + "TITLE": "監査ログを管理する", + "DESC": "監査ログは、Chatwootシステム内でのイベントやアクションの履歴を示します。", + "TABLE_HEADER": { + "ACTIVITY": "ユーザー", + "TIME": "アクション", + "IP_ADDRESS": "IPアドレス" + } + }, + "API": { + "SUCCESS_MESSAGE": "監査ログが正常に取得されました", + "ERROR_MESSAGE": "Wootサーバーに接続できませんでした。後でもう一度お試しください。" + }, + "DEFAULT_USER": "システム", + "AUTOMATION_RULE": { + "ADD": "{agentName} が新しい自動化ルール (#{id}) を作成しました", + "EDIT": "{agentName} が自動化ルール (#{id}) を更新しました", + "DELETE": "{agentName} が自動化ルール (#{id}) を削除しました" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} が {invitee} をアカウントに {role} として招待しました", + "EDIT": { + "SELF": "{agentName} が自分の {attributes} を {values} に変更しました", + "OTHER": "{agentName} が {user} の {attributes} を {values} に変更しました", + "DELETED": "{agentName} が削除されたユーザーの {attributes} を {values} に変更しました" + } + }, + "INBOX": { + "ADD": "{agentName} が新しい受信トレイ (#{id}) を作成しました", + "EDIT": "{agentName} が受信トレイ (#{id}) を更新しました", + "DELETE": "{agentName} が受信トレイ (#{id}) を削除しました" + }, + "WEBHOOK": { + "ADD": "{agentName} が新しいWebhook (#{id}) を作成しました", + "EDIT": "{agentName} がWebhook (#{id}) を更新しました", + "DELETE": "{agentName} がWebhook (#{id}) を削除しました" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} がサインインしました", + "SIGN_OUT": "{agentName} がサインアウトしました" + }, + "TEAM": { + "ADD": "{agentName} が新しいチーム (#{id}) を作成しました", + "EDIT": "{agentName} がチーム (#{id}) を更新しました", + "DELETE": "{agentName} がチーム (#{id}) を削除しました" + }, + "MACRO": { + "ADD": "{agentName} が新しいマクロ (#{id}) を作成しました", + "EDIT": "{agentName} がマクロ (#{id}) を更新しました", + "DELETE": "{agentName} がマクロ (#{id}) を削除しました" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} が {user} を受信トレイ (#{inbox_id}) に追加しました", + "REMOVE": "{agentName} が {user} を受信トレイ (#{inbox_id}) から削除しました" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} が {user} をチーム (#{team_id}) に追加しました", + "REMOVE": "{agentName} が {user} をチーム (#{team_id}) から削除しました" + }, + "ACCOUNT": { + "EDIT": "{agentName} がアカウント設定 (#{id}) を更新しました" + }, + "CONVERSATION": { + "DELETE": "{agentName} deleted conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/automation.json b/app/javascript/dashboard/i18n/locale/ja/automation.json new file mode 100644 index 0000000..e293da3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "自動化", + "DESCRIPTION": "自動化は、ラベルの追加や会話を最適な担当者に割り当てるといった手動で行う必要のある既存のプロセスを置き換え、効率化することができます。これにより、チームは強みを発揮しつつ、ルーチンタスクに費やす時間を削減できます。", + "LEARN_MORE": "自動化について学ぶ", + "HEADER_BTN_TXT": "自動化ルールを追加", + "LOADING": "自動化ルールを取得中", + "ADD": { + "TITLE": "自動化ルールを追加", + "SUBMIT": "作成", + "CANCEL_BUTTON_TEXT": "キャンセル", + "FORM": { + "NAME": { + "LABEL": "ルール名", + "PLACEHOLDER": "ルール名を入力してください", + "ERROR": "名前が必須です" + }, + "DESC": { + "LABEL": "説明", + "PLACEHOLDER": "ルールの説明を入力してください", + "ERROR": "説明は必須です" + }, + "EVENT": { + "LABEL": "イベント", + "PLACEHOLDER": "選択してください", + "ERROR": "イベントは必須です" + }, + "CONDITIONS": { + "LABEL": "条件" + }, + "ACTIONS": { + "LABEL": "アクション" + } + }, + "CONDITION_BUTTON_LABEL": "条件を追加", + "ACTION_BUTTON_LABEL": "アクションを追加", + "API": { + "SUCCESS_MESSAGE": "自動化ルールが正常に追加されました", + "ERROR_MESSAGE": "自動化ルールを作成できませんでした。後でもう一度お試しください" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "名前", + "DESCRIPTION": "説明", + "ACTIVE": "有効", + "CREATED_ON": "作成日" + }, + "404": "自動化ルールが見つかりません" + }, + "DELETE": { + "TITLE": "自動化ルールを削除", + "SUBMIT": "削除", + "CANCEL_BUTTON_TEXT": "キャンセル", + "CONFIRM": { + "TITLE": "削除の確認", + "MESSAGE": "削除してもよろしいですか?", + "YES": "削除する", + "NO": "いいえ" + }, + "API": { + "SUCCESS_MESSAGE": "自動化ルールが正常に削除されました", + "ERROR_MESSAGE": "自動化ルールを削除できませんでした。後でもう一度お試しください" + } + }, + "EDIT": { + "TITLE": "自動化ルールを編集", + "SUBMIT": "更新", + "CANCEL_BUTTON_TEXT": "キャンセル", + "API": { + "SUCCESS_MESSAGE": "自動化ルールが正常に更新されました", + "ERROR_MESSAGE": "自動化ルールを更新できませんでした。後でもう一度お試しください" + } + }, + "CLONE": { + "TOOLTIP": "複製", + "API": { + "SUCCESS_MESSAGE": "自動化ルールが正常に複製されました", + "ERROR_MESSAGE": "自動化ルールを複製できませんでした。後でもう一度お試しください" + } + }, + "FORM": { + "EDIT": "編集", + "CREATE": "作成", + "DELETE": "削除", + "CANCEL": "キャンセル", + "RESET_MESSAGE": "イベントタイプを変更すると、以下に追加された条件やアクションがリセットされます" + }, + "CONDITION": { + "DELETE_MESSAGE": "保存するには少なくとも1つの条件が必要です", + "CONTACT_CUSTOM_ATTR_LABEL": "連絡先カスタム属性", + "CONVERSATION_CUSTOM_ATTR_LABEL": "会話カスタム属性" + }, + "ACTION": { + "DELETE_MESSAGE": "保存するには少なくとも1つのアクションが必要です", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "メッセージをここに入力してください", + "TEAM_DROPDOWN_PLACEHOLDER": "チームを選択してください", + "EMAIL_INPUT_PLACEHOLDER": "メールアドレスを入力してください", + "URL_INPUT_PLACEHOLDER": "URLを入力してください" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "自動化ルールを有効化", + "DEACTIVATION_TITLE": "自動化ルールを無効化", + "ACTIVATION_DESCRIPTION": "この操作により、自動化ルール『{automationName}』が有効になります。本当に実行しますか?", + "DEACTIVATION_DESCRIPTION": "この操作により、自動化ルール『{automationName}』が無効になります。本当に実行しますか?", + "ACTIVATION_SUCCESFUL": "自動化ルールが正常に有効化されました", + "DEACTIVATION_SUCCESFUL": "自動化ルールが正常に無効化されました", + "ACTIVATION_ERROR": "自動化ルールを有効化できませんでした。後でもう一度お試しください", + "DEACTIVATION_ERROR": "自動化ルールを無効化できませんでした。後でもう一度お試しください", + "CONFIRMATION_LABEL": "はい", + "CANCEL_LABEL": "いいえ" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "添付ファイルをアップロードできませんでした。後でもう一度お試しください", + "LABEL_IDLE": "添付ファイルをアップロード", + "LABEL_UPLOADING": "アップロード中...", + "LABEL_UPLOADED": "正常にアップロードされました", + "LABEL_UPLOAD_FAILED": "アップロードに失敗しました" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "属性キーが必須です", + "FILTER_OPERATOR_REQUIRED": "フィルター演算子が必須です", + "VALUE_REQUIRED": "値は必須です", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "値は1から998の間である必要があります", + "ACTION_PARAMETERS_REQUIRED": "アクションパラメータが必須です", + "ATLEAST_ONE_CONDITION_REQUIRED": "少なくとも1つの条件が必要です", + "ATLEAST_ONE_ACTION_REQUIRED": "少なくとも1つのアクションが必要です" + }, + "NONE_OPTION": "なし", + "EVENTS": { + "CONVERSATION_CREATED": "会話が作成されました", + "CONVERSATION_UPDATED": "会話が更新されました", + "MESSAGE_CREATED": "Message Created", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Conversation Opened" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assign to Agent", + "ASSIGN_TEAM": "Assign a Team", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "SEND_EMAIL_TO_TEAM": "Send an Email to Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "会話をミュート", + "SNOOZE_CONVERSATION": "会話をスヌーズ", + "RESOLVE_CONVERSATION": "会話を解決", + "SEND_WEBHOOK_EVENT": "Send Webhook Event", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "CHANGE_PRIORITY": "優先度を変更", + "ADD_SLA": "SLAを追加", + "OPEN_CONVERSATION": "会話を開く" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "なし", + "LOW": "低", + "MEDIUM": "中", + "HIGH": "高", + "URGENT": "緊急" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Message Type", + "MESSAGE_CONTAINS": "Message Contains", + "EMAIL": "Eメール", + "INBOX": "受信トレイ", + "CONVERSATION_LANGUAGE": "Conversation Language", + "PHONE_NUMBER": "電話番号", + "STATUS": "状況", + "BROWSER_LANGUAGE": "ブラウザの言語", + "MAIL_SUBJECT": "Email Subject", + "COUNTRY_NAME": "国", + "REFERER_LINK": "Referrer Link", + "ASSIGNEE_NAME": "担当者", + "TEAM_NAME": "チーム", + "PRIORITY": "優先度", + "LABELS": "ラベル" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/bulkActions.json b/app/javascript/dashboard/i18n/locale/ja/bulkActions.json new file mode 100644 index 0000000..71aa033 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} 件の会話が選択されました", + "AGENT_SELECT_LABEL": "担当者を選択", + "ASSIGN_CONFIRMATION_LABEL": "{conversationCount} 件の{conversationLabel}を割り当てますか?", + "UNASSIGN_CONFIRMATION_LABEL": "{conversationCount} 件の{conversationLabel}の割り当てを解除しますか?", + "GO_BACK_LABEL": "戻る", + "ASSIGN_LABEL": "割り当て", + "YES": "はい", + "SEARCH_INPUT_PLACEHOLDER": "検索", + "ASSIGN_AGENT_TOOLTIP": "担当者を割り当てる", + "ASSIGN_TEAM_TOOLTIP": "チームを割り当てる", + "ASSIGN_SUCCESFUL": "会話が正常に割り当てられました。", + "ASSIGN_FAILED": "会話の割り当てに失敗しました。再試行してください。", + "RESOLVE_SUCCESFUL": "会話が正常に解決されました。", + "RESOLVE_FAILED": "会話の解決に失敗しました。再試行してください。", + "ALL_CONVERSATIONS_SELECTED_ALERT": "このページに表示されている会話のみが選択されています。", + "AGENT_LIST_LOADING": "担当者を読み込み中", + "UPDATE": { + "CHANGE_STATUS": "ステータスを変更", + "SNOOZE_UNTIL": "スヌーズ", + "UPDATE_SUCCESFUL": "会話のステータスが正常に更新されました。", + "UPDATE_FAILED": "会話の更新に失敗しました。再試行してください。" + }, + "LABELS": { + "ASSIGN_LABELS": "ラベルを割り当てる", + "NO_LABELS_FOUND": "ラベルが見つかりません", + "ASSIGN_SELECTED_LABELS": "選択したラベルを割り当てる", + "ASSIGN_SUCCESFUL": "ラベルが正常に割り当てられました。", + "ASSIGN_FAILED": "ラベルの割り当てに失敗しました。再試行してください。" + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "チームを選択", + "NONE": "該当なし", + "NO_TEAMS_AVAILABLE": "このアカウントにはまだチームが追加されていません。", + "ASSIGN_SELECTED_TEAMS": "選択したチームを割り当てる", + "ASSIGN_SUCCESFUL": "チームが正常に割り当てられました。", + "ASSIGN_FAILED": "チームの割り当てに失敗しました。再試行してください。" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/campaign.json b/app/javascript/dashboard/i18n/locale/ja/campaign.json new file mode 100644 index 0000000..608e666 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "ライブチャットキャンペーン", + "NEW_CAMPAIGN": "キャンペーンを作成", + "CARD": { + "STATUS": { + "ENABLED": "有効です", + "DISABLED": "無効です" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "送信者", + "BOT": "ボット", + "FROM": "差出人:", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "利用可能なライブチャットキャンペーンがありません", + "SUBTITLE": "積極的なメッセージでお客様とつながりましょう。「キャンペーンを作成」をクリックして開始してください。" + }, + "CREATE": { + "TITLE": "ライブチャットキャンペーンを作成", + "CANCEL_BUTTON_TEXT": "キャンセル", + "CREATE_BUTTON_TEXT": "作成", + "FORM": { + "TITLE": { + "LABEL": "タイトル", + "PLACEHOLDER": "キャンペーンのタイトルを入力してください", + "ERROR": "タイトルは必須です" + }, + "MESSAGE": { + "LABEL": "メッセージ", + "PLACEHOLDER": "キャンペーンのメッセージを入力してください", + "ERROR": "メッセージは必須です" + }, + "INBOX": { + "LABEL": "受信トレイを選択", + "PLACEHOLDER": "受信トレイを選択", + "ERROR": "受信トレイは必須です" + }, + "SENT_BY": { + "LABEL": "送信者", + "PLACEHOLDER": "送信者を選択してください", + "ERROR": "送信者は必須です" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "URLを入力してください", + "ERROR": "有効な URL を入力してください" + }, + "TIME_ON_PAGE": { + "LABEL": "ページ滞在時間(秒)", + "PLACEHOLDER": "時間を入力してください", + "ERROR": "ページ滞在時間は必須です" + }, + "OTHER_PREFERENCES": { + "TITLE": "その他の設定", + "ENABLED": "キャンペーンを有効化", + "TRIGGER_ONLY_BUSINESS_HOURS": "営業時間中のみトリガー" + }, + "BUTTONS": { + "CREATE": "作成", + "CANCEL": "キャンセル" + }, + "API": { + "SUCCESS_MESSAGE": "ライブチャットキャンペーンが正常に作成されました", + "ERROR_MESSAGE": "エラーが発生しました。もう一度お試しください。" + } + } + }, + "EDIT": { + "TITLE": "ライブチャットキャンペーンを編集", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "ライブチャットキャンペーンが正常に更新されました", + "ERROR_MESSAGE": "エラーが発生しました。もう一度お試しください。" + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMSキャンペーン", + "NEW_CAMPAIGN": "キャンペーンを作成", + "EMPTY_STATE": { + "TITLE": "利用可能なSMSキャンペーンがありません", + "SUBTITLE": "SMSキャンペーンを開始してお客様に直接連絡しましょう。オファーを送信したり、お知らせを簡単に行うことができます。「キャンペーンを作成」をクリックして開始してください。" + }, + "CARD": { + "STATUS": { + "COMPLETED": "完了", + "SCHEDULED": "スケジュール済み" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "送信元", + "ON": "送信日" + } + }, + "CREATE": { + "TITLE": "SMSキャンペーンを作成", + "CANCEL_BUTTON_TEXT": "キャンセル", + "CREATE_BUTTON_TEXT": "作成", + "FORM": { + "TITLE": { + "LABEL": "タイトル", + "PLACEHOLDER": "キャンペーンのタイトルを入力してください", + "ERROR": "タイトルは必須です" + }, + "MESSAGE": { + "LABEL": "メッセージ", + "PLACEHOLDER": "キャンペーンのメッセージを入力してください", + "ERROR": "メッセージは必須です" + }, + "INBOX": { + "LABEL": "受信トレイを選択", + "PLACEHOLDER": "受信トレイを選択", + "ERROR": "受信トレイは必須です" + }, + "AUDIENCE": { + "LABEL": "対象者", + "PLACEHOLDER": "顧客ラベルを選択", + "ERROR": "対象者は必須です" + }, + "SCHEDULED_AT": { + "LABEL": "スケジュール時間", + "PLACEHOLDER": "時間を選択してください", + "ERROR": "スケジュール時間は必須です" + }, + "BUTTONS": { + "CREATE": "作成", + "CANCEL": "キャンセル" + }, + "API": { + "SUCCESS_MESSAGE": "SMSキャンペーンが正常に作成されました", + "ERROR_MESSAGE": "エラーが発生しました。もう一度お試しください。" + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp campaigns", + "NEW_CAMPAIGN": "キャンペーンを作成", + "EMPTY_STATE": { + "TITLE": "No WhatsApp campaigns are available", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "完了", + "SCHEDULED": "スケジュール済み" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "送信元", + "ON": "送信日" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "キャンセル", + "CREATE_BUTTON_TEXT": "作成", + "FORM": { + "TITLE": { + "LABEL": "タイトル", + "PLACEHOLDER": "キャンペーンのタイトルを入力してください", + "ERROR": "タイトルは必須です" + }, + "INBOX": { + "LABEL": "受信トレイを選択", + "PLACEHOLDER": "受信トレイを選択", + "ERROR": "受信トレイは必須です" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "{templateName} を処理中", + "LANGUAGE": "言語", + "CATEGORY": "カテゴリ", + "VARIABLES_LABEL": "変数", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "対象者", + "PLACEHOLDER": "顧客ラベルを選択", + "ERROR": "対象者は必須です" + }, + "SCHEDULED_AT": { + "LABEL": "スケジュール時間", + "PLACEHOLDER": "時間を選択してください", + "ERROR": "スケジュール時間は必須です" + }, + "BUTTONS": { + "CREATE": "作成", + "CANCEL": "キャンセル" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "エラーが発生しました。もう一度お試しください。" + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "削除の確認", + "DESCRIPTION": "削除操作は永久的で、元に戻すことはできません。", + "CONFIRM": "削除", + "API": { + "SUCCESS_MESSAGE": "キャンペーンが正常に削除されました", + "ERROR_MESSAGE": "エラーが発生しました。もう一度お試しください。" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/ja/cannedMgmt.json new file mode 100644 index 0000000..426c780 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "定型文", + "LEARN_MORE": "定型文について詳しく学ぶ", + "DESCRIPTION": "定型文は、会話に迅速に返信するための事前に書かれた返信テンプレートです。担当者は '/' 文字の後にショートコードを入力することで、会話中に定型文を挿入できます。", + "HEADER_BTN_TXT": "定型文を追加", + "LOADING": "定型文を取得中...", + "SEARCH_404": "検索内容(クエリ)に一致する項目はありませんでした。", + "LIST": { + "404": "このアカウントには、利用可能な定型文の回答はありません。", + "TITLE": "定型文回答を管理する", + "DESC": "定型文は事前に定義された返信テンプレートで、会話に迅速に返信を送信する際に使用されます。", + "TABLE_HEADER": { + "SHORT_CODE": "ショートコード", + "CONTENT": "内容", + "ACTIONS": "操作" + } + }, + "ADD": { + "TITLE": "定型文を追加", + "DESC": "定型文は事前に定義された返信テンプレートで、会話に迅速に返信を送信する際に使用されます。", + "CANCEL_BUTTON_TEXT": "キャンセル", + "FORM": { + "SHORT_CODE": { + "LABEL": "ショートコード", + "PLACEHOLDER": "ショートコードを入力してください。", + "ERROR": "ショートコードは必須です。" + }, + "CONTENT": { + "LABEL": "メッセージ", + "PLACEHOLDER": "後でテンプレートとして使用するメッセージを入力してください。", + "ERROR": "メッセージは必須です。" + }, + "SUBMIT": "送信" + }, + "API": { + "SUCCESS_MESSAGE": "定型文が正常に追加されました。", + "ERROR_MESSAGE": "Woot Serverに接続できませんでした。後でもう一度お試しください。" + } + }, + "EDIT": { + "TITLE": "定型文を編集", + "CANCEL_BUTTON_TEXT": "キャンセル", + "FORM": { + "SHORT_CODE": { + "LABEL": "ショートコード", + "PLACEHOLDER": "ショートコードを入力してください。", + "ERROR": "ショートコードは必須です。" + }, + "CONTENT": { + "LABEL": "メッセージ", + "PLACEHOLDER": "後でテンプレートとして使用するメッセージを入力してください。", + "ERROR": "メッセージは必須です。" + }, + "SUBMIT": "送信" + }, + "BUTTON_TEXT": "編集", + "API": { + "SUCCESS_MESSAGE": "定型文が正常に更新されました。", + "ERROR_MESSAGE": "Woot Serverに接続できませんでした。後でもう一度お試しください。" + } + }, + "DELETE": { + "BUTTON_TEXT": "削除", + "API": { + "SUCCESS_MESSAGE": "定型文が正常に削除されました。", + "ERROR_MESSAGE": "Woot Serverに接続できませんでした。後でもう一度お試しください。" + }, + "CONFIRM": { + "TITLE": "削除の確認", + "MESSAGE": "削除してもよろしいですか?", + "YES": "はい、削除します", + "NO": "いいえ、保持します" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/chatlist.json b/app/javascript/dashboard/i18n/locale/ja/chatlist.json new file mode 100644 index 0000000..47205da --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "会話のデータを取得しています", + "LOAD_MORE_CONVERSATIONS": "会話のデータをさらに読み込む", + "EOF": "すべての会話データが読み込まれました🎉", + "LIST": { + "404": "このグループには有効な会話データがありません" + }, + "FAILED_TO_SEND": "送信に失敗しました", + "TAB_HEADING": "会話データ", + "MENTION_HEADING": "メンション", + "UNATTENDED_HEADING": "未対応", + "SEARCH": { + "INPUT": "人物、チャット、保存された返信を検索する" + }, + "FILTER_ALL": "すべて", + "ASSIGNEE_TYPE_TABS": { + "me": "自分", + "unassigned": "未割当", + "all": "すべて" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "オープン" + }, + "resolved": { + "TEXT": "解決済み" + }, + "pending": { + "TEXT": "保留中" + }, + "snoozed": { + "TEXT": "スヌーズ中" + }, + "all": { + "TEXT": "すべて" + } + }, + "VIEW_FILTER": "表示", + "SORT_TOOLTIP_LABEL": "会話を並び替える", + "CHAT_SORT": { + "STATUS": "ステータス", + "ORDER_BY": "並び順" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "作成", + "OLDEST": "作成日時:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "最終アクティビティ:", + "ACTIVE": "最終アクティビティ" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "最終アクティビティ: 古い順" + }, + "last_activity_at_desc": { + "TEXT": "最終アクティビティ: 新しい順" + }, + "created_at_desc": { + "TEXT": "作成日時: 新しい順" + }, + "created_at_asc": { + "TEXT": "作成日時: 古い順" + }, + "priority_desc": { + "TEXT": "優先度: 高い順" + }, + "priority_asc": { + "TEXT": "優先度: 低い順" + }, + "waiting_since_asc": { + "TEXT": "保留時間: 長い順" + }, + "waiting_since_desc": { + "TEXT": "保留時間: 短い順" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "画像メッセージ" + }, + "audio": { + "CONTENT": "音声メッセージ" + }, + "video": { + "CONTENT": "ビデオメッセージ" + }, + "file": { + "CONTENT": "添付ファイル" + }, + "location": { + "CONTENT": "場所" + }, + "ig_reel": { + "CONTENT": "Instagram リール" + }, + "fallback": { + "CONTENT": "URLを共有しています" + }, + "contact": { + "CONTENT": "共有連絡先" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "会話の並び替え", + "DROPDOWN_TITLE": "並び替え", + "ITEMS": { + "LATEST": { + "NAME": "最終アクティビティ日時", + "LABEL": "最終アクティビティ" + }, + "CREATED_AT": { + "NAME": "作成日時", + "LABEL": "作成日時" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "最終ユーザーメッセージ日時", + "LABEL": "最終メッセージ" + } + } + }, + "RECEIVED_VIA_EMAIL": "メールで受信しました", + "VIEW_TWEET_IN_TWITTER": "ツイートをTwitterで見る", + "REPLY_TO_TWEET": "このつぶやきに返信", + "LINK_TO_STORY": "Instagramストーリーに移動", + "SENT": "送信成功", + "READ": "既読", + "DELIVERED": "配信済み", + "NO_MESSAGES": "メッセージなし", + "NO_CONTENT": "コンテンツが利用できません", + "HIDE_QUOTED_TEXT": "引用テキストを非表示", + "SHOW_QUOTED_TEXT": "引用テキストを表示", + "MESSAGE_READ": "既読", + "SENDING": "送信中" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/companies.json b/app/javascript/dashboard/i18n/locale/ja/companies.json new file mode 100644 index 0000000..591e5fe --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "並び替え", + "OPTIONS": { + "NAME": "名前", + "DOMAIN": "ドメイン", + "CREATED_AT": "作成日時", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "昇順", + "DESCENDING": "降順" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/components.json b/app/javascript/dashboard/i18n/locale/ja/components.json new file mode 100644 index 0000000..f91e4f5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "{startItem} - {endItem} 件を表示中(全 {totalItems} 件)", + "CURRENT_PAGE_INFO": "{currentPage} ページ中 {totalPages} ページ" + }, + "COMBOBOX": { + "PLACEHOLDER": "オプションを選択...", + "EMPTY_SEARCH_RESULTS": "`{searchTerm}` に該当する項目が見つかりませんでした。", + "EMPTY_STATE": "該当結果が見つかりませんでした。", + "SEARCH_PLACEHOLDER": "検索...", + "MORE": "+{count} 件をさらに表示" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "検索...", + "EMPTY_STATE": "該当結果が見つかりませんでした。", + "SEARCHING": "検索中..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "キャンセル", + "CONFIRM": "確認" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "国を検索", + "ERROR": "電話番号は空白または E.164 形式である必要があります。", + "DIAL_CODE_ERROR": "リストからダイヤルコードを選択してください。" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "著者情報は利用できません" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "パンくずリスト" + }, + "SWITCH": { + "TOGGLE": "スイッチを切り替え" + }, + "LABEL": { + "TAG_BUTTON": "タグ" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "詳細を見る", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/contact.json b/app/javascript/dashboard/i18n/locale/ja/contact.json new file mode 100644 index 0000000..88d0d46 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "未入力", + "EMAIL_ADDRESS": "Eメールアドレス", + "PHONE_NUMBER": "電話番号", + "IDENTIFIER": "識別子", + "COPY_SUCCESSFUL": "クリップボードに正常にコピーされました", + "COMPANY": "企業名", + "LOCATION": "場所", + "BROWSER_LANGUAGE": "ブラウザの言語", + "CONVERSATION_TITLE": "会話の詳細", + "VIEW_PROFILE": "プロフィールを表示", + "BROWSER": "ブラウザ", + "OS": "OS", + "INITIATED_FROM": "開始元", + "INITIATED_AT": "開始日時", + "IP_ADDRESS": "IPアドレス", + "CREATED_AT_LABEL": "作成日時", + "NEW_MESSAGE": "新しいメッセージ", + "CALL": "Call", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "この連絡先に関連付けられている以前の会話はありません。", + "TITLE": "以前の会話" + }, + "LABELS": { + "CONTACT": { + "TITLE": "連絡先ラベル", + "ERROR": "ラベルを更新できませんでした" + }, + "CONVERSATION": { + "TITLE": "会話のラベル", + "ADD_BUTTON": "ラベルを追加" + }, + "LABEL_SELECT": { + "TITLE": "ラベルを追加", + "PLACEHOLDER": "ラベルを検索", + "NO_RESULT": "ラベルが見つかりません", + "CREATE_LABEL": "新しいラベルを作成" + } + }, + "MERGE_CONTACT": "連絡先をマージ", + "CONTACT_ACTIONS": "連絡先アクション", + "MUTE_CONTACT": "連絡先をブロック", + "UNMUTE_CONTACT": "連絡先のブロックを解除", + "MUTED_SUCCESS": "この連絡先は正常にブロックされました。将来の会話に関する通知は受け取れません。", + "UNMUTED_SUCCESS": "この連絡先のブロックが正常に解除されました。", + "SEND_TRANSCRIPT": "会話ログを送信", + "EDIT_LABEL": "編集", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "カスタム属性", + "CONTACT_LABELS": "連絡先ラベル", + "PREVIOUS_CONVERSATIONS": "以前の会話", + "NO_RECORDS_FOUND": "属性が見つかりません" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "連絡先を編集", + "TITLE": "連絡先を編集", + "DESC": "連絡先の詳細を編集" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "連絡先を削除", + "TITLE": "連絡先を削除", + "DESC": "連絡先の詳細を削除", + "CONFIRM": { + "TITLE": "削除の確認", + "MESSAGE": "削除してもよろしいですか?", + "YES": "削除する", + "NO": "いいえ" + }, + "API": { + "SUCCESS_MESSAGE": "連絡先が正常に削除されました", + "ERROR_MESSAGE": "連絡先を削除できませんでした。後でもう一度お試しください。" + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "送信", + "CANCEL": "キャンセル", + "AVATAR": { + "LABEL": "連絡先のアバター" + }, + "NAME": { + "PLACEHOLDER": "連絡先のフルネームを入力してください", + "LABEL": "フルネーム" + }, + "BIO": { + "PLACEHOLDER": "連絡先のプロフィールを入力してください", + "LABEL": "プロフィール" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "連絡先のEメールアドレスを入力してください", + "LABEL": "Eメールアドレス", + "DUPLICATE": "このメールアドレスは別の連絡先に使用されています。", + "ERROR": "正しいメールアドレスを入力してください。" + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "連絡先の電話番号を入力してください", + "LABEL": "電話番号", + "HELP": "電話番号はE.164形式である必要があります (例: +1415555555 [+][国コード][エリアコード][ローカル番号])", + "ERROR": "電話番号は空白またはE.164形式である必要があります。", + "DIAL_CODE_ERROR": "リストからダイヤルコードを選択してください。", + "DUPLICATE": "この電話番号は別の連絡先に使用されています。" + }, + "LOCATION": { + "PLACEHOLDER": "連絡先の所在地を入力してください", + "LABEL": "場所" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "企業名を入力", + "LABEL": "企業名" + }, + "COUNTRY": { + "PLACEHOLDER": "国名を入力", + "LABEL": "国名", + "SELECT_PLACEHOLDER": "選択", + "REMOVE": "削除", + "SELECT_COUNTRY": "国を選択" + }, + "CITY": { + "PLACEHOLDER": "都市名を入力", + "LABEL": "都市名" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Facebookのユーザー名を入力してください", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Twitterのユーザー名を入力してください", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "LinkedIn のユーザー名を入力してください", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "GitHubのユーザー名を入力してください", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "連絡先のアバターが正常に削除されました", + "ERROR_MESSAGE": "連絡先のアバターを削除できませんでした。後でもう一度お試しください。" + } + }, + "SUCCESS_MESSAGE": "連絡先が正常に保存されました", + "ERROR_MESSAGE": "エラーが発生しました。もう一度お試しください。" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "チャットを開始", + "TITLE": "新しい会話", + "DESC": "新しいメッセージを送信して会話を開始します。", + "NO_INBOX": "この連絡先と新しい会話を開始する受信トレイが見つかりませんでした。", + "FORM": { + "TO": { + "LABEL": "宛先" + }, + "INBOX": { + "LABEL": "受信トレイ", + "PLACEHOLDER": "ソース受信トレイを選択", + "ERROR": "受信トレイを選択してください" + }, + "SUBJECT": { + "LABEL": "件名", + "PLACEHOLDER": "件名を入力してください", + "ERROR": "件名を空にすることはできません" + }, + "MESSAGE": { + "LABEL": "メッセージ", + "PLACEHOLDER": "ここにメッセージを入力してください", + "ERROR": "メッセージを空にすることはできません" + }, + "ATTACHMENTS": { + "SELECT": "ファイルを選択", + "HELP_TEXT": "ここにファイルをドラッグアンドドロップするか、添付するファイルを選択してください" + }, + "SUBMIT": "メッセージを送信", + "CANCEL": "キャンセル", + "SUCCESS_MESSAGE": "メッセージが送信されました!", + "GO_TO_CONVERSATION": "表示", + "ERROR_MESSAGE": "送信できませんでした!もう一度お試しください" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "ソーシャルプロファイル" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "カスタム属性を追加", + "COPY_SUCCESSFUL": "正常にクリップボードにコピーされました", + "SHOW_MORE": "すべての属性を表示", + "SHOW_LESS": "属性を少なく表示", + "ACTIONS": { + "COPY": "属性をコピー", + "DELETE": "属性を削除", + "EDIT": "属性を編集" + }, + "ADD": { + "TITLE": "カスタム属性を作成", + "DESC": "この連絡先にカスタム情報を追加します。" + }, + "FORM": { + "CREATE": "属性を追加", + "CANCEL": "キャンセル", + "NAME": { + "LABEL": "カスタム属性名", + "PLACEHOLDER": "例: Shopify ID", + "ERROR": "無効なカスタム属性名です" + }, + "VALUE": { + "LABEL": "属性値", + "PLACEHOLDER": "例: 11901" + }, + "ADD": { + "TITLE": "新しい属性を作成", + "SUCCESS": "属性が正常に追加されました", + "ERROR": "属性を追加できませんでした。後でもう一度お試しください" + }, + "UPDATE": { + "SUCCESS": "属性が正常に更新されました", + "ERROR": "属性を更新できませんでした。後でもう一度お試しください" + }, + "DELETE": { + "SUCCESS": "属性が正常に削除されました", + "ERROR": "属性を削除できませんでした。後でもう一度お試しください" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "属性を追加", + "PLACEHOLDER": "属性を検索", + "NO_RESULT": "属性が見つかりません" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "値を選択", + "SEARCH_INPUT_PLACEHOLDER": "値を検索", + "NO_RESULT": "結果が見つかりません" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "有効な値が必要です", + "INVALID_URL": "無効なURLです", + "INVALID_INPUT": "無効な入力です" + } + }, + "MERGE_CONTACTS": { + "TITLE": "連絡先をマージ", + "DESCRIPTION": "連絡先をマージして、2つのプロファイルを1つに統合します。すべての属性と会話が統合されます。競合が発生した場合、プライマリ連絡先の属性が優先されます。", + "PRIMARY": { + "TITLE": "プライマリ連絡先", + "HELP_LABEL": "削除対象" + }, + "PARENT": { + "TITLE": "マージする連絡先", + "PLACEHOLDER": "連絡先を検索", + "HELP_LABEL": "保持対象" + }, + "SUMMARY": { + "TITLE": "概要", + "DELETE_WARNING": "{primaryContactName} の連絡先が削除されます。", + "ATTRIBUTE_WARNING": "{primaryContactName} の連絡先情報が {parentContactName} にコピーされます。" + }, + "SEARCH": { + "ERROR_MESSAGE": "問題が発生しました。もう一度お試しください。" + }, + "FORM": { + "SUBMIT": "連絡先をマージ", + "CANCEL": "キャンセル", + "CHILD_CONTACT": { + "ERROR": "マージする子連絡先を選択してください" + }, + "SUCCESS_MESSAGE": "連絡先が正常にマージされました", + "ERROR_MESSAGE": "連絡先をマージできませんでした。もう一度お試しください!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "連絡先", + "SEARCH_TITLE": "連絡先を検索", + "ACTIVE_TITLE": "Active contacts", + "SEARCH_PLACEHOLDER": "検索...", + "MESSAGE_BUTTON": "メッセージ", + "SEND_MESSAGE": "メッセージを送信", + "BLOCK_CONTACT": "連絡先をブロック", + "UNBLOCK_CONTACT": "連絡先のブロックを解除", + "BREADCRUMB": { + "CONTACTS": "連絡先" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "連絡先を追加", + "EXPORT_CONTACT": "連絡先をエクスポート", + "IMPORT_CONTACT": "連絡先をインポート", + "SAVE_CONTACT": "連絡先を保存", + "EMAIL_ADDRESS_DUPLICATE": "このメールアドレスは別の連絡先に使用されています。", + "PHONE_NUMBER_DUPLICATE": "この電話番号は別の連絡先に使用されています。", + "SUCCESS_MESSAGE": "連絡先が正常に保存されました", + "ERROR_MESSAGE": "連絡先を保存できませんでした。後でもう一度お試しください。" + }, + "BLOCK_SUCCESS_MESSAGE": "この連絡先は正常にブロックされました", + "BLOCK_ERROR_MESSAGE": "連絡先をブロックできませんでした。再度お試しください。", + "UNBLOCK_SUCCESS_MESSAGE": "この連絡先のブロックが正常に解除されました", + "UNBLOCK_ERROR_MESSAGE": "連絡先のブロックを解除できませんでした。再度お試しください。", + "IMPORT_CONTACT": { + "TITLE": "連絡先をインポート", + "DESCRIPTION": "CSVファイルを使用して連絡先をインポートします。", + "DOWNLOAD_LABEL": "サンプルCSVをダウンロード", + "LABEL": "CSVファイル:", + "CHOOSE_FILE": "ファイルを選択", + "CHANGE": "ステータスを変更", + "CANCEL": "キャンセル", + "IMPORT": "インポート", + "SUCCESS_MESSAGE": "インポート完了後、メールで通知されます。", + "ERROR_MESSAGE": "エラーが発生しました。もう一度お試しください。" + }, + "EXPORT_CONTACT": { + "TITLE": "連絡先をエクスポート", + "DESCRIPTION": "連絡先の詳細を含むCSVファイルを迅速にエクスポートします。", + "CONFIRM": "エクスポート", + "SUCCESS_MESSAGE": "エクスポートが進行中です。完了後にダウンロード可能な状態になるとメールで通知されます。", + "ERROR_MESSAGE": "エラーが発生しました。もう一度お試しください。" + }, + "SORT_BY": { + "LABEL": "並び替え", + "OPTIONS": { + "NAME": "名前", + "EMAIL": "Eメール", + "PHONE_NUMBER": "電話番号", + "COMPANY": "企業名", + "COUNTRY": "国", + "CITY": "都市", + "LAST_ACTIVITY": "最終アクティビティ", + "CREATED_AT": "作成日時" + } + }, + "ORDER": { + "LABEL": "順序", + "OPTIONS": { + "ASCENDING": "昇順", + "DESCENDING": "降順" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "このフィルターを保存しますか?", + "CONFIRM": "フィルターを保存", + "LABEL": "名前", + "PLACEHOLDER": "フィルターの名前を入力", + "ERROR": "有効な名前を入力してください", + "SUCCESS_MESSAGE": "フィルターが正常に保存されました", + "ERROR_MESSAGE": "フィルターを保存できませんでした。後でもう一度お試しください。" + }, + "DELETE_SEGMENT": { + "TITLE": "削除の確認", + "DESCRIPTION": "このフィルターを削除してもよろしいですか?", + "CONFIRM": "削除する", + "CANCEL": "いいえ、キャンセル", + "SUCCESS_MESSAGE": "フィルターが正常に削除されました", + "ERROR_MESSAGE": "フィルターを削除できませんでした。後でもう一度お試しください。" + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "{startItem} - {endItem} 件目を表示中(全 {totalItems} 件)" + }, + "FILTER": { + "NAME": "名前", + "EMAIL": "Eメール", + "PHONE_NUMBER": "電話番号", + "IDENTIFIER": "識別子", + "COUNTRY": "国", + "CITY": "都市", + "CREATED_AT": "作成日時", + "LAST_ACTIVITY": "最終アクティビティ", + "REFERER_LINK": "参照リンク", + "BLOCKED": "ブロック済み", + "BLOCKED_TRUE": "真", + "BLOCKED_FALSE": "偽", + "BUTTONS": { + "CLEAR_FILTERS": "フィルターをクリア", + "UPDATE_SEGMENT": "セグメントを更新", + "APPLY_FILTERS": "フィルターを適用", + "ADD_FILTER": "フィルターを追加" + }, + "TITLE": "連絡先をフィルター", + "EDIT_SEGMENT": "セグメントを編集", + "SEGMENT": { + "LABEL": "セグメント名", + "INPUT_PLACEHOLDER": "セグメントの名前を入力" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} 件のフィルターを表示", + "CLEAR_FILTERS": "フィルターをクリア" + } + }, + "CARD": { + "OF": "/", + "VIEW_DETAILS": "詳細を表示", + "EDIT_DETAILS_FORM": { + "TITLE": "連絡先の詳細を編集", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "名を入力してください" + }, + "LAST_NAME": { + "PLACEHOLDER": "姓を入力してください" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "メールアドレスを入力してください", + "DUPLICATE": "このメールアドレスは別の連絡先に使用されています。" + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "電話番号を入力してください", + "DUPLICATE": "この電話番号は別の連絡先に使用されています。" + }, + "CITY": { + "PLACEHOLDER": "都市名を入力" + }, + "COUNTRY": { + "PLACEHOLDER": "国を選択" + }, + "BIO": { + "PLACEHOLDER": "プロフィールを入力" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "企業名を入力" + } + }, + "UPDATE_BUTTON": "連絡先を更新", + "SUCCESS_MESSAGE": "連絡先が正常に更新されました", + "ERROR_MESSAGE": "連絡先を更新できませんでした。後でもう一度お試しください。" + }, + "SOCIAL_MEDIA": { + "TITLE": "ソーシャルリンクを編集", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Facebookを追加" + }, + "GITHUB": { + "PLACEHOLDER": "Githubを追加" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Instagramを追加" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "LinkedInを追加" + }, + "TWITTER": { + "PLACEHOLDER": "Twitterを追加" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "This action is permanent and irreversible.", + "BUTTON": "Delete now" + } + }, + "DETAILS": { + "CREATED_AT": "{date} に作成", + "LAST_ACTIVITY": "{date} に最後のアクティビティ", + "DELETE_CONTACT_DESCRIPTION": "この連絡先を完全に削除します。この操作は取り消せません。", + "DELETE_CONTACT": "連絡先を削除", + "DELETE_DIALOG": { + "TITLE": "削除の確認", + "DESCRIPTION": "Are you sure you want to delete this contact?", + "CONFIRM": "削除する", + "API": { + "SUCCESS_MESSAGE": "連絡先が正常に削除されました。", + "ERROR_MESSAGE": "連絡先を削除できませんでした。後でもう一度お試しください。" + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "アバターをアップロードできませんでした。後でもう一度お試しください。", + "SUCCESS_MESSAGE": "アバターが正常にアップロードされました。" + }, + "DELETE": { + "SUCCESS_MESSAGE": "アバターが正常に削除されました。", + "ERROR_MESSAGE": "アバターを削除できませんでした。後でもう一度お試しください。" + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "属性", + "HISTORY": "履歴", + "NOTES": "メモ", + "MERGE": "マージ" + }, + "HISTORY": { + "EMPTY_STATE": "この連絡先に関連付けられた以前の会話はありません。" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "属性を検索", + "UNUSED_ATTRIBUTES": "{count} 件の使用済み属性 | {count} 件の未使用属性", + "EMPTY_STATE": "このアカウントに利用可能なカスタム属性はありません。設定でカスタム属性を作成できます。", + "YES": "はい", + "NO": "いいえ", + "TRIGGER": { + "SELECT": "値を選択", + "INPUT": "値を入力" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "無効な数字です。", + "REQUIRED": "有効な値が必要です。", + "INVALID_INPUT": "無効な入力です。", + "INVALID_URL": "無効なURLです。", + "INVALID_DATE": "無効な日付です。" + }, + "NO_ATTRIBUTES": "属性が見つかりません。", + "API": { + "SUCCESS_MESSAGE": "属性が正常に更新されました。", + "DELETE_SUCCESS_MESSAGE": "属性が正常に削除されました。", + "UPDATE_ERROR": "属性を更新できませんでした。後でもう一度お試しください。", + "DELETE_ERROR": "属性を削除できませんでした。後でもう一度お試しください。" + } + }, + "MERGE": { + "TITLE": "連絡先をマージ", + "DESCRIPTION": "2つのプロファイルを1つに統合し、すべての属性と会話を含めます。競合がある場合、プライマリ連絡先の属性が優先されます。", + "PRIMARY": "プライマリ連絡先", + "PRIMARY_HELP_LABEL": "保存対象", + "PRIMARY_REQUIRED_ERROR": "進行する前にマージする連絡先を選択してください。", + "PARENT": "マージ対象", + "PARENT_HELP_LABEL": "削除対象", + "EMPTY_STATE": "連絡先が見つかりません。", + "PLACEHOLDER": "プライマリ連絡先を検索", + "SEARCH_PLACEHOLDER": "連絡先を検索", + "SEARCH_ERROR_MESSAGE": "連絡先を検索できませんでした。後でもう一度お試しください。", + "SUCCESS_MESSAGE": "連絡先が正常にマージされました。", + "ERROR_MESSAGE": "連絡先をマージできませんでした。もう一度お試しください!", + "IS_SEARCHING": "検索中...", + "BUTTONS": { + "CANCEL": "キャンセル", + "CONFIRM": "連絡先をマージ" + } + }, + "NOTES": { + "PLACEHOLDER": "メモを追加", + "WROTE": "が記入しました", + "YOU": "あなた", + "SAVE": "メモを保存", + "ADD_NOTE": "Add contact note", + "EXPAND": "拡張", + "COLLAPSE": "Collapse", + "NO_NOTES": "No notes, you can add notes from the contact details page.", + "EMPTY_STATE": "この連絡先に関連するメモはありません。上記のボックスに入力してメモを追加できます。", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "このアカウントには連絡先が見つかりません。", + "SUBTITLE": "以下のボタンをクリックして新しい連絡先を追加してください。", + "BUTTON_LABEL": "連絡先を追加", + "SEARCH_EMPTY_STATE_TITLE": "検索に一致する連絡先はありません 🔍", + "LIST_EMPTY_STATE_TITLE": "このビューには利用可能な連絡先がありません 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Assign Labels", + "ASSIGN_LABELS_SUCCESS": "ラベルが正常に割り当てられました。", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "削除", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "連絡先を削除" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "検索を完了できませんでした。もう一度お試しください。" + }, + "FORM": { + "GO_TO_CONVERSATION": "表示", + "SUCCESS_MESSAGE": "メッセージが正常に送信されました!", + "ERROR_MESSAGE": "会話の作成中にエラーが発生しました。後でもう一度お試しください。", + "NO_INBOX_ALERT": "この連絡先と会話を開始するための利用可能なインボックスがありません。", + "CONTACT_SELECTOR": { + "LABEL": "宛先:", + "TAG_INPUT_PLACEHOLDER": "名前、メールアドレス、または電話番号で連絡先を検索", + "CONTACT_CREATING": "連絡先を作成中..." + }, + "INBOX_SELECTOR": { + "LABEL": "送信方法:", + "BUTTON": "インボックスを表示" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "件名 :", + "SUBJECT_PLACEHOLDER": "メールの件名を入力", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "メールアドレスで連絡先を検索", + "BCC_LABEL": "Bcc:", + "BCC_PLACEHOLDER": "メールアドレスで連絡先を検索", + "BCC_BUTTON": "Bcc" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "ここにメッセージを入力..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "テンプレートを選択", + "SEARCH_PLACEHOLDER": "テンプレートを検索", + "EMPTY_STATE": "テンプレートが見つかりません。", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsAppテンプレート: {templateName}", + "VARIABLES": "変数", + "BACK": "戻る", + "SEND_MESSAGE": "メッセージを送信" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "テンプレートを選択", + "SEARCH_PLACEHOLDER": "テンプレートを検索", + "EMPTY_STATE": "テンプレートが見つかりません。", + "TEMPLATE_PARSER": { + "BACK": "戻る", + "SEND_MESSAGE": "メッセージを送信" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "破棄", + "SEND": "送信 ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/contactFilters.json b/app/javascript/dashboard/i18n/locale/ja/contactFilters.json new file mode 100644 index 0000000..58a0963 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "連絡先をフィルター", + "SUBTITLE": "以下にフィルターを追加し、「送信」をクリックして連絡先を絞り込みます。", + "EDIT_CUSTOM_SEGMENT": "セグメントを編集", + "CUSTOM_VIEWS_SUBTITLE": "フィルターを追加または削除し、セグメントを更新します。", + "ADD_NEW_FILTER": "フィルターを追加", + "CLEAR_ALL_FILTERS": "すべてのフィルターをクリア", + "FILTER_DELETE_ERROR": "保存するには少なくとも1つのフィルターが必要です。", + "SUBMIT_BUTTON_LABEL": "送信", + "UPDATE_BUTTON_LABEL": "セグメントを更新", + "CANCEL_BUTTON_LABEL": "キャンセル", + "CLEAR_BUTTON_LABEL": "フィルターをクリア", + "EMPTY_VALUE_ERROR": "値は必須です", + "SEGMENT_LABEL": "セグメント名", + "SEGMENT_QUERY_LABEL": "セグメントクエリ", + "TOOLTIP_LABEL": "連絡先をフィルター", + "QUERY_DROPDOWN_LABELS": { + "AND": "AND", + "OR": "OR" + }, + "OPERATOR_LABELS": { + "equal_to": "等しい", + "not_equal_to": "等しくない", + "contains": "含む", + "does_not_contain": "含まない", + "is_present": "存在する", + "is_not_present": "存在しない", + "is_greater_than": "より大きい", + "is_lesser_than": "より小さい", + "days_before": "x日前" + }, + "ERRORS": { + "VALUE_REQUIRED": "値は必須です" + }, + "ATTRIBUTES": { + "NAME": "名前", + "EMAIL": "Eメール", + "PHONE_NUMBER": "電話番号", + "IDENTIFIER": "識別子", + "CITY": "都市", + "COUNTRY": "国", + "CUSTOM_ATTRIBUTE_LIST": "リスト", + "CUSTOM_ATTRIBUTE_TEXT": "テキスト", + "CUSTOM_ATTRIBUTE_NUMBER": "数値", + "CUSTOM_ATTRIBUTE_LINK": "リンク", + "CUSTOM_ATTRIBUTE_CHECKBOX": "チェックボックス", + "CREATED_AT": "作成日", + "LAST_ACTIVITY": "最終アクティビティ", + "REFERER_LINK": "リファラーリンク", + "BLOCKED": "ブロック済み", + "LABELS": "ラベル" + }, + "GROUPS": { + "STANDARD_FILTERS": "標準フィルター", + "ADDITIONAL_FILTERS": "追加フィルター", + "CUSTOM_ATTRIBUTES": "カスタム属性" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/contentTemplates.json b/app/javascript/dashboard/i18n/locale/ja/contentTemplates.json new file mode 100644 index 0000000..99d2e51 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "テンプレートを検索", + "NO_TEMPLATES_FOUND": "該当するテンプレートが見つかりません:", + "NO_CONTENT": "コンテンツなし", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "カテゴリ", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "言語", + "TEMPLATE_BODY": "テンプレート本文", + "CATEGORY": "カテゴリ" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "テキスト" + } + }, + "PARSER": { + "VARIABLES_LABEL": "変数", + "LANGUAGE": "言語", + "CATEGORY": "カテゴリ", + "VARIABLE_PLACEHOLDER": "{variable} の値を入力", + "GO_BACK_LABEL": "戻る", + "SEND_MESSAGE_LABEL": "メッセージを送信", + "FORM_ERROR_MESSAGE": "送信前に全ての変数を入力してください", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "戻る", + "SEND_MESSAGE_BUTTON": "メッセージを送信" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/conversation.json b/app/javascript/dashboard/i18n/locale/ja/conversation.json new file mode 100644 index 0000000..f24d8f2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "左のリストから会話を選択してください", + "CSAT_REPLY_MESSAGE": "会話の評価にご協力をお願いいたします。", + "404": "会話が見つかりませんでした。もう一度お試しください。", + "SWITCH_VIEW_LAYOUT": "レイアウトを変更", + "DASHBOARD_APP_TAB_MESSAGES": "メッセージ", + "UNVERIFIED_SESSION": "このユーザーの身元は確認されていません", + "NO_MESSAGE_1": "おっと!受信トレイに顧客からのメッセージがないようです。", + "NO_MESSAGE_2": " あなたのページにメッセージを送る", + "NO_INBOX_1": "まだ受信トレイを追加していないようです。", + "NO_INBOX_2": " 始めましょう", + "NO_INBOX_AGENT": "あなたに受信トレイが設定されていないようです。管理者に問い合わせてください。", + "SEARCH_MESSAGES": "会話中のメッセージの検索", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "コマンドメニューを開く", + "KEYBOARD_SHORTCUTS": "キーボードショートカットを表示する" + }, + "SEARCH": { + "TITLE": "メッセージを検索", + "RESULT_TITLE": "検索結果", + "LOADING_MESSAGE": "データを集めています...", + "PLACEHOLDER": "テキストを入力してメッセージを検索します", + "NO_MATCHING_RESULTS": "該当結果が見つかりませんでした。" + }, + "UNREAD_MESSAGES": "未読メッセージ", + "UNREAD_MESSAGE": "未読メッセージ", + "CLICK_HERE": "ここをクリック", + "LOADING_INBOXES": "受信トレイを読み込み中", + "LOADING_CONVERSATIONS": "会話データを読み込んでいます", + "CANNOT_REPLY": "以下の理由で返信できません:", + "24_HOURS_WINDOW": "24時間以内のメッセージウィンドウの制限", + "48_HOURS_WINDOW": "48時間以内のメッセージウィンドウの制限", + "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours", + "NOT_ASSIGNED_TO_YOU": "この会話はあなたに割り当てられていません。自分に割り当てますか?", + "ASSIGN_TO_ME": "自分に割り当て", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "この会話にはテンプレートメッセージでしか返信できません。", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24時間以内のメッセージウィンドウの制限", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "以下に返信:", + "REMOVE_SELECTION": "選択項目を削除", + "DOWNLOAD": "ダウンロード", + "UNKNOWN_FILE_TYPE": "不明なファイル", + "SAVE_CONTACT": "連絡先を保存", + "NO_CONTENT": "表示するコンテンツがありません", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} が連絡先を共有しました", + "LOCATION": "{sender} が位置情報を共有しました", + "FILE": "{sender} がファイルを共有しました", + "MEETING": "{sender} がミーティングを開始しました" + }, + "UPLOADING_ATTACHMENTS": "添付ファイルをアップロード中...", + "REPLIED_TO_STORY": "あなたのストーリーに返信", + "UNSUPPORTED_MESSAGE": "このメッセージはサポートされていません。Facebook / Instagram で表示できます。", + "UNSUPPORTED_MESSAGE_FACEBOOK": "このメッセージはサポートされていません。Facebook Messengerでこのメッセージを表示できます。", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "このメッセージはサポートされていません。このメッセージは Instagram で表示できます。", + "SUCCESS_DELETE_MESSAGE": "メッセージの削除に成功", + "FAIL_DELETE_MESSSAGE": "メッセージを削除できませんでした!もう一度お試しください", + "NO_RESPONSE": "返信なし", + "RESPONSE": "回答", + "RATING_TITLE": "評価", + "FEEDBACK_TITLE": "フィードバック", + "REPLY_MESSAGE_NOT_FOUND": "メッセージは利用できません", + "CARD": { + "SHOW_LABELS": "ラベルを表示", + "HIDE_LABELS": "ラベルを隠す" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "解決する", + "REOPEN_ACTION": "再開する", + "OPEN_ACTION": "再開する", + "MORE_ACTIONS": "More actions", + "OPEN": "もっと見る", + "CLOSE": "閉じる", + "DETAILS": "詳細", + "SNOOZED_UNTIL": "次の時間までスヌーズ", + "SNOOZED_UNTIL_TOMORROW": "明日までスヌーズしました", + "SNOOZED_UNTIL_NEXT_WEEK": "来週までスヌーズ", + "SNOOZED_UNTIL_NEXT_REPLY": "次の返信までうたた寝。", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "不在", + "DUE": "期限" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "保留としてマークする", + "SNOOZE_UNTIL": "スヌーズ", + "SNOOZE": { + "TITLE": "までスヌーズする", + "NEXT_REPLY": "次の返信", + "TOMORROW": "明日", + "NEXT_WEEK": "次週" + } + }, + "MENTION": { + "AGENTS": "担当者", + "TEAMS": "チーム" + }, + "CUSTOM_SNOOZE": { + "TITLE": "までスヌーズする", + "APPLY": "スヌーズ", + "CANCEL": "キャンセル" + }, + "PRIORITY": { + "TITLE": "優先度", + "OPTIONS": { + "NONE": "該当なし", + "URGENT": "緊急", + "HIGH": "高", + "MEDIUM": "中", + "LOW": "低" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "該当なし", + "INPUT_PLACEHOLDER": "優先度を選択", + "NO_RESULTS": "結果が見つかりませんでした", + "SUCCESSFUL": "会話ID {conversationId} の優先度を {priority}に変更しました", + "FAILED": "優先度を変更できませんでした。もう一度お試しください。" + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Delete conversation #{conversationId}", + "DESCRIPTION": "Are you sure you want to delete this conversation?", + "CONFIRM": "削除" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "保留としてマークする", + "RESOLVED": "解決済みとしてマークする", + "MARK_AS_UNREAD": "未読にする", + "MARK_AS_READ": "既読にする", + "REOPEN": "会話を再開する", + "SNOOZE": { + "TITLE": "スヌーズ", + "NEXT_REPLY": "次の返信まで", + "TOMORROW": "明日まで", + "NEXT_WEEK": "来週まで" + }, + "ASSIGN_AGENT": "エージェントを割り当てる", + "ASSIGN_LABEL": "ラベルを割り当てる", + "AGENTS_LOADING": "エージェントを読み込む...", + "ASSIGN_TEAM": "チームを割り当てる", + "DELETE": "Delete conversation", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "会話 ID {conversationId} が \"{agentName}\" に割り当てられました", + "FAILED": "エージェントを割り当てられませんでした。もう一度お試しください。" + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "会話ID {conversationId} に ラベル #{labelName} を割り当てました", + "FAILED": "ラベルを割り当てることができませんでした。もう一度やり直してください。" + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "会話ID {conversationId} に \"{team}\" チームを割り当てました", + "FAILED": "チームを割り当てることができませんでした。もう一度お試しください。" + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "メッセージの署名", + "ENABLE_SIGN_TOOLTIP": "署名を有効化", + "DISABLE_SIGN_TOOLTIP": "署名を無効化", + "MSG_INPUT": "Shift + Enter で新しい行を作成します。「/」で開始すると、定型文回答を選択できます。", + "PRIVATE_MSG_INPUT": "Shift + Enter で新しい行を作成します。これは担当者にのみ表示されます。", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "メッセージ署名が構成されていません。プロフィール設定で構成してください。", + "CLICK_HERE": "ここをクリックして更新", + "WHATSAPP_TEMPLATES": "Whatsapp テンプレート" + }, + "REPLYBOX": { + "REPLY": "返信", + "PRIVATE_NOTE": "非公開メモ", + "SEND": "送信", + "CREATE": "メモを追加", + "INSERT_READ_MORE": "続きを読む", + "DISMISS_REPLY": "返信を却下", + "REPLYING_TO": "返信対象:", + "TIP_EMOJI_ICON": "絵文字セレクタを表示", + "TIP_ATTACH_ICON": "ファイルを添付", + "TIP_AUDIORECORDER_ICON": "音声を録音", + "TIP_AUDIORECORDER_PERMISSION": "音声アクセスを許可", + "TIP_AUDIORECORDER_ERROR": "音声を開けませんでした", + "DRAG_DROP": "添付するにはここにドラッグ&ドロップ", + "START_AUDIO_RECORDING": "音声録音を開始", + "STOP_AUDIO_RECORDING": "音声録音を停止", + "": "", + "EMAIL_HEAD": { + "TO": "宛先", + "ADD_BCC": "Bcc を追加", + "CC": { + "LABEL": "Cc", + "PLACEHOLDER": "カンマで区切ったメールアドレス", + "ERROR": "有効なメールアドレスを入力してください" + }, + "BCC": { + "LABEL": "Bcc", + "PLACEHOLDER": "カンマで区切ったメールアドレス", + "ERROR": "有効なメールアドレスを入力してください" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "未定義の変数", + "MESSAGE": "メッセージに {undefinedVariablesCount} 個の未定義変数があります:{undefinedVariables}。それでもメッセージを送信しますか?", + "CONFIRM": { + "YES": "送信", + "CANCEL": "キャンセル" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "非公開設定の注意:あなたとあなたのチームのみに表示されます", + "CHANGE_STATUS": "会話の状態が変更されました", + "CHANGE_STATUS_FAILED": "会話の状態変更に失敗しました", + "CHANGE_AGENT": "会話の担当者が変更されました", + "CHANGE_AGENT_FAILED": "担当者の変更に失敗しました", + "ASSIGN_LABEL_SUCCESFUL": "ラベルが正常に割り当てられました", + "ASSIGN_LABEL_FAILED": "ラベル割り当てに失敗しました", + "CHANGE_TEAM": "会話のチームが変更されました", + "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", + "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", + "FILE_SIZE_LIMIT": "ファイルが {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB の添付ファイル制限を超えています", + "MESSAGE_ERROR": "このメッセージを送信できません。後でもう一度お試しください", + "SENT_BY": "送信者:", + "BOT": "ボット", + "SEND_FAILED": "メッセージを送信できませんでした!再試行してください", + "TRY_AGAIN": "再試行", + "ASSIGNMENT": { + "SELECT_AGENT": "担当者を選択", + "REMOVE": "削除", + "ASSIGN": "割り当てる" + }, + "CONTEXT_MENU": { + "COPY": "コピー", + "REPLY_TO": "このメッセージに返信", + "DELETE": "削除", + "CREATE_A_CANNED_RESPONSE": "定型文応答に追加", + "TRANSLATE": "翻訳", + "COPY_PERMALINK": "メッセージへのリンクをコピー", + "LINK_COPIED": "メッセージのURLがクリップボードにコピーされました", + "DELETE_CONFIRMATION": { + "TITLE": "このメッセージを削除してもよろしいですか?", + "MESSAGE": "この操作は元に戻せません", + "DELETE": "削除", + "CANCEL": "キャンセル" + } + }, + "SIDEBAR": { + "CONTACT": "連絡先", + "COPILOT": "コパイロット" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "会話の記録を送信", + "DESC": "会話記録のコピーを指定されたメールアドレスに送信する", + "SUBMIT": "送信", + "CANCEL": "キャンセル", + "SEND_EMAIL_SUCCESS": "チャットの記録は正常に送信されました", + "SEND_EMAIL_ERROR": "エラーが発生しました。もう一度お試しください。", + "FORM": { + "SEND_TO_CONTACT": "顧客に会話の記録を転送する", + "SEND_TO_AGENT": "担当者に記録を送信する", + "SEND_TO_OTHER_EMAIL_ADDRESS": "会話の記録を別のメールアドレスに転送する", + "EMAIL": { + "PLACEHOLDER": "メールアドレスを入力する", + "ERROR": "正しいメールアドレスを入力してください" + } + } + }, + "ONBOARDING": { + "TITLE": "こんにちは 👋, {installationName}へようこそ!", + "DESCRIPTION": "ご登録いただきありがとうございます。{installationName} を最大限に活用していただくために、いくつかのヒントをご紹介します。", + "GREETING_MORNING": "おはようございます 👋, {name} さん。{installationName} へようこそ。", + "GREETING_AFTERNOON": "こんにちは 👋, {name} さん。{installationName} へようこそ。", + "GREETING_EVENING": "こんばんは 👋, {name} さん。{installationName} へようこそ。", + "READ_LATEST_UPDATES": "最新のアップデートを読む", + "ALL_CONVERSATION": { + "TITLE": "すべての会話を1箇所で", + "DESCRIPTION": "お客様からのすべての会話を1つのダッシュボードで確認できます。受信チャネル、ラベル、ステータスでフィルタリング可能です。", + "NEW_LINK": "ここをクリックして受信トレイを作成" + }, + "TEAM_MEMBERS": { + "TITLE": "チームメンバーを招待", + "DESCRIPTION": "お客様と話す準備が整ったら、チームメイトを招待して支援を受けましょう。担当者リストにメールアドレスを追加して、チームメンバーを招待できます。", + "NEW_LINK": "ここをクリックしてチームメンバーを招待" + }, + "LABELS": { + "TITLE": "ラベルで会話を整理", + "DESCRIPTION": "ラベルを使うと、会話を簡単に分類できます。#support-enquiry、#billing-question などのラベルを作成して、後で会話に活用してください。", + "NEW_LINK": "ここをクリックしてラベルを作成" + }, + "CANNED_RESPONSES": { + "TITLE": "定型文応答を作成", + "DESCRIPTION": "あらかじめ用意されたクイック返信テンプレートで、会話に迅速に対応できます。担当者は '/' を入力し、その後にショートコードを入力して返信を挿入できます。", + "NEW_LINK": "ここをクリックして定型文応答を作成" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "担当者", + "SELF_ASSIGN": "自分に割り当て", + "TEAM_LABEL": "担当チーム", + "SELECT": { + "PLACEHOLDER": "なし" + }, + "ACCORDION": { + "CONTACT_DETAILS": "連絡先詳細", + "CONVERSATION_ACTIONS": "会話のアクション", + "CONVERSATION_LABELS": "会話のラベル", + "CONVERSATION_INFO": "会話の情報", + "CONTACT_NOTES": "Contact Notes", + "CONTACT_ATTRIBUTES": "連絡先属性", + "PREVIOUS_CONVERSATION": "以前の会話", + "MACROS": "マクロ", + "LINEAR_ISSUES": "Linked Linear Issues", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "保留中", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "属性を作成", + "NO_RECORDS_FOUND": "属性が見つかりません", + "UPDATE": { + "SUCCESS": "属性が正常に更新されました", + "ERROR": "属性を更新できませんでした。後でもう一度お試しください" + }, + "ADD": { + "TITLE": "追加", + "SUCCESS": "属性が正常に追加されました", + "ERROR": "属性を追加できませんでした。後でもう一度お試しください" + }, + "DELETE": { + "SUCCESS": "属性が正常に削除されました", + "ERROR": "属性を削除できませんでした。後でもう一度お試しください" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "属性を追加", + "PLACEHOLDER": "属性を検索", + "NO_RESULT": "属性が見つかりません" + } + }, + "EMAIL_HEADER": { + "FROM": "差出人:", + "TO": "宛先:", + "BCC": "ビーシーシー", + "CC": "シーシー", + "SUBJECT": "件名", + "EXPAND": "メールを展開" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "参加者", + "SIDEBAR_TITLE": "会話の参加者", + "NO_RECORDS_FOUND": "結果が見つかりません", + "ADD_PARTICIPANTS": "参加者を選択", + "REMANING_PARTICIPANTS_TEXT": "+{count} 人のその他", + "REMANING_PARTICIPANT_TEXT": "+{count} 人のその他", + "TOTAL_PARTICIPANTS_TEXT": "{count} 人が参加しています。", + "TOTAL_PARTICIPANT_TEXT": "{count} 人が参加しています。", + "NO_PARTICIPANTS_TEXT": "誰も参加していません。", + "WATCH_CONVERSATION": "会話に参加", + "YOU_ARE_WATCHING": "あなたはこの会話に参加しています", + "API": { + "ERROR_MESSAGE": "更新できませんでした。再試行してください!", + "SUCCESS_MESSAGE": "参加者が更新されました!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "翻訳されたコンテンツを表示", + "DESC": "各言語で翻訳されたコンテンツを表示できます。", + "ORIGINAL_CONTENT": "オリジナルコンテンツ", + "TRANSLATED_CONTENT": "翻訳されたコンテンツ", + "NO_TRANSLATIONS_AVAILABLE": "このコンテンツには翻訳が利用できません" + }, + "TYPING": { + "ONE": "{user} が入力中...", + "TWO": "{user} と {secondUser} が入力中...", + "MULTIPLE": "{user} と他 {count} 人が入力中..." + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "これらのプロンプトを試してください" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "添付ファイルをダウンロードできませんでした。もう一度お試しください。" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/csatMgmt.json b/app/javascript/dashboard/i18n/locale/ja/csatMgmt.json new file mode 100644 index 0000000..1a782aa --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "会話を評価する", + "PLACEHOLDER": "詳細を教えてください...", + "RATINGS": { + "POOR": "😞 悪かった", + "FAIR": "😑 良くなかった", + "AVERAGE": "😐 普通", + "GOOD": "😀 良かった", + "EXCELLENT": "😍 とても良かった" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/customRole.json b/app/javascript/dashboard/i18n/locale/ja/customRole.json new file mode 100644 index 0000000..05c0a47 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "カスタムロール", + "LEARN_MORE": "カスタムロールについて詳しく学ぶ", + "DESCRIPTION": "カスタムロールは、アカウントオーナーまたは管理者によって作成されるロールです。これらのロールは、担当者に割り当てて、アカウント内でのアクセス権と権限を定義できます。カスタムロールは、組織の要件に合わせて特定の権限とアクセスレベルで作成できます。", + "HEADER_BTN_TXT": "カスタムロールを追加", + "LOADING": "カスタムロールを取得中...", + "SEARCH_404": "検索内容(クエリ)に一致する項目はありませんでした。", + "PAYWALL": { + "TITLE": "アップグレードしてカスタムロールを作成", + "AVAILABLE_ON": "カスタムロール機能はビジネスプランおよびエンタープライズプランでのみ利用可能です。", + "UPGRADE_PROMPT": "チーム管理、自動化、カスタム属性などの高度な機能にアクセスするためにプランをアップグレードしてください。", + "UPGRADE_NOW": "今すぐアップグレード", + "CANCEL_ANYTIME": "プランはいつでも変更またはキャンセルできます" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "カスタムロール機能は有料プランでのみ利用可能です。", + "UPGRADE_PROMPT": "監査ログ、担当者キャパシティなどの高度な機能にアクセスするために有料プランにアップグレードしてください。", + "ASK_ADMIN": "アップグレードについては管理者にお問い合わせください。" + }, + "LIST": { + "404": "このアカウントでは利用可能なカスタムロールはありません。", + "TITLE": "カスタムロールの管理", + "DESC": "カスタムロールは、アカウントオーナーまたは管理者によって作成されるロールです。これらのロールは、担当者に割り当てて、アカウント内でのアクセス権と権限を定義できます。カスタムロールは、組織の要件に合わせて特定の権限とアクセスレベルで作成できます。", + "TABLE_HEADER": { + "NAME": "名前", + "DESCRIPTION": "説明", + "PERMISSIONS": "権限", + "ACTIONS": "操作" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "すべての会話を管理", + "CONVERSATION_UNASSIGNED_MANAGE": "未割り当ての会話と自分に割り当てられた会話を管理", + "CONVERSATION_PARTICIPATING_MANAGE": "参加中の会話と自分に割り当てられた会話を管理", + "CONTACT_MANAGE": "連絡先を管理", + "REPORT_MANAGE": "レポートを管理", + "KNOWLEDGE_BASE_MANAGE": "ナレッジベースを管理" + }, + "FORM": { + "NAME": { + "LABEL": "名前", + "PLACEHOLDER": "名前を入力してください。", + "ERROR": "名前が必須です。" + }, + "DESCRIPTION": { + "LABEL": "説明", + "PLACEHOLDER": "説明を入力してください。", + "ERROR": "説明が必須です。" + }, + "PERMISSIONS": { + "LABEL": "権限", + "ERROR": "権限が必須です。" + }, + "CANCEL_BUTTON_TEXT": "キャンセル", + "API": { + "ERROR_MESSAGE": "Woot サーバーに接続できませんでした。後でもう一度お試しください。" + } + }, + "ADD": { + "TITLE": "カスタムロールを追加", + "DESC": "カスタムロールは、組織の要件に合わせて特定の権限とアクセスレベルでロールを作成できます。", + "SUBMIT": "送信", + "API": { + "SUCCESS_MESSAGE": "カスタムロールが正常に追加されました。" + } + }, + "EDIT": { + "BUTTON_TEXT": "編集", + "TITLE": "カスタムロールを編集", + "DESC": "カスタムロールは、組織の要件に合わせて特定の権限とアクセスレベルでロールを作成できます。", + "SUBMIT": "更新", + "API": { + "SUCCESS_MESSAGE": "カスタムロールが正常に更新されました。" + } + }, + "DELETE": { + "BUTTON_TEXT": "削除", + "API": { + "SUCCESS_MESSAGE": "カスタムロールが正常に削除されました。", + "ERROR_MESSAGE": "Woot サーバーに接続できませんでした。後でもう一度お試しください。" + }, + "CONFIRM": { + "TITLE": "削除の確認", + "MESSAGE": "削除してもよろしいですか?", + "YES": "はい、削除します", + "NO": "いいえ、保持します" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/datePicker.json b/app/javascript/dashboard/i18n/locale/ja/datePicker.json new file mode 100644 index 0000000..8df29da --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "適用", + "CLEAR_BUTTON": "クリア", + "DATE_RANGE_INPUT": { + "START": "開始日", + "END": "終了日" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "日付範囲", + "LAST_7_DAYS": "過去 7 日間", + "LAST_30_DAYS": "過去 30 日間", + "LAST_3_MONTHS": "過去 3 ヶ月", + "LAST_6_MONTHS": "過去 6 ヶ月", + "LAST_YEAR": "過去 1 年", + "CUSTOM_RANGE": "カスタム日付範囲" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/emoji.json b/app/javascript/dashboard/i18n/locale/ja/emoji.json new file mode 100644 index 0000000..8d37f08 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "絵文字を検索", + "NOT_FOUND": "検索条件に一致する絵文字が見つかりません", + "REMOVE": "削除" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/general.json b/app/javascript/dashboard/i18n/locale/ja/general.json new file mode 100644 index 0000000..053437b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "{firstIndex}-{lastIndex} の {totalCount} アイテムを表示", + "PHONE_INPUT": { + "PLACEHOLDER": "検索", + "EMPTY_STATE": "結果が見つかりませんでした。" + }, + "CLOSE": "閉じる", + "BETA": "ベータ版", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/generalSettings.json b/app/javascript/dashboard/i18n/locale/ja/generalSettings.json new file mode 100644 index 0000000..38f0747 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.", + "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.", + "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.", + "NON_ADMIN": "Please contact your administrator to upgrade the plan and continue using all features." + }, + "TITLE": "アカウント設定", + "SUBMIT": "設定を更新", + "BACK": "戻る", + "DISMISS": "閉じる", + "UPDATE": { + "ERROR": "設定を更新できませんでした。もう一度お試しください", + "SUCCESS": "アカウント設定が正常に更新されました" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Delete your Account", + "NOTE": "Once you delete your account, all your data will be deleted.", + "BUTTON_TEXT": "Delete Your Account", + "CONFIRM": { + "TITLE": "Delete Account", + "MESSAGE": "Deleting your Account is irreversible. Enter your account name below to confirm you want to permanently delete it.", + "BUTTON_TEXT": "削除", + "DISMISS": "キャンセル", + "PLACE_HOLDER": "{accountName}と入力して確認してください" + }, + "SUCCESS": "Account marked for deletion", + "FAILURE": "Could not delete account, try again!", + "SCHEDULED_DELETION": { + "TITLE": "Account Scheduled for Deletion", + "MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.", + "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.", + "CLEAR_BUTTON": "Cancel Scheduled Deletion" + } + }, + "FORM": { + "ERROR": "正しくフォームに入力してください", + "GENERAL_SECTION": { + "TITLE": "全般設定", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "アカウントID", + "NOTE": "APIベースの統合を構築する場合に必要なIDです" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.", + "DURATION": { + "LABEL": "Inactivity duration", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Preferences", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "アカウント名", + "PLACEHOLDER": "あなたのアカウント名", + "ERROR": "正しいアカウント名を入力してください" + }, + "LANGUAGE": { + "LABEL": "サイト言語", + "PLACEHOLDER": "言語を選択", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "受信メールドメイン", + "PLACEHOLDER": "メールを受信するドメイン", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "サポートメール", + "PLACEHOLDER": "会社のサポートメールアドレス", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclude unattended conversations", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a conversation should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "更新", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "あなたのアカウントでは、メールでの会話が継続可能です。", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "カスタムドメインでのメール受信が有効になりました。" + } + }, + "UPDATE_CHATWOOT": "Chatwootのアップデート {latestChatwootVersion} が利用可能です。インスタンスを更新してください。", + "LEARN_MORE": "詳細を見る", + "PAYMENT_PENDING": "お支払いが保留中です。支払い情報を更新してChatwootの利用を継続してください。", + "UPGRADE": "Upgrade to continue using Chatwoot", + "LIMITS_UPGRADE": "アカウントの使用制限を超えました。プランをアップグレードして利用を続けてください。", + "OPEN_BILLING": "請求情報を開く" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Enterキーで選択", + "ENTER_TO_REMOVE": "Enterキーで削除", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "1つを選択", + "SELECT": "選択" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "通知", + "MARK_ALL_DONE": "すべて完了としてマーク", + "DELETE_TITLE": "削除済み", + "UNREAD_NOTIFICATION": { + "TITLE": "未読通知", + "ALL_NOTIFICATIONS": "すべての通知を見る", + "LOADING_UNREAD_MESSAGE": "未読通知を読み込み中...", + "EMPTY_MESSAGE": "未読通知はありません" + }, + "LIST": { + "LOADING_MESSAGE": "通知を読み込み中...", + "404": "通知なし", + "TABLE_HEADER": [ + "名前", + "電話番号", + "会話データ", + "最終連絡日" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "新しい会話", + "conversation_assignment": "会話の割り当て", + "assigned_conversation_new_message": "新しいメッセージ", + "participating_conversation_new_message": "新しいメッセージ", + "conversation_mention": "メンション", + "sla_missed_first_response": "SLA未達", + "sla_missed_next_response": "SLA未達", + "sla_missed_resolution": "SLA未達" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "オフライン", + "RECONNECTING": "再接続中...", + "RECONNECT_SUCCESS": "再接続しました" + }, + "BUTTON": { + "REFRESH": "再読み込み" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "検索または移動", + "SECTIONS": { + "GENERAL": "全般", + "REPORTS": "レポート", + "CONVERSATION": "会話", + "BULK_ACTIONS": "一括操作", + "CHANGE_ASSIGNEE": "割り当てを変更", + "CHANGE_PRIORITY": "優先度を変更", + "CHANGE_TEAM": "チームを変更", + "SNOOZE_CONVERSATION": "会話をスヌーズ", + "ADD_LABEL": "会話にラベルを追加", + "REMOVE_LABEL": "会話からラベルを削除", + "SETTINGS": "設定", + "AI_ASSIST": "AIアシスト", + "APPEARANCE": "外観", + "SNOOZE_NOTIFICATION": "通知をスヌーズ" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "会話ダッシュボードに移動", + "GO_TO_CONTACTS_DASHBOARD": "連絡先ダッシュボードに移動", + "GO_TO_REPORTS_OVERVIEW": "レポート概要に移動", + "GO_TO_CONVERSATION_REPORTS": "会話レポートに移動", + "GO_TO_AGENT_REPORTS": "担当者レポートに移動", + "GO_TO_LABEL_REPORTS": "ラベルレポートに移動", + "GO_TO_INBOX_REPORTS": "受信トレイレポートに移動", + "GO_TO_TEAM_REPORTS": "チームレポートに移動", + "GO_TO_SETTINGS_AGENTS": "担当者設定に移動", + "GO_TO_SETTINGS_TEAMS": "チーム設定に移動", + "GO_TO_SETTINGS_INBOXES": "受信トレイ設定に移動", + "GO_TO_SETTINGS_LABELS": "ラベル設定に移動", + "GO_TO_SETTINGS_CANNED_RESPONSES": "定型文設定に移動", + "GO_TO_SETTINGS_APPLICATIONS": "アプリ設定に移動", + "GO_TO_SETTINGS_ACCOUNT": "アカウント設定に移動", + "GO_TO_SETTINGS_PROFILE": "プロフィール設定に移動", + "GO_TO_NOTIFICATIONS": "通知に移動", + "ADD_LABELS_TO_CONVERSATION": "会話にラベルを追加", + "ASSIGN_AN_AGENT": "担当者を割り当て", + "AI_ASSIST": "AIアシスト", + "ASSIGN_PRIORITY": "優先度を割り当て", + "ASSIGN_A_TEAM": "チームを割り当て", + "MUTE_CONVERSATION": "会話をミュート", + "UNMUTE_CONVERSATION": "会話のミュートを解除", + "REMOVE_LABEL_FROM_CONVERSATION": "会話からラベルを削除", + "REOPEN_CONVERSATION": "会話を再開", + "RESOLVE_CONVERSATION": "会話を解決", + "SEND_TRANSCRIPT": "メールで会話記録を送信", + "SNOOZE_CONVERSATION": "会話をスヌーズ", + "UNTIL_NEXT_REPLY": "次の返信まで", + "UNTIL_NEXT_WEEK": "来週まで", + "UNTIL_TOMORROW": "明日まで", + "UNTIL_NEXT_MONTH": "来月まで", + "AN_HOUR_FROM_NOW": "1時間後まで", + "UNTIL_CUSTOM_TIME": "カスタム...", + "CHANGE_APPEARANCE": "外観を変更", + "LIGHT_MODE": "ライトモード", + "DARK_MODE": "ダークモード", + "SYSTEM_MODE": "システム設定", + "SNOOZE_NOTIFICATION": "通知をスヌーズ" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "ダッシュボードアプリを読み込み中..." + }, + "COMMON": { + "OR": "または", + "CLICK_HERE": "ここをクリック" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/helpCenter.json b/app/javascript/dashboard/i18n/locale/ja/helpCenter.json new file mode 100644 index 0000000..c82866c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "ヘルプセンター", + "NEW_PAGE": { + "DESCRIPTION": "顧客向けのセルフサービスヘルプセンターポータルを作成します。顧客が待たずに迅速に回答を見つけられるようサポートします。問い合わせを効率化し、担当者の生産性を向上させ、顧客サポートを向上させましょう。", + "CREATE_PORTAL_BUTTON": "ポータルを作成" + }, + "HEADER": { + "FILTER": "フィルター", + "SORT": "並び替え", + "LOCALE": "ロケール", + "SETTINGS_BUTTON": "設定", + "NEW_BUTTON": "新しい記事", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "公開済み", + "DRAFT": "下書き", + "ARCHIVED": "アーカイブ" + }, + "TITLES": { + "ALL_ARTICLES": "すべての記事", + "MINE": "私の記事", + "DRAFT": "下書き記事", + "ARCHIVED": "アーカイブ記事" + }, + "LOCALE_SELECT": { + "TITLE": "ロケールを選択", + "PLACEHOLDER": "ロケールを選択", + "NO_RESULT": "ロケールが見つかりません", + "SEARCH_PLACEHOLDER": "ロケールを検索" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "すべての記事", + "PUBLISH_BUTTON": "公開", + "MOVE_TO_ARCHIVE_BUTTON": "アーカイブに移動", + "PREVIEW": "プレビュー", + "ADD_TRANSLATION": "翻訳を追加", + "OPEN_SIDEBAR": "サイドバーを開く", + "CLOSE_SIDEBAR": "サイドバーを閉じる", + "SAVING": "保存中...", + "SAVED": "保存済み" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "画像をアップロード", + "UPLOADING": "アップロード中...", + "SUCCESS": "画像が正常にアップロードされました", + "ERROR": "画像のアップロード中にエラーが発生しました", + "UN_AUTHORIZED_ERROR": "画像をアップロードする権限がありません", + "ERROR_FILE_SIZE": "画像サイズは {size}MB 未満である必要があります", + "ERROR_FILE_FORMAT": "画像形式は jpg、jpeg または png である必要があります", + "ERROR_FILE_DIMENSIONS": "画像の寸法は 2000 x 2000 未満である必要があります" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "記事の設定", + "FORM": { + "CATEGORY": { + "LABEL": "カテゴリー", + "TITLE": "カテゴリーを選択", + "PLACEHOLDER": "カテゴリーを選択", + "NO_RESULT": "カテゴリーが見つかりません", + "SEARCH_PLACEHOLDER": "カテゴリーを検索" + }, + "AUTHOR": { + "LABEL": "著者", + "TITLE": "著者を選択", + "PLACEHOLDER": "著者を選択", + "NO_RESULT": "著者が見つかりません", + "SEARCH_PLACEHOLDER": "著者を検索" + }, + "META_TITLE": { + "LABEL": "メタタイトル", + "PLACEHOLDER": "メタタイトルを追加" + }, + "META_DESCRIPTION": { + "LABEL": "メタ説明", + "PLACEHOLDER": "SEO結果を向上させるためにメタ説明を追加してください..." + }, + "META_TAGS": { + "LABEL": "メタタグ", + "PLACEHOLDER": "カンマ区切りでメタタグを追加..." + } + }, + "BUTTONS": { + "ARCHIVE": "記事をアーカイブ", + "DELETE": "記事を削除" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "未分類", + "SEARCH_RESULTS": "{query} の検索結果", + "EMPTY_TEXT": "返信に挿入する記事を検索します。", + "SEARCH_LOADER": "検索中...", + "INSERT_ARTICLE": "挿入", + "NO_RESULT": "記事が見つかりません", + "COPY_LINK": "記事リンクをクリップボードにコピー", + "OPEN_LINK": "新しいタブで記事を開く", + "PREVIEW_LINK": "記事をプレビュー" + }, + "PORTAL": { + "HEADER": "ポータル", + "DEFAULT": "デフォルト", + "NEW_BUTTON": "新しいポータル", + "ACTIVE_BADGE": "アクティブ", + "CHOOSE_LOCALE_LABEL": "ロケールを選択", + "LOADING_MESSAGE": "ポータルを読み込み中...", + "ARTICLES_LABEL": "記事", + "NO_PORTALS_MESSAGE": "利用可能なポータルがありません", + "ADD_NEW_LOCALE": "新しいロケールを追加", + "POPOVER": { + "TITLE": "ポータル", + "PORTAL_SETTINGS": "ポータル設定", + "SUBTITLE": "複数のポータルを持ち、それぞれに異なるロケールを設定できます。", + "CANCEL_BUTTON_LABEL": "キャンセル", + "CHOOSE_LOCALE_BUTTON": "ロケールを選択" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "記事", + "ADD": "ロケールを追加", + "VISIT": "サイトを訪問", + "SETTINGS": "設定", + "DELETE": "削除" + }, + "PORTAL_CONFIG": { + "TITLE": "ポータル設定", + "ITEMS": { + "NAME": "名前", + "DOMAIN": "カスタムドメイン", + "SLUG": "スラッグ", + "TITLE": "ポータルタイトル", + "THEME": "テーマカラー", + "SUB_TEXT": "ポータルサブテキスト" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "利用可能なロケール", + "TABLE": { + "NAME": "ロケール名", + "CODE": "ロケールコード", + "ARTICLE_COUNT": "記事数", + "CATEGORIES": "カテゴリー数", + "SWAP": "交換", + "DELETE": "削除", + "DEFAULT_LOCALE": "デフォルト" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "ポータルを削除", + "MESSAGE": "このポータルを削除してもよろしいですか", + "YES": "はい、ポータルを削除します", + "NO": "いいえ、ポータルを保持します", + "API": { + "DELETE_SUCCESS": "ポータルが正常に削除されました", + "DELETE_ERROR": "ポータルの削除中にエラーが発生しました" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "ポータルを編集", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "基本情報" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "ポータルのカスタマイズ" + }, + "CATEGORY_SETTINGS": { + "TITLE": "カテゴリー" + }, + "LOCALE_SETTINGS": { + "TITLE": "ロケール" + } + }, + "CATEGORIES": { + "TITLE": "カテゴリー", + "NEW_CATEGORY": "新しいカテゴリー", + "TABLE": { + "NAME": "名前", + "DESCRIPTION": "説明", + "LOCALE": "ロケール", + "ARTICLE_COUNT": "記事数", + "ACTION_BUTTON": { + "EDIT": "カテゴリーを編集", + "DELETE": "カテゴリーを削除" + }, + "EMPTY_TEXT": "カテゴリーが見つかりません" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "基本設定を更新" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "ヘルプセンター情報", + "BODY": "ポータルの基本情報" + }, + "CUSTOMIZATION": { + "TITLE": "ヘルプセンターのカスタマイズ", + "BODY": "ポータルをカスタマイズ" + }, + "FINISH": { + "TITLE": "完成! 🎉", + "BODY": "すべて設定完了です!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "戻る", + "BASIC_SETTINGS_PAGE": { + "HEADER": "ポータルを作成", + "TITLE": "ヘルプセンター情報", + "CREATE_BASIC_SETTING_BUTTON": "ポータルの基本設定を作成" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "ポータルのカスタマイズ", + "TITLE": "ヘルプセンターのカスタマイズ", + "UPDATE_PORTAL_BUTTON": "ポータル設定を更新" + }, + "FINISH_PAGE": { + "TITLE": "完成!🎉 すべて設定完了です!", + "MESSAGE": "この作成されたポータルはすべてのポータルページで確認できます。", + "FINISH": "すべてのポータルページに移動" + } + }, + "LOGO": { + "LABEL": "ロゴ", + "UPLOAD_BUTTON": "ロゴをアップロード", + "HELP_TEXT": "このロゴはポータルのヘッダーに表示されます。", + "IMAGE_UPLOAD_SUCCESS": "ロゴが正常にアップロードされました", + "IMAGE_UPLOAD_ERROR": "ロゴの削除に成功しました", + "IMAGE_DELETE_ERROR": "ロゴの削除中にエラーが発生しました" + }, + "NAME": { + "LABEL": "名前", + "PLACEHOLDER": "ポータル名", + "HELP_TEXT": "この名前は公開ポータルで内部的に使用されます。", + "ERROR": "名前が必須です" + }, + "SLUG": { + "LABEL": "スラッグ", + "PLACEHOLDER": "URL用のポータルスラッグ", + "ERROR": "スラッグが必須です" + }, + "DOMAIN": { + "LABEL": "カスタムドメイン", + "PLACEHOLDER": "ポータルカスタムドメイン", + "HELP_TEXT": "ポータルにカスタムドメインを使用する場合のみ追加してください。例: {exampleURL}", + "ERROR": "有効なドメインURLを入力してください" + }, + "HOME_PAGE_LINK": { + "LABEL": "ホームページリンク", + "PLACEHOLDER": "ポータルホームページリンク", + "HELP_TEXT": "ポータルからホームページに戻るためのリンク。例: {exampleURL}", + "ERROR": "有効なホームページURLを入力してください" + }, + "THEME_COLOR": { + "LABEL": "ポータルテーマカラー", + "HELP_TEXT": "この色はポータルのテーマカラーとして表示されます。" + }, + "PAGE_TITLE": { + "LABEL": "ページタイトル", + "PLACEHOLDER": "ポータルページタイトル", + "HELP_TEXT": "このページタイトルは公開ポータルで使用されます。", + "ERROR": "ページタイトルが必須です" + }, + "HEADER_TEXT": { + "LABEL": "ヘッダーテキスト", + "PLACEHOLDER": "ポータルヘッダーテキスト", + "HELP_TEXT": "このポータルヘッダーテキストは公開ポータルで使用されます。", + "ERROR": "ポータルヘッダーテキストが必須です" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "ポータルが正常に作成されました。", + "ERROR_MESSAGE_FOR_BASIC": "ポータルを作成できませんでした。再試行してください。", + "SUCCESS_MESSAGE_FOR_UPDATE": "ポータルが正常に更新されました。", + "ERROR_MESSAGE_FOR_UPDATE": "ポータルを更新できませんでした。再試行してください。" + } + }, + "ADD_LOCALE": { + "TITLE": "新しいロケールを追加", + "SUB_TITLE": "利用可能な翻訳リストに新しいロケールを追加します。", + "PORTAL": "ポータル", + "LOCALE": { + "LABEL": "ロケール", + "PLACEHOLDER": "ロケールを選択", + "ERROR": "ロケールは必須です" + }, + "BUTTONS": { + "CREATE": "ロケールを作成", + "CANCEL": "キャンセル" + }, + "API": { + "SUCCESS_MESSAGE": "ロケールが正常に追加されました", + "ERROR_MESSAGE": "ロケールを追加できませんでした。再試行してください。" + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "デフォルトロケールが正常に更新されました", + "ERROR_MESSAGE": "デフォルトロケールを更新できませんでした。再試行してください。" + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "ロケールがポータルから正常に削除されました", + "ERROR_MESSAGE": "ロケールをポータルから削除できませんでした。再試行してください。" + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "記事を読み込み中...", + "404": "検索に一致する記事がありません 🔍", + "NO_ARTICLES": "利用可能な記事がありません", + "HEADERS": { + "TITLE": "タイトル", + "CATEGORY": "カテゴリー", + "READ_COUNT": "閲覧数", + "STATUS": "状況", + "LAST_EDITED": "最終編集" + }, + "COLUMNS": { + "BY": "担当者", + "AUTHOR_NOT_AVAILABLE": "担当者が利用できません" + } + }, + "EDIT_ARTICLE": { + "LOADING": "記事を読み込み中...", + "TITLE_PLACEHOLDER": "記事のタイトルをここに入力", + "CONTENT_PLACEHOLDER": "ここに記事を書いてください", + "API": { + "ERROR": "記事の保存中にエラーが発生しました" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "記事の公開中にエラーが発生しました", + "SUCCESS": "記事が正常に公開されました" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "記事のアーカイブ中にエラーが発生しました", + "SUCCESS": "記事が正常にアーカイブされました" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "記事の下書き保存中にエラーが発生しました", + "SUCCESS": "記事が正常に下書き保存されました" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "削除の確認", + "MESSAGE": "記事を削除してもよろしいですか?", + "YES": "削除する", + "NO": "いいえ、保存しておきます" + } + }, + "API": { + "SUCCESS_MESSAGE": "記事が正常に削除されました", + "ERROR_MESSAGE": "記事の削除中にエラーが発生しました" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "記事の見出しと内容を追加してから設定を更新してください" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "記事を検索" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "カテゴリーを作成", + "SUB_TITLE": "カテゴリーは公開ポータルで記事を分類するために使用されます。", + "PORTAL": "ポータル", + "LOCALE": "ロケール", + "NAME": { + "LABEL": "名前", + "PLACEHOLDER": "カテゴリー名", + "HELP_TEXT": "カテゴリー名とアイコンは公開ポータルで記事を分類するために使用されます。", + "ERROR": "名前が必須です" + }, + "SLUG": { + "LABEL": "スラッグ", + "PLACEHOLDER": "URL用のカテゴリーのスラッグ", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "スラッグが必須です" + }, + "DESCRIPTION": { + "LABEL": "説明", + "PLACEHOLDER": "カテゴリーについての簡単な説明を入力してください。", + "ERROR": "説明は必須です" + }, + "BUTTONS": { + "CREATE": "カテゴリーを作成", + "CANCEL": "キャンセル" + }, + "API": { + "SUCCESS_MESSAGE": "カテゴリーが正常に作成されました", + "ERROR_MESSAGE": "カテゴリーの作成中にエラーが発生しました" + } + }, + "EDIT": { + "TITLE": "カテゴリーを編集", + "SUB_TITLE": "カテゴリーを編集すると、公開ポータルのカテゴリーが更新されます。", + "PORTAL": "ポータル", + "LOCALE": "ロケール", + "NAME": { + "LABEL": "名前", + "PLACEHOLDER": "カテゴリー名", + "HELP_TEXT": "カテゴリー名とアイコンは公開ポータルで記事を分類するために使用されます。", + "ERROR": "名前が必須です" + }, + "SLUG": { + "LABEL": "スラッグ", + "PLACEHOLDER": "URL用のカテゴリーのスラッグ", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "スラッグが必須です" + }, + "DESCRIPTION": { + "LABEL": "説明", + "PLACEHOLDER": "カテゴリーについての簡単な説明を入力してください。", + "ERROR": "説明は必須です" + }, + "BUTTONS": { + "CREATE": "カテゴリーを更新", + "CANCEL": "キャンセル" + }, + "API": { + "SUCCESS_MESSAGE": "カテゴリーが正常に更新されました", + "ERROR_MESSAGE": "カテゴリーの更新中にエラーが発生しました" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "カテゴリーが正常に削除されました", + "ERROR_MESSAGE": "カテゴリーの削除中にエラーが発生しました" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "記事を検索", + "PLACEHOLDER": "記事を検索", + "NO_RESULT": "記事が見つかりません", + "SEARCHING": "検索中...", + "SEARCH_BUTTON": "検索", + "INSERT_ARTICLE": "リンクを挿入", + "IFRAME_ERROR": "URLが空または無効です。コンテンツを表示できません。", + "OPEN_ARTICLE_SEARCH": "ヘルプセンターから記事を挿入", + "SUCCESS_ARTICLE_INSERTED": "記事が正常に挿入されました", + "PREVIEW_LINK": "記事をプレビュー", + "CANCEL": "閉じる", + "BACK": "戻る", + "BACK_RESULTS": "結果に戻る" + }, + "UPGRADE_PAGE": { + "TITLE": "ヘルプセンター", + "DESCRIPTION": "ユーザーフレンドリーなセルフサービスポータルを作成します。ユーザーが記事にアクセスし、24時間365日サポートを受けられるようにします。この機能を有効にするには、サブスクリプションをアップグレードしてください。", + "SELF_HOSTED_DESCRIPTION": "ユーザーフレンドリーなセルフサービスポータルを作成します。ユーザーが記事にアクセスし、24時間365日サポートを受けられるようにします。この機能を有効にするには、管理者に連絡してください。", + "BUTTON": { + "LEARN_MORE": "詳細を確認", + "UPGRADE": "アップグレード" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "複数のポータル", + "DESCRIPTION": "同じアカウントを使用して、異なる製品のために複数のヘルプセンターポータルを作成します。" + }, + "LOCALES": { + "TITLE": "ロケールの完全サポート", + "DESCRIPTION": "ポータルをあなたの言語にローカライズします。すべてのロケールをサポートし、各記事の翻訳を可能にします。" + }, + "SEO": { + "TITLE": "SEOに優れたデザイン", + "DESCRIPTION": "メタタグをカスタマイズして、SEOに優れたページで検索エンジンでの可視性を向上させます。" + }, + "API": { + "TITLE": "完全なAPIサポート", + "DESCRIPTION": "APIを使用して、サードパーティのフロントエンドフレームワークでポータルをヘッドレスCMSとして使用します。" + } + } + }, + "LOADING": "読み込み中...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} 回の閲覧", + "DROPDOWN_MENU": { + "PUBLISH": "公開", + "DRAFT": "下書き", + "ARCHIVE": "アーカイブ", + "DELETE": "削除" + }, + "STATUS": { + "DRAFT": "下書き", + "PUBLISHED": "公開済み", + "ARCHIVED": "アーカイブ" + }, + "CATEGORY": { + "UNCATEGORISED": "未分類" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "すべての記事", + "MINE": "自分", + "DRAFT": "下書き", + "PUBLISHED": "公開済み", + "ARCHIVED": "アーカイブ" + }, + "CATEGORY": { + "ALL": "すべてのカテゴリー" + }, + "LOCALE": { + "ALL": "すべてのロケール" + }, + "NEW_ARTICLE": "新しい記事" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "記事を書く", + "SUBTITLE": "リッチな記事を書いて、始めましょう!", + "BUTTON_LABEL": "新しい記事" + }, + "MINE": { + "TITLE": "ここにはまだ記事がありません", + "SUBTITLE": "あなたが書いたすべての記事がここに表示されます。" + }, + "DRAFT": { + "TITLE": "下書きの記事はありません", + "SUBTITLE": "下書きの記事はここに表示されます" + }, + "PUBLISHED": { + "TITLE": "公開された記事はありません", + "SUBTITLE": "公開された記事はここに表示されます" + }, + "ARCHIVED": { + "TITLE": "アーカイブされた記事はありません", + "SUBTITLE": "アーカイブされた記事はポータルに表示されません。廃止された記事や古い記事をマークするために使用できます。" + }, + "CATEGORY": { + "TITLE": "このカテゴリーには記事がありません", + "SUBTITLE": "このカテゴリーの記事はここに表示されます" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "新しいカテゴリー", + "EDIT_CATEGORY": "カテゴリーを編集", + "CATEGORIES_COUNT": "{n} カテゴリー | {n} カテゴリー", + "BREADCRUMB": { + "CATEGORY_LOCALE": "カテゴリー ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} 記事) | {categoryName} ({categoryCount} 記事)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "カテゴリーが見つかりません", + "SUBTITLE": "カテゴリーはここに表示されます。「新しいカテゴリー」ボタンをクリックしてカテゴリーを追加できます。" + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} 記事 | {count} 記事" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "カテゴリーが正常に作成されました", + "ERROR_MESSAGE": "カテゴリーを作成できませんでした" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "カテゴリーが正常に更新されました", + "ERROR_MESSAGE": "カテゴリーを更新できませんでした" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "カテゴリーが正常に削除されました", + "ERROR_MESSAGE": "カテゴリーを削除できませんでした" + } + }, + "HEADER": { + "CREATE": "カテゴリーを作成", + "EDIT": "カテゴリーを編集", + "DESCRIPTION": "カテゴリーを編集すると、公開ポータルのカテゴリーが更新されます。", + "PORTAL": "ポータル", + "LOCALE": "ロケール" + }, + "FORM": { + "NAME": { + "LABEL": "名前", + "PLACEHOLDER": "カテゴリー名", + "ERROR": "名前が必須です" + }, + "SLUG": { + "LABEL": "スラッグ", + "PLACEHOLDER": "URL用のカテゴリーのスラッグ", + "ERROR": "スラッグが必須です", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "説明", + "PLACEHOLDER": "カテゴリーについての簡単な説明を入力してください。", + "ERROR": "説明は必須です" + } + }, + "BUTTONS": { + "CREATE": "作成", + "EDIT": "更新", + "CANCEL": "キャンセル" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "利用可能なロケールはありません | {n} ロケール | {n} ロケール", + "NEW_LOCALE_BUTTON_TEXT": "新しいロケール", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} 記事 | {count} 記事", + "CATEGORIES_COUNT": "{count} カテゴリー | {count} カテゴリー", + "DEFAULT": "デフォルト", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "デフォルトに設定", + "DELETE": "削除" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "新しいロケールを追加", + "DESCRIPTION": "この記事が書かれる言語を選択します。これが翻訳リストに追加され、後でさらに追加できます。", + "COMBOBOX": { + "PLACEHOLDER": "ロケールを選択..." + }, + "API": { + "SUCCESS_MESSAGE": "ロケールが正常に追加されました", + "ERROR_MESSAGE": "ロケールを追加できませんでした。再試行してください。" + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "保存中...", + "SAVED": "保存済み" + }, + "PREVIEW": "プレビュー", + "PUBLISH": "公開", + "DRAFT": "下書き", + "ARCHIVE": "アーカイブ", + "BACK_TO_ARTICLES": "記事に戻る" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "その他のプロパティ", + "UNCATEGORIZED": "未分類", + "EDITOR_PLACEHOLDER": "何か書いてください..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "記事のプロパティ", + "META_DESCRIPTION": "メタ説明", + "META_DESCRIPTION_PLACEHOLDER": "メタ説明を追加", + "META_TITLE": "メタタイトル", + "META_TITLE_PLACEHOLDER": "メタタイトルを追加", + "META_TAGS": "メタタグ", + "META_TAGS_PLACEHOLDER": "メタタグを追加" + }, + "API": { + "ERROR": "記事の保存中にエラーが発生しました" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "新しいポータル", + "PORTALS": "ポータル", + "CREATE_PORTAL": "複数のポータルを作成および管理", + "ARTICLES": "記事", + "DOMAIN": "ドメイン", + "PORTAL_NAME": "ポータル名" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "新しいポータルを作成", + "DESCRIPTION": "ポータルに名前を付け、ユーザーフレンドリーなURLスラッグを作成します。後で設定で両方を変更できます。", + "CONFIRM_BUTTON_LABEL": "作成", + "NAME": { + "LABEL": "名前", + "PLACEHOLDER": "ユーザーガイド | Chatwoot", + "MESSAGE": "ポータルの名前を選択してください。", + "ERROR": "名前が必須です" + }, + "SLUG": { + "LABEL": "スラッグ", + "PLACEHOLDER": "user-guide", + "ERROR": "スラッグが必須です", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "ロゴ", + "IMAGE_UPLOAD_ERROR": "画像をアップロードできませんでした!再試行してください", + "IMAGE_UPLOAD_SUCCESS": "画像が正常に追加されました。ロゴを保存するには変更を保存をクリックしてください", + "IMAGE_DELETE_SUCCESS": "ロゴが正常に削除されました", + "IMAGE_DELETE_ERROR": "ロゴを削除できませんでした", + "IMAGE_UPLOAD_SIZE_ERROR": "画像サイズは {size}MB 未満である必要があります" + }, + "NAME": { + "LABEL": "名前", + "PLACEHOLDER": "ポータル名", + "ERROR": "名前が必須です" + }, + "HEADER_TEXT": { + "LABEL": "ヘッダーテキスト", + "PLACEHOLDER": "ポータルヘッダーテキスト" + }, + "PAGE_TITLE": { + "LABEL": "ページタイトル", + "PLACEHOLDER": "ポータルページタイトル" + }, + "HOME_PAGE_LINK": { + "LABEL": "ホームページリンク", + "PLACEHOLDER": "ポータルホームページリンク", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "スラッグ", + "PLACEHOLDER": "ポータルスラッグ" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "ライブチャットウィジェット", + "PLACEHOLDER": "ライブチャットウィジェットを選択", + "HELP_TEXT": "ヘルプセンターに表示されるライブチャットウィジェットを選択します", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "ブランドカラー" + }, + "SAVE_CHANGES": "変更を保存" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "カスタムドメイン", + "LABEL": "カスタムドメイン:", + "DESCRIPTION": "ポータルをカスタムドメインでホストできます。例えば、あなたのウェブサイトがyourdomain.comで、ポータルをdocs.yourdomain.comで利用したい場合、このフィールドに入力してください。", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "ポータルカスタムドメイン", + "EDIT_BUTTON": "編集", + "ADD_BUTTON": "カスタムドメインを追加", + "STATUS": { + "LIVE": "Live", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "カスタムドメインを追加", + "EDIT_HEADER": "カスタムドメインを編集", + "ADD_CONFIRM_BUTTON_LABEL": "ドメインを追加", + "EDIT_CONFIRM_BUTTON_LABEL": "ドメインを更新", + "LABEL": "カスタムドメイン", + "PLACEHOLDER": "ポータルカスタムドメイン", + "ERROR": "カスタムドメインは必須です", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS設定", + "DESCRIPTION": "DNSプロバイダーのアカウントにログインし、サブドメインのCNAMEレコードをchatwoot.helpにポイントするように追加してください。", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "送信" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "{portalName}を削除", + "HEADER": "ポータルを削除", + "DESCRIPTION": "このポータルを永久に削除します。この操作は取り消せません。", + "DIALOG": { + "HEADER": "{portalName}を削除してもよろしいですか?", + "DESCRIPTION": "これは取り消せない永久的な操作です。", + "CONFIRM_BUTTON_LABEL": "削除" + } + }, + "EDIT_CONFIGURATION": "設定を編集" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "ポータルが正常に作成されました", + "ERROR_MESSAGE": "ポータルを作成できませんでした" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "ポータルが正常に更新されました", + "ERROR_MESSAGE": "ポータルを更新できませんでした" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "アップロード中...", + "UPLOAD": "Upload & Process", + "CANCEL": "キャンセル", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "生成中...", + "CONFIRM_DELETE": "Are you sure you want to delete {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "完了", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/inbox.json b/app/javascript/dashboard/i18n/locale/ja/inbox.json new file mode 100644 index 0000000..ceec4e0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "My Inbox", + "DISPLAY_DROPDOWN": "表示", + "LOADING": "通知を取得中", + "404": "このグループにはアクティブな通知がありません。", + "NO_NOTIFICATIONS": "通知はありません", + "NOTE": "すべての購読中のインボックスからの通知", + "NO_MESSAGES_AVAILABLE": "おっと!メッセージを取得できませんでした", + "SNOOZED_UNTIL": "スヌーズ終了まで:", + "SNOOZED_UNTIL_TOMORROW": "明日までスヌーズ", + "SNOOZED_UNTIL_NEXT_WEEK": "来週までスヌーズ" + }, + "ACTION_HEADER": { + "SNOOZE": "通知をスヌーズ", + "DELETE": "通知を削除", + "BACK": "戻る" + }, + "TYPES": { + "CONVERSATION_MENTION": "会話でメンションされました", + "CONVERSATION_CREATION": "新しい会話が作成されました", + "CONVERSATION_ASSIGNMENT": "会話があなたに割り当てられました", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "割り当てられた会話に新しいメッセージがあります", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "参加中の会話に新しいメッセージがあります", + "SLA_MISSED_FIRST_RESPONSE": "会話でSLA目標の最初の応答が未達です", + "SLA_MISSED_NEXT_RESPONSE": "会話でSLA目標の次の応答が未達です", + "SLA_MISSED_RESOLUTION": "会話でSLA目標の解決が未達です" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "メンションされました", + "CONVERSATION_ASSIGNMENT": "割り当てられました", + "CONVERSATION_CREATION": "新しい会話", + "SLA_MISSED_FIRST_RESPONSE": "SLA違反", + "SLA_MISSED_NEXT_RESPONSE": "SLA違反", + "SLA_MISSED_RESOLUTION": "SLA違反", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "新しいメッセージ", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "新しいメッセージ", + "SNOOZED_UNTIL": "{time}スヌーズ中", + "SNOOZED_ENDS": "スヌーズ終了" + }, + "NO_CONTENT": "コンテンツが利用できません", + "MENU_ITEM": { + "MARK_AS_READ": "既読にする", + "MARK_AS_UNREAD": "未読にする", + "SNOOZE": "スヌーズ", + "DELETE": "削除", + "MARK_ALL_READ": "すべて既読にする", + "DELETE_ALL": "すべて削除", + "DELETE_ALL_READ": "既読をすべて削除" + }, + "DISPLAY_MENU": { + "SORT": "並び替え", + "DISPLAY": "表示:", + "SORT_OPTIONS": { + "NEWEST": "最新", + "OLDEST": "最古", + "PRIORITY": "優先度" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "スヌーズ中", + "READ": "既読", + "LABELS": "ラベル", + "CONVERSATION_ID": "会話ID" + } + }, + "ALERTS": { + "MARK_AS_READ": "通知を既読にしました", + "MARK_AS_UNREAD": "通知を未読にしました", + "SNOOZE": "通知をスヌーズしました", + "DELETE": "通知を削除しました", + "MARK_ALL_READ": "すべての通知を既読にしました", + "DELETE_ALL": "すべての通知を削除しました", + "DELETE_ALL_READ": "すべての既読通知を削除しました" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json new file mode 100644 index 0000000..bbc4a0d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "受信トレイ", + "DESCRIPTION": "チャンネルは、顧客があなたとやり取りするために選択する通信手段です。受信トレイは、特定のチャンネルのやり取りを管理する場所です。メール、ライブチャット、ソーシャルメディアなど、さまざまなソースからの通信を含むことができます。", + "LEARN_MORE": "受信トレイについて詳しく知る", + "RECONNECTION_REQUIRED": "受信トレイが切断されました。再認証するまで新しいメッセージを受信できません。", + "CLICK_TO_RECONNECT": "再接続するにはここをクリック。", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "このアカウントに紐付けられている受信トレイはありません。" + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "チャンネルを選択", + "BODY": "Chatwootと統合するプロバイダを選択してください。" + }, + "INBOX": { + "TITLE": "受信トレイを作成", + "BODY": "アカウントを認証し、受信トレイを作成します。" + }, + "AGENT": { + "TITLE": "担当者を追加", + "BODY": "作成した受信トレイに担当者を追加します。" + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "すべての準備が完了しました!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "受信トレイ名", + "PLACEHOLDER": "受信トレイ名を入力してください (例: Acme Inc)", + "ERROR": "有効な受信トレイ名を入力してください" + }, + "WEBSITE_NAME": { + "LABEL": "ウェブサイト名", + "PLACEHOLDER": "ウェブサイト名を入力してください(例:Acme Inc)" + }, + "FB": { + "HELP": "PS: サインインすることで、私たちはあなたのページのメッセージにのみアクセスできます。あなたのプライベートメッセージはChatwootによってアクセスすることはできません。", + "CHOOSE_PAGE": "ページを選択", + "CHOOSE_PLACEHOLDER": "リストからページを選択", + "INBOX_NAME": "受信トレイ名", + "ADD_NAME": "受信トレイに名前をつける", + "PICK_NAME": "受信トレイの名前を選択", + "PICK_A_VALUE": "値を選択", + "CREATE_INBOX": "受信トレイを作成" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continue with Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile", + "HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ", + "ERROR_MESSAGE": "There was an error connecting to Instagram, please try again", + "ERROR_AUTH": "There was an error connecting to Instagram, please try again", + "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "Twitterプロフィールをチャンネルとして追加するには、「Twitterでサインイン」をクリックしてTwitterプロフィールを認証する必要があります。", + "ERROR_MESSAGE": "Twitterへの接続中にエラーが発生しました。もう一度お試しください。", + "TWEETS": { + "ENABLE": "言及されたツイートから会話を作成する" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "ウェブサイトのチャンネル", + "DESC": "ウェブサイトのためのチャネルを作成し、ウェブサイトウィジェットを介してあなたの顧客をサポートを開始してください。", + "LOADING_MESSAGE": "ウェブサイトサポートチャンネルの作成", + "CHANNEL_AVATAR": { + "LABEL": "チャネルアバター" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "Webhook URLを入力してください", + "ERROR": "有効なURLを入力してください" + }, + "CHANNEL_DOMAIN": { + "LABEL": "ウェブサイトのドメイン", + "PLACEHOLDER": "ウェブサイトのドメインを入力してください(例:acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "冒頭の見出し", + "PLACEHOLDER": "こんにちは!" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "冒頭のタグライン", + "PLACEHOLDER": "簡単に連絡が取れる状態です。なんでも聞いてください。フィードバックの共有も歓迎です。" + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "チャンネルグリーティングメッセージ", + "PLACEHOLDER": "Acme Incは通常数時間で返信します。" + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "チャンネルグリーティングを有効にする", + "HELP_TEXT": "新しい会話が作成されたときに自動的に挨拶メッセージを送信します。", + "ENABLED": "有効です", + "DISABLED": "無効です" + }, + "REPLY_TIME": { + "TITLE": "返信時間を設定", + "IN_A_FEW_MINUTES": "数分以内", + "IN_A_FEW_HOURS": "数時間以内", + "IN_A_DAY": "1日以内", + "HELP_TEXT": "この返信時間はライブチャットウィジェットに表示されます" + }, + "WIDGET_COLOR": { + "LABEL": "ウィジェットの色", + "PLACEHOLDER": "ウィジェットで使用されている色を更新" + }, + "SUBMIT_BUTTON": "受信トレイを作成", + "API": { + "ERROR_MESSAGE": "ウェブサイトチャンネルを作成できませんでした。もう一度お試しください" + } + }, + "TWILIO": { + "TITLE": "Twilio SMS/WhatsApp チャンネル", + "DESC": "Twilioを統合し、SMSまたはWhatsAppを通じて顧客をサポートし始めましょう。", + "ACCOUNT_SID": { + "LABEL": "アカウント SID", + "PLACEHOLDER": "Twilio アカウント SIDを入力してください", + "ERROR": "このフィールドは必須項目です" + }, + "API_KEY": { + "USE_API_KEY": "APIキー認証を使用", + "LABEL": "APIキー SID", + "PLACEHOLDER": "APIキー SIDを入力してください", + "ERROR": "このフィールドは必須項目です" + }, + "API_KEY_SECRET": { + "LABEL": "APIキーシークレット", + "PLACEHOLDER": "APIキーシークレットを入力してください", + "ERROR": "このフィールドは必須項目です" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "メッセージングサービス SID", + "PLACEHOLDER": "Twilio メッセージングサービス SIDを入力してください", + "ERROR": "このフィールドは必須項目です", + "USE_MESSAGING_SERVICE": "Twilio メッセージングサービスを使用" + }, + "CHANNEL_TYPE": { + "LABEL": "チャンネルタイプ", + "ERROR": "チャンネルタイプを選択してください" + }, + "AUTH_TOKEN": { + "LABEL": "認証トークン", + "PLACEHOLDER": "Twilio 認証トークンを入力してください", + "ERROR": "このフィールドは必須項目です" + }, + "CHANNEL_NAME": { + "LABEL": "受信トレイ名", + "PLACEHOLDER": "受信トレイ名を入力してください", + "ERROR": "このフィールドは必須項目です" + }, + "PHONE_NUMBER": { + "LABEL": "電話番号", + "PLACEHOLDER": "送信先の電話番号を入力してください。", + "ERROR": "有効な電話番号を提供してください。`+`記号で始まり、スペースを含まない必要があります。" + }, + "API_CALLBACK": { + "TITLE": "コールバック URL", + "SUBTITLE": "Twilio のメッセージコールバックURLをここで指定する必要があります。" + }, + "SUBMIT_BUTTON": "Twilio チャンネルを作成", + "API": { + "ERROR_MESSAGE": "Twilio の認証ができませんでした。もう一度やり直してください。" + } + }, + "SMS": { + "TITLE": "SMSチャンネル", + "DESC": "SMSを通じて顧客をサポートし始めましょう。", + "PROVIDERS": { + "LABEL": "APIプロバイダー", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandwidth" + }, + "API": { + "ERROR_MESSAGE": "SMSチャンネルを保存できませんでした" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "アカウントID", + "PLACEHOLDER": "BandwidthアカウントIDを入力してください", + "ERROR": "このフィールドは必須項目です" + }, + "API_KEY": { + "LABEL": "APIキー", + "PLACEHOLDER": "Bandwidth APIキーを入力してください", + "ERROR": "このフィールドは必須項目です" + }, + "API_SECRET": { + "LABEL": "APIシークレット", + "PLACEHOLDER": "Bandwidth APIシークレットを入力してください", + "ERROR": "このフィールドは必須項目です" + }, + "APPLICATION_ID": { + "LABEL": "アプリケーションID", + "PLACEHOLDER": "BandwidthアプリケーションIDを入力してください", + "ERROR": "このフィールドは必須項目です" + }, + "INBOX_NAME": { + "LABEL": "受信トレイ名", + "PLACEHOLDER": "受信トレイ名を入力してください", + "ERROR": "このフィールドは必須項目です" + }, + "PHONE_NUMBER": { + "LABEL": "電話番号", + "PLACEHOLDER": "送信先の電話番号を入力してください。", + "ERROR": "有効な電話番号を提供してください。`+`記号で始まり、スペースを含まない必要があります。" + }, + "SUBMIT_BUTTON": "Bandwidthチャンネルを作成", + "API": { + "ERROR_MESSAGE": "Bandwidthの認証に失敗しました。もう一度お試しください" + }, + "API_CALLBACK": { + "TITLE": "コールバック URL", + "SUBTITLE": "BandwidthでメッセージコールバックURLをここに記載されたURLで設定する必要があります。" + } + } + }, + "WHATSAPP": { + "TITLE": "WhatsAppチャンネル", + "DESC": "WhatsAppを通じて顧客をサポートし始めましょう。", + "PROVIDERS": { + "LABEL": "APIプロバイダー", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "受信トレイ名", + "PLACEHOLDER": "受信トレイ名を入力してください", + "ERROR": "このフィールドは必須項目です" + }, + "PHONE_NUMBER": { + "LABEL": "電話番号", + "PLACEHOLDER": "送信先の電話番号を入力してください。", + "ERROR": "有効な電話番号を提供してください。`+`記号で始まり、スペースを含まない必要があります。" + }, + "PHONE_NUMBER_ID": { + "LABEL": "電話番号ID", + "PLACEHOLDER": "Facebook開発者ダッシュボードから取得した電話番号IDを入力してください。", + "ERROR": "有効な値を入力してください。" + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "ビジネスアカウントID", + "PLACEHOLDER": "Facebook開発者ダッシュボードから取得したビジネスアカウントIDを入力してください。", + "ERROR": "有効な値を入力してください。" + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook検証トークン", + "PLACEHOLDER": "FacebookのWebhookに設定する検証トークンを入力してください。", + "ERROR": "有効な値を入力してください。" + }, + "API_KEY": { + "LABEL": "APIキー", + "SUBTITLE": "WhatsApp APIキーを設定してください。", + "PLACEHOLDER": "APIキー", + "ERROR": "有効な値を入力してください。" + }, + "API_CALLBACK": { + "TITLE": "コールバック URL", + "SUBTITLE": "Facebook開発者ポータルでWebhook URLと検証トークンを以下の値で設定する必要があります。", + "WEBHOOK_URL": "Webhook URL", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook検証トークン" + }, + "SUBMIT_BUTTON": "WhatsAppチャンネルを作成", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "WhatsAppチャンネルを保存できませんでした" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "電話番号", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "アカウント SID", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "認証トークン", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "APIキー SID", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "APIキーシークレット", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "APIチャンネル", + "DESC": "APIチャンネルと連携し、顧客のサポートを開始します。", + "CHANNEL_NAME": { + "LABEL": "チャンネル名", + "PLACEHOLDER": "チャンネル名を入力してください", + "ERROR": "このフィールドは必須項目です" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "SUBTITLE": "イベントのコールバックを受け取りたいURLを設定してください。", + "PLACEHOLDER": "Webhook URL" + }, + "SUBMIT_BUTTON": "APIチャンネルを作成", + "API": { + "ERROR_MESSAGE": "APIチャンネルを保存できませんでした" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "Eメールチャンネル", + "DESC": "Eメール受信トレイを統合します。", + "CHANNEL_NAME": { + "LABEL": "チャンネル名", + "PLACEHOLDER": "チャンネル名を入力してください", + "ERROR": "このフィールドは必須項目です" + }, + "EMAIL": { + "LABEL": "Eメール", + "SUBTITLE": "顧客がサポートチケットを送信するメールアドレス", + "PLACEHOLDER": "Eメール" + }, + "SUBMIT_BUTTON": "Eメールチャンネルを作成", + "API": { + "ERROR_MESSAGE": "Eメールチャンネルを保存できませんでした" + }, + "FINISH_MESSAGE": "以下のメールアドレスにメールを転送します。", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "ここをクリック", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "LINEチャンネル", + "DESC": "LINEチャンネルと統合し、顧客のサポートを開始します。", + "CHANNEL_NAME": { + "LABEL": "チャンネル名", + "PLACEHOLDER": "チャンネル名を入力してください", + "ERROR": "このフィールドは必須項目です" + }, + "LINE_CHANNEL_ID": { + "LABEL": "LINEチャンネルID", + "PLACEHOLDER": "LINEチャンネルID" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "LINEチャンネルシークレット", + "PLACEHOLDER": "LINEチャンネルシークレット" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "LINEチャンネルトークン", + "PLACEHOLDER": "LINEチャンネルトークン" + }, + "SUBMIT_BUTTON": "LINEチャンネルを作成", + "API": { + "ERROR_MESSAGE": "LINEチャンネルを保存できませんでした" + }, + "API_CALLBACK": { + "TITLE": "コールバックURL", + "SUBTITLE": "LINEアプリケーションでWebhook URLをここに記載されたURLで設定する必要があります。" + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Telegramチャンネル", + "DESC": "Telegramチャンネルと統合し、顧客のサポートを開始します。", + "BOT_TOKEN": { + "LABEL": "ボットトークン", + "SUBTITLE": "Telegram BotFatherから取得したボットトークンを設定してください。", + "PLACEHOLDER": "ボットトークン" + }, + "SUBMIT_BUTTON": "Telegramチャンネルを作成", + "API": { + "ERROR_MESSAGE": "Telegramチャンネルを保存できませんでした" + } + }, + "AUTH": { + "TITLE": "チャンネルを選択", + "DESC": "Chatwootは、ライブチャットウィジェット、Facebook Messenger、Twitterプロフィール、WhatsApp、Eメールなどのチャンネルをサポートしています。カスタムチャンネルを作成したい場合は、APIチャンネルを使用して作成できます。開始するには、以下のチャンネルのいずれかを選択してください。", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "ウェブサイト", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "Eメール", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "担当者", + "DESC": "ここでは、新しく作成した受信トレイを管理する担当者を追加できます。選択された担当者のみが受信トレイにアクセスできます。この受信トレイに割り当てられていない担当者は、ログイン時にこの受信トレイ内のメッセージを表示または応答することができません。Webhooks
Webhooks は、すべてのアカウントで定義可能なHTTP コールバックです。これらは、メッセージの作成などChatwoot上でのイベントをきっかけに実行されます。このアカウントでは、1つ以上のwebhookが作成できます。
webhookを作成するには、webhookを作成ボタンをクリックしてください。また、作成した webhook を削除ボタンを押して削除することもできます。
ダッシュボードアプリ
ダッシュボードアプリを使用すると、組織はChatwootダッシュボード内にアプリケーションを埋め込んで、カスタマーサポート担当者にコンテキストを提供できます。この機能により、アプリケーションを独立して作成し、ユーザー情報、注文履歴、または以前の支払い履歴を提供するためにダッシュボード内に埋め込むことができます。
Chatwootのダッシュボードを使用してアプリケーションを埋め込むと、アプリケーションはウィンドウイベントとして会話と連絡先のコンテキストを取得します。ページ上でメッセージイベントのリスナーを実装してコンテキストを受信します。
新しいダッシュボードアプリを追加するには、「新しいダッシュボードアプリを追加」ボタンをクリックしてください。
", + "DESCRIPTION": "ダッシュボードアプリを使用すると、組織はダッシュボード内にアプリケーションを埋め込んで、カスタマーサポート担当者にコンテキストを提供できます。この機能により、アプリケーションを独立して作成し、ユーザー情報、注文履歴、または以前の支払い履歴を提供するために埋め込むことができます。", + "LEARN_MORE": "ダッシュボードアプリについて詳しく知る", + "LIST": { + "404": "このアカウントにはまだダッシュボードアプリが設定されていません", + "LOADING": "ダッシュボードアプリを取得中...", + "TABLE_HEADER": { + "NAME": "名前", + "ENDPOINT": "エンドポイント" + }, + "EDIT_TOOLTIP": "アプリを編集", + "DELETE_TOOLTIP": "アプリを削除" + }, + "FORM": { + "TITLE_LABEL": "名前", + "TITLE_PLACEHOLDER": "ダッシュボードアプリの名前を入力", + "TITLE_ERROR": "ダッシュボードアプリの名前が必要です", + "URL_LABEL": "エンドポイント", + "URL_PLACEHOLDER": "アプリがホストされているエンドポイントURLを入力", + "URL_ERROR": "有効なURLが必要です" + }, + "CREATE": { + "HEADER": "新しいダッシュボードアプリを追加", + "FORM_SUBMIT": "送信", + "FORM_CANCEL": "キャンセル", + "API_SUCCESS": "ダッシュボードアプリが正常に設定されました", + "API_ERROR": "アプリを作成できませんでした。後でもう一度お試しください" + }, + "UPDATE": { + "HEADER": "ダッシュボードアプリを編集", + "FORM_SUBMIT": "更新", + "FORM_CANCEL": "キャンセル", + "API_SUCCESS": "ダッシュボードアプリが正常に更新されました", + "API_ERROR": "アプリを更新できませんでした。後でもう一度お試しください" + }, + "DELETE": { + "CONFIRM_YES": "はい、削除します", + "CONFIRM_NO": "いいえ、保持します", + "TITLE": "削除の確認", + "MESSAGE": "アプリを削除してもよろしいですか - {appName}?", + "API_SUCCESS": "ダッシュボードアプリが正常に削除されました", + "API_ERROR": "アプリを削除できませんでした。後でもう一度お試しください" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Linear Issueを作成/リンク", + "LOADING": "Linearの課題を取得中...", + "LOADING_ERROR": "Linearの課題を取得中にエラーが発生しました。もう一度お試しください", + "CREATE": "作成", + "LINK": { + "SEARCH": "課題を検索", + "SELECT": "課題を選択", + "TITLE": "リンク", + "EMPTY_LIST": "Linearの課題が見つかりません", + "LOADING": "読み込み中", + "ERROR": "Linearの課題を取得中にエラーが発生しました。もう一度お試しください", + "LINK_SUCCESS": "課題が正常にリンクされました", + "LINK_ERROR": "課題のリンク中にエラーが発生しました。もう一度お試しください", + "LINK_TITLE": "会話 (#{conversationId}) と {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Linearの課題を作成/リンク", + "DESCRIPTION": "会話からLinearの課題を作成するか、既存の課題をリンクしてシームレスに追跡します。", + "FORM": { + "TITLE": { + "LABEL": "タイトル", + "PLACEHOLDER": "タイトルを入力", + "REQUIRED_ERROR": "タイトルは必須です" + }, + "DESCRIPTION": { + "LABEL": "説明", + "PLACEHOLDER": "説明を入力" + }, + "TEAM": { + "LABEL": "チーム", + "PLACEHOLDER": "チームを選択", + "SEARCH": "チームを検索", + "REQUIRED_ERROR": "チームは必須です" + }, + "ASSIGNEE": { + "LABEL": "担当者", + "PLACEHOLDER": "担当者を選択", + "SEARCH": "担当者を検索" + }, + "PRIORITY": { + "LABEL": "優先度", + "PLACEHOLDER": "優先度を選択", + "SEARCH": "優先度を検索" + }, + "LABEL": { + "LABEL": "ラベル", + "PLACEHOLDER": "ラベルを選択", + "SEARCH": "ラベルを検索" + }, + "STATUS": { + "LABEL": "状況", + "PLACEHOLDER": "状況を選択", + "SEARCH": "状況を検索" + }, + "PROJECT": { + "LABEL": "プロジェクト", + "PLACEHOLDER": "プロジェクトを選択", + "SEARCH": "プロジェクトを検索" + } + }, + "CREATE": "作成", + "CANCEL": "キャンセル", + "CREATE_SUCCESS": "課題が正常に作成されました", + "CREATE_ERROR": "課題の作成中にエラーが発生しました。もう一度お試しください", + "LOADING_TEAM_ERROR": "チームの取得中にエラーが発生しました。もう一度お試しください", + "LOADING_TEAM_ENTITIES_ERROR": "チームエンティティの取得中にエラーが発生しました。もう一度お試しください" + }, + "ISSUE": { + "STATUS": "状況", + "PRIORITY": "優先度", + "ASSIGNEE": "担当者", + "LABELS": "ラベル", + "CREATED_AT": "{createdAt} に作成" + }, + "UNLINK": { + "TITLE": "リンク解除", + "SUCCESS": "課題のリンクが正常に解除されました", + "ERROR": "課題のリンク解除中にエラーが発生しました。もう一度お試しください" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "はい、削除します", + "CANCEL": "キャンセル" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "はい、削除します", + "CANCEL": "キャンセル" + } + } + }, + "CAPTAIN": { + "NAME": "キャプテン", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "アシスタント", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "コパイロット", + "TRY_THESE_PROMPTS": "これらのプロンプトを試してください", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "メッセージを送信...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Captainが考え中", + "YOU": "あなた", + "USE": "これを使用", + "RESET": "リセット", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "あなた", + "ASSISTANT": "アシスタント", + "MESSAGE_PLACEHOLDER": "Type your message...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "アップグレードしてCaptain AIを利用する", + "AVAILABLE_ON": "Captainは無料プランでは利用できません。", + "UPGRADE_PROMPT": "アシスタント、Copilotなどにアクセスするには、プランをアップグレードしてください。", + "UPGRADE_NOW": "今すぐアップグレード", + "CANCEL_ANYTIME": "プランはいつでも変更またはキャンセルできます" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "アシスタント、Copilotなどにアクセスするには、プランをアップグレードしてください。", + "ASK_ADMIN": "管理者にアップグレードを依頼してください。" + }, + "BANNER": { + "RESPONSES": "利用制限の 80% を超過しました。引き続き Captain AI を利用するには、アップグレードしてください。", + "DOCUMENTS": "ドキュメントの上限に達しました。Captain AI を引き続き利用するには、アップグレードしてください。" + }, + "FORM": { + "CANCEL": "キャンセル", + "CREATE": "作成", + "EDIT": "更新" + }, + "ASSISTANTS": { + "HEADER": "アシスタント", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "新しいアシスタントを作成", + "DELETE": { + "TITLE": "アシスタントを削除してもよろしいですか?", + "DESCRIPTION": "この操作は永久的です。アシスタントを削除すると、すべての接続された受信トレイから削除され、生成されたすべての知識が永久に消去されます。", + "CONFIRM": "はい、削除します", + "SUCCESS_MESSAGE": "アシスタントが正常に削除されました", + "ERROR_MESSAGE": "アシスタントの削除中にエラーが発生しました。もう一度お試しください。" + }, + "FORM_DESCRIPTION": "以下の詳細を入力して、アシスタントの名前、その目的を説明し、サポートする製品を指定してください。", + "CREATE": { + "TITLE": "アシスタントを作成", + "SUCCESS_MESSAGE": "アシスタントが正常に作成されました", + "ERROR_MESSAGE": "アシスタントの作成中にエラーが発生しました。もう一度お試しください。" + }, + "FORM": { + "UPDATE": "更新", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "機能", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "名前", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "説明", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "製品名", + "PLACEHOLDER": "Enter product name", + "ERROR": "製品名が必要です" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "機能", + "ALLOW_CONVERSATION_FAQS": "解決済みの会話からFAQを生成", + "ALLOW_MEMORIES": "顧客とのやり取りから重要な詳細を記憶としてキャプチャ", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "アシスタントを更新", + "SUCCESS_MESSAGE": "アシスタントが正常に更新されました", + "ERROR_MESSAGE": "アシスタントの更新中にエラーが発生しました。もう一度お試しください。", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "設定", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "アシスタントを削除", + "DESCRIPTION": "この操作は永久的です。アシスタントを削除すると、すべての接続された受信トレイから削除され、生成されたすべての知識が永久に消去されます。", + "BUTTON_TEXT": "{assistantName}を削除" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "アシスタントを編集", + "DELETE_ASSISTANT": "アシスタントを削除", + "VIEW_CONNECTED_INBOXES": "接続された受信トレイを表示" + }, + "EMPTY_STATE": { + "TITLE": "利用可能なアシスタントがありません", + "SUBTITLE": "アシスタントを作成して、お客様に迅速かつ正確な回答を提供します。アシスタントは、ヘルプ記事や過去の会話から学習します。", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "削除" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "作成", + "CANCEL": "キャンセル", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "検索..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "削除" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "作成", + "CANCEL": "キャンセル", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "検索..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "削除" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "タイトル", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "説明", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "作成", + "CANCEL": "キャンセル" + } + } + }, + "UPDATE": { + "CANCEL": "キャンセル", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "検索..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "ドキュメント", + "ADD_NEW": "新しいドキュメントを作成", + "RELATED_RESPONSES": { + "TITLE": "関連するFAQ", + "DESCRIPTION": "これらのFAQはドキュメントから直接生成されます。" + }, + "FORM_DESCRIPTION": "ドキュメントのURLを入力して知識ソースとして追加し、それに関連付けるアシスタントを選択してください。", + "CREATE": { + "TITLE": "ドキュメントを追加", + "SUCCESS_MESSAGE": "ドキュメントが正常に作成されました", + "ERROR_MESSAGE": "ドキュメントの作成中にエラーが発生しました。もう一度お試しください。" + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "ドキュメントのURLを入力", + "ERROR": "有効なURLを入力してください" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "ドキュメントを削除してもよろしいですか?", + "DESCRIPTION": "この操作は永久的です。ドキュメントを削除すると、生成されたすべての知識が永久に消去されます。", + "CONFIRM": "はい、削除します", + "SUCCESS_MESSAGE": "ドキュメントが正常に削除されました", + "ERROR_MESSAGE": "ドキュメントの削除中にエラーが発生しました。もう一度お試しください。" + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "関連する応答を表示", + "DELETE_DOCUMENT": "ドキュメントを削除" + }, + "EMPTY_STATE": { + "TITLE": "利用可能なドキュメントがありません", + "SUBTITLE": "ドキュメントはアシスタントがFAQを生成するために使用されます。ドキュメントをインポートしてアシスタントにコンテキストを提供できます。", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "はい、削除します", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "説明", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "なし", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "APIキー" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "パスワード", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "タイプ" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "数値", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "必須" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQ", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "新しいFAQを作成", + "DOCUMENTABLE": { + "CONVERSATION": "会話 #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "削除", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "FAQを削除してもよろしいですか?", + "DESCRIPTION": "", + "CONFIRM": "はい、削除します", + "SUCCESS_MESSAGE": "FAQが正常に削除されました", + "ERROR_MESSAGE": "FAQの削除中にエラーが発生しました。もう一度お試しください。" + }, + "FILTER": { + "ASSISTANT": "アシスタント: {selected}", + "STATUS": "状況: {selected}", + "ALL_ASSISTANTS": "すべて" + }, + "STATUS": { + "TITLE": "状況", + "PENDING": "保留中", + "APPROVED": "承認済み", + "ALL": "すべて" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "質問とその対応する回答をナレッジベースに追加し、それに関連付けるアシスタントを選択してください。", + "CREATE": { + "TITLE": "FAQを追加", + "SUCCESS_MESSAGE": "応答が正常に追加されました。", + "ERROR_MESSAGE": "応答の追加中にエラーが発生しました。もう一度お試しください。" + }, + "FORM": { + "QUESTION": { + "LABEL": "質問", + "PLACEHOLDER": "ここに質問を入力", + "ERROR": "有効な質問を入力してください。" + }, + "ANSWER": { + "LABEL": "回答", + "PLACEHOLDER": "ここに回答を入力", + "ERROR": "有効な回答を入力してください。" + } + }, + "EDIT": { + "TITLE": "FAQを更新", + "SUCCESS_MESSAGE": "FAQが正常に更新されました", + "ERROR_MESSAGE": "FAQの更新中にエラーが発生しました。もう一度お試しください", + "APPROVE_SUCCESS_MESSAGE": "FAQが承認済みとしてマークされました" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "編集", + "DELETE_RESPONSE": "削除" + }, + "EMPTY_STATE": { + "TITLE": "FAQが見つかりません", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQは、アシスタントがお客様からの質問に迅速かつ正確に回答するのに役立ちます。コンテンツから自動的に生成することも、手動で追加することもできます。", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "接続された受信トレイ", + "ADD_NEW": "新しい受信トレイを接続", + "OPTIONS": { + "DISCONNECT": "切断" + }, + "DELETE": { + "TITLE": "受信トレイを切断してもよろしいですか?", + "DESCRIPTION": "", + "CONFIRM": "はい、削除します", + "SUCCESS_MESSAGE": "受信トレイが正常に切断されました。", + "ERROR_MESSAGE": "受信トレイの切断中にエラーが発生しました。もう一度お試しください。" + }, + "FORM_DESCRIPTION": "アシスタントと接続する受信トレイを選択してください。", + "CREATE": { + "TITLE": "受信トレイを接続", + "SUCCESS_MESSAGE": "受信トレイが正常に接続されました。", + "ERROR_MESSAGE": "受信トレイの接続中にエラーが発生しました。もう一度お試しください。" + }, + "FORM": { + "INBOX": { + "LABEL": "受信トレイ", + "PLACEHOLDER": "アシスタントを展開する受信トレイを選択", + "ERROR": "受信トレイの選択が必要です。" + } + }, + "EMPTY_STATE": { + "TITLE": "接続された受信トレイがありません", + "SUBTITLE": "受信トレイに接続すると、アシスタントがお客様からの最初の質問を対応し、その後あなたに引き継ぐことができます。" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/ja/labelsMgmt.json new file mode 100644 index 0000000..a8fdb3b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "ラベル", + "HEADER_BTN_TXT": "ラベルを追加", + "LOADING": "ラベルを取得中", + "DESCRIPTION": "ラベルは会話やリードを分類し、優先順位をつけるのに役立ちます。サイドパネルを使用して会話や連絡先にラベルを割り当てることができます。", + "LEARN_MORE": "ラベルについて詳しく知る", + "SEARCH_404": "検索内容(クエリ)に一致する項目はありませんでした", + "LIST": { + "404": "このアカウントには利用可能なラベルがありません。", + "TITLE": "ラベルの管理", + "DESC": "ラベルを使用すると、会話をグループ化できます。", + "TABLE_HEADER": { + "NAME": "名前", + "DESCRIPTION": "説明", + "COLOR": "色" + } + }, + "FORM": { + "NAME": { + "LABEL": "ラベル名", + "PLACEHOLDER": "ラベル名", + "REQUIRED_ERROR": "ラベル名は必須です", + "MINIMUM_LENGTH_ERROR": "最小2文字が必要です", + "VALID_ERROR": "アルファベット、数字、ハイフン、アンダースコアのみ使用可能です" + }, + "DESCRIPTION": { + "LABEL": "説明", + "PLACEHOLDER": "ラベルの説明" + }, + "COLOR": { + "LABEL": "色" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "サイドバーにラベルを表示" + }, + "EDIT": "編集", + "CREATE": "作成", + "DELETE": "削除", + "CANCEL": "キャンセル" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "会話にラベルを追加", + "MULTIPLE_SUGGESTION": "このラベルを選択", + "DESELECT": "ラベルの選択を解除", + "DISMISS": "提案を無視" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "提案を無視", + "ADD_SELECTED_LABELS": "選択したラベルを追加", + "ADD_SELECTED_LABEL": "選択したラベルを追加", + "ADD_ALL_LABELS": "すべてのラベルを追加", + "SUGGESTED_LABELS": "提案されたラベル" + }, + "ADD": { + "TITLE": "ラベルを追加", + "DESC": "ラベルを使用すると、会話をグループ化できます。", + "API": { + "SUCCESS_MESSAGE": "ラベルの追加に成功しました", + "ERROR_MESSAGE": "エラーが発生しました。もう一度お試しください。" + } + }, + "EDIT": { + "TITLE": "ラベルを編集", + "API": { + "SUCCESS_MESSAGE": "ラベルが正常に更新されました", + "ERROR_MESSAGE": "エラーが発生しました。もう一度お試しください。" + } + }, + "DELETE": { + "BUTTON_TEXT": "削除", + "API": { + "SUCCESS_MESSAGE": "ラベルの削除に成功しました", + "ERROR_MESSAGE": "エラーが発生しました。もう一度お試しください。" + }, + "CONFIRM": { + "TITLE": "削除の確認", + "MESSAGE": "削除してもよろしいですか? ", + "YES": "削除する ", + "NO": "いいえ " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/login.json b/app/javascript/dashboard/i18n/locale/ja/login.json new file mode 100644 index 0000000..8eb4a7c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Chatwootにログイン", + "EMAIL": { + "LABEL": "Eメール", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "正しいメールアドレスを入力してください" + }, + "PASSWORD": { + "LABEL": "パスワード", + "PLACEHOLDER": "パスワード" + }, + "API": { + "SUCCESS_MESSAGE": "ログインに成功しました", + "ERROR_MESSAGE": "Woot Serverに接続できませんでした。もう一度お試しください。", + "UNAUTH": "ユーザー名またはパスワードが間違っています。もう一度お試しください。" + }, + "OAUTH": { + "GOOGLE_LOGIN": "Googleでログイン", + "BUSINESS_ACCOUNTS_ONLY": "会社のメールアドレスを使用してログインしてください", + "NO_ACCOUNT_FOUND": "このメールアドレスに該当するアカウントが見つかりませんでした。" + }, + "FORGOT_PASSWORD": "パスワードをお忘れですか?", + "CREATE_NEW_ACCOUNT": "新しいアカウントを作成", + "SUBMIT": "ログイン", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/macros.json b/app/javascript/dashboard/i18n/locale/ja/macros.json new file mode 100644 index 0000000..39813bf --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "マクロ", + "DESCRIPTION": "マクロは、カスタマーサービス担当者がタスクを簡単に完了できるようにする保存されたアクションのセットです。会話にラベルを付ける、メール記録を送信する、カスタム属性を更新するなどのアクションを定義でき、それらのアクションをワンクリックで実行できます。", + "LEARN_MORE": "マクロについて詳しく知る", + "HEADER_BTN_TXT": "新しいマクロを追加", + "HEADER_BTN_TXT_SAVE": "マクロを保存", + "LOADING": "マクロを取得中", + "ERROR": "問題が発生しました。もう一度お試しください。", + "ORDER_INFO": "マクロは追加したアクションの順序で実行されます。各ノード横のハンドルをドラッグして並べ替えることができます。", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "マクロ名", + "PLACEHOLDER": "マクロ名を入力してください", + "ERROR": "マクロを作成するには名前が必要です" + }, + "ACTIONS": { + "LABEL": "操作" + } + }, + "API": { + "SUCCESS_MESSAGE": "マクロが正常に追加されました", + "ERROR_MESSAGE": "マクロを作成できませんでした。後でもう一度お試しください。" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "名前", + "CREATED BY": "作成者", + "LAST_UPDATED_BY": "最終更新者", + "VISIBILITY": "可視性" + }, + "404": "マクロが見つかりませんでした" + }, + "DELETE": { + "TOOLTIP": "マクロを削除", + "CONFIRM": { + "MESSAGE": "削除してもよろしいですか?", + "YES": "削除する", + "NO": "いいえ" + }, + "API": { + "SUCCESS_MESSAGE": "マクロが正常に削除されました", + "ERROR_MESSAGE": "マクロを削除する際にエラーが発生しました。後でもう一度お試しください。" + } + }, + "EDIT": { + "TOOLTIP": "マクロを編集", + "API": { + "SUCCESS_MESSAGE": "マクロが正常に更新されました", + "ERROR_MESSAGE": "マクロを更新できませんでした。後でもう一度お試しください。" + } + }, + "EDITOR": { + "START_FLOW": "フローの開始", + "END_FLOW": "フローの終了", + "LOADING": "マクロを取得中", + "ADD_BTN_TOOLTIP": "新しいアクションを追加", + "DELETE_BTN_TOOLTIP": "アクションを削除", + "VISIBILITY": { + "LABEL": "マクロの可視性", + "GLOBAL": { + "LABEL": "公開", + "DESCRIPTION": "このマクロは、このアカウント内のすべての担当者に公開されます。" + }, + "PERSONAL": { + "LABEL": "非公開", + "DESCRIPTION": "このマクロは自分専用で、他の人には表示されません。" + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "実行", + "PREVIEW": "マクロをプレビュー", + "EXECUTED_SUCCESSFULLY": "マクロが正常に実行されました" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "属性キーが必須です", + "FILTER_OPERATOR_REQUIRED": "フィルター演算子が必須です", + "VALUE_REQUIRED": "値は必須です", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "値は1から998の間である必要があります", + "ACTION_PARAMETERS_REQUIRED": "アクションパラメータが必須です", + "ATLEAST_ONE_CONDITION_REQUIRED": "少なくとも1つの条件が必要です", + "ATLEAST_ONE_ACTION_REQUIRED": "少なくとも1つのアクションが必要です" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Assign a Team", + "ASSIGN_AGENT": "Assign an Agent", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "会話をミュート", + "SNOOZE_CONVERSATION": "会話をスヌーズ", + "RESOLVE_CONVERSATION": "会話を解決", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "CHANGE_PRIORITY": "優先度を変更", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "SEND_WEBHOOK_EVENT": "Send Webhook Event" + }, + "PRIORITY_TYPES": { + "NONE": "なし", + "LOW": "低", + "MEDIUM": "中", + "HIGH": "高", + "URGENT": "緊急" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/mfa.json b/app/javascript/dashboard/i18n/locale/ja/mfa.json new file mode 100644 index 0000000..dffd3e9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "有効です", + "DISABLED": "無効です", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "3", + "STEP_NUMBER_2": "4", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "読み込み中...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "コピー", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "キャンセル", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "ダウンロード", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "パスワード", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "キャンセル", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "キャンセル", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/report.json b/app/javascript/dashboard/i18n/locale/ja/report.json new file mode 100644 index 0000000..d90524f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "会話データ", + "LOADING_CHART": "グラフデータを読み込んでいます...", + "NO_ENOUGH_DATA": "レポートを生成するための十分なデータポイントを受信していません。後でもう一度お試しください。", + "DOWNLOAD_AGENT_REPORTS": "担当者レポートをダウンロード", + "DATA_FETCHING_FAILED": "データの取得に失敗しました。後でもう一度お試しください。", + "SUMMARY_FETCHING_FAILED": "サマリーの取得に失敗しました。後でもう一度お試しください。", + "METRICS": { + "CONVERSATIONS": { + "NAME": "会話データ", + "DESC": "(合計)" + }, + "INCOMING_MESSAGES": { + "NAME": "受信メッセージ", + "DESC": "(合計)" + }, + "OUTGOING_MESSAGES": { + "NAME": "送信メッセージ", + "DESC": "(合計)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "初回応答時間", + "DESC": "(平均)", + "INFO_TEXT": "計算に使用された会話の総数:", + "TOOLTIP_TEXT": "初回応答時間は{metricValue}({conversationCount}件の会話に基づく)" + }, + "RESOLUTION_TIME": { + "NAME": "処理時間", + "DESC": "(平均)", + "INFO_TEXT": "計算に使用された会話の総数:", + "TOOLTIP_TEXT": "処理時間は{metricValue}({conversationCount}件の会話に基づく)" + }, + "RESOLUTION_COUNT": { + "NAME": "処理件数", + "DESC": "(合計)" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "処理件数", + "DESC": "(合計)" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "引き継ぎ件数", + "DESC": "(合計)" + }, + "REPLY_TIME": { + "NAME": "顧客の待機時間", + "TOOLTIP_TEXT": "待機時間は{metricValue}({conversationCount}件の返信に基づく)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "過去 7 日間", + "LAST_14_DAYS": "過去 14 日間", + "LAST_30_DAYS": "過去 30 日間", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "過去 3 ヶ月", + "LAST_6_MONTHS": "過去 6 ヶ月", + "LAST_YEAR": "過去 1 年", + "CUSTOM_DATE_RANGE": "カスタム日付範囲" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "適用", + "PLACEHOLDER": "日付範囲を選択" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "グループ化", + "DURATION_FILTER_LABEL": "期間", + "GROUPING_OPTIONS": { + "DAY": "日", + "WEEK": "週", + "MONTH": "月", + "YEAR": "年" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "日" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "日" + }, + { + "id": 2, + "groupBy": "週" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "日" + }, + { + "id": 2, + "groupBy": "週" + }, + { + "id": 3, + "groupBy": "月" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "週" + }, + { + "id": 2, + "groupBy": "月" + }, + { + "id": 3, + "groupBy": "年" + } + ], + "BUSINESS_HOURS": "営業時間", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "フィルターをクリア", + "EMPTY_LIST": "結果が見つかりません" + }, + "PAGINATION": { + "RESULTS": "{start}件から{end}件まで表示中(全{total}件)", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "担当者概要", + "DESCRIPTION": "会話、応答時間、解決までの時間、解決済み案件などの主要な指標で担当者のパフォーマンスを簡単に追跡できます。詳細は担当者名をクリックしてください。", + "LOADING_CHART": "グラフデータを読み込んでいます...", + "NO_ENOUGH_DATA": "レポートを生成するための十分なデータポイントを受信していません。後でもう一度お試しください。", + "DOWNLOAD_AGENT_REPORTS": "担当者レポートをダウンロード", + "FILTER_DROPDOWN_LABEL": "担当者を選択", + "METRICS": { + "CONVERSATIONS": { + "NAME": "会話データ", + "DESC": "(合計)" + }, + "INCOMING_MESSAGES": { + "NAME": "受信メッセージ", + "DESC": "(合計)" + }, + "OUTGOING_MESSAGES": { + "NAME": "送信メッセージ", + "DESC": "(合計)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "初回応答時間", + "DESC": "(平均)", + "INFO_TEXT": "計算に使用された会話の総数:", + "TOOLTIP_TEXT": "初回応答時間は{metricValue}({conversationCount}件の会話に基づく)" + }, + "RESOLUTION_TIME": { + "NAME": "処理時間", + "DESC": "(平均)", + "INFO_TEXT": "計算に使用された会話の総数:", + "TOOLTIP_TEXT": "処理時間は{metricValue}({conversationCount}件の会話に基づく)" + }, + "RESOLUTION_COUNT": { + "NAME": "処理件数", + "DESC": "(合計)" + } + }, + "DATE_RANGE": [ + { + "id": 2, + "name": "過去3か月" + }, + { + "id": 3, + "name": "過去6か月" + }, + { + "id": 4, + "name": "過去 3 ヶ月" + }, + { + "id": 5, + "name": "過去 6 ヶ月" + }, + { + "id": 4, + "name": "過去1年" + }, + { + "id": 5, + "name": "カスタム日付範囲" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "適用", + "PLACEHOLDER": "日付範囲を選択" + } + }, + "LABEL_REPORTS": { + "HEADER": "過去 1 年", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "グラフデータを読み込んでいます...", + "NO_ENOUGH_DATA": "レポートを生成するための十分なデータポイントを受信していません。後でもう一度お試しください。", + "DOWNLOAD_LABEL_REPORTS": "ラベルレポートをダウンロード", + "FILTER_DROPDOWN_LABEL": "ラベルを選択", + "METRICS": { + "CONVERSATIONS": { + "NAME": "会話データ", + "DESC": "(合計)" + }, + "INCOMING_MESSAGES": { + "NAME": "受信メッセージ", + "DESC": "(合計)" + }, + "OUTGOING_MESSAGES": { + "NAME": "送信メッセージ", + "DESC": "(合計)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "初回応答時間", + "DESC": "(平均)", + "INFO_TEXT": "計算に使用された会話の総数:", + "TOOLTIP_TEXT": "初回応答時間は{metricValue}({conversationCount}件の会話に基づく)" + }, + "RESOLUTION_TIME": { + "NAME": "処理時間", + "DESC": "(平均)", + "INFO_TEXT": "計算に使用された会話の総数:", + "TOOLTIP_TEXT": "処理時間は{metricValue}({conversationCount}件の会話に基づく)" + }, + "RESOLUTION_COUNT": { + "NAME": "処理件数", + "DESC": "(合計)" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "過去 7 日間" + }, + { + "id": 1, + "name": "過去 30 日間" + }, + { + "id": 2, + "name": "過去 3 ヶ月" + }, + { + "id": 3, + "name": "過去 6 ヶ月" + }, + { + "id": 4, + "name": "過去1年" + }, + { + "id": 5, + "name": "カスタム日付範囲" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "適用", + "PLACEHOLDER": "日付範囲を選択" + } + }, + "INBOX_REPORTS": { + "HEADER": "受信トレイ概要", + "DESCRIPTION": "会話、応答時間、解決までの時間、解決済み案件などの主要な指標を使用して、受信トレイのパフォーマンスをすばやく確認できます。 詳細については、受信トレイ名をクリックしてください。", + "LOADING_CHART": "グラフデータを読み込んでいます...", + "NO_ENOUGH_DATA": "レポートを生成するための十分なデータポイントを受信していません。後でもう一度お試しください。", + "DOWNLOAD_INBOX_REPORTS": "受信トレイレポートをダウンロード", + "FILTER_DROPDOWN_LABEL": "受信トレイを選択", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "会話データ", + "DESC": "(合計)" + }, + "INCOMING_MESSAGES": { + "NAME": "受信メッセージ", + "DESC": "(合計)" + }, + "OUTGOING_MESSAGES": { + "NAME": "送信メッセージ", + "DESC": "(合計)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "初回応答時間", + "DESC": "(平均)", + "INFO_TEXT": "計算に使用された会話の総数:", + "TOOLTIP_TEXT": "初回応答時間は{metricValue}({conversationCount}件の会話に基づく)" + }, + "RESOLUTION_TIME": { + "NAME": "処理時間", + "DESC": "(平均)", + "INFO_TEXT": "計算に使用された会話の総数:", + "TOOLTIP_TEXT": "処理時間は{metricValue}({conversationCount}件の会話に基づく)" + }, + "RESOLUTION_COUNT": { + "NAME": "処理件数", + "DESC": "(合計)" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "過去 7 日間" + }, + { + "id": 1, + "name": "過去 30 日間" + }, + { + "id": 2, + "name": "過去 3 ヶ月" + }, + { + "id": 3, + "name": "過去 6 ヶ月" + }, + { + "id": 4, + "name": "過去1年" + }, + { + "id": 5, + "name": "カスタム日付範囲" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "適用", + "PLACEHOLDER": "日付範囲を選択" + } + }, + "TEAM_REPORTS": { + "HEADER": "チーム概要", + "DESCRIPTION": "会話、応答時間、解決までの時間、解決済み案件などの重要な指標でチームのパフォーマンスのスナップショットを取得します。 詳細はチーム名をクリックしてください。", + "LOADING_CHART": "グラフデータを読み込んでいます...", + "NO_ENOUGH_DATA": "レポートを生成するための十分なデータポイントを受信していません。後でもう一度お試しください。", + "DOWNLOAD_TEAM_REPORTS": "チームレポートをダウンロード", + "FILTER_DROPDOWN_LABEL": "チームを選択", + "METRICS": { + "CONVERSATIONS": { + "NAME": "会話データ", + "DESC": "(合計)" + }, + "INCOMING_MESSAGES": { + "NAME": "受信メッセージ", + "DESC": "(合計)" + }, + "OUTGOING_MESSAGES": { + "NAME": "送信メッセージ", + "DESC": "(合計)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "初回応答時間", + "DESC": "(平均)", + "INFO_TEXT": "計算に使用された会話の総数:", + "TOOLTIP_TEXT": "初回応答時間は{metricValue}({conversationCount}件の会話に基づく)" + }, + "RESOLUTION_TIME": { + "NAME": "処理時間", + "DESC": "(平均)", + "INFO_TEXT": "計算に使用された会話の総数:", + "TOOLTIP_TEXT": "処理時間は{metricValue}({conversationCount}件の会話に基づく)" + }, + "RESOLUTION_COUNT": { + "NAME": "処理件数", + "DESC": "(合計)" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "過去 7 日間" + }, + { + "id": 1, + "name": "過去 30 日間" + }, + { + "id": 2, + "name": "過去 3 ヶ月" + }, + { + "id": 3, + "name": "過去 6 ヶ月" + }, + { + "id": 4, + "name": "過去 1 年" + }, + { + "id": 5, + "name": "カスタム日付範囲" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "適用", + "PLACEHOLDER": "日付範囲を選択" + } + }, + "CSAT_REPORTS": { + "HEADER": "CSATレポート", + "NO_RECORDS": "CSATアンケートの回答はありません。", + "DOWNLOAD": "CSATレポートをダウンロード", + "DOWNLOAD_FAILED": "CSATレポートのダウンロードに失敗しました", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "担当者を選択" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "連絡先", + "AGENT_NAME": "担当者", + "RATING": "評価", + "FEEDBACK_TEXT": "フィードバックコメント" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "総回答数", + "TOOLTIP": "収集された回答の総数" + }, + "SATISFACTION_SCORE": { + "LABEL": "満足度スコア", + "TOOLTIP": "ポジティブな回答数 / 総回答数 × 100" + }, + "RESPONSE_RATE": { + "LABEL": "回答率", + "TOOLTIP": "回答数 / 送信されたCSATアンケートメッセージ数 × 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "BOTレポート", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "会話数", + "TOOLTIP": "ボットが処理した会話の総数" + }, + "TOTAL_RESPONSES": { + "LABEL": "総返信数", + "TOOLTIP": "ボットが送信した返信の総数" + }, + "RESOLUTION_RATE": { + "LABEL": "解決率", + "TOOLTIP": "ボットが解決した会話数 / ボットが処理した会話数 × 100" + }, + "HANDOFF_RATE": { + "LABEL": "引き継ぎ率", + "TOOLTIP": "エージェントに引き継がれた会話数 / ボットが処理した会話数 × 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "概要", + "LIVE": "Live", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "未解決の会話", + "LOADING_MESSAGE": "会話のメトリクスを読み込んでいます...", + "OPEN": "未解決", + "UNATTENDED": "未対応", + "UNASSIGNED": "未割当", + "PENDING": "保留中" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "会話の流量", + "NO_CONVERSATIONS": "会話がありません", + "CONVERSATION": "{count}件の会話", + "CONVERSATIONS": "{count}件の会話", + "DOWNLOAD_REPORT": "レポートをダウンロード" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "会話がありません", + "CONVERSATION": "{count}件の会話", + "CONVERSATIONS": "{count}件の会話", + "DOWNLOAD_REPORT": "レポートをダウンロード" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "担当者ごとの会話", + "LOADING_MESSAGE": "担当者メトリクスを読み込んでいます...", + "NO_AGENTS": "担当者による会話はありません", + "TABLE_HEADER": { + "AGENT": "担当者", + "OPEN": "未解決", + "UNATTENDED": "未対応", + "STATUS": "状況" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "チーム", + "OPEN": "再開する", + "UNATTENDED": "未対応", + "STATUS": "状況" + } + }, + "AGENT_STATUS": { + "HEADER": "担当者ステータス", + "ONLINE": "オンライン", + "BUSY": "取り込み中", + "OFFLINE": "オフライン" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "日", + "MONDAY": "月", + "TUESDAY": "火", + "WEDNESDAY": "水", + "THURSDAY": "木", + "FRIDAY": "金", + "SATURDAY": "土" + }, + "SLA_REPORTS": { + "HEADER": "SLAレポート", + "NO_RECORDS": "SLAが適用された会話はありません。", + "LOADING": "SLAデータを読み込んでいます...", + "DOWNLOAD_SLA_REPORTS": "SLAレポートをダウンロード", + "DOWNLOAD_FAILED": "SLAレポートのダウンロードに失敗しました", + "DROPDOWN": { + "ADD_FIlTER": "フィルターを追加", + "CLEAR_ALL": "すべてクリア", + "CLEAR_FILTER": "フィルターをクリア", + "EMPTY_LIST": "結果が見つかりません", + "NO_FILTER": "利用可能なフィルターがありません", + "SEARCH": "フィルターを検索", + "INPUT_PLACEHOLDER": { + "SLA": "SLA名", + "AGENTS": "担当者名", + "INBOXES": "受信トレイ名", + "LABELS": "ラベル名", + "TEAMS": "チーム名" + }, + "SLA": "SLAポリシー", + "INBOXES": "受信トレイ", + "AGENTS": "担当者", + "LABELS": "ラベル", + "TEAMS": "チーム" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "達成率", + "TOOLTIP": "設定されたSLAのうち正常に完了した割合" + }, + "NO_OF_MISSES": { + "LABEL": "未達成数", + "TOOLTIP": "指定期間内のSLA未達成件数" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "会話数", + "TOOLTIP": "SLAが適用された会話の総数" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "ポリシー", + "CONVERSATION": "会話", + "AGENT": "担当者" + }, + "VIEW_DETAILS": "詳細を表示" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "受信トレイ", + "AGENT": "担当者", + "TEAM": "チーム", + "LABEL": "ラベル", + "AVG_RESOLUTION_TIME": "解決までの平均時間", + "AVG_FIRST_RESPONSE_TIME": "初回応答の平均時間", + "AVG_REPLY_TIME": "お客様の平均待ち時間", + "RESOLUTION_COUNT": "処理件数", + "CONVERSATIONS": "会話数" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/resetPassword.json b/app/javascript/dashboard/i18n/locale/ja/resetPassword.json new file mode 100644 index 0000000..9acad4e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "パスワードをリセット", + "DESCRIPTION": "Chatwootにログインする際に使用するメールアドレスを入力して、パスワードリセットの手順を受け取ってください。", + "GO_BACK_TO_LOGIN": "ログインページに戻りたい場合は、", + "EMAIL": { + "LABEL": "Eメール", + "PLACEHOLDER": "メールアドレスを入力してください。", + "ERROR": "有効なメールアドレスを入力してください." + }, + "API": { + "SUCCESS_MESSAGE": "パスワードリセット用のリンクがあなたのメールアドレス宛に送信されました.", + "ERROR_MESSAGE": "Woot Serverに接続できませんでした。もう一度お試しください。" + }, + "SUBMIT": "送信" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/search.json b/app/javascript/dashboard/i18n/locale/ja/search.json new file mode 100644 index 0000000..9ad6324 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "連絡先", + "CONVERSATIONS": "会話データ", + "MESSAGES": "メッセージ", + "ARTICLES": "記事" + }, + "SECTION": { + "CONTACTS": "連絡先", + "CONVERSATIONS": "会話データ", + "MESSAGES": "メッセージ", + "ARTICLES": "記事" + }, + "VIEW_MORE": "さらに表示", + "LOAD_MORE": "さらに読み込む", + "SEARCHING_DATA": "検索中", + "LOADING_DATA": "読み込み中", + "EMPTY_STATE": "{item} がクエリ '{query}' に対して見つかりませんでした。", + "EMPTY_STATE_FULL": "クエリ '{query}' に対して結果が見つかりませんでした。", + "PLACEHOLDER_KEYBINDING": "/を押してフォーカス", + "INPUT_PLACEHOLDER": "検索するには3文字以上入力してください", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "すべてクリア", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "会話ID、メール、電話番号、メッセージで検索すると、より良い検索結果が得られます。", + "BOT_LABEL": "ボット", + "READ_MORE": "さらに読む", + "READ_LESS": "Read less", + "WROTE": "書き込み:", + "FROM": "差出人:", + "EMAIL": "Eメール", + "EMAIL_SUBJECT": "件名", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "{time} に作成", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "過去3か月", + "LAST_30_DAYS": "過去6か月", + "LAST_60_DAYS": "過去 60 日間", + "LAST_90_DAYS": "過去 90 日間", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "と", + "APPLY": "適用", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "フィルターをクリア" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Sender", + "IN": "受信トレイ", + "AGENTS": "担当者", + "CONTACTS": "連絡先", + "INBOXES": "受信トレイ", + "NO_AGENTS": "担当者が見つかりません", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/setNewPassword.json b/app/javascript/dashboard/i18n/locale/ja/setNewPassword.json new file mode 100644 index 0000000..10f0575 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "新しいパスワードを設定", + "PASSWORD": { + "LABEL": "パスワード", + "PLACEHOLDER": "パスワード", + "ERROR": "パスワードが短すぎます" + }, + "CONFIRM_PASSWORD": { + "LABEL": "パスワードの確認", + "PLACEHOLDER": "パスワードの確認", + "ERROR": "パスワードが一致しません" + }, + "API": { + "SUCCESS_MESSAGE": "パスワードは正常に変更されました.", + "ERROR_MESSAGE": "Woot Serverに接続できませんでした。もう一度お試しください。" + }, + "CAPTCHA": { + "ERROR": "認証が期限切れです。再度キャプチャを解いてください。" + }, + "SUBMIT": "送信" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/settings.json b/app/javascript/dashboard/i18n/locale/ja/settings.json new file mode 100644 index 0000000..162d347 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "プロフィール設定", + "TITLE": "プロフィール設定", + "BTN_TEXT": "プロフィールを更新", + "DELETE_AVATAR": "アバターを削除", + "AVATAR_DELETE_SUCCESS": "アバターが正常に削除されました", + "AVATAR_DELETE_FAILED": "アバターの削除中にエラーが発生しました。もう一度お試しください", + "UPDATE_SUCCESS": "プロフィールが正常に更新されました", + "PASSWORD_UPDATE_SUCCESS": "パスワードが正常に変更されました", + "AFTER_EMAIL_CHANGED": "プロフィールが正常に更新されました。ログイン情報が変更されたため、再度ログインしてください。", + "FORM": { + "PICTURE": "プロフィール写真", + "AVATAR": "プロフィール画像", + "ERROR": "正しくフォームに入力してください", + "REMOVE_IMAGE": "削除", + "UPLOAD_IMAGE": "画像をアップロード", + "UPDATE_IMAGE": "画像を更新", + "PROFILE_SECTION": { + "TITLE": "プロフィール", + "NOTE": "あなたのメールアドレスはあなたのIDであり、ログインに使用されます。" + }, + "SEND_MESSAGE": { + "TITLE": "メッセージ送信のホットキー", + "NOTE": "好みに応じて、EnterまたはCmd/Ctrl+Enterを選択できます。", + "UPDATE_SUCCESS": "設定が正常に更新されました", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "送信ボタンをクリックせずにEnterキーでメッセージを送信します。" + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "送信ボタンをクリックせずにCmd/Ctrl+Enterキーでメッセージを送信します。" + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Default", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "個人メッセージ署名", + "NOTE": "送信するすべてのメッセージの末尾に表示されるユニークな署名を作成します。インライン画像を含めることができ、ライブチャット、メール、API受信トレイでサポートされています。", + "BTN_TEXT": "署名を保存", + "API_ERROR": "署名を保存できませんでした。もう一度お試しください。", + "API_SUCCESS": "署名が正常に保存されました", + "IMAGE_UPLOAD_ERROR": "画像をアップロードできませんでした。もう一度お試しください。", + "IMAGE_UPLOAD_SUCCESS": "画像が正常に追加されました。保存をクリックして署名を保存してください。", + "IMAGE_UPLOAD_SIZE_ERROR": "画像サイズは{size}MB未満である必要があります" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "メッセージ署名", + "ERROR": "メッセージ署名を空にすることはできません", + "PLACEHOLDER": "ここに個人のメッセージ署名を入力してください。" + }, + "PASSWORD_SECTION": { + "TITLE": "パスワード", + "NOTE": "パスワードを更新すると、複数のデバイスでログインがリセットされます。", + "BTN_TEXT": "パスワードを変更" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "アクセストークン", + "NOTE": "このトークンは、API連携を構築する場合に利用します。", + "COPY": "コピー", + "RESET": "リセット", + "CONFIRM_RESET": "Are you sure?", + "CONFIRM_HINT": "Click again to confirm", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "オーディオアラート", + "NOTE": "ダッシュボードで新しいメッセージや会話の通知音を有効にします。", + "PLAY": "音を再生", + "ALERT_TYPES": { + "NONE": "該当なし", + "MINE": "割り当て済み", + "ALL": "すべて", + "ASSIGNED": "自分に割り当てられた会話", + "UNASSIGNED": "未割り当ての会話", + "NOTME": "他の人に割り当てられた会話" + }, + "ALERT_COMBINATIONS": { + "NONE": "オプションが選択されていないため、通知音を受け取りません。", + "ASSIGNED": "自分に割り当てられた会話の通知音を受け取ります。", + "UNASSIGNED": "未割り当ての会話の通知音を受け取ります。", + "NOTME": "他の人に割り当てられた会話の通知音を受け取ります。", + "ASSIGNED+UNASSIGNED": "自分に割り当てられた会話と未割り当ての会話の通知音を受け取ります。", + "ASSIGNED+NOTME": "自分と他の人に割り当てられた会話の通知音を受け取りますが、未割り当ての会話は含みません。", + "NOTME+UNASSIGNED": "未割り当ての会話と他の人に割り当てられた会話の通知音を受け取ります。", + "ASSIGNED+NOTME+UNASSIGNED": "すべての会話の通知音を受け取ります。" + }, + "ALERT_TYPE": { + "TITLE": "会話の通知イベント", + "NONE": "該当なし", + "ASSIGNED": "割り当てられた会話", + "ALL_CONVERSATIONS": "すべての会話" + }, + "DEFAULT_TONE": { + "TITLE": "通知音:" + }, + "CONDITIONS": { + "TITLE": "通知条件:", + "CONDITION_ONE": "ブラウザウィンドウがアクティブでない場合にのみ通知音を送信", + "CONDITION_TWO": "割り当てられたすべての会話が既読になるまで30秒ごとに通知を送信" + }, + "SOUND_PERMISSION_ERROR": "ブラウザで自動再生が無効になっています。通知音を自動で聞くには、ブラウザ設定で音声権限を有効にするか、ページと対話してください。", + "READ_MORE": "詳細を読む" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "Eメール通知", + "NOTE": "メール通知設定を更新します", + "CONVERSATION_ASSIGNMENT": "会話が自分に割り当てられたときにメール通知を送信", + "CONVERSATION_CREATION": "新しい会話が作成されたときにメール通知を送信", + "CONVERSATION_MENTION": "会話でメンションされたときにメール通知を送信", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "割り当てられた会話で新しいメッセージが作成されたときにメール通知を送信", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "参加している会話で新しいメッセージが作成されたときにメール通知を送信", + "SLA_MISSED_FIRST_RESPONSE": "会話で最初の応答SLAを逃した場合にメール通知を送信", + "SLA_MISSED_NEXT_RESPONSE": "会話で次の応答SLAを逃した場合にメール通知を送信", + "SLA_MISSED_RESOLUTION": "会話で解決SLAを逃した場合にメール通知を送信" + }, + "NOTIFICATIONS": { + "TITLE": "通知設定", + "TYPE_TITLE": "通知の種類", + "EMAIL": "Eメール通知", + "PUSH": "プッシュ通知", + "TYPES": { + "CONVERSATION_CREATED": "新しい会話が作成された時", + "CONVERSATION_ASSIGNED": "会話が自分に割り当てられた時", + "CONVERSATION_MENTION": "会話で自分がメンションされた時", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "割り当てられた会話に新しいメッセージが作成された時", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "参加している会話に新しいメッセージが作成された時", + "SLA_MISSED_FIRST_RESPONSE": "会話で最初の応答SLAを逃した", + "SLA_MISSED_NEXT_RESPONSE": "会話で次の応答SLAを逃した", + "SLA_MISSED_RESOLUTION": "会話で解決SLAを逃した" + }, + "BROWSER_PERMISSION": "プッシュ通知を受け取れるように、ブラウザの通知設定を有効にしてください" + }, + "API": { + "UPDATE_SUCCESS": "通知設定が正常に更新されました", + "UPDATE_ERROR": "設定の更新中にエラーが発生しました。もう一度やり直してください。" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "プッシュ通知", + "NOTE": "プッシュ通知の設定をここで更新します", + "CONVERSATION_ASSIGNMENT": "会話が自分に割り当てられたときにプッシュ通知を送信", + "CONVERSATION_CREATION": "新しい会話が作成されたときにプッシュ通知を送信", + "CONVERSATION_MENTION": "会話でメンションされたときにプッシュ通知を送信", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "割り当てられた会話で新しいメッセージが作成されたときにプッシュ通知を送信", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "参加している会話で新しいメッセージが作成されたときにプッシュ通知を送信", + "HAS_ENABLED_PUSH": "このブラウザーでプッシュ通知が有効になっています。", + "REQUEST_PUSH": "プッシュ通知を有効にする", + "SLA_MISSED_FIRST_RESPONSE": "会話で最初の応答SLAを逃したときにプッシュ通知を送信", + "SLA_MISSED_NEXT_RESPONSE": "会話で次の応答SLAを逃したときにプッシュ通知を送信", + "SLA_MISSED_RESOLUTION": "会話で解決SLAを逃したときにプッシュ通知を送信" + }, + "PROFILE_IMAGE": { + "LABEL": "プロフィール画像" + }, + "NAME": { + "LABEL": "あなたのフルネーム", + "ERROR": "有効な氏名を入力してください", + "PLACEHOLDER": "氏名を入力してください。" + }, + "DISPLAY_NAME": { + "LABEL": "表示名", + "ERROR": "有効な表示名を入力してください", + "PLACEHOLDER": "表示名を入力してください。これは会話に表示されます。" + }, + "AVAILABILITY": { + "LABEL": "利用可能期間", + "STATUS": { + "ONLINE": "オンライン", + "BUSY": "取り込み中", + "OFFLINE": "オフライン" + }, + "SET_AVAILABILITY_SUCCESS": "利用可能ステータスが正常に設定されました", + "SET_AVAILABILITY_ERROR": "利用可能ステータスを設定できませんでした。もう一度お試しください", + "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user" + }, + "EMAIL": { + "LABEL": "あなたのメールアドレス", + "ERROR": "正しいメールアドレスを入力してください", + "PLACEHOLDER": "メールアドレスを入力してください。これは会話に表示されます。" + }, + "CURRENT_PASSWORD": { + "LABEL": "現在のパスワード", + "ERROR": "現在のパスワードを入力してください", + "PLACEHOLDER": "現在のパスワードを入力してください" + }, + "PASSWORD": { + "LABEL": "新しいパスワード", + "ERROR": "6文字以上のパスワードを入力してください", + "PLACEHOLDER": "新しいパスワードを入力してください" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "パスワードの確認", + "ERROR": "パスワードは一致している必要があります", + "PLACEHOLDER": "新しいパスワードを再度入力してください" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "ステータスを変更", + "CHANGE_ACCOUNTS": "アカウントを切り替え", + "SWITCH_ACCOUNT": "アカウントを切り替え", + "CONTACT_SUPPORT": "サポートに問い合わせる", + "SELECTOR_SUBTITLE": "次のリストからアカウントを選択してください", + "PROFILE_SETTINGS": "プロフィール設定", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "キーボードショートカット", + "APPEARANCE": "外観を変更", + "SUPER_ADMIN_CONSOLE": "SuperAdminコンソール", + "DOCS": "ドキュメントを読む", + "CHANGELOG": "Changelog", + "LOGOUT": "ログアウト" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "日間のトライアル期間が残っています。", + "TRAIL_BUTTON": "今すぐ購入", + "DELETED_USER": "削除済みユーザー", + "EMAIL_VERIFICATION_PENDING": "メールアドレスがまだ認証されていないようです。受信トレイで認証メールを確認してください。", + "RESEND_VERIFICATION_MAIL": "認証メールを再送", + "EMAIL_VERIFICATION_SENT": "認証メールが送信されました。受信トレイを確認してください。", + "ACCOUNT_SUSPENDED": { + "TITLE": "アカウント停止中", + "MESSAGE": "アカウントが停止されています。詳細についてはサポートチームにお問い合わせください。" + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "ログアウト" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "コピー", + "CODEPEN": "CodePenで開く", + "COPY_SUCCESSFUL": "コードが正常にクリップボードにコピーされました" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "もっと見る", + "SHOW_LESS": "閉じる" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "ダウンロード", + "UPLOADING": "アップロード中...", + "INSTAGRAM_STORY_UNAVAILABLE": "このストーリーはもう利用できません。" + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "地図で見る" + }, + "FORM_BUBBLE": { + "SUBMIT": "送信" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "この画像はもう利用できません。", + "LOADING_FAILED": "読み込みに失敗しました" + } + }, + "CONFIRM_EMAIL": "確認中...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "受信トレイを追加" + } + }, + "SIDEBAR": { + "NO_ITEMS": "アイテムがありません", + "CURRENTLY_VIEWING_ACCOUNT": "現在表示中のアカウント:", + "SWITCH": "切り替え", + "INBOX_VIEW": "受信トレイビュー", + "CONVERSATIONS": "会話データ", + "INBOX": "私の受信トレイ", + "ALL_CONVERSATIONS": "すべての会話", + "MENTIONED_CONVERSATIONS": "メンション", + "PARTICIPATING_CONVERSATIONS": "参加中", + "UNATTENDED_CONVERSATIONS": "未対応", + "REPORTS": "レポート", + "SETTINGS": "設定", + "CONTACTS": "連絡先", + "ACTIVE": "有効", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "キャプテン", + "CAPTAIN_ASSISTANTS": "アシスタント", + "CAPTAIN_DOCUMENTS": "ドキュメント", + "CAPTAIN_RESPONSES": "FAQ", + "CAPTAIN_TOOLS": "Tools", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "受信トレイ", + "CAPTAIN_SETTINGS": "設定", + "HOME": "ホーム", + "AGENTS": "担当者", + "AGENT_BOTS": "ボット", + "AUDIT_LOGS": "監査ログ", + "INBOXES": "受信トレイ", + "NOTIFICATIONS": "通知", + "CANNED_RESPONSES": "定型文", + "INTEGRATIONS": "連携", + "PROFILE_SETTINGS": "プロフィール設定", + "ACCOUNT_SETTINGS": "アカウント設定", + "APPLICATIONS": "アプリケーション", + "LABELS": "ラベル", + "CUSTOM_ATTRIBUTES": "カスタム属性", + "AUTOMATION": "自動化", + "MACROS": "マクロ", + "TEAMS": "チーム", + "BILLING": "請求", + "CUSTOM_VIEWS_FOLDER": "フォルダ", + "CUSTOM_VIEWS_SEGMENTS": "セグメント", + "ALL_CONTACTS": "すべての連絡先", + "TAGGED_WITH": "タグ付け済み", + "NEW_LABEL": "新しいラベル", + "NEW_TEAM": "新しいチーム", + "NEW_INBOX": "新しい受信トレイ", + "REPORTS_CONVERSATION": "会話データ", + "CSAT": "顧客満足度", + "LIVE_CHAT": "ライブチャット", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "キャンペーン", + "ONGOING": "進行中", + "ONE_OFF": "単発", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "ボット", + "REPORTS_AGENT": "担当者", + "REPORTS_LABEL": "ラベル", + "REPORTS_INBOX": "受信トレイ", + "REPORTS_TEAM": "チーム", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "ステータスを設定", + "SET_YOUR_AVAILABILITY": "利用可能ステータスを設定", + "SLA": "SLA", + "CUSTOM_ROLES": "カスタムロール", + "BETA": "ベータ版", + "REPORTS_OVERVIEW": "概要", + "REAUTHORIZE": "受信トレイの接続期限が切れました。継続してメッセージを受信および送信するには、再接続してください。", + "HELP_CENTER": { + "TITLE": "ヘルプセンター", + "ARTICLES": "記事", + "CATEGORIES": "カテゴリー", + "LOCALES": "言語", + "SETTINGS": "設定" + }, + "CHANNELS": "チャンネル", + "SET_AUTO_OFFLINE": { + "TEXT": "自動的にオフラインに設定", + "INFO_TEXT": "アプリやダッシュボードを使用していない場合に、システムが自動的にオフラインに設定します。", + "INFO_SHORT": "使用していない場合、自動的にオフラインにします。" + }, + "DOCS": "ドキュメントを読む", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "請求設定", + "DESCRIPTION": "ここでサブスクリプションを管理し、プランをアップグレードしてチームにさらに多くの機能を提供しましょう。", + "CURRENT_PLAN": { + "TITLE": "現在のプラン", + "PLAN_NOTE": "現在**{plan}**プランに**{quantity}**ライセンスでご加入中です。", + "SEAT_COUNT": "シート数", + "RENEWS_ON": "更新日" + }, + "VIEW_PRICING": "料金を表示", + "MANAGE_SUBSCRIPTION": { + "TITLE": "サブスクリプションを管理", + "DESCRIPTION": "過去の請求書を確認したり、請求情報を編集したり、サブスクリプションをキャンセルしたりできます。", + "BUTTON_TXT": "請求ポータルへ" + }, + "CAPTAIN": { + "TITLE": "キャプテン", + "DESCRIPTION": "Captain AIの使用状況とクレジットを管理する。", + "BUTTON_TXT": "クレジットを追加購入する", + "DOCUMENTS": "ドキュメント", + "RESPONSES": "応答数", + "UPGRADE": "Captainは無料プランでは利用できません。アシスタント、Copilotなどの機能を利用するには、プランをアップグレードしてください。", + "REFRESH_CREDITS": "再読み込み" + }, + "CHAT_WITH_US": { + "TITLE": "サポートが必要ですか?", + "DESCRIPTION": "請求に関する問題がありますか?お手伝いします。", + "BUTTON_TXT": "チャットをする" + }, + "NO_BILLING_USER": "請求アカウントを設定中です。ページを更新してもう一度お試しください。", + "TOPUP": { + "BUY_CREDITS": "クレジットを追加購入する", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Note:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "キャンセル", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "戻る", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "コードが正常にクリップボードにコピーされました", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "管理者にアップグレードを依頼してください。" + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "今すぐアップグレード", + "CANCEL_ANYTIME": "プランはいつでも変更またはキャンセルできます" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Chatwootアカウントが見つかりませんでした。続行するには新しいアカウントを作成してください。", + "NEW_ACCOUNT": "新規アカウント", + "SELECTOR_SUBTITLE": "新しいアカウントを作成", + "API": { + "SUCCESS_MESSAGE": "アカウントが正常に作成されました", + "EXIST_MESSAGE": "アカウントはすでに存在します", + "ERROR_MESSAGE": "Woot Serverに接続できませんでした。後でもう一度お試しください。" + }, + "FORM": { + "NAME": { + "LABEL": "企業名", + "PLACEHOLDER": "例: Wayne Enterprise" + }, + "SUBMIT": "送信", + "CANCEL": "キャンセル" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "すべてのショートカットを表示", + "TITLE": { + "OPEN_CONVERSATION": "会話を開く", + "RESOLVE_AND_NEXT": "解決して次へ進む", + "NAVIGATE_DROPDOWN": "ドロップダウン項目を移動", + "RESOLVE_CONVERSATION": "会話を解決", + "GO_TO_CONVERSATION_DASHBOARD": "会話ダッシュボードに移動", + "ADD_ATTACHMENT": "添付ファイルを追加", + "GO_TO_CONTACTS_DASHBOARD": "連絡先ダッシュボードに移動", + "TOGGLE_SIDEBAR": "サイドバーを切り替え", + "GO_TO_REPORTS_SIDEBAR": "レポートサイドバーに移動", + "MOVE_TO_NEXT_TAB": "会話リスト内で次のタブに移動", + "GO_TO_SETTINGS": "設定に移動", + "SWITCH_TO_PRIVATE_NOTE": "プライベートメモに切り替え", + "SWITCH_TO_REPLY": "返信に切り替え", + "TOGGLE_SNOOZE_DROPDOWN": "スヌーズドロップダウンを切り替え" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "優先度", + "ACTIVE": "有効", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "編集" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "キャンセル" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "説明:", + "PLACEHOLDER": "説明を入力" + }, + "STATUS": { + "LABEL": "ステータス:", + "PLACEHOLDER": "状況を選択", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "追加" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "編集" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "キャンセル" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "説明:", + "PLACEHOLDER": "説明を入力" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "追加" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "削除", + "CANCEL_BUTTON_LABEL": "キャンセル" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/signup.json b/app/javascript/dashboard/i18n/locale/ja/signup.json new file mode 100644 index 0000000..19f5d28 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "アカウントを作成", + "TITLE": "登録", + "TESTIMONIAL_HEADER": "前進するために必要なのはたった一歩", + "TESTIMONIAL_CONTENT": "顧客と関わり、維持し、新たな顧客を見つけるまであと一歩です。", + "TERMS_ACCEPT": "アカウントを作成することで、利用規約およびプライバシーポリシーに同意したものとみなされます。", + "OAUTH": { + "GOOGLE_SIGNUP": "Googleで登録" + }, + "COMPANY_NAME": { + "LABEL": "会社名", + "PLACEHOLDER": "会社名を入力してください。例: Wayne Enterprises", + "ERROR": "会社名が短すぎます" + }, + "FULL_NAME": { + "LABEL": "氏名", + "PLACEHOLDER": "氏名を入力してください。例: Bruce Wayne", + "ERROR": "氏名が短すぎます" + }, + "EMAIL": { + "LABEL": "勤務先のメールアドレス", + "PLACEHOLDER": "勤務先のメールアドレスを入力してください。例: bruce{'@'}wayne{'.'}enterprises", + "ERROR": "有効な勤務先のメールアドレスを入力してください" + }, + "PASSWORD": { + "LABEL": "パスワード", + "PLACEHOLDER": "パスワード", + "ERROR": "パスワードが短すぎます", + "IS_INVALID_PASSWORD": "パスワードは少なくとも1つの大文字、1つの小文字、1つの数字、1つの特殊文字を含む必要があります", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "パスワードの確認", + "PLACEHOLDER": "パスワードの確認", + "ERROR": "パスワードが一致しません" + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "Wootサーバーに接続できませんでした。後でもう一度お試しください。" + }, + "SUBMIT": "アカウントを作成", + "HAVE_AN_ACCOUNT": "すでにアカウントをお持ちですか?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/sla.json b/app/javascript/dashboard/i18n/locale/ja/sla.json new file mode 100644 index 0000000..469f1a7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreement", + "ADD_ACTION": "SLAを追加", + "ADD_ACTION_LONG": "新しいSLAポリシーを作成", + "DESCRIPTION": "サービス水準合意(SLA)は、チームと顧客間で明確な期待を定義する契約です。応答時間や解決時間の基準を設定し、責任を明確にし、一貫した高品質なサービス体験を提供します。", + "LEARN_MORE": "SLAについて詳しく学ぶ", + "LOADING": "SLAを取得中", + "PAYWALL": { + "TITLE": "アップグレードしてSLAを作成", + "AVAILABLE_ON": "SLA機能はビジネスおよびエンタープライズプランのみで利用可能です。", + "UPGRADE_PROMPT": "チーム管理、自動化、カスタム属性などの高度な機能を利用するにはプランをアップグレードしてください。", + "UPGRADE_NOW": "今すぐアップグレード", + "CANCEL_ANYTIME": "プランはいつでも変更またはキャンセルできます" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "SLA機能は有料プランのみで利用可能です。", + "UPGRADE_PROMPT": "監査ログ、担当者の稼働状況などの高度な機能を利用するには有料プランにアップグレードしてください。", + "ASK_ADMIN": "管理者にアップグレードを依頼してください。" + }, + "LIST": { + "404": "このアカウントには利用可能なSLAがありません。", + "EMPTY": { + "TITLE_1": "エンタープライズ P0", + "DESC_1": "即時対応が必要なエンタープライズ顧客からの問題。", + "TITLE_2": "エンタープライズ P1", + "DESC_2": "迅速な承認が必要なエンタープライズ顧客からの問題。" + }, + "BUSINESS_HOURS_ON": "営業時間内", + "BUSINESS_HOURS_OFF": "営業時間外", + "RESPONSE_TYPES": { + "FRT": "最初の応答時間の基準", + "NRT": "次の応答時間の基準", + "RT": "解決時間の基準", + "SHORT_HAND": { + "FRT": "最初の応答", + "NRT": "次の応答", + "RT": "解決" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA名", + "PLACEHOLDER": "SLA名", + "REQUIRED_ERROR": "SLA名は必須です", + "MINIMUM_LENGTH_ERROR": "最小2文字が必要です", + "VALID_ERROR": "使用可能なのは英字、数字、ハイフン、アンダースコアのみです" + }, + "DESCRIPTION": { + "LABEL": "説明", + "PLACEHOLDER": "プレミアム顧客向けのSLA" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "最初の応答時間", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "次の応答時間", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "解決時間", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "営業時間", + "PLACEHOLDER": "営業時間内のみ" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "しきい値は数値でゼロより大きい必要があります" + }, + "EDIT": "編集", + "CREATE": "作成", + "DELETE": "削除", + "CANCEL": "キャンセル" + }, + "ADD": { + "TITLE": "SLAを追加", + "DESC": "素晴らしいサービスのための友好的な約束!", + "API": { + "SUCCESS_MESSAGE": "SLAが正常に追加されました", + "ERROR_MESSAGE": "エラーが発生しました。もう一度お試しください。" + } + }, + "DELETE": { + "TITLE": "SLAを削除", + "API": { + "SUCCESS_MESSAGE": "SLAが正常に削除されました", + "ERROR_MESSAGE": "エラーが発生しました。もう一度お試しください。" + }, + "CONFIRM": { + "TITLE": "削除の確認", + "MESSAGE": "本当に削除してもよろしいですか?", + "YES": "削除する", + "NO": "いいえ" + } + }, + "EVENTS": { + "TITLE": "SLAの逸脱", + "FRT": "最初の応答時間", + "NRT": "次の応答時間", + "RT": "解決時間", + "SHOW_MORE": "{count}件以上表示", + "HIDE": "{count}行を非表示" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/teamsSettings.json b/app/javascript/dashboard/i18n/locale/ja/teamsSettings.json new file mode 100644 index 0000000..c13fd20 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "チームを新規作成", + "HEADER": "チーム", + "LOADING": "チームを取得中", + "DESCRIPTION": "チームは担当者をその責務に基づいてグループ化することを可能にします。担当者は複数のチームに所属できます。共同作業では、会話を特定のチームに割り当てることができます。", + "LEARN_MORE": "チームについて詳しく学ぶ", + "LIST": { + "404": "このアカウントにはまだ作成されたチームがありません。", + "EDIT_TEAM": "チームを編集", + "NONE": "該当なし" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "チームを新規作成", + "DESC": "新しいチームにタイトルと説明を追加してください。" + }, + "AGENTS": { + "BUTTON_TEXT": "チームに担当者を追加", + "TITLE": "チームに担当者を追加 - {teamName}", + "DESC": "新しく作成したチームに担当者を追加してください。これにより、チームとして会話で協力したり、同じ会話での新しいイベントについて通知を受けたりできます。" + }, + "WIZARD_CREATE": { + "TITLE": "作成", + "BODY": "新しい担当者チームを作成します。" + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "担当者を追加", + "BODY": "チームに担当者を追加します。" + }, + "WIZARD_FINISH": { + "TITLE": "完了", + "BODY": "すべての準備が完了しました!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "チームの詳細を編集", + "DESC": "チームのタイトルや説明を編集します。", + "BUTTON_TEXT": "チームを更新" + }, + "AGENTS": { + "BUTTON_TEXT": "チーム内の担当者を更新", + "TITLE": "チームに担当者を追加 - {teamName}", + "DESC": "新しく作成したチームに担当者を追加してください。追加された担当者は、このチームに割り当てられた会話について通知を受けます。" + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "チームの詳細", + "ROUTE": "settings_teams_edit", + "BODY": "名前、説明、その他の詳細を変更します。" + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "担当者を編集", + "ROUTE": "settings_teams_edit_members", + "BODY": "チーム内の担当者を編集します。" + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "完了", + "ROUTE": "settings_teams_edit_finish", + "BODY": "すべての準備が完了しました!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "チームの詳細を保存できませんでした。もう一度お試しください。" + }, + "AGENTS": { + "AGENT": "担当者", + "EMAIL": "Eメール", + "BUTTON_TEXT": "担当者を追加", + "ADD_AGENTS": "チームに担当者を追加中...", + "SELECT": "選択", + "SELECT_ALL": "すべての担当者を選択", + "SELECTED_COUNT": "{total}人中{selected}人が選択されました。" + }, + "ADD": { + "TITLE": "チームに担当者を追加 - {teamName}", + "DESC": "新しく作成したチームに担当者を追加してください。これにより、チームとして会話で協力したり、同じ会話での新しいイベントについて通知を受けたりできます。", + "SELECT": "選択", + "SELECT_ALL": "すべての担当者を選択", + "SELECTED_COUNT": "{total}人中{selected}人が選択されました。", + "BUTTON_TEXT": "担当者を追加", + "AGENT_VALIDATION_ERROR": "少なくとも1人の担当者を選択してください。" + }, + "FINISH": { + "TITLE": "チームの準備ができました!", + "MESSAGE": "これで会話においてチームとして協力することができます。サポート活動を楽しんでください!", + "BUTTON_TEXT": "完了" + }, + "DELETE": { + "BUTTON_TEXT": "削除", + "API": { + "SUCCESS_MESSAGE": "チームが正常に削除されました。", + "ERROR_MESSAGE": "チームを削除できませんでした。もう一度お試しください。" + }, + "CONFIRM": { + "TITLE": "本当にこのチームを削除しますか?", + "PLACE_HOLDER": "{teamName}と入力して確認してください", + "MESSAGE": "チームを削除すると、このチームに割り当てられた会話のチーム割り当てが削除されます。", + "YES": "削除", + "NO": "キャンセル" + } + }, + "SETTINGS": "設定", + "FORM": { + "UPDATE": "チームを更新", + "CREATE": "チームを作成", + "NAME": { + "LABEL": "チーム名", + "PLACEHOLDER": "例: 営業、カスタマーサポート" + }, + "DESCRIPTION": { + "LABEL": "チームの説明", + "PLACEHOLDER": "このチームに関する簡単な説明。" + }, + "AUTO_ASSIGN": { + "LABEL": "このチームで自動割り当てを許可する" + }, + "SUBMIT_CREATE": "チームを作成" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/webhooks.json b/app/javascript/dashboard/i18n/locale/ja/webhooks.json new file mode 100644 index 0000000..9fd9002 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Webhook設定" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/ja/whatsappTemplates.json new file mode 100644 index 0000000..a458960 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Whatsapp テンプレート", + "SUBTITLE": "送信したいWhatsappテンプレートを選択してください", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "テンプレートを検索", + "NO_TEMPLATES_FOUND": "該当するテンプレートが見つかりません:", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "カテゴリ", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "言語", + "TEMPLATE_BODY": "テンプレート本文", + "CATEGORY": "カテゴリ" + } + }, + "PARSER": { + "VARIABLES_LABEL": "変数", + "LANGUAGE": "言語", + "CATEGORY": "カテゴリ", + "VARIABLE_PLACEHOLDER": "{variable} の値を入力", + "GO_BACK_LABEL": "戻る", + "SEND_MESSAGE_LABEL": "メッセージを送信", + "FORM_ERROR_MESSAGE": "送信前に全ての変数を入力してください", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ja/yearInReview.json b/app/javascript/dashboard/i18n/locale/ja/yearInReview.json new file mode 100644 index 0000000..845ee5e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ja/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "閉じる", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "会話データ", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "ダウンロード", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "Share conversation" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/advancedFilters.json b/app/javascript/dashboard/i18n/locale/ka/advancedFilters.json new file mode 100644 index 0000000..a991cb2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Filter conversations", + "SUBTITLE": "Add your filters below and hit 'Apply filters' to cut through the chat clutter.", + "EDIT_CUSTOM_FILTER": "Edit Folder", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your folder.", + "ADD_NEW_FILTER": "Add filter", + "FILTER_DELETE_ERROR": "Oops, looks like we can't save nothing! Please add at least one filter to save it.", + "SUBMIT_BUTTON_LABEL": "Apply filters", + "UPDATE_BUTTON_LABEL": "Update folder", + "CANCEL_BUTTON_LABEL": "Cancel", + "CLEAR_BUTTON_LABEL": "Clear filters", + "FOLDER_LABEL": "Folder Name", + "FOLDER_QUERY_LABEL": "Folder Query", + "EMPTY_VALUE_ERROR": "Value is required.", + "TOOLTIP_LABEL": "Filter conversations", + "QUERY_DROPDOWN_LABELS": { + "AND": "AND", + "OR": "OR" + }, + "INPUT_PLACEHOLDER": "Enter value", + "OPERATOR_LABELS": { + "equal_to": "Equal to", + "not_equal_to": "Not equal to", + "does_not_contain": "Does not contain", + "is_present": "Is present", + "is_not_present": "Is not present", + "is_greater_than": "Is greater than", + "is_less_than": "Is lesser than", + "days_before": "Is x days before", + "starts_with": "Starts with", + "equalTo": "Equal to", + "notEqualTo": "Not equal to", + "contains": "Contains", + "doesNotContain": "Does not contain", + "isPresent": "Is present", + "isNotPresent": "Is not present", + "isGreaterThan": "Is greater than", + "isLessThan": "Is lesser than", + "daysBefore": "Is x days before", + "startsWith": "Starts with" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "True", + "FALSE": "False" + }, + "ATTRIBUTES": { + "STATUS": "Status", + "ASSIGNEE_NAME": "Assignee name", + "INBOX_NAME": "Inbox name", + "TEAM_NAME": "Team name", + "CONVERSATION_IDENTIFIER": "Conversation identifier", + "CAMPAIGN_NAME": "Campaign name", + "LABELS": "Labels", + "BROWSER_LANGUAGE": "Browser language", + "PRIORITY": "Priority", + "COUNTRY_NAME": "Country name", + "REFERER_LINK": "Referer link", + "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_TEXT": "Text", + "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Created at", + "LAST_ACTIVITY": "Last activity" + }, + "ERRORS": { + "VALUE_REQUIRED": "Value is required", + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard filters", + "ADDITIONAL_FILTERS": "Additional filters", + "CUSTOM_ATTRIBUTES": "Custom attributes" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Do you want to save this filter?", + "LABEL": "Name this filter", + "PLACEHOLDER": "Name your filter to refer it later.", + "ERROR_MESSAGE": "Name is required.", + "SAVE_BUTTON": "Save filter", + "CANCEL_BUTTON": "Cancel", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder created successfully.", + "ERROR_MESSAGE": "Error while creating folder." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment created successfully.", + "ERROR_MESSAGE": "Error while creating segment." + } + }, + "EDIT": { + "EDIT_BUTTON": "Edit folder" + }, + "DELETE": { + "DELETE_BUTTON": "Delete filter", + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete the filter ", + "YES": "Yes, delete", + "NO": "No, keep it" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder deleted successfully.", + "ERROR_MESSAGE": "Error while deleting folder." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment deleted successfully.", + "ERROR_MESSAGE": "Error while deleting segment." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/agentBots.json b/app/javascript/dashboard/i18n/locale/ka/agentBots.json new file mode 100644 index 0000000..8102692 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Bots", + "LOADING_EDITOR": "Loading editor...", + "DESCRIPTION": "აგენტ-ბოტები თქვენი გუნდის ყველაზე გამორჩეული წევრებივით არიან. მათ შეუძლიათ მოაგვარონ წვრილმანები, რათა თქვენ ყურადღება მიაქციოთ ნამდვილად მნიშვნელოვან საკითხებს. სცადეთ. შეგიძლიათ მართოთ თქვენი ბოტები ამ გვერდიდან ან შექმნათ ახალი ღილაკით „ბოტის დამატება“.", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "სისტემური ბოტი", + "GLOBAL_BOT_BADGE": "სისტემა", + "AVATAR": { + "SUCCESS_DELETE": "ბოტის ავატარი წარმატებით წაიშალა", + "ERROR_DELETE": "ბოტის ავატარის წაშლის დროს მოხდა შეცდომა. სცადეთ ხელახლა" + }, + "BOT_CONFIGURATION": { + "TITLE": "Select an agent bot", + "DESC": "Assign an Agent Bot to your inbox. They can handle initial conversations and transfer them to a live agent when necessary.", + "SUBMIT": "Update", + "DISCONNECT": "Disconnect bot", + "SUCCESS_MESSAGE": "Successfully updated the agent bot.", + "DISCONNECTED_SUCCESS_MESSAGE": "Successfully disconnected the agent bot.", + "ERROR_MESSAGE": "Could not update the agent bot. Please try again.", + "DISCONNECTED_ERROR_MESSAGE": "Could not disconnect the agent bot. Please try again.", + "SELECT_PLACEHOLDER": "Select bot" + }, + "ADD": { + "TITLE": "ბოტის დამატება", + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "SUCCESS_MESSAGE": "Bot added successfully.", + "ERROR_MESSAGE": "Could not add bot. Please try again later." + } + }, + "LIST": { + "404": "ბოტები ვერ მოიძებნა. შეგიძლიათ შექმნათ ბოტი ღილაკზე „ბოტის დამატება“ დაჭერით.", + "LOADING": "Fetching bots...", + "TABLE_HEADER": { + "DETAILS": "ბოტის დეტალები", + "URL": "ვებჰუკის URL" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "TITLE": "Delete bot", + "CONFIRM": { + "TITLE": "წაშლის დადასტურება", + "MESSAGE": "დარწმუნებული ხართ, რომ გსურთ {name}-ის წაშლა?", + "YES": "დიახ, წაშლა", + "NO": "არა, დატოვე" + }, + "API": { + "SUCCESS_MESSAGE": "Bot deleted successfully.", + "ERROR_MESSAGE": "Could not delete bot. Please try again." + } + }, + "EDIT": { + "BUTTON_TEXT": "Edit", + "TITLE": "Edit bot", + "API": { + "SUCCESS_MESSAGE": "Bot updated successfully.", + "ERROR_MESSAGE": "Could not update bot. Please try again." + } + }, + "ACCESS_TOKEN": { + "TITLE": "წვდომის ტოკენი", + "DESCRIPTION": "დააკოპირეთ წვდომის ტოკენი და უსაფრთხოდ შეინახეთ", + "COPY_SUCCESSFUL": "წვდომის ტოკენი დაკოპირდა გაცვლის ბუფერში", + "RESET_SUCCESS": "წვდომის ტოკენი წარმატებით ხელახლა გენერირდა", + "RESET_ERROR": "წვდომის ტოკენის ხელახლა გენერაცია ვერ მოხერხდა. სცადეთ ხელახლა" + }, + "FORM": { + "AVATAR": { + "LABEL": "ბოტის ავატარი" + }, + "NAME": { + "LABEL": "ბოტის სახელი", + "PLACEHOLDER": "შეიყვანეთ ბოტის სახელი", + "REQUIRED": "ბოტის სახელი სავალდებულოა" + }, + "DESCRIPTION": { + "LABEL": "აღწერა", + "PLACEHOLDER": "რას აკეთებს ეს ბოტი?" + }, + "WEBHOOK_URL": { + "LABEL": "ვებჰუკის URL", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "ვებჰუკის URL სავალდებულოა" + }, + "ERRORS": { + "NAME": "ბოტის სახელი სავალდებულოა", + "URL": "ვებჰუკის URL სავალდებულოა", + "VALID_URL": "გთხოვთ მიუთითოთ სწორი URL, რომელიც იწყება http:// ან https://-ით" + }, + "CANCEL": "გაუქმება", + "CREATE": "ბოტის შექმნა", + "UPDATE": "ბოტის განახლება" + }, + "WEBHOOK": { + "DESCRIPTION": "დააკონფიგურირეთ ვებჰუკ-ბოტი თქვენს საკუთარ სერვისებთან ინტეგრაციისთვის. ბოტი მიიღებს და დაამუშავებს საუბრებიდან ივენთებს და შეძლებს მათზე პასუხის გაცემას." + }, + "TYPES": { + "WEBHOOK": "Webhook bot" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/agentMgmt.json b/app/javascript/dashboard/i18n/locale/ka/agentMgmt.json new file mode 100644 index 0000000..448994e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Agents", + "HEADER_BTN_TXT": "Add Agent", + "LOADING": "Fetching Agent List", + "DESCRIPTION": "An agent is a member of your customer support team who can view and respond to user messages. The list below shows all the agents in your account.", + "LEARN_MORE": "Learn about user roles", + "AGENT_TYPES": { + "ADMINISTRATOR": "Administrator", + "AGENT": "Agent" + }, + "LIST": { + "404": "There are no agents associated to this account", + "TITLE": "Manage agents in your team", + "DESC": "You can add/remove agents to/in your team.", + "NAME": "Name", + "EMAIL": "EMAIL", + "STATUS": "Status", + "ACTIONS": "Actions", + "VERIFIED": "Verified", + "VERIFICATION_PENDING": "Verification Pending", + "AVAILABLE_CUSTOM_ROLE": "Available custom role permissions" + }, + "ADD": { + "TITLE": "Add agent to your team", + "DESC": "You can add people who will be able to handle support for your inboxes.", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "NAME": { + "LABEL": "Agent Name", + "PLACEHOLDER": "Please enter a name of the agent" + }, + "AGENT_TYPE": { + "LABEL": "Role", + "PLACEHOLDER": "Please select a role", + "ERROR": "Role is required" + }, + "EMAIL": { + "LABEL": "Email Address", + "PLACEHOLDER": "Please enter an email address of the agent" + }, + "SUBMIT": "Add Agent" + }, + "API": { + "SUCCESS_MESSAGE": "Agent added successfully", + "EXIST_MESSAGE": "Agent email already in use, Please try another email address", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Agent deleted successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + } + }, + "EDIT": { + "TITLE": "Edit agent", + "FORM": { + "NAME": { + "LABEL": "Agent Name", + "PLACEHOLDER": "Please enter a name of the agent" + }, + "AGENT_TYPE": { + "LABEL": "Role", + "PLACEHOLDER": "Please select a role", + "ERROR": "Role is required" + }, + "EMAIL": { + "LABEL": "Email Address", + "PLACEHOLDER": "Please enter an email address of the agent" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Availability", + "PLACEHOLDER": "Please select an availability status", + "ERROR": "Availability is required" + }, + "SUBMIT": "Edit Agent" + }, + "BUTTON_TEXT": "Edit", + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "SUCCESS_MESSAGE": "Agent updated successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Reset Password", + "ADMIN_SUCCESS_MESSAGE": "An email with reset password instructions has been sent to the agent", + "SUCCESS_MESSAGE": "Agent password reset successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "SEARCH": { + "NO_RESULTS": "No results found." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "None", + "TITLE": { + "AGENT": "Select agent", + "TEAM": "Select team" + }, + "LIST": { + "NONE": "None" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "No agents found", + "TEAM": "No teams found" + }, + "PLACEHOLDER": { + "AGENT": "Search agents", + "TEAM": "Search teams", + "INPUT": "Search for agents" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/ka/attributesMgmt.json new file mode 100644 index 0000000..421161b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Custom Attributes", + "HEADER_BTN_TXT": "Add Custom Attribute", + "LOADING": "Fetching custom attributes", + "DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.", + "LEARN_MORE": "Learn more about custom attributes", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "საუბარი", + "CONTACT": "კონტაქტი" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "ტექსტი", + "NUMBER": "რიცხვი", + "LINK": "ბმული", + "DATE": "თარიღი", + "LIST": "სია", + "CHECKBOX": "მონიშვნის ველი" + }, + "ADD": { + "TITLE": "Add Custom Attribute", + "SUBMIT": "Create", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "NAME": { + "LABEL": "Display Name", + "PLACEHOLDER": "Enter custom attribute display name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Enter custom attribute description", + "ERROR": "Description is required" + }, + "MODEL": { + "LABEL": "Applies to", + "PLACEHOLDER": "Please select one", + "ERROR": "Model is required" + }, + "TYPE": { + "LABEL": "Type", + "PLACEHOLDER": "Please select a type", + "ERROR": "Type is required", + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter value and press enter key", + "ERROR": "Must have at least one value" + } + }, + "KEY": { + "LABEL": "Key", + "PLACEHOLDER": "Enter custom attribute key", + "ERROR": "Key is required", + "IN_VALID": "Invalid key" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute added successfully!", + "ERROR_MESSAGE": "Could not create a Custom Attribute. Please try again later." + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure want to delete - {attributeName}", + "PLACE_HOLDER": "Please type {attributeName} to confirm", + "MESSAGE": "Deleting will remove the custom attribute", + "YES": "Delete ", + "NO": "Cancel" + } + }, + "EDIT": { + "TITLE": "Edit Custom Attribute", + "UPDATE_BUTTON_TEXT": "Update", + "TYPE": { + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter values and press enter key" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute updated successfully", + "ERROR_MESSAGE": "There was an error updating custom attribute, please try again" + } + }, + "TABS": { + "HEADER": "Custom Attributes", + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Name", + "DESCRIPTION": "Description", + "TYPE": "Type", + "KEY": "Key" + }, + "BUTTONS": { + "EDIT": "Edit", + "DELETE": "Delete" + }, + "EMPTY_RESULT": { + "404": "There are no custom attributes created", + "NOT_FOUND": "There are no custom attributes configured" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/auditLogs.json b/app/javascript/dashboard/i18n/locale/ka/auditLogs.json new file mode 100644 index 0000000..0cfb45d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Audit Logs", + "HEADER_BTN_TXT": "Add Audit Logs", + "LOADING": "Fetching Audit Logs", + "DESCRIPTION": "Audit Logs maintain a record of activities in your account, allowing you to track and audit your account, team, or services.", + "LEARN_MORE": "Learn more about audit logs", + "SEARCH_404": "There are no items matching this query", + "SIDEBAR_TXT": "Audit Logs
Audit Logs are trails for events and actions in a Chatwoot System.
", + "LIST": { + "404": "There are no Audit Logs available in this account.", + "TITLE": "Manage Audit Logs", + "DESC": "Audit Logs are trails for events and actions in a Chatwoot System.", + "TABLE_HEADER": { + "ACTIVITY": "User", + "TIME": "Action", + "IP_ADDRESS": "IP Address" + } + }, + "API": { + "SUCCESS_MESSAGE": "AuditLogs retrieved successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "DEFAULT_USER": "System", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} invited {invitee} to the account as an {role}", + "EDIT": { + "SELF": "{agentName} changed their {attributes} to {values}", + "OTHER": "{agentName} changed {attributes} of {user} to {values}", + "DELETED": "{agentName} changed {attributes} of a deleted user to {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} signed in", + "SIGN_OUT": "{agentName} signed out" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} წაშალა საუბარი #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/automation.json b/app/javascript/dashboard/i18n/locale/ka/automation.json new file mode 100644 index 0000000..9808317 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automation", + "DESCRIPTION": "Automation can replace and streamline existing processes that require manual effort, such as adding labels and assigning conversations to the most suitable agent. This allows the team to focus on their strengths while reducing time spent on routine tasks.", + "LEARN_MORE": "Learn more about automation", + "HEADER_BTN_TXT": "Add Automation Rule", + "LOADING": "Fetching automation rules", + "ADD": { + "TITLE": "Add Automation Rule", + "SUBMIT": "Create", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "NAME": { + "LABEL": "Rule Name", + "PLACEHOLDER": "Enter rule name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Enter rule description", + "ERROR": "Description is required" + }, + "EVENT": { + "LABEL": "Event", + "PLACEHOLDER": "Please select one", + "ERROR": "Event is required" + }, + "CONDITIONS": { + "LABEL": "Conditions" + }, + "ACTIONS": { + "LABEL": "Actions" + } + }, + "CONDITION_BUTTON_LABEL": "Add Condition", + "ACTION_BUTTON_LABEL": "Add Action", + "API": { + "SUCCESS_MESSAGE": "Automation rule added successfully", + "ERROR_MESSAGE": "Could not able to create a automation rule, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Name", + "DESCRIPTION": "Description", + "ACTIVE": "Active", + "CREATED_ON": "Created on" + }, + "404": "No automation rules found" + }, + "DELETE": { + "TITLE": "Delete Automation Rule", + "SUBMIT": "Delete", + "CANCEL_BUTTON_TEXT": "Cancel", + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + }, + "API": { + "SUCCESS_MESSAGE": "Automation rule deleted successfully", + "ERROR_MESSAGE": "Could not able to delete a automation rule, Please try again later" + } + }, + "EDIT": { + "TITLE": "Edit Automation Rule", + "SUBMIT": "Update", + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "SUCCESS_MESSAGE": "Automation rule updated successfully", + "ERROR_MESSAGE": "Could not update automation rule, Please try again later" + } + }, + "CLONE": { + "TOOLTIP": "Clone", + "API": { + "SUCCESS_MESSAGE": "Automation cloned successfully", + "ERROR_MESSAGE": "Could not clone automation rule, Please try again later" + } + }, + "FORM": { + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Delete", + "CANCEL": "Cancel", + "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" + }, + "CONDITION": { + "DELETE_MESSAGE": "You need to have atleast one condition to save", + "CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes" + }, + "ACTION": { + "DELETE_MESSAGE": "You need to have atleast one action to save", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Enter your message here", + "TEAM_DROPDOWN_PLACEHOLDER": "Select teams", + "EMAIL_INPUT_PLACEHOLDER": "Enter email", + "URL_INPUT_PLACEHOLDER": "Enter URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Activate Automation Rule", + "DEACTIVATION_TITLE": "Deactivate Automation Rule", + "ACTIVATION_DESCRIPTION": "This action will activate the automation rule '{automationName}'. Are you sure you want to proceed?", + "DEACTIVATION_DESCRIPTION": "This action will deactivate the automation rule '{automationName}'. Are you sure you want to proceed?", + "ACTIVATION_SUCCESFUL": "Automation Rule Activated Successfully", + "DEACTIVATION_SUCCESFUL": "Automation Rule Deactivated Successfully", + "ACTIVATION_ERROR": "Could not Activate Automation, Please try again later", + "DEACTIVATION_ERROR": "Could not Deactivate Automation, Please try again later", + "CONFIRMATION_LABEL": "Yes", + "CANCEL_LABEL": "No" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Could not upload attachment, Please try again", + "LABEL_IDLE": "Upload Attachment", + "LABEL_UPLOADING": "Uploading...", + "LABEL_UPLOADED": "Successfully Uploaded", + "LABEL_UPLOAD_FAILED": "Upload Failed" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Value is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "NONE_OPTION": "None", + "EVENTS": { + "CONVERSATION_CREATED": "საუბარი შეიქმნა", + "CONVERSATION_UPDATED": "საუბარი განახლდა", + "MESSAGE_CREATED": "შეტყობინება შეიქმნა", + "CONVERSATION_RESOLVED": "საუბარი გადაწყდა", + "CONVERSATION_OPENED": "საუბარი გაიხსნა" + }, + "ACTIONS": { + "ASSIGN_AGENT": "აგენტის მინიჭება", + "ASSIGN_TEAM": "გუნდის მინიჭება", + "ADD_LABEL": "იარლიყის დამატება", + "REMOVE_LABEL": "იარლიყის მოცილება", + "SEND_EMAIL_TO_TEAM": "ელფოსტის გაგზავნა გუნდისთვის", + "SEND_EMAIL_TRANSCRIPT": "საუბრის ჩანაწერის გაგზავნა ელფოსტით", + "MUTE_CONVERSATION": "საუბრის დადუმება", + "SNOOZE_CONVERSATION": "საუბრის გადადება", + "RESOLVE_CONVERSATION": "საუბრის გადაწყვეტა", + "SEND_WEBHOOK_EVENT": "Webhook-ის ივენთის გაგზავნა", + "SEND_ATTACHMENT": "მიბმული ფაილის გაგზავნა", + "SEND_MESSAGE": "შეტყობინების გაგზავნა", + "ADD_PRIVATE_NOTE": "პირადი ჩანაწერის დამატება", + "CHANGE_PRIORITY": "პრიორიტეტის შეცვლა", + "ADD_SLA": "SLA-ის დამატება", + "OPEN_CONVERSATION": "საუბრის გახსნა" + }, + "MESSAGE_TYPES": { + "INCOMING": "შემომავალი შეტყობინება", + "OUTGOING": "გამავალი შეტყობინება" + }, + "PRIORITY_TYPES": { + "NONE": "არცერთი", + "LOW": "დაბალი", + "MEDIUM": "საშუალო", + "HIGH": "მაღალი", + "URGENT": "გადაუდებელი" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "შეტყობინების ტიპი", + "MESSAGE_CONTAINS": "შეტყობინება შეიცავს", + "EMAIL": "ელფოსტა", + "INBOX": "ინბოქსი", + "CONVERSATION_LANGUAGE": "საუბრის ენა", + "PHONE_NUMBER": "ტელეფონის ნომერი", + "STATUS": "სტატუსი", + "BROWSER_LANGUAGE": "ბრაუზერის ენა", + "MAIL_SUBJECT": "ელფოსტის თემა", + "COUNTRY_NAME": "ქვეყანა", + "REFERER_LINK": "რეფერერის ბმული", + "ASSIGNEE_NAME": "დავალებული", + "TEAM_NAME": "გუნდი", + "PRIORITY": "პრიორიტეტი", + "LABELS": "იარლიყები" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/bulkActions.json b/app/javascript/dashboard/i18n/locale/ka/bulkActions.json new file mode 100644 index 0000000..0c8d660 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", + "AGENT_SELECT_LABEL": "Select agent", + "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", + "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Go back", + "ASSIGN_LABEL": "Assign", + "YES": "Yes", + "SEARCH_INPUT_PLACEHOLDER": "Search", + "ASSIGN_AGENT_TOOLTIP": "Assign agent", + "ASSIGN_TEAM_TOOLTIP": "Assign team", + "ASSIGN_SUCCESFUL": "Conversations assigned successfully.", + "ASSIGN_FAILED": "Failed to assign conversations. Please try again.", + "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", + "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", + "AGENT_LIST_LOADING": "Loading agents", + "UPDATE": { + "CHANGE_STATUS": "Change status", + "SNOOZE_UNTIL": "Snooze", + "UPDATE_SUCCESFUL": "Conversation status updated successfully.", + "UPDATE_FAILED": "Failed to update conversations. Please try again." + }, + "LABELS": { + "ASSIGN_LABELS": "Assign labels", + "NO_LABELS_FOUND": "No labels found", + "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "ASSIGN_SUCCESFUL": "Labels assigned successfully.", + "ASSIGN_FAILED": "Failed to assign labels. Please try again." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Select team", + "NONE": "None", + "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", + "ASSIGN_SELECTED_TEAMS": "Assign selected team.", + "ASSIGN_SUCCESFUL": "Teams assigned successfully.", + "ASSIGN_FAILED": "Failed to assign team. Please try again." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/campaign.json b/app/javascript/dashboard/i18n/locale/ka/campaign.json new file mode 100644 index 0000000..10366e7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Sent by", + "BOT": "Bot", + "FROM": "from", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "Cancel", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "SENT_BY": { + "LABEL": "Sent by", + "PLACEHOLDER": "Please select sender", + "ERROR": "Sender is required" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Please enter the URL", + "ERROR": "Please enter a valid URL" + }, + "TIME_ON_PAGE": { + "LABEL": "Time on page(Seconds)", + "PLACEHOLDER": "Please enter the time", + "ERROR": "Time on page is required" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "Enable campaign", + "TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "Cancel", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No WhatsApp campaigns are available", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "Cancel", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "Process {templateName}", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLES_LABEL": "Variables", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Are you sure to delete?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "Delete", + "API": { + "SUCCESS_MESSAGE": "Campaign deleted successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/ka/cannedMgmt.json new file mode 100644 index 0000000..3bc60c5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Canned Responses", + "LEARN_MORE": "Learn more about canned responses", + "DESCRIPTION": "Canned Responses are pre-written reply templates that help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a canned response during a conversation. ", + "HEADER_BTN_TXT": "Add canned response", + "LOADING": "Fetching canned responses...", + "SEARCH_404": "There are no items matching this query.", + "LIST": { + "404": "There are no canned responses available in this account.", + "TITLE": "Manage canned responses", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "TABLE_HEADER": { + "SHORT_CODE": "Short code", + "CONTENT": "Content", + "ACTIONS": "Actions" + } + }, + "ADD": { + "TITLE": "Add canned response", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a short code.", + "ERROR": "Short Code is required." + }, + "CONTENT": { + "LABEL": "Message", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "Submit" + }, + "API": { + "SUCCESS_MESSAGE": "Canned response added successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "EDIT": { + "TITLE": "Edit canned response", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a shortcode.", + "ERROR": "Short code is required." + }, + "CONTENT": { + "LABEL": "Message", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "Submit" + }, + "BUTTON_TEXT": "Edit", + "API": { + "SUCCESS_MESSAGE": "Canned response is updated successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Canned response deleted successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, delete ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/chatlist.json b/app/javascript/dashboard/i18n/locale/ka/chatlist.json new file mode 100644 index 0000000..92e6763 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Fetching conversations", + "LOAD_MORE_CONVERSATIONS": "Load more conversations", + "EOF": "All conversations loaded 🎉", + "LIST": { + "404": "There are no active conversations in this group." + }, + "FAILED_TO_SEND": "Failed to send", + "TAB_HEADING": "Conversations", + "MENTION_HEADING": "Mentions", + "UNATTENDED_HEADING": "Unattended", + "SEARCH": { + "INPUT": "Search for People, Chats, Saved Replies .." + }, + "FILTER_ALL": "All", + "ASSIGNEE_TYPE_TABS": { + "me": "Mine", + "unassigned": "Unassigned", + "all": "All" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Open" + }, + "resolved": { + "TEXT": "Resolved" + }, + "pending": { + "TEXT": "Pending" + }, + "snoozed": { + "TEXT": "Snoozed" + }, + "all": { + "TEXT": "All" + } + }, + "VIEW_FILTER": "View", + "SORT_TOOLTIP_LABEL": "Sort conversations", + "CHAT_SORT": { + "STATUS": "Status", + "ORDER_BY": "Order by" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Created", + "OLDEST": "Created at:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Last activity:", + "ACTIVE": "Last activity" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Last activity: Oldest first" + }, + "last_activity_at_desc": { + "TEXT": "Last activity: Newest first" + }, + "created_at_desc": { + "TEXT": "Created at: Newest first" + }, + "created_at_asc": { + "TEXT": "Created at: Oldest first" + }, + "priority_desc": { + "TEXT": "Priority: Highest first" + }, + "priority_asc": { + "TEXT": "Priority: Lowest first" + }, + "waiting_since_asc": { + "TEXT": "Pending Response: Longest first" + }, + "waiting_since_desc": { + "TEXT": "Pending Response: Shortest first" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "has shared a url" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Sort conversation", + "DROPDOWN_TITLE": "Sort by", + "ITEMS": { + "LATEST": { + "NAME": "Last activity at", + "LABEL": "Last activity" + }, + "CREATED_AT": { + "NAME": "Created at", + "LABEL": "Created at" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Last user message at", + "LABEL": "Last message" + } + } + }, + "RECEIVED_VIA_EMAIL": "Received via email", + "VIEW_TWEET_IN_TWITTER": "View tweet in Twitter", + "REPLY_TO_TWEET": "Reply to this tweet", + "LINK_TO_STORY": "Go to instagram story", + "SENT": "Sent successfully", + "READ": "Read successfully", + "DELIVERED": "Delivered successfully", + "NO_MESSAGES": "No Messages", + "NO_CONTENT": "No content available", + "HIDE_QUOTED_TEXT": "Hide Quoted Text", + "SHOW_QUOTED_TEXT": "Show Quoted Text", + "MESSAGE_READ": "Read", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/companies.json b/app/javascript/dashboard/i18n/locale/ka/companies.json new file mode 100644 index 0000000..0eee6cb --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "Name", + "DOMAIN": "Domain", + "CREATED_AT": "Created at", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "რიგი", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/components.json b/app/javascript/dashboard/i18n/locale/ka/components.json new file mode 100644 index 0000000..0a2542a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} of {totalPages} pages" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "No results found.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} more" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "No results found.", + "SEARCHING": "Searching..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Cancel", + "CONFIRM": "Confirm" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Search country", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Please select a dial code from the list" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Author is not available" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Learn more", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/contact.json b/app/javascript/dashboard/i18n/locale/ka/contact.json new file mode 100644 index 0000000..fcb32ec --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Not Available", + "EMAIL_ADDRESS": "Email Address", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "COPY_SUCCESSFUL": "Copied to clipboard successfully", + "COMPANY": "Company", + "LOCATION": "Location", + "BROWSER_LANGUAGE": "Browser Language", + "CONVERSATION_TITLE": "Conversation Details", + "VIEW_PROFILE": "View Profile", + "BROWSER": "Browser", + "OS": "Operating System", + "INITIATED_FROM": "Initiated from", + "INITIATED_AT": "Initiated at", + "IP_ADDRESS": "IP Address", + "CREATED_AT_LABEL": "Created", + "NEW_MESSAGE": "New message", + "CALL": "დარეკვა", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "აირჩიეთ ხმოვანი საფოსტო ყუთი" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.", + "TITLE": "Previous Conversations" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Contact Labels", + "ERROR": "Couldn't update labels" + }, + "CONVERSATION": { + "TITLE": "Conversation Labels", + "ADD_BUTTON": "Add Labels" + }, + "LABEL_SELECT": { + "TITLE": "Add Labels", + "PLACEHOLDER": "Search labels", + "NO_RESULT": "No labels found", + "CREATE_LABEL": "Create new label" + } + }, + "MERGE_CONTACT": "Merge contact", + "CONTACT_ACTIONS": "Contact actions", + "MUTE_CONTACT": "Block Contact", + "UNMUTE_CONTACT": "Unblock Contact", + "MUTED_SUCCESS": "This contact is blocked successfully. You will not be notified of any future conversations.", + "UNMUTED_SUCCESS": "This contact is unblocked successfully.", + "SEND_TRANSCRIPT": "Send Transcript", + "EDIT_LABEL": "Edit", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Custom Attributes", + "CONTACT_LABELS": "Contact Labels", + "PREVIOUS_CONVERSATIONS": "Previous Conversations", + "NO_RECORDS_FOUND": "No attributes found" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Edit Contact", + "TITLE": "Edit contact", + "DESC": "Edit contact details" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Delete Contact", + "TITLE": "Delete contact", + "DESC": "Delete contact details", + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete", + "NO": "No, Keep" + }, + "API": { + "SUCCESS_MESSAGE": "Contact deleted successfully", + "ERROR_MESSAGE": "Could not delete contact. Please try again later." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Submit", + "CANCEL": "Cancel", + "AVATAR": { + "LABEL": "Contact Avatar" + }, + "NAME": { + "PLACEHOLDER": "Enter the full name of the contact", + "LABEL": "Full Name" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio of the contact", + "LABEL": "Bio" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address of the contact", + "LABEL": "Email Address", + "DUPLICATE": "This email address is in use for another contact.", + "ERROR": "Please enter a valid email address." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number of the contact", + "LABEL": "Phone Number", + "HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]", + "ERROR": "Phone number should be either empty or of E.164 format", + "DIAL_CODE_ERROR": "Please select a dial code from the list", + "DUPLICATE": "This phone number is in use for another contact." + }, + "LOCATION": { + "PLACEHOLDER": "Enter the location of the contact", + "LABEL": "Location" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Enter the company name", + "LABEL": "Company Name" + }, + "COUNTRY": { + "PLACEHOLDER": "Enter the country name", + "LABEL": "Country Name", + "SELECT_PLACEHOLDER": "Select", + "REMOVE": "Remove", + "SELECT_COUNTRY": "Select Country" + }, + "CITY": { + "PLACEHOLDER": "Enter the city name", + "LABEL": "City Name" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Enter the Facebook username", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Enter the Twitter username", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Enter the LinkedIn username", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Enter the Github username", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Contact avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later." + } + }, + "SUCCESS_MESSAGE": "Contact saved successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Start conversation", + "TITLE": "New conversation", + "DESC": "Start a new conversation by sending a new message.", + "NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.", + "FORM": { + "TO": { + "LABEL": "To" + }, + "INBOX": { + "LABEL": "Inbox", + "PLACEHOLDER": "Choose source inbox", + "ERROR": "Select an inbox" + }, + "SUBJECT": { + "LABEL": "Subject", + "PLACEHOLDER": "Subject", + "ERROR": "Subject can't be empty" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Write your message here", + "ERROR": "Message can't be empty" + }, + "ATTACHMENTS": { + "SELECT": "Choose files", + "HELP_TEXT": "Drag and drop files here or choose files to attach" + }, + "SUBMIT": "Send message", + "CANCEL": "Cancel", + "SUCCESS_MESSAGE": "Message sent!", + "GO_TO_CONVERSATION": "View", + "ERROR_MESSAGE": "Couldn't send! try again" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Social Profiles" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Add custom attribute", + "COPY_SUCCESSFUL": "Copied to clipboard successfully", + "SHOW_MORE": "Show all attributes", + "SHOW_LESS": "Show less attributes", + "ACTIONS": { + "COPY": "Copy attribute", + "DELETE": "Delete attribute", + "EDIT": "Edit attribute" + }, + "ADD": { + "TITLE": "Create custom attribute", + "DESC": "Add custom information to this contact." + }, + "FORM": { + "CREATE": "Add attribute", + "CANCEL": "Cancel", + "NAME": { + "LABEL": "Custom attribute name", + "PLACEHOLDER": "Eg: shopify id", + "ERROR": "Invalid custom attribute name" + }, + "VALUE": { + "LABEL": "Attribute value", + "PLACEHOLDER": "Eg: 11901 " + }, + "ADD": { + "TITLE": "Create new attribute ", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Select value", + "SEARCH_INPUT_PLACEHOLDER": "Search value", + "NO_RESULT": "No result found" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Valid value is required", + "INVALID_URL": "Invalid URL", + "INVALID_INPUT": "Invalid Input" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Merge contacts", + "DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact’ s attributes will take precedence.", + "PRIMARY": { + "TITLE": "Primary contact", + "HELP_LABEL": "To be deleted" + }, + "PARENT": { + "TITLE": "Contact to merge", + "PLACEHOLDER": "Search for a contact", + "HELP_LABEL": "To be kept" + }, + "SUMMARY": { + "TITLE": "Summary", + "DELETE_WARNING": "Contact of {primaryContactName} will be deleted.", + "ATTRIBUTE_WARNING": "Contact details of {primaryContactName} will be copied to {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": " Merge contacts", + "CANCEL": "Cancel", + "CHILD_CONTACT": { + "ERROR": "Select a child contact to merge" + }, + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Contacts", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "აქტიური კონტაქტები", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "Message", + "SEND_MESSAGE": "Send message", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "Contacts" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Add contact", + "EXPORT_CONTACT": "Export contacts", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Save contact", + "EMAIL_ADDRESS_DUPLICATE": "This email address is in use for another contact.", + "PHONE_NUMBER_DUPLICATE": "This phone number is in use for another contact.", + "SUCCESS_MESSAGE": "Contact saved successfully", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "This contact is unblocked successfully", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Import contacts", + "DESCRIPTION": "Import contacts through a CSV file.", + "DOWNLOAD_LABEL": "Download a sample csv.", + "LABEL": "CSV File:", + "CHOOSE_FILE": "Choose file", + "CHANGE": "Change", + "CANCEL": "Cancel", + "IMPORT": "Import", + "SUCCESS_MESSAGE": "You will be notified via email when the import is complete.", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "EXPORT_CONTACT": { + "TITLE": "Export contacts", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Export", + "SUCCESS_MESSAGE": "Export is in progress, You will be notified via email when export file is ready to dowanlod.", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "Name", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "COMPANY": "Company", + "COUNTRY": "Country", + "CITY": "City", + "LAST_ACTIVITY": "Last activity", + "CREATED_AT": "Created at" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Do you want to save this filter?", + "CONFIRM": "Save filter", + "LABEL": "Name", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "Confirm Deletion", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "Yes, Delete", + "CANCEL": "No, Cancel", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "Name", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "COUNTRY": "Country", + "CITY": "City", + "CREATED_AT": "Created at", + "LAST_ACTIVITY": "Last activity", + "REFERER_LINK": "Referer link", + "BLOCKED": "Blocked", + "BLOCKED_TRUE": "True", + "BLOCKED_FALSE": "False", + "BUTTONS": { + "CLEAR_FILTERS": "Clear filters", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "Apply filters", + "ADD_FILTER": "Add filter" + }, + "TITLE": "Filter contacts", + "EDIT_SEGMENT": "Edit segment", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Clear filters" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "View details", + "EDIT_DETAILS_FORM": { + "TITLE": "Edit contact details", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "This email address is in use for another contact." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "This phone number is in use for another contact." + }, + "CITY": { + "PLACEHOLDER": "Enter the city name" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Enter the company name" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "ეს ქმედება სამუდამო და შეუქცევადია.", + "BUTTON": "წაშლა ახლავე" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "Delete contact", + "DELETE_DIALOG": { + "TITLE": "Confirm Deletion", + "DESCRIPTION": "ნამდვილად გსურთ ამ კონტაქტის წაშლა?", + "CONFIRM": "Yes, Delete", + "API": { + "SUCCESS_MESSAGE": "Contact deleted successfully", + "ERROR_MESSAGE": "Could not delete contact. Please try again later." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributes", + "HISTORY": "History", + "NOTES": "Notes", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "There are no previous conversations associated to this contact" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "Yes", + "NO": "No", + "TRIGGER": { + "SELECT": "Select value", + "INPUT": "Enter value" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "Valid value is required", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "Invalid URL", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "No attributes found", + "API": { + "SUCCESS_MESSAGE": "Attribute updated successfully", + "DELETE_SUCCESS_MESSAGE": "Attribute deleted successfully", + "UPDATE_ERROR": "Unable to update attribute. Please try again later", + "DELETE_ERROR": "Unable to delete attribute. Please try again later" + } + }, + "MERGE": { + "TITLE": "Merge contact", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Primary contact", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "To be deleted", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Search for a contact", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!", + "IS_SEARCHING": "Searching...", + "BUTTONS": { + "CANCEL": "Cancel", + "CONFIRM": "Merge contact" + } + }, + "NOTES": { + "PLACEHOLDER": "Add a note", + "WROTE": "wrote", + "YOU": "You", + "SAVE": "Save note", + "ADD_NOTE": "კონტაქტის შენიშვნის დამატება", + "EXPAND": "Expand", + "COLLAPSE": "ჩაკეცვა", + "NO_NOTES": "შენიშვნები არ არის, შეგიძლიათ შენიშვნების დამატება კონტაქტის დეტალების გვერდიდან.", + "EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above.", + "CONVERSATION_EMPTY_STATE": "შენიშვნები ჯერ არ არის. შენიშვნის შესაქმნელად გამოიყენეთ შენიშვნის დამატების ღილაკი." + } + }, + "EMPTY_STATE": { + "TITLE": "No contacts found in this account", + "SUBTITLE": "Start adding new contacts by clicking on the button below", + "BUTTON_LABEL": "Add contact", + "SEARCH_EMPTY_STATE_TITLE": "No contacts matches your search 🔍", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "ამ მომენტისთვის არცერთი კონტაქტი არ არის აქტიური 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Assign Labels", + "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "Delete", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Delete contact" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "View", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "To:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Subject :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "Bcc:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "Bcc" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Write your message here..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Variables", + "BACK": "Go back", + "SEND_MESSAGE": "Send message" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Go back", + "SEND_MESSAGE": "Send message" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/contactFilters.json b/app/javascript/dashboard/i18n/locale/ka/contactFilters.json new file mode 100644 index 0000000..4c62f07 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filter Contacts", + "SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.", + "EDIT_CUSTOM_SEGMENT": "Edit Segment", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your segment.", + "ADD_NEW_FILTER": "Add Filter", + "CLEAR_ALL_FILTERS": "Clear All Filters", + "FILTER_DELETE_ERROR": "You should have atleast one filter to save", + "SUBMIT_BUTTON_LABEL": "Submit", + "UPDATE_BUTTON_LABEL": "Update Segment", + "CANCEL_BUTTON_LABEL": "Cancel", + "CLEAR_BUTTON_LABEL": "Clear Filters", + "EMPTY_VALUE_ERROR": "Value is required", + "SEGMENT_LABEL": "Segment Name", + "SEGMENT_QUERY_LABEL": "Segment Query", + "TOOLTIP_LABEL": "Filter contacts", + "QUERY_DROPDOWN_LABELS": { + "AND": "AND", + "OR": "OR" + }, + "OPERATOR_LABELS": { + "equal_to": "Equal to", + "not_equal_to": "Not equal to", + "contains": "Contains", + "does_not_contain": "Does not contain", + "is_present": "Is present", + "is_not_present": "Is not present", + "is_greater_than": "Is greater than", + "is_lesser_than": "Is lesser than", + "days_before": "Is x days before" + }, + "ERRORS": { + "VALUE_REQUIRED": "Value is required" + }, + "ATTRIBUTES": { + "NAME": "Name", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "CITY": "City", + "COUNTRY": "Country", + "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_TEXT": "Text", + "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Created At", + "LAST_ACTIVITY": "Last Activity", + "REFERER_LINK": "Referrer link", + "BLOCKED": "Blocked", + "LABELS": "Labels" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard Filters", + "ADDITIONAL_FILTERS": "Additional Filters", + "CUSTOM_ATTRIBUTES": "Custom Attributes" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/contentTemplates.json b/app/javascript/dashboard/i18n/locale/ka/contentTemplates.json new file mode 100644 index 0000000..79c2c8c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "NO_CONTENT": "No content", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Text" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Back", + "SEND_MESSAGE_BUTTON": "Send Message" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/conversation.json b/app/javascript/dashboard/i18n/locale/ka/conversation.json new file mode 100644 index 0000000..3e0ebed --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Please select a conversation from left pane", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", + "404": "Sorry, we cannot find the conversation. Please try again", + "SWITCH_VIEW_LAYOUT": "Switch the layout", + "DASHBOARD_APP_TAB_MESSAGES": "Messages", + "UNVERIFIED_SESSION": "The identity of this user is not verified", + "NO_MESSAGE_1": "Uh oh! Looks like there are no messages from customers in your inbox.", + "NO_MESSAGE_2": " to send a message to your page!", + "NO_INBOX_1": "Hola! Looks like you haven't added any inboxes yet.", + "NO_INBOX_2": " to get started", + "NO_INBOX_AGENT": "Uh Oh! Looks like you are not part of any inbox. Please contact your administrator", + "SEARCH_MESSAGES": "Search for messages in conversations", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "to open command menu", + "KEYBOARD_SHORTCUTS": "to view keyboard shortcuts" + }, + "SEARCH": { + "TITLE": "Search messages", + "RESULT_TITLE": "Search Results", + "LOADING_MESSAGE": "Crunching data...", + "PLACEHOLDER": "Type any text to search messages", + "NO_MATCHING_RESULTS": "No results found." + }, + "UNREAD_MESSAGES": "Unread Messages", + "UNREAD_MESSAGE": "Unread Message", + "CLICK_HERE": "Click here", + "LOADING_INBOXES": "Loading inboxes", + "LOADING_CONVERSATIONS": "Loading Conversations", + "CANNOT_REPLY": "You cannot reply due to", + "24_HOURS_WINDOW": "24 hour message window restriction", + "48_HOURS_WINDOW": "48 hour message window restriction", + "API_HOURS_WINDOW": "ამ საუბარზე პასუხის გაცემა მხოლოდ {hours} საათის განმავლობაში შეგიძლიათ", + "NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?", + "ASSIGN_TO_ME": "Assign to me", + "BOT_HANDOFF_MESSAGE": "თქვენ პასუხობთ საუბარს, რომელსაც ამჟამად ამუშავებს ასისტენტი ან ბოტი", + "BOT_HANDOFF_ACTION": "ღიად მონიშვნა და თქვენთვის მინიჭება", + "BOT_HANDOFF_REOPEN_ACTION": "საუბრის ღიად მონიშვნა", + "BOT_HANDOFF_SUCCESS": "საუბარი გადმოგეცათ თქვენ", + "BOT_HANDOFF_ERROR": "საუბრის გადაბარება ვერ მოხერხდა. გთხოვთ, სცადოთ ხელახლა.", + "TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hour message window restriction", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "ეს Instagram ანგარიში გადატანილია ახალი Instagram არხის საფოსტო ყუთში. ყველა ახალი შეტყობინება გამოჩნდება იქ. თქვენ ვეღარ შეძლებთ შეტყობინებების გაგზავნას ამ საუბრიდან.", + "REPLYING_TO": "You are replying to:", + "REMOVE_SELECTION": "Remove Selection", + "DOWNLOAD": "Download", + "UNKNOWN_FILE_TYPE": "Unknown File", + "SAVE_CONTACT": "Save Contact", + "NO_CONTENT": "No content to display", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} has shared a contact", + "LOCATION": "{sender} has shared a location", + "FILE": "{sender} has shared a file", + "MEETING": "{sender} has started a meeting" + }, + "UPLOADING_ATTACHMENTS": "Uploading attachments...", + "REPLIED_TO_STORY": "Replied to your story", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", + "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", + "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", + "NO_RESPONSE": "No response", + "RESPONSE": "Response", + "RATING_TITLE": "Rating", + "FEEDBACK_TITLE": "Feedback", + "REPLY_MESSAGE_NOT_FOUND": "Message not available", + "CARD": { + "SHOW_LABELS": "Show labels", + "HIDE_LABELS": "Hide labels" + }, + "VOICE_CALL": { + "INCOMING_CALL": "შემომავალი ზარი", + "OUTGOING_CALL": "გამავალი ზარი", + "CALL_IN_PROGRESS": "ზარი მიმდინარეობს", + "NO_ANSWER": "პასუხი არ არის", + "MISSED_CALL": "გამოტოვებული ზარი", + "CALL_ENDED": "ზარი დასრულდა", + "NOT_ANSWERED_YET": "ჯერ არ უპასუხიათ", + "THEY_ANSWERED": "მათ უპასუხეს", + "YOU_ANSWERED": "თქვენ უპასუხეთ" + }, + "HEADER": { + "RESOLVE_ACTION": "Resolve", + "REOPEN_ACTION": "Reopen", + "OPEN_ACTION": "Open", + "MORE_ACTIONS": "მეტი მოქმედება", + "OPEN": "More", + "CLOSE": "Close", + "DETAILS": "details", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", + "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "missed", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Mark as pending", + "SNOOZE_UNTIL": "Snooze", + "SNOOZE": { + "TITLE": "Snooze until", + "NEXT_REPLY": "Next reply", + "TOMORROW": "Tomorrow", + "NEXT_WEEK": "Next week" + } + }, + "MENTION": { + "AGENTS": "Agents", + "TEAMS": "Teams" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Snooze until", + "APPLY": "Snooze", + "CANCEL": "Cancel" + }, + "PRIORITY": { + "TITLE": "Priority", + "OPTIONS": { + "NONE": "None", + "URGENT": "Urgent", + "HIGH": "High", + "MEDIUM": "Medium", + "LOW": "Low" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "None", + "INPUT_PLACEHOLDER": "Select priority", + "NO_RESULTS": "No results found", + "SUCCESSFUL": "Changed priority of conversation id {conversationId} to {priority}", + "FAILED": "Couldn't change priority. Please try again." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "#{conversationId} საუბრის წაშლა", + "DESCRIPTION": "ნამდვილად გსურთ ამ საუბრის წაშლა?", + "CONFIRM": "Delete" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Mark as pending", + "RESOLVED": "Mark as resolved", + "MARK_AS_UNREAD": "Mark as unread", + "MARK_AS_READ": "Mark as read", + "REOPEN": "Reopen conversation", + "SNOOZE": { + "TITLE": "Snooze", + "NEXT_REPLY": "Until next reply", + "TOMORROW": "Until tomorrow", + "NEXT_WEEK": "Until next week" + }, + "ASSIGN_AGENT": "Assign agent", + "ASSIGN_LABEL": "Assign label", + "AGENTS_LOADING": "Loading agents...", + "ASSIGN_TEAM": "Assign team", + "DELETE": "საუბრის წაშლა", + "OPEN_IN_NEW_TAB": "ახალ ჩანართში გახსნა", + "COPY_LINK": "საუბრის ბმულის კოპირება", + "COPY_LINK_SUCCESS": "საუბრის ბმული კოპირებულია ბუფერში", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Conversation id {conversationId} assigned to \"{agentName}\"", + "FAILED": "Couldn't assign agent. Please try again." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Couldn't assign label. Please try again." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Assigned team \"{team}\" to conversation id {conversationId}", + "FAILED": "Couldn't assign team. Please try again." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Message signature", + "ENABLE_SIGN_TOOLTIP": "Enable signature", + "DISABLE_SIGN_TOOLTIP": "Disable signature", + "MSG_INPUT": "Shift + enter for new line. Start with '/' to select a Canned Response.", + "PRIVATE_MSG_INPUT": "Shift + enter for new line. This will be visible only to Agents", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.", + "CLICK_HERE": "Click here to update", + "WHATSAPP_TEMPLATES": "Whatsapp Templates" + }, + "REPLYBOX": { + "REPLY": "Reply", + "PRIVATE_NOTE": "Private Note", + "SEND": "Send", + "CREATE": "Add Note", + "INSERT_READ_MORE": "Read more", + "DISMISS_REPLY": "Dismiss reply", + "REPLYING_TO": "Replying to:", + "TIP_EMOJI_ICON": "Show emoji selector", + "TIP_ATTACH_ICON": "Attach files", + "TIP_AUDIORECORDER_ICON": "Record audio", + "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", + "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "DRAG_DROP": "Drag and drop here to attach", + "START_AUDIO_RECORDING": "Start audio recording", + "STOP_AUDIO_RECORDING": "Stop audio recording", + "": "", + "EMAIL_HEAD": { + "TO": "TO", + "ADD_BCC": "Add bcc", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + }, + "BCC": { + "LABEL": "BCC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Undefined variables", + "MESSAGE": "You have {undefinedVariablesCount} undefined variables in your message: {undefinedVariables}. Would you like to send the message anyway?", + "CONFIRM": { + "YES": "Send", + "CANCEL": "Cancel" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "შეიტანე ციტირებული ელ. ფოსტის ჯაჭვი", + "DISABLE_TOOLTIP": "არ შეიტანო ციტირებული ელ. ფოსტის ჯაჭვი", + "REMOVE_PREVIEW": "ციტირებული ელ. ფოსტის ჯაჭვის წაშლა", + "COLLAPSE": "გადახედვის ჩაკეცვა", + "EXPAND": "გადახედვის გაშლა" + } + }, + "VISIBLE_TO_AGENTS": "Private Note: Only visible to you and your team", + "CHANGE_STATUS": "Conversation status changed", + "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_AGENT": "Conversation Assignee changed", + "CHANGE_AGENT_FAILED": "Assignee change failed", + "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", + "ASSIGN_LABEL_FAILED": "Label assignment failed", + "CHANGE_TEAM": "Conversation team changed", + "SUCCESS_DELETE_CONVERSATION": "საუბარი წარმატებით წაიშალა", + "FAIL_DELETE_CONVERSATION": "საუბრის წაშლა ვერ მოხერხდა! სცადეთ ხელახლა", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", + "MESSAGE_ERROR": "Unable to send this message, please try again later", + "SENT_BY": "Sent by:", + "BOT": "Bot", + "SEND_FAILED": "Couldn't send message! Try again", + "TRY_AGAIN": "retry", + "ASSIGNMENT": { + "SELECT_AGENT": "Select Agent", + "REMOVE": "Remove", + "ASSIGN": "Assign" + }, + "CONTEXT_MENU": { + "COPY": "Copy", + "REPLY_TO": "Reply to this message", + "DELETE": "Delete", + "CREATE_A_CANNED_RESPONSE": "Add to canned responses", + "TRANSLATE": "Translate", + "COPY_PERMALINK": "Copy link to the message", + "LINK_COPIED": "Message URL copied to the clipboard", + "DELETE_CONFIRMATION": { + "TITLE": "Are you sure you want to delete this message?", + "MESSAGE": "You cannot undo this action", + "DELETE": "Delete", + "CANCEL": "Cancel" + } + }, + "SIDEBAR": { + "CONTACT": "Contact", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "შემომავალი ზარი", + "OUTGOING_CALL": "გამავალი ზარი", + "CALL_IN_PROGRESS": "ზარი მიმდინარეობს", + "NOT_ANSWERED_YET": "ჯერ არ უპასუხიათ", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Send conversation transcript", + "DESC": "Send a copy of the conversation transcript to the specified email address", + "SUBMIT": "Submit", + "CANCEL": "Cancel", + "SEND_EMAIL_SUCCESS": "The chat transcript was sent successfully", + "SEND_EMAIL_ERROR": "There was an error, please try again", + "FORM": { + "SEND_TO_CONTACT": "Send the transcript to the customer", + "SEND_TO_AGENT": "Send the transcript to the assigned agent", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Send the transcript to another email address", + "EMAIL": { + "PLACEHOLDER": "Enter an email address", + "ERROR": "Please enter a valid email address" + } + } + }, + "ONBOARDING": { + "TITLE": "Hey 👋, Welcome to {installationName}!", + "DESCRIPTION": "Thanks for signing up. We want you to get the most out of {installationName}. Here are a few things you can do in {installationName} to make the experience delightful.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "Read our latest updates", + "ALL_CONVERSATION": { + "TITLE": "All your conversations in one place", + "DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status.", + "NEW_LINK": "Click here to create an inbox" + }, + "TEAM_MEMBERS": { + "TITLE": "Invite your team members", + "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.", + "NEW_LINK": "Click here to invite a team member" + }, + "LABELS": { + "TITLE": "Organize conversations with labels", + "DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.", + "NEW_LINK": "Click here to create tags" + }, + "CANNED_RESPONSES": { + "TITLE": "Create canned responses", + "DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.", + "NEW_LINK": "Click here to create a canned response" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Assigned Agent", + "SELF_ASSIGN": "Assign to me", + "TEAM_LABEL": "Assigned Team", + "SELECT": { + "PLACEHOLDER": "None" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Contact Details", + "CONVERSATION_ACTIONS": "Conversation Actions", + "CONVERSATION_LABELS": "Conversation Labels", + "CONVERSATION_INFO": "Conversation Information", + "CONTACT_NOTES": "კონტაქტის შენიშვნები", + "CONTACT_ATTRIBUTES": "Contact Attributes", + "PREVIOUS_CONVERSATION": "Previous Conversations", + "MACROS": "Macros", + "LINEAR_ISSUES": "დაკავშირებული Linear-ის საკითხები", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "Pending", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Create attribute", + "NO_RECORDS_FOUND": "No attributes found", + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "ADD": { + "TITLE": "Add", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + } + }, + "EMAIL_HEADER": { + "FROM": "From", + "TO": "To", + "BCC": "Bcc", + "CC": "Cc", + "SUBJECT": "Subject", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Participating", + "SIDEBAR_TITLE": "Conversation participants", + "NO_RECORDS_FOUND": "No results found", + "ADD_PARTICIPANTS": "Select participants", + "REMANING_PARTICIPANTS_TEXT": "+{count} others", + "REMANING_PARTICIPANT_TEXT": "+{count} other", + "TOTAL_PARTICIPANTS_TEXT": "{count} people are participating.", + "TOTAL_PARTICIPANT_TEXT": "{count} person is participating.", + "NO_PARTICIPANTS_TEXT": "No one is participating!.", + "WATCH_CONVERSATION": "Join conversation", + "YOU_ARE_WATCHING": "You are participating", + "API": { + "ERROR_MESSAGE": "Could not update, try again!", + "SUCCESS_MESSAGE": "Participants updated!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "View translated content", + "DESC": "You can view the translated content in each langauge.", + "ORIGINAL_CONTENT": "Original Content", + "TRANSLATED_CONTENT": "Translated Content", + "NO_TRANSLATIONS_AVAILABLE": "No translations are available for this content" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/csatMgmt.json b/app/javascript/dashboard/i18n/locale/ka/csatMgmt.json new file mode 100644 index 0000000..9e16dc2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Rate your conversation", + "PLACEHOLDER": "Tell us more...", + "RATINGS": { + "POOR": "😞 Poor", + "FAIR": "😑 Fair", + "AVERAGE": "😐 Average", + "GOOD": "😀 Good", + "EXCELLENT": "😍 Excellent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/customRole.json b/app/javascript/dashboard/i18n/locale/ka/customRole.json new file mode 100644 index 0000000..ca01a1e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Custom Roles", + "LEARN_MORE": "Learn more about custom roles", + "DESCRIPTION": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "HEADER_BTN_TXT": "Add custom role", + "LOADING": "Fetching custom roles...", + "SEARCH_404": "There are no items matching this query.", + "PAYWALL": { + "TITLE": "Upgrade to create custom roles", + "AVAILABLE_ON": "The custom role feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The custom role feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Manage custom roles", + "DESC": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "TABLE_HEADER": { + "NAME": "Name", + "DESCRIPTION": "Description", + "PERMISSIONS": "Permissions", + "ACTIONS": "Actions" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "Name is required." + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "Description is required." + }, + "PERMISSIONS": { + "LABEL": "Permissions", + "ERROR": "Permissions are required." + }, + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "ADD": { + "TITLE": "Add custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Submit", + "API": { + "SUCCESS_MESSAGE": "Custom role added successfully." + } + }, + "EDIT": { + "BUTTON_TEXT": "Edit", + "TITLE": "Edit custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Update", + "API": { + "SUCCESS_MESSAGE": "Custom role updated successfully." + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Custom role deleted successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, delete ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/datePicker.json b/app/javascript/dashboard/i18n/locale/ka/datePicker.json new file mode 100644 index 0000000..c7ef068 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Apply", + "CLEAR_BUTTON": "Clear", + "DATE_RANGE_INPUT": { + "START": "Start Date", + "END": "End Date" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "DATE RANGE", + "LAST_7_DAYS": "Last 7 days", + "LAST_30_DAYS": "Last 30 days", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_RANGE": "Custom date range" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/emoji.json b/app/javascript/dashboard/i18n/locale/ka/emoji.json new file mode 100644 index 0000000..d5b96f0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Search emojis", + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/general.json b/app/javascript/dashboard/i18n/locale/ka/general.json new file mode 100644 index 0000000..283cf79 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Showing {firstIndex}-{lastIndex} of {totalCount} items", + "PHONE_INPUT": { + "PLACEHOLDER": "Search", + "EMPTY_STATE": "No results found" + }, + "CLOSE": "Close", + "BETA": "Beta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/generalSettings.json b/app/javascript/dashboard/i18n/locale/ka/generalSettings.json new file mode 100644 index 0000000..c7bda98 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "თქვენ გადააჭარბეთ საუბრის ლიმიტს. Hacker პაკეტი მხოლოდ 500 საუბრის საშუალებას იძლევა.", + "INBOXES": "თქვენ გადააჭარბეთ საფოსტო ყუთის ლიმიტს. Hacker პაკეტი მხოლოდ ვებსაიტის ლაივ ჩატს უჭერს მხარს. დამატებითი საფოსტო ყუთებისთვის, როგორიცაა ელ. ფოსტა, WhatsApp და ა.შ., საჭიროა ფასიანი პაკეტი.", + "AGENTS": "თქვენ გადააჭარბეთ აგენტების ლიმიტს. თქვენი პაკეტი მხოლოდ {allowedAgents} აგენტს ითვალისწინებს.", + "NON_ADMIN": "გთხოვთ, დაუკავშირდეთ თქვენს ადმინისტრატორს პაკეტის განახლებისთვის და ყველა ფუნქციის გამოყენების გასაგრძელებლად." + }, + "TITLE": "Account settings", + "SUBMIT": "Update settings", + "BACK": "Back", + "DISMISS": "Dismiss", + "UPDATE": { + "ERROR": "Could not update settings, try again!", + "SUCCESS": "Successfully updated account settings" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "თქვენი ანგარიშის წაშლა", + "NOTE": "ანგარიშის წაშლის შემდეგ, ყველა თქვენი მონაცემი წაიშლება.", + "BUTTON_TEXT": "თქვენი ანგარიშის წაშლა", + "CONFIRM": { + "TITLE": "ანგარიშის წაშლა", + "MESSAGE": "თქვენი ანგარიშის წაშლა შეუქცევადია. შეიყვანეთ თქვენი ანგარიშის სახელი ქვემოთ, რათა დაადასტუროთ, რომ გსურთ მისი სამუდამოდ წაშლა.", + "BUTTON_TEXT": "Delete", + "DISMISS": "Cancel", + "PLACE_HOLDER": "Please type {accountName} to confirm" + }, + "SUCCESS": "ანგარიში წაშლისთვის მონიშნულია", + "FAILURE": "ანგარიშის წაშლა ვერ მოხერხდა, სცადეთ ხელახლა!", + "SCHEDULED_DELETION": { + "TITLE": "ანგარიშის წაშლა დაგეგმილია", + "MESSAGE_MANUAL": "ეს ანგარიში წაშლისთვის დაგეგმილია {deletionDate}-სთვის. ეს მოითხოვა ადმინისტრატორმა. შეგიძლიათ გააუქმოთ წაშლა ამ თარიღამდე.", + "MESSAGE_INACTIVITY": "ეს ანგარიში წაშლისთვის დაგეგმილია {deletionDate}-სთვის ანგარიშის არააქტიურობის გამო. შეგიძლიათ გააუქმოთ წაშლა ამ თარიღამდე.", + "CLEAR_BUTTON": "დაგეგმილი წაშლის გაუქმება" + } + }, + "FORM": { + "ERROR": "Please fix form errors", + "GENERAL_SECTION": { + "TITLE": "General settings", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "Account ID", + "NOTE": "This ID is required if you are building an API based integration" + }, + "AUTO_RESOLVE": { + "TITLE": "საუბრების ავტომატურად დახურვა", + "NOTE": "ეს კონფიგურაცია საშუალებას მოგცემთ, ავტომატურად დახუროთ საუბარი გარკვეული პერიოდის არააქტიურობის შემდეგ.", + "DURATION": { + "LABEL": "არააქტიურობის ხანგრძლივობა", + "HELP": "არააქტიურობის პერიოდი, რის შემდეგაც საუბარი ავტომატურად დაიხურება", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Preferences", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "Account name", + "PLACEHOLDER": "Your account name", + "ERROR": "Please enter a valid account name" + }, + "LANGUAGE": { + "LABEL": "Site language", + "PLACEHOLDER": "Your account name", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Incoming Email Domain", + "PLACEHOLDER": "The domain where you will receive the emails", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "Support Email", + "PLACEHOLDER": "Your company's support email", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclude unattended conversations", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a conversation should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "Update", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "Conversation continuity with emails is enabled for your account.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "You can receive emails in your custom domain now." + } + }, + "UPDATE_CHATWOOT": "An update {latestChatwootVersion} for Chatwoot is available. Please update your instance.", + "LEARN_MORE": "Learn more", + "PAYMENT_PENDING": "Your payment is pending. Please update your payment information to continue using Chatwoot", + "UPGRADE": "Upgrade to continue using Chatwoot", + "LIMITS_UPGRADE": "Your account has exceeded the usage limits, please upgrade your plan to continue using Chatwoot", + "OPEN_BILLING": "Open billing" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Press enter to select", + "ENTER_TO_REMOVE": "Press enter to remove", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "Select one", + "SELECT": "Select" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Notifications", + "MARK_ALL_DONE": "Mark All Done", + "DELETE_TITLE": "deleted", + "UNREAD_NOTIFICATION": { + "TITLE": "Unread Notifications", + "ALL_NOTIFICATIONS": "View all notifications", + "LOADING_UNREAD_MESSAGE": "Loading unread notifications...", + "EMPTY_MESSAGE": "You have no unread notifications" + }, + "LIST": { + "LOADING_MESSAGE": "Loading notifications...", + "404": "No Notifications", + "TABLE_HEADER": [ + "Name", + "Phone Number", + "Conversations", + "Last Contacted" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "New conversation", + "conversation_assignment": "Conversation Assigned", + "assigned_conversation_new_message": "New Message", + "participating_conversation_new_message": "New Message", + "conversation_mention": "Mention", + "sla_missed_first_response": "SLA Missed", + "sla_missed_next_response": "SLA Missed", + "sla_missed_resolution": "SLA Missed" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Offline", + "RECONNECTING": "Reconnecting...", + "RECONNECT_SUCCESS": "Reconnected" + }, + "BUTTON": { + "REFRESH": "Refresh" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Search or jump to", + "SECTIONS": { + "GENERAL": "General", + "REPORTS": "Reports", + "CONVERSATION": "Conversation", + "BULK_ACTIONS": "Bulk Actions", + "CHANGE_ASSIGNEE": "Change Assignee", + "CHANGE_PRIORITY": "Change Priority", + "CHANGE_TEAM": "Change Team", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "ADD_LABEL": "Add label to the conversation", + "REMOVE_LABEL": "Remove label from the conversation", + "SETTINGS": "Settings", + "AI_ASSIST": "AI Assist", + "APPEARANCE": "Appearance", + "SNOOZE_NOTIFICATION": "Snooze Notification" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview", + "GO_TO_CONVERSATION_REPORTS": "Go to Conversation Reports", + "GO_TO_AGENT_REPORTS": "Go to Agent Reports", + "GO_TO_LABEL_REPORTS": "Go to Label Reports", + "GO_TO_INBOX_REPORTS": "Go to Inbox Reports", + "GO_TO_TEAM_REPORTS": "Go to Team Reports", + "GO_TO_SETTINGS_AGENTS": "Go to Agent Settings", + "GO_TO_SETTINGS_TEAMS": "Go to Team Settings", + "GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings", + "GO_TO_SETTINGS_LABELS": "Go to Label Settings", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings", + "GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings", + "GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings", + "GO_TO_SETTINGS_PROFILE": "Go to Profile Settings", + "GO_TO_NOTIFICATIONS": "Go to Notifications", + "ADD_LABELS_TO_CONVERSATION": "Add label to the conversation", + "ASSIGN_AN_AGENT": "Assign an agent", + "AI_ASSIST": "AI Assist", + "ASSIGN_PRIORITY": "Assign priority", + "ASSIGN_A_TEAM": "Assign a team", + "MUTE_CONVERSATION": "Mute conversation", + "UNMUTE_CONVERSATION": "Unmute conversation", + "REMOVE_LABEL_FROM_CONVERSATION": "Remove label from the conversation", + "REOPEN_CONVERSATION": "Reopen conversation", + "RESOLVE_CONVERSATION": "Resolve conversation", + "SEND_TRANSCRIPT": "Send an email transcript", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "UNTIL_NEXT_REPLY": "Until next reply", + "UNTIL_NEXT_WEEK": "Until next week", + "UNTIL_TOMORROW": "Until tomorrow", + "UNTIL_NEXT_MONTH": "Until next month", + "AN_HOUR_FROM_NOW": "Until an hour from now", + "UNTIL_CUSTOM_TIME": "Custom...", + "CHANGE_APPEARANCE": "Change Appearance", + "LIGHT_MODE": "Light", + "DARK_MODE": "Dark", + "SYSTEM_MODE": "System", + "SNOOZE_NOTIFICATION": "Snooze Notification" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Loading Dashboard App..." + }, + "COMMON": { + "OR": "Or", + "CLICK_HERE": "click here" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/helpCenter.json b/app/javascript/dashboard/i18n/locale/ka/helpCenter.json new file mode 100644 index 0000000..0ab8d62 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Help Center", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "Create Portal" + }, + "HEADER": { + "FILTER": "Filter by", + "SORT": "Sort by", + "LOCALE": "Locale", + "SETTINGS_BUTTON": "Settings", + "NEW_BUTTON": "New Article", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Published", + "DRAFT": "Draft", + "ARCHIVED": "Archived" + }, + "TITLES": { + "ALL_ARTICLES": "All Articles", + "MINE": "My Articles", + "DRAFT": "Draft Articles", + "ARCHIVED": "Archived Articles" + }, + "LOCALE_SELECT": { + "TITLE": "Select locale", + "PLACEHOLDER": "Select locale", + "NO_RESULT": "No locale found", + "SEARCH_PLACEHOLDER": "Search locale" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "All Articles", + "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", + "PREVIEW": "Preview", + "ADD_TRANSLATION": "Add translation", + "OPEN_SIDEBAR": "Open sidebar", + "CLOSE_SIDEBAR": "Close sidebar", + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Upload image", + "UPLOADING": "Uploading...", + "SUCCESS": "Image uploaded successfully", + "ERROR": "Error while uploading image", + "UN_AUTHORIZED_ERROR": "You are not authorized to upload images", + "ERROR_FILE_SIZE": "Image size should be less than {size}MB", + "ERROR_FILE_FORMAT": "Image format should be jpg, jpeg or png", + "ERROR_FILE_DIMENSIONS": "Image dimensions should be less than 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Article Settings", + "FORM": { + "CATEGORY": { + "LABEL": "Category", + "TITLE": "Select category", + "PLACEHOLDER": "Select category", + "NO_RESULT": "No category found", + "SEARCH_PLACEHOLDER": "Search category" + }, + "AUTHOR": { + "LABEL": "Author", + "TITLE": "Select author", + "PLACEHOLDER": "Select author", + "NO_RESULT": "No authors found", + "SEARCH_PLACEHOLDER": "Search author" + }, + "META_TITLE": { + "LABEL": "Meta title", + "PLACEHOLDER": "Add a meta title" + }, + "META_DESCRIPTION": { + "LABEL": "Meta description", + "PLACEHOLDER": "Add your meta description for better SEO results..." + }, + "META_TAGS": { + "LABEL": "Meta tags", + "PLACEHOLDER": "Add meta tags separated by comma..." + } + }, + "BUTTONS": { + "ARCHIVE": "Archive article", + "DELETE": "Delete article" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Uncategorized", + "SEARCH_RESULTS": "Search results for {query}", + "EMPTY_TEXT": "Search for articles to insert into replies.", + "SEARCH_LOADER": "Searching...", + "INSERT_ARTICLE": "Insert", + "NO_RESULT": "No articles found", + "COPY_LINK": "Copy article link to clipboard", + "OPEN_LINK": "Open article in new tab", + "PREVIEW_LINK": "Preview article" + }, + "PORTAL": { + "HEADER": "Portals", + "DEFAULT": "Default", + "NEW_BUTTON": "New Portal", + "ACTIVE_BADGE": "active", + "CHOOSE_LOCALE_LABEL": "Choose a locale", + "LOADING_MESSAGE": "Loading portals...", + "ARTICLES_LABEL": "articles", + "NO_PORTALS_MESSAGE": "There are no available portals", + "ADD_NEW_LOCALE": "Add a new locale", + "POPOVER": { + "TITLE": "Portals", + "PORTAL_SETTINGS": "Portal settings", + "SUBTITLE": "You have multiple portals and can have different locales for each portal.", + "CANCEL_BUTTON_LABEL": "Cancel", + "CHOOSE_LOCALE_BUTTON": "Choose Locale" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "articles", + "ADD": "Add locale", + "VISIT": "Visit site", + "SETTINGS": "Settings", + "DELETE": "Delete" + }, + "PORTAL_CONFIG": { + "TITLE": "Portal Configurations", + "ITEMS": { + "NAME": "Name", + "DOMAIN": "Custom domain", + "SLUG": "Slug", + "TITLE": "Portal title", + "THEME": "Theme color", + "SUB_TEXT": "Portal sub text" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Available locales", + "TABLE": { + "NAME": "Locale name", + "CODE": "Locale code", + "ARTICLE_COUNT": "No. of articles", + "CATEGORIES": "No. of categories", + "SWAP": "Swap", + "DELETE": "Delete", + "DEFAULT_LOCALE": "Default" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Name", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Help center information", + "BODY": "Basic information about portal" + }, + "CUSTOMIZATION": { + "TITLE": "Help center customization", + "BODY": "Customize portal" + }, + "FINISH": { + "TITLE": "Voila! 🎉", + "BODY": "You're all set!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Back", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Create Portal", + "TITLE": "Help center information", + "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Portal customisation", + "TITLE": "Help center customization", + "UPDATE_PORTAL_BUTTON": "Update portal settings" + }, + "FINISH_PAGE": { + "TITLE": "Voila!🎉 You're all set up!", + "MESSAGE": "You can now see this created portal on your all portals page.", + "FINISH": "Go to all portals page" + } + }, + "LOGO": { + "LABEL": "Logo", + "UPLOAD_BUTTON": "Upload logo", + "HELP_TEXT": "This logo will be displayed on the portal header.", + "IMAGE_UPLOAD_SUCCESS": "Logo uploaded successfully", + "IMAGE_UPLOAD_ERROR": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Error while deleting logo" + }, + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Portal name", + "HELP_TEXT": "The name will be used in the public facing portal internally.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug for urls", + "ERROR": "Slug is required" + }, + "DOMAIN": { + "LABEL": "Custom Domain", + "PLACEHOLDER": "Portal custom domain", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}", + "ERROR": "Enter a valid domain URL" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home Page Link", + "PLACEHOLDER": "Portal home page link", + "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}", + "ERROR": "Enter a valid home page URL" + }, + "THEME_COLOR": { + "LABEL": "Portal theme color", + "HELP_TEXT": "This color will show as the theme color for the portal." + }, + "PAGE_TITLE": { + "LABEL": "Page Title", + "PLACEHOLDER": "Portal page title", + "HELP_TEXT": "The page title will be used in the public facing portal.", + "ERROR": "Page title is required" + }, + "HEADER_TEXT": { + "LABEL": "Header Text", + "PLACEHOLDER": "Portal header text", + "HELP_TEXT": "The Portal header text will be used in the public facing portal.", + "ERROR": "Portal header text is required" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", + "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", + "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Loading articles...", + "404": "No articles matches your search 🔍", + "NO_ARTICLES": "There are no available articles", + "HEADERS": { + "TITLE": "Title", + "CATEGORY": "Category", + "READ_COUNT": "Views", + "STATUS": "Status", + "LAST_EDITED": "Last edited" + }, + "COLUMNS": { + "BY": "by", + "AUTHOR_NOT_AVAILABLE": "Author is not available" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Loading article...", + "TITLE_PLACEHOLDER": "Article title goes here", + "CONTENT_PLACEHOLDER": "Write your article here", + "API": { + "ERROR": "Error while saving article" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article published successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Error while drafting article", + "SUCCESS": "Article drafted successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Yes, Delete", + "NO": "No, Keep it" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Search for articles" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Create a category", + "SUB_TITLE": "The category will be used in the public facing portal to categorize articles.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Create category", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Search articles", + "PLACEHOLDER": "Search articles", + "NO_RESULT": "No articles found", + "SEARCHING": "Searching...", + "SEARCH_BUTTON": "Search", + "INSERT_ARTICLE": "Insert link", + "IFRAME_ERROR": "URL is empty or invalid. Unable to display content.", + "OPEN_ARTICLE_SEARCH": "Insert article from Help Center", + "SUCCESS_ARTICLE_INSERTED": "Article inserted successfully", + "PREVIEW_LINK": "Preview article", + "CANCEL": "Close", + "BACK": "Back", + "BACK_RESULTS": "Back to results" + }, + "UPGRADE_PAGE": { + "TITLE": "Help Center", + "DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Upgrade your subscription to enable this feature.", + "SELF_HOSTED_DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Please contact your administrator to enable this feature.", + "BUTTON": { + "LEARN_MORE": "Learn more", + "UPGRADE": "Upgrade" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Multiple portals", + "DESCRIPTION": "Create multiple help center portals for different products using the same account." + }, + "LOCALES": { + "TITLE": "Full support for locales", + "DESCRIPTION": "Localize the portal in your language. We support all locales and allow translations for every article." + }, + "SEO": { + "TITLE": "SEO-friendly design", + "DESCRIPTION": "Customize your meta tags to improve your visibility on search engines with our SEO-friendly pages." + }, + "API": { + "TITLE": "Full API support", + "DESCRIPTION": "Use the portal as a headless CMS with third party front-end frameworks using our APIs." + } + } + }, + "LOADING": "Loading...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} view | {count} views", + "DROPDOWN_MENU": { + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "DELETE": "Delete" + }, + "STATUS": { + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "UNCATEGORISED": "Uncategorised" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "All articles", + "MINE": "Mine", + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "ALL": "All categories" + }, + "LOCALE": { + "ALL": "All locales" + }, + "NEW_ARTICLE": "New article" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Write an article", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "New article" + }, + "MINE": { + "TITLE": "You haven't written any articles here", + "SUBTITLE": "All articles written by you show up here for quick access." + }, + "DRAFT": { + "TITLE": "There are no articles in drafts", + "SUBTITLE": "Draft articles will appear here" + }, + "PUBLISHED": { + "TITLE": "There are no published articles", + "SUBTITLE": "Published articles will appear here" + }, + "ARCHIVED": { + "TITLE": "There are no articles in the archive", + "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages" + }, + "CATEGORY": { + "TITLE": "There are no articles in this category", + "SUBTITLE": "Articles in this category will appear here" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "New category", + "EDIT_CATEGORY": "Edit category", + "CATEGORIES_COUNT": "{n} category | {n} categories", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categories ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "No categories found", + "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + }, + "HEADER": { + "CREATE": "Create category", + "EDIT": "Edit category", + "DESCRIPTION": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale" + }, + "FORM": { + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "ERROR": "Slug is required", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + } + }, + "BUTTONS": { + "CREATE": "Create", + "EDIT": "Update", + "CANCEL": "Cancel" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "No locales available | {n} locale | {n} locales", + "NEW_LOCALE_BUTTON_TEXT": "New locale", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles", + "CATEGORIES_COUNT": "{count} category | {count} categories", + "DEFAULT": "Default", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Make default", + "DELETE": "Delete" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Add a new locale", + "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", + "COMBOBOX": { + "PLACEHOLDER": "Select locale..." + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "PREVIEW": "Preview", + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "BACK_TO_ARTICLES": "Back to articles" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "More properties", + "UNCATEGORIZED": "Uncategorized", + "EDITOR_PLACEHOLDER": "Write something..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Article properties", + "META_DESCRIPTION": "Meta description", + "META_DESCRIPTION_PLACEHOLDER": "Add meta description", + "META_TITLE": "Meta title", + "META_TITLE_PLACEHOLDER": "Add meta title", + "META_TAGS": "Meta tags", + "META_TAGS_PLACEHOLDER": "Add meta tags" + }, + "API": { + "ERROR": "Error while saving article" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "New portal", + "PORTALS": "Portals", + "CREATE_PORTAL": "Create and manage multiple portals", + "ARTICLES": "articles", + "DOMAIN": "domain", + "PORTAL_NAME": "Portal name" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Create new portal", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "Create", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "User Guide | Chatwoot", + "MESSAGE": "Choose an name for your portal.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Slug is required", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logo", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo", + "IMAGE_DELETE_SUCCESS": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Unable to delete logo", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Portal name", + "ERROR": "Name is required" + }, + "HEADER_TEXT": { + "LABEL": "Header text", + "PLACEHOLDER": "Portal header text" + }, + "PAGE_TITLE": { + "LABEL": "Page title", + "PLACEHOLDER": "Portal page title" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home page link", + "PLACEHOLDER": "Portal home page link", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Live chat widget", + "PLACEHOLDER": "Select live chat widget", + "HELP_TEXT": "Select a live chat widget that will appear on your help center", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Brand color" + }, + "SAVE_CHANGES": "Save changes" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Custom domain", + "LABEL": "Custom domain:", + "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Portal custom domain", + "EDIT_BUTTON": "Edit", + "ADD_BUTTON": "Add custom domain", + "STATUS": { + "LIVE": "Live", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Add custom domain", + "EDIT_HEADER": "Edit custom domain", + "ADD_CONFIRM_BUTTON_LABEL": "Add domain", + "EDIT_CONFIRM_BUTTON_LABEL": "Update domain", + "LABEL": "Custom domain", + "PLACEHOLDER": "Portal custom domain", + "ERROR": "Custom domain is required", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS configuration", + "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "Send" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Delete {portalName}", + "HEADER": "Delete portal", + "DESCRIPTION": "Permanently delete this portal. This action is irreversible", + "DIALOG": { + "HEADER": "Sure you want to delete {portalName}?", + "DESCRIPTION": "This is a permanent action that cannot be reversed.", + "CONFIRM_BUTTON_LABEL": "Delete" + } + }, + "EDIT_CONFIGURATION": "Edit configuration" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal created successfully", + "ERROR_MESSAGE": "Unable to create portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal updated successfully", + "ERROR_MESSAGE": "Unable to update portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "Uploading...", + "UPLOAD": "Upload & Process", + "CANCEL": "Cancel", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Generating...", + "CONFIRM_DELETE": "Are you sure you want to delete {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Completed", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/inbox.json b/app/javascript/dashboard/i18n/locale/ka/inbox.json new file mode 100644 index 0000000..385e9e4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "My Inbox", + "DISPLAY_DROPDOWN": "Display", + "LOADING": "Fetching notifications", + "404": "There are no active notifications in this group.", + "NO_NOTIFICATIONS": "No notifications", + "NOTE": "Notifications from all subscribed inboxes", + "NO_MESSAGES_AVAILABLE": "Oops! Not able to fetch messages", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week" + }, + "ACTION_HEADER": { + "SNOOZE": "Snooze notification", + "DELETE": "Delete notification", + "BACK": "Back" + }, + "TYPES": { + "CONVERSATION_MENTION": "You have been mentioned in a conversation", + "CONVERSATION_CREATION": "New conversation created", + "CONVERSATION_ASSIGNMENT": "A conversation has been assigned to you", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message in a conversation you are participating in", + "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation", + "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation", + "SLA_MISSED_RESOLUTION": "SLA target resolution missed for conversation" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Mentioned", + "CONVERSATION_ASSIGNMENT": "Assigned to you", + "CONVERSATION_CREATION": "New Conversation", + "SLA_MISSED_FIRST_RESPONSE": "SLA breach", + "SLA_MISSED_NEXT_RESPONSE": "SLA breach", + "SLA_MISSED_RESOLUTION": "SLA breach", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message", + "SNOOZED_UNTIL": "Snoozed for {time}", + "SNOOZED_ENDS": "Snooze ended" + }, + "NO_CONTENT": "No content available", + "MENU_ITEM": { + "MARK_AS_READ": "Mark as read", + "MARK_AS_UNREAD": "Mark as unread", + "SNOOZE": "Snooze", + "DELETE": "Delete", + "MARK_ALL_READ": "Mark all as read", + "DELETE_ALL": "Delete all", + "DELETE_ALL_READ": "Delete all read" + }, + "DISPLAY_MENU": { + "SORT": "Sort", + "DISPLAY": "Display :", + "SORT_OPTIONS": { + "NEWEST": "Newest", + "OLDEST": "Oldest", + "PRIORITY": "Priority" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Snoozed", + "READ": "Read", + "LABELS": "Labels", + "CONVERSATION_ID": "Conversation ID" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notification marked as read", + "MARK_AS_UNREAD": "Notification marked as unread", + "SNOOZE": "Notification snoozed", + "DELETE": "Notification deleted", + "MARK_ALL_READ": "All notifications marked as read", + "DELETE_ALL": "All notifications deleted", + "DELETE_ALL_READ": "All read notifications deleted" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ka/inboxMgmt.json new file mode 100644 index 0000000..e4acfe9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Inboxes", + "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.", + "LEARN_MORE": "Learn more about inboxes", + "RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.", + "CLICK_TO_RECONNECT": "Click here to reconnect.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "There are no inboxes attached to this account." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Choose Channel", + "BODY": "Choose the provider you want to integrate with Chatwoot." + }, + "INBOX": { + "TITLE": "Create Inbox", + "BODY": "Authenticate your account and create an inbox." + }, + "AGENT": { + "TITLE": "Add Agents", + "BODY": "Add agents to the created inbox." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "You are all set to go!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Enter your inbox name (eg: Acme Inc)", + "ERROR": "Please enter a valid inbox name" + }, + "WEBSITE_NAME": { + "LABEL": "Website Name", + "PLACEHOLDER": "Enter your website name (eg: Acme Inc)" + }, + "FB": { + "HELP": "PS: By signing in, we only get access to your Page's messages. Your private messages can never be accessed by Chatwoot.", + "CHOOSE_PAGE": "Choose Page", + "CHOOSE_PLACEHOLDER": "Select a page from the list", + "INBOX_NAME": "Inbox Name", + "ADD_NAME": "Add a name for your inbox", + "PICK_NAME": "Pick a Name for your Inbox", + "PICK_A_VALUE": "Pick a value", + "CREATE_INBOX": "Create Inbox" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continue with Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile", + "HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ", + "ERROR_MESSAGE": "There was an error connecting to Instagram, please try again", + "ERROR_AUTH": "There was an error connecting to Instagram, please try again", + "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "To add your Twitter profile as a channel, you need to authenticate your Twitter Profile by clicking on 'Sign in with Twitter' ", + "ERROR_MESSAGE": "There was an error connecting to Twitter, please try again", + "TWEETS": { + "ENABLE": "Create conversations from mentioned Tweets" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Website channel", + "DESC": "Create a channel for your website and start supporting your customers via our website widget.", + "LOADING_MESSAGE": "Creating Website Support Channel", + "CHANNEL_AVATAR": { + "LABEL": "Channel Avatar" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "Please enter your Webhook URL", + "ERROR": "Please enter a valid URL" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Website Domain", + "PLACEHOLDER": "Enter your website domain (eg: acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Welcome Heading", + "PLACEHOLDER": "Hi there !" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Welcome Tagline", + "PLACEHOLDER": "We make it simple to connect with us. Ask us anything, or share your feedback." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Channel greeting message", + "PLACEHOLDER": "Acme Inc typically replies in a few hours." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Enable channel greeting", + "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "REPLY_TIME": { + "TITLE": "Set Reply time", + "IN_A_FEW_MINUTES": "In a few minutes", + "IN_A_FEW_HOURS": "In a few hours", + "IN_A_DAY": "In a day", + "HELP_TEXT": "This reply time will be displayed on the live chat widget" + }, + "WIDGET_COLOR": { + "LABEL": "Widget Color", + "PLACEHOLDER": "Update the widget color used in widget" + }, + "SUBMIT_BUTTON": "Create inbox", + "API": { + "ERROR_MESSAGE": "We were not able to create a website channel, please try again" + } + }, + "TWILIO": { + "TITLE": "Twilio SMS/WhatsApp Channel", + "DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "Account SID", + "PLACEHOLDER": "Please enter your Twilio Account SID", + "ERROR": "This field is required" + }, + "API_KEY": { + "USE_API_KEY": "Use API Key Authentication", + "LABEL": "API Key SID", + "PLACEHOLDER": "Please enter your API Key SID", + "ERROR": "This field is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Please enter your API Key Secret", + "ERROR": "This field is required" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "Messaging Service SID", + "PLACEHOLDER": "Please enter your Twilio Messaging Service SID", + "ERROR": "This field is required", + "USE_MESSAGING_SERVICE": "Use a Twilio Messaging Service" + }, + "CHANNEL_TYPE": { + "LABEL": "Channel Type", + "ERROR": "Please select your Channel Type" + }, + "AUTH_TOKEN": { + "LABEL": "Auth Token", + "PLACEHOLDER": "Please enter your Twilio Auth Token", + "ERROR": "This field is required" + }, + "CHANNEL_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone Number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the message callback URL in Twilio with the URL mentioned here." + }, + "SUBMIT_BUTTON": "Create Twilio Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Twilio credentials, please try again" + } + }, + "SMS": { + "TITLE": "SMS Channel", + "DESC": "Start supporting your customers via SMS.", + "PROVIDERS": { + "LABEL": "API Provider", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandwidth" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the SMS channel" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "Account ID", + "PLACEHOLDER": "Please enter your Bandwidth Account ID", + "ERROR": "This field is required" + }, + "API_KEY": { + "LABEL": "API Key", + "PLACEHOLDER": "Please enter your Bandwidth API Key", + "ERROR": "This field is required" + }, + "API_SECRET": { + "LABEL": "API Secret", + "PLACEHOLDER": "Please enter your Bandwidth API Secret", + "ERROR": "This field is required" + }, + "APPLICATION_ID": { + "LABEL": "Application ID", + "PLACEHOLDER": "Please enter your Bandwidth Application ID", + "ERROR": "This field is required" + }, + "INBOX_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "SUBMIT_BUTTON": "Create Bandwidth Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Bandwidth credentials, please try again" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the message callback URL in Bandwidth with the URL mentioned here." + } + } + }, + "WHATSAPP": { + "TITLE": "WhatsApp Channel", + "DESC": "Start supporting your customers via WhatsApp.", + "PROVIDERS": { + "LABEL": "API Provider", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter an inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "PHONE_NUMBER_ID": { + "LABEL": "Phone number ID", + "PLACEHOLDER": "Please enter the Phone number ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "Business Account ID", + "PLACEHOLDER": "Please enter the Business Account ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook Verify Token", + "PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.", + "ERROR": "Please enter a valid value." + }, + "API_KEY": { + "LABEL": "API key", + "SUBTITLE": "Configure the WhatsApp API key.", + "PLACEHOLDER": "API key", + "ERROR": "Please enter a valid value." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL and the verification token in the Facebook Developer portal with the values shown below.", + "WEBHOOK_URL": "Webhook URL", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook Verification Token" + }, + "SUBMIT_BUTTON": "Create WhatsApp Channel", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "Phone Number", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "Account SID", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "Auth Token", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "API Key SID", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "API Channel", + "DESC": "Integrate with API channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "SUBTITLE": "Configure the URL where you want to receive callbacks on events.", + "PLACEHOLDER": "Webhook URL" + }, + "SUBMIT_BUTTON": "Create API Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the api channel" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "Email Channel", + "DESC": "Integrate your email inbox.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "EMAIL": { + "LABEL": "Email", + "SUBTITLE": "Email where your customers sends you support tickets", + "PLACEHOLDER": "Email" + }, + "SUBMIT_BUTTON": "Create Email Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the email channel" + }, + "FINISH_MESSAGE": "Start forwarding your emails to the following email address.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "Click here", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "LINE Channel", + "DESC": "Integrate with LINE channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "LINE_CHANNEL_ID": { + "LABEL": "LINE Channel ID", + "PLACEHOLDER": "LINE Channel ID" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "LINE Channel Secret", + "PLACEHOLDER": "LINE Channel Secret" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "LINE Channel Token", + "PLACEHOLDER": "LINE Channel Token" + }, + "SUBMIT_BUTTON": "Create LINE Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the LINE channel" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL in LINE application with the URL mentioned here." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Telegram Channel", + "DESC": "Integrate with Telegram channel and start supporting your customers.", + "BOT_TOKEN": { + "LABEL": "Bot Token", + "SUBTITLE": "Configure the bot token you have obtained from Telegram BotFather.", + "PLACEHOLDER": "Bot Token" + }, + "SUBMIT_BUTTON": "Create Telegram Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the telegram channel" + } + }, + "AUTH": { + "TITLE": "Choose a channel", + "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Website", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "Email", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Agents", + "DESC": "Here you can add agents to manage your newly created inbox. Only these selected agents will have access to your inbox. Agents which are not part of this inbox will not be able to see or respond to messages in this inbox when they login.Webhooks
Webhooks are HTTP callbacks which can be defined for every account. They are triggered by events like message creation in Chatwoot. You can create more than one webhook for this account.
For creating a webhook, click on the Add new webhook button. You can also remove any existing webhook by clicking on the Delete button.
Dashboard Apps
Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.
When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.
To add a new dashboard app, click on the button 'Add a new dashboard app'.
", + "DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.", + "LEARN_MORE": "Learn more about Dashboard Apps", + "LIST": { + "404": "There are no dashboard apps configured on this account yet", + "LOADING": "Fetching dashboard apps...", + "TABLE_HEADER": { + "NAME": "Name", + "ENDPOINT": "Endpoint" + }, + "EDIT_TOOLTIP": "Edit app", + "DELETE_TOOLTIP": "Delete app" + }, + "FORM": { + "TITLE_LABEL": "Name", + "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", + "TITLE_ERROR": "A name for the dashboard app is required", + "URL_LABEL": "Endpoint", + "URL_PLACEHOLDER": "Enter the endpoint URL where your app is hosted", + "URL_ERROR": "A valid URL is required" + }, + "CREATE": { + "HEADER": "Add a new dashboard app", + "FORM_SUBMIT": "Submit", + "FORM_CANCEL": "Cancel", + "API_SUCCESS": "Dashboard app configured successfully", + "API_ERROR": "We couldn't create an app. Please try again later" + }, + "UPDATE": { + "HEADER": "Edit dashboard app", + "FORM_SUBMIT": "Update", + "FORM_CANCEL": "Cancel", + "API_SUCCESS": "Dashboard app updated successfully", + "API_ERROR": "We couldn't update the app. Please try again later" + }, + "DELETE": { + "CONFIRM_YES": "Yes, delete it", + "CONFIRM_NO": "No, keep it", + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete the app - {appName}?", + "API_SUCCESS": "Dashboard app deleted successfully", + "API_ERROR": "We couldn't delete the app. Please try again later" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "Fetching linear issues...", + "LOADING_ERROR": "There was an error fetching the linear issues, please try again", + "CREATE": "Create", + "LINK": { + "SEARCH": "Search issues", + "SELECT": "Select issue", + "TITLE": "Link", + "EMPTY_LIST": "No linear issues found", + "LOADING": "Loading", + "ERROR": "There was an error fetching the linear issues, please try again", + "LINK_SUCCESS": "Issue linked successfully", + "LINK_ERROR": "There was an error linking the issue, please try again", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "Create Linear issues from conversations, or link existing ones for seamless tracking.", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter title", + "REQUIRED_ERROR": "Title is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Enter description" + }, + "TEAM": { + "LABEL": "Team", + "PLACEHOLDER": "Select team", + "SEARCH": "Search team", + "REQUIRED_ERROR": "Team is required" + }, + "ASSIGNEE": { + "LABEL": "Assignee", + "PLACEHOLDER": "Select assignee", + "SEARCH": "Search assignee" + }, + "PRIORITY": { + "LABEL": "Priority", + "PLACEHOLDER": "Select priority", + "SEARCH": "Search priority" + }, + "LABEL": { + "LABEL": "Label", + "PLACEHOLDER": "Select label", + "SEARCH": "Search label" + }, + "STATUS": { + "LABEL": "Status", + "PLACEHOLDER": "Select status", + "SEARCH": "Search status" + }, + "PROJECT": { + "LABEL": "Project", + "PLACEHOLDER": "Select project", + "SEARCH": "Search project" + } + }, + "CREATE": "Create", + "CANCEL": "Cancel", + "CREATE_SUCCESS": "Issue created successfully", + "CREATE_ERROR": "There was an error creating the issue, please try again", + "LOADING_TEAM_ERROR": "There was an error fetching the teams, please try again", + "LOADING_TEAM_ENTITIES_ERROR": "There was an error fetching the team entities, please try again" + }, + "ISSUE": { + "STATUS": "Status", + "PRIORITY": "Priority", + "ASSIGNEE": "Assignee", + "LABELS": "Labels", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Unlink", + "SUCCESS": "Issue unlinked successfully", + "ERROR": "There was an error unlinking the issue, please try again" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Yes, delete", + "CANCEL": "Cancel" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Yes, delete", + "CANCEL": "Cancel" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "Send message...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Captain is thinking", + "YOU": "You", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "You", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "Type your message...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "Cancel", + "CREATE": "Create", + "EDIT": "Update" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "Update", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "Features", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "Features", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "Settings", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Delete" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "Create", + "CANCEL": "Cancel", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Delete" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "Create", + "CANCEL": "Cancel", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Delete" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "Create", + "CANCEL": "Cancel" + } + } + }, + "UPDATE": { + "CANCEL": "Cancel", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "None", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "API Key" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "Password", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Type" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Number", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Required" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "Delete", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "All" + }, + "STATUS": { + "TITLE": "Status", + "PENDING": "Pending", + "APPROVED": "Approved", + "ALL": "All" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "Edit", + "DELETE_RESPONSE": "Delete" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Disconnect" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "Inbox", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/ka/labelsMgmt.json new file mode 100644 index 0000000..705b18d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Labels", + "HEADER_BTN_TXT": "Add label", + "LOADING": "Fetching labels", + "DESCRIPTION": "Labels help you categorize and prioritize conversations and leads. You can assign a label to a conversation or contact using the side panel.", + "LEARN_MORE": "Learn more about labels", + "SEARCH_404": "There are no items matching this query", + "LIST": { + "404": "There are no labels available in this account.", + "TITLE": "Manage labels", + "DESC": "Labels let you group the conversations together.", + "TABLE_HEADER": { + "NAME": "Name", + "DESCRIPTION": "Description", + "COLOR": "Color" + } + }, + "FORM": { + "NAME": { + "LABEL": "Label Name", + "PLACEHOLDER": "Label name", + "REQUIRED_ERROR": "Label name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Label Description" + }, + "COLOR": { + "LABEL": "Color" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Show label on sidebar" + }, + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Delete", + "CANCEL": "Cancel" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Add label to conversation", + "MULTIPLE_SUGGESTION": "Select this label", + "DESELECT": "Deselect label", + "DISMISS": "Dismiss suggestion" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Dismiss", + "ADD_SELECTED_LABELS": "Add selected labels", + "ADD_SELECTED_LABEL": "Add selected label", + "ADD_ALL_LABELS": "Add all labels", + "SUGGESTED_LABELS": "Suggested labels" + }, + "ADD": { + "TITLE": "Add label", + "DESC": "Labels let you group the conversations together.", + "API": { + "SUCCESS_MESSAGE": "Label added successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "EDIT": { + "TITLE": "Edit label", + "API": { + "SUCCESS_MESSAGE": "Label updated successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Label deleted successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/login.json b/app/javascript/dashboard/i18n/locale/ka/login.json new file mode 100644 index 0000000..19bb8dc --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Login to Chatwoot", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "Please enter a valid email address" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password" + }, + "API": { + "SUCCESS_MESSAGE": "Login successful", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again.", + "UNAUTH": "Username or password is incorrect. Please try again." + }, + "OAUTH": { + "GOOGLE_LOGIN": "Login with Google", + "BUSINESS_ACCOUNTS_ONLY": "Please use your company email address to login", + "NO_ACCOUNT_FOUND": "We couldn't find an account for your email address." + }, + "FORGOT_PASSWORD": "Forgot your password?", + "CREATE_NEW_ACCOUNT": "Create new account", + "SUBMIT": "Login", + "SAML": { + "LABEL": "SSO-ით შესვლა", + "TITLE": "ერთიანი შესვლის (SSO) დაწყება", + "SUBTITLE": "შეიყვანეთ თქვენი სამუშაო ელფოსტა, რათა შეხვიდეთ თქვენს ორგანიზაციაში", + "BACK_TO_LOGIN": "შესვლა პაროლით", + "WORK_EMAIL": { + "LABEL": "სამუშაო ელფოსტა", + "PLACEHOLDER": "შეიყვანეთ თქვენი სამუშაო ელფოსტა" + }, + "SUBMIT": "გაგრძელება SSO-ით", + "API": { + "ERROR_MESSAGE": "SSO-ით ავთენტიფიკაცია ვერ შესრულდა. გთხოვთ, გადაამოწმეთ თქვენი შესვლის მონაცემები და სცადეთ ხელახლა." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/macros.json b/app/javascript/dashboard/i18n/locale/ka/macros.json new file mode 100644 index 0000000..934b4da --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Macros", + "DESCRIPTION": "A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click.", + "LEARN_MORE": "Learn more about macros", + "HEADER_BTN_TXT": "Add a new macro", + "HEADER_BTN_TXT_SAVE": "Save macro", + "LOADING": "Fetching macros", + "ERROR": "Something went wrong. Please try again", + "ORDER_INFO": "Macros will run in the order you add your actions. You can rearrange them by dragging them by the handle beside each node.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Macro name", + "PLACEHOLDER": "Enter a name for your macro", + "ERROR": "Name is required for creating a macro" + }, + "ACTIONS": { + "LABEL": "Actions" + } + }, + "API": { + "SUCCESS_MESSAGE": "Macro added successfully", + "ERROR_MESSAGE": "Unable to create macro, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Name", + "CREATED BY": "Created by", + "LAST_UPDATED_BY": "Last updated by", + "VISIBILITY": "Visibility" + }, + "404": "No macros found" + }, + "DELETE": { + "TOOLTIP": "Delete macro", + "CONFIRM": { + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete", + "NO": "No" + }, + "API": { + "SUCCESS_MESSAGE": "Macro deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the macro. Please try again later" + } + }, + "EDIT": { + "TOOLTIP": "Edit macro", + "API": { + "SUCCESS_MESSAGE": "Macro updated successfully", + "ERROR_MESSAGE": "Could not update Macro, Please try again later" + } + }, + "EDITOR": { + "START_FLOW": "Start Flow", + "END_FLOW": "End Flow", + "LOADING": "Fetching macro", + "ADD_BTN_TOOLTIP": "Add new action", + "DELETE_BTN_TOOLTIP": "Delete Action", + "VISIBILITY": { + "LABEL": "Macro Visibility", + "GLOBAL": { + "LABEL": "Public", + "DESCRIPTION": "This macro is available publicly for all agents in this account." + }, + "PERSONAL": { + "LABEL": "Private", + "DESCRIPTION": "This macro will be private to you and not be available to others." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Execute", + "PREVIEW": "Preview Macro", + "EXECUTED_SUCCESSFULLY": "Macro executed successfully" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Value is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "ACTIONS": { + "ASSIGN_TEAM": "გუნდის მინიჭება", + "ASSIGN_AGENT": "Assign an Agent", + "ADD_LABEL": "იარლიყის დამატება", + "REMOVE_LABEL": "იარლიყის მოცილება", + "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team", + "SEND_EMAIL_TRANSCRIPT": "საუბრის ჩანაწერის გაგზავნა ელფოსტით", + "MUTE_CONVERSATION": "საუბრის დადუმება", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_ATTACHMENT": "მიბმული ფაილის გაგზავნა", + "SEND_MESSAGE": "შეტყობინების გაგზავნა", + "CHANGE_PRIORITY": "Change Priority", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "SEND_WEBHOOK_EVENT": "Webhook-ის ივენთის გაგზავნა" + }, + "PRIORITY_TYPES": { + "NONE": "None", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/mfa.json b/app/javascript/dashboard/i18n/locale/ka/mfa.json new file mode 100644 index 0000000..f7556fd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "Enabled", + "DISABLED": "Disabled", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Loading...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "Copy", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "Cancel", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "Download", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "Password", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "Cancel", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "Cancel", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/report.json b/app/javascript/dashboard/i18n/locale/ka/report.json new file mode 100644 index 0000000..a2ad6bd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Conversations", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "DATA_FETCHING_FAILED": "Failed to fetch data, please try again later.", + "SUMMARY_FETCHING_FAILED": "Failed to fetch summary, please try again later.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Handoff Count", + "DESC": "( Total )" + }, + "REPLY_TIME": { + "NAME": "Customer waiting time", + "TOOLTIP_TEXT": "Waiting time is {metricValue} (based on {conversationCount} replies)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "Last 7 days", + "LAST_14_DAYS": "Last 14 days", + "LAST_30_DAYS": "Last 30 days", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_DATE_RANGE": "Custom date range" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Group By", + "DURATION_FILTER_LABEL": "Duration", + "GROUPING_OPTIONS": { + "DAY": "Day", + "WEEK": "Week", + "MONTH": "Month", + "YEAR": "Month" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "BUSINESS_HOURS": "Business Hours", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "No results found" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Agents Overview", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "FILTER_DROPDOWN_LABEL": "Select Agent", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "LABEL_REPORTS": { + "HEADER": "Labels Overview", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_LABEL_REPORTS": "Download label reports", + "FILTER_DROPDOWN_LABEL": "Select Label", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "INBOX_REPORTS": { + "HEADER": "Inbox Overview", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_INBOX_REPORTS": "Download inbox reports", + "FILTER_DROPDOWN_LABEL": "Select Inbox", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "TEAM_REPORTS": { + "HEADER": "Team Overview", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_TEAM_REPORTS": "Download team reports", + "FILTER_DROPDOWN_LABEL": "Select Team", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "CSAT_REPORTS": { + "HEADER": "CSAT Reports", + "NO_RECORDS": "There are no CSAT survey responses available.", + "DOWNLOAD": "Download CSAT Reports", + "DOWNLOAD_FAILED": "Failed to download CSAT Reports", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Choose Agents" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Contact", + "AGENT_NAME": "Assigned agent", + "RATING": "Rating", + "FEEDBACK_TEXT": "Feedback comment" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Total responses", + "TOOLTIP": "Total number of responses collected" + }, + "SATISFACTION_SCORE": { + "LABEL": "Satisfaction score", + "TOOLTIP": "Total number of positive responses / Total number of responses * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Response rate", + "TOOLTIP": "Total number of responses / Total number of CSAT survey messages sent * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Bot Reports", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "No. of Conversations", + "TOOLTIP": "Total number of conversations handled by the bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total Responses", + "TOOLTIP": "Total number of responses sent by the bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Resolution Rate", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Handoff Rate", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Overview", + "LIVE": "Live", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Open Conversations", + "LOADING_MESSAGE": "Loading conversation metrics...", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "UNASSIGNED": "Unassigned", + "PENDING": "Pending" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Conversation Traffic", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Conversations by agents", + "LOADING_MESSAGE": "Loading agent metrics...", + "NO_AGENTS": "There are no conversations by agents", + "TABLE_HEADER": { + "AGENT": "Agent", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "STATUS": "Status" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Team", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "STATUS": "Status" + } + }, + "AGENT_STATUS": { + "HEADER": "Agent status", + "ONLINE": "Online", + "BUSY": "Busy", + "OFFLINE": "Offline" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Sunday", + "MONDAY": "Monday", + "TUESDAY": "Tuesday", + "WEDNESDAY": "Wednesday", + "THURSDAY": "Thursday", + "FRIDAY": "Friday", + "SATURDAY": "Saturday" + }, + "SLA_REPORTS": { + "HEADER": "SLA Reports", + "NO_RECORDS": "SLA applied conversations are not available.", + "LOADING": "Loading SLA data...", + "DOWNLOAD_SLA_REPORTS": "Download SLA reports", + "DOWNLOAD_FAILED": "Failed to download SLA Reports", + "DROPDOWN": { + "ADD_FIlTER": "Add filter", + "CLEAR_ALL": "Clear all", + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "No results found", + "NO_FILTER": "No filters available", + "SEARCH": "Search filter", + "INPUT_PLACEHOLDER": { + "SLA": "SLA name", + "AGENTS": "Agent name", + "INBOXES": "Inbox name", + "LABELS": "Label name", + "TEAMS": "Team name" + }, + "SLA": "SLA Policy", + "INBOXES": "Inbox", + "AGENTS": "Agent", + "LABELS": "Label", + "TEAMS": "Team" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentage of SLAs created were completed successfully" + }, + "NO_OF_MISSES": { + "LABEL": "Number of Misses", + "TOOLTIP": "Total SLA misses in a certain period" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Number of Conversations", + "TOOLTIP": "Total number of conversations with SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "Conversation", + "AGENT": "Agent" + }, + "VIEW_DETAILS": "View Details" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Inbox", + "AGENT": "Agent", + "TEAM": "Team", + "LABEL": "Label", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "Resolution Count", + "CONVERSATIONS": "No. of conversations" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/resetPassword.json b/app/javascript/dashboard/i18n/locale/ka/resetPassword.json new file mode 100644 index 0000000..955696b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Reset password", + "DESCRIPTION": "Enter the email address you use to log in to Chatwoot to get the password reset instructions.", + "GO_BACK_TO_LOGIN": "If you want to go back to the login page,", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "Please enter your email.", + "ERROR": "Please enter a valid email." + }, + "API": { + "SUCCESS_MESSAGE": "Password reset link has been sent to your email.", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again." + }, + "SUBMIT": "Submit" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/search.json b/app/javascript/dashboard/i18n/locale/ka/search.json new file mode 100644 index 0000000..2cca57b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "Contacts", + "CONVERSATIONS": "Conversations", + "MESSAGES": "Messages", + "ARTICLES": "სტატიები" + }, + "SECTION": { + "CONTACTS": "Contacts", + "CONVERSATIONS": "Conversations", + "MESSAGES": "Messages", + "ARTICLES": "სტატიები" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "Searching", + "LOADING_DATA": "Loading", + "EMPTY_STATE": "No {item} found for query '{query}'", + "EMPTY_STATE_FULL": "No results found for query '{query}'", + "PLACEHOLDER_KEYBINDING": "/to focus", + "INPUT_PLACEHOLDER": "Type 3 or more characters to search", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Clear all", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Search by conversation id, email, phone number, messages for better search results. ", + "BOT_LABEL": "Bot", + "READ_MORE": "Read more", + "READ_LESS": "Read less", + "WROTE": "wrote:", + "FROM": "From", + "EMAIL": "Email", + "EMAIL_SUBJECT": "Subject", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "Last 7 days", + "LAST_30_DAYS": "Last 30 days", + "LAST_60_DAYS": "Last 60 days", + "LAST_90_DAYS": "Last 90 days", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "Apply", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Clear filter" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Sender", + "IN": "Inbox", + "AGENTS": "Agents", + "CONTACTS": "Contacts", + "INBOXES": "Inboxes", + "NO_AGENTS": "No agents found", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/setNewPassword.json b/app/javascript/dashboard/i18n/locale/ka/setNewPassword.json new file mode 100644 index 0000000..4908dad --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Set new password", + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password", + "ERROR": "Password is too short." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm password", + "PLACEHOLDER": "Confirm Password", + "ERROR": "Passwords do not match." + }, + "API": { + "SUCCESS_MESSAGE": "Successfully changed the password.", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again." + }, + "CAPTCHA": { + "ERROR": "Verification expired. Please solve captcha again." + }, + "SUBMIT": "Submit" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/settings.json b/app/javascript/dashboard/i18n/locale/ka/settings.json new file mode 100644 index 0000000..455422e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Profile Settings", + "TITLE": "Profile Settings", + "BTN_TEXT": "Update Profile", + "DELETE_AVATAR": "Delete Avatar", + "AVATAR_DELETE_SUCCESS": "Avatar has been deleted successfully", + "AVATAR_DELETE_FAILED": "There is an error while deleting avatar, please try again", + "UPDATE_SUCCESS": "Your profile has been updated successfully", + "PASSWORD_UPDATE_SUCCESS": "Your password has been changed successfully", + "AFTER_EMAIL_CHANGED": "Your profile has been updated successfully, please login again as your login credentials are changed", + "FORM": { + "PICTURE": "Profile Picture", + "AVATAR": "Profile Image", + "ERROR": "Please fix form errors", + "REMOVE_IMAGE": "Remove", + "UPLOAD_IMAGE": "Upload image", + "UPDATE_IMAGE": "Update image", + "PROFILE_SECTION": { + "TITLE": "Profile", + "NOTE": "Your email address is your identity and is used to log in." + }, + "SEND_MESSAGE": { + "TITLE": "Hotkey to send messages", + "NOTE": "You can select a hotkey (either Enter or Cmd/Ctrl+Enter) based on your preference of writing.", + "UPDATE_SUCCESS": "Your settings have been updated successfully", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Send messages by pressing Enter key instead of clicking the send button." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Send messages by pressing Cmd/Ctrl + enter key instead of clicking the send button." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Default", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "სასურველი ენა", + "NOTE": "აირჩიეთ ენა, რომლის გამოყენებაც გსურთ.", + "UPDATE_SUCCESS": "თქვენი ენის პარამეტრები წარმატებით განახლდა", + "UPDATE_ERROR": "ენის პარამეტრების განახლებისას მოხდა შეცდომა, გთხოვთ, სცადეთ თავიდან", + "USE_ACCOUNT_DEFAULT": "გამოიყენეთ ანგარიშის ნაგულისხმევი" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Personal message signature", + "NOTE": "Create a unique message signature to appear at the end of every message you send from any inbox. You can also include an inline image, which is supported in live-chat, email, and API inboxes.", + "BTN_TEXT": "Save message signature", + "API_ERROR": "Couldn't save signature! Try again", + "API_SUCCESS": "Signature saved successfully", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save to save the signature", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Message Signature", + "ERROR": "Message Signature cannot be empty", + "PLACEHOLDER": "Insert your personal message signature here." + }, + "PASSWORD_SECTION": { + "TITLE": "Password", + "NOTE": "Updating your password would reset your logins in multiple devices.", + "BTN_TEXT": "Change password" + }, + "SECURITY_SECTION": { + "TITLE": "უსაფრთხოება", + "NOTE": "მართეთ თქვენი ანგარიშის დამატებითი უსაფრთხოების ფუნქციები.", + "MFA_BUTTON": "ორფაქტორიანი ავთენტიფიკაციის მართვა" + }, + "ACCESS_TOKEN": { + "TITLE": "Access Token", + "NOTE": "This token can be used if you are building an API based integration", + "COPY": "Copy", + "RESET": "Reset", + "CONFIRM_RESET": "დარწმუნებული ხართ?", + "CONFIRM_HINT": "დააჭირეთ კიდევ ერთხელ დასადასტურებლად", + "RESET_SUCCESS": "წვდომის ტოკენის ხელახალი გენერაცია წარმატებით დასრულდა", + "RESET_ERROR": "ვერ მოხერხდა წვდომის ტოკენის ხელახალი გენერაცია. გთხოვთ, სცადეთ თავიდან" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Alerts", + "NOTE": "Enable audio alerts in dashboard for new messages and conversations.", + "PLAY": "Play sound", + "ALERT_TYPES": { + "NONE": "None", + "MINE": "Assigned", + "ALL": "All", + "ASSIGNED": "My assigned conversations", + "UNASSIGNED": "Unassigned conversations", + "NOTME": "Open conversations assigned to others" + }, + "ALERT_COMBINATIONS": { + "NONE": "You haven't selected any options, you won't receive any audio alerts.", + "ASSIGNED": "You'll receive alerts for conversations assigned to you.", + "UNASSIGNED": "You'll receive alerts for any unassigned conversations.", + "NOTME": "You'll receive alerts for conversations assigned to others.", + "ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.", + "ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.", + "NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.", + "ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations." + }, + "ALERT_TYPE": { + "TITLE": "Alert events for conversations", + "NONE": "None", + "ASSIGNED": "Assigned Conversations", + "ALL_CONVERSATIONS": "All Conversations" + }, + "DEFAULT_TONE": { + "TITLE": "Alert tone:" + }, + "CONDITIONS": { + "TITLE": "Alert conditions:", + "CONDITION_ONE": "Send audio alerts only if the browser window is not active", + "CONDITION_TWO": "Send alerts every 30s until all the assigned conversations are read" + }, + "SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.", + "READ_MORE": "Read more" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "Email Notifications", + "NOTE": "Update your email notification preferences here", + "CONVERSATION_ASSIGNMENT": "Send email notifications when a conversation is assigned to me", + "CONVERSATION_CREATION": "Send email notifications when a new conversation is created", + "CONVERSATION_MENTION": "Send email notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "Send email notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send email notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send email notifications when a conversation misses resolution SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Notification preferences", + "TYPE_TITLE": "Notification type", + "EMAIL": "Email", + "PUSH": "Push notification", + "TYPES": { + "CONVERSATION_CREATED": "A new conversation is created", + "CONVERSATION_ASSIGNED": "A conversation is assigned to you", + "CONVERSATION_MENTION": "You are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "A new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "A new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "A conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "A conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "A conversation misses resolution SLA" + }, + "BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them" + }, + "API": { + "UPDATE_SUCCESS": "Your notification preferences are updated successfully", + "UPDATE_ERROR": "There is an error while updating the preferences, please try again" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Push Notifications", + "NOTE": "Update your push notification preferences here", + "CONVERSATION_ASSIGNMENT": "Send push notifications when a conversation is assigned to me", + "CONVERSATION_CREATION": "Send push notifications when a new conversation is created", + "CONVERSATION_MENTION": "Send push notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in a participating conversation", + "HAS_ENABLED_PUSH": "You have enabled push for this browser.", + "REQUEST_PUSH": "Enable push notifications", + "SLA_MISSED_FIRST_RESPONSE": "Send push notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send push notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send push notifications when a conversation misses resolution SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "Profile Image" + }, + "NAME": { + "LABEL": "Your full name", + "ERROR": "Please enter a valid full name", + "PLACEHOLDER": "Please enter your full name" + }, + "DISPLAY_NAME": { + "LABEL": "Display name", + "ERROR": "Please enter a valid display name", + "PLACEHOLDER": "Please enter a display name, this would be displayed in conversations" + }, + "AVAILABILITY": { + "LABEL": "Availability", + "STATUS": { + "ONLINE": "Online", + "BUSY": "Busy", + "OFFLINE": "Offline" + }, + "SET_AVAILABILITY_SUCCESS": "Availability has been set successfully", + "SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again", + "IMPERSONATING_ERROR": "მომხმარებლის სახელით მოქმედებისას ხელმისაწვდომობის შეცვლა შეუძლებელია" + }, + "EMAIL": { + "LABEL": "Your email address", + "ERROR": "Please enter a valid email address", + "PLACEHOLDER": "Please enter your email address, this would be displayed in conversations" + }, + "CURRENT_PASSWORD": { + "LABEL": "Current password", + "ERROR": "Please enter the current password", + "PLACEHOLDER": "Please enter the current password" + }, + "PASSWORD": { + "LABEL": "New password", + "ERROR": "Please enter a password of length 6 or more", + "PLACEHOLDER": "Please enter a new password" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Confirm new password", + "ERROR": "Confirm password should match the password", + "PLACEHOLDER": "Please re-enter your new password" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Change", + "CHANGE_ACCOUNTS": "Switch account", + "SWITCH_ACCOUNT": "Switch account", + "CONTACT_SUPPORT": "Contact support", + "SELECTOR_SUBTITLE": "Select an account from the following list", + "PROFILE_SETTINGS": "Profile settings", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Keyboard shortcuts", + "APPEARANCE": "Change appearance", + "SUPER_ADMIN_CONSOLE": "SuperAdmin console", + "DOCS": "Read documentation", + "CHANGELOG": "ცვლილებების ჟურნალი", + "LOGOUT": "Log out" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "days trial remaining.", + "TRAIL_BUTTON": "Buy Now", + "DELETED_USER": "Deleted User", + "EMAIL_VERIFICATION_PENDING": "It seems that you haven't verified your email address yet. Please check your inbox for the verification email.", + "RESEND_VERIFICATION_MAIL": "Resend verification email", + "EMAIL_VERIFICATION_SENT": "Verification email has been sent. Please check your inbox.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Account Suspended", + "MESSAGE": "Your account is suspended. Please reach out to the support team for more information." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Log out" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Copy", + "CODEPEN": "Open in CodePen", + "COPY_SUCCESSFUL": "Code copied to clipboard successfully" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Show More", + "SHOW_LESS": "Show Less" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "Download", + "UPLOADING": "Uploading...", + "INSTAGRAM_STORY_UNAVAILABLE": "This story is no longer available." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "See on map" + }, + "FORM_BUBBLE": { + "SUBMIT": "Submit" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "This image is no longer available.", + "LOADING_FAILED": "Loading failed" + } + }, + "CONFIRM_EMAIL": "Verifying...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Add Inbox" + } + }, + "SIDEBAR": { + "NO_ITEMS": "No items", + "CURRENTLY_VIEWING_ACCOUNT": "Currently viewing:", + "SWITCH": "Switch", + "INBOX_VIEW": "Inbox View", + "CONVERSATIONS": "Conversations", + "INBOX": "My Inbox", + "ALL_CONVERSATIONS": "All Conversations", + "MENTIONED_CONVERSATIONS": "Mentions", + "PARTICIPATING_CONVERSATIONS": "Participating", + "UNATTENDED_CONVERSATIONS": "Unattended", + "REPORTS": "Reports", + "SETTINGS": "Settings", + "CONTACTS": "Contacts", + "ACTIVE": "Active", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistants", + "CAPTAIN_DOCUMENTS": "Documents", + "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_TOOLS": "ინსტრუმენტები", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "Inboxes", + "CAPTAIN_SETTINGS": "Settings", + "HOME": "Home", + "AGENTS": "Agents", + "AGENT_BOTS": "Bots", + "AUDIT_LOGS": "Audit Logs", + "INBOXES": "Inboxes", + "NOTIFICATIONS": "Notifications", + "CANNED_RESPONSES": "Canned Responses", + "INTEGRATIONS": "Integrations", + "PROFILE_SETTINGS": "Profile Settings", + "ACCOUNT_SETTINGS": "Account Settings", + "APPLICATIONS": "Applications", + "LABELS": "Labels", + "CUSTOM_ATTRIBUTES": "Custom Attributes", + "AUTOMATION": "Automation", + "MACROS": "Macros", + "TEAMS": "Teams", + "BILLING": "Billing", + "CUSTOM_VIEWS_FOLDER": "Folders", + "CUSTOM_VIEWS_SEGMENTS": "Segments", + "ALL_CONTACTS": "All Contacts", + "TAGGED_WITH": "Tagged with", + "NEW_LABEL": "New label", + "NEW_TEAM": "New team", + "NEW_INBOX": "New inbox", + "REPORTS_CONVERSATION": "Conversations", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Campaigns", + "ONGOING": "Ongoing", + "ONE_OFF": "One off", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "Bot", + "REPORTS_AGENT": "Agents", + "REPORTS_LABEL": "Labels", + "REPORTS_INBOX": "Inbox", + "REPORTS_TEAM": "Team", + "AGENT_ASSIGNMENT": "აგენტების მინიჭება", + "SET_AVAILABILITY_TITLE": "Set yourself as", + "SET_YOUR_AVAILABILITY": "Set your availability", + "SLA": "SLA", + "CUSTOM_ROLES": "Custom Roles", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Overview", + "REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages", + "HELP_CENTER": { + "TITLE": "Help Center", + "ARTICLES": "Articles", + "CATEGORIES": "Categories", + "LOCALES": "Locales", + "SETTINGS": "Settings" + }, + "CHANNELS": "Channels", + "SET_AUTO_OFFLINE": { + "TEXT": "Mark offline automatically", + "INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard.", + "INFO_SHORT": "Automatically mark offline when you aren't using the app." + }, + "DOCS": "Read docs", + "SECURITY": "უსაფრთხოება" + }, + "BILLING_SETTINGS": { + "TITLE": "Billing", + "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "CURRENT_PLAN": { + "TITLE": "Current Plan", + "PLAN_NOTE": "You are currently subscribed to the **{plan}** plan with **{quantity}** licenses", + "SEAT_COUNT": "Number of seats", + "RENEWS_ON": "Renews on" + }, + "VIEW_PRICING": "View Pricing", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Manage your subscription", + "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", + "BUTTON_TXT": "Go to the billing portal" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Manage usage and credits for Captain AI.", + "BUTTON_TXT": "Buy more credits", + "DOCUMENTS": "Documents", + "RESPONSES": "Responses", + "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more.", + "REFRESH_CREDITS": "Refresh" + }, + "CHAT_WITH_US": { + "TITLE": "Need help?", + "DESCRIPTION": "Do you face any issues in billing? We are here to help.", + "BUTTON_TXT": "Chat with us" + }, + "NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again.", + "TOPUP": { + "BUY_CREDITS": "Buy more credits", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Note:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "Cancel", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Go Back", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "უსაფრთხოება", + "DESCRIPTION": "მართეთ თქვენი ანგარიშის უსაფრთხოების პარამეტრები.", + "LINK_TEXT": "გაიგეთ მეტი SAML SSO-ს შესახებ", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "დააყენეთ SAML-ის ერთჯერადი შესვლა (SSO) თქვენს ანგარიშზე. მომხმარებლები ავთენტიფიკაციას გაივლიან თქვენს იდენტობის მომწოდებელთან, ელფოსტა/პაროლის გამოყენების ნაცვლად.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service (ACS) URL — დააყენეთ ეს URL თქვენს IdP-ში SAML-ის პასუხების დანიშნულების მისამართად" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "URL, სადაც გაეგზავნება SAML-ის ავთენტიფიკაციის მოთხოვნები", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "ხელმოწერის სერტიფიკატი PEM ფორმატში", + "HELP": "თქვენი იდენტობის მომწოდებლის საჯარო სერტიფიკატი, რომელიც გამოიყენება SAML-ის პასუხების დასამოწმებლად", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "ანაბეჭდი", + "TOOLTIP": "სერტიფიკატის SHA-1 ანაბეჭდი — გამოიყენეთ ეს სერტიფიკატის გადასამოწმებლად თქვენს IdP-ის კონფიგურაციაში" + }, + "COPY_SUCCESS": "Code copied to clipboard successfully", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "უნიკალური იდენტიფიკატორი ამ აპლიკაციისთვის, როგორც სერვისის მიმწოდებლისთვის (ავტომატურად გენერირებულია).", + "TOOLTIP": "Chatwoot-ის უნიკალური იდენტიფიკატორი, როგორც სერვისის მიმწოდებელი — დააყენეთ ეს თქვენს IdP-ის პარამეტრებში" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "თქვენი იდენტობის მომწოდებლის უნიკალური იდენტიფიკატორი (ჩვეულებრივ მითითებულია IdP-ის კონფიგურაციაში)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "SAML პარამეტრების განახლება", + "API": { + "SUCCESS": "SAML-ის პარამეტრები წარმატებით განახლდა", + "ERROR": "SAML-ის პარამეტრების განახლება ვერ მოხერხდა", + "ERROR_LOADING": "SAML-ის პარამეტრების ჩატვირთვა ვერ მოხერხდა", + "DISABLED": "SAML-ის პარამეტრები წარმატებით გამოირთო" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID და სერტიფიკატი სავალდებულო ველებია", + "SSO_URL_ERROR": "გთხოვთ, შეიყვანოთ სწორი SSO URL", + "CERTIFICATE_ERROR": "სერტიფიკატი სავალდებულოა", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID სავალდებულოა" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "SAML SSO ფუნქცია ხელმისაწვდომია მხოლოდ Enterprise გეგმებში.", + "UPGRADE_PROMPT": "გადადით Enterprise გეგმაზე, რათა მიიღოთ წვდომა SAML-ის ერთჯერად შესვლასა და სხვა გაფართოებულ უსაფრთხოების ფუნქციებზე.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "PAYWALL": { + "TITLE": "განაახლეთ გეგმა SAML SSO-ს ჩასართავად", + "AVAILABLE_ON": "SAML SSO ფუნქცია ხელმისაწვდომია მხოლოდ Enterprise გეგმებში.", + "UPGRADE_PROMPT": "განაახლეთ თქვენი გეგმა, რათა მიიღოთ წვდომა SAML-ის ერთჯერად შესვლასა და სხვა გაფართოებულ ფუნქციებზე.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML-ის ატრიბუტების კონფიგურაცია", + "DESCRIPTION": "ქვემოთ ჩამოთვლილი ატრიბუტების ასახვა უნდა დააკონფიგურიროთ თქვენს იდენტობის პროვაიდერში" + }, + "INFO_SECTION": { + "TITLE": "სერვისის პროვაიდერის ინფორმაცია", + "TOOLTIP": "დააკოპირეთ ეს მნიშვნელობები და დააკონფიგურირეთ ისინი თქვენს იდენტობის პროვაიდერში SAML-კავშირის დასამყარებლად" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.", + "NEW_ACCOUNT": "New Account", + "SELECTOR_SUBTITLE": "Create a new account", + "API": { + "SUCCESS_MESSAGE": "Account created successfully", + "EXIST_MESSAGE": "Account already exists", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "FORM": { + "NAME": { + "LABEL": "Company Name", + "PLACEHOLDER": "Wayne Enterprises" + }, + "SUBMIT": "Submit", + "CANCEL": "Cancel" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "View all shortcuts", + "TITLE": { + "OPEN_CONVERSATION": "Open conversation", + "RESOLVE_AND_NEXT": "Resolve and move to next", + "NAVIGATE_DROPDOWN": "Navigate dropdown items", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "ADD_ATTACHMENT": "Add Attachment", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "TOGGLE_SIDEBAR": "Toggle Sidebar", + "GO_TO_REPORTS_SIDEBAR": "Go to Reports sidebar", + "MOVE_TO_NEXT_TAB": "Move to next tab in conversation list", + "GO_TO_SETTINGS": "Go to Settings", + "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", + "SWITCH_TO_REPLY": "Switch to Reply", + "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "აგენტების მინიჭება", + "DESCRIPTION": "დაადგინეთ პოლიტიკები, რათა ეფექტურად მართოთ დატვირთვა და გადაამისამართოთ საუბრები ინბოქსებისა და აგენტების საჭიროებების მიხედვით. გაიგეთ მეტი აქ" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "მინიჭების პოლიტიკა", + "DESCRIPTION": "მართეთ, როგორ ენიჭება საუბრები ინბოქსებში.", + "FEATURES": [ + "მინიჭება საუბრების თანაბრად ან ხელმისაწვდომი ტევადობის მიხედვით", + "დაამატეთ სამართლიანი განაწილების წესები, რათა არცერთი აგენტი არ გადატვირთდეს", + "დაამატეთ ინბოქსები პოლიტიკაში - თითო ინბოქსზე ერთი პოლიტიკა" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "აგენტების ტევადობის პოლიტიკა", + "DESCRIPTION": "მართეთ აგენტების სამუშაო დატვირთვა.", + "FEATURES": [ + "დაადგინეთ მაქსიმალური საუბრების რაოდენობა თითო ინბოქსზე", + "შექმენით გამონაკლისები იარლიყებისა და დროის მიხედვით", + "დაამატეთ აგენტები პოლიტიკაში - თითო აგენტზე ერთი პოლიტიკა" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "მინიჭების პოლიტიკა", + "CREATE_POLICY": "ახალი პოლიტიკა" + }, + "CARD": { + "ORDER": "რიგი", + "PRIORITY": "Priority", + "ACTIVE": "Active", + "INACTIVE": "არააქტიური", + "POPOVER": "დამატებული ინბოქსები", + "EDIT": "Edit" + }, + "NO_RECORDS_FOUND": "მინიჭების პოლიტიკები ვერ მოიძებნა" + }, + "CREATE": { + "HEADER": { + "TITLE": "მინიჭების პოლიტიკის შექმნა" + }, + "CREATE_BUTTON": "პოლიტიკის შექმნა", + "API": { + "SUCCESS_MESSAGE": "მინიჭების პოლიტიკა წარმატებით შეიქმნა", + "ERROR_MESSAGE": "მინიჭების პოლიტიკის შექმნა ვერ მოხერხდა" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "მინიჭების პოლიტიკის რედაქტირება" + }, + "EDIT_BUTTON": "პოლიტიკის განახლება", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "ინბოქსის დამატება", + "DESCRIPTION": "{inboxName} ინბოქსი უკვე დაკავშირებულია სხვა პოლიტიკასთან. დარწმუნებული ხართ, რომ გსურთ მისი მიბმა ამ პოლიტიკაზე? ის სხვა პოლიტიკიდან მოეხსნება.", + "CONFIRM_BUTTON_LABEL": "გაგრძელება", + "CANCEL_BUTTON_LABEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "მინიჭების პოლიტიკა წარმატებით განახლდა", + "ERROR_MESSAGE": "მინიჭების პოლიტიკის განახლება ვერ მოხერხდა" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "ინბოქსი წარმატებით დაემატა პოლიტიკას", + "ERROR_MESSAGE": "ინბოქსის პოლიტიკაში დამატება ვერ მოხერხდა" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "ინბოქსი წარმატებით მოიხსნა პოლიტიკიდან", + "ERROR_MESSAGE": "ინბოქსის პოლიტიკიდან მოხსნა ვერ მოხერხდა" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "პოლიტიკის სახელი:", + "PLACEHOLDER": "შეიყვანეთ პოლიტიკის სახელი" + }, + "DESCRIPTION": { + "LABEL": "Description:", + "PLACEHOLDER": "Enter description" + }, + "STATUS": { + "LABEL": "Status:", + "PLACEHOLDER": "Select status", + "ACTIVE": "პოლიტიკა აქტიურია", + "INACTIVE": "პოლიტიკა არააქტიურია" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "მინიჭების რიგი", + "ROUND_ROBIN": { + "LABEL": "რაუნდ-რობინი", + "DESCRIPTION": "საუბრები აგენტებზე თანაბრად ნაწილდება." + }, + "BALANCED": { + "LABEL": "დაბალანსებული", + "DESCRIPTION": "საუბრები მიენიჭება ხელმისაწვდომი ტევადობის მიხედვით." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "მინიჭების პრიორიტეტი", + "EARLIEST_CREATED": { + "LABEL": "ყველაზე ადრე შექმნილი", + "DESCRIPTION": "ყველაზე ადრე შექმნილი საუბარი პირველად მიენიჭება." + }, + "LONGEST_WAITING": { + "LABEL": "ყველაზე დიდხანს მოლოდინში", + "DESCRIPTION": "საუბარი, რომელიც ყველაზე დიდხანს ელოდა, პირველად ნაწილდება." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "სამართლიანი განაწილების პოლიტიკა", + "DESCRIPTION": "დააყენეთ საუბრების მაქსიმალური რაოდენობა, რომელიც შეიძლება დაენიშნოს ერთ აგენტს დროის ფანჯრის ფარგლებში, რათა თავიდან აიცილოთ რომელიმე აგენტის გადატვირთვა. ეს სავალდებულო ველი ნაგულისხმევად არის 100 საუბარი საათში.", + "INPUT_MAX": "მაქსიმალური მინიჭება", + "DURATION": "თითო აგენტზე საუბრები ყოველ" + }, + "INBOXES": { + "LABEL": "დამატებული ინბოქსები", + "DESCRIPTION": "დაამატეთ ინბოქსები, რომლებზეც იმოქმედებს ეს პოლიტიკა.", + "ADD_BUTTON": "ინბოქსის დამატება", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "მოძებნეთ და აირჩიეთ დასამატებელი ინბოქსები", + "ADD_BUTTON": "Add" + }, + "EMPTY_STATE": "ამ პოლიტიკაში ინბოქსები დამატებული არ არის, დასაწყებად დაამატეთ ინბოქსი", + "API": { + "SUCCESS_MESSAGE": "ინბოქსი პოლიტიკაში წარმატებით დაემატა", + "ERROR_MESSAGE": "ინბოქსის პოლიტიკაში დამატება ვერ მოხერხდა" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "მინიჭების პოლიტიკა წარმატებით წაიშალა", + "ERROR_MESSAGE": "მინიჭების პოლიტიკის წაშლა ვერ მოხერხდა" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "აგენტის ტევადობა", + "CREATE_POLICY": "ახალი პოლიტიკა" + }, + "CARD": { + "POPOVER": "დამატებული აგენტები", + "EDIT": "Edit" + }, + "NO_RECORDS_FOUND": "აგენტის ტევადობის პოლიტიკები ვერ მოიძებნა" + }, + "CREATE": { + "HEADER": { + "TITLE": "აგენტის ტევადობის პოლიტიკის შექმნა" + }, + "CREATE_BUTTON": "პოლიტიკის შექმნა", + "API": { + "SUCCESS_MESSAGE": "აგენტის ტევადობის პოლიტიკა წარმატებით შეიქმნა", + "ERROR_MESSAGE": "აგენტის ტევადობის პოლიტიკის შექმნა ვერ მოხერხდა" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "აგენტის ტევადობის პოლიტიკის რედაქტირება" + }, + "EDIT_BUTTON": "პოლიტიკის განახლება", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "აგენტის დამატება", + "DESCRIPTION": "{agentName} უკვე დაკავშირებულია სხვა პოლიტიკასთან. ნამდვილად გსურთ მისი ამ პოლიტიკასთან დაკავშირება? ის სხვა პოლიტიკიდან მოიხსნება.", + "CONFIRM_BUTTON_LABEL": "გაგრძელება", + "CANCEL_BUTTON_LABEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "აგენტის ტევადობის პოლიტიკა წარმატებით განახლდა", + "ERROR_MESSAGE": "აგენტის ტევადობის პოლიტიკის განახლება ვერ მოხერხდა" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "აგენტის პოლიტიკაში დამატება წარმატებით შესრულდა", + "ERROR_MESSAGE": "აგენტის პოლიტიკაში დამატება ვერ მოხერხდა" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "აგენტის პოლიტიკიდან წაშლა წარმატებით შესრულდა", + "ERROR_MESSAGE": "აგენტის პოლიტიკიდან წაშლა ვერ მოხერხდა" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "პოლიტიკის სახელი:", + "PLACEHOLDER": "შეიყვანეთ პოლიტიკის სახელი" + }, + "DESCRIPTION": { + "LABEL": "Description:", + "PLACEHOLDER": "Enter description" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "ინბოქსის ტევადობის ლიმიტები", + "ADD_BUTTON": "ინბოქსის დამატება", + "FIELD": { + "SELECT_INBOX": "აირჩიეთ ინბოქსი", + "MAX_CONVERSATIONS": "საუბრების მაქსიმუმი", + "SET_LIMIT": "დააყენეთ ლიმიტი" + }, + "EMPTY_STATE": "ინბოქსისთვის ლიმიტი არ არის დაყენებული" + }, + "EXCLUSION_RULES": { + "LABEL": "გამორიცხვის წესები", + "DESCRIPTION": "საუბრები, რომლებიც აკმაყოფილებენ ქვემოთ მოცემულ პირობებს, აგენტის ტევადობაში არ ჩაითვლება", + "TAGS": { + "LABEL": "გამორიცხეთ კონკრეტული ჭდეებით მონიშნული საუბრები", + "ADD_TAG": "ჭდის დამატება", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "მოძებნეთ და აირჩიეთ დასამატებელი ჭდეები" + }, + "EMPTY_STATE": "ამ პოლიტიკაში ჭდეები დამატებული არ არის." + }, + "DURATION": { + "LABEL": "გამორიცხეთ მითითებულ ხანგრძლივობაზე ძველი საუბრები", + "PLACEHOLDER": "დაყენეთ დრო" + } + }, + "USERS": { + "LABEL": "მინიჭებული აგენტები", + "DESCRIPTION": "დაამატეთ ის აგენტები, რომლებზეც ეს პოლიტიკა გავრცელდება.", + "ADD_BUTTON": "აგენტის დამატება", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "მოძებნეთ და აირჩიეთ აგენტები დასამატებლად", + "ADD_BUTTON": "Add" + }, + "EMPTY_STATE": "აგენტები დამატებული არ არის", + "API": { + "SUCCESS_MESSAGE": "აგენტი პოლიტიკაში წარმატებით დაემატა", + "ERROR_MESSAGE": "აგენტის პოლიტიკაში დამატება ვერ მოხერხდა" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "აგენტის ტევადობის პოლიტიკა წარმატებით წაიშალა", + "ERROR_MESSAGE": "აგენტის ტევადობის პოლიტიკის წაშლა ვერ მოხერხდა" + } + }, + "DELETE_POLICY": { + "TITLE": "პოლიტიკის წაშლა", + "DESCRIPTION": "დარწმუნებული ხართ, რომ გსურთ ამ პოლიტიკის წაშლა? ეს ქმედება შეუქცევადია.", + "CONFIRM_BUTTON_LABEL": "Delete", + "CANCEL_BUTTON_LABEL": "Cancel" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/signup.json b/app/javascript/dashboard/i18n/locale/ka/signup.json new file mode 100644 index 0000000..54398ff --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Create an account", + "TITLE": "Register", + "TESTIMONIAL_HEADER": "All it takes is one step to move forward", + "TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.", + "TERMS_ACCEPT": "By creating an account, you agree to our T & C and Privacy policy", + "OAUTH": { + "GOOGLE_SIGNUP": "Sign up with Google" + }, + "COMPANY_NAME": { + "LABEL": "Company name", + "PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises", + "ERROR": "Company name is too short" + }, + "FULL_NAME": { + "LABEL": "Full name", + "PLACEHOLDER": "Enter your full name. eg: Bruce Wayne", + "ERROR": "Full name is too short" + }, + "EMAIL": { + "LABEL": "Work email", + "PLACEHOLDER": "Enter your work email address. E.g., bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Please enter a valid work email address" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password", + "ERROR": "Password is too short", + "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character", + "REQUIREMENTS_LENGTH": "მინიმუმ 6 სიმბოლო", + "REQUIREMENTS_UPPERCASE": "მინიმუმ ერთი დიდი ასო", + "REQUIREMENTS_LOWERCASE": "მინიმუმ ერთი პატარა ასო", + "REQUIREMENTS_NUMBER": "მინიმუმ ერთი რიცხვი", + "REQUIREMENTS_SPECIAL": "მინიმუმ ერთი სპეციალური სიმბოლო" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm Password", + "PLACEHOLDER": "Confirm Password", + "ERROR": "პაროლები არ ემთხვევა." + }, + "API": { + "SUCCESS_MESSAGE": "რეგისტრაცია წარმატებით დასრულდა", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "SUBMIT": "Create account", + "HAVE_AN_ACCOUNT": "Already have an account?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/sla.json b/app/javascript/dashboard/i18n/locale/ka/sla.json new file mode 100644 index 0000000..0da7873 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Add SLA", + "ADD_ACTION_LONG": "Create a new SLA Policy", + "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", + "LEARN_MORE": "Learn more about SLA", + "LOADING": "Fetching SLAs", + "PAYWALL": { + "TITLE": "Upgrade to create SLAs", + "AVAILABLE_ON": "The SLA feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SLA feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no SLAs available in this account.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Issues raised by enterprise customers, that require immediate attention.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Issues raised by enterprise customers, that needs to be acknowledged quickly." + }, + "BUSINESS_HOURS_ON": "Business hours on", + "BUSINESS_HOURS_OFF": "Business hours off", + "RESPONSE_TYPES": { + "FRT": "First response time threshold", + "NRT": "Next response time threshold", + "RT": "Resolution time threshold", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA Name", + "PLACEHOLDER": "SLA Name", + "REQUIRED_ERROR": "SLA name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "SLA for premium customers" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "First Response Time", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Next Response Time", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "Resolution Time", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Business Hours", + "PLACEHOLDER": "Only during business hours" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Threshold should be a number and greater than zero" + }, + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Delete", + "CANCEL": "Cancel" + }, + "ADD": { + "TITLE": "Add SLA", + "DESC": "Friendly promises for great service!", + "API": { + "SUCCESS_MESSAGE": "SLA added successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "DELETE": { + "TITLE": "Delete SLA", + "API": { + "SUCCESS_MESSAGE": "SLA deleted successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure you want to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + } + }, + "EVENTS": { + "TITLE": "SLA Misses", + "FRT": "First response time", + "NRT": "Next response time", + "RT": "Resolution time", + "SHOW_MORE": "{count} more", + "HIDE": "Hide {count} rows" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/teamsSettings.json b/app/javascript/dashboard/i18n/locale/ka/teamsSettings.json new file mode 100644 index 0000000..f0a950f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Create new team", + "HEADER": "Teams", + "LOADING": "Fetching teams", + "DESCRIPTION": "Teams allow you to organize agents into groups based on their responsibilities. An agent can belong to multiple teams. When working collaboratively, you can assign conversations to specific teams.", + "LEARN_MORE": "Learn more about teams", + "LIST": { + "404": "There are no teams created on this account.", + "EDIT_TEAM": "Edit team", + "NONE": "None" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Create a new team", + "DESC": "Add a title and description to your new team." + }, + "AGENTS": { + "BUTTON_TEXT": "Add agents to team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation." + }, + "WIZARD_CREATE": { + "TITLE": "Create", + "BODY": "Create a new team of agents." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "Add Agents", + "BODY": "Add agents to the team." + }, + "WIZARD_FINISH": { + "TITLE": "Finish", + "BODY": "You are all set to go!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Edit your team details", + "DESC": "Edit title and description to your team.", + "BUTTON_TEXT": "Update team" + }, + "AGENTS": { + "BUTTON_TEXT": "Update agents in team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. All the added agents will be notified when a conversation is assigned to this team." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Team details", + "ROUTE": "settings_teams_edit", + "BODY": "Change name, description and other details." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Edit Agents", + "ROUTE": "settings_teams_edit_members", + "BODY": "Edit agents in your team." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Finish", + "ROUTE": "settings_teams_edit_finish", + "BODY": "You are all set to go!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Couldn't save the team details. Try again." + }, + "AGENTS": { + "AGENT": "AGENT", + "EMAIL": "EMAIL", + "BUTTON_TEXT": "Add agents", + "ADD_AGENTS": "Adding Agents to your Team...", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected." + }, + "ADD": { + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation.", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected.", + "BUTTON_TEXT": "Add agents", + "AGENT_VALIDATION_ERROR": "Select at least one agent." + }, + "FINISH": { + "TITLE": "Your team is ready!", + "MESSAGE": "You can now collaborate as a team on conversations. Happy supporting ", + "BUTTON_TEXT": "Finish" + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Team deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the team. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure you want to delete the team?", + "PLACE_HOLDER": "Please type {teamName} to confirm", + "MESSAGE": "Deleting the team will remove the team assignment from the conversations assigned to this team.", + "YES": "Delete ", + "NO": "Cancel" + } + }, + "SETTINGS": "Settings", + "FORM": { + "UPDATE": "Update team", + "CREATE": "Create team", + "NAME": { + "LABEL": "Team name", + "PLACEHOLDER": "Example: Sales, Customer Support" + }, + "DESCRIPTION": { + "LABEL": "Team Description", + "PLACEHOLDER": "Short description about this team." + }, + "AUTO_ASSIGN": { + "LABEL": "Allow auto assign for this team." + }, + "SUBMIT_CREATE": "Create team" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/webhooks.json b/app/javascript/dashboard/i18n/locale/ka/webhooks.json new file mode 100644 index 0000000..347c968 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Webhook Settings" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/ka/whatsappTemplates.json new file mode 100644 index 0000000..cf28312 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Whatsapp Templates", + "SUBTITLE": "Select the whatsapp template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ka/yearInReview.json b/app/javascript/dashboard/i18n/locale/ka/yearInReview.json new file mode 100644 index 0000000..d72e0c6 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ka/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "Close", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "conversations", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "Download", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "Share" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/advancedFilters.json b/app/javascript/dashboard/i18n/locale/ko/advancedFilters.json new file mode 100644 index 0000000..a158051 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "대화 필터링하기", + "SUBTITLE": "Add your filters below and hit 'Apply filters' to cut through the chat clutter.", + "EDIT_CUSTOM_FILTER": "Edit Folder", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your folder.", + "ADD_NEW_FILTER": "Add filter", + "FILTER_DELETE_ERROR": "Oops, looks like we can't save nothing! Please add at least one filter to save it.", + "SUBMIT_BUTTON_LABEL": "필터 적용하기", + "UPDATE_BUTTON_LABEL": "Update folder", + "CANCEL_BUTTON_LABEL": "취소", + "CLEAR_BUTTON_LABEL": "Clear filters", + "FOLDER_LABEL": "Folder Name", + "FOLDER_QUERY_LABEL": "Folder Query", + "EMPTY_VALUE_ERROR": "Value is required.", + "TOOLTIP_LABEL": "대화 필터링하기", + "QUERY_DROPDOWN_LABELS": { + "AND": "와/과", + "OR": "혹은" + }, + "INPUT_PLACEHOLDER": "Enter value", + "OPERATOR_LABELS": { + "equal_to": "동일한", + "not_equal_to": "비동일한", + "does_not_contain": "포함되지 않은", + "is_present": "현존하는", + "is_not_present": "현존하지 않은", + "is_greater_than": "보다 큰", + "is_less_than": "보다 작은", + "days_before": "x 일 전에", + "starts_with": "Starts with", + "equalTo": "동일한", + "notEqualTo": "비동일한", + "contains": "포함된", + "doesNotContain": "포함되지 않은", + "isPresent": "현존하는", + "isNotPresent": "현존하지 않은", + "isGreaterThan": "보다 큰", + "isLessThan": "보다 작은", + "daysBefore": "x 일 전에", + "startsWith": "Starts with" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "참", + "FALSE": "거짓" + }, + "ATTRIBUTES": { + "STATUS": "상태", + "ASSIGNEE_NAME": "Assignee name", + "INBOX_NAME": "Inbox name", + "TEAM_NAME": "Team name", + "CONVERSATION_IDENTIFIER": "Conversation identifier", + "CAMPAIGN_NAME": "Campaign name", + "LABELS": "라벨", + "BROWSER_LANGUAGE": "Browser language", + "PRIORITY": "Priority", + "COUNTRY_NAME": "Country name", + "REFERER_LINK": "참고 링크", + "CUSTOM_ATTRIBUTE_LIST": "리스트", + "CUSTOM_ATTRIBUTE_TEXT": "텍스트", + "CUSTOM_ATTRIBUTE_NUMBER": "숫자", + "CUSTOM_ATTRIBUTE_LINK": "링크", + "CUSTOM_ATTRIBUTE_CHECKBOX": "체크박스", + "CREATED_AT": "에 만들어짐", + "LAST_ACTIVITY": "최근 활동" + }, + "ERRORS": { + "VALUE_REQUIRED": "값이 필요합니다.", + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard filters", + "ADDITIONAL_FILTERS": "Additional filters", + "CUSTOM_ATTRIBUTES": "Custom attributes" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "이 필터를 저장하시겠습니까?", + "LABEL": "필터 이름 지정하기", + "PLACEHOLDER": "Name your filter to refer it later.", + "ERROR_MESSAGE": "이름이 필요합니다.", + "SAVE_BUTTON": "필터 저장하기", + "CANCEL_BUTTON": "취소", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "폴더가 성공적으로 생성됨.", + "ERROR_MESSAGE": "폴더 생성 중 에러 발생." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "구획이 성공적으로 생성됨.", + "ERROR_MESSAGE": "구획 생성 중 에러 발생." + } + }, + "EDIT": { + "EDIT_BUTTON": "Edit folder" + }, + "DELETE": { + "DELETE_BUTTON": "필터 삭제하기", + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "정말로 이 필터를 삭제하고 싶으신가요? ", + "YES": "Yes, delete", + "NO": "No, keep it" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder deleted successfully.", + "ERROR_MESSAGE": "폴더 삭제 중 에러 발생." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "구획이 성공적으로 삭제됨.", + "ERROR_MESSAGE": "구획 제거 중 에러 발생." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/agentBots.json b/app/javascript/dashboard/i18n/locale/ko/agentBots.json new file mode 100644 index 0000000..a850539 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "봇", + "LOADING_EDITOR": "Loading editor...", + "DESCRIPTION": "에이전트 봇은 팀에서 가장 뛰어난 멤버와 같습니다. 사소한 일은 봇이 처리해 주니, 중요한 일에 집중하세요. 한번 사용해 보세요. 이 페이지에서 봇을 관리하거나 '봇 추가' 버튼을 통해 새 봇을 생성할 수 있습니다.", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "시스템 봇", + "GLOBAL_BOT_BADGE": "System", + "AVATAR": { + "SUCCESS_DELETE": "Bot avatar deleted successfully", + "ERROR_DELETE": "Error deleting bot avatar, please try again" + }, + "BOT_CONFIGURATION": { + "TITLE": "Select an agent bot", + "DESC": "Assign an Agent Bot to your inbox. They can handle initial conversations and transfer them to a live agent when necessary.", + "SUBMIT": "업데이트", + "DISCONNECT": "Disconnect bot", + "SUCCESS_MESSAGE": "Successfully updated the agent bot.", + "DISCONNECTED_SUCCESS_MESSAGE": "Successfully disconnected the agent bot.", + "ERROR_MESSAGE": "Could not update the agent bot. Please try again.", + "DISCONNECTED_ERROR_MESSAGE": "Could not disconnect the agent bot. Please try again.", + "SELECT_PLACEHOLDER": "Select bot" + }, + "ADD": { + "TITLE": "Agregar Bot", + "CANCEL_BUTTON_TEXT": "취소", + "API": { + "SUCCESS_MESSAGE": "Bot added successfully.", + "ERROR_MESSAGE": "Could not add bot. Please try again later." + } + }, + "LIST": { + "404": "Bot no encontrado. Puedes crear uno haciendo click en el botón 'Agregar Bot'.", + "LOADING": "Fetching bots...", + "TABLE_HEADER": { + "DETAILS": "Detalles del Bot", + "URL": "웹훅 URL" + } + }, + "DELETE": { + "BUTTON_TEXT": "삭제", + "TITLE": "Delete bot", + "CONFIRM": { + "TITLE": "삭제 확인", + "MESSAGE": "Are you sure you want to delete {name}?", + "YES": "Yes, Delete", + "NO": "아니요, 유지합니다" + }, + "API": { + "SUCCESS_MESSAGE": "Bot deleted successfully.", + "ERROR_MESSAGE": "Could not delete bot. Please try again." + } + }, + "EDIT": { + "BUTTON_TEXT": "수정", + "TITLE": "Edit bot", + "API": { + "SUCCESS_MESSAGE": "Bot updated successfully.", + "ERROR_MESSAGE": "Could not update bot. Please try again." + } + }, + "ACCESS_TOKEN": { + "TITLE": "엑세스 토큰", + "DESCRIPTION": "Copy the access token and save it securely", + "COPY_SUCCESSFUL": "Access token copied to clipboard", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "Bot name", + "PLACEHOLDER": "Enter bot name", + "REQUIRED": "Bot name is required" + }, + "DESCRIPTION": { + "LABEL": "내용", + "PLACEHOLDER": "What does this bot do?" + }, + "WEBHOOK_URL": { + "LABEL": "웹훅 URL", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "Webhook URL is required" + }, + "ERRORS": { + "NAME": "Bot name is required", + "URL": "Webhook URL is required", + "VALID_URL": "Please enter a valid URL starting with http:// or https://" + }, + "CANCEL": "취소", + "CREATE": "Create Bot", + "UPDATE": "Update Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them." + }, + "TYPES": { + "WEBHOOK": "Webhook bot" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/agentMgmt.json b/app/javascript/dashboard/i18n/locale/ko/agentMgmt.json new file mode 100644 index 0000000..d73b5c8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "에이전트", + "HEADER_BTN_TXT": "에이전트 추가", + "LOADING": "에이전트 목록을 가져오는 중", + "DESCRIPTION": "상담원은 사용자 메시지를 보고 응답할 수 있는 고객 지원팀의 구성원입니다. 아래 목록에는 계정의 모든 상담원이 나와 있습니다.", + "LEARN_MORE": "사용자 역할에 대해 알아보기", + "AGENT_TYPES": { + "ADMINISTRATOR": "관리자", + "AGENT": "에이전트" + }, + "LIST": { + "404": "이 계정에 연결된 에이전트가 없음", + "TITLE": "팀 내 에이전트 관리", + "DESC": "팀에 에이전트를 추가/제거할 수 있습니다.", + "NAME": "이름", + "EMAIL": "이메일", + "STATUS": "상태", + "ACTIONS": "액션", + "VERIFIED": "인증됨", + "VERIFICATION_PENDING": "인증 보류", + "AVAILABLE_CUSTOM_ROLE": "사용 가능한 사용자 정의 역할 권한" + }, + "ADD": { + "TITLE": "팀에 에이전트 추가", + "DESC": "받은 메시지함에 대한 지원을 처리할 수 있는 사용자를 추가할 수 있습니다.", + "CANCEL_BUTTON_TEXT": "취소", + "FORM": { + "NAME": { + "LABEL": "에이전트 이름", + "PLACEHOLDER": "에이전트 이름을 입력하십시오." + }, + "AGENT_TYPE": { + "LABEL": "역할", + "PLACEHOLDER": "역할을 선택하십시오.", + "ERROR": "역할이 필요함" + }, + "EMAIL": { + "LABEL": "이메일 주소", + "PLACEHOLDER": "에이전트의 이메일 주소를 입력하십시오." + }, + "SUBMIT": "에이전트 추가" + }, + "API": { + "SUCCESS_MESSAGE": "에이전트가 성공적으로 추가됨", + "EXIST_MESSAGE": "에이전트 이메일이 이미 사용 중입니다. 다른 이메일 주소를 시도하십시오.", + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없음. 나중에 다시 시도하십시오." + } + }, + "DELETE": { + "BUTTON_TEXT": "삭제", + "API": { + "SUCCESS_MESSAGE": "에이전트가 성공적으로 삭제됨", + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없음. 나중에 다시 시도하십시오." + }, + "CONFIRM": { + "TITLE": "삭제 확인", + "MESSAGE": "삭제하시겠습니까? ", + "YES": "예, 삭제합니다. ", + "NO": "아니요, 유지해주세요. " + } + }, + "EDIT": { + "TITLE": "에이전트 수정", + "FORM": { + "NAME": { + "LABEL": "에이전트 이름", + "PLACEHOLDER": "에이전트 이름을 입력하십시오." + }, + "AGENT_TYPE": { + "LABEL": "역할", + "PLACEHOLDER": "역할을 선택하십시오.", + "ERROR": "역할이 필요함" + }, + "EMAIL": { + "LABEL": "이메일 주소", + "PLACEHOLDER": "에이전트의 이메일 주소를 입력하십시오." + }, + "AGENT_AVAILABILITY": { + "LABEL": "유용성", + "PLACEHOLDER": "가용성 상태를 선택하세요", + "ERROR": "Availability is required" + }, + "SUBMIT": "에이전트 수정" + }, + "BUTTON_TEXT": "수정", + "CANCEL_BUTTON_TEXT": "취소", + "API": { + "SUCCESS_MESSAGE": "에이전트가 성공적으로 업데이트됨", + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없음. 나중에 다시 시도하십시오." + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "비밀번호 재설정", + "ADMIN_SUCCESS_MESSAGE": "비밀번호 재설정 지침이 포함된 이메일이 에이전트로 전송됨", + "SUCCESS_MESSAGE": "에이전트 비밀번호 재설정 성공", + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없음. 나중에 다시 시도하십시오." + } + }, + "SEARCH": { + "NO_RESULTS": "검색 결과가 없습니다." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "없음", + "TITLE": { + "AGENT": "에이전트 선택", + "TEAM": "팀 선택" + }, + "LIST": { + "NONE": "없음" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "에이전트를 찾을 수 없음", + "TEAM": "팀을 찾을 수 없음" + }, + "PLACEHOLDER": { + "AGENT": "에이전트 찾기", + "TEAM": "팀 찾기", + "INPUT": "Search for agents" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/ko/attributesMgmt.json new file mode 100644 index 0000000..26d016e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "사용자 지정 특성", + "HEADER_BTN_TXT": "사용자 지정 속성 추가하기", + "LOADING": "사용자 지정 속성들 가져오기", + "DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.", + "LEARN_MORE": "Learn more about custom attributes", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "텍스트", + "NUMBER": "숫자", + "LINK": "링크", + "DATE": "Date", + "LIST": "리스트", + "CHECKBOX": "체크박스" + }, + "ADD": { + "TITLE": "사용자 지정 속성 추가하기", + "SUBMIT": "만들기", + "CANCEL_BUTTON_TEXT": "취소", + "FORM": { + "NAME": { + "LABEL": "표시명", + "PLACEHOLDER": "사용자 지정 속성 표기명 작성하기", + "ERROR": "이름이 필요합니다" + }, + "DESC": { + "LABEL": "내용", + "PLACEHOLDER": "사용자 지정 속성 설명 작성하기", + "ERROR": "설명이 필요합니다" + }, + "MODEL": { + "LABEL": "Applies to", + "PLACEHOLDER": "Please select one", + "ERROR": "Model is required" + }, + "TYPE": { + "LABEL": "Type", + "PLACEHOLDER": "Please select a type", + "ERROR": "Type is required", + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter value and press enter key", + "ERROR": "Must have at least one value" + } + }, + "KEY": { + "LABEL": "Key", + "PLACEHOLDER": "Enter custom attribute key", + "ERROR": "Key is required", + "IN_VALID": "Invalid key" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute added successfully!", + "ERROR_MESSAGE": "Could not create a Custom Attribute. Please try again later." + } + }, + "DELETE": { + "BUTTON_TEXT": "삭제", + "API": { + "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again." + }, + "CONFIRM": { + "TITLE": "{attributeName}팀을 삭제하시겠습니까?", + "PLACE_HOLDER": "Please type {attributeName} to confirm", + "MESSAGE": "Deleting will remove the custom attribute", + "YES": "삭제 ", + "NO": "취소" + } + }, + "EDIT": { + "TITLE": "Edit Custom Attribute", + "UPDATE_BUTTON_TEXT": "업데이트", + "TYPE": { + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter values and press enter key" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute updated successfully", + "ERROR_MESSAGE": "There was an error updating custom attribute, please try again" + } + }, + "TABS": { + "HEADER": "사용자 지정 특성", + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "이름", + "DESCRIPTION": "내용", + "TYPE": "Type", + "KEY": "Key" + }, + "BUTTONS": { + "EDIT": "수정", + "DELETE": "삭제" + }, + "EMPTY_RESULT": { + "404": "There are no custom attributes created", + "NOT_FOUND": "There are no custom attributes configured" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/auditLogs.json b/app/javascript/dashboard/i18n/locale/ko/auditLogs.json new file mode 100644 index 0000000..9bfdb6d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Audit Logs", + "HEADER_BTN_TXT": "Add Audit Logs", + "LOADING": "Fetching Audit Logs", + "DESCRIPTION": "Audit Logs maintain a record of activities in your account, allowing you to track and audit your account, team, or services.", + "LEARN_MORE": "Learn more about audit logs", + "SEARCH_404": "이 쿼리와 일치하는 항목이 없음", + "SIDEBAR_TXT": "Audit Logs
Audit Logs are trails for events and actions in a Chatwoot System.
", + "LIST": { + "404": "There are no Audit Logs available in this account.", + "TITLE": "Manage Audit Logs", + "DESC": "Audit Logs are trails for events and actions in a Chatwoot System.", + "TABLE_HEADER": { + "ACTIVITY": "User", + "TIME": "Action", + "IP_ADDRESS": "IP 주소" + } + }, + "API": { + "SUCCESS_MESSAGE": "AuditLogs retrieved successfully", + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없음. 나중에 다시 시도하십시오." + }, + "DEFAULT_USER": "System", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} invited {invitee} to the account as an {role}", + "EDIT": { + "SELF": "{agentName} changed their {attributes} to {values}", + "OTHER": "{agentName} changed {attributes} of {user} to {values}", + "DELETED": "{agentName} changed {attributes} of a deleted user to {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} signed in", + "SIGN_OUT": "{agentName} signed out" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} deleted conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/automation.json b/app/javascript/dashboard/i18n/locale/ko/automation.json new file mode 100644 index 0000000..e8e8de6 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automation", + "DESCRIPTION": "자동화를 통해 라벨을 추가하고 가장 적합한 상담원에게 대화를 배정하는 등 수작업이 필요한 기존 프로세스를 대체하고 간소화할 수 있습니다. 이를 통해 팀은 일상적인 업무에 소요되는 시간을 줄이면서 자신의 강점에 집중할 수 있습니다.", + "LEARN_MORE": "Learn more about automation", + "HEADER_BTN_TXT": "Add Automation Rule", + "LOADING": "Fetching automation rules", + "ADD": { + "TITLE": "Add Automation Rule", + "SUBMIT": "만들기", + "CANCEL_BUTTON_TEXT": "취소", + "FORM": { + "NAME": { + "LABEL": "Rule Name", + "PLACEHOLDER": "Enter rule name", + "ERROR": "이름이 필요합니다" + }, + "DESC": { + "LABEL": "내용", + "PLACEHOLDER": "Enter rule description", + "ERROR": "설명이 필요합니다" + }, + "EVENT": { + "LABEL": "Event", + "PLACEHOLDER": "Please select one", + "ERROR": "Event is required" + }, + "CONDITIONS": { + "LABEL": "Conditions" + }, + "ACTIONS": { + "LABEL": "액션" + } + }, + "CONDITION_BUTTON_LABEL": "Add Condition", + "ACTION_BUTTON_LABEL": "Add Action", + "API": { + "SUCCESS_MESSAGE": "Automation rule added successfully", + "ERROR_MESSAGE": "Could not able to create a automation rule, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "이름", + "DESCRIPTION": "내용", + "ACTIVE": "Active", + "CREATED_ON": "Created on" + }, + "404": "No automation rules found" + }, + "DELETE": { + "TITLE": "Delete Automation Rule", + "SUBMIT": "삭제", + "CANCEL_BUTTON_TEXT": "취소", + "CONFIRM": { + "TITLE": "삭제 확인", + "MESSAGE": "삭제하시겠습니까? ", + "YES": "예, 삭제합니다. ", + "NO": "아니요, 유지해주세요. " + }, + "API": { + "SUCCESS_MESSAGE": "Automation rule deleted successfully", + "ERROR_MESSAGE": "Could not able to delete a automation rule, Please try again later" + } + }, + "EDIT": { + "TITLE": "Edit Automation Rule", + "SUBMIT": "업데이트", + "CANCEL_BUTTON_TEXT": "취소", + "API": { + "SUCCESS_MESSAGE": "Automation rule updated successfully", + "ERROR_MESSAGE": "Could not update automation rule, Please try again later" + } + }, + "CLONE": { + "TOOLTIP": "Clone", + "API": { + "SUCCESS_MESSAGE": "Automation cloned successfully", + "ERROR_MESSAGE": "Could not clone automation rule, Please try again later" + } + }, + "FORM": { + "EDIT": "수정", + "CREATE": "만들기", + "DELETE": "삭제", + "CANCEL": "취소", + "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" + }, + "CONDITION": { + "DELETE_MESSAGE": "You need to have atleast one condition to save", + "CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes" + }, + "ACTION": { + "DELETE_MESSAGE": "You need to have atleast one action to save", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Enter your message here", + "TEAM_DROPDOWN_PLACEHOLDER": "Select teams", + "EMAIL_INPUT_PLACEHOLDER": "Enter email", + "URL_INPUT_PLACEHOLDER": "Enter URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Activate Automation Rule", + "DEACTIVATION_TITLE": "Deactivate Automation Rule", + "ACTIVATION_DESCRIPTION": "This action will activate the automation rule '{automationName}'. Are you sure you want to proceed?", + "DEACTIVATION_DESCRIPTION": "This action will deactivate the automation rule '{automationName}'. Are you sure you want to proceed?", + "ACTIVATION_SUCCESFUL": "Automation Rule Activated Successfully", + "DEACTIVATION_SUCCESFUL": "Automation Rule Deactivated Successfully", + "ACTIVATION_ERROR": "Could not Activate Automation, Please try again later", + "DEACTIVATION_ERROR": "Could not Deactivate Automation, Please try again later", + "CONFIRMATION_LABEL": "예", + "CANCEL_LABEL": "아니오" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Could not upload attachment, Please try again", + "LABEL_IDLE": "Upload Attachment", + "LABEL_UPLOADING": "업로드 중...", + "LABEL_UPLOADED": "Successfully Uploaded", + "LABEL_UPLOAD_FAILED": "Upload Failed" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "값이 필요합니다.", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "NONE_OPTION": "없음", + "EVENTS": { + "CONVERSATION_CREATED": "Conversation Created", + "CONVERSATION_UPDATED": "Conversation Updated", + "MESSAGE_CREATED": "Message Created", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Conversation Opened" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assign to Agent", + "ASSIGN_TEAM": "Assign a Team", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "SEND_EMAIL_TO_TEAM": "Send an Email to Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "대화 음소거", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_WEBHOOK_EVENT": "Send Webhook Event", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "CHANGE_PRIORITY": "Change Priority", + "ADD_SLA": "Add SLA", + "OPEN_CONVERSATION": "Open conversation" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "없음", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Message Type", + "MESSAGE_CONTAINS": "Message Contains", + "EMAIL": "이메일", + "INBOX": "받은 메시지함", + "CONVERSATION_LANGUAGE": "Conversation Language", + "PHONE_NUMBER": "전화 번호", + "STATUS": "상태", + "BROWSER_LANGUAGE": "언어 표시", + "MAIL_SUBJECT": "Email Subject", + "COUNTRY_NAME": "국가", + "REFERER_LINK": "Referrer Link", + "ASSIGNEE_NAME": "Assignee", + "TEAM_NAME": "Team", + "PRIORITY": "Priority", + "LABELS": "라벨" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/bulkActions.json b/app/javascript/dashboard/i18n/locale/ko/bulkActions.json new file mode 100644 index 0000000..d1c06a0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", + "AGENT_SELECT_LABEL": "에이전트 선택", + "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", + "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Go back", + "ASSIGN_LABEL": "할당하다", + "YES": "예", + "SEARCH_INPUT_PLACEHOLDER": "검색", + "ASSIGN_AGENT_TOOLTIP": "Assign agent", + "ASSIGN_TEAM_TOOLTIP": "Assign team", + "ASSIGN_SUCCESFUL": "Conversations assigned successfully.", + "ASSIGN_FAILED": "Failed to assign conversations. Please try again.", + "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", + "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", + "AGENT_LIST_LOADING": "Loading agents", + "UPDATE": { + "CHANGE_STATUS": "Change status", + "SNOOZE_UNTIL": "Snooze", + "UPDATE_SUCCESFUL": "Conversation status updated successfully.", + "UPDATE_FAILED": "Failed to update conversations. Please try again." + }, + "LABELS": { + "ASSIGN_LABELS": "Assign labels", + "NO_LABELS_FOUND": "라벨을 찾을 수 없습니다", + "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "ASSIGN_SUCCESFUL": "Labels assigned successfully.", + "ASSIGN_FAILED": "Failed to assign labels. Please try again." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "팀 선택", + "NONE": "없음", + "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", + "ASSIGN_SELECTED_TEAMS": "Assign selected team.", + "ASSIGN_SUCCESFUL": "Teams assigned successfully.", + "ASSIGN_FAILED": "Failed to assign team. Please try again." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/campaign.json b/app/javascript/dashboard/i18n/locale/ko/campaign.json new file mode 100644 index 0000000..9c65e80 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "사용함", + "DISABLED": "사용 안 함" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "보낸 사람", + "BOT": "봇", + "FROM": "에서", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "취소", + "CREATE_BUTTON_TEXT": "만들기", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "메시지", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "SENT_BY": { + "LABEL": "보낸 사람", + "PLACEHOLDER": "Please select sender", + "ERROR": "Sender is required" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Please enter the URL", + "ERROR": "올바른 URL을 입력하십시오." + }, + "TIME_ON_PAGE": { + "LABEL": "Time on page(Seconds)", + "PLACEHOLDER": "Please enter the time", + "ERROR": "Time on page is required" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "Enable campaign", + "TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours" + }, + "BUTTONS": { + "CREATE": "만들기", + "CANCEL": "취소" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "취소", + "CREATE_BUTTON_TEXT": "만들기", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "메시지", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "만들기", + "CANCEL": "취소" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp 캠페인", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "사용 가능한 WhatsApp 캠페인 없음", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "취소", + "CREATE_BUTTON_TEXT": "만들기", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "Process {templateName}", + "LANGUAGE": "언어", + "CATEGORY": "Category", + "VARIABLES_LABEL": "Variables", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "만들기", + "CANCEL": "취소" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Are you sure to delete?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "삭제", + "API": { + "SUCCESS_MESSAGE": "Campaign deleted successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/ko/cannedMgmt.json new file mode 100644 index 0000000..58c8b42 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "미리 준비된 답변", + "LEARN_MORE": "Learn more about canned responses", + "DESCRIPTION": "미리 준비된 응답은 대화에 신속하게 응답할 수 있도록 도와주는 미리 작성된 응답입니다. 상담원은 대화 중에 '/' 문자 뒤에 단축 코드를 입력하여 미리 준비된 응답을 삽입할 수 있습니다. ", + "HEADER_BTN_TXT": "미리 준비된 응답 추가", + "LOADING": "Fetching canned responses...", + "SEARCH_404": "이 쿼리와 일치하는 항목이 없음.", + "LIST": { + "404": "이 계정에는 미리 준비된 답변이 없습니다.", + "TITLE": "미리 준비된 답변 관리", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "TABLE_HEADER": { + "SHORT_CODE": "Short code", + "CONTENT": "내용", + "ACTIONS": "액션" + } + }, + "ADD": { + "TITLE": "미리 준비된 응답 추가", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "CANCEL_BUTTON_TEXT": "취소", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a short code.", + "ERROR": "Short Code is required." + }, + "CONTENT": { + "LABEL": "메시지", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "보내기" + }, + "API": { + "SUCCESS_MESSAGE": "Canned response added successfully.", + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없습니다. 나중에 다시 시도해 주세요." + } + }, + "EDIT": { + "TITLE": "Edit canned response", + "CANCEL_BUTTON_TEXT": "취소", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a shortcode.", + "ERROR": "Short code is required." + }, + "CONTENT": { + "LABEL": "메시지", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "보내기" + }, + "BUTTON_TEXT": "수정", + "API": { + "SUCCESS_MESSAGE": "Canned response is updated successfully.", + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없습니다. 나중에 다시 시도해 주세요." + } + }, + "DELETE": { + "BUTTON_TEXT": "삭제", + "API": { + "SUCCESS_MESSAGE": "Canned response deleted successfully.", + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없습니다. 나중에 다시 시도해 주세요." + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "삭제하시겠습니까? ", + "YES": "예, 삭제합니다. ", + "NO": "아니요, 유지합니다 " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/chatlist.json b/app/javascript/dashboard/i18n/locale/ko/chatlist.json new file mode 100644 index 0000000..6ca051f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "대화 가져오기", + "LOAD_MORE_CONVERSATIONS": "더 많은 대화 불러오기", + "EOF": "모든 대화 불러오기🎉", + "LIST": { + "404": "이 그룹에는 활성 대화가 없습니다." + }, + "FAILED_TO_SEND": "Failed to send", + "TAB_HEADING": "대화", + "MENTION_HEADING": "멘션", + "UNATTENDED_HEADING": "Unattended", + "SEARCH": { + "INPUT": "사람 검색, 채팅, 저장된 응답..." + }, + "FILTER_ALL": "모두", + "ASSIGNEE_TYPE_TABS": { + "me": "나에게 할당", + "unassigned": "지정되지 않음", + "all": "모두" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "열기" + }, + "resolved": { + "TEXT": "해결됨" + }, + "pending": { + "TEXT": "보내는 중" + }, + "snoozed": { + "TEXT": "일시 중지됨" + }, + "all": { + "TEXT": "모두" + } + }, + "VIEW_FILTER": "보기", + "SORT_TOOLTIP_LABEL": "Sort conversations", + "CHAT_SORT": { + "STATUS": "상태", + "ORDER_BY": "Order by" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "만들어짐", + "OLDEST": "에 만들어짐:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "최근 활동:", + "ACTIVE": "최근 활동" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Last activity: Oldest first" + }, + "last_activity_at_desc": { + "TEXT": "Last activity: Newest first" + }, + "created_at_desc": { + "TEXT": "Created at: Newest first" + }, + "created_at_asc": { + "TEXT": "Created at: Oldest first" + }, + "priority_desc": { + "TEXT": "Priority: Highest first" + }, + "priority_asc": { + "TEXT": "Priority: Lowest first" + }, + "waiting_since_asc": { + "TEXT": "Pending Response: Longest first" + }, + "waiting_since_desc": { + "TEXT": "Pending Response: Shortest first" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "사진 메시지" + }, + "audio": { + "CONTENT": "음성 메시지" + }, + "video": { + "CONTENT": "영상 메시지" + }, + "file": { + "CONTENT": "파일 첨부" + }, + "location": { + "CONTENT": "장소" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "URL을 공유함" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Sort conversation", + "DROPDOWN_TITLE": "Sort by", + "ITEMS": { + "LATEST": { + "NAME": "Last activity at", + "LABEL": "최근 활동" + }, + "CREATED_AT": { + "NAME": "에 만들어짐", + "LABEL": "에 만들어짐" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Last user message at", + "LABEL": "최근 메세지" + } + } + }, + "RECEIVED_VIA_EMAIL": "이메일을 통해 수신됨", + "VIEW_TWEET_IN_TWITTER": "트위터에서 트윗 보기", + "REPLY_TO_TWEET": "트윗에 응답하기", + "LINK_TO_STORY": "인스타그램 스토리로 가기", + "SENT": "성공적으로 보내짐", + "READ": "Read successfully", + "DELIVERED": "Delivered successfully", + "NO_MESSAGES": "메시지 없음", + "NO_CONTENT": "콘텐츠 이용 불가", + "HIDE_QUOTED_TEXT": "인용문 가리기", + "SHOW_QUOTED_TEXT": "인용문 보이기", + "MESSAGE_READ": "읽기", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/companies.json b/app/javascript/dashboard/i18n/locale/ko/companies.json new file mode 100644 index 0000000..cf62d96 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "이름", + "DOMAIN": "Domain", + "CREATED_AT": "에 만들어짐", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/components.json b/app/javascript/dashboard/i18n/locale/ko/components.json new file mode 100644 index 0000000..3dab334 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} of {totalPages} pages" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "검색 결과가 없습니다.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} more" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "검색 결과가 없습니다.", + "SEARCHING": "검색중..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "취소", + "CONFIRM": "Confirm" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "국가 검색", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Please select a dial code from the list" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Author is not available" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Learn more", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/contact.json b/app/javascript/dashboard/i18n/locale/ko/contact.json new file mode 100644 index 0000000..b48b67b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "사용할 수 없음", + "EMAIL_ADDRESS": "이메일 주소", + "PHONE_NUMBER": "휴대폰 번호", + "IDENTIFIER": "식별자", + "COPY_SUCCESSFUL": "클립보드에 성공적으로 복사됨", + "COMPANY": "회사", + "LOCATION": "장소", + "BROWSER_LANGUAGE": "언어 표시", + "CONVERSATION_TITLE": "대화 자세히", + "VIEW_PROFILE": "프로필 보기", + "BROWSER": "브라우저", + "OS": "운영 체제", + "INITIATED_FROM": "시작 위치", + "INITIATED_AT": "시작 시간", + "IP_ADDRESS": "IP 주소", + "CREATED_AT_LABEL": "Created", + "NEW_MESSAGE": "새 메시지", + "CALL": "Call", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "이 연락처와 관련된 이전 대화가 없습니다.", + "TITLE": "이전 대화" + }, + "LABELS": { + "CONTACT": { + "TITLE": "연락처 라벨", + "ERROR": "라벨 업데이트 실패" + }, + "CONVERSATION": { + "TITLE": "대화 라벨", + "ADD_BUTTON": "라벨 추가하기" + }, + "LABEL_SELECT": { + "TITLE": "라벨 추가하기", + "PLACEHOLDER": "라벨 찾기", + "NO_RESULT": "라벨을 찾을 수 없습니다", + "CREATE_LABEL": "Create new label" + } + }, + "MERGE_CONTACT": "연락처 합치기", + "CONTACT_ACTIONS": "연락처 활동", + "MUTE_CONTACT": "Block Contact", + "UNMUTE_CONTACT": "Unblock Contact", + "MUTED_SUCCESS": "This contact is blocked successfully. You will not be notified of any future conversations.", + "UNMUTED_SUCCESS": "This contact is unblocked successfully.", + "SEND_TRANSCRIPT": "대화기록 보내기", + "EDIT_LABEL": "수정", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "사용자 지정 특성", + "CONTACT_LABELS": "연락처 라벨", + "PREVIOUS_CONVERSATIONS": "이전 대화", + "NO_RECORDS_FOUND": "No attributes found" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "연락처 수정", + "TITLE": "연락처 수정", + "DESC": "연락처 수정 자세히" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "연락처 지우기", + "TITLE": "연락처 지우기", + "DESC": "연락처 설명 지우기", + "CONFIRM": { + "TITLE": "삭제 확인", + "MESSAGE": "삭제하시겠습니까? ", + "YES": "예, 삭제합니다", + "NO": "아니요, 유지합니다" + }, + "API": { + "SUCCESS_MESSAGE": "연락처가 성공적으로 삭제되었습니다", + "ERROR_MESSAGE": "연락처를 삭제할 수 없습니다. 나중에 다시 시도해 주세요." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "보내기", + "CANCEL": "취소", + "AVATAR": { + "LABEL": "연락처 아바타" + }, + "NAME": { + "PLACEHOLDER": "연락처의 전체 이름 입력", + "LABEL": "전체 이름" + }, + "BIO": { + "PLACEHOLDER": "연락처의 자기 소개 입력", + "LABEL": "자기 소개" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "연락처의 이메일 주소 입력", + "LABEL": "이메일 주소", + "DUPLICATE": "이 이메일 주소는 다른 연락처에 사용 중입니다.", + "ERROR": "올바른 전자 메일 주소를 입력하세요." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "연락처의 전화 번호 입력", + "LABEL": "전화 번호", + "HELP": "전화번호는 E.164 형식이여야 합니다. 예: +1415555555 [+][국가 코드][지역 코드][전화번호]", + "ERROR": "전화번호는 비어있거나 E.164 형식이여야 합니다", + "DIAL_CODE_ERROR": "Please select a dial code from the list", + "DUPLICATE": "이 전화번호는 다른 연락처에 사용 중입니다." + }, + "LOCATION": { + "PLACEHOLDER": "연락처 위치 입력", + "LABEL": "장소" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "회사명 입력", + "LABEL": "회사명" + }, + "COUNTRY": { + "PLACEHOLDER": "Enter the country name", + "LABEL": "국가 이름", + "SELECT_PLACEHOLDER": "Select", + "REMOVE": "제거", + "SELECT_COUNTRY": "Select Country" + }, + "CITY": { + "PLACEHOLDER": "Enter the city name", + "LABEL": "City Name" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "페이스북 사용자 이름 입력", + "LABEL": "페이스북" + }, + "TWITTER": { + "PLACEHOLDER": "트위터 사용자 이름 입력", + "LABEL": "트위터" + }, + "LINKEDIN": { + "PLACEHOLDER": "링크드인 사용자 이름 입력", + "LABEL": "링크드인" + }, + "GITHUB": { + "PLACEHOLDER": "깃허브 사용자 이름 입력", + "LABEL": "깃허브" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "연락처 아바타가 성공적으로 삭제되었습니다", + "ERROR_MESSAGE": "연락처 아바타를 삭제할 수 없습니다. 나중에 다시 시도해 주세요." + } + }, + "SUCCESS_MESSAGE": "연락처가 성공적으로 저장되었습니다.", + "ERROR_MESSAGE": "오류가 발생했습니다. 다시 시도하십시오." + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "대화 시작", + "TITLE": "새 대화", + "DESC": "새로운 메세지를 보내 대화를 시작하세요.", + "NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.", + "FORM": { + "TO": { + "LABEL": "~~에게" + }, + "INBOX": { + "LABEL": "받은 메시지함", + "PLACEHOLDER": "Choose source inbox", + "ERROR": "받은 메시지함 선택" + }, + "SUBJECT": { + "LABEL": "Subject", + "PLACEHOLDER": "Subject", + "ERROR": "제목은 공백일 수 없습니다." + }, + "MESSAGE": { + "LABEL": "메시지", + "PLACEHOLDER": "메시지를 여기에 작성해주세요", + "ERROR": "메시지는 비어 있을 수 없습니다" + }, + "ATTACHMENTS": { + "SELECT": "파일 선택", + "HELP_TEXT": "Drag and drop files here or choose files to attach" + }, + "SUBMIT": "메시지 보내기", + "CANCEL": "취소", + "SUCCESS_MESSAGE": "메시지가 보내졌습니다!", + "GO_TO_CONVERSATION": "보기", + "ERROR_MESSAGE": "전송이 불가능합니다! 다시 시도해주세요" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "소셜 프로필" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "사용자 지정 속성 추가하기", + "COPY_SUCCESSFUL": "클립보드에 성공적으로 복사됨", + "SHOW_MORE": "Show all attributes", + "SHOW_LESS": "Show less attributes", + "ACTIONS": { + "COPY": "속성 복사하기", + "DELETE": "속성 삭제하기", + "EDIT": "속성 수정하기" + }, + "ADD": { + "TITLE": "사용자 지정 속성 만들기", + "DESC": "이 연락처에 사용자 지정 설명 추가하기" + }, + "FORM": { + "CREATE": "속성 추가하기", + "CANCEL": "취소", + "NAME": { + "LABEL": "사용자 지정 속성 이름", + "PLACEHOLDER": "Shopify id", + "ERROR": "Invalid custom attribute name" + }, + "VALUE": { + "LABEL": "Attribute value", + "PLACEHOLDER": "Eg: 11901 " + }, + "ADD": { + "TITLE": "Create new attribute ", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "속성 추가하기", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Select value", + "SEARCH_INPUT_PLACEHOLDER": "Search value", + "NO_RESULT": "검색 결과가 없습니다." + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Valid value is required", + "INVALID_URL": "잘못된 주소입니다.", + "INVALID_INPUT": "Invalid Input" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Merge contacts", + "DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact’ s attributes will take precedence.", + "PRIMARY": { + "TITLE": "Primary contact", + "HELP_LABEL": "To be deleted" + }, + "PARENT": { + "TITLE": "Contact to merge", + "PLACEHOLDER": "Search for a contact", + "HELP_LABEL": "To be kept" + }, + "SUMMARY": { + "TITLE": "Summary", + "DELETE_WARNING": "Contact of {primaryContactName} will be deleted.", + "ATTRIBUTE_WARNING": "Contact details of {primaryContactName} will be copied to {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": " Merge contacts", + "CANCEL": "취소", + "CHILD_CONTACT": { + "ERROR": "Select a child contact to merge" + }, + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "연락처", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "Active contacts", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "메시지", + "SEND_MESSAGE": "메시지 보내기", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "연락처" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Add contact", + "EXPORT_CONTACT": "Export contacts", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Save contact", + "EMAIL_ADDRESS_DUPLICATE": "이 이메일 주소는 다른 연락처에 사용 중입니다.", + "PHONE_NUMBER_DUPLICATE": "이 전화번호는 다른 연락처에 사용 중입니다.", + "SUCCESS_MESSAGE": "연락처가 성공적으로 저장되었습니다.", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "This contact is unblocked successfully", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Import contacts", + "DESCRIPTION": "CSV 파일을 통해 연락처 가져오기", + "DOWNLOAD_LABEL": "간단한 CSV 파일 다운받기", + "LABEL": "CSV 파일:", + "CHOOSE_FILE": "Choose file", + "CHANGE": "변경", + "CANCEL": "취소", + "IMPORT": "가져오기", + "SUCCESS_MESSAGE": "You will be notified via email when the import is complete.", + "ERROR_MESSAGE": "오류가 발생했습니다. 다시 시도하십시오." + }, + "EXPORT_CONTACT": { + "TITLE": "Export contacts", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Export", + "SUCCESS_MESSAGE": "Export is in progress, You will be notified via email when export file is ready to dowanlod.", + "ERROR_MESSAGE": "오류가 발생했습니다. 다시 시도하십시오." + }, + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "이름", + "EMAIL": "이메일", + "PHONE_NUMBER": "휴대폰 번호", + "COMPANY": "회사", + "COUNTRY": "국가", + "CITY": "도시", + "LAST_ACTIVITY": "최근 활동", + "CREATED_AT": "에 만들어짐" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "이 필터를 저장하시겠습니까?", + "CONFIRM": "필터 저장하기", + "LABEL": "이름", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "삭제 확인", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "예, 삭제합니다", + "CANCEL": "No, Cancel", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "이름", + "EMAIL": "이메일", + "PHONE_NUMBER": "휴대폰 번호", + "IDENTIFIER": "식별자", + "COUNTRY": "국가", + "CITY": "도시", + "CREATED_AT": "에 만들어짐", + "LAST_ACTIVITY": "최근 활동", + "REFERER_LINK": "참고 링크", + "BLOCKED": "Blocked", + "BLOCKED_TRUE": "참", + "BLOCKED_FALSE": "거짓", + "BUTTONS": { + "CLEAR_FILTERS": "Clear filters", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "필터 적용하기", + "ADD_FILTER": "Add filter" + }, + "TITLE": "Filter contacts", + "EDIT_SEGMENT": "Edit segment", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Clear filters" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "상세보기", + "EDIT_DETAILS_FORM": { + "TITLE": "연락처 수정 자세히", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "이 이메일 주소는 다른 연락처에 사용 중입니다." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "이 전화번호는 다른 연락처에 사용 중입니다." + }, + "CITY": { + "PLACEHOLDER": "Enter the city name" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "회사명 입력" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "This action is permanent and irreversible.", + "BUTTON": "Delete now" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "연락처 지우기", + "DELETE_DIALOG": { + "TITLE": "삭제 확인", + "DESCRIPTION": "Are you sure you want to delete this contact?", + "CONFIRM": "예, 삭제합니다", + "API": { + "SUCCESS_MESSAGE": "연락처가 성공적으로 삭제되었습니다", + "ERROR_MESSAGE": "연락처를 삭제할 수 없습니다. 나중에 다시 시도해 주세요." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributes", + "HISTORY": "History", + "NOTES": "노트들", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "이 연락처와 관련된 이전 대화가 없습니다" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "예", + "NO": "아니오", + "TRIGGER": { + "SELECT": "Select value", + "INPUT": "Enter value" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "Valid value is required", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "잘못된 주소입니다.", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "No attributes found", + "API": { + "SUCCESS_MESSAGE": "Attribute updated successfully", + "DELETE_SUCCESS_MESSAGE": "Attribute deleted successfully", + "UPDATE_ERROR": "Unable to update attribute. Please try again later", + "DELETE_ERROR": "Unable to delete attribute. Please try again later" + } + }, + "MERGE": { + "TITLE": "연락처 합치기", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Primary contact", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "To be deleted", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Search for a contact", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!", + "IS_SEARCHING": "검색중...", + "BUTTONS": { + "CANCEL": "취소", + "CONFIRM": "연락처 합치기" + } + }, + "NOTES": { + "PLACEHOLDER": "노트 추가하기", + "WROTE": "wrote", + "YOU": "나", + "SAVE": "Save note", + "ADD_NOTE": "Add contact note", + "EXPAND": "Expand", + "COLLAPSE": "Collapse", + "NO_NOTES": "No notes, you can add notes from the contact details page.", + "EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "No contacts found in this account", + "SUBTITLE": "Start adding new contacts by clicking on the button below", + "BUTTON_LABEL": "Add contact", + "SEARCH_EMPTY_STATE_TITLE": "검색과 일치하는 연락처 없음 🔍", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Assign Labels", + "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "삭제", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "연락처 지우기" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "보기", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "To:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Subject :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "Bcc:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "Bcc" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "메시지를 여기에 작성해주세요..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Variables", + "BACK": "Go back", + "SEND_MESSAGE": "메시지 보내기" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Go back", + "SEND_MESSAGE": "메시지 보내기" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/contactFilters.json b/app/javascript/dashboard/i18n/locale/ko/contactFilters.json new file mode 100644 index 0000000..4ba7ee0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filter Contacts", + "SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.", + "EDIT_CUSTOM_SEGMENT": "Edit Segment", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your segment.", + "ADD_NEW_FILTER": "필터 추가하기", + "CLEAR_ALL_FILTERS": "Clear All Filters", + "FILTER_DELETE_ERROR": "적어도 하나 이상의 필터가 있어야 저장됩니다.", + "SUBMIT_BUTTON_LABEL": "보내기", + "UPDATE_BUTTON_LABEL": "Update Segment", + "CANCEL_BUTTON_LABEL": "취소", + "CLEAR_BUTTON_LABEL": "필터 제거하기", + "EMPTY_VALUE_ERROR": "값이 필요합니다.", + "SEGMENT_LABEL": "Segment Name", + "SEGMENT_QUERY_LABEL": "Segment Query", + "TOOLTIP_LABEL": "Filter contacts", + "QUERY_DROPDOWN_LABELS": { + "AND": "와/과", + "OR": "혹은" + }, + "OPERATOR_LABELS": { + "equal_to": "동일한", + "not_equal_to": "비동일한", + "contains": "포함된", + "does_not_contain": "포함되지 않은", + "is_present": "현존하는", + "is_not_present": "현존하지 않은", + "is_greater_than": "보다 큰", + "is_lesser_than": "Is lesser than", + "days_before": "x 일 전에" + }, + "ERRORS": { + "VALUE_REQUIRED": "값이 필요합니다." + }, + "ATTRIBUTES": { + "NAME": "이름", + "EMAIL": "이메일", + "PHONE_NUMBER": "휴대폰 번호", + "IDENTIFIER": "Identifier", + "CITY": "도시", + "COUNTRY": "국가", + "CUSTOM_ATTRIBUTE_LIST": "리스트", + "CUSTOM_ATTRIBUTE_TEXT": "텍스트", + "CUSTOM_ATTRIBUTE_NUMBER": "숫자", + "CUSTOM_ATTRIBUTE_LINK": "링크", + "CUSTOM_ATTRIBUTE_CHECKBOX": "체크박스", + "CREATED_AT": "에 만들어짐", + "LAST_ACTIVITY": "지난 활동", + "REFERER_LINK": "Referrer link", + "BLOCKED": "Blocked", + "LABELS": "라벨" + }, + "GROUPS": { + "STANDARD_FILTERS": "기본 필터", + "ADDITIONAL_FILTERS": "추가 필터", + "CUSTOM_ATTRIBUTES": "사용자 지정 특성" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/contentTemplates.json b/app/javascript/dashboard/i18n/locale/ko/contentTemplates.json new file mode 100644 index 0000000..75eb0f1 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "NO_CONTENT": "No content", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "언어", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "텍스트" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "언어", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "뒤로", + "SEND_MESSAGE_BUTTON": "Send Message" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/conversation.json b/app/javascript/dashboard/i18n/locale/ko/conversation.json new file mode 100644 index 0000000..00ef976 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "왼쪽 창에서 대화를 선택하십시오.", + "CSAT_REPLY_MESSAGE": "대화를 평가해 주세요", + "404": "Sorry, we cannot find the conversation. Please try again", + "SWITCH_VIEW_LAYOUT": "Switch the layout", + "DASHBOARD_APP_TAB_MESSAGES": "메시지", + "UNVERIFIED_SESSION": "The identity of this user is not verified", + "NO_MESSAGE_1": "어라! 받은 메시지함에 고객의 메시지가 없는 것 같아요.", + "NO_MESSAGE_2": " 페이지에 메시지를 보내기 위해서!", + "NO_INBOX_1": "안녕! 아직 받은 메시지함을 하나도 추가하지 않은 것 같아요.", + "NO_INBOX_2": " 시작하려면", + "NO_INBOX_AGENT": "오! 어떤 받은 메시지함에도 속하지 않는 것 같습니다. 관리자에게 문의하십시오.", + "SEARCH_MESSAGES": "대화에서 메시지 검색", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "to open command menu", + "KEYBOARD_SHORTCUTS": "to view keyboard shortcuts" + }, + "SEARCH": { + "TITLE": "메시지 검색", + "RESULT_TITLE": "검색 결과", + "LOADING_MESSAGE": "데이터 처리 중...", + "PLACEHOLDER": "검색할 텍스트를 입력하세요", + "NO_MATCHING_RESULTS": "검색 결과가 없습니다." + }, + "UNREAD_MESSAGES": "안 읽은 메시지", + "UNREAD_MESSAGE": "안 읽은 메시지", + "CLICK_HERE": "여기를 클릭하세요", + "LOADING_INBOXES": "받은 메시지함 불러오는 중", + "LOADING_CONVERSATIONS": "대화 불러오는 중", + "CANNOT_REPLY": "당신은 답장을 할 수 없습니다", + "24_HOURS_WINDOW": "24시간 메시지 창 제한", + "48_HOURS_WINDOW": "48시간 메시지 창 제한", + "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours", + "NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?", + "ASSIGN_TO_ME": "Assign to me", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24시간 메시지 창 제한", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "회신할 대상:", + "REMOVE_SELECTION": "선택 항목 제거", + "DOWNLOAD": "다운로드", + "UNKNOWN_FILE_TYPE": "알 수 없는 파일", + "SAVE_CONTACT": "Save Contact", + "NO_CONTENT": "No content to display", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} has shared a contact", + "LOCATION": "{sender} has shared a location", + "FILE": "{sender} has shared a file", + "MEETING": "{sender} has started a meeting" + }, + "UPLOADING_ATTACHMENTS": "첨부 업로드 중...", + "REPLIED_TO_STORY": "Replied to your story", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", + "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", + "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", + "NO_RESPONSE": "응답없음", + "RESPONSE": "Response", + "RATING_TITLE": "Rating", + "FEEDBACK_TITLE": "Feedback", + "REPLY_MESSAGE_NOT_FOUND": "Message not available", + "CARD": { + "SHOW_LABELS": "Show labels", + "HIDE_LABELS": "Hide labels" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "해결함", + "REOPEN_ACTION": "다시 열기", + "OPEN_ACTION": "열기", + "MORE_ACTIONS": "More actions", + "OPEN": "더보기", + "CLOSE": "닫기", + "DETAILS": "자세히", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", + "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "missed", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Mark as pending", + "SNOOZE_UNTIL": "Snooze", + "SNOOZE": { + "TITLE": "Snooze until", + "NEXT_REPLY": "Next reply", + "TOMORROW": "내일", + "NEXT_WEEK": "다음 주" + } + }, + "MENTION": { + "AGENTS": "에이전트", + "TEAMS": "팀" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Snooze until", + "APPLY": "Snooze", + "CANCEL": "취소" + }, + "PRIORITY": { + "TITLE": "Priority", + "OPTIONS": { + "NONE": "없음", + "URGENT": "Urgent", + "HIGH": "High", + "MEDIUM": "Medium", + "LOW": "Low" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "없음", + "INPUT_PLACEHOLDER": "Select priority", + "NO_RESULTS": "검색 결과가 없습니다", + "SUCCESSFUL": "Changed priority of conversation id {conversationId} to {priority}", + "FAILED": "Couldn't change priority. Please try again." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Delete conversation #{conversationId}", + "DESCRIPTION": "Are you sure you want to delete this conversation?", + "CONFIRM": "삭제" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Mark as pending", + "RESOLVED": "Mark as resolved", + "MARK_AS_UNREAD": "Mark as unread", + "MARK_AS_READ": "Mark as read", + "REOPEN": "대화 다시 열기", + "SNOOZE": { + "TITLE": "Snooze", + "NEXT_REPLY": "Until next reply", + "TOMORROW": "내일까지", + "NEXT_WEEK": "다음 주까지" + }, + "ASSIGN_AGENT": "Assign agent", + "ASSIGN_LABEL": "Assign label", + "AGENTS_LOADING": "Loading agents...", + "ASSIGN_TEAM": "Assign team", + "DELETE": "Delete conversation", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Conversation id {conversationId} assigned to \"{agentName}\"", + "FAILED": "Couldn't assign agent. Please try again." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Couldn't assign label. Please try again." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Assigned team \"{team}\" to conversation id {conversationId}", + "FAILED": "Couldn't assign team. Please try again." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Message signature", + "ENABLE_SIGN_TOOLTIP": "Enable signature", + "DISABLE_SIGN_TOOLTIP": "Disable signature", + "MSG_INPUT": "줄바꿈을 하시려면 Shift + enter 클릭하십시오. '/'로 시작하여 미리 준비된 답변을 사용할 수 있습니다.", + "PRIVATE_MSG_INPUT": "줄바꿈을 하시려면 Shift + enter 클릭하십시오. 에이전트만 볼 수 있습니다.", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.", + "CLICK_HERE": "Click here to update", + "WHATSAPP_TEMPLATES": "Whatsapp Templates" + }, + "REPLYBOX": { + "REPLY": "답글", + "PRIVATE_NOTE": "개인 노트", + "SEND": "보내기", + "CREATE": "노트 추가", + "INSERT_READ_MORE": "Read more", + "DISMISS_REPLY": "Dismiss reply", + "REPLYING_TO": "Replying to:", + "TIP_EMOJI_ICON": "이모티콘 보기", + "TIP_ATTACH_ICON": "파일 첨부", + "TIP_AUDIORECORDER_ICON": "Record audio", + "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", + "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "DRAG_DROP": "Drag and drop here to attach", + "START_AUDIO_RECORDING": "Start audio recording", + "STOP_AUDIO_RECORDING": "Stop audio recording", + "": "", + "EMAIL_HEAD": { + "TO": "TO", + "ADD_BCC": "Add bcc", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + }, + "BCC": { + "LABEL": "BCC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Undefined variables", + "MESSAGE": "You have {undefinedVariablesCount} undefined variables in your message: {undefinedVariables}. Would you like to send the message anyway?", + "CONFIRM": { + "YES": "보내기", + "CANCEL": "취소" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "개인 노트: 귀하와 귀하의 팀만 볼 수 있음", + "CHANGE_STATUS": "대화 상태가 변경됨", + "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_AGENT": "대화 담당자가 변경됨", + "CHANGE_AGENT_FAILED": "Assignee change failed", + "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", + "ASSIGN_LABEL_FAILED": "Label assignment failed", + "CHANGE_TEAM": "대화 담당자가 변경됨", + "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", + "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", + "MESSAGE_ERROR": "Unable to send this message, please try again later", + "SENT_BY": "보낸 사람:", + "BOT": "봇", + "SEND_FAILED": "Couldn't send message! Try again", + "TRY_AGAIN": "retry", + "ASSIGNMENT": { + "SELECT_AGENT": "에이전트 선택", + "REMOVE": "제거", + "ASSIGN": "할당하다" + }, + "CONTEXT_MENU": { + "COPY": "복사", + "REPLY_TO": "Reply to this message", + "DELETE": "삭제", + "CREATE_A_CANNED_RESPONSE": "Add to canned responses", + "TRANSLATE": "Translate", + "COPY_PERMALINK": "Copy link to the message", + "LINK_COPIED": "Message URL copied to the clipboard", + "DELETE_CONFIRMATION": { + "TITLE": "Are you sure you want to delete this message?", + "MESSAGE": "You cannot undo this action", + "DELETE": "삭제", + "CANCEL": "취소" + } + }, + "SIDEBAR": { + "CONTACT": "Contact", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "대화 내용 보내기", + "DESC": "지정된 이메일 주소로 대화 내용 사본 보내기", + "SUBMIT": "보내기", + "CANCEL": "취소", + "SEND_EMAIL_SUCCESS": "대화 내용이 성공적으로 전송됨", + "SEND_EMAIL_ERROR": "오류가 발생했습니다. 다시 시도하십시오.", + "FORM": { + "SEND_TO_CONTACT": "고객에게 대화기록 보내기", + "SEND_TO_AGENT": "할당된 에이전트로 스크립트 보내기", + "SEND_TO_OTHER_EMAIL_ADDRESS": "다른 이메일 주소로 대화기록 보내기", + "EMAIL": { + "PLACEHOLDER": "이메일 주소 입력", + "ERROR": "올바른 전자 메일 주소를 입력하십시오." + } + } + }, + "ONBOARDING": { + "TITLE": "안녕하세요 👋, {installationName}에 오신 것을 환영합니다!", + "DESCRIPTION": "Thanks for signing up. We want you to get the most out of {installationName}. Here are a few things you can do in {installationName} to make the experience delightful.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "최근 업데이트 내용 보기", + "ALL_CONVERSATION": { + "TITLE": "모든 대화를 한 곳에서", + "DESCRIPTION": "고객들과의 모든 대화를 하나의 대시보드에서 확인하세요. 대화들을 채널별, 라벨별, 상태별로 필터링 할 수 있습니다.", + "NEW_LINK": "클릭하여 받은 메시지함을 생성하세요." + }, + "TEAM_MEMBERS": { + "TITLE": "팀 구성원들을 초대하세요.", + "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.", + "NEW_LINK": "클릭하여 팀원을 초대하세요." + }, + "LABELS": { + "TITLE": "대화들을 라벨로 정리하기", + "DESCRIPTION": "라벨들은 대화들을 분류할 수 있는 쉬운 방법을 제공합니다. 예를 들면 #support-enquiry, #billing-question 등과 같은 라벨을 생성해서 나중에 대화할 때 사용할 수 있습니다.", + "NEW_LINK": "클릭하여 태그를 생성하세요." + }, + "CANNED_RESPONSES": { + "TITLE": "Create canned responses", + "DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.", + "NEW_LINK": "Click here to create a canned response" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "할당된 에이전트", + "SELF_ASSIGN": "Assign to me", + "TEAM_LABEL": "할당된 팀", + "SELECT": { + "PLACEHOLDER": "없음" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Contact Details", + "CONVERSATION_ACTIONS": "Conversation Actions", + "CONVERSATION_LABELS": "대화 라벨", + "CONVERSATION_INFO": "Conversation Information", + "CONTACT_NOTES": "Contact Notes", + "CONTACT_ATTRIBUTES": "Contact Attributes", + "PREVIOUS_CONVERSATION": "이전 대화", + "MACROS": "Macros", + "LINEAR_ISSUES": "Linked Linear Issues", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "보내는 중", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Create attribute", + "NO_RECORDS_FOUND": "No attributes found", + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "ADD": { + "TITLE": "추가하기", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "속성 추가하기", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + } + }, + "EMAIL_HEADER": { + "FROM": "From", + "TO": "~~에게", + "BCC": "Bcc", + "CC": "Cc", + "SUBJECT": "Subject", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Participating", + "SIDEBAR_TITLE": "Conversation participants", + "NO_RECORDS_FOUND": "검색 결과가 없습니다", + "ADD_PARTICIPANTS": "Select participants", + "REMANING_PARTICIPANTS_TEXT": "+{count} others", + "REMANING_PARTICIPANT_TEXT": "+{count} other", + "TOTAL_PARTICIPANTS_TEXT": "{count} people are participating.", + "TOTAL_PARTICIPANT_TEXT": "{count} person is participating.", + "NO_PARTICIPANTS_TEXT": "No one is participating!.", + "WATCH_CONVERSATION": "Join conversation", + "YOU_ARE_WATCHING": "You are participating", + "API": { + "ERROR_MESSAGE": "Could not update, try again!", + "SUCCESS_MESSAGE": "Participants updated!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "View translated content", + "DESC": "You can view the translated content in each langauge.", + "ORIGINAL_CONTENT": "Original Content", + "TRANSLATED_CONTENT": "Translated Content", + "NO_TRANSLATIONS_AVAILABLE": "No translations are available for this content" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/csatMgmt.json b/app/javascript/dashboard/i18n/locale/ko/csatMgmt.json new file mode 100644 index 0000000..9e16dc2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Rate your conversation", + "PLACEHOLDER": "Tell us more...", + "RATINGS": { + "POOR": "😞 Poor", + "FAIR": "😑 Fair", + "AVERAGE": "😐 Average", + "GOOD": "😀 Good", + "EXCELLENT": "😍 Excellent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/customRole.json b/app/javascript/dashboard/i18n/locale/ko/customRole.json new file mode 100644 index 0000000..0127b3a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Custom Roles", + "LEARN_MORE": "Learn more about custom roles", + "DESCRIPTION": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "HEADER_BTN_TXT": "Add custom role", + "LOADING": "Fetching custom roles...", + "SEARCH_404": "이 쿼리와 일치하는 항목이 없음.", + "PAYWALL": { + "TITLE": "Upgrade to create custom roles", + "AVAILABLE_ON": "The custom role feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The custom role feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Manage custom roles", + "DESC": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "TABLE_HEADER": { + "NAME": "이름", + "DESCRIPTION": "내용", + "PERMISSIONS": "Permissions", + "ACTIONS": "액션" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "이름", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "이름이 필요합니다." + }, + "DESCRIPTION": { + "LABEL": "내용", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "설명이 필요합니다." + }, + "PERMISSIONS": { + "LABEL": "Permissions", + "ERROR": "Permissions are required." + }, + "CANCEL_BUTTON_TEXT": "취소", + "API": { + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없습니다. 나중에 다시 시도해 주세요." + } + }, + "ADD": { + "TITLE": "Add custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "보내기", + "API": { + "SUCCESS_MESSAGE": "Custom role added successfully." + } + }, + "EDIT": { + "BUTTON_TEXT": "수정", + "TITLE": "Edit custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "업데이트", + "API": { + "SUCCESS_MESSAGE": "Custom role updated successfully." + } + }, + "DELETE": { + "BUTTON_TEXT": "삭제", + "API": { + "SUCCESS_MESSAGE": "Custom role deleted successfully.", + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없습니다. 나중에 다시 시도해 주세요." + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "삭제하시겠습니까? ", + "YES": "예, 삭제합니다. ", + "NO": "아니요, 유지합니다 " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/datePicker.json b/app/javascript/dashboard/i18n/locale/ko/datePicker.json new file mode 100644 index 0000000..03ba717 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Apply", + "CLEAR_BUTTON": "Clear", + "DATE_RANGE_INPUT": { + "START": "Start Date", + "END": "End Date" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "DATE RANGE", + "LAST_7_DAYS": "지난 7일", + "LAST_30_DAYS": "지난 30일", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_RANGE": "Custom date range" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/emoji.json b/app/javascript/dashboard/i18n/locale/ko/emoji.json new file mode 100644 index 0000000..252031c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Search emojis", + "NOT_FOUND": "No emoji match your search", + "REMOVE": "제거" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/general.json b/app/javascript/dashboard/i18n/locale/ko/general.json new file mode 100644 index 0000000..78f581d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Showing {firstIndex}-{lastIndex} of {totalCount} items", + "PHONE_INPUT": { + "PLACEHOLDER": "검색", + "EMPTY_STATE": "검색 결과가 없습니다" + }, + "CLOSE": "닫기", + "BETA": "Beta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/generalSettings.json b/app/javascript/dashboard/i18n/locale/ko/generalSettings.json new file mode 100644 index 0000000..3b93158 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.", + "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.", + "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.", + "NON_ADMIN": "Please contact your administrator to upgrade the plan and continue using all features." + }, + "TITLE": "계정 설정", + "SUBMIT": "설정 업데이트", + "BACK": "뒤로", + "DISMISS": "Dismiss", + "UPDATE": { + "ERROR": "설정을 업데이트할 수 없습니다, 다시 시도하십시오!", + "SUCCESS": "계정 설정이 성공적으로 업데이트됨" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Delete your Account", + "NOTE": "Once you delete your account, all your data will be deleted.", + "BUTTON_TEXT": "Delete Your Account", + "CONFIRM": { + "TITLE": "Delete Account", + "MESSAGE": "Deleting your Account is irreversible. Enter your account name below to confirm you want to permanently delete it.", + "BUTTON_TEXT": "삭제", + "DISMISS": "취소", + "PLACE_HOLDER": "Please type {accountName} to confirm" + }, + "SUCCESS": "Account marked for deletion", + "FAILURE": "Could not delete account, try again!", + "SCHEDULED_DELETION": { + "TITLE": "Account Scheduled for Deletion", + "MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.", + "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.", + "CLEAR_BUTTON": "Cancel Scheduled Deletion" + } + }, + "FORM": { + "ERROR": "양식 오류를 수정하십시오.", + "GENERAL_SECTION": { + "TITLE": "일반 설정", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "Account ID", + "NOTE": "This ID is required if you are building an API based integration" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.", + "DURATION": { + "LABEL": "Inactivity duration", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Preferences", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "계정 이름", + "PLACEHOLDER": "당신의 계정 이름", + "ERROR": "올바른 계정 이름을 입력하십시오." + }, + "LANGUAGE": { + "LABEL": "Site language", + "PLACEHOLDER": "당신의 계정 이름", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "수신 이메일 도메인", + "PLACEHOLDER": "이메일을 수신할 도메인", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "이메일 지원", + "PLACEHOLDER": "회사 지원 이메일", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclude unattended conversations", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a conversation should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "업데이트", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "계정에 대해 이메일을 통한 대화 연속성이 활성화되었습니다.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "지금 사용자 지정 도메인에서 이메일을 받을 수 있다." + } + }, + "UPDATE_CHATWOOT": "Chatwoot에 대한 {latestChatwootVersion} 업데이트를 사용할 수 있습니다. 인스턴스를 업데이트하십시오.", + "LEARN_MORE": "Learn more", + "PAYMENT_PENDING": "Your payment is pending. Please update your payment information to continue using Chatwoot", + "UPGRADE": "Upgrade to continue using Chatwoot", + "LIMITS_UPGRADE": "Your account has exceeded the usage limits, please upgrade your plan to continue using Chatwoot", + "OPEN_BILLING": "Open billing" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "선택하려면 Enter 키를 누르십시오.", + "ENTER_TO_REMOVE": "제거하려면 Enter 키를 누르십시오.", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "하나 선택", + "SELECT": "Select" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "알림", + "MARK_ALL_DONE": "모두 완료 표시", + "DELETE_TITLE": "deleted", + "UNREAD_NOTIFICATION": { + "TITLE": "Unread Notifications", + "ALL_NOTIFICATIONS": "View all notifications", + "LOADING_UNREAD_MESSAGE": "Loading unread notifications...", + "EMPTY_MESSAGE": "You have no unread notifications" + }, + "LIST": { + "LOADING_MESSAGE": "알림을 불러오는 중...", + "404": "알림 없음", + "TABLE_HEADER": [ + "이름", + "전화 번호", + "대화", + "마지막으로 연락한 사람" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "새 대화", + "conversation_assignment": "대화 할당됨", + "assigned_conversation_new_message": "새 메시지", + "participating_conversation_new_message": "새 메시지", + "conversation_mention": "멘션", + "sla_missed_first_response": "SLA Missed", + "sla_missed_next_response": "SLA Missed", + "sla_missed_resolution": "SLA Missed" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "오프라인", + "RECONNECTING": "Reconnecting...", + "RECONNECT_SUCCESS": "Reconnected" + }, + "BUTTON": { + "REFRESH": "Refresh" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Search or jump to", + "SECTIONS": { + "GENERAL": "General", + "REPORTS": "보고서", + "CONVERSATION": "Conversation", + "BULK_ACTIONS": "Bulk Actions", + "CHANGE_ASSIGNEE": "Change Assignee", + "CHANGE_PRIORITY": "Change Priority", + "CHANGE_TEAM": "Change Team", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "ADD_LABEL": "Add label to the conversation", + "REMOVE_LABEL": "Remove label from the conversation", + "SETTINGS": "설정", + "AI_ASSIST": "AI Assist", + "APPEARANCE": "Appearance", + "SNOOZE_NOTIFICATION": "Snooze Notification" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview", + "GO_TO_CONVERSATION_REPORTS": "Go to Conversation Reports", + "GO_TO_AGENT_REPORTS": "Go to Agent Reports", + "GO_TO_LABEL_REPORTS": "Go to Label Reports", + "GO_TO_INBOX_REPORTS": "Go to Inbox Reports", + "GO_TO_TEAM_REPORTS": "Go to Team Reports", + "GO_TO_SETTINGS_AGENTS": "Go to Agent Settings", + "GO_TO_SETTINGS_TEAMS": "Go to Team Settings", + "GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings", + "GO_TO_SETTINGS_LABELS": "Go to Label Settings", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings", + "GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings", + "GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings", + "GO_TO_SETTINGS_PROFILE": "Go to Profile Settings", + "GO_TO_NOTIFICATIONS": "Go to Notifications", + "ADD_LABELS_TO_CONVERSATION": "Add label to the conversation", + "ASSIGN_AN_AGENT": "Assign an agent", + "AI_ASSIST": "AI Assist", + "ASSIGN_PRIORITY": "Assign priority", + "ASSIGN_A_TEAM": "Assign a team", + "MUTE_CONVERSATION": "Mute conversation", + "UNMUTE_CONVERSATION": "Unmute conversation", + "REMOVE_LABEL_FROM_CONVERSATION": "Remove label from the conversation", + "REOPEN_CONVERSATION": "Reopen conversation", + "RESOLVE_CONVERSATION": "Resolve conversation", + "SEND_TRANSCRIPT": "Send an email transcript", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "UNTIL_NEXT_REPLY": "Until next reply", + "UNTIL_NEXT_WEEK": "Until next week", + "UNTIL_TOMORROW": "Until tomorrow", + "UNTIL_NEXT_MONTH": "Until next month", + "AN_HOUR_FROM_NOW": "Until an hour from now", + "UNTIL_CUSTOM_TIME": "Custom...", + "CHANGE_APPEARANCE": "Change Appearance", + "LIGHT_MODE": "Light", + "DARK_MODE": "Dark", + "SYSTEM_MODE": "System", + "SNOOZE_NOTIFICATION": "Snooze Notification" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Loading Dashboard App..." + }, + "COMMON": { + "OR": "Or", + "CLICK_HERE": "여기를 클릭하세요" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/helpCenter.json b/app/javascript/dashboard/i18n/locale/ko/helpCenter.json new file mode 100644 index 0000000..2ed7e88 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Help Center", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "Create Portal" + }, + "HEADER": { + "FILTER": "Filter by", + "SORT": "Sort by", + "LOCALE": "Locale", + "SETTINGS_BUTTON": "설정", + "NEW_BUTTON": "New Article", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Published", + "DRAFT": "Draft", + "ARCHIVED": "Archived" + }, + "TITLES": { + "ALL_ARTICLES": "All Articles", + "MINE": "My Articles", + "DRAFT": "Draft Articles", + "ARCHIVED": "Archived Articles" + }, + "LOCALE_SELECT": { + "TITLE": "Select locale", + "PLACEHOLDER": "Select locale", + "NO_RESULT": "No locale found", + "SEARCH_PLACEHOLDER": "Search locale" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "All Articles", + "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", + "PREVIEW": "Preview", + "ADD_TRANSLATION": "Add translation", + "OPEN_SIDEBAR": "Open sidebar", + "CLOSE_SIDEBAR": "Close sidebar", + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "이미지 업로드", + "UPLOADING": "업로드 중...", + "SUCCESS": "Image uploaded successfully", + "ERROR": "Error while uploading image", + "UN_AUTHORIZED_ERROR": "You are not authorized to upload images", + "ERROR_FILE_SIZE": "Image size should be less than {size}MB", + "ERROR_FILE_FORMAT": "Image format should be jpg, jpeg or png", + "ERROR_FILE_DIMENSIONS": "Image dimensions should be less than 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Article Settings", + "FORM": { + "CATEGORY": { + "LABEL": "Category", + "TITLE": "Select category", + "PLACEHOLDER": "Select category", + "NO_RESULT": "No category found", + "SEARCH_PLACEHOLDER": "Search category" + }, + "AUTHOR": { + "LABEL": "Author", + "TITLE": "Select author", + "PLACEHOLDER": "Select author", + "NO_RESULT": "No authors found", + "SEARCH_PLACEHOLDER": "Search author" + }, + "META_TITLE": { + "LABEL": "Meta title", + "PLACEHOLDER": "Add a meta title" + }, + "META_DESCRIPTION": { + "LABEL": "Meta description", + "PLACEHOLDER": "Add your meta description for better SEO results..." + }, + "META_TAGS": { + "LABEL": "Meta tags", + "PLACEHOLDER": "Add meta tags separated by comma..." + } + }, + "BUTTONS": { + "ARCHIVE": "Archive article", + "DELETE": "Delete article" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Uncategorized", + "SEARCH_RESULTS": "Search results for {query}", + "EMPTY_TEXT": "Search for articles to insert into replies.", + "SEARCH_LOADER": "검색중...", + "INSERT_ARTICLE": "Insert", + "NO_RESULT": "No articles found", + "COPY_LINK": "Copy article link to clipboard", + "OPEN_LINK": "Open article in new tab", + "PREVIEW_LINK": "Preview article" + }, + "PORTAL": { + "HEADER": "Portals", + "DEFAULT": "Default", + "NEW_BUTTON": "New Portal", + "ACTIVE_BADGE": "active", + "CHOOSE_LOCALE_LABEL": "Choose a locale", + "LOADING_MESSAGE": "Loading portals...", + "ARTICLES_LABEL": "articles", + "NO_PORTALS_MESSAGE": "There are no available portals", + "ADD_NEW_LOCALE": "Add a new locale", + "POPOVER": { + "TITLE": "Portals", + "PORTAL_SETTINGS": "Portal settings", + "SUBTITLE": "You have multiple portals and can have different locales for each portal.", + "CANCEL_BUTTON_LABEL": "취소", + "CHOOSE_LOCALE_BUTTON": "Choose Locale" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "articles", + "ADD": "Add locale", + "VISIT": "Visit site", + "SETTINGS": "설정", + "DELETE": "삭제" + }, + "PORTAL_CONFIG": { + "TITLE": "Portal Configurations", + "ITEMS": { + "NAME": "이름", + "DOMAIN": "Custom domain", + "SLUG": "Slug", + "TITLE": "Portal title", + "THEME": "Theme color", + "SUB_TEXT": "Portal sub text" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Available locales", + "TABLE": { + "NAME": "Locale name", + "CODE": "Locale code", + "ARTICLE_COUNT": "No. of articles", + "CATEGORIES": "No. of categories", + "SWAP": "Swap", + "DELETE": "삭제", + "DEFAULT_LOCALE": "Default" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "이름", + "DESCRIPTION": "내용", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Help center information", + "BODY": "Basic information about portal" + }, + "CUSTOMIZATION": { + "TITLE": "Help center customization", + "BODY": "Customize portal" + }, + "FINISH": { + "TITLE": "Voila! 🎉", + "BODY": "You're all set!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "뒤로", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Create Portal", + "TITLE": "Help center information", + "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Portal customisation", + "TITLE": "Help center customization", + "UPDATE_PORTAL_BUTTON": "Update portal settings" + }, + "FINISH_PAGE": { + "TITLE": "Voila!🎉 You're all set up!", + "MESSAGE": "You can now see this created portal on your all portals page.", + "FINISH": "Go to all portals page" + } + }, + "LOGO": { + "LABEL": "Logo", + "UPLOAD_BUTTON": "Upload logo", + "HELP_TEXT": "This logo will be displayed on the portal header.", + "IMAGE_UPLOAD_SUCCESS": "Logo uploaded successfully", + "IMAGE_UPLOAD_ERROR": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Error while deleting logo" + }, + "NAME": { + "LABEL": "이름", + "PLACEHOLDER": "Portal name", + "HELP_TEXT": "The name will be used in the public facing portal internally.", + "ERROR": "이름이 필요합니다" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug for urls", + "ERROR": "Slug is required" + }, + "DOMAIN": { + "LABEL": "Custom Domain", + "PLACEHOLDER": "Portal custom domain", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}", + "ERROR": "Enter a valid domain URL" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home Page Link", + "PLACEHOLDER": "Portal home page link", + "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}", + "ERROR": "Enter a valid home page URL" + }, + "THEME_COLOR": { + "LABEL": "Portal theme color", + "HELP_TEXT": "This color will show as the theme color for the portal." + }, + "PAGE_TITLE": { + "LABEL": "Page Title", + "PLACEHOLDER": "Portal page title", + "HELP_TEXT": "The page title will be used in the public facing portal.", + "ERROR": "Page title is required" + }, + "HEADER_TEXT": { + "LABEL": "Header Text", + "PLACEHOLDER": "Portal header text", + "HELP_TEXT": "The Portal header text will be used in the public facing portal.", + "ERROR": "Portal header text is required" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", + "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", + "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "취소" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Loading articles...", + "404": "No articles matches your search 🔍", + "NO_ARTICLES": "There are no available articles", + "HEADERS": { + "TITLE": "Title", + "CATEGORY": "Category", + "READ_COUNT": "Views", + "STATUS": "상태", + "LAST_EDITED": "Last edited" + }, + "COLUMNS": { + "BY": "by", + "AUTHOR_NOT_AVAILABLE": "Author is not available" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Loading article...", + "TITLE_PLACEHOLDER": "Article title goes here", + "CONTENT_PLACEHOLDER": "Write your article here", + "API": { + "ERROR": "Error while saving article" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article published successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Error while drafting article", + "SUCCESS": "Article drafted successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "삭제 확인", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Yes, Delete", + "NO": "아니요, 유지합니다." + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Search for articles" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Create a category", + "SUB_TITLE": "The category will be used in the public facing portal to categorize articles.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "이름", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "이름이 필요합니다" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "내용", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "설명이 필요합니다" + }, + "BUTTONS": { + "CREATE": "Create category", + "CANCEL": "취소" + }, + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "이름", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "이름이 필요합니다" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "내용", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "설명이 필요합니다" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "취소" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Search articles", + "PLACEHOLDER": "Search articles", + "NO_RESULT": "No articles found", + "SEARCHING": "검색중...", + "SEARCH_BUTTON": "검색", + "INSERT_ARTICLE": "Insert link", + "IFRAME_ERROR": "URL is empty or invalid. Unable to display content.", + "OPEN_ARTICLE_SEARCH": "Insert article from Help Center", + "SUCCESS_ARTICLE_INSERTED": "Article inserted successfully", + "PREVIEW_LINK": "Preview article", + "CANCEL": "닫기", + "BACK": "뒤로", + "BACK_RESULTS": "Back to results" + }, + "UPGRADE_PAGE": { + "TITLE": "Help Center", + "DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Upgrade your subscription to enable this feature.", + "SELF_HOSTED_DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Please contact your administrator to enable this feature.", + "BUTTON": { + "LEARN_MORE": "Learn more", + "UPGRADE": "Upgrade" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Multiple portals", + "DESCRIPTION": "Create multiple help center portals for different products using the same account." + }, + "LOCALES": { + "TITLE": "Full support for locales", + "DESCRIPTION": "Localize the portal in your language. We support all locales and allow translations for every article." + }, + "SEO": { + "TITLE": "SEO-friendly design", + "DESCRIPTION": "Customize your meta tags to improve your visibility on search engines with our SEO-friendly pages." + }, + "API": { + "TITLE": "Full API support", + "DESCRIPTION": "Use the portal as a headless CMS with third party front-end frameworks using our APIs." + } + } + }, + "LOADING": "Loading...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} view | {count} views", + "DROPDOWN_MENU": { + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "DELETE": "삭제" + }, + "STATUS": { + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "UNCATEGORISED": "Uncategorised" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "All articles", + "MINE": "나에게 할당", + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "ALL": "All categories" + }, + "LOCALE": { + "ALL": "All locales" + }, + "NEW_ARTICLE": "New article" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Write an article", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "New article" + }, + "MINE": { + "TITLE": "You haven't written any articles here", + "SUBTITLE": "All articles written by you show up here for quick access." + }, + "DRAFT": { + "TITLE": "There are no articles in drafts", + "SUBTITLE": "Draft articles will appear here" + }, + "PUBLISHED": { + "TITLE": "There are no published articles", + "SUBTITLE": "Published articles will appear here" + }, + "ARCHIVED": { + "TITLE": "There are no articles in the archive", + "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages" + }, + "CATEGORY": { + "TITLE": "There are no articles in this category", + "SUBTITLE": "Articles in this category will appear here" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "New category", + "EDIT_CATEGORY": "Edit category", + "CATEGORIES_COUNT": "{n} category | {n} categories", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categories ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "No categories found", + "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + }, + "HEADER": { + "CREATE": "Create category", + "EDIT": "Edit category", + "DESCRIPTION": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale" + }, + "FORM": { + "NAME": { + "LABEL": "이름", + "PLACEHOLDER": "Category name", + "ERROR": "이름이 필요합니다" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "ERROR": "Slug is required", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "내용", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "설명이 필요합니다" + } + }, + "BUTTONS": { + "CREATE": "만들기", + "EDIT": "업데이트", + "CANCEL": "취소" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "No locales available | {n} locale | {n} locales", + "NEW_LOCALE_BUTTON_TEXT": "New locale", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles", + "CATEGORIES_COUNT": "{count} category | {count} categories", + "DEFAULT": "Default", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Make default", + "DELETE": "삭제" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Add a new locale", + "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", + "COMBOBOX": { + "PLACEHOLDER": "Select locale..." + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "PREVIEW": "Preview", + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "BACK_TO_ARTICLES": "Back to articles" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "More properties", + "UNCATEGORIZED": "카테고리가 지정되지 않음", + "EDITOR_PLACEHOLDER": "Write something..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Article properties", + "META_DESCRIPTION": "Meta description", + "META_DESCRIPTION_PLACEHOLDER": "Add meta description", + "META_TITLE": "Meta title", + "META_TITLE_PLACEHOLDER": "Add meta title", + "META_TAGS": "Meta tags", + "META_TAGS_PLACEHOLDER": "Add meta tags" + }, + "API": { + "ERROR": "Error while saving article" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "New portal", + "PORTALS": "Portals", + "CREATE_PORTAL": "Create and manage multiple portals", + "ARTICLES": "게시물", + "DOMAIN": "domain", + "PORTAL_NAME": "Portal name" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Create new portal", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "만들기", + "NAME": { + "LABEL": "이름", + "PLACEHOLDER": "User Guide | Chatwoot", + "MESSAGE": "Choose an name for your portal.", + "ERROR": "이름이 필요합니다" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Slug is required", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logo", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo", + "IMAGE_DELETE_SUCCESS": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Unable to delete logo", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "NAME": { + "LABEL": "이름", + "PLACEHOLDER": "Portal name", + "ERROR": "이름이 필요합니다" + }, + "HEADER_TEXT": { + "LABEL": "Header text", + "PLACEHOLDER": "Portal header text" + }, + "PAGE_TITLE": { + "LABEL": "Page title", + "PLACEHOLDER": "Portal page title" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home page link", + "PLACEHOLDER": "Portal home page link", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Live chat widget", + "PLACEHOLDER": "Select live chat widget", + "HELP_TEXT": "Select a live chat widget that will appear on your help center", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Brand color" + }, + "SAVE_CHANGES": "Save changes" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Custom domain", + "LABEL": "Custom domain:", + "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Portal custom domain", + "EDIT_BUTTON": "수정", + "ADD_BUTTON": "Add custom domain", + "STATUS": { + "LIVE": "Live", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Add custom domain", + "EDIT_HEADER": "Edit custom domain", + "ADD_CONFIRM_BUTTON_LABEL": "Add domain", + "EDIT_CONFIRM_BUTTON_LABEL": "Update domain", + "LABEL": "Custom domain", + "PLACEHOLDER": "Portal custom domain", + "ERROR": "Custom domain is required", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS configuration", + "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "보내기" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Delete {portalName}", + "HEADER": "Delete portal", + "DESCRIPTION": "Permanently delete this portal. This action is irreversible", + "DIALOG": { + "HEADER": "Sure you want to delete {portalName}?", + "DESCRIPTION": "This is a permanent action that cannot be reversed.", + "CONFIRM_BUTTON_LABEL": "삭제" + } + }, + "EDIT_CONFIGURATION": "Edit configuration" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal created successfully", + "ERROR_MESSAGE": "Unable to create portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal updated successfully", + "ERROR_MESSAGE": "Unable to update portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "업로드 중...", + "UPLOAD": "Upload & Process", + "CANCEL": "취소", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Generating...", + "CONFIRM_DELETE": "Are you sure you want to delete {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Completed", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/inbox.json b/app/javascript/dashboard/i18n/locale/ko/inbox.json new file mode 100644 index 0000000..dc5c047 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "My Inbox", + "DISPLAY_DROPDOWN": "Display", + "LOADING": "Fetching notifications", + "404": "There are no active notifications in this group.", + "NO_NOTIFICATIONS": "No notifications", + "NOTE": "Notifications from all subscribed inboxes", + "NO_MESSAGES_AVAILABLE": "Oops! Not able to fetch messages", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week" + }, + "ACTION_HEADER": { + "SNOOZE": "Snooze notification", + "DELETE": "Delete notification", + "BACK": "뒤로" + }, + "TYPES": { + "CONVERSATION_MENTION": "You have been mentioned in a conversation", + "CONVERSATION_CREATION": "New conversation created", + "CONVERSATION_ASSIGNMENT": "A conversation has been assigned to you", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message in a conversation you are participating in", + "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation", + "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation", + "SLA_MISSED_RESOLUTION": "SLA target resolution missed for conversation" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Mentioned", + "CONVERSATION_ASSIGNMENT": "Assigned to you", + "CONVERSATION_CREATION": "New Conversation", + "SLA_MISSED_FIRST_RESPONSE": "SLA breach", + "SLA_MISSED_NEXT_RESPONSE": "SLA breach", + "SLA_MISSED_RESOLUTION": "SLA breach", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "새 메시지", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "새 메시지", + "SNOOZED_UNTIL": "Snoozed for {time}", + "SNOOZED_ENDS": "Snooze ended" + }, + "NO_CONTENT": "콘텐츠 이용 불가", + "MENU_ITEM": { + "MARK_AS_READ": "Mark as read", + "MARK_AS_UNREAD": "Mark as unread", + "SNOOZE": "Snooze", + "DELETE": "삭제", + "MARK_ALL_READ": "전부 읽음으로 바꾸기", + "DELETE_ALL": "Delete all", + "DELETE_ALL_READ": "Delete all read" + }, + "DISPLAY_MENU": { + "SORT": "Sort", + "DISPLAY": "Display :", + "SORT_OPTIONS": { + "NEWEST": "Newest", + "OLDEST": "Oldest", + "PRIORITY": "Priority" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "일시 중지됨", + "READ": "읽기", + "LABELS": "라벨", + "CONVERSATION_ID": "Conversation ID" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notification marked as read", + "MARK_AS_UNREAD": "Notification marked as unread", + "SNOOZE": "Notification snoozed", + "DELETE": "Notification deleted", + "MARK_ALL_READ": "All notifications marked as read", + "DELETE_ALL": "All notifications deleted", + "DELETE_ALL_READ": "All read notifications deleted" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json new file mode 100644 index 0000000..9e6ec80 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "받은 메시지함", + "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.", + "LEARN_MORE": "Learn more about inboxes", + "RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.", + "CLICK_TO_RECONNECT": "Click here to reconnect.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "이 계정에는 첨부된 받은 메시지함이 없습니다." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "채널 선택", + "BODY": "Chatwoot와 통합할 공급자를 선택하십시오." + }, + "INBOX": { + "TITLE": "받은 메시지함 만들기", + "BODY": "계정을 인증하고 받은 메시지함을 만드십시오." + }, + "AGENT": { + "TITLE": "에이전트 추가", + "BODY": "생성된 받은 메시지함에 에이전트를 추가하십시오." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "준비가 완료되었습니다." + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "받은 메시지함 이름", + "PLACEHOLDER": "Enter your inbox name (eg: Acme Inc)", + "ERROR": "Please enter a valid inbox name" + }, + "WEBSITE_NAME": { + "LABEL": "웹사이트 이름", + "PLACEHOLDER": "웹사이트 이름 입력 (예: Acme Inc)" + }, + "FB": { + "HELP": "추신: 로그인을 함으로써, 우리는 오직 당신의 페이지의 메시지에 접근할 수 있다. 당신의 사적인 메시지에 Chatwoot는 절대 접근할 수 없습니다.", + "CHOOSE_PAGE": "페이지 선택", + "CHOOSE_PLACEHOLDER": "목록에서 페이지 선택", + "INBOX_NAME": "받은 메시지함 이름", + "ADD_NAME": "받은 메시지함의 이름 추가", + "PICK_NAME": "Pick a Name for your Inbox", + "PICK_A_VALUE": "값 선택", + "CREATE_INBOX": "받은 메시지함 만들기" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continue with Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile", + "HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ", + "ERROR_MESSAGE": "There was an error connecting to Instagram, please try again", + "ERROR_AUTH": "There was an error connecting to Instagram, please try again", + "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "트위터 프로필을 채널로 추가하려면 '트위터로 로그인'을 클릭하여 트위터 프로필을 인증해야 합니다. ", + "ERROR_MESSAGE": "트위터에 연결하는 동안 오류가 발생했습니다. 다시 시도해주세요.", + "TWEETS": { + "ENABLE": "Create conversations from mentioned Tweets" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "웹사이트 채널", + "DESC": "웹사이트를 위한 채널을 만들고 웹사이트 위젯을 통해 고객 지원을 시작하십시오.", + "LOADING_MESSAGE": "웹사이트 지원 채널 만들기", + "CHANNEL_AVATAR": { + "LABEL": "채널 아바타" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "웹훅 URL", + "PLACEHOLDER": "Please enter your Webhook URL", + "ERROR": "올바른 URL을 입력하십시오." + }, + "CHANNEL_DOMAIN": { + "LABEL": "웹사이트 도메인", + "PLACEHOLDER": "웹사이트 도메인을 입력하십시오 (예: acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "헤드라인 입력", + "PLACEHOLDER": "안녕하세요!" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "태그라인 입력", + "PLACEHOLDER": "우리는 간단하게 우리와 연결되도록 합니다. 우리에게 무엇이든 물어보거나 피드백을 공유하십시오." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "채널 인사말 메시지", + "PLACEHOLDER": "Acme Inc. 는 일반적으로 몇 시간 후에 회신합니다." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "채널 인사말 사용", + "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", + "ENABLED": "사용함", + "DISABLED": "사용 안 함" + }, + "REPLY_TIME": { + "TITLE": "응답 시간 설정", + "IN_A_FEW_MINUTES": "몇 분 후에", + "IN_A_FEW_HOURS": "몇 시간 안에", + "IN_A_DAY": "며칠 안에", + "HELP_TEXT": "이 응답 시간은 라이브 채팅 위젯에 표시됨" + }, + "WIDGET_COLOR": { + "LABEL": "위젯 색깔", + "PLACEHOLDER": "위젯에 사용된 위젯 색상 업데이트" + }, + "SUBMIT_BUTTON": "받은 메시지함 만들기", + "API": { + "ERROR_MESSAGE": "We were not able to create a website channel, please try again" + } + }, + "TWILIO": { + "TITLE": "Twilio SMS/WhatsApp Channel", + "DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "계정 SID", + "PLACEHOLDER": "Twilio 계정 SID를 입력하십시오.", + "ERROR": "해당 입력란은 필수 입력 사항입니다." + }, + "API_KEY": { + "USE_API_KEY": "Use API Key Authentication", + "LABEL": "API Key SID", + "PLACEHOLDER": "Please enter your API Key SID", + "ERROR": "해당 입력란은 필수 입력 사항입니다." + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Please enter your API Key Secret", + "ERROR": "해당 입력란은 필수 입력 사항입니다." + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "Messaging Service SID", + "PLACEHOLDER": "Please enter your Twilio Messaging Service SID", + "ERROR": "해당 입력란은 필수 입력 사항입니다.", + "USE_MESSAGING_SERVICE": "Use a Twilio Messaging Service" + }, + "CHANNEL_TYPE": { + "LABEL": "채널 유형", + "ERROR": "채널 유형을 선택하십시오." + }, + "AUTH_TOKEN": { + "LABEL": "인증 토큰", + "PLACEHOLDER": "Twilio Auth 토큰을 입력하십시오.", + "ERROR": "해당 입력란은 필수 입력 사항입니다." + }, + "CHANNEL_NAME": { + "LABEL": "받은 메시지함 이름", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "해당 입력란은 필수 입력 사항입니다." + }, + "PHONE_NUMBER": { + "LABEL": "전화 번호", + "PLACEHOLDER": "메시지를 보낼 전화 번호를 입력하십시오.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "API_CALLBACK": { + "TITLE": "콜백 URL", + "SUBTITLE": "여기에 설치된 URL로 Twilio에서 메시지 콜백 URL을 구성해야 합니다." + }, + "SUBMIT_BUTTON": "Twilio 채널 만들기", + "API": { + "ERROR_MESSAGE": "Twilio 자격 증명을 인증할 수 없습니다. 다시 시도하십시오." + } + }, + "SMS": { + "TITLE": "SMS Channel", + "DESC": "Start supporting your customers via SMS.", + "PROVIDERS": { + "LABEL": "API Provider", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandwidth" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the SMS channel" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "Account ID", + "PLACEHOLDER": "Please enter your Bandwidth Account ID", + "ERROR": "해당 입력란은 필수 입력 사항입니다." + }, + "API_KEY": { + "LABEL": "API Key", + "PLACEHOLDER": "Please enter your Bandwidth API Key", + "ERROR": "해당 입력란은 필수 입력 사항입니다." + }, + "API_SECRET": { + "LABEL": "API Secret", + "PLACEHOLDER": "Please enter your Bandwidth API Secret", + "ERROR": "해당 입력란은 필수 입력 사항입니다." + }, + "APPLICATION_ID": { + "LABEL": "Application ID", + "PLACEHOLDER": "Please enter your Bandwidth Application ID", + "ERROR": "해당 입력란은 필수 입력 사항입니다." + }, + "INBOX_NAME": { + "LABEL": "받은 메시지함 이름", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "해당 입력란은 필수 입력 사항입니다." + }, + "PHONE_NUMBER": { + "LABEL": "휴대폰 번호", + "PLACEHOLDER": "메시지를 보낼 전화 번호를 입력하십시오.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "SUBMIT_BUTTON": "Create Bandwidth Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Bandwidth credentials, please try again" + }, + "API_CALLBACK": { + "TITLE": "콜백 URL", + "SUBTITLE": "You have to configure the message callback URL in Bandwidth with the URL mentioned here." + } + } + }, + "WHATSAPP": { + "TITLE": "WhatsApp Channel", + "DESC": "Start supporting your customers via WhatsApp.", + "PROVIDERS": { + "LABEL": "API Provider", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "받은 메시지함 이름", + "PLACEHOLDER": "Please enter an inbox name", + "ERROR": "해당 입력란은 필수 입력 사항입니다." + }, + "PHONE_NUMBER": { + "LABEL": "휴대폰 번호", + "PLACEHOLDER": "메시지를 보낼 전화 번호를 입력하십시오.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "PHONE_NUMBER_ID": { + "LABEL": "Phone number ID", + "PLACEHOLDER": "Please enter the Phone number ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "Business Account ID", + "PLACEHOLDER": "Please enter the Business Account ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook Verify Token", + "PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.", + "ERROR": "Please enter a valid value." + }, + "API_KEY": { + "LABEL": "API key", + "SUBTITLE": "Configure the WhatsApp API key.", + "PLACEHOLDER": "API key", + "ERROR": "Please enter a valid value." + }, + "API_CALLBACK": { + "TITLE": "콜백 URL", + "SUBTITLE": "You have to configure the webhook URL and the verification token in the Facebook Developer portal with the values shown below.", + "WEBHOOK_URL": "웹훅 URL", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook Verification Token" + }, + "SUBMIT_BUTTON": "Create WhatsApp Channel", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "전화 번호", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "계정 SID", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "인증 토큰", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "API Key SID", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "API 채널", + "DESC": "API 채널과 통합하여 고객 지원을 시작하십시오.", + "CHANNEL_NAME": { + "LABEL": "채널 이름", + "PLACEHOLDER": "채널 이름을 입력하십시오.", + "ERROR": "해당 입력란은 필수 입력 사항입니다." + }, + "WEBHOOK_URL": { + "LABEL": "웹훅 URL", + "SUBTITLE": "Configure the URL where you want to receive callbacks on events.", + "PLACEHOLDER": "웹훅 URL" + }, + "SUBMIT_BUTTON": "API 채널 만들기", + "API": { + "ERROR_MESSAGE": "우리는 API 채널을 저장할 수 없습니다." + } + }, + "EMAIL_CHANNEL": { + "TITLE": "이메일 채널", + "DESC": "Integrate your email inbox.", + "CHANNEL_NAME": { + "LABEL": "채널 이름", + "PLACEHOLDER": "채널 이름을 입력하십시오.", + "ERROR": "해당 입력란은 필수 입력 사항입니다." + }, + "EMAIL": { + "LABEL": "이메일", + "SUBTITLE": "고객이 지원 티켓을 보내는 이메일", + "PLACEHOLDER": "이메일" + }, + "SUBMIT_BUTTON": "이메일 채널 만들기", + "API": { + "ERROR_MESSAGE": "이메일 채널을 저장할 수 없습니다." + }, + "FINISH_MESSAGE": "당신의 이메일 주소로 이메일 전달을 시작하십시오.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "여기를 클릭하세요", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "LINE Channel", + "DESC": "Integrate with LINE channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "채널 이름", + "PLACEHOLDER": "채널 이름을 입력하십시오.", + "ERROR": "해당 입력란은 필수 입력 사항입니다." + }, + "LINE_CHANNEL_ID": { + "LABEL": "LINE Channel ID", + "PLACEHOLDER": "LINE Channel ID" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "LINE Channel Secret", + "PLACEHOLDER": "LINE Channel Secret" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "LINE Channel Token", + "PLACEHOLDER": "LINE Channel Token" + }, + "SUBMIT_BUTTON": "Create LINE Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the LINE channel" + }, + "API_CALLBACK": { + "TITLE": "콜백 URL", + "SUBTITLE": "You have to configure the webhook URL in LINE application with the URL mentioned here." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Telegram Channel", + "DESC": "Integrate with Telegram channel and start supporting your customers.", + "BOT_TOKEN": { + "LABEL": "Bot Token", + "SUBTITLE": "Configure the bot token you have obtained from Telegram BotFather.", + "PLACEHOLDER": "Bot Token" + }, + "SUBMIT_BUTTON": "Create Telegram Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the telegram channel" + } + }, + "AUTH": { + "TITLE": "Choose a channel", + "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "홈페이지", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "페이스북", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "이메일", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "에이전트", + "DESC": "여기서 에이전트를 추가하여 새로 만든 받은 메시지함을 관리할 수 있습니다. 선택된 에이전트만 받은 메시지함에 엑세스할 수 있습니다. 해당 받은 메시지함에 선택되지 않은 에이전트는 메시지를 보거나 응답할 수 없습니다.라벨
라벨은 대화를 분류하고 우선순위를 정하는 데 도움이 된다. 사이드패널에서 대화에 라벨을 할당할 수 있다.
라벨은 계정에 연결되며 조직에서 사용자 정의 워크플로우를 만드는 데 사용할 수 있다. 라벨에 사용자 정의 색상을 지정할 수 있으며, 라벨을 쉽게 식별할 수 있다. 사이드바에 라벨을 표시하여 대화를 쉽게 필터링할 수 있다.
", + "LIST": { + "404": "이 계정에 구성된 웹훅이 없음.", + "TITLE": "웹훅 관리", + "TABLE_HEADER": { + "WEBHOOK_ENDPOINT": "웹훅 엔드포인트", + "ACTIONS": "액션" + } + }, + "EDIT": { + "BUTTON_TEXT": "수정", + "TITLE": "Edit webhook", + "API": { + "SUCCESS_MESSAGE": "Webhook configuration updated successfully", + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없음. 나중에 다시 시도하십시오." + } + }, + "ADD": { + "CANCEL": "취소", + "TITLE": "새 웹훅 추가", + "API": { + "SUCCESS_MESSAGE": "Webhook configuration added successfully", + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없음. 나중에 다시 시도하십시오." + } + }, + "DELETE": { + "BUTTON_TEXT": "삭제", + "API": { + "SUCCESS_MESSAGE": "웹훅이 성공적으로 삭제됨", + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없음. 나중에 다시 시도하십시오." + }, + "CONFIRM": { + "TITLE": "삭제 확인", + "MESSAGE": "Are you sure to delete the webhook? ({webhookURL})", + "YES": "예, 삭제합니다. ", + "NO": "아니요, 유지합니다." + } + } + }, + "SLACK": { + "DELETE": "삭제", + "DELETE_CONFIRMATION": { + "TITLE": "Delete the integration", + "MESSAGE": "Are you sure you want to delete the integration? Doing so will result in the loss of access to conversations on your Slack workspace." + }, + "HELP_TEXT": { + "TITLE": "Using Slack Integration", + "BODY": "With this integration, all of your incoming conversations will be synced to the ***{selectedChannelName}*** channel in your Slack workspace. You can manage all your customer conversations right within the channel and never miss a message.\n\nHere are the main features of the integration:\n\n**Respond to conversations from within Slack:** To respond to a conversation in the ***{selectedChannelName}*** Slack channel, simply type out your message and send it as a thread. This will create a response back to the customer through Chatwoot. It's that simple!\n\n **Create private notes:** If you want to create private notes instead of replies, start your message with ***`note:`***. This ensures that your message is kept private and won't be visible to the customer.\n\n**Associate an agent profile:** If the person who replied on Slack has an agent profile in Chatwoot under the same email, the replies will be associated with that agent profile automatically. This means you can easily track who said what and when. On the other hand, when the replier doesn't have an associated agent profile, the replies will appear from the bot profile to the customer.", + "SELECTED": "selected" + }, + "SELECT_CHANNEL": { + "OPTION_LABEL": "Select a channel", + "UPDATE": "업데이트", + "BUTTON_TEXT": "Connect channel", + "DESCRIPTION": "Your Slack workspace is now linked with Chatwoot. However, the integration is currently inactive. To activate the integration and connect a channel to Chatwoot, please click the button below.\n\n**Note:** If you are attempting to connect a private channel, add the Chatwoot app to the Slack channel before proceeding with this step.", + "ATTENTION_REQUIRED": "Attention required", + "EXPIRED": "Your Slack integration has expired. To continue receiving messages on Slack, please delete the integration and connect your workspace again." + }, + "UPDATE_ERROR": "There was an error updating the integration, please try again", + "UPDATE_SUCCESS": "The channel is connected successfully", + "FAILED_TO_FETCH_CHANNELS": "There was an error fetching the channels from Slack, please try again" + }, + "DYTE": { + "CLICK_HERE_TO_JOIN": "Click here to join", + "LEAVE_THE_ROOM": "Leave the room", + "START_VIDEO_CALL_HELP_TEXT": "Start a new video call with the customer", + "JOIN_ERROR": "There was an error joining the call, please try again", + "CREATE_ERROR": "There was an error creating a meeting link, please try again" + }, + "OPEN_AI": { + "AI_ASSIST": "AI Assist", + "WITH_AI": " {option} with AI ", + "OPTIONS": { + "REPLY_SUGGESTION": "Reply Suggestion", + "SUMMARIZE": "Summarize", + "REPHRASE": "Improve Writing", + "FIX_SPELLING_GRAMMAR": "Fix Spelling and Grammar", + "SHORTEN": "Shorten", + "EXPAND": "Expand", + "MAKE_FRIENDLY": "Change message tone to friendly", + "MAKE_FORMAL": "Use formal tone", + "SIMPLIFY": "Simplify" + }, + "ASSISTANCE_MODAL": { + "DRAFT_TITLE": "Draft content", + "GENERATED_TITLE": "Generated content", + "AI_WRITING": "AI is writing", + "BUTTONS": { + "APPLY": "Use this suggestion", + "CANCEL": "취소" + } + }, + "CTA_MODAL": { + "TITLE": "Integrate with OpenAI", + "DESC": "Bring advanced AI features to your dashboard with OpenAI's GPT models. To begin, enter the API key from your OpenAI account.", + "KEY_PLACEHOLDER": "Enter your OpenAI API key", + "BUTTONS": { + "NEED_HELP": "Need help?", + "DISMISS": "Dismiss", + "FINISH": "Finish Setup" + }, + "DISMISS_MESSAGE": "You can setup OpenAI integration later Whenever you want.", + "SUCCESS_MESSAGE": "OpenAI integration setup successfully" + }, + "TITLE": "Improve With AI", + "SUMMARY_TITLE": "Summary with AI", + "REPLY_TITLE": "Reply suggestion with AI", + "SUBTITLE": "An improved reply will be generated using AI, based on your current draft.", + "TONE": { + "TITLE": "Tone", + "OPTIONS": { + "PROFESSIONAL": "Professional", + "FRIENDLY": "Friendly" + } + }, + "BUTTONS": { + "GENERATE": "Generate", + "GENERATING": "Generating...", + "CANCEL": "취소" + }, + "GENERATE_ERROR": "There was an error processing the content, please try again" + }, + "DELETE": { + "BUTTON_TEXT": "삭제", + "API": { + "SUCCESS_MESSAGE": "통합이 성공적으로 삭제됨." + } + }, + "CONNECT": { + "BUTTON_TEXT": "연결" + }, + "DASHBOARD_APPS": { + "TITLE": "Dashboard Apps", + "HEADER_BTN_TXT": "Add a new dashboard app", + "SIDEBAR_TXT": "Dashboard Apps
Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.
When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.
To add a new dashboard app, click on the button 'Add a new dashboard app'.
", + "DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.", + "LEARN_MORE": "Learn more about Dashboard Apps", + "LIST": { + "404": "There are no dashboard apps configured on this account yet", + "LOADING": "Fetching dashboard apps...", + "TABLE_HEADER": { + "NAME": "이름", + "ENDPOINT": "Endpoint" + }, + "EDIT_TOOLTIP": "Edit app", + "DELETE_TOOLTIP": "Delete app" + }, + "FORM": { + "TITLE_LABEL": "이름", + "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", + "TITLE_ERROR": "A name for the dashboard app is required", + "URL_LABEL": "Endpoint", + "URL_PLACEHOLDER": "Enter the endpoint URL where your app is hosted", + "URL_ERROR": "A valid URL is required" + }, + "CREATE": { + "HEADER": "Add a new dashboard app", + "FORM_SUBMIT": "보내기", + "FORM_CANCEL": "취소", + "API_SUCCESS": "Dashboard app configured successfully", + "API_ERROR": "We couldn't create an app. Please try again later" + }, + "UPDATE": { + "HEADER": "Edit dashboard app", + "FORM_SUBMIT": "업데이트", + "FORM_CANCEL": "취소", + "API_SUCCESS": "Dashboard app updated successfully", + "API_ERROR": "We couldn't update the app. Please try again later" + }, + "DELETE": { + "CONFIRM_YES": "Yes, delete it", + "CONFIRM_NO": "No, keep it", + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete the app - {appName}?", + "API_SUCCESS": "Dashboard app deleted successfully", + "API_ERROR": "We couldn't delete the app. Please try again later" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "Fetching linear issues...", + "LOADING_ERROR": "There was an error fetching the linear issues, please try again", + "CREATE": "만들기", + "LINK": { + "SEARCH": "Search issues", + "SELECT": "Select issue", + "TITLE": "링크", + "EMPTY_LIST": "No linear issues found", + "LOADING": "Loading", + "ERROR": "There was an error fetching the linear issues, please try again", + "LINK_SUCCESS": "Issue linked successfully", + "LINK_ERROR": "There was an error linking the issue, please try again", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "Create Linear issues from conversations, or link existing ones for seamless tracking.", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter title", + "REQUIRED_ERROR": "Title is required" + }, + "DESCRIPTION": { + "LABEL": "내용", + "PLACEHOLDER": "Enter description" + }, + "TEAM": { + "LABEL": "Team", + "PLACEHOLDER": "팀 선택", + "SEARCH": "Search team", + "REQUIRED_ERROR": "Team is required" + }, + "ASSIGNEE": { + "LABEL": "Assignee", + "PLACEHOLDER": "Select assignee", + "SEARCH": "Search assignee" + }, + "PRIORITY": { + "LABEL": "Priority", + "PLACEHOLDER": "Select priority", + "SEARCH": "Search priority" + }, + "LABEL": { + "LABEL": "Label", + "PLACEHOLDER": "Select label", + "SEARCH": "Search label" + }, + "STATUS": { + "LABEL": "상태", + "PLACEHOLDER": "Select status", + "SEARCH": "Search status" + }, + "PROJECT": { + "LABEL": "Project", + "PLACEHOLDER": "Select project", + "SEARCH": "Search project" + } + }, + "CREATE": "만들기", + "CANCEL": "취소", + "CREATE_SUCCESS": "Issue created successfully", + "CREATE_ERROR": "There was an error creating the issue, please try again", + "LOADING_TEAM_ERROR": "There was an error fetching the teams, please try again", + "LOADING_TEAM_ENTITIES_ERROR": "There was an error fetching the team entities, please try again" + }, + "ISSUE": { + "STATUS": "상태", + "PRIORITY": "Priority", + "ASSIGNEE": "Assignee", + "LABELS": "라벨", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Unlink", + "SUCCESS": "Issue unlinked successfully", + "ERROR": "There was an error unlinking the issue, please try again" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Yes, delete", + "CANCEL": "취소" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Yes, delete", + "CANCEL": "취소" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "메시지 보내기...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Captain is thinking", + "YOU": "나", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "나", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "메시지 입력...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "취소", + "CREATE": "만들기", + "EDIT": "업데이트" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "업데이트", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "특징", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "이름", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "내용", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "특징", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "설정", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "삭제" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "만들기", + "CANCEL": "취소", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "삭제" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "만들기", + "CANCEL": "취소", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "삭제" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "내용", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "만들기", + "CANCEL": "취소" + } + } + }, + "UPDATE": { + "CANCEL": "취소", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "내용", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "없음", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "API Key" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "비밀번호", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Type" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "숫자", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Required" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "삭제", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "모두" + }, + "STATUS": { + "TITLE": "상태", + "PENDING": "보내는 중", + "APPROVED": "Approved", + "ALL": "모두" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "수정", + "DELETE_RESPONSE": "삭제" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Disconnect" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "받은 메시지함", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/ko/labelsMgmt.json new file mode 100644 index 0000000..fc00d38 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "라벨", + "HEADER_BTN_TXT": "라벨 추가", + "LOADING": "라벨을 가져오는 중", + "DESCRIPTION": "Labels help you categorize and prioritize conversations and leads. You can assign a label to a conversation or contact using the side panel.", + "LEARN_MORE": "Learn more about labels", + "SEARCH_404": "이 쿼리와 일치하는 항목이 없음", + "LIST": { + "404": "이 계정에는 사용 가능한 라벨이 없다.", + "TITLE": "라벨 관리", + "DESC": "라벨을 사용하여 대화를 그룹화할 수 있다.", + "TABLE_HEADER": { + "NAME": "이름", + "DESCRIPTION": "내용", + "COLOR": "색깔" + } + }, + "FORM": { + "NAME": { + "LABEL": "라벨 이름", + "PLACEHOLDER": "라벨 이름", + "REQUIRED_ERROR": "라벨 이름이 필요합니다", + "MINIMUM_LENGTH_ERROR": "최소 두글자 이상이여야 합니다", + "VALID_ERROR": "영어나, 숫자, - 와 _ 만 사용 가능합니다" + }, + "DESCRIPTION": { + "LABEL": "내용", + "PLACEHOLDER": "라벨 내용" + }, + "COLOR": { + "LABEL": "색깔" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "사이드바에 라벨 표시" + }, + "EDIT": "수정", + "CREATE": "만들기", + "DELETE": "삭제", + "CANCEL": "취소" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Add label to conversation", + "MULTIPLE_SUGGESTION": "Select this label", + "DESELECT": "Deselect label", + "DISMISS": "Dismiss suggestion" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Dismiss", + "ADD_SELECTED_LABELS": "Add selected labels", + "ADD_SELECTED_LABEL": "Add selected label", + "ADD_ALL_LABELS": "Add all labels", + "SUGGESTED_LABELS": "Suggested labels" + }, + "ADD": { + "TITLE": "라벨 추가", + "DESC": "라벨을 사용하여 대화를 그룹화할 수 있다.", + "API": { + "SUCCESS_MESSAGE": "라벨이 성공적으로 추가됨", + "ERROR_MESSAGE": "오류가 발생했습니다. 다시 시도하십시오." + } + }, + "EDIT": { + "TITLE": "라벨 수정", + "API": { + "SUCCESS_MESSAGE": "라벨이 성공적으로 업데이트됨", + "ERROR_MESSAGE": "오류가 발생했습니다. 다시 시도하십시오." + } + }, + "DELETE": { + "BUTTON_TEXT": "삭제", + "API": { + "SUCCESS_MESSAGE": "라벨이 성공적으로 삭제됨.", + "ERROR_MESSAGE": "오류가 발생했습니다. 다시 시도하십시오." + }, + "CONFIRM": { + "TITLE": "삭제 확인", + "MESSAGE": "삭제하시겠습니까? ", + "YES": "예, 삭제합니다. ", + "NO": "아니요, 유지해주세요. " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/login.json b/app/javascript/dashboard/i18n/locale/ko/login.json new file mode 100644 index 0000000..a9f56cf --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "로그인", + "EMAIL": { + "LABEL": "이메일", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "올바른 전자 메일 주소를 입력하십시오." + }, + "PASSWORD": { + "LABEL": "비밀번호", + "PLACEHOLDER": "비밀번호" + }, + "API": { + "SUCCESS_MESSAGE": "로그인 성공", + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없습니다. 나중에 다시 시도해 주세요.", + "UNAUTH": "이름 또는 비밀번호가 올바르지 않습니다. 다시 시도해 주세요." + }, + "OAUTH": { + "GOOGLE_LOGIN": "Login with Google", + "BUSINESS_ACCOUNTS_ONLY": "회사 이메일 주소를 사용하여 로그인하세요.", + "NO_ACCOUNT_FOUND": "귀하의 이메일 주소로 계정을 찾을 수 없습니다." + }, + "FORGOT_PASSWORD": "암호를 잊으셨나요?", + "CREATE_NEW_ACCOUNT": "계정 생성", + "SUBMIT": "로그인", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/macros.json b/app/javascript/dashboard/i18n/locale/ko/macros.json new file mode 100644 index 0000000..397c1ce --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Macros", + "DESCRIPTION": "A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click.", + "LEARN_MORE": "Learn more about macros", + "HEADER_BTN_TXT": "Add a new macro", + "HEADER_BTN_TXT_SAVE": "Save macro", + "LOADING": "Fetching macros", + "ERROR": "Something went wrong. Please try again", + "ORDER_INFO": "Macros will run in the order you add your actions. You can rearrange them by dragging them by the handle beside each node.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Macro name", + "PLACEHOLDER": "Enter a name for your macro", + "ERROR": "Name is required for creating a macro" + }, + "ACTIONS": { + "LABEL": "액션" + } + }, + "API": { + "SUCCESS_MESSAGE": "Macro added successfully", + "ERROR_MESSAGE": "Unable to create macro, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "이름", + "CREATED BY": "Created by", + "LAST_UPDATED_BY": "Last updated by", + "VISIBILITY": "Visibility" + }, + "404": "No macros found" + }, + "DELETE": { + "TOOLTIP": "Delete macro", + "CONFIRM": { + "MESSAGE": "삭제하시겠습니까? ", + "YES": "Yes, Delete", + "NO": "아니오" + }, + "API": { + "SUCCESS_MESSAGE": "Macro deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the macro. Please try again later" + } + }, + "EDIT": { + "TOOLTIP": "Edit macro", + "API": { + "SUCCESS_MESSAGE": "Macro updated successfully", + "ERROR_MESSAGE": "Could not update Macro, Please try again later" + } + }, + "EDITOR": { + "START_FLOW": "Start Flow", + "END_FLOW": "End Flow", + "LOADING": "Fetching macro", + "ADD_BTN_TOOLTIP": "Add new action", + "DELETE_BTN_TOOLTIP": "Delete Action", + "VISIBILITY": { + "LABEL": "Macro Visibility", + "GLOBAL": { + "LABEL": "Public", + "DESCRIPTION": "This macro is available publicly for all agents in this account." + }, + "PERSONAL": { + "LABEL": "Private", + "DESCRIPTION": "This macro will be private to you and not be available to others." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Execute", + "PREVIEW": "Preview Macro", + "EXECUTED_SUCCESSFULLY": "Macro executed successfully" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "값이 필요합니다.", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Assign a Team", + "ASSIGN_AGENT": "Assign an Agent", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "대화 음소거", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "CHANGE_PRIORITY": "Change Priority", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "SEND_WEBHOOK_EVENT": "Send Webhook Event" + }, + "PRIORITY_TYPES": { + "NONE": "없음", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/mfa.json b/app/javascript/dashboard/i18n/locale/ko/mfa.json new file mode 100644 index 0000000..c9ef842 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "사용함", + "DISABLED": "사용 안 함", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Loading...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "복사", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "취소", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "다운로드", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "비밀번호", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "취소", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "취소", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/report.json b/app/javascript/dashboard/i18n/locale/ko/report.json new file mode 100644 index 0000000..b53d52e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "대화", + "LOADING_CHART": "차트 데이터 불러오는 중...", + "NO_ENOUGH_DATA": "보고서를 생성할 수 있는 데이터 포인트가 부족합니다. 나중에 다시 시도하십시오.", + "DOWNLOAD_AGENT_REPORTS": "다운로드 에이전트 보고서", + "DATA_FETCHING_FAILED": "Failed to fetch data, please try again later.", + "SUMMARY_FETCHING_FAILED": "Failed to fetch summary, please try again later.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "대화", + "DESC": "( 총 )" + }, + "INCOMING_MESSAGES": { + "NAME": "수신 메시지", + "DESC": "( 총 )" + }, + "OUTGOING_MESSAGES": { + "NAME": "발신 메시지", + "DESC": "( 총 )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( 평균 )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "해결 시간", + "DESC": "( 평균 )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "해결 수", + "DESC": "( 총 )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "해결 수", + "DESC": "( 총 )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Handoff Count", + "DESC": "( 총 )" + }, + "REPLY_TIME": { + "NAME": "Customer waiting time", + "TOOLTIP_TEXT": "Waiting time is {metricValue} (based on {conversationCount} replies)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "지난 7일", + "LAST_14_DAYS": "지난 14일", + "LAST_30_DAYS": "지난 30일", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_DATE_RANGE": "Custom date range" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Group By", + "DURATION_FILTER_LABEL": "Duration", + "GROUPING_OPTIONS": { + "DAY": "Day", + "WEEK": "Week", + "MONTH": "Month", + "YEAR": "Month" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "BUSINESS_HOURS": "영업시간", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "검색 결과가 없습니다" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Agents Overview", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "차트 데이터 불러오는 중...", + "NO_ENOUGH_DATA": "보고서를 생성할 수 있는 데이터 포인트가 부족합니다. 나중에 다시 시도하십시오.", + "DOWNLOAD_AGENT_REPORTS": "다운로드 에이전트 보고서", + "FILTER_DROPDOWN_LABEL": "에이전트 선택", + "METRICS": { + "CONVERSATIONS": { + "NAME": "대화", + "DESC": "( 총 )" + }, + "INCOMING_MESSAGES": { + "NAME": "수신 메시지", + "DESC": "( 총 )" + }, + "OUTGOING_MESSAGES": { + "NAME": "발신 메시지", + "DESC": "( 총 )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( 평균 )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "해결 시간", + "DESC": "( 평균 )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "해결 수", + "DESC": "( 총 )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "지난 7일" + }, + { + "id": 1, + "name": "지난 30일" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "LABEL_REPORTS": { + "HEADER": "Labels Overview", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "차트 데이터 불러오는 중...", + "NO_ENOUGH_DATA": "보고서를 생성할 수 있는 데이터 포인트가 부족합니다. 나중에 다시 시도하십시오.", + "DOWNLOAD_LABEL_REPORTS": "Download label reports", + "FILTER_DROPDOWN_LABEL": "Select Label", + "METRICS": { + "CONVERSATIONS": { + "NAME": "대화", + "DESC": "( 총 )" + }, + "INCOMING_MESSAGES": { + "NAME": "수신 메시지", + "DESC": "( 총 )" + }, + "OUTGOING_MESSAGES": { + "NAME": "발신 메시지", + "DESC": "( 총 )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( 평균 )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "해결 시간", + "DESC": "( 평균 )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "해결 수", + "DESC": "( 총 )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "지난 7일" + }, + { + "id": 1, + "name": "지난 30일" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "INBOX_REPORTS": { + "HEADER": "Inbox Overview", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "차트 데이터 불러오는 중...", + "NO_ENOUGH_DATA": "보고서를 생성할 수 있는 데이터 포인트가 부족합니다. 나중에 다시 시도하십시오.", + "DOWNLOAD_INBOX_REPORTS": "Download inbox reports", + "FILTER_DROPDOWN_LABEL": "Select Inbox", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "대화", + "DESC": "( 총 )" + }, + "INCOMING_MESSAGES": { + "NAME": "수신 메시지", + "DESC": "( 총 )" + }, + "OUTGOING_MESSAGES": { + "NAME": "발신 메시지", + "DESC": "( 총 )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( 평균 )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "해결 시간", + "DESC": "( 평균 )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "해결 수", + "DESC": "( 총 )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "지난 7일" + }, + { + "id": 1, + "name": "지난 30일" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "TEAM_REPORTS": { + "HEADER": "Team Overview", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "차트 데이터 불러오는 중...", + "NO_ENOUGH_DATA": "보고서를 생성할 수 있는 데이터 포인트가 부족합니다. 나중에 다시 시도하십시오.", + "DOWNLOAD_TEAM_REPORTS": "Download team reports", + "FILTER_DROPDOWN_LABEL": "Select Team", + "METRICS": { + "CONVERSATIONS": { + "NAME": "대화", + "DESC": "( 총 )" + }, + "INCOMING_MESSAGES": { + "NAME": "수신 메시지", + "DESC": "( 총 )" + }, + "OUTGOING_MESSAGES": { + "NAME": "발신 메시지", + "DESC": "( 총 )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( 평균 )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "해결 시간", + "DESC": "( 평균 )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "해결 수", + "DESC": "( 총 )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "지난 7일" + }, + { + "id": 1, + "name": "지난 30일" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "CSAT_REPORTS": { + "HEADER": "CSAT Reports", + "NO_RECORDS": "There are no CSAT survey responses available.", + "DOWNLOAD": "Download CSAT Reports", + "DOWNLOAD_FAILED": "Failed to download CSAT Reports", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Choose Agents" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Contact", + "AGENT_NAME": "Assigned agent", + "RATING": "Rating", + "FEEDBACK_TEXT": "Feedback comment" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Total responses", + "TOOLTIP": "Total number of responses collected" + }, + "SATISFACTION_SCORE": { + "LABEL": "Satisfaction score", + "TOOLTIP": "Total number of positive responses / Total number of responses * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Response rate", + "TOOLTIP": "Total number of responses / Total number of CSAT survey messages sent * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Bot Reports", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "No. of Conversations", + "TOOLTIP": "Total number of conversations handled by the bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total Responses", + "TOOLTIP": "Total number of responses sent by the bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Resolution Rate", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Handoff Rate", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Overview", + "LIVE": "Live", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Open Conversations", + "LOADING_MESSAGE": "Loading conversation metrics...", + "OPEN": "열기", + "UNATTENDED": "Unattended", + "UNASSIGNED": "지정되지 않음", + "PENDING": "보내는 중" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Conversation Traffic", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Conversations by agents", + "LOADING_MESSAGE": "Loading agent metrics...", + "NO_AGENTS": "There are no conversations by agents", + "TABLE_HEADER": { + "AGENT": "에이전트", + "OPEN": "열기", + "UNATTENDED": "Unattended", + "STATUS": "상태" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Team", + "OPEN": "열기", + "UNATTENDED": "Unattended", + "STATUS": "상태" + } + }, + "AGENT_STATUS": { + "HEADER": "Agent status", + "ONLINE": "온라인", + "BUSY": "바쁨", + "OFFLINE": "오프라인" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Sunday", + "MONDAY": "Monday", + "TUESDAY": "Tuesday", + "WEDNESDAY": "Wednesday", + "THURSDAY": "Thursday", + "FRIDAY": "Friday", + "SATURDAY": "Saturday" + }, + "SLA_REPORTS": { + "HEADER": "SLA Reports", + "NO_RECORDS": "SLA applied conversations are not available.", + "LOADING": "Loading SLA data...", + "DOWNLOAD_SLA_REPORTS": "Download SLA reports", + "DOWNLOAD_FAILED": "Failed to download SLA Reports", + "DROPDOWN": { + "ADD_FIlTER": "Add filter", + "CLEAR_ALL": "Clear all", + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "검색 결과가 없습니다", + "NO_FILTER": "No filters available", + "SEARCH": "Search filter", + "INPUT_PLACEHOLDER": { + "SLA": "SLA name", + "AGENTS": "Agent name", + "INBOXES": "Inbox name", + "LABELS": "라벨 이름", + "TEAMS": "Team name" + }, + "SLA": "SLA Policy", + "INBOXES": "받은 메시지함", + "AGENTS": "에이전트", + "LABELS": "Label", + "TEAMS": "Team" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentage of SLAs created were completed successfully" + }, + "NO_OF_MISSES": { + "LABEL": "Number of Misses", + "TOOLTIP": "Total SLA misses in a certain period" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Number of Conversations", + "TOOLTIP": "Total number of conversations with SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "Conversation", + "AGENT": "에이전트" + }, + "VIEW_DETAILS": "View Details" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "받은 메시지함", + "AGENT": "에이전트", + "TEAM": "Team", + "LABEL": "Label", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "해결 수", + "CONVERSATIONS": "No. of conversations" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/resetPassword.json b/app/javascript/dashboard/i18n/locale/ko/resetPassword.json new file mode 100644 index 0000000..4a17337 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "비밀번호 재설정하기", + "DESCRIPTION": "Enter the email address you use to log in to Chatwoot to get the password reset instructions.", + "GO_BACK_TO_LOGIN": "If you want to go back to the login page,", + "EMAIL": { + "LABEL": "이메일", + "PLACEHOLDER": "이메일을 입력해 주세요.", + "ERROR": "올바른 이메일 주소를 입력하세요." + }, + "API": { + "SUCCESS_MESSAGE": "비밀번호 재설정 링크가 이메일로 전송됨.", + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없습니다. 나중에 다시 시도해 주세요." + }, + "SUBMIT": "보내기" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/search.json b/app/javascript/dashboard/i18n/locale/ko/search.json new file mode 100644 index 0000000..6546b02 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "연락처", + "CONVERSATIONS": "대화", + "MESSAGES": "메시지", + "ARTICLES": "Articles" + }, + "SECTION": { + "CONTACTS": "연락처", + "CONVERSATIONS": "대화", + "MESSAGES": "메시지", + "ARTICLES": "Articles" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "Searching", + "LOADING_DATA": "Loading", + "EMPTY_STATE": "No {item} found for query '{query}'", + "EMPTY_STATE_FULL": "No results found for query '{query}'", + "PLACEHOLDER_KEYBINDING": "/to focus", + "INPUT_PLACEHOLDER": "Type 3 or more characters to search", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Clear all", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Search by conversation id, email, phone number, messages for better search results. ", + "BOT_LABEL": "봇", + "READ_MORE": "Read more", + "READ_LESS": "Read less", + "WROTE": "wrote:", + "FROM": "From", + "EMAIL": "이메일", + "EMAIL_SUBJECT": "Subject", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "지난 7일", + "LAST_30_DAYS": "지난 30일", + "LAST_60_DAYS": "지난 60일", + "LAST_90_DAYS": "지난 90일", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "Apply", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Clear filter" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Sender", + "IN": "받은 메시지함", + "AGENTS": "에이전트", + "CONTACTS": "연락처", + "INBOXES": "받은 메시지함", + "NO_AGENTS": "에이전트를 찾을 수 없음", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/setNewPassword.json b/app/javascript/dashboard/i18n/locale/ko/setNewPassword.json new file mode 100644 index 0000000..1456ba4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "새 비밀번호 설정", + "PASSWORD": { + "LABEL": "비밀번호", + "PLACEHOLDER": "비밀번호", + "ERROR": "비밀번호가 너무 짧음." + }, + "CONFIRM_PASSWORD": { + "LABEL": "비밀번호 확인", + "PLACEHOLDER": "비밀번호 확인", + "ERROR": "비밀번호가 일치하지 않음." + }, + "API": { + "SUCCESS_MESSAGE": "비밀번호 변경 성공.", + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없습니다. 나중에 다시 시도해 주세요." + }, + "CAPTCHA": { + "ERROR": "Verification expired. Please solve captcha again." + }, + "SUBMIT": "보내기" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/settings.json b/app/javascript/dashboard/i18n/locale/ko/settings.json new file mode 100644 index 0000000..889cbd5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "프로필 설정", + "TITLE": "프로필 설정", + "BTN_TEXT": "프로필 업데이트", + "DELETE_AVATAR": "Delete Avatar", + "AVATAR_DELETE_SUCCESS": "Avatar has been deleted successfully", + "AVATAR_DELETE_FAILED": "There is an error while deleting avatar, please try again", + "UPDATE_SUCCESS": "Your profile has been updated successfully", + "PASSWORD_UPDATE_SUCCESS": "Your password has been changed successfully", + "AFTER_EMAIL_CHANGED": "프로필이 성공적으로 업데이트되었습니다. 로그인 자격 증명이 변경된 경우 다시 로그인하십시오.", + "FORM": { + "PICTURE": "Profile Picture", + "AVATAR": "프로필 이미지", + "ERROR": "양식 오류를 수정하십시오", + "REMOVE_IMAGE": "제거", + "UPLOAD_IMAGE": "이미지 업로드", + "UPDATE_IMAGE": "이미지 업데이트", + "PROFILE_SECTION": { + "TITLE": "프로필", + "NOTE": "당신의 이메일 주소는 당신의 신분이고 로그인에 사용됩니다." + }, + "SEND_MESSAGE": { + "TITLE": "Hotkey to send messages", + "NOTE": "You can select a hotkey (either Enter or Cmd/Ctrl+Enter) based on your preference of writing.", + "UPDATE_SUCCESS": "Your settings have been updated successfully", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Send messages by pressing Enter key instead of clicking the send button." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Send messages by pressing Cmd/Ctrl + enter key instead of clicking the send button." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Default", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Personal message signature", + "NOTE": "Create a unique message signature to appear at the end of every message you send from any inbox. You can also include an inline image, which is supported in live-chat, email, and API inboxes.", + "BTN_TEXT": "Save message signature", + "API_ERROR": "Couldn't save signature! Try again", + "API_SUCCESS": "Signature saved successfully", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save to save the signature", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Message Signature", + "ERROR": "Message Signature cannot be empty", + "PLACEHOLDER": "Insert your personal message signature here." + }, + "PASSWORD_SECTION": { + "TITLE": "비밀번호", + "NOTE": "암호를 업데이트하면 여러 장치의 로그인이 재설정됩니다.", + "BTN_TEXT": "Change password" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "엑세스 토큰", + "NOTE": "API 기반 통합을 구축하는 경우 이 토큰을 사용할 수 있음", + "COPY": "복사", + "RESET": "Reset", + "CONFIRM_RESET": "Are you sure?", + "CONFIRM_HINT": "Click again to confirm", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Alerts", + "NOTE": "Enable audio alerts in dashboard for new messages and conversations.", + "PLAY": "Play sound", + "ALERT_TYPES": { + "NONE": "없음", + "MINE": "Assigned", + "ALL": "모두", + "ASSIGNED": "My assigned conversations", + "UNASSIGNED": "Unassigned conversations", + "NOTME": "Open conversations assigned to others" + }, + "ALERT_COMBINATIONS": { + "NONE": "You haven't selected any options, you won't receive any audio alerts.", + "ASSIGNED": "You'll receive alerts for conversations assigned to you.", + "UNASSIGNED": "You'll receive alerts for any unassigned conversations.", + "NOTME": "You'll receive alerts for conversations assigned to others.", + "ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.", + "ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.", + "NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.", + "ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations." + }, + "ALERT_TYPE": { + "TITLE": "Alert events for conversations", + "NONE": "없음", + "ASSIGNED": "Assigned Conversations", + "ALL_CONVERSATIONS": "All Conversations" + }, + "DEFAULT_TONE": { + "TITLE": "Alert tone:" + }, + "CONDITIONS": { + "TITLE": "Alert conditions:", + "CONDITION_ONE": "Send audio alerts only if the browser window is not active", + "CONDITION_TWO": "Send alerts every 30s until all the assigned conversations are read" + }, + "SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.", + "READ_MORE": "Read more" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "이메일 알림", + "NOTE": "여기서 이메일 알림 기본 설정 업데이트", + "CONVERSATION_ASSIGNMENT": "대화가 할당될 때 이메일 알림 보내기", + "CONVERSATION_CREATION": "새 대화가 생성될 때 이메일 알림 보내기", + "CONVERSATION_MENTION": "대화에서 멘션될 때 이메일 알림 보내기", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "할당된 대화에서 새 메시지가 생성될 때 이메일 알림 보내기", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "Send email notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send email notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send email notifications when a conversation misses resolution SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Notification preferences", + "TYPE_TITLE": "Notification type", + "EMAIL": "이메일", + "PUSH": "Push notification", + "TYPES": { + "CONVERSATION_CREATED": "A new conversation is created", + "CONVERSATION_ASSIGNED": "A conversation is assigned to you", + "CONVERSATION_MENTION": "You are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "A new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "A new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "A conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "A conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "A conversation misses resolution SLA" + }, + "BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them" + }, + "API": { + "UPDATE_SUCCESS": "알림 기본 설정이 성공적으로 업데이트됨", + "UPDATE_ERROR": "기본 설정을 업데이트하는 동안 오류가 발생했습니다. 다시 시도하십시오." + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "푸시 알림", + "NOTE": "여기에서 푸시 알림 기본 설정 업데이트", + "CONVERSATION_ASSIGNMENT": "대화가 할당되면 푸시 알림 보내기", + "CONVERSATION_CREATION": "새 대화가 만들어질 때 푸시 알림 보내기", + "CONVERSATION_MENTION": "대화에서 멘션될 때 푸시 알림 보내기", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "할당된 대화에서 새 메시지가 생성될 때 푸시 알림 보내기", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in a participating conversation", + "HAS_ENABLED_PUSH": "이 브라우저에 대한 푸시를 사용 가능으로 설정하셨습니다.", + "REQUEST_PUSH": "푸시 알림 사용", + "SLA_MISSED_FIRST_RESPONSE": "Send push notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send push notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send push notifications when a conversation misses resolution SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "프로필 이미지" + }, + "NAME": { + "LABEL": "전체 이름", + "ERROR": "올바른 전체 이름을 입력하십시오.", + "PLACEHOLDER": "전체 이름을 입력하십시오." + }, + "DISPLAY_NAME": { + "LABEL": "표기 이름", + "ERROR": "올바른 표시 이름을 입력하십시오.", + "PLACEHOLDER": "대화에서 표시되는 표시 이름을 입력하십시오." + }, + "AVAILABILITY": { + "LABEL": "유용성", + "STATUS": { + "ONLINE": "온라인", + "BUSY": "바쁨", + "OFFLINE": "오프라인" + }, + "SET_AVAILABILITY_SUCCESS": "Availability has been set successfully", + "SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again", + "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user" + }, + "EMAIL": { + "LABEL": "이메일 주소", + "ERROR": "올바른 전자 메일 주소를 입력하십시오.", + "PLACEHOLDER": "대화 중에 표시되는 이메일 주소를 입력하십시오." + }, + "CURRENT_PASSWORD": { + "LABEL": "Current password", + "ERROR": "Please enter the current password", + "PLACEHOLDER": "Please enter the current password" + }, + "PASSWORD": { + "LABEL": "New password", + "ERROR": "6글자 이상의 비밀번호를 입력하십시오.", + "PLACEHOLDER": "새 비밀번호를 입력하십시오." + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "새 비밀번호 확인", + "ERROR": "비밀번호가 비밀번호와 일치하는지 확인", + "PLACEHOLDER": "Please re-enter your new password" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "변경", + "CHANGE_ACCOUNTS": "Switch account", + "SWITCH_ACCOUNT": "Switch account", + "CONTACT_SUPPORT": "Contact support", + "SELECTOR_SUBTITLE": "다음 목록에서 계정 선택", + "PROFILE_SETTINGS": "Profile settings", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Keyboard shortcuts", + "APPEARANCE": "Change appearance", + "SUPER_ADMIN_CONSOLE": "SuperAdmin console", + "DOCS": "Read documentation", + "CHANGELOG": "Changelog", + "LOGOUT": "Log out" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "일 평가판이 남아 있습니다.", + "TRAIL_BUTTON": "지금 구입하기", + "DELETED_USER": "Deleted User", + "EMAIL_VERIFICATION_PENDING": "It seems that you haven't verified your email address yet. Please check your inbox for the verification email.", + "RESEND_VERIFICATION_MAIL": "Resend verification email", + "EMAIL_VERIFICATION_SENT": "Verification email has been sent. Please check your inbox.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Account Suspended", + "MESSAGE": "Your account is suspended. Please reach out to the support team for more information." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Log out" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "복사", + "CODEPEN": "Open in CodePen", + "COPY_SUCCESSFUL": "코드가 클립보드에 복사됨" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Show More", + "SHOW_LESS": "Show Less" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "다운로드", + "UPLOADING": "업로드 중...", + "INSTAGRAM_STORY_UNAVAILABLE": "This story is no longer available." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "See on map" + }, + "FORM_BUBBLE": { + "SUBMIT": "보내기" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "This image is no longer available.", + "LOADING_FAILED": "Loading failed" + } + }, + "CONFIRM_EMAIL": "확인 중...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "받은 메시지함 추가" + } + }, + "SIDEBAR": { + "NO_ITEMS": "No items", + "CURRENTLY_VIEWING_ACCOUNT": "Currently viewing:", + "SWITCH": "Switch", + "INBOX_VIEW": "Inbox View", + "CONVERSATIONS": "대화", + "INBOX": "My Inbox", + "ALL_CONVERSATIONS": "All Conversations", + "MENTIONED_CONVERSATIONS": "멘션", + "PARTICIPATING_CONVERSATIONS": "Participating", + "UNATTENDED_CONVERSATIONS": "Unattended", + "REPORTS": "보고서", + "SETTINGS": "설정", + "CONTACTS": "연락처", + "ACTIVE": "Active", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistants", + "CAPTAIN_DOCUMENTS": "Documents", + "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_TOOLS": "Tools", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "받은 메시지함", + "CAPTAIN_SETTINGS": "설정", + "HOME": "홈", + "AGENTS": "에이전트", + "AGENT_BOTS": "봇", + "AUDIT_LOGS": "Audit Logs", + "INBOXES": "받은 메시지함", + "NOTIFICATIONS": "알림", + "CANNED_RESPONSES": "미리 준비된 답변", + "INTEGRATIONS": "통합", + "PROFILE_SETTINGS": "프로필 설정", + "ACCOUNT_SETTINGS": "계정 설정", + "APPLICATIONS": "Applications", + "LABELS": "라벨", + "CUSTOM_ATTRIBUTES": "사용자 지정 특성", + "AUTOMATION": "Automation", + "MACROS": "Macros", + "TEAMS": "팀", + "BILLING": "Billing", + "CUSTOM_VIEWS_FOLDER": "Folders", + "CUSTOM_VIEWS_SEGMENTS": "Segments", + "ALL_CONTACTS": "All Contacts", + "TAGGED_WITH": "Tagged with", + "NEW_LABEL": "New label", + "NEW_TEAM": "New team", + "NEW_INBOX": "New inbox", + "REPORTS_CONVERSATION": "대화", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Campaigns", + "ONGOING": "Ongoing", + "ONE_OFF": "One off", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "봇", + "REPORTS_AGENT": "에이전트", + "REPORTS_LABEL": "라벨", + "REPORTS_INBOX": "받은 메시지함", + "REPORTS_TEAM": "Team", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "Set yourself as", + "SET_YOUR_AVAILABILITY": "영업시간 설정", + "SLA": "SLA", + "CUSTOM_ROLES": "Custom Roles", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Overview", + "REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages", + "HELP_CENTER": { + "TITLE": "Help Center", + "ARTICLES": "Articles", + "CATEGORIES": "Categories", + "LOCALES": "Locales", + "SETTINGS": "설정" + }, + "CHANNELS": "채널", + "SET_AUTO_OFFLINE": { + "TEXT": "Mark offline automatically", + "INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard.", + "INFO_SHORT": "Automatically mark offline when you aren't using the app." + }, + "DOCS": "Read docs", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "Billing", + "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "CURRENT_PLAN": { + "TITLE": "Current Plan", + "PLAN_NOTE": "You are currently subscribed to the **{plan}** plan with **{quantity}** licenses", + "SEAT_COUNT": "Number of seats", + "RENEWS_ON": "Renews on" + }, + "VIEW_PRICING": "View Pricing", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Manage your subscription", + "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", + "BUTTON_TXT": "Go to the billing portal" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Manage usage and credits for Captain AI.", + "BUTTON_TXT": "Buy more credits", + "DOCUMENTS": "Documents", + "RESPONSES": "Responses", + "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more.", + "REFRESH_CREDITS": "Refresh" + }, + "CHAT_WITH_US": { + "TITLE": "Need help?", + "DESCRIPTION": "Do you face any issues in billing? We are here to help.", + "BUTTON_TXT": "채팅하기" + }, + "NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again.", + "TOPUP": { + "BUY_CREDITS": "Buy more credits", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Note:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "취소", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Go Back", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "코드가 클립보드에 복사됨", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.", + "NEW_ACCOUNT": "새 계정", + "SELECTOR_SUBTITLE": "새 계정 만들기", + "API": { + "SUCCESS_MESSAGE": "계정이 성공적으로 생성됨", + "EXIST_MESSAGE": "계정이 이미 있음", + "ERROR_MESSAGE": "Woot 서버에 연결할 수 없음. 나중에 다시 시도하십시오." + }, + "FORM": { + "NAME": { + "LABEL": "회사명", + "PLACEHOLDER": "Wayne Enterprises" + }, + "SUBMIT": "보내기", + "CANCEL": "취소" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "View all shortcuts", + "TITLE": { + "OPEN_CONVERSATION": "Open conversation", + "RESOLVE_AND_NEXT": "Resolve and move to next", + "NAVIGATE_DROPDOWN": "Navigate dropdown items", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "ADD_ATTACHMENT": "Add Attachment", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "TOGGLE_SIDEBAR": "Toggle Sidebar", + "GO_TO_REPORTS_SIDEBAR": "Go to Reports sidebar", + "MOVE_TO_NEXT_TAB": "Move to next tab in conversation list", + "GO_TO_SETTINGS": "Go to Settings", + "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", + "SWITCH_TO_REPLY": "Switch to Reply", + "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "Priority", + "ACTIVE": "Active", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "수정" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "취소" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "내용:", + "PLACEHOLDER": "Enter description" + }, + "STATUS": { + "LABEL": "상태:", + "PLACEHOLDER": "Select status", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "추가하기" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "수정" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "취소" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "내용:", + "PLACEHOLDER": "Enter description" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "추가하기" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "삭제", + "CANCEL_BUTTON_LABEL": "취소" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/signup.json b/app/javascript/dashboard/i18n/locale/ko/signup.json new file mode 100644 index 0000000..89de09f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Create an account", + "TITLE": "회원가입", + "TESTIMONIAL_HEADER": "All it takes is one step to move forward", + "TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.", + "TERMS_ACCEPT": "By creating an account, you agree to our T & C and Privacy policy", + "OAUTH": { + "GOOGLE_SIGNUP": "Sign up with Google" + }, + "COMPANY_NAME": { + "LABEL": "Company name", + "PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises", + "ERROR": "Company name is too short" + }, + "FULL_NAME": { + "LABEL": "전체 이름", + "PLACEHOLDER": "전체 이름을 입력합니다. 예: Taeyeon Kim", + "ERROR": "계정 이름이 너무 짧음" + }, + "EMAIL": { + "LABEL": "회사 이메일", + "PLACEHOLDER": "Enter your work email address. E.g., bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Please enter a valid work email address" + }, + "PASSWORD": { + "LABEL": "비밀번호", + "PLACEHOLDER": "비밀번호", + "ERROR": "비밀번호가 너무 짧음", + "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "비밀번호 확인", + "PLACEHOLDER": "비밀번호 확인", + "ERROR": "비밀번호가 일치하지 않음." + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "Woot Server에 연결할 수 없음. 나중에 다시 시도하십시오." + }, + "SUBMIT": "Create account", + "HAVE_AN_ACCOUNT": "이미 계정이 있습니까?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/sla.json b/app/javascript/dashboard/i18n/locale/ko/sla.json new file mode 100644 index 0000000..5889af6 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Add SLA", + "ADD_ACTION_LONG": "Create a new SLA Policy", + "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", + "LEARN_MORE": "Learn more about SLA", + "LOADING": "Fetching SLAs", + "PAYWALL": { + "TITLE": "Upgrade to create SLAs", + "AVAILABLE_ON": "The SLA feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SLA feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no SLAs available in this account.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Issues raised by enterprise customers, that require immediate attention.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Issues raised by enterprise customers, that needs to be acknowledged quickly." + }, + "BUSINESS_HOURS_ON": "Business hours on", + "BUSINESS_HOURS_OFF": "Business hours off", + "RESPONSE_TYPES": { + "FRT": "First response time threshold", + "NRT": "Next response time threshold", + "RT": "Resolution time threshold", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA Name", + "PLACEHOLDER": "SLA Name", + "REQUIRED_ERROR": "SLA name is required", + "MINIMUM_LENGTH_ERROR": "최소 두글자 이상이여야 합니다", + "VALID_ERROR": "영어나, 숫자, - 와 _ 만 사용 가능합니다" + }, + "DESCRIPTION": { + "LABEL": "내용", + "PLACEHOLDER": "SLA for premium customers" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "First Response Time", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Next Response Time", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "해결 시간", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "영업시간", + "PLACEHOLDER": "Only during business hours" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Threshold should be a number and greater than zero" + }, + "EDIT": "수정", + "CREATE": "만들기", + "DELETE": "삭제", + "CANCEL": "취소" + }, + "ADD": { + "TITLE": "Add SLA", + "DESC": "Friendly promises for great service!", + "API": { + "SUCCESS_MESSAGE": "SLA added successfully", + "ERROR_MESSAGE": "오류가 발생했습니다. 다시 시도하십시오." + } + }, + "DELETE": { + "TITLE": "Delete SLA", + "API": { + "SUCCESS_MESSAGE": "SLA deleted successfully", + "ERROR_MESSAGE": "오류가 발생했습니다. 다시 시도하십시오." + }, + "CONFIRM": { + "TITLE": "삭제 확인", + "MESSAGE": "Are you sure you want to delete ", + "YES": "예, 삭제합니다. ", + "NO": "아니요, 유지해주세요. " + } + }, + "EVENTS": { + "TITLE": "SLA Misses", + "FRT": "첫 번째 응답 시간", + "NRT": "Next response time", + "RT": "Resolution time", + "SHOW_MORE": "{count} more", + "HIDE": "Hide {count} rows" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/teamsSettings.json b/app/javascript/dashboard/i18n/locale/ko/teamsSettings.json new file mode 100644 index 0000000..d5a6e96 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "팀 생성하기", + "HEADER": "팀", + "LOADING": "Fetching teams", + "DESCRIPTION": "Teams allow you to organize agents into groups based on their responsibilities. An agent can belong to multiple teams. When working collaboratively, you can assign conversations to specific teams.", + "LEARN_MORE": "Learn more about teams", + "LIST": { + "404": "계정에 연결된 에이전트가 없습니다.", + "EDIT_TEAM": "팀 수정하기", + "NONE": "없음" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "팀 생성하기", + "DESC": "팀명 및 소개를 입력하세요." + }, + "AGENTS": { + "BUTTON_TEXT": "팀에 에이전트 추가", + "TITLE": "{teamName}팀에 에이전트 추가", + "DESC": "생성된 팀에 에이전트를 추가해서 대화에 협업하여 대응하고, 해당 대화에 발생한 새 이벤트에 대해 알림도 받으세요." + }, + "WIZARD_CREATE": { + "TITLE": "만들기", + "BODY": "에이전트들로 구성된 새 팀을 만드세요." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "에이전트 추가", + "BODY": "팀에 에이전트 추가" + }, + "WIZARD_FINISH": { + "TITLE": "완료", + "BODY": "준비가 완료되었습니다." + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "팀 내용 수정", + "DESC": "팀명 및 소개를 수정하세요.", + "BUTTON_TEXT": "팀 내용 업데이트" + }, + "AGENTS": { + "BUTTON_TEXT": "에이전트 업데이트", + "TITLE": "{teamName}팀에 에이전트 추가", + "DESC": "생성된 팀에 에이전트들을 추가하세요. 본 팀에 대화가 할당되면 추가된 에이전트들에게 알림이 갈 것입니다." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "팀 내용", + "ROUTE": "settings_teams_edit", + "BODY": "팀명, 소개 등 내용을 수정하세요." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "에이전트 수정", + "ROUTE": "settings_teams_edit_members", + "BODY": "팀 내 에이전트들을 수정하세요." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "완료", + "ROUTE": "settings_teams_edit_finish", + "BODY": "준비가 완료되었습니다." + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "팀 내용을 저장할 수 없습니다. 다시 시도해주세요." + }, + "AGENTS": { + "AGENT": "에이전트", + "EMAIL": "이메일", + "BUTTON_TEXT": "에이전트 추가", + "ADD_AGENTS": "팀에 에이전트를 추가하는 중...", + "SELECT": "선택", + "SELECT_ALL": "모든 에이전트 선택", + "SELECTED_COUNT": "{total} 에이전트 중 {selected} 선택됨." + }, + "ADD": { + "TITLE": "{teamName}팀에 에이전트 추가", + "DESC": "생성된 팀에 에이전트를 추가해서 대화에 협업하여 대응하고, 해당 대화에 발생한 새 이벤트에 대해 알림도 받으세요.", + "SELECT": "선택", + "SELECT_ALL": "모든 에이전트 선택", + "SELECTED_COUNT": "{total} 에이전트 중 {selected} 선택됨.", + "BUTTON_TEXT": "에이전트 추가", + "AGENT_VALIDATION_ERROR": "Select at least one agent." + }, + "FINISH": { + "TITLE": "준비가 완료되었습니다!", + "MESSAGE": "이제 대화들을 팀으로 협업할 수 있게 되었습니다. 즐거운 고객지원 되세요 ", + "BUTTON_TEXT": "완료" + }, + "DELETE": { + "BUTTON_TEXT": "삭제", + "API": { + "SUCCESS_MESSAGE": "팀이 성공적으로 삭제되었습니다.", + "ERROR_MESSAGE": "팀을 삭제할 수 없습니다. 다시 시도해주세요." + }, + "CONFIRM": { + "TITLE": "Are you sure you want to delete the team?", + "PLACE_HOLDER": "Please type {teamName} to confirm", + "MESSAGE": "팀을 삭제하면 팀에 할당된 대화들에 대한 할당이 모두 해제됩니다.", + "YES": "삭제 ", + "NO": "취소" + } + }, + "SETTINGS": "설정", + "FORM": { + "UPDATE": "팀 내용 업데이트", + "CREATE": "팀 생성", + "NAME": { + "LABEL": "Team name", + "PLACEHOLDER": "Example: Sales, Customer Support" + }, + "DESCRIPTION": { + "LABEL": "Team Description", + "PLACEHOLDER": "Short description about this team." + }, + "AUTO_ASSIGN": { + "LABEL": "Allow auto assign for this team." + }, + "SUBMIT_CREATE": "팀 생성" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/webhooks.json b/app/javascript/dashboard/i18n/locale/ko/webhooks.json new file mode 100644 index 0000000..f671638 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "웹훅 설정" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/ko/whatsappTemplates.json new file mode 100644 index 0000000..d42a0f1 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Whatsapp Templates", + "SUBTITLE": "Select the whatsapp template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "언어", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "언어", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ko/yearInReview.json b/app/javascript/dashboard/i18n/locale/ko/yearInReview.json new file mode 100644 index 0000000..7f47d00 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ko/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "닫기", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "대화", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "다운로드", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "대화 공유하기" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/advancedFilters.json b/app/javascript/dashboard/i18n/locale/lt/advancedFilters.json new file mode 100644 index 0000000..7f65bab --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Filtruoti pokalbius", + "SUBTITLE": "Add your filters below and hit 'Apply filters' to cut through the chat clutter.", + "EDIT_CUSTOM_FILTER": "Redaguoti papkę", + "CUSTOM_VIEWS_SUBTITLE": "Pridėkite arba pašalinkite filtrus ir atnaujinkite aplanką.", + "ADD_NEW_FILTER": "Pridėti Filtrą", + "FILTER_DELETE_ERROR": "Oops, looks like we can't save nothing! Please add at least one filter to save it.", + "SUBMIT_BUTTON_LABEL": "Taikyti filtrus", + "UPDATE_BUTTON_LABEL": "Atnaujinti aplanką", + "CANCEL_BUTTON_LABEL": "Atšaukti", + "CLEAR_BUTTON_LABEL": "Išvalyti filtrus", + "FOLDER_LABEL": "Aplanko Pavadinimas", + "FOLDER_QUERY_LABEL": "Aplanko užklausa", + "EMPTY_VALUE_ERROR": "Reikalinga vertė.", + "TOOLTIP_LABEL": "Filtruoti pokalbius", + "QUERY_DROPDOWN_LABELS": { + "AND": "IR", + "OR": "AR" + }, + "INPUT_PLACEHOLDER": "Enter value", + "OPERATOR_LABELS": { + "equal_to": "Lygu", + "not_equal_to": "Nelygu", + "does_not_contain": "Sudėtyje nėra", + "is_present": "Pateikiamas", + "is_not_present": "Nepateikiamas", + "is_greater_than": "Yra didensni nei", + "is_less_than": "Yra mažesnis nei", + "days_before": "Yra prieš x dienų", + "starts_with": "Prasideda nuo", + "equalTo": "Lygu", + "notEqualTo": "Nelygu", + "contains": "Sudėtyje yra", + "doesNotContain": "Sudėtyje nėra", + "isPresent": "Pateikiamas", + "isNotPresent": "Nepateikiamas", + "isGreaterThan": "Yra didensni nei", + "isLessThan": "Yra mažesnis nei", + "daysBefore": "Yra prieš x dienų", + "startsWith": "Prasideda nuo" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "Tiesa", + "FALSE": "Netiesa" + }, + "ATTRIBUTES": { + "STATUS": "Būsena", + "ASSIGNEE_NAME": "Priskirtojo vardas", + "INBOX_NAME": "Gautų laiškų aplanko pavadinimas", + "TEAM_NAME": "Komandos pavadinimas", + "CONVERSATION_IDENTIFIER": "Pokalbio identifikatorius", + "CAMPAIGN_NAME": "Akcijos Pavadinimas", + "LABELS": "Etiketės", + "BROWSER_LANGUAGE": "Naršyklės Kalba", + "PRIORITY": "Prioritetas", + "COUNTRY_NAME": "Šalies Pavadinimas", + "REFERER_LINK": "Siuntimo nuoroda", + "CUSTOM_ATTRIBUTE_LIST": "Sąrašas", + "CUSTOM_ATTRIBUTE_TEXT": "Tekstas", + "CUSTOM_ATTRIBUTE_NUMBER": "Numeris", + "CUSTOM_ATTRIBUTE_LINK": "Nuoroda", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Žymimasis langelis", + "CREATED_AT": "Sukurta", + "LAST_ACTIVITY": "Paskutiniai veiksmai" + }, + "ERRORS": { + "VALUE_REQUIRED": "Reikalinga vertė", + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standartinis Filtras", + "ADDITIONAL_FILTERS": "Papildomas Filtras", + "CUSTOM_ATTRIBUTES": "Personalizuoti Požymiai" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Ar nori išsaugoti šį filtrą?", + "LABEL": "Suteikti filtrui pavadinimą", + "PLACEHOLDER": "Name your filter to refer it later.", + "ERROR_MESSAGE": "Yra reikalingas vardas.", + "SAVE_BUTTON": "Išsaugoti filtrą", + "CANCEL_BUTTON": "Atšaukti", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Aplankas sukurtas sėkmingai.", + "ERROR_MESSAGE": "Kuriant aplanką įvyko klaida." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segmentas sėkmingai sukurtas.", + "ERROR_MESSAGE": "Kuriant segmentą įvyko klaida." + } + }, + "EDIT": { + "EDIT_BUTTON": "Redaguoti aplanką" + }, + "DELETE": { + "DELETE_BUTTON": "Trinti filtrą", + "MODAL": { + "CONFIRM": { + "TITLE": "Patvirtinti Ištrynimą", + "MESSAGE": "Ar tikrai norite ištrinti filtrą ", + "YES": "Taip, Trinti", + "NO": "Ne, Išsaugoti" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Aplankas sėkmingai ištrintas.", + "ERROR_MESSAGE": "Trinant aplanką įvyko klaida." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segmentas ištrintas sėkmingai.", + "ERROR_MESSAGE": "Trinant segmentą įvyko klaida." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/agentBots.json b/app/javascript/dashboard/i18n/locale/lt/agentBots.json new file mode 100644 index 0000000..4673100 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Botai", + "LOADING_EDITOR": "Įkeliama redagavimo priemonė...", + "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try. You can manage your bots from this page or create new ones using the 'Add Bot' button.", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "System bot", + "GLOBAL_BOT_BADGE": "Sistema", + "AVATAR": { + "SUCCESS_DELETE": "Bot avatar deleted successfully", + "ERROR_DELETE": "Error deleting bot avatar, please try again" + }, + "BOT_CONFIGURATION": { + "TITLE": "Pasirinkite agento botą", + "DESC": "Assign an Agent Bot to your inbox. They can handle initial conversations and transfer them to a live agent when necessary.", + "SUBMIT": "Atnaujinti", + "DISCONNECT": "Atsijungti Botą", + "SUCCESS_MESSAGE": "Sėkmingai atnaujintas agento botas.", + "DISCONNECTED_SUCCESS_MESSAGE": "Sėkmingai atjungtas agento botas.", + "ERROR_MESSAGE": "Nepavyko atnaujinti agento boto. Bandykite dar kartą vėliau.", + "DISCONNECTED_ERROR_MESSAGE": "Nepavyko ajungti agento boto. Bandykite dar kartą vėliau.", + "SELECT_PLACEHOLDER": "Pasirinkti Botą" + }, + "ADD": { + "TITLE": "Add Bot", + "CANCEL_BUTTON_TEXT": "Atšaukti", + "API": { + "SUCCESS_MESSAGE": "Botas pridėtas sėkmingai.", + "ERROR_MESSAGE": "Nepavyko pridėti boto. Bandykite dar kartą vėliau." + } + }, + "LIST": { + "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.", + "LOADING": "Gaunami Botai...", + "TABLE_HEADER": { + "DETAILS": "Bot Details", + "URL": "Webhook URL" + } + }, + "DELETE": { + "BUTTON_TEXT": "Ištrinti", + "TITLE": "Ištrinti Botą", + "CONFIRM": { + "TITLE": "Patvirtinti Ištrynimą", + "MESSAGE": "Are you sure you want to delete {name}?", + "YES": "Taip, Ištrinti", + "NO": "Ne, Išsaugoti" + }, + "API": { + "SUCCESS_MESSAGE": "Botas ištrintas sėkmingai.", + "ERROR_MESSAGE": "Nepavyko ištrinti boto. Bandykite dar kartą." + } + }, + "EDIT": { + "BUTTON_TEXT": "Redaguoti", + "TITLE": "Keisti Botą", + "API": { + "SUCCESS_MESSAGE": "Botas atnaujintas sėkmingai.", + "ERROR_MESSAGE": "Nepavyko atnaujinti boto. Bandykite dar kartą vėliau." + } + }, + "ACCESS_TOKEN": { + "TITLE": "Prieeigos raktas", + "DESCRIPTION": "Copy the access token and save it securely", + "COPY_SUCCESSFUL": "Access token copied to clipboard", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "Boto Pavadinimas", + "PLACEHOLDER": "Enter bot name", + "REQUIRED": "Yra reikalingas Boto vardas" + }, + "DESCRIPTION": { + "LABEL": "Aprašymas", + "PLACEHOLDER": "Ką daro šis botas?" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "Webhook URL is required" + }, + "ERRORS": { + "NAME": "Yra reikalingas Boto vardas", + "URL": "Webhook URL is required", + "VALID_URL": "Please enter a valid URL starting with http:// or https://" + }, + "CANCEL": "Atšaukti", + "CREATE": "Create Bot", + "UPDATE": "Update Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them." + }, + "TYPES": { + "WEBHOOK": "Boto Webhook" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/agentMgmt.json b/app/javascript/dashboard/i18n/locale/lt/agentMgmt.json new file mode 100644 index 0000000..4959e63 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Agentai", + "HEADER_BTN_TXT": "Pridėti Agentą", + "LOADING": "Gaunamas agentų sąrašas", + "DESCRIPTION": "An agent is a member of your customer support team who can view and respond to user messages. The list below shows all the agents in your account.", + "LEARN_MORE": "Learn about user roles", + "AGENT_TYPES": { + "ADMINISTRATOR": "Administratorius", + "AGENT": "Agentas" + }, + "LIST": { + "404": "Su šia paskyra nėra susietų agentų", + "TITLE": "Valdyti agentus jūsų komandoje", + "DESC": "Jūs galite įtraukti/pašalinti agentus į/iš savo komandos.", + "NAME": "Vardas", + "EMAIL": "El. paštas", + "STATUS": "Būsena", + "ACTIONS": "Veiksmai", + "VERIFIED": "Patikrinta", + "VERIFICATION_PENDING": "Laukiama patvirtinimo", + "AVAILABLE_CUSTOM_ROLE": "Available custom role permissions" + }, + "ADD": { + "TITLE": "Pridėti agentą prie komandos", + "DESC": "Galite pridėti žmonių, kurie galės apdoroti gautuosius laiškus ir teikti pagalbą.", + "CANCEL_BUTTON_TEXT": "Atšaukti", + "FORM": { + "NAME": { + "LABEL": "Agento Vardas", + "PLACEHOLDER": "Įveskite agento vardą" + }, + "AGENT_TYPE": { + "LABEL": "Agento tipas", + "PLACEHOLDER": "Prašau pasirinkti agento tipą", + "ERROR": "Yra reikalingas agento tipas" + }, + "EMAIL": { + "LABEL": "El. pašto adresas", + "PLACEHOLDER": "Įveskite agento el. pašto adresą" + }, + "SUBMIT": "Pridėti Agentą" + }, + "API": { + "SUCCESS_MESSAGE": "Agentas pridėtas sėkmingai", + "EXIST_MESSAGE": "Agento el. pašto adresas jau naudojamas. Bandykite kitą el. pašto adresą", + "ERROR_MESSAGE": "Nepavyko prisijungti prie Woot serverio, bandykite dar kartą vėliau" + } + }, + "DELETE": { + "BUTTON_TEXT": "Ištrinti", + "API": { + "SUCCESS_MESSAGE": "Agentas ištrintas sėkmingai", + "ERROR_MESSAGE": "Nepavyko prisijungti prie Woot serverio, bandykite dar kartą vėliau" + }, + "CONFIRM": { + "TITLE": "Patvirtinti Ištrynimą", + "MESSAGE": "Ar tikrai norite ištrinti ", + "YES": "Taip, Trinti ", + "NO": "Ne, Išsaugoti " + } + }, + "EDIT": { + "TITLE": "Keisti Agentą", + "FORM": { + "NAME": { + "LABEL": "Agento Vardas", + "PLACEHOLDER": "Įveskite agento vardą" + }, + "AGENT_TYPE": { + "LABEL": "Agento tipas", + "PLACEHOLDER": "Prašau pasirinkti agento tipą", + "ERROR": "Yra reikalingas agento tipas" + }, + "EMAIL": { + "LABEL": "El. pašto adresas", + "PLACEHOLDER": "Įveskite agento el. pašto adresą" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Prieinamumas", + "PLACEHOLDER": "Prašome pasirinkti prieinamumo būseną", + "ERROR": "Būtinas prieinamumas" + }, + "SUBMIT": "Keisti Agentą" + }, + "BUTTON_TEXT": "Redaguoti", + "CANCEL_BUTTON_TEXT": "Atšaukti", + "API": { + "SUCCESS_MESSAGE": "Agentas atnaujintas sėkmingai", + "ERROR_MESSAGE": "Nepavyko prisijungti prie Woot serverio, bandykite dar kartą vėliau" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Atstatyti slaptažodį", + "ADMIN_SUCCESS_MESSAGE": "El. laiškas su slaptažodžio atstatymo instrukcijomis buvo išsiųstas agentui", + "SUCCESS_MESSAGE": "Agento slaptažodis atstatytas sėkmingai", + "ERROR_MESSAGE": "Nepavyko prisijungti prie Woot serverio, bandykite dar kartą vėliau" + } + }, + "SEARCH": { + "NO_RESULTS": "Nieko nerasta." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "Nėra", + "TITLE": { + "AGENT": "Pasirinkti agentą", + "TEAM": "Pasirinkite komandą" + }, + "LIST": { + "NONE": "Nėra" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "Agentų nerasta", + "TEAM": "Komandų nerasta" + }, + "PLACEHOLDER": { + "AGENT": "Ieškoti agentų", + "TEAM": "Ieškoti komandų", + "INPUT": "Ieškoti agentų" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/lt/attributesMgmt.json new file mode 100644 index 0000000..a0e656e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Personalizuoti Požymiai", + "HEADER_BTN_TXT": "Pridėti personalizuotą požymį", + "LOADING": "Gaunami personalizuoti požymiai", + "DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.", + "LEARN_MORE": "Learn more about custom attributes", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Pokalbis", + "CONTACT": "Kontaktas" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Tekstas", + "NUMBER": "Numeris", + "LINK": "Nuoroda", + "DATE": "Date", + "LIST": "Sąrašas", + "CHECKBOX": "Žymimasis langelis" + }, + "ADD": { + "TITLE": "Pridėti personalizuotą požymį", + "SUBMIT": "Sukurti", + "CANCEL_BUTTON_TEXT": "Atšaukti", + "FORM": { + "NAME": { + "LABEL": "Rodomas Vardas", + "PLACEHOLDER": "Įveskite personalizuoto požymio rodomą vardą", + "ERROR": "Yra reikalingas vardas" + }, + "DESC": { + "LABEL": "Aprašymas", + "PLACEHOLDER": "Įveskite personalizuotą požymio aprašymą", + "ERROR": "Būtinas aprašymas" + }, + "MODEL": { + "LABEL": "Taikomas", + "PLACEHOLDER": "Prašau pasirinkti vieną", + "ERROR": "Yra reikalingas modelis" + }, + "TYPE": { + "LABEL": "Tipas", + "PLACEHOLDER": "Prašau pasirinkti tipą", + "ERROR": "Yra reikalingas tipas", + "LIST": { + "LABEL": "Reikšmių sąrašas", + "PLACEHOLDER": "Įveskite reikšmę ir paspauskite klavišą Enter", + "ERROR": "Turi turėti bent vieną reikšmę" + } + }, + "KEY": { + "LABEL": "Raktas", + "PLACEHOLDER": "Įveskite personalizuotą atributo raktą", + "ERROR": "Yra reikalingas raktas", + "IN_VALID": "Neteisingas raktas" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "API": { + "SUCCESS_MESSAGE": "Personalizuotas požymis pridėtas sėkmingai!", + "ERROR_MESSAGE": "Nepavyko sukurti personalizuoto požymio. Pabandykite dar kartą vėliau." + } + }, + "DELETE": { + "BUTTON_TEXT": "Ištrinti", + "API": { + "SUCCESS_MESSAGE": "Personalizuotas požymis ištrintas sėkmingai.", + "ERROR_MESSAGE": "Nepavyko ištrinti personalizuoto požymio. Pabandykite dar kartą vėliau." + }, + "CONFIRM": { + "TITLE": "Ar tikrai norite ištrinti – {attributeName}", + "PLACE_HOLDER": "Įveskite {attributeName}, kad patvirtintumėte", + "MESSAGE": "Ištrynus bus pašalintas personalizuotas požymis", + "YES": "Ištrinti ", + "NO": "Atšaukti" + } + }, + "EDIT": { + "TITLE": "Redaguoti personalizuotą požymį", + "UPDATE_BUTTON_TEXT": "Atnaujinti", + "TYPE": { + "LIST": { + "LABEL": "Reikšmių sąrašas", + "PLACEHOLDER": "Įveskite reikšmes ir paspauskite klavišą Enter" + } + }, + "API": { + "SUCCESS_MESSAGE": "Personalizuotas požymis atnaujintas sėkmingai", + "ERROR_MESSAGE": "Atnaujinant personalizuotą požymį įvyko klaida, bandykite dar kartą" + } + }, + "TABS": { + "HEADER": "Personalizuoti Požymiai", + "CONVERSATION": "Pokalbis", + "CONTACT": "Kontaktas" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Vardas", + "DESCRIPTION": "Aprašymas", + "TYPE": "Tipas", + "KEY": "Raktas" + }, + "BUTTONS": { + "EDIT": "Redaguoti", + "DELETE": "Ištrinti" + }, + "EMPTY_RESULT": { + "404": "Nėra sukurta personalizuotų požymių", + "NOT_FOUND": "Nėra sukonfiguruota personalizuotų požymių" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/auditLogs.json b/app/javascript/dashboard/i18n/locale/lt/auditLogs.json new file mode 100644 index 0000000..c0c75f1 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Audito Žurnalas", + "HEADER_BTN_TXT": "Pridėti Audito Žurnalus", + "LOADING": "Parsiunčiami Audito Žurnalai", + "DESCRIPTION": "Audit Logs maintain a record of activities in your account, allowing you to track and audit your account, team, or services.", + "LEARN_MORE": "Learn more about audit logs", + "SEARCH_404": "Šią užklausą atitinkančių elementų nėra", + "SIDEBAR_TXT": "Audito žurnalai
Audito žurnalai yra įvykių ir veiksmų Chatwoot sistemoje pėdsakai.
", + "LIST": { + "404": "Šiai paskyrai nėra prieinamų Audito Žurnalų.", + "TITLE": "Tvarkyti Audito Žurnalus", + "DESC": "Audito žurnalai yra įvykių ir veiksmų „Chatwoot“ sistemoje pėdsakai.", + "TABLE_HEADER": { + "ACTIVITY": "Vartotojas", + "TIME": "Action", + "IP_ADDRESS": "IP Adresas" + } + }, + "API": { + "SUCCESS_MESSAGE": "Audito Žurnalai parsiųsti sėkmingai", + "ERROR_MESSAGE": "Nepavyko prisijungti prie Woot serverio, bandykite dar kartą vėliau" + }, + "DEFAULT_USER": "Sistema", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} pakvietė {invitee} į paskyrą kaip {role}", + "EDIT": { + "SELF": "{agentName} pakeitė savo {attributes} į {values}", + "OTHER": "{agentName} pakeitė {attributes} iš {user} į {values}", + "DELETED": "{agentName} changed {attributes} of a deleted user to {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} prisijungęs", + "SIGN_OUT": "{agentName} atsijungęs" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} deleted conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/automation.json b/app/javascript/dashboard/i18n/locale/lt/automation.json new file mode 100644 index 0000000..2f6fbbf --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automatizacija", + "DESCRIPTION": "Automation can replace and streamline existing processes that require manual effort, such as adding labels and assigning conversations to the most suitable agent. This allows the team to focus on their strengths while reducing time spent on routine tasks.", + "LEARN_MORE": "Learn more about automation", + "HEADER_BTN_TXT": "Pridėti automatizavimo taisyklę", + "LOADING": "Gaunamos automatizavimo taisyklės", + "ADD": { + "TITLE": "Pridėti automatizavimo taisyklę", + "SUBMIT": "Sukurti", + "CANCEL_BUTTON_TEXT": "Atšaukti", + "FORM": { + "NAME": { + "LABEL": "Taisyklės pavadinimas", + "PLACEHOLDER": "Įvesti taisyklės pavadinimą", + "ERROR": "Yra reikalingas vardas" + }, + "DESC": { + "LABEL": "Aprašymas", + "PLACEHOLDER": "Įveskite taisyklės aprašymą", + "ERROR": "Būtinas aprašymas" + }, + "EVENT": { + "LABEL": "Įvykis", + "PLACEHOLDER": "Prašau pasirinkti vieną", + "ERROR": "Reikalingas įvykis" + }, + "CONDITIONS": { + "LABEL": "Sąlygos" + }, + "ACTIONS": { + "LABEL": "Veiksmai" + } + }, + "CONDITION_BUTTON_LABEL": "Pridėti Sąlygas", + "ACTION_BUTTON_LABEL": "Pridėti Veiksmą", + "API": { + "SUCCESS_MESSAGE": "Automatizavimo taisyklė sėkmingai pridėta", + "ERROR_MESSAGE": "Nepavyko sukurti automatizavimo taisyklės, bandykite dar kartą vėliau" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Vardas", + "DESCRIPTION": "Aprašymas", + "ACTIVE": "Aktyvus", + "CREATED_ON": "Sukurta" + }, + "404": "Nerasta jokių automatizavimo taisyklių" + }, + "DELETE": { + "TITLE": "Trinti automatizavimo taisyklę", + "SUBMIT": "Ištrinti", + "CANCEL_BUTTON_TEXT": "Atšaukti", + "CONFIRM": { + "TITLE": "Patvirtinti Ištrynimą", + "MESSAGE": "Ar tikrai norite ištrinti ", + "YES": "Taip, Trinti ", + "NO": "Ne, Išsaugoti " + }, + "API": { + "SUCCESS_MESSAGE": "Automatizavimo taisyklė sėkmingai ištrinta", + "ERROR_MESSAGE": "Nepavyko ištrinti automatizavimo taisyklės, bandykite dar kartą vėliau" + } + }, + "EDIT": { + "TITLE": "Taisyti automatizavimo taisyklę", + "SUBMIT": "Atnaujinti", + "CANCEL_BUTTON_TEXT": "Atšaukti", + "API": { + "SUCCESS_MESSAGE": "Automatizavimo taisyklė sėkmingai atnaujinta", + "ERROR_MESSAGE": "Nepavyko atnaujinti automatizavimo taisyklės, bandykite dar kartą vėliau" + } + }, + "CLONE": { + "TOOLTIP": "Klonuoti", + "API": { + "SUCCESS_MESSAGE": "Automatizavimo taisyklė sėkmingai klonuota", + "ERROR_MESSAGE": "Nepavyko klonuoti automatizavimo taisyklės, bandykite dar kartą vėliau" + } + }, + "FORM": { + "EDIT": "Redaguoti", + "CREATE": "Sukurti", + "DELETE": "Ištrinti", + "CANCEL": "Atšaukti", + "RESET_MESSAGE": "Pakeitus įvykio tipą bus iš naujo nustatytos sąlygos ir įvykiai, kuriuos pridėjote" + }, + "CONDITION": { + "DELETE_MESSAGE": "Norėdami išsaugoti, turite išpildyti bent vieną sąlygą", + "CONTACT_CUSTOM_ATTR_LABEL": "Kontakto Personalizuoti Požymiai", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Pokalbio Personalizuoti Požymiai" + }, + "ACTION": { + "DELETE_MESSAGE": "Norėdami išsaugoti, turite išpildyti bent vieną veiksmą", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Rašykite pranešimą čia", + "TEAM_DROPDOWN_PLACEHOLDER": "Pasirinkite komandas", + "EMAIL_INPUT_PLACEHOLDER": "Enter email", + "URL_INPUT_PLACEHOLDER": "Enter URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Aktyvuoti automatizavimo taisyklę", + "DEACTIVATION_TITLE": "Išjungti automatizavimo taisyklę", + "ACTIVATION_DESCRIPTION": "Šis veiksmas suaktyvins automatizavimo taisyklę „{automationName}“. Ar tikrai norite tęsti?", + "DEACTIVATION_DESCRIPTION": "Šis veiksmas išjungs automatizavimo taisyklę „{automationName}“. Ar tikrai norite tęsti?", + "ACTIVATION_SUCCESFUL": "Automatizavimo taisyklė sėkmingai aktyvuota", + "DEACTIVATION_SUCCESFUL": "Automatizavimo taisyklė sėkmingai išjungta", + "ACTIVATION_ERROR": "Nepavyko aktyvuoti automatizavimo taisyklės, bandykite dar kartą vėliau", + "DEACTIVATION_ERROR": "Nepavyko išjungti automatizavimo taisyklės, bandykite dar kartą vėliau", + "CONFIRMATION_LABEL": "Taip", + "CANCEL_LABEL": "Ne" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Nepavyko įkelti priedo, bandykite dar kartą", + "LABEL_IDLE": "Įkelti priedą", + "LABEL_UPLOADING": "Įkeliama...", + "LABEL_UPLOADED": "Sėkmingai Įkeltas", + "LABEL_UPLOAD_FAILED": "Įkelti nepavyko" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Reikalinga vertė", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "NONE_OPTION": "Nėra", + "EVENTS": { + "CONVERSATION_CREATED": "Pokalbis sukurtas", + "CONVERSATION_UPDATED": "Pokalbis atnaujintas", + "MESSAGE_CREATED": "Message Created", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Conversation Opened" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assign to Agent", + "ASSIGN_TEAM": "Assign a Team", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "SEND_EMAIL_TO_TEAM": "Send an Email to Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Tildyti pokalbį", + "SNOOZE_CONVERSATION": "Atidėti Pokalbį", + "RESOLVE_CONVERSATION": "Išspręsti pokalbį", + "SEND_WEBHOOK_EVENT": "Send Webhook Event", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "CHANGE_PRIORITY": "Pakeisti Prioritetą", + "ADD_SLA": "Add SLA", + "OPEN_CONVERSATION": "Atidaryti pokalbį" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "Nėra", + "LOW": "Žemas", + "MEDIUM": "Vidutinis", + "HIGH": "Aukštas", + "URGENT": "Skubus" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Message Type", + "MESSAGE_CONTAINS": "Message Contains", + "EMAIL": "El. paštas", + "INBOX": "Gautų laiškų aplankas", + "CONVERSATION_LANGUAGE": "Conversation Language", + "PHONE_NUMBER": "Telefono numeris", + "STATUS": "Būsena", + "BROWSER_LANGUAGE": "Naršyklės Kalba", + "MAIL_SUBJECT": "Email Subject", + "COUNTRY_NAME": "Šalis", + "REFERER_LINK": "Referrer Link", + "ASSIGNEE_NAME": "Assignee", + "TEAM_NAME": "Komanda", + "PRIORITY": "Prioritetas", + "LABELS": "Etiketės" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/bulkActions.json b/app/javascript/dashboard/i18n/locale/lt/bulkActions.json new file mode 100644 index 0000000..a7b2bf1 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "Pasirinkta pokalbių: {conversationCount}", + "AGENT_SELECT_LABEL": "Pasirinkti agentą", + "ASSIGN_CONFIRMATION_LABEL": "Ar tikrai priskirsite {conversationCount} {conversationLabel}", + "UNASSIGN_CONFIRMATION_LABEL": "Ar tikrai atšauksite priskyrimą {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Grįžti", + "ASSIGN_LABEL": "Priskirti", + "YES": "Taip", + "SEARCH_INPUT_PLACEHOLDER": "Ieškoti", + "ASSIGN_AGENT_TOOLTIP": "Priskirti Agentą", + "ASSIGN_TEAM_TOOLTIP": "Priskirti komandą", + "ASSIGN_SUCCESFUL": "Pokalbis priskirtas sėkmingai.", + "ASSIGN_FAILED": "Nepavyko priskirti pokalbių. Bandykite dar kartą.", + "RESOLVE_SUCCESFUL": "Pokalbio išspręstas sėkmingai.", + "RESOLVE_FAILED": "Nepavyko išspręsti pokalbių. Bandykite dar kartą.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Pasirinkti šiame puslapyje matomi pokalbiai.", + "AGENT_LIST_LOADING": "Agentai užkraunami", + "UPDATE": { + "CHANGE_STATUS": "Pakeisti būseną", + "SNOOZE_UNTIL": "Atidėti", + "UPDATE_SUCCESFUL": "Pokalbio būsena atnaujinta sėkmingai.", + "UPDATE_FAILED": "Nepavyko atnaujinti pokalbių. Bandykite dar kartą." + }, + "LABELS": { + "ASSIGN_LABELS": "Priskirti etiketes", + "NO_LABELS_FOUND": "Etikečių nerasta", + "ASSIGN_SELECTED_LABELS": "Priskirti pažymėtas etiketes", + "ASSIGN_SUCCESFUL": "Etiketės sėkmingai priskirtos.", + "ASSIGN_FAILED": "Nepavyko priskirti etikečių. Prašau, pabandykite dar kartą." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Pasirinkite komandą", + "NONE": "Nėra", + "NO_TEAMS_AVAILABLE": "Šioje paskyroje nėra pridėtų komandų.", + "ASSIGN_SELECTED_TEAMS": "Priskirti pažymėtą komandą.", + "ASSIGN_SUCCESFUL": "Teams assigned successfully.", + "ASSIGN_FAILED": "Nepavyko priskirti komandą. Prašau, pabandykite dar kartą." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/campaign.json b/app/javascript/dashboard/i18n/locale/lt/campaign.json new file mode 100644 index 0000000..5df0177 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "Leisti", + "DISABLED": "Išjungta" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Siuntėjas", + "BOT": "Botas", + "FROM": "nuo", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "Atšaukti", + "CREATE_BUTTON_TEXT": "Sukurti", + "FORM": { + "TITLE": { + "LABEL": "Pavadinimas", + "PLACEHOLDER": "Įveskite akcijos pavadinimą", + "ERROR": "Yra reikalingas pavadinimas" + }, + "MESSAGE": { + "LABEL": "Žinutė", + "PLACEHOLDER": "Įveskite akcijos pranešimą", + "ERROR": "Yra reikalingas pranešimas" + }, + "INBOX": { + "LABEL": "Pasirinkti gautų laiškų aplanką", + "PLACEHOLDER": "Pasirinkti gautų laiškų aplanką", + "ERROR": "Yra reikalingas gautų laiškų aplankas" + }, + "SENT_BY": { + "LABEL": "Siuntėjas", + "PLACEHOLDER": "Please select sender", + "ERROR": "Yra reikalingas siuntėjas" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Prašome įvesti URL adresą", + "ERROR": "Prašome įvesti tesingą URL adresą" + }, + "TIME_ON_PAGE": { + "LABEL": "Laikas puslapyje (sekundės)", + "PLACEHOLDER": "Prašome įvesti laiką", + "ERROR": "Nurodykite laiką puslapyje" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "Leisti akciją", + "TRIGGER_ONLY_BUSINESS_HOURS": "Aktyvuokite tik darbo valandomis" + }, + "BUTTONS": { + "CREATE": "Sukurti", + "CANCEL": "Atšaukti" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "Įvyko klaida. Prašau, pabandykite dar kartą." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "Įvyko klaida. Prašau, pabandykite dar kartą." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Užbaigta", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "Atšaukti", + "CREATE_BUTTON_TEXT": "Sukurti", + "FORM": { + "TITLE": { + "LABEL": "Pavadinimas", + "PLACEHOLDER": "Įveskite akcijos pavadinimą", + "ERROR": "Yra reikalingas pavadinimas" + }, + "MESSAGE": { + "LABEL": "Žinutė", + "PLACEHOLDER": "Įveskite akcijos pranešimą", + "ERROR": "Yra reikalingas pranešimas" + }, + "INBOX": { + "LABEL": "Pasirinkti gautų laiškų aplanką", + "PLACEHOLDER": "Pasirinkti gautų laiškų aplanką", + "ERROR": "Yra reikalingas gautų laiškų aplankas" + }, + "AUDIENCE": { + "LABEL": "Auditorija", + "PLACEHOLDER": "Pažymėti klieto etiketes", + "ERROR": "Reikalinga auditorija" + }, + "SCHEDULED_AT": { + "LABEL": "Suplanuotas laikas", + "PLACEHOLDER": "Prašau pasirinkti laiką", + "ERROR": "Būtinas suplanuotas laikas" + }, + "BUTTONS": { + "CREATE": "Sukurti", + "CANCEL": "Atšaukti" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "Įvyko klaida. Prašau, pabandykite dar kartą." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No WhatsApp campaigns are available", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Užbaigta", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "Atšaukti", + "CREATE_BUTTON_TEXT": "Sukurti", + "FORM": { + "TITLE": { + "LABEL": "Pavadinimas", + "PLACEHOLDER": "Įveskite akcijos pavadinimą", + "ERROR": "Yra reikalingas pavadinimas" + }, + "INBOX": { + "LABEL": "Pasirinkti gautų laiškų aplanką", + "PLACEHOLDER": "Pasirinkti gautų laiškų aplanką", + "ERROR": "Yra reikalingas gautų laiškų aplankas" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "Apdoroti {templateName}", + "LANGUAGE": "Kalba", + "CATEGORY": "Kategorija", + "VARIABLES_LABEL": "Kintamieji", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "Auditorija", + "PLACEHOLDER": "Pažymėti klieto etiketes", + "ERROR": "Reikalinga auditorija" + }, + "SCHEDULED_AT": { + "LABEL": "Suplanuotas laikas", + "PLACEHOLDER": "Prašau pasirinkti laiką", + "ERROR": "Būtinas suplanuotas laikas" + }, + "BUTTONS": { + "CREATE": "Sukurti", + "CANCEL": "Atšaukti" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "Įvyko klaida. Prašau, pabandykite dar kartą." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Ar tikrai norite ištrinti?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "Ištrinti", + "API": { + "SUCCESS_MESSAGE": "Akcija ištrinta sėkmingai", + "ERROR_MESSAGE": "Įvyko klaida. Prašau, pabandykite dar kartą." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/lt/cannedMgmt.json new file mode 100644 index 0000000..f2eae76 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Atsakymų ruošiniai", + "LEARN_MORE": "Learn more about canned responses", + "DESCRIPTION": "Canned Responses are pre-written reply templates that help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a canned response during a conversation. ", + "HEADER_BTN_TXT": "Pridėti atsakymo ruošinį", + "LOADING": "Atsakymų ruošinių gavimas...", + "SEARCH_404": "Šią užklausą atitinkančių elementų nėra.", + "LIST": { + "404": "Šioje paskyroje nėra galimų atsakymų ruošinių.", + "TITLE": "Tvarkyti atsakymų ruošinius", + "DESC": "Atsakymų ruošiniai yra iš anksto nustatyti atsakymų šablonai, kuriuos galima naudoti norint greitai išsiųsti atsakymus į pokalbius.", + "TABLE_HEADER": { + "SHORT_CODE": "Trumpasis kodas", + "CONTENT": "Turinys", + "ACTIONS": "Veiksmai" + } + }, + "ADD": { + "TITLE": "Pridėti atsakymo ruošinį", + "DESC": "Atsakymų ruošiniai yra iš anksto nustatyti atsakymų šablonai, kuriuos galima naudoti norint greitai išsiųsti atsakymus į pokalbius.", + "CANCEL_BUTTON_TEXT": "Atšaukti", + "FORM": { + "SHORT_CODE": { + "LABEL": "Trumpasis kodas", + "PLACEHOLDER": "Prašome įvesti trumpą kodą.", + "ERROR": "Trumpasis Kodas yra būtinas." + }, + "CONTENT": { + "LABEL": "Žinutė", + "PLACEHOLDER": "Parašykite žinutę, kurią norėsite išsaugoti kaip šabloną vėlesniam naudojimui.", + "ERROR": "Yra reikalingas pranešimas." + }, + "SUBMIT": "Pateikti" + }, + "API": { + "SUCCESS_MESSAGE": "Atsakymų ruošinys pridėtas sėkmingai.", + "ERROR_MESSAGE": "Nepavyko prisijungti prie Woot serverio. Bandykite dar kartą vėliau." + } + }, + "EDIT": { + "TITLE": "Taisyti atsakymo ruošinį", + "CANCEL_BUTTON_TEXT": "Atšaukti", + "FORM": { + "SHORT_CODE": { + "LABEL": "Trumpasis kodas", + "PLACEHOLDER": "Prašome įvesti trumpą kodą.", + "ERROR": "Trumpasis Kodas yra būtinas." + }, + "CONTENT": { + "LABEL": "Žinutė", + "PLACEHOLDER": "Parašykite žinutę, kurią norėsite išsaugoti kaip šabloną vėlesniam naudojimui.", + "ERROR": "Yra reikalingas pranešimas." + }, + "SUBMIT": "Pateikti" + }, + "BUTTON_TEXT": "Taisyti", + "API": { + "SUCCESS_MESSAGE": "Atsakymų Ruošinys atnaujintas sėkmingai.", + "ERROR_MESSAGE": "Nepavyko prisijungti prie Woot serverio. Bandykite dar kartą vėliau." + } + }, + "DELETE": { + "BUTTON_TEXT": "Ištrinti", + "API": { + "SUCCESS_MESSAGE": "Atsakymų ruošinys ištrintas sėkmingai.", + "ERROR_MESSAGE": "Nepavyko prisijungti prie Woot serverio. Bandykite dar kartą vėliau." + }, + "CONFIRM": { + "TITLE": "Patvirtinti Ištrynimą", + "MESSAGE": "Ar tikrai norite ištrinti ", + "YES": "Taip, Trinti ", + "NO": "Ne, Išsaugoti " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/chatlist.json b/app/javascript/dashboard/i18n/locale/lt/chatlist.json new file mode 100644 index 0000000..5338e96 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Pokalbiai parsiunčiami", + "LOAD_MORE_CONVERSATIONS": "Parsiųsti daugiau pokalbių", + "EOF": "Visi poklabiai parsiųsti", + "LIST": { + "404": "Šioje grupėje nėra aktyvių pokalbių." + }, + "FAILED_TO_SEND": "Failed to send", + "TAB_HEADING": "Pokalbiai", + "MENTION_HEADING": "Paminėjimai", + "UNATTENDED_HEADING": "Be priežiūros", + "SEARCH": { + "INPUT": "Ieškoti Žmonių, Pokalbių, Išsaugotų Atsakymų.." + }, + "FILTER_ALL": "Visi", + "ASSIGNEE_TYPE_TABS": { + "me": "Mano", + "unassigned": "Ne priskirtas", + "all": "Visi" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Atidaryti" + }, + "resolved": { + "TEXT": "Išspręsta" + }, + "pending": { + "TEXT": "Laukiama" + }, + "snoozed": { + "TEXT": "Atidėta" + }, + "all": { + "TEXT": "Visi" + } + }, + "VIEW_FILTER": "Paržiūra", + "SORT_TOOLTIP_LABEL": "Rūšiuoti pokalbius", + "CHAT_SORT": { + "STATUS": "Būsena", + "ORDER_BY": "Rūšiuoti pagal" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Sukurta", + "OLDEST": "Sukurta:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Paskutiniai veiksmai:", + "ACTIVE": "Paskutiniai veiksmai" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Paskutinė veikla: nuo seniausio" + }, + "last_activity_at_desc": { + "TEXT": "Paskutinė veikla: nuo naujausio" + }, + "created_at_desc": { + "TEXT": "Sukurta: nuo naujausio" + }, + "created_at_asc": { + "TEXT": "Sukurta: nuo seniausio" + }, + "priority_desc": { + "TEXT": "Prioritetas: nuo aukščiausio" + }, + "priority_asc": { + "TEXT": "Prioritetas: nuo žemiausio" + }, + "waiting_since_asc": { + "TEXT": "Laukia atsakymo: nuo ilgiausio" + }, + "waiting_since_desc": { + "TEXT": "Laukia atsakymo: nuo trumpiausio" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Vaizdinė žinutė" + }, + "audio": { + "CONTENT": "Garso žinutė" + }, + "video": { + "CONTENT": "Video žinutė" + }, + "file": { + "CONTENT": "Failas pridėtas" + }, + "location": { + "CONTENT": "Vieta" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "pasidalino URL" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Rūšiuoti pokalbį", + "DROPDOWN_TITLE": "Rūšiuoti pagal", + "ITEMS": { + "LATEST": { + "NAME": "Paskutiniai veiksmai", + "LABEL": "Paskutiniai veiksmai" + }, + "CREATED_AT": { + "NAME": "Sukurta", + "LABEL": "Sukurta" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Paskutinė vartotojo žinutė", + "LABEL": "Paskutinė žinutė" + } + } + }, + "RECEIVED_VIA_EMAIL": "Gauta el. paštu", + "VIEW_TWEET_IN_TWITTER": "Pažiūrėti Twitter tweetus", + "REPLY_TO_TWEET": "Atsakyti į šitą tweetą", + "LINK_TO_STORY": "Eikite į Instagram istoriją", + "SENT": "Išsiųsta sėkmingai", + "READ": "Perskaityta sėkmingai", + "DELIVERED": "Pristatyta sėkmingai", + "NO_MESSAGES": "Nėra Pranešimų", + "NO_CONTENT": "Nėra turinio", + "HIDE_QUOTED_TEXT": "Slėpti cituojamą tekstą", + "SHOW_QUOTED_TEXT": "Rodyti cituojamą tekstą", + "MESSAGE_READ": "Skaityti", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/companies.json b/app/javascript/dashboard/i18n/locale/lt/companies.json new file mode 100644 index 0000000..f38b5b9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Įmonės", + "SORT_BY": { + "LABEL": "Rūšiuoti pagal", + "OPTIONS": { + "NAME": "Vardas", + "DOMAIN": "Domenas", + "CREATED_AT": "Sukurta", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Rikiavimas", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "SEARCH_PLACEHOLDER": "Ieškoti įmonės...", + "LOADING": "Užkraunamas įmonių sąrašas...", + "UNNAMED": "Įmonė be pavadinimo", + "CONTACTS_COUNT": "{n} kontaktas | {n} kontaktai", + "EMPTY_STATE": { + "TITLE": "Nerasta nei viena įmonė" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/components.json b/app/javascript/dashboard/i18n/locale/lt/components.json new file mode 100644 index 0000000..52980d5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} of {totalPages} pages" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "Nieko nerasta.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} more" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "Nieko nerasta.", + "SEARCHING": "Ieškoma..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Atšaukti", + "CONFIRM": "Patvirtinti" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Search country", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Sąraše pasirinkite skambinimo kodą" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Author is not available" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Sužinoti daugiau", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/contact.json b/app/javascript/dashboard/i18n/locale/lt/contact.json new file mode 100644 index 0000000..bc74336 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Nepasiekiamas", + "EMAIL_ADDRESS": "El. pašto adresas", + "PHONE_NUMBER": "Telefono numeris", + "IDENTIFIER": "Identifikatorius", + "COPY_SUCCESSFUL": "Sėkmingai nukopijuota į iškarpinę", + "COMPANY": "Įmonė", + "LOCATION": "Vieta", + "BROWSER_LANGUAGE": "Naršyklės Kalba", + "CONVERSATION_TITLE": "Pokalbio detalės", + "VIEW_PROFILE": "Rodyti Profilį", + "BROWSER": "Naršyklė", + "OS": "Operacinė Sistema", + "INITIATED_FROM": "Pradėta iš", + "INITIATED_AT": "Prasidėjo", + "IP_ADDRESS": "IP Adresas", + "CREATED_AT_LABEL": "Sukurta", + "NEW_MESSAGE": "Naujas pranešimas", + "CALL": "Call", + "CALL_INITIATED": "Skambinama kontaktui...", + "CALL_FAILED": "Nepavyko pradėti skambučio. Bandykite dar kartą.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "Su šiuo kontaktu nėra susietų ankstesnių pokalbių.", + "TITLE": "Ankstesni pokalbiai" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Kontakto Žymeklis", + "ERROR": "Nepavyko atnaujinti etikečių" + }, + "CONVERSATION": { + "TITLE": "Pokalbio Etiketės", + "ADD_BUTTON": "Pridėti Etiketę" + }, + "LABEL_SELECT": { + "TITLE": "Pridėti Etiketę", + "PLACEHOLDER": "Ieškoti etikečių", + "NO_RESULT": "Etikečių nerasta", + "CREATE_LABEL": "Sukurti naują etiketę" + } + }, + "MERGE_CONTACT": "Sujungti kontaktą", + "CONTACT_ACTIONS": "Kontakto veiksmai", + "MUTE_CONTACT": "Užblokuoti kontaktą", + "UNMUTE_CONTACT": "Atblokuoti kontaktą", + "MUTED_SUCCESS": "Šis kontaktas sėkmingai užblokuotas. Jūs negausite pranešimų apie būsimus pokalbius.", + "UNMUTED_SUCCESS": "Šis kontaktas sėkmingai atblokuotas.", + "SEND_TRANSCRIPT": "Siųsti stenogramą", + "EDIT_LABEL": "Redaguoti", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Personalizuoti Požymiai", + "CONTACT_LABELS": "Kontakto Žymeklis", + "PREVIOUS_CONVERSATIONS": "Ankstesni pokalbiai", + "NO_RECORDS_FOUND": "Požymių nerasta" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Keisti Kontaktą", + "TITLE": "Keisti Kontaktą", + "DESC": "Tvarkyti kontakto informaciją" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Trinti kontaktą", + "TITLE": "Trinti kontaktą", + "DESC": "Trinti kontakto informaciją", + "CONFIRM": { + "TITLE": "Patvirtinti Ištrynimą", + "MESSAGE": "Ar tikrai norite ištrinti ", + "YES": "Taip, Ištrinti", + "NO": "Ne, Išsaugoti" + }, + "API": { + "SUCCESS_MESSAGE": "Agentas ištrintas sėkmingai", + "ERROR_MESSAGE": "Nepavyko ištrinti kontakto. Pabandykite dar kartą vėliau." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Pateikti", + "CANCEL": "Atšaukti", + "AVATAR": { + "LABEL": "Kontakto Avataras" + }, + "NAME": { + "PLACEHOLDER": "Įveskite pilną kontakto vardą", + "LABEL": "Pilnas vardas" + }, + "BIO": { + "PLACEHOLDER": "Įveskite kontakto biografiją", + "LABEL": "Biografija" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Įveskite kontakto el. pašto adresą", + "LABEL": "El. pašto adresas", + "DUPLICATE": "Šis el. pašto adresas naudojamas kitam kontaktui.", + "ERROR": "Prašau įveskite teisingą el. pašto adresą." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Įveskite kontakto telefono numerį", + "LABEL": "Telefono numeris", + "HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]", + "ERROR": "Telefono numeris turi būti tuščias arba E.164 formato", + "DIAL_CODE_ERROR": "Sąraše pasirinkite skambinimo kodą", + "DUPLICATE": "Šis telefono numeris naudojamas kitam kontaktui." + }, + "LOCATION": { + "PLACEHOLDER": "Įveskite kontakto buvimo vietą", + "LABEL": "Vieta" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Įveskite įmonės pavadinimą", + "LABEL": "Įmonės pavadinimas" + }, + "COUNTRY": { + "PLACEHOLDER": "Įveskite šalies pavadinimą", + "LABEL": "Šalies Pavadinimas", + "SELECT_PLACEHOLDER": "Pasirinkti", + "REMOVE": "Pašalinti", + "SELECT_COUNTRY": "Pasirinkti Šalį" + }, + "CITY": { + "PLACEHOLDER": "Įveskite miesto pavadinimą", + "LABEL": "Miesto pavadinimas" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Įveskite Facebook vartotojo vardą", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Įveskite Twitter vartotojo vardą", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Įveskite LinkedIn vartotojo vardą", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Įveskite Github vartotojo vardą", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Kontakto avataras ištrintas sėkmingai", + "ERROR_MESSAGE": "Nepavyko ištrinti kontakto avataro. Pabandykite dar kartą vėliau." + } + }, + "SUCCESS_MESSAGE": "Kontaktas išsaugotas sėkmingai", + "ERROR_MESSAGE": "Įvyko klaida, prašau pabandykite dar kartą" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Pradėti pokalbį", + "TITLE": "Naujas pokalbis", + "DESC": "Pradėkite naują pokalbį išsiųsdami naują pranešimą.", + "NO_INBOX": "Nepavyko rasti gautų laiškų aplanko, kad būtų galima pradėti naują pokalbį su šiuo kontaktu.", + "FORM": { + "TO": { + "LABEL": "Kam" + }, + "INBOX": { + "LABEL": "Gautų laiškų aplankas", + "PLACEHOLDER": "Pasirinkti gautų laiškų aplanką", + "ERROR": "Pasirinkti gautų laiškų aplanką" + }, + "SUBJECT": { + "LABEL": "Tema", + "PLACEHOLDER": "Tema", + "ERROR": "Tema negali būti palikta tuščia" + }, + "MESSAGE": { + "LABEL": "Žinutė", + "PLACEHOLDER": "Rašykite pranešimą čia", + "ERROR": "Pranešimas negali būti tuščias" + }, + "ATTACHMENTS": { + "SELECT": "Pasirink failus", + "HELP_TEXT": "Nuvilkite failus čia arba pasirinkite failus, kuriuos norite pridėti" + }, + "SUBMIT": "Išsiųsti pranešimą", + "CANCEL": "Atšaukti", + "SUCCESS_MESSAGE": "Pranešimas įšsiųstas!", + "GO_TO_CONVERSATION": "Paržiūra", + "ERROR_MESSAGE": "Nepavyko išsiųsti! bandykite dar kartą" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Socialinių tinklų profiliai" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Pridėti personalizuotą požymį", + "COPY_SUCCESSFUL": "Sėkmingai nukopijuota į iškarpinę", + "SHOW_MORE": "Show all attributes", + "SHOW_LESS": "Show less attributes", + "ACTIONS": { + "COPY": "Kopijuoti požymį", + "DELETE": "Ištrinti požymį", + "EDIT": "Taisyti požymį" + }, + "ADD": { + "TITLE": "Sukurti personalizuotą požymį", + "DESC": "Pridėti personalizuotą informaciją šiam kontaktui." + }, + "FORM": { + "CREATE": "Pridėti požymį", + "CANCEL": "Atšaukti", + "NAME": { + "LABEL": "Personalizuoto požymio pavadinimas", + "PLACEHOLDER": "Pvz: shopify id", + "ERROR": "Neteisingas prsonalizuoto požymio pavadinimas" + }, + "VALUE": { + "LABEL": "Požymio reikšmė", + "PLACEHOLDER": "Pvz: 11901 " + }, + "ADD": { + "TITLE": "Sukurti naują požymį ", + "SUCCESS": "Požymis pridėtas sėkmingai", + "ERROR": "Nepavyko pridėti požymį. Pabandykite dar kartą vėliau" + }, + "UPDATE": { + "SUCCESS": "Požymis atnaujintas sėkmingai", + "ERROR": "Nepavyko atnaujinti požymio. Pabandykite dar kartą vėliau" + }, + "DELETE": { + "SUCCESS": "Požymis ištrintas sėkmingai", + "ERROR": "Nepavyko ištrinti požymio. Pabandykite dar kartą vėliau" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Pridėti požymius", + "PLACEHOLDER": "Ieškoti požymių", + "NO_RESULT": "Požymių nerasta" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Pasirinkti reikšmę", + "SEARCH_INPUT_PLACEHOLDER": "Ieškoti reikšmės", + "NO_RESULT": "Nieko nerasta" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Reikalinga tinkama vertė", + "INVALID_URL": "Neteisingas URL", + "INVALID_INPUT": "Neteisinga įvestis" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Sujungti kontaktus", + "DESCRIPTION": "Dviejų profilių sujungimui į vieną sujunkite kontaktus, įskaitant visus požymius ir pokalbius. Kilus nesuderinamumui, pirmenybė bus teikiama pirminio kontakto požymiams.", + "PRIMARY": { + "TITLE": "Pirminis kontaktas", + "HELP_LABEL": "Turi būti ištrinta" + }, + "PARENT": { + "TITLE": "Kontaktas sujungimui", + "PLACEHOLDER": "Ieškoti kontakto", + "HELP_LABEL": "Turi būti saugoma" + }, + "SUMMARY": { + "TITLE": "Santrauka", + "DELETE_WARNING": "Kontaktas {primaryContactName} bus ištrintas.", + "ATTRIBUTE_WARNING": "Kontakto informacija {primaryContactName} bus nukopijuota į {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": " Apjungti kontaktus", + "CANCEL": "Atšaukti", + "CHILD_CONTACT": { + "ERROR": "Pažymėkite kontaktą apjungimui" + }, + "SUCCESS_MESSAGE": "Kontaktas apjungtas sėkmingai", + "ERROR_MESSAGE": "Nepavyko apjungti kontaktų, bandykite dar kartą!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Kontaktai", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "Active contacts", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "Žinutė", + "SEND_MESSAGE": "Išsiųsti pranešimą", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "Kontaktai" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Add contact", + "EXPORT_CONTACT": "Export contacts", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Save contact", + "EMAIL_ADDRESS_DUPLICATE": "Šis el. pašto adresas naudojamas kitam kontaktui.", + "PHONE_NUMBER_DUPLICATE": "Šis telefono numeris naudojamas kitam kontaktui.", + "SUCCESS_MESSAGE": "Kontaktas išsaugotas sėkmingai", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "Šis kontaktas sėkmingai atblokuotas", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Import contacts", + "DESCRIPTION": "Importuoti kontaktus CSV failo pagalba.", + "DOWNLOAD_LABEL": "Užkrauti csv. pavyzdį.", + "LABEL": "CSV failas:", + "CHOOSE_FILE": "Choose file", + "CHANGE": "Keisti", + "CANCEL": "Atšaukti", + "IMPORT": "Importuoti", + "SUCCESS_MESSAGE": "Jūs gausite pranešimą el. paštu, kai importas bus užbaigtas.", + "ERROR_MESSAGE": "Įvyko klaida, prašau pabandykite dar kartą" + }, + "EXPORT_CONTACT": { + "TITLE": "Export contacts", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Eksportuoti", + "SUCCESS_MESSAGE": "Vykdomas eksportavimas. Jums bus pranešta el. paštu, kai eksporto failas bus paruoštas įkelti.", + "ERROR_MESSAGE": "Įvyko klaida, prašau pabandykite dar kartą" + }, + "SORT_BY": { + "LABEL": "Rūšiuoti pagal", + "OPTIONS": { + "NAME": "Vardas", + "EMAIL": "El. paštas", + "PHONE_NUMBER": "Telefono numeris", + "COMPANY": "Įmonė", + "COUNTRY": "Šalis", + "CITY": "Miestas", + "LAST_ACTIVITY": "Paskutiniai veiksmai", + "CREATED_AT": "Sukurta" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Ar nori išsaugoti šį filtrą?", + "CONFIRM": "Išsaugoti filtrą", + "LABEL": "Vardas", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "Patvirtinti Ištrynimą", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "Taip, Ištrinti", + "CANCEL": "Ne, atšaukti", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "Vardas", + "EMAIL": "El. paštas", + "PHONE_NUMBER": "Telefono numeris", + "IDENTIFIER": "Identifikatorius", + "COUNTRY": "Šalis", + "CITY": "Miestas", + "CREATED_AT": "Sukurta", + "LAST_ACTIVITY": "Paskutiniai veiksmai", + "REFERER_LINK": "Siuntimo nuoroda", + "BLOCKED": "Blocked", + "BLOCKED_TRUE": "Tiesa", + "BLOCKED_FALSE": "Netiesa", + "BUTTONS": { + "CLEAR_FILTERS": "Išvalyti filtrus", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "Taikyti filtrus", + "ADD_FILTER": "Pridėti Filtrą" + }, + "TITLE": "Filtruoti kontaktus", + "EDIT_SEGMENT": "Redaguoti segmentą", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Išvalyti filtrus" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "Pažiūrėti detaliau", + "EDIT_DETAILS_FORM": { + "TITLE": "Tvarkyti kontakto informaciją", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "Šis el. pašto adresas naudojamas kitam kontaktui." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "Šis telefono numeris naudojamas kitam kontaktui." + }, + "CITY": { + "PLACEHOLDER": "Įveskite miesto pavadinimą" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Įveskite įmonės pavadinimą" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "This action is permanent and irreversible.", + "BUTTON": "Delete now" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "Trinti kontaktą", + "DELETE_DIALOG": { + "TITLE": "Patvirtinti Ištrynimą", + "DESCRIPTION": "Are you sure you want to delete this contact?", + "CONFIRM": "Taip, Ištrinti", + "API": { + "SUCCESS_MESSAGE": "Agentas ištrintas sėkmingai", + "ERROR_MESSAGE": "Nepavyko ištrinti kontakto. Pabandykite dar kartą vėliau." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avataras ištrintas sėkmingai", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributes", + "HISTORY": "History", + "NOTES": "Pastabos", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "Su šiuo kontaktu nėra susietų ankstesnių pokalbių" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "Taip", + "NO": "Ne", + "TRIGGER": { + "SELECT": "Pasirinkti reikšmę", + "INPUT": "Enter value" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "Reikalinga tinkama vertė", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "Neteisingas URL", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "Požymių nerasta", + "API": { + "SUCCESS_MESSAGE": "Požymis atnaujintas sėkmingai", + "DELETE_SUCCESS_MESSAGE": "Požymis ištrintas sėkmingai", + "UPDATE_ERROR": "Nepavyko atnaujinti požymio. Pabandykite dar kartą vėliau", + "DELETE_ERROR": "Nepavyko ištrinti požymio. Pabandykite dar kartą vėliau" + } + }, + "MERGE": { + "TITLE": "Sujungti kontaktą", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Pirminis kontaktas", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "Turi būti ištrinta", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Ieškoti kontakto", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Kontaktas apjungtas sėkmingai", + "ERROR_MESSAGE": "Nepavyko apjungti kontaktų, bandykite dar kartą!", + "IS_SEARCHING": "Ieškoma...", + "BUTTONS": { + "CANCEL": "Atšaukti", + "CONFIRM": "Sujungti kontaktą" + } + }, + "NOTES": { + "PLACEHOLDER": "Pridėti pastabą", + "WROTE": "parašei", + "YOU": "Jūs", + "SAVE": "Save note", + "ADD_NOTE": "Add contact note", + "EXPAND": "Išskleisti", + "COLLAPSE": "Collapse", + "NO_NOTES": "No notes, you can add notes from the contact details page.", + "EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "No contacts found in this account", + "SUBTITLE": "Start adding new contacts by clicking on the button below", + "BUTTON_LABEL": "Add contact", + "SEARCH_EMPTY_STATE_TITLE": "Nė vienas kontaktas neatitinka jūsų paieškos 🔍", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Priskirti etiketes", + "ASSIGN_LABELS_SUCCESS": "Etiketės sėkmingai priskirtos.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "Ištrinti", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Trinti kontaktą" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "Paržiūra", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "Kam:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Tema :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "Bcc:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "Bcc" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Rašykite pranešimą čia..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Kintamieji", + "BACK": "Grįžti", + "SEND_MESSAGE": "Išsiųsti pranešimą" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Grįžti", + "SEND_MESSAGE": "Išsiųsti pranešimą" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/contactFilters.json b/app/javascript/dashboard/i18n/locale/lt/contactFilters.json new file mode 100644 index 0000000..75f48b5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filtruoti Kontaktus", + "SUBTITLE": "Toliau pridėkite filtrus ir paspauskite \"Pateikti\", kad filtruotumėte kontaktus.", + "EDIT_CUSTOM_SEGMENT": "Redaguoti segmentą", + "CUSTOM_VIEWS_SUBTITLE": "Pridėkite arba pašalinkite filtrus ir atnaujinkite segmentą.", + "ADD_NEW_FILTER": "Pridėti Filtrą", + "CLEAR_ALL_FILTERS": "Išvalyti visus filtrus", + "FILTER_DELETE_ERROR": "Turėtumėte turėti bent vieną filtrą, kad galėtumėte išsaugoti", + "SUBMIT_BUTTON_LABEL": "Pateikti", + "UPDATE_BUTTON_LABEL": "Atnaujinti segmentą", + "CANCEL_BUTTON_LABEL": "Atšaukti", + "CLEAR_BUTTON_LABEL": "Išvalyti filtrus", + "EMPTY_VALUE_ERROR": "Reikalinga vertė", + "SEGMENT_LABEL": "Segmento Pavadinimas", + "SEGMENT_QUERY_LABEL": "Segmento užklausa", + "TOOLTIP_LABEL": "Filtruoti kontaktus", + "QUERY_DROPDOWN_LABELS": { + "AND": "IR", + "OR": "AR" + }, + "OPERATOR_LABELS": { + "equal_to": "Lygu", + "not_equal_to": "Nelygu", + "contains": "Sudėtyje yra", + "does_not_contain": "Sudėtyje nėra", + "is_present": "Pateikiamas", + "is_not_present": "Nepateikiamas", + "is_greater_than": "Yra didensni nei", + "is_lesser_than": "Yra mažesnis nei", + "days_before": "Yra prieš x dienų" + }, + "ERRORS": { + "VALUE_REQUIRED": "Reikalinga vertė" + }, + "ATTRIBUTES": { + "NAME": "Vardas", + "EMAIL": "El. paštas", + "PHONE_NUMBER": "Telefono numeris", + "IDENTIFIER": "Identifikatorius", + "CITY": "Miestas", + "COUNTRY": "Šalis", + "CUSTOM_ATTRIBUTE_LIST": "Sąrašas", + "CUSTOM_ATTRIBUTE_TEXT": "Tekstas", + "CUSTOM_ATTRIBUTE_NUMBER": "Numeris", + "CUSTOM_ATTRIBUTE_LINK": "Nuoroda", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Žymimasis langelis", + "CREATED_AT": "Sukūrimo data", + "LAST_ACTIVITY": "Paskutiniai veiksmai", + "REFERER_LINK": "Rekomendacijos nuoroda", + "BLOCKED": "Blocked", + "LABELS": "Etiketės" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standartinis Filtras", + "ADDITIONAL_FILTERS": "Papildomas Filtras", + "CUSTOM_ATTRIBUTES": "Personalizuoti Požymiai" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/contentTemplates.json b/app/javascript/dashboard/i18n/locale/lt/contentTemplates.json new file mode 100644 index 0000000..81d2ee8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Ieškoti šablonų", + "NO_TEMPLATES_FOUND": "Šablonų nerasta", + "NO_CONTENT": "No content", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Kategorija", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Kalba", + "TEMPLATE_BODY": "Šablono tekstas", + "CATEGORY": "Kategorija" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Tekstas" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Kintamieji", + "LANGUAGE": "Kalba", + "CATEGORY": "Kategorija", + "VARIABLE_PLACEHOLDER": "Įveskite {variable} reikšmę", + "GO_BACK_LABEL": "Grįžti", + "SEND_MESSAGE_LABEL": "Išsiųsti pranešimą", + "FORM_ERROR_MESSAGE": "Prieš siųsdami užpildykite visus kintamuosius", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Atgal", + "SEND_MESSAGE_BUTTON": "Išsiųsti pranešimą" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/conversation.json b/app/javascript/dashboard/i18n/locale/lt/conversation.json new file mode 100644 index 0000000..6d8fca8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Kairiojoje srityje pasirinkite pokalbį", + "CSAT_REPLY_MESSAGE": "Prašome įvertinti pokalbį", + "404": "Atsiprašome, negalime rasti pokalbio. Prašau, pabandykite dar kartą", + "SWITCH_VIEW_LAYOUT": "Perjunkite išdėstymą", + "DASHBOARD_APP_TAB_MESSAGES": "Pranešimai", + "UNVERIFIED_SESSION": "Šio vartotojo tapatybė nepatvirtinta", + "NO_MESSAGE_1": "Oi! Panašu, kad jūsų gautų laiškų aplanke nėra pranešimų iš klientų.", + "NO_MESSAGE_2": " norėdami išsiųsti žinutę į savo puslapį!", + "NO_INBOX_1": "Sveiki! Panašu, kad dar nepridėjote jokių gautųjų laiškų aplanko.", + "NO_INBOX_2": " norint pradėti", + "NO_INBOX_AGENT": "Oi! Atrodo, kad nesate jokio gautų laiškų aplanko dalis. Susisiekite su administratoriumi", + "SEARCH_MESSAGES": "Ieškokite pranešimų pokalbiuose", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "norėdami atidaryti komandų meniu", + "KEYBOARD_SHORTCUTS": "norėdami peržiūrėti sparčiuosius klavišus" + }, + "SEARCH": { + "TITLE": "Ieškoti pranešimų", + "RESULT_TITLE": "Rezultatų Paieška", + "LOADING_MESSAGE": "Duomenys apdorojami...", + "PLACEHOLDER": "Parašykite tekstą pranešimų paieškai", + "NO_MATCHING_RESULTS": "Nieko nerasta." + }, + "UNREAD_MESSAGES": "Neperskaitytos žinutės", + "UNREAD_MESSAGE": "Neperskaityta žinutė", + "CLICK_HERE": "Paspausti čia", + "LOADING_INBOXES": "Įkeliami gautų laiškų aplankai", + "LOADING_CONVERSATIONS": "Pokalbiai parsiunčiami", + "CANNOT_REPLY": "Jūs negalite atsakyti dėl", + "24_HOURS_WINDOW": "Pranešimų apribojimas 24 valandoms", + "48_HOURS_WINDOW": "Pranešimų apribojimas 48 valandoms", + "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours", + "NOT_ASSIGNED_TO_YOU": "Šis pokalbis jums nepriskirtas. Ar norėtumėte priskirti šį pokalbį sau?", + "ASSIGN_TO_ME": "Priskirti man", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "Į šį pokalbį galite atsakyti tik naudodami šablono pranešimą, nes", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "Pranešimų apribojimas 24 valandoms", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "Jūs atsakote į:", + "REMOVE_SELECTION": "Pašalinti Pasirinkimą", + "DOWNLOAD": "Parsisiųsti", + "UNKNOWN_FILE_TYPE": "Nežinomas failas", + "SAVE_CONTACT": "Save Contact", + "NO_CONTENT": "No content to display", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} has shared a contact", + "LOCATION": "{sender} has shared a location", + "FILE": "{sender} has shared a file", + "MEETING": "{sender} pradėjo susitikimą" + }, + "UPLOADING_ATTACHMENTS": "Įkeliami priedai...", + "REPLIED_TO_STORY": "Atsakė į tavo pasakojimą", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "Ši žinutė nepalaikoma. Jūs galite peržiūrėti šią žinutę Facebook Messenger programėlėje.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "Ši žinutė nepalaikoma. Jūs galite peržiūrėti šią žinutę Instagram programėlėje.", + "SUCCESS_DELETE_MESSAGE": "Pranešimas ištrintas sėkmingai", + "FAIL_DELETE_MESSSAGE": "Nepavyko ištrinti pranešimo! Bandykite dar kartą", + "NO_RESPONSE": "Nėra atsakymo", + "RESPONSE": "Response", + "RATING_TITLE": "Reitingas", + "FEEDBACK_TITLE": "Grįžtamasis ryšys", + "REPLY_MESSAGE_NOT_FOUND": "Pranešimas nepasiekiamas", + "CARD": { + "SHOW_LABELS": "Rodyti etiketes", + "HIDE_LABELS": "Slėpti etiketes" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "Išspręsti", + "REOPEN_ACTION": "Atidarykite iš naujo", + "OPEN_ACTION": "Atidaryti", + "MORE_ACTIONS": "More actions", + "OPEN": "Daugiau", + "CLOSE": "Uždaryti", + "DETAILS": "smulkesnė informacija", + "SNOOZED_UNTIL": "Atidėta iki", + "SNOOZED_UNTIL_TOMORROW": "Atidėta iki rytojaus", + "SNOOZED_UNTIL_NEXT_WEEK": "Atidėta iki kitos savaitės", + "SNOOZED_UNTIL_NEXT_REPLY": "Atidėta iki kito atsakymo", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "missed", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Pažymėti kaip laukiantį", + "SNOOZE_UNTIL": "Atidėti", + "SNOOZE": { + "TITLE": "Atidėti iki", + "NEXT_REPLY": "Kitas atsakymas", + "TOMORROW": "Rytoj", + "NEXT_WEEK": "Kitą savaitę" + } + }, + "MENTION": { + "AGENTS": "Agentai", + "TEAMS": "Komandos" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Atidėti iki", + "APPLY": "Atidėti", + "CANCEL": "Atšaukti" + }, + "PRIORITY": { + "TITLE": "Prioritetas", + "OPTIONS": { + "NONE": "Nėra", + "URGENT": "Skubus", + "HIGH": "Aukštas", + "MEDIUM": "Vidutinis", + "LOW": "Žemas" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "Nėra", + "INPUT_PLACEHOLDER": "Pasirinkti prioritetą", + "NO_RESULTS": "Nieko nerasta", + "SUCCESSFUL": "Prioritetas pokalbiui id {conversationId} pakeistas į {priority}", + "FAILED": "Nepavyko pakeisti prioriteto. Prašau, pabandykite dar kartą." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Delete conversation #{conversationId}", + "DESCRIPTION": "Are you sure you want to delete this conversation?", + "CONFIRM": "Ištrinti" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Pažymėti kaip laukiantį", + "RESOLVED": "Pažymėti kaip išspręstą", + "MARK_AS_UNREAD": "Pažymėti kaip neperskaitytą", + "MARK_AS_READ": "Mark as read", + "REOPEN": "Atidaryti pokalbį", + "SNOOZE": { + "TITLE": "Atidėti", + "NEXT_REPLY": "Iki kito atsakymo", + "TOMORROW": "Iki rytojaus", + "NEXT_WEEK": "Iki kitos savaitės" + }, + "ASSIGN_AGENT": "Priskirti Agentą", + "ASSIGN_LABEL": "Priskirti etiketę", + "AGENTS_LOADING": "Agentai užkraunami...", + "ASSIGN_TEAM": "Priskirti komandą", + "DELETE": "Delete conversation", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Pokalbis id {conversationId} priskirtas \"{agentName}\"", + "FAILED": "Nepavyko priskirti agento. Prašau, pabandykite dar kartą." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Nepavyko priskirti etiketės. Prašau, pabandykite dar kartą." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Priskirta komanda #{team} pokalbiui id {conversationId}", + "FAILED": "Nepavyko priskirti komandos. Prašau, pabandykite dar kartą." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Pranešimo parašas", + "ENABLE_SIGN_TOOLTIP": "Įjungti parašą", + "DISABLE_SIGN_TOOLTIP": "Išjungti parašą", + "MSG_INPUT": "Spauksite Shift + Enter, pradėjimui iš naujos eilutės. Pradėkite nuo „/“, kad pasirinktumėte Atsakymo Ruošinį.", + "PRIVATE_MSG_INPUT": "Spauksite Shift + Enter, pradėjimui iš naujos eilutės. Tai bus matoma tik Agentams", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Pranešimo parašas nesukonfigūruotas, sukonfigūruokite jį profilio nustatymuose.", + "CLICK_HERE": "Spausti čia kad atnaujinti", + "WHATSAPP_TEMPLATES": "Whatsapp Šablonai" + }, + "REPLYBOX": { + "REPLY": "Atsakyti", + "PRIVATE_NOTE": "Privati pastaba", + "SEND": "Siųsti", + "CREATE": "Pridėti pastabą", + "INSERT_READ_MORE": "Skaityti daugiau", + "DISMISS_REPLY": "Atšaukti atsakymą", + "REPLYING_TO": "Atsakant į:", + "TIP_EMOJI_ICON": "Parodyti emodžio parinkiklį", + "TIP_ATTACH_ICON": "Pridėti failus", + "TIP_AUDIORECORDER_ICON": "Įrašyti audio", + "TIP_AUDIORECORDER_PERMISSION": "Leisti prieiti prie audio", + "TIP_AUDIORECORDER_ERROR": "Nepavyko atidaryti audio", + "DRAG_DROP": "Norėdami pridėti, vilkite ir numeskite čia", + "START_AUDIO_RECORDING": "Pradėti audio įrašymą", + "STOP_AUDIO_RECORDING": "Baigti audio įrašymą", + "": "", + "EMAIL_HEAD": { + "TO": "Kam", + "ADD_BCC": "Pridėti bcc", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "El. laiškai atskirti kableliais", + "ERROR": "Prašau įveskite teisingą el. pašto adresą" + }, + "BCC": { + "LABEL": "BCC", + "PLACEHOLDER": "El. laiškai atskirti kableliais", + "ERROR": "Prašau įveskite teisingą el. pašto adresą" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Neapibrėžti kintamieji", + "MESSAGE": "Jūsų pranešime yra {undefinedVariablesCount} neapibrėžtų kintamųjų: {undefinedVariables}. Ar vis tiek norėtumėte išsiųsti žinutę?", + "CONFIRM": { + "YES": "Siųsti", + "CANCEL": "Atšaukti" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "Privati pastaba: matoma tik jums ir jūsų komandai", + "CHANGE_STATUS": "Pokalbio būsena pakeista", + "CHANGE_STATUS_FAILED": "Pokalbio būsenos nepavyko pakeisti", + "CHANGE_AGENT": "Pasikeitė pokalbiui priskirtas asmuo", + "CHANGE_AGENT_FAILED": "Priskirto asmens pakeitimas nepavyko", + "ASSIGN_LABEL_SUCCESFUL": "Etiketė sėkmingai priskirta", + "ASSIGN_LABEL_FAILED": "Etiketės priskirti nepavyko", + "CHANGE_TEAM": "Pasikeitė pokalbių komanda", + "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", + "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", + "FILE_SIZE_LIMIT": "Failas viršija {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB priedo apribojimą", + "MESSAGE_ERROR": "Nepavyko išsiųsti šio pranešimo, bandykite dar kartą vėliau", + "SENT_BY": "Siuntėjas:", + "BOT": "Botas", + "SEND_FAILED": "Nepavyko išsiųsti pranešimo! Bandykite dar kartą", + "TRY_AGAIN": "kartoti", + "ASSIGNMENT": { + "SELECT_AGENT": "Pasirinkti agentą", + "REMOVE": "Pašalinti", + "ASSIGN": "Priskirti" + }, + "CONTEXT_MENU": { + "COPY": "Kopijuoti", + "REPLY_TO": "Atsakyti į šią žinutę", + "DELETE": "Ištrinti", + "CREATE_A_CANNED_RESPONSE": "Pridėti Atsakymų Ruošinius", + "TRANSLATE": "Išversti", + "COPY_PERMALINK": "Nukopijuoti nuorodą į pranešimą", + "LINK_COPIED": "Pranešimo URL nukopijuotas į iškarpinę", + "DELETE_CONFIRMATION": { + "TITLE": "Ar tikrai norite ištrinti šį pranešimą?", + "MESSAGE": "Negalite anuliuoti šio veiksmo", + "DELETE": "Ištrinti", + "CANCEL": "Atšaukti" + } + }, + "SIDEBAR": { + "CONTACT": "Kontaktas", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Siųsti poklabio stenogramą", + "DESC": "Siųsti pokalbio stenogramos kopiją nurodytu el. pašto adresu", + "SUBMIT": "Pateikti", + "CANCEL": "Atšaukti", + "SEND_EMAIL_SUCCESS": "Pokalbio stenograma sėkmingai išsiųsta", + "SEND_EMAIL_ERROR": "Įvyko klaida, prašau pabandykite dar kartą", + "FORM": { + "SEND_TO_CONTACT": "Siųsti stenogramą klientui", + "SEND_TO_AGENT": "Siųsti stenogramą priskirtam agentui", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Siųsti stenogramą kitu el. pašto adresu", + "EMAIL": { + "PLACEHOLDER": "Įvesti el. pašto adresą", + "ERROR": "Prašau įveskite teisingą el. pašto adresą" + } + } + }, + "ONBOARDING": { + "TITLE": "Sveiki 👋, Sveiki atvykę į {installationName}!", + "DESCRIPTION": "Ačiū, kad užsiregistravote. Norime, kad išnaudotumėte visas {installationName} galimybes. Štai keletas dalykų, kuriuos galite padaryti naudodami {installationName}, kad patirtis būtų maloni.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "Skaitykite mūsų naujausius atnaujinimus", + "ALL_CONVERSATION": { + "TITLE": "Visi jūsų pokalbiai vienoje vietoje", + "DESCRIPTION": "Peržiūrėkite visus savo klientų pokalbius vienoje informacijos suvestinėje. Galite filtruoti pokalbius pagal gaunamą kanalą, etiketę ir būseną.", + "NEW_LINK": "Spustelėkite čia, kad sukurtumėte gautų laiškų aplanką" + }, + "TEAM_MEMBERS": { + "TITLE": "Pakvieskite savo komandos narius", + "DESCRIPTION": "Kadangi ruošiatės kalbėtis su savo klientu, pasikvieskite savo komandos draugus, kad jie jums padėtų. Galite pakviesti savo komandos draugus įtraukę jų el. pašto adresus į agentų sąrašą.", + "NEW_LINK": "Spustelėkite čia, kad pakviestumėte komandos narį" + }, + "LABELS": { + "TITLE": "Tvarkykite pokalbius etiketėmis", + "DESCRIPTION": "Etiketės suteikia lengvesnį būdą suskirstyti pokalbį į kategorijas. Sukurkite keletą etikečių, pvz., #palaikymo-klausimas, #atsiskaitymo-klausimas ir kt., kad vėliau galėtumėte jas naudoti pokalbyje.", + "NEW_LINK": "Spustelėkite čia, kad sukurtumėte žymas" + }, + "CANNED_RESPONSES": { + "TITLE": "Create canned responses", + "DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.", + "NEW_LINK": "Click here to create a canned response" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Priskirtas Agentas", + "SELF_ASSIGN": "Priskirti man", + "TEAM_LABEL": "Priskirta komanda", + "SELECT": { + "PLACEHOLDER": "Nėra" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Kontakto detali informacija", + "CONVERSATION_ACTIONS": "Pokalbio veiksmai", + "CONVERSATION_LABELS": "Pokalbio Etiketės", + "CONVERSATION_INFO": "Pokalbio Informacija", + "CONTACT_NOTES": "Contact Notes", + "CONTACT_ATTRIBUTES": "Kontakto Požymiai", + "PREVIOUS_CONVERSATION": "Ankstesni pokalbiai", + "MACROS": "Makrokomandos", + "LINEAR_ISSUES": "Linked Linear Issues", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "Laukiama", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Sukurti požymį", + "NO_RECORDS_FOUND": "Požymių nerasta", + "UPDATE": { + "SUCCESS": "Požymis atnaujintas sėkmingai", + "ERROR": "Nepavyko atnaujinti požymio. Pabandykite dar kartą vėliau" + }, + "ADD": { + "TITLE": "Pridėti", + "SUCCESS": "Požymis pridėtas sėkmingai", + "ERROR": "Nepavyko pridėti požymį. Pabandykite dar kartą vėliau" + }, + "DELETE": { + "SUCCESS": "Požymis ištrintas sėkmingai", + "ERROR": "Nepavyko ištrinti požymio. Pabandykite dar kartą vėliau" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Pridėti požymius", + "PLACEHOLDER": "Ieškoti požymių", + "NO_RESULT": "Požymių nerasta" + } + }, + "EMAIL_HEADER": { + "FROM": "Nuo", + "TO": "Kam", + "BCC": "Bcc", + "CC": "Cc", + "SUBJECT": "Tema", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Dalyvaujantys", + "SIDEBAR_TITLE": "Pokalbio dalyviai", + "NO_RECORDS_FOUND": "Nieko nerasta", + "ADD_PARTICIPANTS": "Pasirinkti dalyvius", + "REMANING_PARTICIPANTS_TEXT": "+{count} kiti", + "REMANING_PARTICIPANT_TEXT": "+{count} kitas", + "TOTAL_PARTICIPANTS_TEXT": "{count} dalyvauja žmonių.", + "TOTAL_PARTICIPANT_TEXT": "{count} dalyvauja asmenų.", + "NO_PARTICIPANTS_TEXT": "Niekas nedalyvauja!.", + "WATCH_CONVERSATION": "Prisijungti pire pokalbio", + "YOU_ARE_WATCHING": "Jūs dalyvaujate", + "API": { + "ERROR_MESSAGE": "Nepavyko atnaujinti, bandykite dar kartą!", + "SUCCESS_MESSAGE": "Dalyviai atnaujinti!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "Rodyti išverstą turinį", + "DESC": "Galite peržiūrėti išverstą turinį kiekviena kalba.", + "ORIGINAL_CONTENT": "Originalus turinys", + "TRANSLATED_CONTENT": "Išverstas turinys", + "NO_TRANSLATIONS_AVAILABLE": "Nėra šio turinio vertimo" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/csatMgmt.json b/app/javascript/dashboard/i18n/locale/lt/csatMgmt.json new file mode 100644 index 0000000..ffad43d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Įvertinkite savo pokalbį", + "PLACEHOLDER": "Papasakokit detaliau...", + "RATINGS": { + "POOR": "😞 Blogai", + "FAIR": "😑 Neblogai", + "AVERAGE": "😐 Vidutiniškai", + "GOOD": "😀 Gerai", + "EXCELLENT": "😍 Puikiai" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/customRole.json b/app/javascript/dashboard/i18n/locale/lt/customRole.json new file mode 100644 index 0000000..e647989 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Custom Roles", + "LEARN_MORE": "Learn more about custom roles", + "DESCRIPTION": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "HEADER_BTN_TXT": "Add custom role", + "LOADING": "Fetching custom roles...", + "SEARCH_404": "Šią užklausą atitinkančių elementų nėra.", + "PAYWALL": { + "TITLE": "Upgrade to create custom roles", + "AVAILABLE_ON": "The custom role feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The custom role feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Manage custom roles", + "DESC": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "TABLE_HEADER": { + "NAME": "Vardas", + "DESCRIPTION": "Aprašymas", + "PERMISSIONS": "Permissions", + "ACTIONS": "Veiksmai" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "Vardas", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "Yra reikalingas vardas." + }, + "DESCRIPTION": { + "LABEL": "Aprašymas", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "Būtinas aprašymas." + }, + "PERMISSIONS": { + "LABEL": "Permissions", + "ERROR": "Permissions are required." + }, + "CANCEL_BUTTON_TEXT": "Atšaukti", + "API": { + "ERROR_MESSAGE": "Nepavyko prisijungti prie Woot serverio. Bandykite dar kartą vėliau." + } + }, + "ADD": { + "TITLE": "Add custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Pateikti", + "API": { + "SUCCESS_MESSAGE": "Custom role added successfully." + } + }, + "EDIT": { + "BUTTON_TEXT": "Redaguoti", + "TITLE": "Edit custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Atnaujinti", + "API": { + "SUCCESS_MESSAGE": "Custom role updated successfully." + } + }, + "DELETE": { + "BUTTON_TEXT": "Ištrinti", + "API": { + "SUCCESS_MESSAGE": "Custom role deleted successfully.", + "ERROR_MESSAGE": "Nepavyko prisijungti prie Woot serverio. Bandykite dar kartą vėliau." + }, + "CONFIRM": { + "TITLE": "Patvirtinti Ištrynimą", + "MESSAGE": "Ar tikrai norite ištrinti ", + "YES": "Taip, Trinti ", + "NO": "Ne, Išsaugoti " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/datePicker.json b/app/javascript/dashboard/i18n/locale/lt/datePicker.json new file mode 100644 index 0000000..307e936 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Taikyti", + "CLEAR_BUTTON": "Clear", + "DATE_RANGE_INPUT": { + "START": "Start Date", + "END": "End Date" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "DATE RANGE", + "LAST_7_DAYS": "Paskutines 7 dienas", + "LAST_30_DAYS": "Paskutines 30 dienų", + "LAST_3_MONTHS": "Paskutinius 3 mėnesius", + "LAST_6_MONTHS": "Paskutinius 6 mėnesius", + "LAST_YEAR": "Paskutinius metus", + "CUSTOM_RANGE": "Pritaikytas datos intervalas" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/emoji.json b/app/javascript/dashboard/i18n/locale/lt/emoji.json new file mode 100644 index 0000000..76adca9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Ieškoti emodžių", + "NOT_FOUND": "Jūsų paieška neatitinka jokių emodži", + "REMOVE": "Pašalinti" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/general.json b/app/javascript/dashboard/i18n/locale/lt/general.json new file mode 100644 index 0000000..e311da0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Showing {firstIndex}-{lastIndex} of {totalCount} items", + "PHONE_INPUT": { + "PLACEHOLDER": "Ieškoti", + "EMPTY_STATE": "Nieko nerasta" + }, + "CLOSE": "Uždaryti", + "BETA": "Beta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/generalSettings.json b/app/javascript/dashboard/i18n/locale/lt/generalSettings.json new file mode 100644 index 0000000..5ac0b32 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.", + "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.", + "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.", + "NON_ADMIN": "Please contact your administrator to upgrade the plan and continue using all features." + }, + "TITLE": "Paskyros nustatymai", + "SUBMIT": "Atnaujinti nustatymai", + "BACK": "Atgal", + "DISMISS": "Atsisakyti", + "UPDATE": { + "ERROR": "Nepavyko atnaujinti nustatymų, bandykite dar kartą!", + "SUCCESS": "Sėkmingai atnaujinti paskyros nustatymai" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Delete your Account", + "NOTE": "Once you delete your account, all your data will be deleted.", + "BUTTON_TEXT": "Delete Your Account", + "CONFIRM": { + "TITLE": "Delete Account", + "MESSAGE": "Deleting your Account is irreversible. Enter your account name below to confirm you want to permanently delete it.", + "BUTTON_TEXT": "Ištrinti", + "DISMISS": "Atšaukti", + "PLACE_HOLDER": "Įveskite {accountName}, kad patvirtintumėte" + }, + "SUCCESS": "Account marked for deletion", + "FAILURE": "Could not delete account, try again!", + "SCHEDULED_DELETION": { + "TITLE": "Account Scheduled for Deletion", + "MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.", + "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.", + "CLEAR_BUTTON": "Cancel Scheduled Deletion" + } + }, + "FORM": { + "ERROR": "Ištaisykite formos klaidas", + "GENERAL_SECTION": { + "TITLE": "Pagrindiniai nustatymai", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "Paskyros ID", + "NOTE": "Šis ID reikalingas, jei kuriate API pagrįstą integraciją" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.", + "DURATION": { + "LABEL": "Inactivity duration", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Preferences", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "Paskyros vardas", + "PLACEHOLDER": "Tavo paskyros vardas", + "ERROR": "Įveskite galiojantį paskyros vardą" + }, + "LANGUAGE": { + "LABEL": "Pasirinkti kalbą", + "PLACEHOLDER": "Tavo paskyros vardas", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Įeinančio el. pašto domenas", + "PLACEHOLDER": "Domenas, kuriuo gausite el. laiškus", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "Pagalbos el. paštas", + "PLACEHOLDER": "Jūsų įmonės pagalbos el. paštas", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclude unattended conversations", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a conversation should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "Atnaujinti", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "Jūsų paskyroje leistas pokalbių tęstinumas su el. laiškais.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "Dabar galite gauti el. laiškus pasirinktame domene." + } + }, + "UPDATE_CHATWOOT": "Yra Chatwoot naujinimas {latestChatwootVersion}. Atnaujinkite savo versiją.", + "LEARN_MORE": "Sužinoti daugiau", + "PAYMENT_PENDING": "Laukiama jūsų mokėjimo. Atnaujinkite savo mokėjimo informaciją, kad galėtumėte toliau naudoti Chatwoot", + "UPGRADE": "Upgrade to continue using Chatwoot", + "LIMITS_UPGRADE": "Jūsų paskyra viršijo naudojimo apribojimus, atnaujinkite savo planą, kad galėtumėte toliau naudoti Chatwoot", + "OPEN_BILLING": "Atidaryti mokėjimą" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Paspauskite Enter, kad pasirinktumėte", + "ENTER_TO_REMOVE": "Paspausti Enter, kad pašalintumėte", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "Pasirinkti vieną", + "SELECT": "Pasirinkti" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Perspėjimai", + "MARK_ALL_DONE": "Pažymėti viską kaip atliktą", + "DELETE_TITLE": "ištrinta", + "UNREAD_NOTIFICATION": { + "TITLE": "Neperskaityti Perspėjimai", + "ALL_NOTIFICATIONS": "Rodyti visus perspėjimus", + "LOADING_UNREAD_MESSAGE": "Neperskaityti perspėjimai parsiunčiami...", + "EMPTY_MESSAGE": "Turite neperskaitytų perspėjimų" + }, + "LIST": { + "LOADING_MESSAGE": "Perspėjimai parsiunčiami...", + "404": "Nėra Perspėjimų", + "TABLE_HEADER": [ + "Vardas", + "Telefono numeris", + "Pokalbiai", + "Paskutinį kartą susisiekta" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "Naujas pokalbis", + "conversation_assignment": "Pokalbis priskirtas", + "assigned_conversation_new_message": "Naujas pranešimas", + "participating_conversation_new_message": "Naujas pranešimas", + "conversation_mention": "Paminėjimas", + "sla_missed_first_response": "SLA Missed", + "sla_missed_next_response": "SLA Missed", + "sla_missed_resolution": "SLA Missed" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Atsijungęs", + "RECONNECTING": "Reconnecting...", + "RECONNECT_SUCCESS": "Reconnected" + }, + "BUTTON": { + "REFRESH": "Atnaujinti" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Ieškoti ar pereiti į", + "SECTIONS": { + "GENERAL": "Pagrindinis", + "REPORTS": "Ataskaitos", + "CONVERSATION": "Pokalbis", + "BULK_ACTIONS": "Bulk Actions", + "CHANGE_ASSIGNEE": "Pakeisti Priskirtąjį", + "CHANGE_PRIORITY": "Pakeisti Prioritetą", + "CHANGE_TEAM": "Pakeisti Komandą", + "SNOOZE_CONVERSATION": "Atidėti Pokalbį", + "ADD_LABEL": "Pridėti etiketę pokalbiui", + "REMOVE_LABEL": "Pašalinti pokalbio etiketę", + "SETTINGS": "Nustatymai", + "AI_ASSIST": "AI pagalba", + "APPEARANCE": "Išvaizda", + "SNOOZE_NOTIFICATION": "Atidėti pranešimą" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Eikite į Pokalbio informacijos skydelį", + "GO_TO_CONTACTS_DASHBOARD": "Eikite į Kontaktų informacijos skydelį", + "GO_TO_REPORTS_OVERVIEW": "Eiti į Ataskaitų apžvalgą", + "GO_TO_CONVERSATION_REPORTS": "Eiti į Pokalbių Ataskaitas", + "GO_TO_AGENT_REPORTS": "Eiti į Agento Ataskaitas", + "GO_TO_LABEL_REPORTS": "Eiti į Etiketės Ataskaitas", + "GO_TO_INBOX_REPORTS": "Eiti į Gautų Laiškų Aplanko Ataskaitas", + "GO_TO_TEAM_REPORTS": "Eiti į Komandos Ataskaitas", + "GO_TO_SETTINGS_AGENTS": "Eiti į Agento Nustatymus", + "GO_TO_SETTINGS_TEAMS": "Eiti į Komandos Nustatymus", + "GO_TO_SETTINGS_INBOXES": "Eiti į Gautų Laiškų Aplanko Nustatymus", + "GO_TO_SETTINGS_LABELS": "Eiti į Etiketės Nustatymus", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Eiti į Atsakymų Ruošinių Nustatymus", + "GO_TO_SETTINGS_APPLICATIONS": "Eiti į Programos Nustatymus", + "GO_TO_SETTINGS_ACCOUNT": "Eiti į Paskyros Nustatymus", + "GO_TO_SETTINGS_PROFILE": "Eiti į Profilio Nustatymus", + "GO_TO_NOTIFICATIONS": "Eikite į Perspėjimus", + "ADD_LABELS_TO_CONVERSATION": "Pridėti etiketę pokalbiui", + "ASSIGN_AN_AGENT": "Priskirti Agentą", + "AI_ASSIST": "AI pagalba", + "ASSIGN_PRIORITY": "Nustatyti prioritetą", + "ASSIGN_A_TEAM": "Priskirti komandą", + "MUTE_CONVERSATION": "Tildyti pokalbį", + "UNMUTE_CONVERSATION": "Įjungti pokalbio garsą", + "REMOVE_LABEL_FROM_CONVERSATION": "Pašalinti pokalbio etiketę", + "REOPEN_CONVERSATION": "Atidaryti pokalbį", + "RESOLVE_CONVERSATION": "Išspręsti pokalbį", + "SEND_TRANSCRIPT": "Siųsti stenogramą el. laišku", + "SNOOZE_CONVERSATION": "Atidėti Pokalbį", + "UNTIL_NEXT_REPLY": "Iki kito atsakymo", + "UNTIL_NEXT_WEEK": "Iki kitos savaitės", + "UNTIL_TOMORROW": "Iki rytojaus", + "UNTIL_NEXT_MONTH": "Iki kito mėnesio", + "AN_HOUR_FROM_NOW": "Iki valandos nuo dabar", + "UNTIL_CUSTOM_TIME": "Personalizuotas...", + "CHANGE_APPEARANCE": "Keisti išvaizdą", + "LIGHT_MODE": "Šviesus", + "DARK_MODE": "Tamsus", + "SYSTEM_MODE": "Sistema", + "SNOOZE_NOTIFICATION": "Atidėti pranešimą" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Paleidžiama informacijos suvestinės programa..." + }, + "COMMON": { + "OR": "Ar", + "CLICK_HERE": "paspausti čia" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/helpCenter.json b/app/javascript/dashboard/i18n/locale/lt/helpCenter.json new file mode 100644 index 0000000..25b96ba --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Palaikymo centras", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "Sukurti Portalą" + }, + "HEADER": { + "FILTER": "Filtruoti pagal", + "SORT": "Rūšiuoti pagal", + "LOCALE": "Lokalizacija", + "SETTINGS_BUTTON": "Nustatymai", + "NEW_BUTTON": "Naujas Straipsnis", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Paskelbta", + "DRAFT": "Ruošinys", + "ARCHIVED": "Suarchyvuota" + }, + "TITLES": { + "ALL_ARTICLES": "Visi Straipsniai", + "MINE": "Mano Straipsniai", + "DRAFT": "Straipsnių juodraščiai", + "ARCHIVED": "Suarchyvuoti Straipsniai" + }, + "LOCALE_SELECT": { + "TITLE": "Select locale", + "PLACEHOLDER": "Select locale", + "NO_RESULT": "No locale found", + "SEARCH_PLACEHOLDER": "Search locale" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "Visi Straipsniai", + "PUBLISH_BUTTON": "Skelbti", + "MOVE_TO_ARCHIVE_BUTTON": "Perkelti į archyvuotą", + "PREVIEW": "Peržiūrėti", + "ADD_TRANSLATION": "Pridėti vertimą", + "OPEN_SIDEBAR": "Atidaryti šoninę juostą", + "CLOSE_SIDEBAR": "Uždaryti šoninę juostą", + "SAVING": "Išsaugoma...", + "SAVED": "Išsaugota" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Įkelti paveikslėlį", + "UPLOADING": "Įkeliama...", + "SUCCESS": "Paveiksliukas sėkmingai įkeltas", + "ERROR": "Klaida įkeliant paveiksliuką", + "UN_AUTHORIZED_ERROR": "You are not authorized to upload images", + "ERROR_FILE_SIZE": "Paveiksliuko dydis turi būti mažesnis nei {size} MB", + "ERROR_FILE_FORMAT": "Paveiksliuko formatas turi būti jpg, jpeg arba png", + "ERROR_FILE_DIMENSIONS": "Paveiksliuko matmenys turi būti mažesni nei 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Straipsnio Nustatymai", + "FORM": { + "CATEGORY": { + "LABEL": "Kategorija", + "TITLE": "Pasirinkti kategoriją", + "PLACEHOLDER": "Pasirinkti kategoriją", + "NO_RESULT": "Kategorijų nerasta", + "SEARCH_PLACEHOLDER": "Ieškoti kategorijos" + }, + "AUTHOR": { + "LABEL": "Autorius", + "TITLE": "Pasirinkite autorių", + "PLACEHOLDER": "Pasirinkite autorių", + "NO_RESULT": "Autorių nerasta", + "SEARCH_PLACEHOLDER": "Ieškoti autoriaus" + }, + "META_TITLE": { + "LABEL": "Meta antraštė", + "PLACEHOLDER": "Pridėkite meta antraštę" + }, + "META_DESCRIPTION": { + "LABEL": "Meta aprašymas", + "PLACEHOLDER": "Pridėkite meta aprašą, kad gautumėte geresnius SEO rezultatų..." + }, + "META_TAGS": { + "LABEL": "Meta žymos", + "PLACEHOLDER": "Pridėti meta žymes, atskirtas kableliais..." + } + }, + "BUTTONS": { + "ARCHIVE": "Archyvuoti straipsnį", + "DELETE": "Ištrinti straipsnį" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Neįtraukta į kategorijas", + "SEARCH_RESULTS": "Search results for {query}", + "EMPTY_TEXT": "Search for articles to insert into replies.", + "SEARCH_LOADER": "Ieškoma...", + "INSERT_ARTICLE": "Įterpti", + "NO_RESULT": "Straipsnių nerasta", + "COPY_LINK": "Nukopijuokite straipsnio nuorodą į iškarpinę", + "OPEN_LINK": "Atidaryti straipsnį naujame skirtuke", + "PREVIEW_LINK": "Straipsnio peržiūra" + }, + "PORTAL": { + "HEADER": "Portalas", + "DEFAULT": "Pagal nutylėjimą", + "NEW_BUTTON": "Naujas portalas", + "ACTIVE_BADGE": "aktyvus", + "CHOOSE_LOCALE_LABEL": "Pasirinkite lokalizaciją", + "LOADING_MESSAGE": "Įkeliami portalai...", + "ARTICLES_LABEL": "straipsniai", + "NO_PORTALS_MESSAGE": "Nėra pasiekiamų portalų", + "ADD_NEW_LOCALE": "Pridėti naują lokalizaciją", + "POPOVER": { + "TITLE": "Portalas", + "PORTAL_SETTINGS": "Portalo nustatymai", + "SUBTITLE": "Turite kelis portalus ir kiekvienam portalui galite turėti skirtingas lokalizacijas.", + "CANCEL_BUTTON_LABEL": "Atšaukti", + "CHOOSE_LOCALE_BUTTON": "Pasirinkite lokalizaciją" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "straipsniai", + "ADD": "Pridėti lokalizaciją", + "VISIT": "Apsilankykite svetainėje", + "SETTINGS": "Nustatymai", + "DELETE": "Ištrinti" + }, + "PORTAL_CONFIG": { + "TITLE": "Portalo konfiguracija", + "ITEMS": { + "NAME": "Vardas", + "DOMAIN": "Personalizuotas domenas", + "SLUG": "Slug", + "TITLE": "Portalo antraštė", + "THEME": "Temos spalva", + "SUB_TEXT": "Portalo subtekstas" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Prieinamos personalizacijos", + "TABLE": { + "NAME": "Vietos pavadinimas", + "CODE": "Vietos kodas", + "ARTICLE_COUNT": "Straipsnių kiekis", + "CATEGORIES": "Kategorijų kiekis", + "SWAP": "Sukeisti", + "DELETE": "Ištrinti", + "DEFAULT_LOCALE": "Pagal nutylėjimą" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Trinti portalą", + "MESSAGE": "Ar tikrai norite ištrinti šį portalą", + "YES": "Taip, trinti portalą", + "NO": "Ne, išlaikyti portalą", + "API": { + "DELETE_SUCCESS": "Portalas ištrintas sėkmingai", + "DELETE_ERROR": "Trinant portalą įvyko klaida" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Portalo redagavimas", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Pagrindinė informacija" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portalo pritaikymas" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Kategorijos" + }, + "LOCALE_SETTINGS": { + "TITLE": "Lokalizacija" + } + }, + "CATEGORIES": { + "TITLE": "Kategorijos", + "NEW_CATEGORY": "Nauja kategorija", + "TABLE": { + "NAME": "Vardas", + "DESCRIPTION": "Aprašymas", + "LOCALE": "Lokalizacija", + "ARTICLE_COUNT": "Straipsnių kiekis", + "ACTION_BUTTON": { + "EDIT": "Keisti kategoriją", + "DELETE": "Ištrinti kategoriją" + }, + "EMPTY_TEXT": "Kategorijų nerasta" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Atnaujinkite pagrindinius nustatymus" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Pagalbos centro informacija", + "BODY": "Pagrindinė informacija apie portalą" + }, + "CUSTOMIZATION": { + "TITLE": "Pagalbos centro pritaikymas", + "BODY": "Portalo pritaikymas" + }, + "FINISH": { + "TITLE": "Baigta! 🎉", + "BODY": "Viskas paruošta!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Atgal", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Sukurti Portalą", + "TITLE": "Pagalbos centro informacija", + "CREATE_BASIC_SETTING_BUTTON": "Sukurkite pagrindinius portalo nustatymus" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Portalo pritaikymas", + "TITLE": "Pagalbos centro pritaikymas", + "UPDATE_PORTAL_BUTTON": "Atnaujinkite portalo nustatymus" + }, + "FINISH_PAGE": { + "TITLE": "Baigta!🎉 Viskas paruošta!", + "MESSAGE": "Dabar galite pamatyti šį sukurtą portalą visų portalų puslapyje.", + "FINISH": "Eikite į visų portalų puslapį" + } + }, + "LOGO": { + "LABEL": "Logotipas", + "UPLOAD_BUTTON": "Įkelti logotipą", + "HELP_TEXT": "Šis logotipas bus rodomas portalo antraštėje.", + "IMAGE_UPLOAD_SUCCESS": "Logo uploaded successfully", + "IMAGE_UPLOAD_ERROR": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Error while deleting logo" + }, + "NAME": { + "LABEL": "Vardas", + "PLACEHOLDER": "Portalo pavadinimas", + "HELP_TEXT": "Pavadinimas bus naudojamas viešajame portale.", + "ERROR": "Yra reikalingas vardas" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portalo slug url adresui", + "ERROR": "Yra reikalingas slug" + }, + "DOMAIN": { + "LABEL": "Personalizuotas domenas", + "PLACEHOLDER": "Portalo personalizuotas domenas", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}", + "ERROR": "Įveskite galiojantį domaino URL" + }, + "HOME_PAGE_LINK": { + "LABEL": "Nuoroda į pagrindinį puslapį", + "PLACEHOLDER": "Portalo nuoroda į pagrindinį puslapį", + "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}", + "ERROR": "Įveskite galiojantį pagrindinio puslapio URL" + }, + "THEME_COLOR": { + "LABEL": "Portalo temos spalva", + "HELP_TEXT": "Ši spalva bus rodoma kaip portalo temos spalva." + }, + "PAGE_TITLE": { + "LABEL": "Puslapio Antraštė", + "PLACEHOLDER": "Portalo puslapio antraštė", + "HELP_TEXT": "Puslapio pavadinimas bus naudojamas viešame portale.", + "ERROR": "Yra reikalingas puslapio pavadinimas" + }, + "HEADER_TEXT": { + "LABEL": "Antraštės tekstas", + "PLACEHOLDER": "Portalo antraštės tekstas", + "HELP_TEXT": "Portalo antraštės tekstas bus naudojamas viešame portale.", + "ERROR": "Yra reikalingas portalo antraštės tekstas" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portalas sukurtas sėkmingai.", + "ERROR_MESSAGE_FOR_BASIC": "Nepavyko sukurti portalo. Bandykite dar kartą.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portalas atnaujintas sėkmingai.", + "ERROR_MESSAGE_FOR_UPDATE": "Nepavyko atnaujinti portalo. Bandykite dar kartą." + } + }, + "ADD_LOCALE": { + "TITLE": "Pridėti naują lokalizaciją", + "SUB_TITLE": "Tai prideda naują lokalizaciją prie galimų vertimų sąrašo.", + "PORTAL": "Portalas", + "LOCALE": { + "LABEL": "Lokalizacija", + "PLACEHOLDER": "Pasirinkite lokalizaciją", + "ERROR": "Yra reikalinga lokalizacija" + }, + "BUTTONS": { + "CREATE": "Sukurti lokalizaciją", + "CANCEL": "Atšaukti" + }, + "API": { + "SUCCESS_MESSAGE": "Lokalizacija sėkmingai pridėta", + "ERROR_MESSAGE": "Nepavyko pridėti lokalizacijos. Bandykite dar kartą." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Numatytoji lokalizacija sėkmingai atnaujinta", + "ERROR_MESSAGE": "Nepavyko atnaujinti numatytosios lokalizacijos. Bandykite dar kartą." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Lokalizacija sėkmingai pašalinta iš portalo", + "ERROR_MESSAGE": "Nepavyko pašalinti lokalizacijos iš portalo. Bandykite dar kartą." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Įkeliami straipsniai...", + "404": "Nė vienas straipsnis neatitinka jūsų paieškos 🔍", + "NO_ARTICLES": "Nėra pasiekiamų straipsnių", + "HEADERS": { + "TITLE": "Pavadinimas", + "CATEGORY": "Kategorija", + "READ_COUNT": "Views", + "STATUS": "Būsena", + "LAST_EDITED": "Paskutinį kartą redaguota" + }, + "COLUMNS": { + "BY": "pateikė", + "AUTHOR_NOT_AVAILABLE": "Author is not available" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Įkeliamas straipsnis...", + "TITLE_PLACEHOLDER": "Straipsnio pavadinimas pateikiamas čia", + "CONTENT_PLACEHOLDER": "Rašykite straipsnį čia", + "API": { + "ERROR": "Išsaugant straipsnį įvyko klaida" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Skelbiant straipsnį įvyko klaida", + "SUCCESS": "Straipsnis sėkmingai paskelbtas" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Archyvuojant straipsnį įvyko klaida", + "SUCCESS": "Straipsnis sėkmingai suarchyvuotas" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Error while drafting article", + "SUCCESS": "Article drafted successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Patvirtinti Ištrynimą", + "MESSAGE": "Ar tikrai norite ištrinti straipsnį?", + "YES": "Taip, Ištrinti", + "NO": "Ne, Išsaugoti" + } + }, + "API": { + "SUCCESS_MESSAGE": "Straipsnis ištrintas sėkmingai", + "ERROR_MESSAGE": "Trinant straipsnį įvyko klaida" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Pridėkite straipsnio antraštę ir turinį, tada tik jūs galėsite atnaujinti nustatymus" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Ieškoti straipsnių" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Sukurti kategoriją", + "SUB_TITLE": "Kategorija bus naudojama viešajame portale straipsniams skirstyti į kategorijas.", + "PORTAL": "Portalas", + "LOCALE": "Lokalizacija", + "NAME": { + "LABEL": "Vardas", + "PLACEHOLDER": "Kategorijos pavadinimas", + "HELP_TEXT": "Kategorijos pavadinimas ir piktograma bus naudojamas viešajame portale straipsniams skirstyti į kategorijas.", + "ERROR": "Yra reikalingas vardas" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug kategorija, skirta URL", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Yra reikalingas slug" + }, + "DESCRIPTION": { + "LABEL": "Aprašymas", + "PLACEHOLDER": "Pateikite trumpą kategorijos aprašymą.", + "ERROR": "Būtinas aprašymas" + }, + "BUTTONS": { + "CREATE": "Sukurti kategoriją", + "CANCEL": "Atšaukti" + }, + "API": { + "SUCCESS_MESSAGE": "Kategorija sukurta sėkmingai", + "ERROR_MESSAGE": "Nepavyko sukurti kategorijos" + } + }, + "EDIT": { + "TITLE": "Keisti kategoriją", + "SUB_TITLE": "Kategorijos redagavimas atnaujins kategoriją viešajame portale.", + "PORTAL": "Portalas", + "LOCALE": "Lokalizacija", + "NAME": { + "LABEL": "Vardas", + "PLACEHOLDER": "Kategorijos pavadinimas", + "HELP_TEXT": "Kategorijos pavadinimas ir piktograma bus naudojamas viešajame portale straipsniams skirstyti į kategorijas.", + "ERROR": "Yra reikalingas vardas" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug kategorija, skirta URL", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Yra reikalingas slug" + }, + "DESCRIPTION": { + "LABEL": "Aprašymas", + "PLACEHOLDER": "Pateikite trumpą kategorijos aprašymą.", + "ERROR": "Būtinas aprašymas" + }, + "BUTTONS": { + "CREATE": "Keisti kategoriją", + "CANCEL": "Atšaukti" + }, + "API": { + "SUCCESS_MESSAGE": "Kategorija atnaujinta sėkmingai", + "ERROR_MESSAGE": "Nepavyko atnaujinti kategorijos" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Kategorija sėkmingai ištrinta", + "ERROR_MESSAGE": "Nepavyko ištrinti kategorijos" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Ieškoti straipsnių", + "PLACEHOLDER": "Ieškoti straipsnių", + "NO_RESULT": "Straipsnių nerasta", + "SEARCHING": "Ieškoma...", + "SEARCH_BUTTON": "Ieškoti", + "INSERT_ARTICLE": "Įterpti nuorodą", + "IFRAME_ERROR": "URL is empty or invalid. Unable to display content.", + "OPEN_ARTICLE_SEARCH": "Insert article from Help Center", + "SUCCESS_ARTICLE_INSERTED": "Straipsnis patalpintas sėkmingai", + "PREVIEW_LINK": "Straipsnio peržiūra", + "CANCEL": "Uždaryti", + "BACK": "Atgal", + "BACK_RESULTS": "Back to results" + }, + "UPGRADE_PAGE": { + "TITLE": "Palaikymo centras", + "DESCRIPTION": "Sukurti patogius savitarnos portalus. Padėkite savo vartotojams pasiekti straipsnius ir gauti palaikymą 24 valandas per parą, 7 dienas per savaitę. Atnaujinkite savo prenumeratą, kad įjungtumėte šią funkciją.", + "SELF_HOSTED_DESCRIPTION": "Sukurti patogius savitarnos portalus. Padėkite savo vartotojams pasiekti straipsnius ir gauti palaikymą 24 valandas per parą, 7 dienas per savaitę. Norėdami įjungti šią funkciją, susisiekite su administratoriumi.", + "BUTTON": { + "LEARN_MORE": "Sužinoti daugiau", + "UPGRADE": "Patobulinti" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Keletas portalų", + "DESCRIPTION": "Sukurkite kelis pagalbos centro portalus skirtingiems produktams naudodami tą pačią paskyrą." + }, + "LOCALES": { + "TITLE": "Lokalizacijos yra pilnai palaikomos", + "DESCRIPTION": "Lokalizuokite portalą savo kalba. Mes palaikome visas kalbas ir leidžiame kiekvieno straipsnio vertimus." + }, + "SEO": { + "TITLE": "Paieškos variklio optimizavimui draugiškas dizainas", + "DESCRIPTION": "Customize your meta tags to improve your visibility on search engines with our SEO-friendly pages." + }, + "API": { + "TITLE": "Pilnas API palaikymas", + "DESCRIPTION": "Use the portal as a headless CMS with third party front-end frameworks using our APIs." + } + } + }, + "LOADING": "Loading...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} view | {count} views", + "DROPDOWN_MENU": { + "PUBLISH": "Skelbti", + "DRAFT": "Ruošinys", + "ARCHIVE": "Archive", + "DELETE": "Ištrinti" + }, + "STATUS": { + "DRAFT": "Ruošinys", + "PUBLISHED": "Paskelbta", + "ARCHIVED": "Suarchyvuota" + }, + "CATEGORY": { + "UNCATEGORISED": "Uncategorised" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "All articles", + "MINE": "Mano", + "DRAFT": "Ruošinys", + "PUBLISHED": "Paskelbta", + "ARCHIVED": "Suarchyvuota" + }, + "CATEGORY": { + "ALL": "All categories" + }, + "LOCALE": { + "ALL": "All locales" + }, + "NEW_ARTICLE": "New article" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Write an article", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "New article" + }, + "MINE": { + "TITLE": "You haven't written any articles here", + "SUBTITLE": "All articles written by you show up here for quick access." + }, + "DRAFT": { + "TITLE": "There are no articles in drafts", + "SUBTITLE": "Draft articles will appear here" + }, + "PUBLISHED": { + "TITLE": "There are no published articles", + "SUBTITLE": "Published articles will appear here" + }, + "ARCHIVED": { + "TITLE": "There are no articles in the archive", + "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages" + }, + "CATEGORY": { + "TITLE": "There are no articles in this category", + "SUBTITLE": "Articles in this category will appear here" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "Nauja kategorija", + "EDIT_CATEGORY": "Keisti kategoriją", + "CATEGORIES_COUNT": "{n} category | {n} categories", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categories ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "Kategorijų nerasta", + "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Kategorija sukurta sėkmingai", + "ERROR_MESSAGE": "Nepavyko sukurti kategorijos" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Kategorija atnaujinta sėkmingai", + "ERROR_MESSAGE": "Nepavyko atnaujinti kategorijos" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Kategorija sėkmingai ištrinta", + "ERROR_MESSAGE": "Nepavyko ištrinti kategorijos" + } + }, + "HEADER": { + "CREATE": "Sukurti kategoriją", + "EDIT": "Keisti kategoriją", + "DESCRIPTION": "Kategorijos redagavimas atnaujins kategoriją viešajame portale.", + "PORTAL": "Portalas", + "LOCALE": "Lokalizacija" + }, + "FORM": { + "NAME": { + "LABEL": "Vardas", + "PLACEHOLDER": "Kategorijos pavadinimas", + "ERROR": "Yra reikalingas vardas" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug kategorija, skirta URL", + "ERROR": "Yra reikalingas slug", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Aprašymas", + "PLACEHOLDER": "Pateikite trumpą kategorijos aprašymą.", + "ERROR": "Būtinas aprašymas" + } + }, + "BUTTONS": { + "CREATE": "Sukurti", + "EDIT": "Atnaujinti", + "CANCEL": "Atšaukti" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "No locales available | {n} locale | {n} locales", + "NEW_LOCALE_BUTTON_TEXT": "New locale", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles", + "CATEGORIES_COUNT": "{count} category | {count} categories", + "DEFAULT": "Pagal nutylėjimą", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Make default", + "DELETE": "Ištrinti" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Pridėti naują lokalizaciją", + "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", + "COMBOBOX": { + "PLACEHOLDER": "Select locale..." + }, + "API": { + "SUCCESS_MESSAGE": "Lokalizacija sėkmingai pridėta", + "ERROR_MESSAGE": "Nepavyko pridėti lokalizacijos. Bandykite dar kartą." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Išsaugoma...", + "SAVED": "Išsaugota" + }, + "PREVIEW": "Peržiūrėti", + "PUBLISH": "Skelbti", + "DRAFT": "Ruošinys", + "ARCHIVE": "Archive", + "BACK_TO_ARTICLES": "Back to articles" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "More properties", + "UNCATEGORIZED": "Neįtraukta į kategorijas", + "EDITOR_PLACEHOLDER": "Write something..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Article properties", + "META_DESCRIPTION": "Meta aprašymas", + "META_DESCRIPTION_PLACEHOLDER": "Add meta description", + "META_TITLE": "Meta antraštė", + "META_TITLE_PLACEHOLDER": "Add meta title", + "META_TAGS": "Meta žymos", + "META_TAGS_PLACEHOLDER": "Add meta tags" + }, + "API": { + "ERROR": "Išsaugant straipsnį įvyko klaida" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "New portal", + "PORTALS": "Portalas", + "CREATE_PORTAL": "Create and manage multiple portals", + "ARTICLES": "straipsniai", + "DOMAIN": "domenas", + "PORTAL_NAME": "Portalo pavadinimas" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Create new portal", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "Sukurti", + "NAME": { + "LABEL": "Vardas", + "PLACEHOLDER": "User Guide | Chatwoot", + "MESSAGE": "Choose an name for your portal.", + "ERROR": "Yra reikalingas vardas" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Yra reikalingas slug", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logotipas", + "IMAGE_UPLOAD_ERROR": "Nepavyko įkelti vaizdo! Prašau, pabandykite dar kartą", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo", + "IMAGE_DELETE_SUCCESS": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Unable to delete logo", + "IMAGE_UPLOAD_SIZE_ERROR": "Paveiksliuko dydis turi būti mažesnis nei {size} MB" + }, + "NAME": { + "LABEL": "Vardas", + "PLACEHOLDER": "Portalo pavadinimas", + "ERROR": "Yra reikalingas vardas" + }, + "HEADER_TEXT": { + "LABEL": "Header text", + "PLACEHOLDER": "Portalo antraštės tekstas" + }, + "PAGE_TITLE": { + "LABEL": "Page title", + "PLACEHOLDER": "Portalo puslapio antraštė" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home page link", + "PLACEHOLDER": "Portalo nuoroda į pagrindinį puslapį", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Live chat widget", + "PLACEHOLDER": "Select live chat widget", + "HELP_TEXT": "Select a live chat widget that will appear on your help center", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Brand color" + }, + "SAVE_CHANGES": "Save changes" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Personalizuotas domenas", + "LABEL": "Personalizuotas domenas:", + "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Portalo personalizuotas domenas", + "EDIT_BUTTON": "Redaguoti", + "ADD_BUTTON": "Add custom domain", + "STATUS": { + "LIVE": "Tiesiogiai", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Add custom domain", + "EDIT_HEADER": "Edit custom domain", + "ADD_CONFIRM_BUTTON_LABEL": "Add domain", + "EDIT_CONFIRM_BUTTON_LABEL": "Update domain", + "LABEL": "Personalizuotas domenas", + "PLACEHOLDER": "Portalo personalizuotas domenas", + "ERROR": "Custom domain is required", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS configuration", + "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "Siųsti" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Delete {portalName}", + "HEADER": "Trinti portalą", + "DESCRIPTION": "Permanently delete this portal. This action is irreversible", + "DIALOG": { + "HEADER": "Sure you want to delete {portalName}?", + "DESCRIPTION": "This is a permanent action that cannot be reversed.", + "CONFIRM_BUTTON_LABEL": "Ištrinti" + } + }, + "EDIT_CONFIGURATION": "Edit configuration" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portalas sukurtas sėkmingai", + "ERROR_MESSAGE": "Unable to create portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portalas atnaujintas sėkmingai", + "ERROR_MESSAGE": "Unable to update portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "Įkeliama...", + "UPLOAD": "Upload & Process", + "CANCEL": "Atšaukti", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Sukurti...", + "CONFIRM_DELETE": "Are you sure you want to delete {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Užbaigta", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/inbox.json b/app/javascript/dashboard/i18n/locale/lt/inbox.json new file mode 100644 index 0000000..56ad772 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "My Inbox", + "DISPLAY_DROPDOWN": "Display", + "LOADING": "Fetching notifications", + "404": "There are no active notifications in this group.", + "NO_NOTIFICATIONS": "No notifications", + "NOTE": "Notifications from all subscribed inboxes", + "NO_MESSAGES_AVAILABLE": "Oops! Not able to fetch messages", + "SNOOZED_UNTIL": "Atidėta iki", + "SNOOZED_UNTIL_TOMORROW": "Atidėta iki rytojaus", + "SNOOZED_UNTIL_NEXT_WEEK": "Atidėta iki kitos savaitės" + }, + "ACTION_HEADER": { + "SNOOZE": "Snooze notification", + "DELETE": "Delete notification", + "BACK": "Atgal" + }, + "TYPES": { + "CONVERSATION_MENTION": "You have been mentioned in a conversation", + "CONVERSATION_CREATION": "New conversation created", + "CONVERSATION_ASSIGNMENT": "A conversation has been assigned to you", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message in a conversation you are participating in", + "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation", + "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation", + "SLA_MISSED_RESOLUTION": "SLA target resolution missed for conversation" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Mentioned", + "CONVERSATION_ASSIGNMENT": "Assigned to you", + "CONVERSATION_CREATION": "New Conversation", + "SLA_MISSED_FIRST_RESPONSE": "SLA breach", + "SLA_MISSED_NEXT_RESPONSE": "SLA breach", + "SLA_MISSED_RESOLUTION": "SLA breach", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Naujas pranešimas", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Naujas pranešimas", + "SNOOZED_UNTIL": "Snoozed for {time}", + "SNOOZED_ENDS": "Snooze ended" + }, + "NO_CONTENT": "Nėra turinio", + "MENU_ITEM": { + "MARK_AS_READ": "Mark as read", + "MARK_AS_UNREAD": "Pažymėti kaip neperskaitytą", + "SNOOZE": "Atidėti", + "DELETE": "Ištrinti", + "MARK_ALL_READ": "Mark all as read", + "DELETE_ALL": "Delete all", + "DELETE_ALL_READ": "Delete all read" + }, + "DISPLAY_MENU": { + "SORT": "Sort", + "DISPLAY": "Display :", + "SORT_OPTIONS": { + "NEWEST": "Newest", + "OLDEST": "Oldest", + "PRIORITY": "Prioritetas" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Atidėta", + "READ": "Skaityti", + "LABELS": "Etiketės", + "CONVERSATION_ID": "Conversation ID" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notification marked as read", + "MARK_AS_UNREAD": "Notification marked as unread", + "SNOOZE": "Notification snoozed", + "DELETE": "Notification deleted", + "MARK_ALL_READ": "All notifications marked as read", + "DELETE_ALL": "All notifications deleted", + "DELETE_ALL_READ": "All read notifications deleted" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json new file mode 100644 index 0000000..3661297 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Gautų laiškų aplankai", + "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.", + "LEARN_MORE": "Learn more about inboxes", + "RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.", + "CLICK_TO_RECONNECT": "Click here to reconnect.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "Prie šios paskyros nėra pridėtų gautųjų laiškų aplankų." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Pasirinkti Kanalą", + "BODY": "Pasirinkite paslaugų teikėją, kurį norite integruoti su Chatwoot." + }, + "INBOX": { + "TITLE": "Sukurti Gautų Laiškų Aplanką", + "BODY": "Autentifikuokite savo paskyrą ir susikurkite gautų laiškų aplanką." + }, + "AGENT": { + "TITLE": "Pridėti Agentus", + "BODY": "Pridėti agentus pire gautų laiškų oplanko." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "Esate pasiruošę pradėti!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Gautų Laiškų Aplanko Pavadinimas", + "PLACEHOLDER": "Įveskite savo gautų laiškų aplanko pavadinimą (pvz.: Acme Inc)", + "ERROR": "Prašome įrašyti teisingą gautų laiškų aplanko pavadinimą" + }, + "WEBSITE_NAME": { + "LABEL": "Intenetinio Puslapio pavadinimas", + "PLACEHOLDER": "Įveskite savo internetinio puslapio pavadinimą (pvz.: Acme Inc)" + }, + "FB": { + "HELP": "PS: Po autorizacijos turėsime prieigą tik prie jūsų pranešimų puslapyje. Chatwoot asmeniniai pranešimai nebus pasiekiami.", + "CHOOSE_PAGE": "Pasirinkti Puslapį", + "CHOOSE_PLACEHOLDER": "Psirinkti puslapį iš sąrašo", + "INBOX_NAME": "Gautų Laiškų Aplanko Pavadinimas", + "ADD_NAME": "Prašome įrašyti gautų laiškų aplanko pavadinimą", + "PICK_NAME": "Pick a Name for your Inbox", + "PICK_A_VALUE": "Pasirinkti reikšmę", + "CREATE_INBOX": "Sukurti Gautų Laiškų Aplanką" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continue with Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile", + "HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ", + "ERROR_MESSAGE": "There was an error connecting to Instagram, please try again", + "ERROR_AUTH": "There was an error connecting to Instagram, please try again", + "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "Norėdami pridėti savo Twitter profilį kaip kanalą, turite patvirtinti savo Twitter profilį spustelėdami „Prisijungti naudojant Twitter“ ", + "ERROR_MESSAGE": "Prisijungiant prie Twitter įvyko klaida. Bandykite dar kartą", + "TWEETS": { + "ENABLE": "Kurkite pokalbius iš minėtų tweetų" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Interneto svetainės kanalas", + "DESC": "Sukurkite kanalą savo svetainei ir pradėkite palaikyti savo klientus naudodami mūsų svetainės valdiklį.", + "LOADING_MESSAGE": "Intenetinio puslapio palaikymo kanalo kūrimas", + "CHANNEL_AVATAR": { + "LABEL": "Kanalo Avataras" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "Please enter your Webhook URL", + "ERROR": "Prašome įvesti tesingą URL adresą" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Internetinio svetainės domenas", + "PLACEHOLDER": "Įveskite savo internetinės svetainės pavadinimą (pvz.: Acme Inc)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Pasisveikinimo antraštė", + "PLACEHOLDER": "Sveiki!" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Pasisveikinimo tekstas", + "PLACEHOLDER": "Su mumis susisiekti yra paprasta. Klauskite mūsų bet ko arba pasidalykite savo atsiliepimais." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Kanalo pasisveikinimo pranešimas", + "PLACEHOLDER": "Acme Inc paprastai atsako per kelias valandas." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Leisti kanalo pasisveikinimą", + "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", + "ENABLED": "Leisti", + "DISABLED": "Išjungta" + }, + "REPLY_TIME": { + "TITLE": "Nustatyti Atsakymo laiką", + "IN_A_FEW_MINUTES": "Per kelias minutes", + "IN_A_FEW_HOURS": "Per kelias minutes", + "IN_A_DAY": "Per dieną", + "HELP_TEXT": "Šis atsakymo laikas bus rodomas tiesioginio pokalbio valdiklyje" + }, + "WIDGET_COLOR": { + "LABEL": "Valdiklio Spalva", + "PLACEHOLDER": "Atnaujinkite valdiklyje naudojamą valdiklio spalvą" + }, + "SUBMIT_BUTTON": "Sukurti Gautų Laiškų Aplanką", + "API": { + "ERROR_MESSAGE": "Nepavyko sukurti svetainės kanalo, bandykite dar kartą" + } + }, + "TWILIO": { + "TITLE": "Twilio SMS/Whatsapp Kanalas", + "DESC": "Integruokite Twilio ir pradėkite komunikuoti su savo klientais SMS ar WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "Paskyros SID", + "PLACEHOLDER": "Įveskite Twilio paskyros SID", + "ERROR": "Šis laukas yra privalomas" + }, + "API_KEY": { + "USE_API_KEY": "Naudokite API Key autentifikavimą", + "LABEL": "API Key SID", + "PLACEHOLDER": "Įveskite savo API Key SID", + "ERROR": "Šis laukas yra privalomas" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Įveskite savo API Key Secret", + "ERROR": "Šis laukas yra privalomas" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "Pranešimų siuntimo paslaugos SID", + "PLACEHOLDER": "Įveskite jūsų Twilio pranešimų siuntimo paslaugos SID", + "ERROR": "Šis laukas yra privalomas", + "USE_MESSAGING_SERVICE": "Naudokite Twilio pranešimų siuntimo paslaugą" + }, + "CHANNEL_TYPE": { + "LABEL": "Kanalo tipas", + "ERROR": "Pasirinkite savo Kanalo Tipą" + }, + "AUTH_TOKEN": { + "LABEL": "Prieigos Raktas", + "PLACEHOLDER": "Įveskite Twilio paskyros prieigos raktą", + "ERROR": "Šis laukas yra privalomas" + }, + "CHANNEL_NAME": { + "LABEL": "Gautų Laiškų Aplanko Pavadinimas", + "PLACEHOLDER": "Prašome įrašyti gautų laiškų aplanko pavadinimą", + "ERROR": "Šis laukas yra privalomas" + }, + "PHONE_NUMBER": { + "LABEL": "Telefono numeris", + "PLACEHOLDER": "Įveskite telefono numerį iš kurio bus siunčiamas pranešimas.", + "ERROR": "Pateikite galiojantį telefono numerį, kuris prasideda „+“ ženklu ir kuriame nėra tarpų." + }, + "API_CALLBACK": { + "TITLE": "Automatinio atskambinimo URL", + "SUBTITLE": "Turite sukonfigūruoti pranešimo atgalinio skambinimo URL Twilio su čia nurodytu URL." + }, + "SUBMIT_BUTTON": "Sukurti Twilio kanalą", + "API": { + "ERROR_MESSAGE": "Nepavyko autentifikuoti Twilio, bandykite dar kartą" + } + }, + "SMS": { + "TITLE": "SMS kanalas", + "DESC": "Pradėkite palaikyti savo klientus naudodami SMS.", + "PROVIDERS": { + "LABEL": "API tiekėjas", + "TWILIO": "Twilio", + "BANDWIDTH": "Pralaidumas" + }, + "API": { + "ERROR_MESSAGE": "Mes negalėjome išsaugoti SMS kanalo" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "Paskyros ID", + "PLACEHOLDER": "Įveskite savo Bandwith Paskyros ID", + "ERROR": "Šis laukas yra privalomas" + }, + "API_KEY": { + "LABEL": "API raktas", + "PLACEHOLDER": "Please enter your Bandwidth API Key", + "ERROR": "Šis laukas yra privalomas" + }, + "API_SECRET": { + "LABEL": "API Secret", + "PLACEHOLDER": "Please enter your Bandwidth API Secret", + "ERROR": "Šis laukas yra privalomas" + }, + "APPLICATION_ID": { + "LABEL": "Programos ID", + "PLACEHOLDER": "Įveskite savo Bandwith Programos ID", + "ERROR": "Šis laukas yra privalomas" + }, + "INBOX_NAME": { + "LABEL": "Gautų Laiškų Aplanko Pavadinimas", + "PLACEHOLDER": "Prašome įrašyti gautų laiškų aplanko pavadinimą", + "ERROR": "Šis laukas yra privalomas" + }, + "PHONE_NUMBER": { + "LABEL": "Telefono numeris", + "PLACEHOLDER": "Įveskite telefono numerį iš kurio bus siunčiamas pranešimas.", + "ERROR": "Pateikite galiojantį telefono numerį, kuris prasideda „+“ ženklu ir kuriame nėra tarpų." + }, + "SUBMIT_BUTTON": "Sukurti Bandwidth Kanalą", + "API": { + "ERROR_MESSAGE": "Nepavyko autentifikuoti Bandwidth, bandykite dar kartą" + }, + "API_CALLBACK": { + "TITLE": "Automatinio atskambinimo URL", + "SUBTITLE": "Turite sukonfigūruoti pranešimo atgalinio skambinimo URL Bandwidth su čia nurodytu URL." + } + } + }, + "WHATSAPP": { + "TITLE": "WhatsApp Kanalas", + "DESC": "Pradėkite palaikyti savo klientus naudodami WhatsApp.", + "PROVIDERS": { + "LABEL": "API tiekėjas", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "Gautų Laiškų Aplanko Pavadinimas", + "PLACEHOLDER": "Prašome įrašyti kanalo pavadinimą", + "ERROR": "Šis laukas yra privalomas" + }, + "PHONE_NUMBER": { + "LABEL": "Telefono numeris", + "PLACEHOLDER": "Įveskite telefono numerį iš kurio bus siunčiamas pranešimas.", + "ERROR": "Pateikite galiojantį telefono numerį, kuris prasideda „+“ ženklu ir kuriame nėra tarpų." + }, + "PHONE_NUMBER_ID": { + "LABEL": "Telefono numerio ID", + "PLACEHOLDER": "Įveskite telefono numerį, gautą iš Facebook valdymo skydelio.", + "ERROR": "Prašau įveskite teisingą reikšmę." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "Įmonės paskyros ID", + "PLACEHOLDER": "Įveskite Įmonės paskyros ID, gautą iš Facebook valdymo skydelio.", + "ERROR": "Prašau įveskite teisingą reikšmę." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook Tikrinti Prieigos Raktą", + "PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.", + "ERROR": "Prašau įveskite teisingą reikšmę." + }, + "API_KEY": { + "LABEL": "API raktas", + "SUBTITLE": "Konfiguruoti WhatsApp API key.", + "PLACEHOLDER": "API raktas", + "ERROR": "Prašau įveskite teisingą reikšmę." + }, + "API_CALLBACK": { + "TITLE": "Automatinio atskambinimo URL", + "SUBTITLE": "Turite sukonfigūruoti webhook URL ir patvirtinimo prieigos raktą Facebook portale, naudodami toliau nurodytas reikšmes.", + "WEBHOOK_URL": "Webhook URL", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook Patikros Prieigos Raktas" + }, + "SUBMIT_BUTTON": "Sukurti WhatsApp Kanalą", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "Mes negalėjome išsaugoti WhatsApp kanalo" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "Telefono numeris", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "Paskyros SID", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "Prieigos Raktas", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "API Key SID", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "API kanalas", + "DESC": "Integruokite API kanalą ir pradėkite komunikuoti su savo klientais.", + "CHANNEL_NAME": { + "LABEL": "Kanalo Pavadinimas", + "PLACEHOLDER": "Prašome įrašyti kanalo pavadinimą", + "ERROR": "Šis laukas yra privalomas" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "SUBTITLE": "Configure the URL where you want to receive callbacks on events.", + "PLACEHOLDER": "Webhook URL" + }, + "SUBMIT_BUTTON": "Sukurti API kanalą", + "API": { + "ERROR_MESSAGE": "Mes negalėjome išsaugoti API kanalo" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "El. pašto kanalas", + "DESC": "Integrate your email inbox.", + "CHANNEL_NAME": { + "LABEL": "Kanalo Pavadinimas", + "PLACEHOLDER": "Prašome įrašyti kanalo pavadinimą", + "ERROR": "Šis laukas yra privalomas" + }, + "EMAIL": { + "LABEL": "El. paštas", + "SUBTITLE": "Email where your customers sends you support tickets", + "PLACEHOLDER": "El. paštas" + }, + "SUBMIT_BUTTON": "Sukurti El. pašto kanalą", + "API": { + "ERROR_MESSAGE": "Mes negalėjome išsaugoti el. pašto kanalo" + }, + "FINISH_MESSAGE": "Pradėkite peradresuoti savo el. laiškus toliau nurodytu el. pašto adresu.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "Paspausti čia", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "LINE kanalas", + "DESC": "Integruokite LINE kanalą ir pradėkite komunikuoti su savo klientais.", + "CHANNEL_NAME": { + "LABEL": "Kanalo Pavadinimas", + "PLACEHOLDER": "Prašome įrašyti kanalo pavadinimą", + "ERROR": "Šis laukas yra privalomas" + }, + "LINE_CHANNEL_ID": { + "LABEL": "LINE kanalo ID", + "PLACEHOLDER": "LINE kanalo ID" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "LINE Kanalo Secret", + "PLACEHOLDER": "LINE Kanalo Secret" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "LINE Kanalo Prieigos Raktas", + "PLACEHOLDER": "LINE Kanalo Prieigos Raktas" + }, + "SUBMIT_BUTTON": "Sukurti LINE kanalą", + "API": { + "ERROR_MESSAGE": "Mes negalėjome išsaugoti LINE kanalo" + }, + "API_CALLBACK": { + "TITLE": "Automatinio atskambinimo URL", + "SUBTITLE": "Turite sukonfigūruoti LINE programoje Webhook URL, su čia nurodytu URL." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Telegram Kanalas", + "DESC": "Integruokite Telegram kanalą ir pradėkite komunikuoti su savo klientais.", + "BOT_TOKEN": { + "LABEL": "Boto Prieigos Raktas", + "SUBTITLE": "Sukonfigūruokite boto prieigos raktą, kurį gavote iš Telegram BotFather.", + "PLACEHOLDER": "Boto Prieigos Raktas" + }, + "SUBMIT_BUTTON": "Sukurti Telegram kanalą", + "API": { + "ERROR_MESSAGE": "Mes negalėjome išsaugoti telegram kanalo" + } + }, + "AUTH": { + "TITLE": "Pasirinkti Kanalą", + "DESC": "Chatwoot palaiko tiesioginio pokalbio valdiklius, Facebook Messenger, Twitter profilius, WhatsApp, el. laiškus ir kt. kaip kanalus. Jei norite sukurti personalizuotą kanalą, galite jį sukurti naudodami API kanalą. Norėdami pradėti, pasirinkite vieną iš toliau pateiktų kanalų.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Internetinis puslapis", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "El. paštas", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Agentai", + "DESC": "Čia galite pridėti agentų, kad galėtumėte tvarkyti naujai sukurtus gautų laiškų aplanką. Tik šie pasirinkti agentai turės prieigą prie jūsų gautų laiškų aplanko. Agentai, kurie nėra šio dalis, prisijungę negalės matyti pranešimų arba atsakyti į juos.Webhooks
Webhooks yra HTTP užklausos, kurias galima nustatyti kiekvienai paskyrai. Juos suaktyvina tokie įvykiai kaip pranešimų kūrimas Chatwoot. Šiai paskyrai galite sukurti daugiau nei vieną webhook.
Norėdami sukurti webhook, spustelėkite mygtuką Pridėti naują webhook. Taip pat galite pašalinti bet kurį esamą webhook spustelėdami mygtuką Ištrinti.
Informacinio skydelio programos
Informacinio skydelio programos leidžia organizacijoms įterpti programą į Chatwood valdymo skydelį, kad klientų aptarnavimo agentams būtų suteiktas kontekstas. Ši funkcija leidžia savarankiškai kurti programą ir įterpti informaciją apie vartotoją, jo užsakymus ar mokėjimų istoriją.
Kai įterpiate programą naudodami Chatwood valdymo skydelį, programa gaus pokalbio kontekstą ir įvykio nuorodas. Įdiekite pranešimo įvykio nuorodas savo puslapyje, kad gautumėte kontekstą.
Jei norite pridėti naują informacinio skydelio programą, spustelėkite mygtuką \"Pridėti naują skydelio programą\".
", + "DESCRIPTION": "Informacinio skydelio programos leidžia organizacijoms įterpti programą į valdymo skydelį, kad klientų aptarnavimo agentams būtų suteiktas kontekstas. Ši funkcija leidžia savarankiškai kurti programą ir įterpti informaciją apie vartotoją, jo užsakymus ar mokėjimų istoriją.", + "LEARN_MORE": "Learn more about Dashboard Apps", + "LIST": { + "404": "Šioje paskyroje nėra sukonfigūruotų informacinio skydelio programų", + "LOADING": "Gaunamos informacinio skydelio programos...", + "TABLE_HEADER": { + "NAME": "Vardas", + "ENDPOINT": "Endpoint" + }, + "EDIT_TOOLTIP": "Redaguoti programą", + "DELETE_TOOLTIP": "Ištrinti programą" + }, + "FORM": { + "TITLE_LABEL": "Vardas", + "TITLE_PLACEHOLDER": "Įveskite informacinio skydelio programos pavadinimą", + "TITLE_ERROR": "Reikalingas informacinio skydelio programos pavadinimas", + "URL_LABEL": "Endpoint", + "URL_PLACEHOLDER": "Įveskite URL adresą, kuriuo pasiekiama jūsų programa", + "URL_ERROR": "Reikalingas tinkamas URL" + }, + "CREATE": { + "HEADER": "Pridėkite naują informacinio skydelio programą", + "FORM_SUBMIT": "Pateikti", + "FORM_CANCEL": "Atšaukti", + "API_SUCCESS": "Informacinio skydelio programa sėkmingai sukonfiguruota", + "API_ERROR": "Nepavyko sukurti programos. Pabandykite dar kartą vėliau" + }, + "UPDATE": { + "HEADER": "Tvarkyti informacinio skydelio programą", + "FORM_SUBMIT": "Atnaujinti", + "FORM_CANCEL": "Atšaukti", + "API_SUCCESS": "Informacinio skydelio programa atnaujinta sėkmingai", + "API_ERROR": "Nepavyko atnaujinti programos. Pabandykite dar kartą vėliau" + }, + "DELETE": { + "CONFIRM_YES": "Taip, Trinti", + "CONFIRM_NO": "Ne, Išsaugoti", + "TITLE": "Patvirtinti Ištrynimą", + "MESSAGE": "Ar tikrai norite ištrinti programą - {appName}?", + "API_SUCCESS": "Informacinio skydelio programa ištrinta sėkmingai", + "API_ERROR": "Nepavyko ištrinti programos. Pabandykite dar kartą vėliau" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "Fetching linear issues...", + "LOADING_ERROR": "There was an error fetching the linear issues, please try again", + "CREATE": "Sukurti", + "LINK": { + "SEARCH": "Search issues", + "SELECT": "Select issue", + "TITLE": "Nuoroda", + "EMPTY_LIST": "No linear issues found", + "LOADING": "Loading", + "ERROR": "There was an error fetching the linear issues, please try again", + "LINK_SUCCESS": "Issue linked successfully", + "LINK_ERROR": "There was an error linking the issue, please try again", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "Create Linear issues from conversations, or link existing ones for seamless tracking.", + "FORM": { + "TITLE": { + "LABEL": "Pavadinimas", + "PLACEHOLDER": "Enter title", + "REQUIRED_ERROR": "Yra reikalingas pavadinimas" + }, + "DESCRIPTION": { + "LABEL": "Aprašymas", + "PLACEHOLDER": "Enter description" + }, + "TEAM": { + "LABEL": "Komanda", + "PLACEHOLDER": "Pasirinkite komandą", + "SEARCH": "Search team", + "REQUIRED_ERROR": "Team is required" + }, + "ASSIGNEE": { + "LABEL": "Assignee", + "PLACEHOLDER": "Select assignee", + "SEARCH": "Search assignee" + }, + "PRIORITY": { + "LABEL": "Prioritetas", + "PLACEHOLDER": "Pasirinkti prioritetą", + "SEARCH": "Search priority" + }, + "LABEL": { + "LABEL": "Etiketė", + "PLACEHOLDER": "Select label", + "SEARCH": "Search label" + }, + "STATUS": { + "LABEL": "Būsena", + "PLACEHOLDER": "Select status", + "SEARCH": "Search status" + }, + "PROJECT": { + "LABEL": "Project", + "PLACEHOLDER": "Select project", + "SEARCH": "Search project" + } + }, + "CREATE": "Sukurti", + "CANCEL": "Atšaukti", + "CREATE_SUCCESS": "Issue created successfully", + "CREATE_ERROR": "There was an error creating the issue, please try again", + "LOADING_TEAM_ERROR": "There was an error fetching the teams, please try again", + "LOADING_TEAM_ENTITIES_ERROR": "There was an error fetching the team entities, please try again" + }, + "ISSUE": { + "STATUS": "Būsena", + "PRIORITY": "Prioritetas", + "ASSIGNEE": "Assignee", + "LABELS": "Etiketės", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Unlink", + "SUCCESS": "Issue unlinked successfully", + "ERROR": "There was an error unlinking the issue, please try again" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Taip, Trinti", + "CANCEL": "Atšaukti" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Taip, Trinti", + "CANCEL": "Atšaukti" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "Išsiųsti pranešimą...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Captain is thinking", + "YOU": "Jūs", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "Jūs", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "Parašykite pranešimą...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "Atšaukti", + "CREATE": "Sukurti", + "EDIT": "Atnaujinti" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Taip, Trinti", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "Atnaujinti", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "Funkcijos", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "Vardas", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "Aprašymas", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "Funkcijos", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "Nustatymai", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Ištrinti" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "Sukurti", + "CANCEL": "Atšaukti", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Ištrinti" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "Sukurti", + "CANCEL": "Atšaukti", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Ištrinti" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Pavadinimas", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "Aprašymas", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "Sukurti", + "CANCEL": "Atšaukti" + } + } + }, + "UPDATE": { + "CANCEL": "Atšaukti", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Taip, Trinti", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Taip, Trinti", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "Aprašymas", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "Nėra", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "API raktas" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "Slaptažodis", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Tipas" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Numeris", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Reikalingas" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "Ištrinti", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Taip, Trinti", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "Visi" + }, + "STATUS": { + "TITLE": "Būsena", + "PENDING": "Laukiama", + "APPROVED": "Approved", + "ALL": "Visi" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "Redaguoti", + "DELETE_RESPONSE": "Ištrinti" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Atsijungti" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Taip, Trinti", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "Gautų laiškų aplankas", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/lt/labelsMgmt.json new file mode 100644 index 0000000..5c19249 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Etiketės", + "HEADER_BTN_TXT": "Pridėti Etiketę", + "LOADING": "Gaunamos etiketės", + "DESCRIPTION": "Labels help you categorize and prioritize conversations and leads. You can assign a label to a conversation or contact using the side panel.", + "LEARN_MORE": "Learn more about labels", + "SEARCH_404": "Šią užklausą atitinkančių elementų nėra", + "LIST": { + "404": "Šioje paskyroje nėra galimų etikečių.", + "TITLE": "Tvarkyti etiketes", + "DESC": "Etiketės leidžia grupuoti pokalbius kartu.", + "TABLE_HEADER": { + "NAME": "Vardas", + "DESCRIPTION": "Aprašymas", + "COLOR": "Spalva" + } + }, + "FORM": { + "NAME": { + "LABEL": "Etiketės pavadinimas", + "PLACEHOLDER": "Etiketės pavadinimas", + "REQUIRED_ERROR": "Yra reikalingas etiketės pavadinimas", + "MINIMUM_LENGTH_ERROR": "Minimalus ilgis yra 2", + "VALID_ERROR": "Leidžiama naudoti tik abėcėlės raides, skaitmenis, brūkšnelius ir apatinį pabraukimą" + }, + "DESCRIPTION": { + "LABEL": "Aprašymas", + "PLACEHOLDER": "Etiketės aprašymas" + }, + "COLOR": { + "LABEL": "Spalva" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Rodyti etiketę šoninėje juostoje" + }, + "EDIT": "Redaguoti", + "CREATE": "Sukurti", + "DELETE": "Ištrinti", + "CANCEL": "Atšaukti" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Pridėti etiketę pokalbiui", + "MULTIPLE_SUGGESTION": "Pasirinkti šitą etiketę", + "DESELECT": "Panaikinti pažymėjimą", + "DISMISS": "Atmesti pasiūlymą" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Atsisakyti", + "ADD_SELECTED_LABELS": "Pridėti pažymėtas etiketes", + "ADD_SELECTED_LABEL": "Pridėti pažymėtą etiketę", + "ADD_ALL_LABELS": "Pridėti visas etiketes", + "SUGGESTED_LABELS": "Suggested labels" + }, + "ADD": { + "TITLE": "Pridėti Etiketę", + "DESC": "Etiketės leidžia grupuoti pokalbius kartu.", + "API": { + "SUCCESS_MESSAGE": "Etiketė sėkmingai priskirta", + "ERROR_MESSAGE": "Įvyko klaida, prašau pabandykite dar kartą" + } + }, + "EDIT": { + "TITLE": "Tvarkyti Etiketę", + "API": { + "SUCCESS_MESSAGE": "Etiketė sėkmingai atnaujinta", + "ERROR_MESSAGE": "Įvyko klaida, prašau pabandykite dar kartą" + } + }, + "DELETE": { + "BUTTON_TEXT": "Ištrinti", + "API": { + "SUCCESS_MESSAGE": "Etiketė sėkmingai ištrinta", + "ERROR_MESSAGE": "Įvyko klaida, prašau pabandykite dar kartą" + }, + "CONFIRM": { + "TITLE": "Patvirtinti Ištrynimą", + "MESSAGE": "Ar tikrai norite ištrinti ", + "YES": "Taip, Trinti ", + "NO": "Ne, Išsaugoti " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/login.json b/app/javascript/dashboard/i18n/locale/lt/login.json new file mode 100644 index 0000000..51daf0f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Login to Chatwoot", + "EMAIL": { + "LABEL": "El. paštas", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "Prašau įveskite teisingą el. pašto adresą" + }, + "PASSWORD": { + "LABEL": "Slaptažodis", + "PLACEHOLDER": "Slaptažodis" + }, + "API": { + "SUCCESS_MESSAGE": "Sėkmingai prisijungta", + "ERROR_MESSAGE": "Nepavyko prisijungti prie Woot serverio. Bandykite dar kartą vėliau.", + "UNAUTH": "Vartotojo vardas arba slaptažodis yra neteisingas. Prašome pabandyti dar kartą." + }, + "OAUTH": { + "GOOGLE_LOGIN": "Prisijungti su Google", + "BUSINESS_ACCOUNTS_ONLY": "Norėdami prisijungti, naudokite savo įmonės el. pašto adresą", + "NO_ACCOUNT_FOUND": "Nepavyko rasti paskyros pagal jūsų el. pašto adresą." + }, + "FORGOT_PASSWORD": "Pamiršote slaptažodį?", + "CREATE_NEW_ACCOUNT": "Sukurti naują paskyrą", + "SUBMIT": "Prisijungti", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/macros.json b/app/javascript/dashboard/i18n/locale/lt/macros.json new file mode 100644 index 0000000..19532d6 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Makrokomandos", + "DESCRIPTION": "A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click.", + "LEARN_MORE": "Learn more about macros", + "HEADER_BTN_TXT": "Pridėti naują makrokomandą", + "HEADER_BTN_TXT_SAVE": "Išsaugoti makrokomandą", + "LOADING": "Gaunama makrokomanda", + "ERROR": "Kažkas nepavyko. Bandykite dar kartą", + "ORDER_INFO": "Makrokomandos bus paleistos ta tvarka, kuria pridėsite veiksmus. Galite juos pertvarkyti vilkdami už rankenos šalia kiekvieno mazgo.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Makrokomandos pavadinimas", + "PLACEHOLDER": "Įveskite makrokomandos pavadinimą", + "ERROR": "Kuriant makrokomandą būtinas pavadinimas" + }, + "ACTIONS": { + "LABEL": "Veiksmai" + } + }, + "API": { + "SUCCESS_MESSAGE": "Makrokomanda sėkmingai pridėta", + "ERROR_MESSAGE": "Nepavyko sukurti makrokomandos, bandykite dar kartą vėliau" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Vardas", + "CREATED BY": "Sukurtas", + "LAST_UPDATED_BY": "Paskutinį kartą atnaujino", + "VISIBILITY": "Matomumas" + }, + "404": "Nerasta makrokomandų" + }, + "DELETE": { + "TOOLTIP": "Ištrinti makrokomandą", + "CONFIRM": { + "MESSAGE": "Ar tikrai norite ištrinti ", + "YES": "Taip, Ištrinti", + "NO": "Ne" + }, + "API": { + "SUCCESS_MESSAGE": "Makrokomanda sėkmingai ištrinta", + "ERROR_MESSAGE": "Ištrinant makrokomandą įvyko klaida. Pabandykite dar kartą vėliau" + } + }, + "EDIT": { + "TOOLTIP": "Redaguoti makrokomandą", + "API": { + "SUCCESS_MESSAGE": "Makrokomanda sėkmingai atnaujinta", + "ERROR_MESSAGE": "Nepavyko atnaujinti makrokomandos. Pabandykite dar kartą vėliau" + } + }, + "EDITOR": { + "START_FLOW": "Pradėti srautą", + "END_FLOW": "Baigti srautą", + "LOADING": "Gaunama makrokomanda", + "ADD_BTN_TOOLTIP": "Pridėti naują veiksmą", + "DELETE_BTN_TOOLTIP": "Ištrinti Veiksmą", + "VISIBILITY": { + "LABEL": "Makrokomandos matomumas", + "GLOBAL": { + "LABEL": "Viešas", + "DESCRIPTION": "Ši makrokomanda yra viešai prieinama visiems šios paskyros agentams." + }, + "PERSONAL": { + "LABEL": "Privatus", + "DESCRIPTION": "Ši makrokomanda bus prieinama tik jums ir nepasiekiama kitiems." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Vykdyti", + "PREVIEW": "Peržiūrėti makrokomandą", + "EXECUTED_SUCCESSFULLY": "Sėkmingai įvykdyta makrokomanda" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Reikalinga vertė", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Assign a Team", + "ASSIGN_AGENT": "Assign an Agent", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Tildyti pokalbį", + "SNOOZE_CONVERSATION": "Atidėti Pokalbį", + "RESOLVE_CONVERSATION": "Išspręsti pokalbį", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "CHANGE_PRIORITY": "Pakeisti Prioritetą", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "SEND_WEBHOOK_EVENT": "Send Webhook Event" + }, + "PRIORITY_TYPES": { + "NONE": "Nėra", + "LOW": "Žemas", + "MEDIUM": "Vidutinis", + "HIGH": "Aukštas", + "URGENT": "Skubus" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/mfa.json b/app/javascript/dashboard/i18n/locale/lt/mfa.json new file mode 100644 index 0000000..08cef97 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "Leisti", + "DISABLED": "Išjungta", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Loading...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "Kopijuoti", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "Atšaukti", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "Parsisiųsti", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "Slaptažodis", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "Atšaukti", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "Atšaukti", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/report.json b/app/javascript/dashboard/i18n/locale/lt/report.json new file mode 100644 index 0000000..cbd0536 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Pokalbiai", + "LOADING_CHART": "Įkeliami diagramos duomenys...", + "NO_ENOUGH_DATA": "Negavome pakankamai duomenų, kad galėtume sugeneruoti ataskaitą. Bandykite dar kartą vėliau.", + "DOWNLOAD_AGENT_REPORTS": "Parsisiųsti agentų ataskaitas", + "DATA_FETCHING_FAILED": "Nepavyko gauti duomenų, bandykite dar kartą vėliau.", + "SUMMARY_FETCHING_FAILED": "Nepavyko gauti suvestinės, bandykite dar kartą vėliau.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Pokalbiai", + "DESC": "( Viso )" + }, + "INCOMING_MESSAGES": { + "NAME": "Gaunami pranešimai", + "DESC": "( Viso )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Siunčiami pranešimai", + "DESC": "( Viso )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Pirmojo atsakymo laikas", + "DESC": "( Vid )", + "INFO_TEXT": "Bendras pokalbių skaičius, naudotas skaičiavimui:", + "TOOLTIP_TEXT": "Pirmo atsakymo laikas yra {metricValue} (remiantis {conversationCount} pokalbių)" + }, + "RESOLUTION_TIME": { + "NAME": "Sprendimo laikas", + "DESC": "( Vid )", + "INFO_TEXT": "Bendras pokalbių skaičius, naudotas skaičiavimui:", + "TOOLTIP_TEXT": "Sprendimo laikas yra {metricValue} (remiantis {conversationCount} pokalbių)" + }, + "RESOLUTION_COUNT": { + "NAME": "Sprendimų skaičius", + "DESC": "( Viso )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Sprendimų skaičius", + "DESC": "( Viso )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Handoff Count", + "DESC": "( Viso )" + }, + "REPLY_TIME": { + "NAME": "Kliento laukimo laikas", + "TOOLTIP_TEXT": "Waiting time is {metricValue} (based on {conversationCount} replies)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "Paskutines 7 dienas", + "LAST_14_DAYS": "Paskutines 14 dienų", + "LAST_30_DAYS": "Paskutines 30 dienų", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "Paskutinius 3 mėnesius", + "LAST_6_MONTHS": "Paskutinius 6 mėnesius", + "LAST_YEAR": "Paskutinius metus", + "CUSTOM_DATE_RANGE": "Pritaikytas datos intervalas" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Taikyti", + "PLACEHOLDER": "Pasirinkti datos intervalą" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Grupuoti pagal", + "DURATION_FILTER_LABEL": "Trukmė", + "GROUPING_OPTIONS": { + "DAY": "Diena", + "WEEK": "Savaitė", + "MONTH": "Mėnuo", + "YEAR": "Metai" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Diena" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Diena" + }, + { + "id": 2, + "groupBy": "Savaitė" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Diena" + }, + { + "id": 2, + "groupBy": "Savaitė" + }, + { + "id": 3, + "groupBy": "Mėnuo" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "Diena" + }, + { + "id": 2, + "groupBy": "Savaitė" + }, + { + "id": 3, + "groupBy": "Mėnuo" + } + ], + "BUSINESS_HOURS": "Darbo valandos", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Nieko nerasta" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Agentų apžvalga", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "Įkeliami diagramos duomenys...", + "NO_ENOUGH_DATA": "Negavome pakankamai duomenų, kad galėtume sugeneruoti ataskaitą. Bandykite dar kartą vėliau.", + "DOWNLOAD_AGENT_REPORTS": "Parsisiųsti agentų ataskaitas", + "FILTER_DROPDOWN_LABEL": "Pasirinkti agentą", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Pokalbiai", + "DESC": "( Viso )" + }, + "INCOMING_MESSAGES": { + "NAME": "Gaunami pranešimai", + "DESC": "( Viso )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Siunčiami pranešimai", + "DESC": "( Viso )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Pirmojo atsakymo laikas", + "DESC": "( Vid )", + "INFO_TEXT": "Bendras pokalbių skaičius, naudotas skaičiavimui:", + "TOOLTIP_TEXT": "Pirmo atsakymo laikas yra {metricValue} (remiantis {conversationCount} pokalbių)" + }, + "RESOLUTION_TIME": { + "NAME": "Sprendimo laikas", + "DESC": "( Vid )", + "INFO_TEXT": "Bendras pokalbių skaičius, naudotas skaičiavimui:", + "TOOLTIP_TEXT": "Sprendimo laikas yra {metricValue} (remiantis {conversationCount} pokalbių)" + }, + "RESOLUTION_COUNT": { + "NAME": "Sprendimų skaičius", + "DESC": "( Viso )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Paskutines 7 dienas" + }, + { + "id": 1, + "name": "Paskutines 30 dienų" + }, + { + "id": 2, + "name": "Paskutinius 3 mėnesius" + }, + { + "id": 3, + "name": "Paskutinius 6 mėnesius" + }, + { + "id": 4, + "name": "Paskutinius metus" + }, + { + "id": 5, + "name": "Pritaikytas datos intervalas" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Taikyti", + "PLACEHOLDER": "Pasirinkti datos intervalą" + } + }, + "LABEL_REPORTS": { + "HEADER": "Etikečių Apžvalga", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "Įkeliami diagramos duomenys...", + "NO_ENOUGH_DATA": "Negavome pakankamai duomenų, kad galėtume sugeneruoti ataskaitą. Bandykite dar kartą vėliau.", + "DOWNLOAD_LABEL_REPORTS": "Parsisiųsti etiketės ataskaitas", + "FILTER_DROPDOWN_LABEL": "Pažymėti Etiketę", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Pokalbiai", + "DESC": "( Viso )" + }, + "INCOMING_MESSAGES": { + "NAME": "Gaunami pranešimai", + "DESC": "( Viso )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Siunčiami pranešimai", + "DESC": "( Viso )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Pirmojo atsakymo laikas", + "DESC": "( Vid )", + "INFO_TEXT": "Bendras pokalbių skaičius, naudotas skaičiavimui:", + "TOOLTIP_TEXT": "Pirmo atsakymo laikas yra {metricValue} (remiantis {conversationCount} pokalbių)" + }, + "RESOLUTION_TIME": { + "NAME": "Sprendimo laikas", + "DESC": "( Vid )", + "INFO_TEXT": "Bendras pokalbių skaičius, naudotas skaičiavimui:", + "TOOLTIP_TEXT": "Sprendimo laikas yra {metricValue} (remiantis {conversationCount} pokalbių)" + }, + "RESOLUTION_COUNT": { + "NAME": "Sprendimų skaičius", + "DESC": "( Viso )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Paskutines 7 dienas" + }, + { + "id": 1, + "name": "Paskutines 30 dienų" + }, + { + "id": 2, + "name": "Paskutinius 3 mėnesius" + }, + { + "id": 3, + "name": "Paskutinius 6 mėnesius" + }, + { + "id": 4, + "name": "Paskutinius metus" + }, + { + "id": 5, + "name": "Pritaikytas datos intervalas" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Taikyti", + "PLACEHOLDER": "Pasirinkti datos intervalą" + } + }, + "INBOX_REPORTS": { + "HEADER": "Gautų Laiškų Aplanko Apžvalga", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "Įkeliami diagramos duomenys...", + "NO_ENOUGH_DATA": "Negavome pakankamai duomenų, kad galėtume sugeneruoti ataskaitą. Bandykite dar kartą vėliau.", + "DOWNLOAD_INBOX_REPORTS": "Parsisiųsti gautų laiškų aplanko ataskaitas", + "FILTER_DROPDOWN_LABEL": "Pasirinkti gautų laiškų aplanką", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Pokalbiai", + "DESC": "( Viso )" + }, + "INCOMING_MESSAGES": { + "NAME": "Gaunami pranešimai", + "DESC": "( Viso )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Siunčiami pranešimai", + "DESC": "( Viso )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Pirmojo atsakymo laikas", + "DESC": "( Vid )", + "INFO_TEXT": "Bendras pokalbių skaičius, naudotas skaičiavimui:", + "TOOLTIP_TEXT": "Pirmo atsakymo laikas yra {metricValue} (remiantis {conversationCount} pokalbių)" + }, + "RESOLUTION_TIME": { + "NAME": "Sprendimo laikas", + "DESC": "( Vid )", + "INFO_TEXT": "Bendras pokalbių skaičius, naudotas skaičiavimui:", + "TOOLTIP_TEXT": "Sprendimo laikas yra {metricValue} (remiantis {conversationCount} pokalbių)" + }, + "RESOLUTION_COUNT": { + "NAME": "Sprendimų skaičius", + "DESC": "( Viso )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Paskutines 7 dienas" + }, + { + "id": 1, + "name": "Paskutines 30 dienų" + }, + { + "id": 2, + "name": "Paskutinius 3 mėnesius" + }, + { + "id": 3, + "name": "Paskutinius 6 mėnesius" + }, + { + "id": 4, + "name": "Paskutinius metus" + }, + { + "id": 5, + "name": "Pritaikytas datos intervalas" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Taikyti", + "PLACEHOLDER": "Pasirinkti datos intervalą" + } + }, + "TEAM_REPORTS": { + "HEADER": "Komandos apžvalga", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "Įkeliami diagramos duomenys...", + "NO_ENOUGH_DATA": "Negavome pakankamai duomenų, kad galėtume sugeneruoti ataskaitą. Bandykite dar kartą vėliau.", + "DOWNLOAD_TEAM_REPORTS": "Parsisiųsti komandos ataskaitas", + "FILTER_DROPDOWN_LABEL": "Pasirinkite komandą", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Pokalbiai", + "DESC": "( Viso )" + }, + "INCOMING_MESSAGES": { + "NAME": "Gaunami pranešimai", + "DESC": "( Viso )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Siunčiami pranešimai", + "DESC": "( Viso )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Pirmojo atsakymo laikas", + "DESC": "( Vid )", + "INFO_TEXT": "Bendras pokalbių skaičius, naudotas skaičiavimui:", + "TOOLTIP_TEXT": "Pirmo atsakymo laikas yra {metricValue} (remiantis {conversationCount} pokalbių)" + }, + "RESOLUTION_TIME": { + "NAME": "Sprendimo laikas", + "DESC": "( Vid )", + "INFO_TEXT": "Bendras pokalbių skaičius, naudotas skaičiavimui:", + "TOOLTIP_TEXT": "Sprendimo laikas yra {metricValue} (remiantis {conversationCount} pokalbių)" + }, + "RESOLUTION_COUNT": { + "NAME": "Sprendimų skaičius", + "DESC": "( Viso )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Paskutines 7 dienas" + }, + { + "id": 1, + "name": "Paskutines 30 dienų" + }, + { + "id": 2, + "name": "Paskutinius 3 mėnesius" + }, + { + "id": 3, + "name": "Paskutinius 6 mėnesius" + }, + { + "id": 4, + "name": "Paskutinius metus" + }, + { + "id": 5, + "name": "Pritaikytas datos intervalas" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Taikyti", + "PLACEHOLDER": "Pasirinkti datos intervalą" + } + }, + "CSAT_REPORTS": { + "HEADER": "CSAT Ataskaitas", + "NO_RECORDS": "Nėra CSAT apklausos atsakymų.", + "DOWNLOAD": "Parsisiųsti CSAT ataskaitas", + "DOWNLOAD_FAILED": "Nepavyko parsisiųsti CSAT ataskaitų", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Pasirinkti Agentus" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Kontaktas", + "AGENT_NAME": "Priskirtas agentas", + "RATING": "Reitingas", + "FEEDBACK_TEXT": "Facebook komentaras" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Iš viso atsakymų", + "TOOLTIP": "Bendras surinktų atsakymų skaičius" + }, + "SATISFACTION_SCORE": { + "LABEL": "Pasitenkinimo balas", + "TOOLTIP": "Bendras teigiamų atsakymų skaičius / Bendras atsakymų skaičius * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Atsakymo įvertinimas", + "TOOLTIP": "Bendras atsakymų skaičius / Bendras skaičius išsiųstų CSAT apklausų pranešimų * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Bot Reports", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "No. of Conversations", + "TOOLTIP": "Total number of conversations handled by the bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total Responses", + "TOOLTIP": "Total number of responses sent by the bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Resolution Rate", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Handoff Rate", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Apžvalga", + "LIVE": "Tiesiogiai", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Atidaryti pokalbius", + "LOADING_MESSAGE": "Įkeliama pokalbio metrika...", + "OPEN": "Atidaryti", + "UNATTENDED": "Be priežiūros", + "UNASSIGNED": "Ne priskirtas", + "PENDING": "Laukiama" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Pokalbių srautas", + "NO_CONVERSATIONS": "Pokalbių nėra", + "CONVERSATION": "{count} pokalbis", + "CONVERSATIONS": "{count} pokalbiai", + "DOWNLOAD_REPORT": "Download report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "Pokalbių nėra", + "CONVERSATION": "{count} pokalbis", + "CONVERSATIONS": "{count} pokalbiai", + "DOWNLOAD_REPORT": "Download report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Agentų pokalbiai", + "LOADING_MESSAGE": "Įkeliama agento metrika...", + "NO_AGENTS": "Agentų pokalbių nėra", + "TABLE_HEADER": { + "AGENT": "Agentas", + "OPEN": "Atidaryti", + "UNATTENDED": "Be priežiūros", + "STATUS": "Būsena" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Komanda", + "OPEN": "Atidaryti", + "UNATTENDED": "Be priežiūros", + "STATUS": "Būsena" + } + }, + "AGENT_STATUS": { + "HEADER": "Agento būsena", + "ONLINE": "Prisijungęs", + "BUSY": "Užimta", + "OFFLINE": "Atsijungęs" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Sekmadienis", + "MONDAY": "Pirmadienis", + "TUESDAY": "Antradienis", + "WEDNESDAY": "Trečiadienis", + "THURSDAY": "Ketvirtadienis", + "FRIDAY": "Penktadienis", + "SATURDAY": "Šeštadienis" + }, + "SLA_REPORTS": { + "HEADER": "SLA Reports", + "NO_RECORDS": "SLA applied conversations are not available.", + "LOADING": "Loading SLA data...", + "DOWNLOAD_SLA_REPORTS": "Download SLA reports", + "DOWNLOAD_FAILED": "Failed to download SLA Reports", + "DROPDOWN": { + "ADD_FIlTER": "Pridėti Filtrą", + "CLEAR_ALL": "Clear all", + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Nieko nerasta", + "NO_FILTER": "No filters available", + "SEARCH": "Search filter", + "INPUT_PLACEHOLDER": { + "SLA": "SLA name", + "AGENTS": "Agento Vardas", + "INBOXES": "Gautų laiškų aplanko pavadinimas", + "LABELS": "Etiketės pavadinimas", + "TEAMS": "Komandos pavadinimas" + }, + "SLA": "SLA Policy", + "INBOXES": "Gautų laiškų aplankas", + "AGENTS": "Agentas", + "LABELS": "Etiketė", + "TEAMS": "Komanda" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentage of SLAs created were completed successfully" + }, + "NO_OF_MISSES": { + "LABEL": "Number of Misses", + "TOOLTIP": "Total SLA misses in a certain period" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Number of Conversations", + "TOOLTIP": "Total number of conversations with SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "Pokalbis", + "AGENT": "Agentas" + }, + "VIEW_DETAILS": "View Details" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Gautų laiškų aplankas", + "AGENT": "Agentas", + "TEAM": "Komanda", + "LABEL": "Etiketė", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "Sprendimų skaičius", + "CONVERSATIONS": "Pokalbių kiekis" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/resetPassword.json b/app/javascript/dashboard/i18n/locale/lt/resetPassword.json new file mode 100644 index 0000000..6aef01e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Atstatyti slaptažodį", + "DESCRIPTION": "Įveskite el. pašto adresą, kurį naudojate prisijungdami prie „Chatwoot“, kad gautumėte slaptažodžio atstatymo instrukcijas.", + "GO_BACK_TO_LOGIN": "Jei norite grįžti į prisijungimo puslapį,", + "EMAIL": { + "LABEL": "El. paštas", + "PLACEHOLDER": "Prašau įveskite jūsų el. paštą.", + "ERROR": "Prašau įveskite teisingą el. paštą." + }, + "API": { + "SUCCESS_MESSAGE": "Slaptažodžio nustatymo iš naujo nuoroda buvo išsiųsta į jūsų el. paštą.", + "ERROR_MESSAGE": "Nepavyko prisijungti prie Woot serverio. Bandykite dar kartą vėliau." + }, + "SUBMIT": "Pateikti" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/search.json b/app/javascript/dashboard/i18n/locale/lt/search.json new file mode 100644 index 0000000..ecd5e22 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "Kontaktai", + "CONVERSATIONS": "Pokalbiai", + "MESSAGES": "Pranešimai", + "ARTICLES": "Articles" + }, + "SECTION": { + "CONTACTS": "Kontaktai", + "CONVERSATIONS": "Pokalbiai", + "MESSAGES": "Pranešimai", + "ARTICLES": "Articles" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "Ieškoma", + "LOADING_DATA": "Loading", + "EMPTY_STATE": "Nerasta {item} pagal užklausą '{query}'", + "EMPTY_STATE_FULL": "Nerasta rezultatų pagal užklausą '{query}'", + "PLACEHOLDER_KEYBINDING": "/sutelkti dėmesį", + "INPUT_PLACEHOLDER": "Įveskite 3 ar daugiau smibolius paieškai", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Clear all", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Norėdami gauti geresnių paieškos rezultatų, ieškokite pagal pokalbio ID, el. pašto adresą, telefono numerį, žinutes.", + "BOT_LABEL": "Botas", + "READ_MORE": "Skaityti daugiau", + "READ_LESS": "Read less", + "WROTE": "parašei:", + "FROM": "Nuo", + "EMAIL": "El. paštas", + "EMAIL_SUBJECT": "Tema", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "Paskutines 7 dienas", + "LAST_30_DAYS": "Paskutines 30 dienų", + "LAST_60_DAYS": "Paskutines 60 dienų", + "LAST_90_DAYS": "Paskutines 90 dienų", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "Taikyti", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Clear filter" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Siuntėjas", + "IN": "Gautų laiškų aplankas", + "AGENTS": "Agentai", + "CONTACTS": "Kontaktai", + "INBOXES": "Gautų laiškų aplankai", + "NO_AGENTS": "Agentų nerasta", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/setNewPassword.json b/app/javascript/dashboard/i18n/locale/lt/setNewPassword.json new file mode 100644 index 0000000..eb1712b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Nustatyti naują slaptažodį", + "PASSWORD": { + "LABEL": "Slaptažodis", + "PLACEHOLDER": "Slaptažodis", + "ERROR": "Slaptažodis yra pertrumpas." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Patvirtinti slaptažodį", + "PLACEHOLDER": "Patvirtinti slaptažodį", + "ERROR": "Slaptažodžiai nesutampa." + }, + "API": { + "SUCCESS_MESSAGE": "Sėkmingai pakeistas slaptažodis.", + "ERROR_MESSAGE": "Nepavyko prisijungti prie Woot serverio. Bandykite dar kartą vėliau." + }, + "CAPTCHA": { + "ERROR": "Patvirtinimo galiojimo laikas baigėsi. Prašome dar kartą išspręsti captcha." + }, + "SUBMIT": "Pateikti" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/settings.json b/app/javascript/dashboard/i18n/locale/lt/settings.json new file mode 100644 index 0000000..69bb73e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Profilio Nustatymai", + "TITLE": "Profilio Nustatymai", + "BTN_TEXT": "Atnaujinti Profilį", + "DELETE_AVATAR": "Ištrinti Avatarą", + "AVATAR_DELETE_SUCCESS": "Avataras buvo ištrintas sėkmingai", + "AVATAR_DELETE_FAILED": "Pašalinant avatarą įvyko klaida, pabandykite dar kartą", + "UPDATE_SUCCESS": "Jūsų profilis sėkmingai atnaujintas", + "PASSWORD_UPDATE_SUCCESS": "Jūsų slaptažodis buvo sėkmingai pakeistas", + "AFTER_EMAIL_CHANGED": "Jūsų profilis buvo sėkmingai atnaujintas, prisijunkite dar kartą, nes jūsų prisijungimo duomenys yra pakeisti", + "FORM": { + "PICTURE": "Profile Picture", + "AVATAR": "Profilio paveikslėlis", + "ERROR": "Ištaisykite formos klaidas", + "REMOVE_IMAGE": "Pašalinti", + "UPLOAD_IMAGE": "Įkelti paveikslėlį", + "UPDATE_IMAGE": "Atnaujinti paveikslėlį", + "PROFILE_SECTION": { + "TITLE": "Profilis", + "NOTE": "Jūsų el. pašto adresas yra jūsų tapatybė ir yra naudojamas prisijungimui." + }, + "SEND_MESSAGE": { + "TITLE": "Spartusis klavišas žinutėms siųsti", + "NOTE": "Galite pasirinkti spartųjį klavišą (arba Enter, arba Cmd/Ctrl+Enter), atsižvelgdami į savo rašymo nuostatas.", + "UPDATE_SUCCESS": "Jūsų nustatymai sėkmingai atnaujinti", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Siųskite pranešimus paspausdami klavišą Enter, o ne spustelėdami siuntimo mygtuką." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Siųskite pranešimus paspausdami Cmd/Ctrl + Enter, o ne spustelėdami siuntimo mygtuką." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Pagal nutylėjimą", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Asmeninis pranešimo parašas", + "NOTE": "Sukurkite unikalų pranešimo parašą, kuris bus rodomas kiekvieno pranešimo pabaigoje, siunčiamo iš bet kurio gautųjų laiškų aplanko. Taip pat galite įdėti paveikslėlį, kuris rodomas tiesioginio pokalbio, el. pašto ir API.", + "BTN_TEXT": "Išsaugoti pranešimo parašą", + "API_ERROR": "Nepavyko išsaugoti parašo! Bandykite dar kartą", + "API_SUCCESS": "Parašas išsaugotas sėkmingai", + "IMAGE_UPLOAD_ERROR": "Nepavyko įkelti vaizdo! Prašau, pabandykite dar kartą", + "IMAGE_UPLOAD_SUCCESS": "Vaizdas sėkmingai pridėtas. Spustelėkite \"Išsaugoti\", kad išsaugotumėte parašą", + "IMAGE_UPLOAD_SIZE_ERROR": "Paveiksliuko dydis turi būti mažesnis nei {size} MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Pranešimo parašas", + "ERROR": "Pranešimo Parašas negali būti tuščias", + "PLACEHOLDER": "Įdėkite savo asmeninį pranešimo parašą čia." + }, + "PASSWORD_SECTION": { + "TITLE": "Slaptažodis", + "NOTE": "Atnaujinus slaptažodį būtų iš naujo nustatyti prisijungimai keliuose įrenginiuose.", + "BTN_TEXT": "Keisti slaptažodį" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "Prieeigos raktas", + "NOTE": "Šis prieigos raktas gali būti naudojamas, jei kuriate API pagrįstą integraciją", + "COPY": "Kopijuoti", + "RESET": "Reset", + "CONFIRM_RESET": "Are you sure?", + "CONFIRM_HINT": "Click again to confirm", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Alerts", + "NOTE": "Enable audio alerts in dashboard for new messages and conversations.", + "PLAY": "Play sound", + "ALERT_TYPES": { + "NONE": "Nėra", + "MINE": "Assigned", + "ALL": "Visi", + "ASSIGNED": "My assigned conversations", + "UNASSIGNED": "Unassigned conversations", + "NOTME": "Open conversations assigned to others" + }, + "ALERT_COMBINATIONS": { + "NONE": "You haven't selected any options, you won't receive any audio alerts.", + "ASSIGNED": "You'll receive alerts for conversations assigned to you.", + "UNASSIGNED": "You'll receive alerts for any unassigned conversations.", + "NOTME": "You'll receive alerts for conversations assigned to others.", + "ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.", + "ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.", + "NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.", + "ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations." + }, + "ALERT_TYPE": { + "TITLE": "Alert events for conversations", + "NONE": "Nėra", + "ASSIGNED": "Priskirti Pokalbiai", + "ALL_CONVERSATIONS": "Visi Pokalbiai" + }, + "DEFAULT_TONE": { + "TITLE": "Įspėjimo tonas:" + }, + "CONDITIONS": { + "TITLE": "Įspėjimo sąlygos:", + "CONDITION_ONE": "Garsinius įspėjimus siųskite tik tuo atveju, jei naršyklės langas neaktyvus", + "CONDITION_TWO": "Siųskite įspėjimus kas 30 sekundžių, kol bus perskaityti visi priskirti pokalbiai" + }, + "SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.", + "READ_MORE": "Skaityti daugiau" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "El. pašto Perspėjimai", + "NOTE": "Čia atnaujinkite el. pašto perspėjimų nustatymus", + "CONVERSATION_ASSIGNMENT": "Siųsti perspėjimus el. paštu, kai pokalbis yra priskirtas man", + "CONVERSATION_CREATION": "Siųsti perspėjimus el. paštu, kai naujas pokalbis yra sukuriamas", + "CONVERSATION_MENTION": "Siųsti perspėjimus el. paštu, kai pokalbyje esate paminimas/a", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Siųsti perspėjimus el. paštu, kai priskirtame pokalbyje sukuriamas naujas pranešimas", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Siųsti perspėjimus el. paštu, kai dalyvaujant pokalbyje sukuriamas naujas pranešimas", + "SLA_MISSED_FIRST_RESPONSE": "Send email notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send email notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send email notifications when a conversation misses resolution SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Notification preferences", + "TYPE_TITLE": "Notification type", + "EMAIL": "El. paštas", + "PUSH": "Push notification", + "TYPES": { + "CONVERSATION_CREATED": "A new conversation is created", + "CONVERSATION_ASSIGNED": "A conversation is assigned to you", + "CONVERSATION_MENTION": "You are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "A new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "A new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "A conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "A conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "A conversation misses resolution SLA" + }, + "BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them" + }, + "API": { + "UPDATE_SUCCESS": "Jūsų perspėjimų nuostatos sėkmingai atnaujintos", + "UPDATE_ERROR": "Atnaujinant nuostatas įvyko klaida, pabandykite dar kartą" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Aktyvieji perspėjimai", + "NOTE": "Čia atnaujinkite aktyviūjų pranešimų nustatymus", + "CONVERSATION_ASSIGNMENT": "Siųsti aktyviuosius perspėjimus, kai pokalbis yra priskirtas man", + "CONVERSATION_CREATION": "Siųsti aktyviuosius perspėjimus, kai naujas pokalbis yra sukuriamas", + "CONVERSATION_MENTION": "Siųsti aktyviuosius perspėjimus, kai pokalbyje esate paminimas/a", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Siųsti aktyviuosius perspėjimus, kai priskirtame pokalbyje sukuriamas naujas pranešimas", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Siųsti aktyviuosius perspėjimus, kai dalyvaujant pokalbyje sukuriamas naujas pranešimas", + "HAS_ENABLED_PUSH": "Leidote aktyviuosius perspėjimus šioje naršyklėje.", + "REQUEST_PUSH": "Leisti aktyviuosius pranešimus", + "SLA_MISSED_FIRST_RESPONSE": "Send push notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send push notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send push notifications when a conversation misses resolution SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "Profilio paveikslėlis" + }, + "NAME": { + "LABEL": "Jūsų pilnas vardas", + "ERROR": "Prašau įveskite teisingą vardą ir pavardę", + "PLACEHOLDER": "Prašau įveskite jūsų pilną vardą" + }, + "DISPLAY_NAME": { + "LABEL": "Rodomas vardas", + "ERROR": "Prašau įveskite teisingą rodomą vardą", + "PLACEHOLDER": "Įveskite rodomą vardą, kuris bus rodomas pokalbiuose" + }, + "AVAILABILITY": { + "LABEL": "Prieinamumas", + "STATUS": { + "ONLINE": "Prisijungęs", + "BUSY": "Užimta", + "OFFLINE": "Atsijungęs" + }, + "SET_AVAILABILITY_SUCCESS": "Pasiekiamumas nustatytas sėkmingai", + "SET_AVAILABILITY_ERROR": "Nepavyko nustatyti pasiekiamumo, bandykite dar kartą", + "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user" + }, + "EMAIL": { + "LABEL": "Jūsų el. pašto adresas", + "ERROR": "Prašau įveskite teisingą el. pašto adresą", + "PLACEHOLDER": "Įveskite el. pašto adresą, kuris bus rodomas pokalbiuose" + }, + "CURRENT_PASSWORD": { + "LABEL": "Dabartinis slaptažodis", + "ERROR": "Įveskite dabartinį slaptažodį", + "PLACEHOLDER": "Įveskite dabartinį slaptažodį" + }, + "PASSWORD": { + "LABEL": "Naujas slaptažodis", + "ERROR": "Įveskite slaptažodį, kurio ilgis yra 6 arba daugiau simbolių", + "PLACEHOLDER": "Įveskite naują slaptažodį" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Patvirtinti naują slaptažodį", + "ERROR": "Patvirtinimo slaptažodis turi sutapti su slaptažodžiu", + "PLACEHOLDER": "Dar kartą įveskite naują slaptažodį" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Keisti", + "CHANGE_ACCOUNTS": "Switch account", + "SWITCH_ACCOUNT": "Switch account", + "CONTACT_SUPPORT": "Contact support", + "SELECTOR_SUBTITLE": "Pasirinkite paskyrą iš toliau pateikto sąrašo", + "PROFILE_SETTINGS": "Profile settings", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Keyboard shortcuts", + "APPEARANCE": "Change appearance", + "SUPER_ADMIN_CONSOLE": "SuperAdmin console", + "DOCS": "Read documentation", + "CHANGELOG": "Changelog", + "LOGOUT": "Log out" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "liko bandymo dienų.", + "TRAIL_BUTTON": "Pirkti dabar", + "DELETED_USER": "Trinti Vartotoją", + "EMAIL_VERIFICATION_PENDING": "It seems that you haven't verified your email address yet. Please check your inbox for the verification email.", + "RESEND_VERIFICATION_MAIL": "Resend verification email", + "EMAIL_VERIFICATION_SENT": "Verification email has been sent. Please check your inbox.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Paskyra laikinai sustabdyta", + "MESSAGE": "Jūsų paskyra laikinai sustabdyta. Norėdami gauti daugiau informacijos, susisiekite su palaikymo komanda." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Log out" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Kopijuoti", + "CODEPEN": "Atidaryti su CodePenu", + "COPY_SUCCESSFUL": "Nukopijuotas į iškarpinę" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Rodyti Daugiau", + "SHOW_LESS": "Rodyti Mažiau" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "Parsisiųsti", + "UPLOADING": "Įkeliama...", + "INSTAGRAM_STORY_UNAVAILABLE": "Šis pasakojimas nebepasiekiamas." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "Pamatyti žemėlapyje" + }, + "FORM_BUBBLE": { + "SUBMIT": "Pateikti" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "This image is no longer available.", + "LOADING_FAILED": "Loading failed" + } + }, + "CONFIRM_EMAIL": "Tikrinama...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Pridėti Gautų Laiškų Aplanką" + } + }, + "SIDEBAR": { + "NO_ITEMS": "No items", + "CURRENTLY_VIEWING_ACCOUNT": "Šiuo metu peržiūri:", + "SWITCH": "Perjungti", + "INBOX_VIEW": "Inbox View", + "CONVERSATIONS": "Pokalbiai", + "INBOX": "My Inbox", + "ALL_CONVERSATIONS": "Visi Pokalbiai", + "MENTIONED_CONVERSATIONS": "Paminėjimai", + "PARTICIPATING_CONVERSATIONS": "Dalyvaujantys", + "UNATTENDED_CONVERSATIONS": "Be priežiūros", + "REPORTS": "Ataskaitos", + "SETTINGS": "Nustatymai", + "CONTACTS": "Kontaktai", + "ACTIVE": "Aktyvus", + "COMPANIES": "Įmonės", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistants", + "CAPTAIN_DOCUMENTS": "Documents", + "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_TOOLS": "Tools", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "Gautų laiškų aplankai", + "CAPTAIN_SETTINGS": "Nustatymai", + "HOME": "Pagrindinis", + "AGENTS": "Agentai", + "AGENT_BOTS": "Botai", + "AUDIT_LOGS": "Audito Žurnalas", + "INBOXES": "Gautų laiškų aplankai", + "NOTIFICATIONS": "Pranešimai", + "CANNED_RESPONSES": "Atsakymų Ruošiniai", + "INTEGRATIONS": "Integracijos", + "PROFILE_SETTINGS": "Profilio Nustatymai", + "ACCOUNT_SETTINGS": "Paskyros Nustatymai", + "APPLICATIONS": "Programos", + "LABELS": "Etiketės", + "CUSTOM_ATTRIBUTES": "Personalizuoti Požymiai", + "AUTOMATION": "Automatizacija", + "MACROS": "Makrokomandos", + "TEAMS": "Komandos", + "BILLING": "Atsiskaitymas", + "CUSTOM_VIEWS_FOLDER": "Aplankas", + "CUSTOM_VIEWS_SEGMENTS": "Segmentas", + "ALL_CONTACTS": "Visi Kontaktai", + "TAGGED_WITH": "Pažymėta su", + "NEW_LABEL": "Nauja etiketė", + "NEW_TEAM": "Nauja komanda", + "NEW_INBOX": "Naujas gautų laiškų aplankas", + "REPORTS_CONVERSATION": "Pokalbiai", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Akcijos", + "ONGOING": "Vykstantis", + "ONE_OFF": "Vienas iš", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "Botas", + "REPORTS_AGENT": "Agentai", + "REPORTS_LABEL": "Etiketės", + "REPORTS_INBOX": "Gautų laiškų aplankas", + "REPORTS_TEAM": "Komanda", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "Nustatykite save kaip", + "SET_YOUR_AVAILABILITY": "Nustatykite savo pasiekiamumą", + "SLA": "SLA", + "CUSTOM_ROLES": "Custom Roles", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Apžvalga", + "REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages", + "HELP_CENTER": { + "TITLE": "Palaikymo centras", + "ARTICLES": "Articles", + "CATEGORIES": "Kategorijos", + "LOCALES": "Lokalizacija", + "SETTINGS": "Nustatymai" + }, + "CHANNELS": "Channels", + "SET_AUTO_OFFLINE": { + "TEXT": "Automatiškai pažymėkite \"neprisijungęs\"", + "INFO_TEXT": "Leiskite sistemai automatiškai pažymėti jus \"neprisijungus\", kai nenaudojate programos ar informacinio skydelio.", + "INFO_SHORT": "Automatically mark offline when you aren't using the app." + }, + "DOCS": "Skaityti dokumentus", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "Atsiskaitymas", + "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "CURRENT_PLAN": { + "TITLE": "Prenumeratos Dabartinis Planas", + "PLAN_NOTE": "Šiuo metu užsiprenumeravote **{plan}** planą su **{quantity}** licencijomis", + "SEAT_COUNT": "Number of seats", + "RENEWS_ON": "Renews on" + }, + "VIEW_PRICING": "View Pricing", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Tvarkykite savo prenumeratą", + "DESCRIPTION": "Peržiūrėkite ankstesnes sąskaitas faktūras, redaguokite atsiskaitymo informaciją arba atšaukite prenumeratą.", + "BUTTON_TXT": "Eiti į mokėjimų portalą" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Manage usage and credits for Captain AI.", + "BUTTON_TXT": "Buy more credits", + "DOCUMENTS": "Documents", + "RESPONSES": "Responses", + "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more.", + "REFRESH_CREDITS": "Atnaujinti" + }, + "CHAT_WITH_US": { + "TITLE": "Reikia pagalbos?", + "DESCRIPTION": "Ar susiduriate su atsiskaitymo problemomis? Esame čia, kad padėtume.", + "BUTTON_TXT": "Pabendraukite su mumis" + }, + "NO_BILLING_USER": "Jūsų atsiskaitomoji sąskaita konfigūruojama. Atnaujinkite puslapį ir bandykite dar kartą.", + "TOPUP": { + "BUY_CREDITS": "Buy more credits", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Pastaba:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "Atšaukti", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Grįžti", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "Nukopijuotas į iškarpinę", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Oi! Nepavyko rasti jokių Chatwoot paskyrų. Jei norite tęsti, susikurkite naują paskyrą.", + "NEW_ACCOUNT": "Nauja Paskyra", + "SELECTOR_SUBTITLE": "Sukurti naują paskyrą", + "API": { + "SUCCESS_MESSAGE": "Paskyra sukurta sėkmingai", + "EXIST_MESSAGE": "Paskyra jau yra", + "ERROR_MESSAGE": "Nepavyko prisijungti prie Woot serverio, bandykite dar kartą vėliau" + }, + "FORM": { + "NAME": { + "LABEL": "Įmonės pavadinimas", + "PLACEHOLDER": "Wayne Enterprises" + }, + "SUBMIT": "Pateikti", + "CANCEL": "Atšaukti" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "Peržiūrėkite visus sparčiuosius klavišus", + "TITLE": { + "OPEN_CONVERSATION": "Atidaryti pokalbį", + "RESOLVE_AND_NEXT": "Išspręsti ir pereiti toliau", + "NAVIGATE_DROPDOWN": "Pereikite tarp išskleidžiamojo sąrašo elementų", + "RESOLVE_CONVERSATION": "Išspręsti pokalbį", + "GO_TO_CONVERSATION_DASHBOARD": "Eikite į Pokalbio informacijos skydelį", + "ADD_ATTACHMENT": "Pridėti Priedą", + "GO_TO_CONTACTS_DASHBOARD": "Eikite į Kontaktų informacijos skydelį", + "TOGGLE_SIDEBAR": "Perjungti šoninę juostą", + "GO_TO_REPORTS_SIDEBAR": "Eikite į Ataskaitų šoninę juostą", + "MOVE_TO_NEXT_TAB": "Pereiti į kitą skirtuką pokalbių sąraše", + "GO_TO_SETTINGS": "Eiti į Nustatymus", + "SWITCH_TO_PRIVATE_NOTE": "Perjungti į Privatų užrašą", + "SWITCH_TO_REPLY": "Perjungti į Atsakyti", + "TOGGLE_SNOOZE_DROPDOWN": "Perjungti snooze išskleidžiamąjį meniu" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "Prioritetas", + "ACTIVE": "Aktyvus", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "Redaguoti" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Atšaukti" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Aprašymas:", + "PLACEHOLDER": "Enter description" + }, + "STATUS": { + "LABEL": "Būsena:", + "PLACEHOLDER": "Select status", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "Pridėti" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "Redaguoti" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Atšaukti" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Aprašymas:", + "PLACEHOLDER": "Enter description" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "Pridėti" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "Ištrinti", + "CANCEL_BUTTON_LABEL": "Atšaukti" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/signup.json b/app/javascript/dashboard/i18n/locale/lt/signup.json new file mode 100644 index 0000000..a1798ba --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Sukurti paskyrą", + "TITLE": "Registras", + "TESTIMONIAL_HEADER": "Tereikia vieno žingsnio, kad judėtume į priekį", + "TESTIMONIAL_CONTENT": "Liko vienas žingsnis, kad įtrauktumėte savo klientus, išlaikytumėte juos ir rastumėte naujų.", + "TERMS_ACCEPT": "Kurdami paskyrą sutinkate su mūsų T & C ir Privatumo politika", + "OAUTH": { + "GOOGLE_SIGNUP": "Užsiregistruoti su Google" + }, + "COMPANY_NAME": { + "LABEL": "Įmonės pavadinimas", + "PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises", + "ERROR": "Company name is too short" + }, + "FULL_NAME": { + "LABEL": "Pilnas vardas", + "PLACEHOLDER": "Enter your full name. eg: Bruce Wayne", + "ERROR": "Full name is too short" + }, + "EMAIL": { + "LABEL": "Darbinis el. paštas", + "PLACEHOLDER": "Enter your work email address. E.g., bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Please enter a valid work email address" + }, + "PASSWORD": { + "LABEL": "Slaptažodis", + "PLACEHOLDER": "Slaptažodis", + "ERROR": "Password is too short", + "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm Password", + "PLACEHOLDER": "Confirm Password", + "ERROR": "Slaptažodžiai nesutampa." + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "SUBMIT": "Sukurti paskyrą", + "HAVE_AN_ACCOUNT": "Jau turi prisijungimo paskyrą?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/sla.json b/app/javascript/dashboard/i18n/locale/lt/sla.json new file mode 100644 index 0000000..6a4b269 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Add SLA", + "ADD_ACTION_LONG": "Create a new SLA Policy", + "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", + "LEARN_MORE": "Learn more about SLA", + "LOADING": "Fetching SLAs", + "PAYWALL": { + "TITLE": "Upgrade to create SLAs", + "AVAILABLE_ON": "The SLA feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SLA feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no SLAs available in this account.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Issues raised by enterprise customers, that require immediate attention.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Issues raised by enterprise customers, that needs to be acknowledged quickly." + }, + "BUSINESS_HOURS_ON": "Business hours on", + "BUSINESS_HOURS_OFF": "Business hours off", + "RESPONSE_TYPES": { + "FRT": "First response time threshold", + "NRT": "Next response time threshold", + "RT": "Resolution time threshold", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA Name", + "PLACEHOLDER": "SLA Name", + "REQUIRED_ERROR": "SLA name is required", + "MINIMUM_LENGTH_ERROR": "Minimalus ilgis yra 2", + "VALID_ERROR": "Leidžiama naudoti tik abėcėlės raides, skaitmenis, brūkšnelius ir apatinį pabraukimą" + }, + "DESCRIPTION": { + "LABEL": "Aprašymas", + "PLACEHOLDER": "SLA for premium customers" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "Pirmojo atsakymo laikas", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Next Response Time", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "Sprendimo laikas", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Darbo valandos", + "PLACEHOLDER": "Only during business hours" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Threshold should be a number and greater than zero" + }, + "EDIT": "Redaguoti", + "CREATE": "Sukurti", + "DELETE": "Ištrinti", + "CANCEL": "Atšaukti" + }, + "ADD": { + "TITLE": "Add SLA", + "DESC": "Friendly promises for great service!", + "API": { + "SUCCESS_MESSAGE": "SLA added successfully", + "ERROR_MESSAGE": "Įvyko klaida, prašau pabandykite dar kartą" + } + }, + "DELETE": { + "TITLE": "Delete SLA", + "API": { + "SUCCESS_MESSAGE": "SLA deleted successfully", + "ERROR_MESSAGE": "Įvyko klaida, prašau pabandykite dar kartą" + }, + "CONFIRM": { + "TITLE": "Patvirtinti Ištrynimą", + "MESSAGE": "Are you sure you want to delete ", + "YES": "Taip, Trinti ", + "NO": "Ne, Išsaugoti " + } + }, + "EVENTS": { + "TITLE": "SLA Misses", + "FRT": "First response time", + "NRT": "Next response time", + "RT": "Resolution time", + "SHOW_MORE": "{count} more", + "HIDE": "Hide {count} rows" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/teamsSettings.json b/app/javascript/dashboard/i18n/locale/lt/teamsSettings.json new file mode 100644 index 0000000..f66ac72 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Sukurti naują komandą", + "HEADER": "Komandos", + "LOADING": "Fetching teams", + "DESCRIPTION": "Teams allow you to organize agents into groups based on their responsibilities. An agent can belong to multiple teams. When working collaboratively, you can assign conversations to specific teams.", + "LEARN_MORE": "Learn more about teams", + "LIST": { + "404": "Šioje paskyroje nėra sukurtų komandų.", + "EDIT_TEAM": "Redaguoti komandą", + "NONE": "Nėra" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Sukurti naują komandą", + "DESC": "Pridėkite naujos komandos pavadinimą ir aprašymą." + }, + "AGENTS": { + "BUTTON_TEXT": "Pridėti agentus prie komandos", + "TITLE": "Pridėti agentus prie komandos - {teamName}", + "DESC": "Į naujai sukurtą komandą įtraukite agentus. Taip galėsite kaip komanda bendradarbiauti pokalbiuose, gauti pranešimus apie naujus įvykius tame pačiame pokalbyje." + }, + "WIZARD_CREATE": { + "TITLE": "Sukurti", + "BODY": "Sukurkite naują agentų komandą." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "Pridėti Agentus", + "BODY": "Pridėti agentus prie komandos." + }, + "WIZARD_FINISH": { + "TITLE": "Pabaigti", + "BODY": "Esate pasiruošę pradėti!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Redaguokite savo komandos duomenis", + "DESC": "Redaguokite savo komandos pavadinimą ir aprašymą.", + "BUTTON_TEXT": "Atnaujinti komandą" + }, + "AGENTS": { + "BUTTON_TEXT": "Atnaujinkite agentus komandoje", + "TITLE": "Pridėti agentus prie komandos - {teamName}", + "DESC": "Pridėkite agentus į savo naujai sukurtą komandą. Visiems pridėtiems agentams bus pranešta, kai pokalbis bus priskirtas šiai komandai." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Komandos informacija", + "ROUTE": "settings_teams_edit", + "BODY": "Pakeiskite pavadinimą, aprašymą ir kitą informaciją." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Keisti Agentus", + "ROUTE": "settings_teams_edit_members", + "BODY": "Redaguokite agentus savo komandoje." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Pabaigti", + "ROUTE": "settings_teams_edit_finish", + "BODY": "Esate pasiruošę pradėti!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Nepavyko išsaugoti komandos informacijos. Bandyk iš naujo." + }, + "AGENTS": { + "AGENT": "Agentas", + "EMAIL": "El. paštas", + "BUTTON_TEXT": "Pridėti agentus", + "ADD_AGENTS": "Agentai pridedami prie komandos...", + "SELECT": "pasirinkti", + "SELECT_ALL": "pasirinkti visus agentus", + "SELECTED_COUNT": "Pasirinkta {selected} iš {total} agentų." + }, + "ADD": { + "TITLE": "Pridėti agentus prie komandos - {teamName}", + "DESC": "Į naujai sukurtą komandą įtraukite agentus. Taip galėsite kaip komanda bendradarbiauti pokalbiuose, gauti pranešimus apie naujus įvykius tame pačiame pokalbyje.", + "SELECT": "pasirinkti", + "SELECT_ALL": "pasirinkti visus agentus", + "SELECTED_COUNT": "Pasirinkta {selected} iš {total} agentų.", + "BUTTON_TEXT": "Pridėti agentus", + "AGENT_VALIDATION_ERROR": "Pasirinkite bent vieną agentą." + }, + "FINISH": { + "TITLE": "Jūsų komanda yra pasiruošusi!", + "MESSAGE": "Dabar pokalbiuose galite bendradarbiauti kaip komanda. Gero palaikymo ", + "BUTTON_TEXT": "Pabaigti" + }, + "DELETE": { + "BUTTON_TEXT": "Ištrinti", + "API": { + "SUCCESS_MESSAGE": "Komanda ištrinta sėkmingai.", + "ERROR_MESSAGE": "Nepavyko ištrinti komandos. Bandykite dar kartą." + }, + "CONFIRM": { + "TITLE": "Are you sure you want to delete the team?", + "PLACE_HOLDER": "Įveskite {teamName}, kad patvirtintumėte", + "MESSAGE": "Ištrynus komandą, komandos priskyrimas bus pašalintas iš šiai komandai priskirtų pokalbių.", + "YES": "Ištrinti ", + "NO": "Atšaukti" + } + }, + "SETTINGS": "Nustatymai", + "FORM": { + "UPDATE": "Atnaujinti komandą", + "CREATE": "Sukurti komandą", + "NAME": { + "LABEL": "Komandos pavadinimas", + "PLACEHOLDER": "Pavyzdys: pardavimas, klientų aptarnavimas" + }, + "DESCRIPTION": { + "LABEL": "Komandos Aprašymas", + "PLACEHOLDER": "Trumpas šios komandos aprašymas." + }, + "AUTO_ASSIGN": { + "LABEL": "Leisti automatiškai priskirti šiai komandai." + }, + "SUBMIT_CREATE": "Sukurti komandą" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/webhooks.json b/app/javascript/dashboard/i18n/locale/lt/webhooks.json new file mode 100644 index 0000000..925f448 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Webhook nustatymai" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/lt/whatsappTemplates.json new file mode 100644 index 0000000..b84b04b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Whatsapp Šablonai", + "SUBTITLE": "Pasirinkite WhatsApp šabloną, kurį norite siųsti", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Ieškoti šablonų", + "NO_TEMPLATES_FOUND": "Šablonų nerasta", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Kategorija", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Kalba", + "TEMPLATE_BODY": "Šablono tekstas", + "CATEGORY": "Kategorija" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Kintamieji", + "LANGUAGE": "Kalba", + "CATEGORY": "Kategorija", + "VARIABLE_PLACEHOLDER": "Įveskite {variable} reikšmę", + "GO_BACK_LABEL": "Grįžti", + "SEND_MESSAGE_LABEL": "Išsiųsti pranešimą", + "FORM_ERROR_MESSAGE": "Prieš siųsdami užpildykite visus kintamuosius", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/yearInReview.json b/app/javascript/dashboard/i18n/locale/lt/yearInReview.json new file mode 100644 index 0000000..5884320 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "Uždaryti", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "pokalbiai", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "Parsisiųsti", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "Share" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/advancedFilters.json b/app/javascript/dashboard/i18n/locale/lv/advancedFilters.json new file mode 100644 index 0000000..47455cc --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Filtrēt sarunas", + "SUBTITLE": "Pievienojiet savus filtrus un nospiediet “Lietot filtrus”, lai pārvarētu tērzēšanas jucekli.", + "EDIT_CUSTOM_FILTER": "Rediģēt Mapi", + "CUSTOM_VIEWS_SUBTITLE": "Pievienot vai noņemt filtrus un atjaunināt mapi.", + "ADD_NEW_FILTER": "Pievienot filtru", + "FILTER_DELETE_ERROR": "Hmm, šķiet, ka mēs neko nevaram saglabāt! Lūdzu, pievienojiet vismaz vienu filtru, lai to saglabātu.", + "SUBMIT_BUTTON_LABEL": "Lietot filtrus", + "UPDATE_BUTTON_LABEL": "Atjaunināt mapi", + "CANCEL_BUTTON_LABEL": "Atcelt", + "CLEAR_BUTTON_LABEL": "Notīrīt filtrus", + "FOLDER_LABEL": "Mapes Nosaukums", + "FOLDER_QUERY_LABEL": "Mapes Vaicājums", + "EMPTY_VALUE_ERROR": "Nepieciešama vērtība.", + "TOOLTIP_LABEL": "Filtrēt sarunas", + "QUERY_DROPDOWN_LABELS": { + "AND": "UN", + "OR": "VAI" + }, + "INPUT_PLACEHOLDER": "Ievadiet vērtību", + "OPERATOR_LABELS": { + "equal_to": "Vienāds ar", + "not_equal_to": "Nav vienāds ar", + "does_not_contain": "Nesatur", + "is_present": "Iekļauj sevī", + "is_not_present": "Neiekļauj sevī", + "is_greater_than": "Ir lielāks par", + "is_less_than": "Ir mazāks par", + "days_before": "Ir x dienas pirms", + "starts_with": "Sākas ar", + "equalTo": "Vienāds ar", + "notEqualTo": "Nav vienāds ar", + "contains": "Satur", + "doesNotContain": "Nesatur", + "isPresent": "Iekļauj sevī", + "isNotPresent": "Neiekļauj sevī", + "isGreaterThan": "Ir lielāks par", + "isLessThan": "Ir mazāks par", + "daysBefore": "Ir x dienas pirms", + "startsWith": "Sākas ar" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "Patiesi", + "FALSE": "Nepatiesi" + }, + "ATTRIBUTES": { + "STATUS": "Statuss", + "ASSIGNEE_NAME": "Piešķīrēja vārds", + "INBOX_NAME": "Iesūtnes nosaukums", + "TEAM_NAME": "Komandas nosaukums", + "CONVERSATION_IDENTIFIER": "Sarunas identifikators", + "CAMPAIGN_NAME": "Kampaņas nosaukums", + "LABELS": "Etiķetes", + "BROWSER_LANGUAGE": "Pārlūkprogrammas valoda", + "PRIORITY": "Prioritāte", + "COUNTRY_NAME": "Valsts nosaukums", + "REFERER_LINK": "Atsauces saite", + "CUSTOM_ATTRIBUTE_LIST": "Saraksts", + "CUSTOM_ATTRIBUTE_TEXT": "Teksts", + "CUSTOM_ATTRIBUTE_NUMBER": "Numurs", + "CUSTOM_ATTRIBUTE_LINK": "Saite", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Izvēles rūtiņa", + "CREATED_AT": "Izveidots plkst", + "LAST_ACTIVITY": "Pēdējā darbība" + }, + "ERRORS": { + "VALUE_REQUIRED": "Nepieciešama vērtība", + "ATTRIBUTE_KEY_REQUIRED": "Nepieciešama atribūta atslēga", + "FILTER_OPERATOR_REQUIRED": "Nepieciešams filtra operators", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Vērtībai ir jābūt no 1 līdz 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standarta filtri", + "ADDITIONAL_FILTERS": "Papildu filtri", + "CUSTOM_ATTRIBUTES": "Pielāgoti atribūti" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Vai vēlaties saglabāt šo filtru?", + "LABEL": "Piešķiriet filtram nosaukumu", + "PLACEHOLDER": "Piešķiriet filtram nosaukumu.", + "ERROR_MESSAGE": "Nepieciešams nosaukums.", + "SAVE_BUTTON": "Saglabāt filtru", + "CANCEL_BUTTON": "Atcelt", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Mape ir veiksmīgi izveidota.", + "ERROR_MESSAGE": "Izveidojot mapi, radās kļūda." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segments ir veiksmīgi izveidots.", + "ERROR_MESSAGE": "Izveidojot segmentu, radās kļūda." + } + }, + "EDIT": { + "EDIT_BUTTON": "Rediģēt mapi" + }, + "DELETE": { + "DELETE_BUTTON": "Dzēst filtru", + "MODAL": { + "CONFIRM": { + "TITLE": "Apstiprināt dzēšanu", + "MESSAGE": "Vai tiešām vēlaties izdzēsīsiet šo filtru ", + "YES": "Jā, dzēst", + "NO": "Nē, paturēt" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Mape ir veiksmīgi izdzēsta.", + "ERROR_MESSAGE": "Dzēšot mapi, radās kļūda." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segments ir veiksmīgi izdzēsts.", + "ERROR_MESSAGE": "Dzēšot segmentu, radās kļūda." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/agentBots.json b/app/javascript/dashboard/i18n/locale/lv/agentBots.json new file mode 100644 index 0000000..bc51df4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Roboti", + "LOADING_EDITOR": "Notiek redaktora ielāde...", + "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try. You can manage your bots from this page or create new ones using the 'Add Bot' button.", + "LEARN_MORE": "Uzzināt vairāk par aģentiem robotiem", + "GLOBAL_BOT": "System bot", + "GLOBAL_BOT_BADGE": "Sistēma", + "AVATAR": { + "SUCCESS_DELETE": "Bot avatar deleted successfully", + "ERROR_DELETE": "Error deleting bot avatar, please try again" + }, + "BOT_CONFIGURATION": { + "TITLE": "Izvēlieties aģentu robotu", + "DESC": "Piešķiriet savai iesūtnei Aģentu Robotu. Viņi var apstrādāt sākotnējās sarunas un vajadzības gadījumā tās pārsūtīt tiešajam aģentam.", + "SUBMIT": "Atjaunināt", + "DISCONNECT": "Atvienot robotu", + "SUCCESS_MESSAGE": "Aģents robots ir veiksmīgi atjaunināts.", + "DISCONNECTED_SUCCESS_MESSAGE": "Aģenta robots ir veiksmīgi atvienots.", + "ERROR_MESSAGE": "Nevarēja atjaunināt aģenta robotu. Lūdzu mēģiniet vēlreiz.", + "DISCONNECTED_ERROR_MESSAGE": "Nevarēja atvienot aģenta robotu. Lūdzu mēģiniet vēlreiz.", + "SELECT_PLACEHOLDER": "Izvēlieties robotu" + }, + "ADD": { + "TITLE": "Add Bot", + "CANCEL_BUTTON_TEXT": "Atcelt", + "API": { + "SUCCESS_MESSAGE": "Robots ir veiksmīgi pievienots.", + "ERROR_MESSAGE": "Nevarēja pievienot robotu. Lūdzu, pamēģiniet vēlāk vēlreiz." + } + }, + "LIST": { + "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.", + "LOADING": "Notiek robotu iegūšana...", + "TABLE_HEADER": { + "DETAILS": "Bot Details", + "URL": "Webhook URL" + } + }, + "DELETE": { + "BUTTON_TEXT": "Dzēst", + "TITLE": "Dzēst robotu", + "CONFIRM": { + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Are you sure you want to delete {name}?", + "YES": "Jā, Dzēst", + "NO": "Nē, Paturēt" + }, + "API": { + "SUCCESS_MESSAGE": "Robots ir veiksmīgi izdzēsts.", + "ERROR_MESSAGE": "Nevarēja izdzēst robotu. Lūdzu mēģiniet vēlreiz." + } + }, + "EDIT": { + "BUTTON_TEXT": "Rediģēt", + "TITLE": "Rediģēt robotu", + "API": { + "SUCCESS_MESSAGE": "Robots ir veiksmīgi atjaunināts.", + "ERROR_MESSAGE": "Nevarēja atjaunināt robotu. Lūdzu mēģiniet vēlreiz." + } + }, + "ACCESS_TOKEN": { + "TITLE": "Piekļuves Token", + "DESCRIPTION": "Copy the access token and save it securely", + "COPY_SUCCESSFUL": "Access token copied to clipboard", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "Robota nosaukums", + "PLACEHOLDER": "Enter bot name", + "REQUIRED": "Jānorāda robota nosaukums" + }, + "DESCRIPTION": { + "LABEL": "Apraksts", + "PLACEHOLDER": "Ko dara šis robots?" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "Webhook URL is required" + }, + "ERRORS": { + "NAME": "Jānorāda robota nosaukums", + "URL": "Webhook URL is required", + "VALID_URL": "Please enter a valid URL starting with http:// or https://" + }, + "CANCEL": "Atcelt", + "CREATE": "Create Bot", + "UPDATE": "Update Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them." + }, + "TYPES": { + "WEBHOOK": "Webhook robots" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/agentMgmt.json b/app/javascript/dashboard/i18n/locale/lv/agentMgmt.json new file mode 100644 index 0000000..e75c6d3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Aģenti", + "HEADER_BTN_TXT": "Pievienot Aģentu", + "LOADING": "Aģentu Saraksta Iegūšana", + "DESCRIPTION": "Aģents ir jūsu klientu atbalsta komandas loceklis, kurš var skatīt lietotāja ziņojumus un atbildēt uz tiem. Tālāk esošajā sarakstā ir parādīti visi aģenti jūsu kontā.", + "LEARN_MORE": "Uzzināt par lietotāju lomām", + "AGENT_TYPES": { + "ADMINISTRATOR": "Administrators", + "AGENT": "Aģents" + }, + "LIST": { + "404": "Šim kontam nav piesaistīts neviens aģents", + "TITLE": "Pārvaldīt Jūsu komandas aģentus", + "DESC": "Jūs varat pievienot/noņemt aģentus pie/no savas komandas.", + "NAME": "Nosaukums", + "EMAIL": "Epasts", + "STATUS": "Statuss", + "ACTIONS": "Darbības", + "VERIFIED": "Pārbaudīts", + "VERIFICATION_PENDING": "Tiek gaidīta verifikācija", + "AVAILABLE_CUSTOM_ROLE": "Pieejamās pielāgotu lomu atļaujas" + }, + "ADD": { + "TITLE": "Pievienot aģentu Jūsu komandai", + "DESC": "Jūs varat pievienot personas, kuras būs spējīgas apstrādāt iesūtnes un sniegt atbalstu.", + "CANCEL_BUTTON_TEXT": "Atcelt", + "FORM": { + "NAME": { + "LABEL": "Aģenta Vārds", + "PLACEHOLDER": "Lūdzu, ievadiet aģenta vārdu" + }, + "AGENT_TYPE": { + "LABEL": "Loma", + "PLACEHOLDER": "Lūdzu, izvēlieties lomu", + "ERROR": "Nepieciešama loma" + }, + "EMAIL": { + "LABEL": "e-pasta Adrese", + "PLACEHOLDER": "Lūdzu, ievadiet aģenta e-pasta adresi" + }, + "SUBMIT": "Pievienot Aģentu" + }, + "API": { + "SUCCESS_MESSAGE": "Aģents ir veiksmīgi pievienots", + "EXIST_MESSAGE": "Aģenta e-pasts jau tiek izmantots. Lūdzu, pamēģiniet citu e-pasta adresi", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" + } + }, + "DELETE": { + "BUTTON_TEXT": "Dzēst", + "API": { + "SUCCESS_MESSAGE": "Aģents ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" + }, + "CONFIRM": { + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai vēlaties izdzēst ", + "YES": "Jā, Dzēst ", + "NO": "Nē, Paturēt " + } + }, + "EDIT": { + "TITLE": "Rediģēt aģentu", + "FORM": { + "NAME": { + "LABEL": "Aģenta Vārds", + "PLACEHOLDER": "Lūdzu, ievadiet aģenta vārdu" + }, + "AGENT_TYPE": { + "LABEL": "Loma", + "PLACEHOLDER": "Lūdzu, izvēlieties lomu", + "ERROR": "Nepieciešama loma" + }, + "EMAIL": { + "LABEL": "e-pasta Adrese", + "PLACEHOLDER": "Lūdzu, ievadiet aģenta e-pasta adresi" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Pieejamība", + "PLACEHOLDER": "Lūdzu, izvēlieties pieejamības statusu", + "ERROR": "Nepieciešama pieejamība" + }, + "SUBMIT": "Rediģēt Aģentu" + }, + "BUTTON_TEXT": "Rediģēt", + "CANCEL_BUTTON_TEXT": "Atcelt", + "API": { + "SUCCESS_MESSAGE": "Aģents ir veiksmīgi atjaunināts", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Atiestatīt Paroli", + "ADMIN_SUCCESS_MESSAGE": "Aģentam tika nosūtīts e-pasta ziņojums ar paroles atiestatīšanas norādījumiem", + "SUCCESS_MESSAGE": "Aģenta parole ir veiksmīgi atiestatīta", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" + } + }, + "SEARCH": { + "NO_RESULTS": "Nav atrasts." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "Nav", + "TITLE": { + "AGENT": "Izvēlieties aģentu", + "TEAM": "Izvēlieties komandu" + }, + "LIST": { + "NONE": "Nav" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "Aģenti nav atrasti", + "TEAM": "Komandas nav atrastas" + }, + "PLACEHOLDER": { + "AGENT": "Meklēt aģentus", + "TEAM": "Meklēt komandas", + "INPUT": "Meklēt aģentus" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/lv/attributesMgmt.json new file mode 100644 index 0000000..a61d705 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Pielāgotas Īpašības", + "HEADER_BTN_TXT": "Pievienot Pielāgotu Īpašību", + "LOADING": "Notiek pielāgotu īpašību iegūšana", + "DESCRIPTION": "Pielāgots atribūts ļauj izsekot papildu informāciju par jūsu kontaktpersonām vai sarunām, piemēram, abonēšanas plānu vai viņu pirmā pirkuma datumu. Varat pievienot dažāda veida pielāgotus atribūtus, piemēram, tekstu, sarakstus vai skaitļus, lai tvertu konkrētu jums nepieciešamo informāciju.", + "LEARN_MORE": "Uzzināt vairāk par pielāgotajiem atribūtiem", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Saruna", + "CONTACT": "Kontaktpersona" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Teksts", + "NUMBER": "Numurs", + "LINK": "Saite", + "DATE": "Date", + "LIST": "Saraksts", + "CHECKBOX": "Izvēles rūtiņa" + }, + "ADD": { + "TITLE": "Pievienot Pielāgotu Īpašību", + "SUBMIT": "Izveidot", + "CANCEL_BUTTON_TEXT": "Atcelt", + "FORM": { + "NAME": { + "LABEL": "Parādāmais Nosaukums", + "PLACEHOLDER": "Ievadiet pielāgotās īpašības parādāmo nosaukumu", + "ERROR": "Nepieciešams nosaukums" + }, + "DESC": { + "LABEL": "Apraksts", + "PLACEHOLDER": "Ievadiet pielāgotās īpašības aprakstu", + "ERROR": "Nepieciešams apraksts" + }, + "MODEL": { + "LABEL": "Attiecas uz", + "PLACEHOLDER": "Lūdzu, izvēlieties vienu", + "ERROR": "Nepieciešams modelis" + }, + "TYPE": { + "LABEL": "Tips", + "PLACEHOLDER": "Lūdzu, izvēlieties tipu", + "ERROR": "Nepieciešams tips", + "LIST": { + "LABEL": "Parādīt Vērtības", + "PLACEHOLDER": "Lūdzu, ievadiet vērtību un nospiediet taustiņu enter", + "ERROR": "Jābūt vismaz vienai vērtībai" + } + }, + "KEY": { + "LABEL": "Atslēga", + "PLACEHOLDER": "Ievadiet pielāgotas īpašības atslēgu", + "ERROR": "Nepieciešama atslēga", + "IN_VALID": "Nederīga atslēga" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Šablons", + "PLACEHOLDER": "Lūdzu, ievadiet pielāgotu atribūtu regex šablonu. (Neobligāti)" + }, + "REGEX_CUE": { + "LABEL": "Regex Norādījums", + "PLACEHOLDER": "Lūdzu, ievadiet regex šablona norādījumu. (Neobligāti)" + }, + "ENABLE_REGEX": { + "LABEL": "Iespējot regex pārbaudi" + } + }, + "API": { + "SUCCESS_MESSAGE": "Pielāgotā īpašība ir veiksmīgi pievienota!", + "ERROR_MESSAGE": "Nevarēja izveidot Pielāgotu Atribūtu. Lūdzu, vēlāk pamēģiniet vēlreiz." + } + }, + "DELETE": { + "BUTTON_TEXT": "Dzēst", + "API": { + "SUCCESS_MESSAGE": "Pielāgotā Īpašība ir veiksmīgi izdzēsta.", + "ERROR_MESSAGE": "Nevarēja izdzēst pielāgoto īpašību. Mēģiniet vēlreiz." + }, + "CONFIRM": { + "TITLE": "Vai esat pārliecināts, ka vēlaties izdzēst - {attributeName}", + "PLACE_HOLDER": "Lai apstiprinātu, lūdzu, uzrakstiet {attributeName}", + "MESSAGE": "Dzēšana noņems pielāgoto īpašību", + "YES": "Dzēst ", + "NO": "Atcelt" + } + }, + "EDIT": { + "TITLE": "Rediģēt Pielāgoto Īpašību", + "UPDATE_BUTTON_TEXT": "Atjaunināt", + "TYPE": { + "LIST": { + "LABEL": "Parādīt Vērtības", + "PLACEHOLDER": "Lūdzu, ievadiet vērtības un nospiediet taustiņu enter" + } + }, + "API": { + "SUCCESS_MESSAGE": "Pielāgotā Īpašība ir veiksmīgi atjaunināta", + "ERROR_MESSAGE": "Atjauninot pielāgoto īpašību, radās kļūda. Lūdzu, mēģiniet vēlreiz" + } + }, + "TABS": { + "HEADER": "Pielāgotās Īpašības", + "CONVERSATION": "Saruna", + "CONTACT": "Kontaktpersona" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nosaukums", + "DESCRIPTION": "Apraksts", + "TYPE": "Tips", + "KEY": "Atslēga" + }, + "BUTTONS": { + "EDIT": "Rediģēt", + "DELETE": "Dzēst" + }, + "EMPTY_RESULT": { + "404": "Nav izveidotas pielāgotas īpašības", + "NOT_FOUND": "Nav nokonfigurētas pielāgotas īpašības" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Šablons", + "PLACEHOLDER": "Lūdzu, ievadiet pielāgotu atribūtu regex šablonu. (Neobligāti)" + }, + "REGEX_CUE": { + "LABEL": "Regex Norādījums", + "PLACEHOLDER": "Lūdzu, ievadiet regex šablona norādījumu. (Neobligāti)" + }, + "ENABLE_REGEX": { + "LABEL": "Iespējot regex pārbaudi" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/auditLogs.json b/app/javascript/dashboard/i18n/locale/lv/auditLogs.json new file mode 100644 index 0000000..180eb96 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Audita Žurnāli", + "HEADER_BTN_TXT": "Pievienot Audita Žurnālus", + "LOADING": "Audita Žurnālu Iegūšana", + "DESCRIPTION": "Audita žurnāli saglabā ierakstus par jūsu konta darbību aktivitātēm, ļaujot jums izsekot un pārbaudīt savu kontu, komandu vai pakalpojumus.", + "LEARN_MORE": "Uzzināt vairāk par audita žurnāliem", + "SEARCH_404": "Šim vaicājumam nav atbilstošu vienumu", + "SIDEBAR_TXT": "Audita Žurnāls
Audita Žurnāli ir notikumu un darbību pēdas Chatwoot sistēmā.
", + "LIST": { + "404": "Šajā kontā nav pieejami Audita Žurnāli.", + "TITLE": "Pārvaldīt Audita Žurnālus", + "DESC": "Audita Žurnāli ir notikumu un darbību pēdas Chatwoot sistēmā.", + "TABLE_HEADER": { + "ACTIVITY": "Lietotājs", + "TIME": "Darbība", + "IP_ADDRESS": "IP adrese" + } + }, + "API": { + "SUCCESS_MESSAGE": "AuditaŽurnāli ir veiksmīgi iegūti", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" + }, + "DEFAULT_USER": "Sistēma", + "AUTOMATION_RULE": { + "ADD": "{agentName} izveidoja jaunu automatizācijas noteikumu (#{id})", + "EDIT": "{agentName} atjaunināja automatizācijas noteikumu (#{id})", + "DELETE": "{agentName} izdzēsa automatizācijas noteikumu (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} uzaicināja {invitee} kontā kā {role}", + "EDIT": { + "SELF": "{agentName} mainīja savu {attributes} uz {values}", + "OTHER": "{agentName} mainīja {user} {attributes} uz {values}", + "DELETED": "{agentName} mainīja dzēstā lietotāja {attributes} uz {values}" + } + }, + "INBOX": { + "ADD": "{agentName} izveidoja jaunu iesūtni (#{id})", + "EDIT": "{agentName} atjaunināja iesūtni (#{id})", + "DELETE": "{agentName} izdzēsa iesūtni (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} izveidoja jaunu webhook (#{id})", + "EDIT": "{agentName} atjaunināja webhook (#{id})", + "DELETE": "{agentName} izdzēsa webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} pierakstījies", + "SIGN_OUT": "{agentName} izrakstījies" + }, + "TEAM": { + "ADD": "{agentName} izveidoja jaunu komandu (#{id})", + "EDIT": "{agentName} atjaunināja komandu (#{id})", + "DELETE": "{agentName} izdzēsa komandu (#{id})" + }, + "MACRO": { + "ADD": "{agentName} izveidoja jaunu makro (#{id})", + "EDIT": "{agentName} atjaunināja makro (#{id})", + "DELETE": "{agentName} izdzēsa makro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} pievienoja {user} iesūtnei(#{inbox_id})", + "REMOVE": "{agentName} noņēma {user} no iesūtnes(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} pievienoja {user} komandai(#{team_id})", + "REMOVE": "{agentName} noņēma {user} no komandas(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} atjaunināja konta konfigurāciju (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} deleted conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/automation.json b/app/javascript/dashboard/i18n/locale/lv/automation.json new file mode 100644 index 0000000..4afc3d0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automatizācija", + "DESCRIPTION": "Automatizācija var aizstāt un racionalizēt esošos procesus, kuriem nepieciešama manuāla piepūle, piemēram, etiķešu pievienošana un sarunu piešķiršana vispiemērotākajam aģentam. Tas ļauj komandai koncentrēties uz savām stiprajām pusēm, vienlaikus samazinot laiku, kas pavadīts ikdienas uzdevumiem.", + "LEARN_MORE": "Uzzināt vairāk par automatizāciju", + "HEADER_BTN_TXT": "Pievienot Automatizācijas Noteikumu", + "LOADING": "Notiek automatizācijas noteikumu iegūšana", + "ADD": { + "TITLE": "Pievienot Automatizācijas Noteikumu", + "SUBMIT": "Izveidot", + "CANCEL_BUTTON_TEXT": "Atcelt", + "FORM": { + "NAME": { + "LABEL": "Noteikuma Nosaukums", + "PLACEHOLDER": "Ievadiet noteikuma nosaukumu", + "ERROR": "Nepieciešams nosaukums" + }, + "DESC": { + "LABEL": "Apraksts", + "PLACEHOLDER": "Ievadiet noteikuma aprakstu", + "ERROR": "Nepieciešams apraksts" + }, + "EVENT": { + "LABEL": "Notikums", + "PLACEHOLDER": "Lūdzu, izvēlieties vienu", + "ERROR": "Nepieciešams notikums" + }, + "CONDITIONS": { + "LABEL": "Nosacījumi" + }, + "ACTIONS": { + "LABEL": "Darbības" + } + }, + "CONDITION_BUTTON_LABEL": "Pievienot Nosacījumu", + "ACTION_BUTTON_LABEL": "Pievienot Darbību", + "API": { + "SUCCESS_MESSAGE": "Automatizācijas noteikums ir veiksmīgi pievienots", + "ERROR_MESSAGE": "Nevarēja izveidot automatizācijas noteikumu. Lūdzu, vēlāk mēģiniet vēlreiz" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nosaukums", + "DESCRIPTION": "Apraksts", + "ACTIVE": "Aktīvs", + "CREATED_ON": "Izveidots" + }, + "404": "Automatizācijas noteikumi nav atrasti" + }, + "DELETE": { + "TITLE": "Dzēst automatizācijas noteikumu", + "SUBMIT": "Dzēst", + "CANCEL_BUTTON_TEXT": "Atcelt", + "CONFIRM": { + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai vēlaties izdzēst ", + "YES": "Jā, Dzēst ", + "NO": "Nē, Paturēt " + }, + "API": { + "SUCCESS_MESSAGE": "Automatizācijas noteikums ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Nevarēja izdzēst automatizācijas noteikumu. Lūdzu, vēlāk mēģiniet vēlreiz" + } + }, + "EDIT": { + "TITLE": "Rediģēt Automatizācijas Noteikumu", + "SUBMIT": "Atjaunināt", + "CANCEL_BUTTON_TEXT": "Atcelt", + "API": { + "SUCCESS_MESSAGE": "Automatizācijas noteikums ir veiksmīgi atjaunināts", + "ERROR_MESSAGE": "Nevarēja atjaunināt automatizācijas noteikumu. Lūdzu, vēlāk mēģiniet vēlreiz" + } + }, + "CLONE": { + "TOOLTIP": "Klonēt", + "API": { + "SUCCESS_MESSAGE": "Automatizācija ir veiksmīgi noklonēta", + "ERROR_MESSAGE": "Nevarēja noklonēt automatizācijas noteikumu. Lūdzu, vēlāk mēģiniet vēlreiz" + } + }, + "FORM": { + "EDIT": "Rediģēt", + "CREATE": "Izveidot", + "DELETE": "Dzēst", + "CANCEL": "Atcelt", + "RESET_MESSAGE": "Mainot notikuma tipu tiks atiestatīti tālāk pievienotie nosacījumi un notikumi" + }, + "CONDITION": { + "DELETE_MESSAGE": "Lai saglabātu, Jums ir nepieciešams vismaz viens nosacījums", + "CONTACT_CUSTOM_ATTR_LABEL": "Kontaktpersonu Pielāgotās Īpašības", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Sarunu Pielāgotās Īpašības" + }, + "ACTION": { + "DELETE_MESSAGE": "Lai saglabātu, ir nepieciešama vismaz viena darbība", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Ievadiet savu ziņojumu šeit", + "TEAM_DROPDOWN_PLACEHOLDER": "Izvēlieties komandas", + "EMAIL_INPUT_PLACEHOLDER": "Ievadiet e-pastu", + "URL_INPUT_PLACEHOLDER": "Ievadiet URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Aktivizēt Automatizācijas Noteikumu", + "DEACTIVATION_TITLE": "Deaktivizēt Automatizācijas Noteikumu", + "ACTIVATION_DESCRIPTION": "Šī darbība aktivizēs automatizācijas noteikumu '{automationName}'. Vai tiešām vēlaties turpināt?", + "DEACTIVATION_DESCRIPTION": "Šī darbība deaktivizēs automatizācijas noteikumu '{automationName}'. Vai tiešām vēlaties turpināt?", + "ACTIVATION_SUCCESFUL": "Automatizācijas Noteikums ir Veiksmīgi Aktivizēts", + "DEACTIVATION_SUCCESFUL": "Automatizācijas Noteikums ir Veiksmīgi Deaktivizēts", + "ACTIVATION_ERROR": "Nevarēja Aktivizēt Automatizāciju. Lūdzu, vēlāk mēģiniet vēlreiz", + "DEACTIVATION_ERROR": "Nevarēja Deaktivizēt Automatizāciju. Lūdzu, vēlāk mēģiniet vēlreiz", + "CONFIRMATION_LABEL": "Jā", + "CANCEL_LABEL": "Nē" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Nevarēja augšupielādēt pielikumu. Lūdzu, mēģiniet vēlreiz", + "LABEL_IDLE": "Augšupielādēt pielikumu", + "LABEL_UPLOADING": "Notiek augšupielāde...", + "LABEL_UPLOADED": "Veiksmīgi Augšupielādēts", + "LABEL_UPLOAD_FAILED": "Augšupielāde neizdevās" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Nepieciešama atribūta atslēga", + "FILTER_OPERATOR_REQUIRED": "Nepieciešams filtra operators", + "VALUE_REQUIRED": "Nepieciešama vērtība", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Vērtībai ir jābūt no 1 līdz 998", + "ACTION_PARAMETERS_REQUIRED": "Nepieciešami darbības parametri", + "ATLEAST_ONE_CONDITION_REQUIRED": "Ir nepieciešams vismaz viens nosacījums", + "ATLEAST_ONE_ACTION_REQUIRED": "Ir nepieciešama vismaz viena darbība" + }, + "NONE_OPTION": "Nav", + "EVENTS": { + "CONVERSATION_CREATED": "Saruna izveidota", + "CONVERSATION_UPDATED": "Saruna Atjaunināta", + "MESSAGE_CREATED": "Ziņojums Izveidots", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Saruna Atvērta" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Piešķirt Aģentam", + "ASSIGN_TEAM": "Piešķirt Komandai", + "ADD_LABEL": "Pievienot Etiķeti", + "REMOVE_LABEL": "Noņemt Etiķeti", + "SEND_EMAIL_TO_TEAM": "Nosūtīt E-pastu Komandai", + "SEND_EMAIL_TRANSCRIPT": "Nosūtīt uz E-pastu Transkriptu", + "MUTE_CONVERSATION": "Izslēgt Sarunu", + "SNOOZE_CONVERSATION": "Atlikt Sarunu", + "RESOLVE_CONVERSATION": "Atrisināt Sarunu", + "SEND_WEBHOOK_EVENT": "Nosūtīt Webhook Notikumu", + "SEND_ATTACHMENT": "Sūtīt Pielikumu", + "SEND_MESSAGE": "Nosūtīt Ziņojumu", + "ADD_PRIVATE_NOTE": "Pievienot Privātu Piezīmi", + "CHANGE_PRIORITY": "Mainīt prioritāti", + "ADD_SLA": "Pievienot SLA", + "OPEN_CONVERSATION": "Atvērt sarunu" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "Nav", + "LOW": "Zema", + "MEDIUM": "Vidēja", + "HIGH": "Augsta", + "URGENT": "Steidzama" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Ziņojuma Tips", + "MESSAGE_CONTAINS": "Ziņojums Satur", + "EMAIL": "E-pasts", + "INBOX": "Iesūtne", + "CONVERSATION_LANGUAGE": "Sarunas Valoda", + "PHONE_NUMBER": "Telefona numurs", + "STATUS": "Statuss", + "BROWSER_LANGUAGE": "Pārlūkprogrammas Valoda", + "MAIL_SUBJECT": "E-pasta Tēma", + "COUNTRY_NAME": "Valsts", + "REFERER_LINK": "Novirzītāja Saite", + "ASSIGNEE_NAME": "Uzdevuma saņēmējs", + "TEAM_NAME": "Komanda", + "PRIORITY": "Prioritāte", + "LABELS": "Etiķetes" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/bulkActions.json b/app/javascript/dashboard/i18n/locale/lv/bulkActions.json new file mode 100644 index 0000000..6c8c3c4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "Izvēlētas {conversationCount} sarunas", + "AGENT_SELECT_LABEL": "Izvēlieties aģentu", + "ASSIGN_CONFIRMATION_LABEL": "Vai patiešām vēlaties piesaistīt {conversationCount} {conversationLabel} pie", + "UNASSIGN_CONFIRMATION_LABEL": "Vai patiešām vēlaties atsaistīt {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Atgriezties", + "ASSIGN_LABEL": "Piešķirt", + "YES": "Jā", + "SEARCH_INPUT_PLACEHOLDER": "Meklēt", + "ASSIGN_AGENT_TOOLTIP": "Piešķirt aģentu", + "ASSIGN_TEAM_TOOLTIP": "Piešķirt komandu", + "ASSIGN_SUCCESFUL": "Sarunas ir veiksmīgi piešķirtas.", + "ASSIGN_FAILED": "Neizdevās piešķirt sarunas. Lūdzu mēģiniet vēlreiz.", + "RESOLVE_SUCCESFUL": "Sarunas ir veiksmīgi atrisinātas.", + "RESOLVE_FAILED": "Neizdevās atrisināt sarunas. Lūdzu mēģiniet vēlreiz.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Šajā lapā redzamās sarunas ir tikai izvēlētas.", + "AGENT_LIST_LOADING": "Notiek aģentu ielāde", + "UPDATE": { + "CHANGE_STATUS": "Mainīt statusu", + "SNOOZE_UNTIL": "Atlikt", + "UPDATE_SUCCESFUL": "Sarunas statuss ir veiksmīgi atjaunināts.", + "UPDATE_FAILED": "Neizdevās atjaunināt sarunas. Lūdzu mēģiniet vēlreiz." + }, + "LABELS": { + "ASSIGN_LABELS": "Piešķirt etiķetes", + "NO_LABELS_FOUND": "Etiķetes nav atrastas", + "ASSIGN_SELECTED_LABELS": "Piešķirt izvēlētās etiķetes", + "ASSIGN_SUCCESFUL": "Etiķetes ir veiksmīgi piešķirtas.", + "ASSIGN_FAILED": "Neizdevās piešķirt etiķetes. Lūdzu mēģiniet vēlreiz." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Izvēlieties komandu", + "NONE": "Nav", + "NO_TEAMS_AVAILABLE": "Šim kontam vēl nav pievienota neviena komanda.", + "ASSIGN_SELECTED_TEAMS": "Piešķirt izvēlēto komandu.", + "ASSIGN_SUCCESFUL": "Komandas ir veiksmīgi piešķirtas.", + "ASSIGN_FAILED": "Neizdevās piešķirt komandu. Lūdzu mēģiniet vēlreiz." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/campaign.json b/app/javascript/dashboard/i18n/locale/lv/campaign.json new file mode 100644 index 0000000..ed01892 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Tiešraides tērzēšanas kampaņas", + "NEW_CAMPAIGN": "Izveidot kampaņu", + "CARD": { + "STATUS": { + "ENABLED": "Iespējots", + "DISABLED": "Atspējots" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Sūtīja", + "BOT": "Bot", + "FROM": "no", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "Nav pieejama neviena tiešsaistes tērzēšanas kampaņa", + "SUBTITLE": "Sazinieties ar saviem klientiem, izmantojot proaktīvus ziņojumus. Lai sāktu, noklikšķiniet uz \"Izveidot kampaņu\"." + }, + "CREATE": { + "TITLE": "Izveidot tiešraides tērzēšanas kampaņu", + "CANCEL_BUTTON_TEXT": "Atcelt", + "CREATE_BUTTON_TEXT": "Izveidot", + "FORM": { + "TITLE": { + "LABEL": "Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet kampaņas nosaukumu", + "ERROR": "Nepieciešams nosaukums" + }, + "MESSAGE": { + "LABEL": "Ziņojums", + "PLACEHOLDER": "Lūdzu, ievadiet kampaņas ziņojumu", + "ERROR": "Nepieciešams ziņojums" + }, + "INBOX": { + "LABEL": "Izvēlieties Iesūtni", + "PLACEHOLDER": "Izvēlieties Iesūtni", + "ERROR": "Nepieciešama iesūtne" + }, + "SENT_BY": { + "LABEL": "Sūtīja", + "PLACEHOLDER": "Lūdzu, atlasiet sūtītāju", + "ERROR": "Nepieciešams sūtītājs" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Lūdzu, ievadiet URL", + "ERROR": "Lūdzu, ievadiet derīgu URL" + }, + "TIME_ON_PAGE": { + "LABEL": "Lapā pavadītais laiks (Sekundes)", + "PLACEHOLDER": "Lūdzu, ievadiet laiku", + "ERROR": "Nepieciešams lapā pavadītais laiks" + }, + "OTHER_PREFERENCES": { + "TITLE": "Citas preferences", + "ENABLED": "Iespējot kampaņu", + "TRIGGER_ONLY_BUSINESS_HOURS": "Aktivizēt tikai darba laikā" + }, + "BUTTONS": { + "CREATE": "Izveidot", + "CANCEL": "Atcelt" + }, + "API": { + "SUCCESS_MESSAGE": "Tiešraides tērzēšanas kampaņa ir veiksmīgi izveidota", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu mēģiniet vēlreiz." + } + } + }, + "EDIT": { + "TITLE": "Rediģēt tiešsaistes tērzēšanas kampaņu", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Tiešraides tērzēšanas kampaņa ir veiksmīgi atjaunināta", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu mēģiniet vēlreiz." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS kampaņas", + "NEW_CAMPAIGN": "Izveidot kampaņu", + "EMPTY_STATE": { + "TITLE": "SMS kampaņas nav pieejamas", + "SUBTITLE": "Uzsāciet SMS kampaņu, lai tieši sasniegtu savus klientus. Viegli nosūtiet piedāvājumus vai paziņojumus. Lai sāktu, noklikšķiniet uz \"Izveidot kampaņu\"." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Pabeigts", + "SCHEDULED": "Plānots" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Nosūtīts no", + "ON": "" + } + }, + "CREATE": { + "TITLE": "Izveidot SMS kampaņu", + "CANCEL_BUTTON_TEXT": "Atcelt", + "CREATE_BUTTON_TEXT": "Izveidot", + "FORM": { + "TITLE": { + "LABEL": "Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet kampaņas nosaukumu", + "ERROR": "Nepieciešams nosaukums" + }, + "MESSAGE": { + "LABEL": "Ziņojums", + "PLACEHOLDER": "Lūdzu, ievadiet kampaņas ziņojumu", + "ERROR": "Nepieciešams ziņojums" + }, + "INBOX": { + "LABEL": "Izvēlieties Iesūtni", + "PLACEHOLDER": "Izvēlieties Iesūtni", + "ERROR": "Nepieciešama iesūtne" + }, + "AUDIENCE": { + "LABEL": "Auditorija", + "PLACEHOLDER": "Izvēlieties klientu etiķetes", + "ERROR": "Nepieciešama auditorija" + }, + "SCHEDULED_AT": { + "LABEL": "Plānotais laiks", + "PLACEHOLDER": "Lūdzu, izvēlieties laiku", + "ERROR": "Nepieciešams ieplānotais laiks" + }, + "BUTTONS": { + "CREATE": "Izveidot", + "CANCEL": "Atcelt" + }, + "API": { + "SUCCESS_MESSAGE": "SMS kampaņa veiksmīgi izveidota", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu mēģiniet vēlreiz." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp campaigns", + "NEW_CAMPAIGN": "Izveidot kampaņu", + "EMPTY_STATE": { + "TITLE": "No WhatsApp campaigns are available", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Pabeigts", + "SCHEDULED": "Plānots" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Nosūtīts no", + "ON": "" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "Atcelt", + "CREATE_BUTTON_TEXT": "Izveidot", + "FORM": { + "TITLE": { + "LABEL": "Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet kampaņas nosaukumu", + "ERROR": "Nepieciešams nosaukums" + }, + "INBOX": { + "LABEL": "Izvēlieties Iesūtni", + "PLACEHOLDER": "Izvēlieties Iesūtni", + "ERROR": "Nepieciešama iesūtne" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "Apstrādāt {templateName}", + "LANGUAGE": "Valoda", + "CATEGORY": "Kategorija", + "VARIABLES_LABEL": "Mainīgie", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "Auditorija", + "PLACEHOLDER": "Izvēlieties klientu etiķetes", + "ERROR": "Nepieciešama auditorija" + }, + "SCHEDULED_AT": { + "LABEL": "Plānotais laiks", + "PLACEHOLDER": "Lūdzu, izvēlieties laiku", + "ERROR": "Nepieciešams ieplānotais laiks" + }, + "BUTTONS": { + "CREATE": "Izveidot", + "CANCEL": "Atcelt" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu mēģiniet vēlreiz." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Vai tiešām vēlaties izdzēst?", + "DESCRIPTION": "Dzēšanas darbība ir neatgriezeniska, un to nevar atsaukt.", + "CONFIRM": "Dzēst", + "API": { + "SUCCESS_MESSAGE": "Kampaņa ir veiksmīgi izdzēsta", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu mēģiniet vēlreiz." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/lv/cannedMgmt.json new file mode 100644 index 0000000..1f41be1 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Sagatavotās Atbildes", + "LEARN_MORE": "Uzzināt vairāk par sagatavotajām atbildēm", + "DESCRIPTION": "Sagatavotās atbildes ir iepriekš uzrakstītas atbilžu veidnes, kas palīdz ātri atbildēt uz sarunu. Lai sarunas laikā ievietotu gatavu atbildi, aģenti var ierakstīt rakstzīmi “/”, kam seko īskods. ", + "HEADER_BTN_TXT": "Pievienot sagatavoto atbildi", + "LOADING": "Notiek sagatavoto atbilžu iegūšana...", + "SEARCH_404": "Šim vaicājumam nav atbilstošu vienumu.", + "LIST": { + "404": "Šajā kontā nav pieejama neviena sagatavota atbilde.", + "TITLE": "Pārvaldīt sagatavotās atbildes", + "DESC": "Sagatavotās atbildes ir iepriekš definētas atbilžu veidnes, kuras var izmantot lai ātri nosūtītu atbildes uz sarunām.", + "TABLE_HEADER": { + "SHORT_CODE": "Īsais kods", + "CONTENT": "Saturs", + "ACTIONS": "Darbības" + } + }, + "ADD": { + "TITLE": "Pievienot sagatavoto atbildi", + "DESC": "Sagatavotās atbildes ir iepriekš definētas atbilžu veidnes, kuras var izmantot lai ātri nosūtītu atbildes uz sarunām.", + "CANCEL_BUTTON_TEXT": "Atcelt", + "FORM": { + "SHORT_CODE": { + "LABEL": "Īsais kods", + "PLACEHOLDER": "Lūdzu, ievadiet īso kodu.", + "ERROR": "Nepieciešams īsais kods." + }, + "CONTENT": { + "LABEL": "Ziņojums", + "PLACEHOLDER": "Lūdzu, uzrakstiet ziņojumu, kuru vēlaties saglabāt kā veidni, ko izmantot vēlāk.", + "ERROR": "Nepieciešams ziņojums." + }, + "SUBMIT": "Iesniegt" + }, + "API": { + "SUCCESS_MESSAGE": "Sagatavotā atbilde ir veiksmīgi pievienota.", + "ERROR_MESSAGE": "Nevarēja izveidot savienojumu ar Woot serveri. Lūdzu mēģiniet vēlreiz." + } + }, + "EDIT": { + "TITLE": "Rediģēt sagatavoto atbildi", + "CANCEL_BUTTON_TEXT": "Atcelt", + "FORM": { + "SHORT_CODE": { + "LABEL": "Īsais kods", + "PLACEHOLDER": "Lūdzu, ievadiet īso kodu.", + "ERROR": "Nepieciešams īsais kods." + }, + "CONTENT": { + "LABEL": "Ziņojums", + "PLACEHOLDER": "Lūdzu, uzrakstiet ziņojumu, kuru vēlaties saglabāt kā veidni, ko izmantot vēlāk.", + "ERROR": "Nepieciešams ziņojums." + }, + "SUBMIT": "Iesniegt" + }, + "BUTTON_TEXT": "Rediģēt", + "API": { + "SUCCESS_MESSAGE": "Sagatavotā atbilde ir veiksmīgi atjaunināta.", + "ERROR_MESSAGE": "Nevarēja izveidot savienojumu ar Woot serveri. Lūdzu mēģiniet vēlreiz." + } + }, + "DELETE": { + "BUTTON_TEXT": "Dzēst", + "API": { + "SUCCESS_MESSAGE": "Sagatavotā atbilde ir veiksmīgi izdzēsta.", + "ERROR_MESSAGE": "Nevarēja izveidot savienojumu ar Woot serveri. Lūdzu mēģiniet vēlreiz." + }, + "CONFIRM": { + "TITLE": "Apstiprināt dzēšanu", + "MESSAGE": "Vai vēlaties izdzēst ", + "YES": "Jā, dzēst ", + "NO": "Nē, paturēt " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/chatlist.json b/app/javascript/dashboard/i18n/locale/lv/chatlist.json new file mode 100644 index 0000000..2246639 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Notiek sarunu iegūšana", + "LOAD_MORE_CONVERSATIONS": "Ielādēt vairāk sarunu", + "EOF": "Visas sarunas ir ielādētas 🎉", + "LIST": { + "404": "Šajā grupā nav aktīvu sarunu." + }, + "FAILED_TO_SEND": "Neizdevās nosūtīt", + "TAB_HEADING": "Sarunas", + "MENTION_HEADING": "Pieminēšanas", + "UNATTENDED_HEADING": "Bez uzraudzības", + "SEARCH": { + "INPUT": "Meklēt Cilvēkus, Tērzēšanas, Saglabātās Atbildes.." + }, + "FILTER_ALL": "Visi", + "ASSIGNEE_TYPE_TABS": { + "me": "Mani", + "unassigned": "Nepiešķirtie", + "all": "Visi" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Atvērt" + }, + "resolved": { + "TEXT": "Atrisināts" + }, + "pending": { + "TEXT": "Gaida" + }, + "snoozed": { + "TEXT": "Atlikts" + }, + "all": { + "TEXT": "Visi" + } + }, + "VIEW_FILTER": "Apskatīt", + "SORT_TOOLTIP_LABEL": "Šķirot sarunas", + "CHAT_SORT": { + "STATUS": "Statuss", + "ORDER_BY": "Sakārtot pēc" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Izveidots", + "OLDEST": "Izveidots plkst:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Pēdējā darbība:", + "ACTIVE": "Pēdējā darbība" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Pēdējā darbība: Vecākā vispirms" + }, + "last_activity_at_desc": { + "TEXT": "Pēdējā darbība: Jaunākā vispirms" + }, + "created_at_desc": { + "TEXT": "Izveidots: Jaunākā vispirms" + }, + "created_at_asc": { + "TEXT": "Izveidots: Vecākā vispirms" + }, + "priority_desc": { + "TEXT": "Prioritāte: Augstākā vispirms" + }, + "priority_asc": { + "TEXT": "Prioritāte: Zemākā vispirms" + }, + "waiting_since_asc": { + "TEXT": "Gaida atbildi: Garākā vispirms" + }, + "waiting_since_desc": { + "TEXT": "Gaida atbildi: Īsākā vispirms" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Attēla ziņojums" + }, + "audio": { + "CONTENT": "Audio ziņojums" + }, + "video": { + "CONTENT": "Video ziņojums" + }, + "file": { + "CONTENT": "Faila pielikums" + }, + "location": { + "CONTENT": "Atrašanās vieta" + }, + "ig_reel": { + "CONTENT": "Instagram Spole" + }, + "fallback": { + "CONTENT": "ir kopīgojis URL" + }, + "contact": { + "CONTENT": "Koplietota kontaktpersona" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Šķirot sarunu", + "DROPDOWN_TITLE": "Kārtot pēc", + "ITEMS": { + "LATEST": { + "NAME": "Pēdējā aktivitāte plkst", + "LABEL": "Pēdējā darbība" + }, + "CREATED_AT": { + "NAME": "Izveidots plkst", + "LABEL": "Izveidots plkst" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Pēdējā lietotāja ziņa plkst", + "LABEL": "Pēdējā ziņa" + } + } + }, + "RECEIVED_VIA_EMAIL": "Saņemts pa e-pastu", + "VIEW_TWEET_IN_TWITTER": "Skatīt tvītu pakalpojumā Twitter", + "REPLY_TO_TWEET": "Atbildēt uz šo tvītu", + "LINK_TO_STORY": "Doties uz instagram stāstu", + "SENT": "Veiksmīgi nosūtīts", + "READ": "Izlasīts veiksmīgi", + "DELIVERED": "Piegādāts veiksmīgi", + "NO_MESSAGES": "Nav Ziņojumu", + "NO_CONTENT": "Saturs nav pieejams", + "HIDE_QUOTED_TEXT": "Paslēpt Citēto Tekstu", + "SHOW_QUOTED_TEXT": "Rādīt Citēto Tekstu", + "MESSAGE_READ": "Lasīt", + "SENDING": "Sūtīšana" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/companies.json b/app/javascript/dashboard/i18n/locale/lv/companies.json new file mode 100644 index 0000000..1fb6b70 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Kārtot pēc", + "OPTIONS": { + "NAME": "Nosaukums", + "DOMAIN": "Domēns", + "CREATED_AT": "Izveidots plkst", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Augoša", + "DESCENDING": "Dilstoša" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/components.json b/app/javascript/dashboard/i18n/locale/lv/components.json new file mode 100644 index 0000000..fc47b92 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Tiek rādīts {startItem} - {endItem} no {totalItems} vienumiem", + "CURRENT_PAGE_INFO": "{currentPage} no {totalPages} lapām" + }, + "COMBOBOX": { + "PLACEHOLDER": "Izvēlieties opciju...", + "EMPTY_SEARCH_RESULTS": "Meklēšanas vienumam `{searchTerm}` netika atrasts neviens vienums", + "EMPTY_STATE": "Nav atrasts.", + "SEARCH_PLACEHOLDER": "Meklēt...", + "MORE": "+{count} vairāk" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Meklēt...", + "EMPTY_STATE": "Nav atrasts.", + "SEARCHING": "Meklēšana..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Atcelt", + "CONFIRM": "Apstiprināt" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Meklēt valsti", + "ERROR": "Tālruņa numuram ir jābūt tukšam vai E.164 formātā", + "DIAL_CODE_ERROR": "Lūdzu, izvēlieties sastādīšanas kodu no saraksta" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Autors nav pieejams" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Rīvmaize" + }, + "SWITCH": { + "TOGGLE": "Pārslēgšanas slēdzis" + }, + "LABEL": { + "TAG_BUTTON": "marķēt" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Uzzināt vairāk", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/contact.json b/app/javascript/dashboard/i18n/locale/lv/contact.json new file mode 100644 index 0000000..61c7c65 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Nav Pieejams", + "EMAIL_ADDRESS": "e-pasta Adrese", + "PHONE_NUMBER": "Telefona numurs", + "IDENTIFIER": "Identifikators", + "COPY_SUCCESSFUL": "Veiksmīgi nokopēts uz clipboard", + "COMPANY": "Uzņēmums", + "LOCATION": "Atrašanās Vieta", + "BROWSER_LANGUAGE": "Pārlūkprogrammas Valoda", + "CONVERSATION_TITLE": "Informācija Par Sarunu", + "VIEW_PROFILE": "Skatīt Profilu", + "BROWSER": "Pārlūkprogramma", + "OS": "Operētājsistēma", + "INITIATED_FROM": "Uzsākts no", + "INITIATED_AT": "Uzsākts plkst", + "IP_ADDRESS": "IP adrese", + "CREATED_AT_LABEL": "Izveidots", + "NEW_MESSAGE": "Jauns ziņojums", + "CALL": "Call", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "Ar šo kontaktpersonu nav saistītas iepriekšējās sarunas.", + "TITLE": "Iepriekšējās Sarunas" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Kontaktpersonu Etiķetes", + "ERROR": "Nevarēja atjaunināt etiķetes" + }, + "CONVERSATION": { + "TITLE": "Sarunu Etiķetes", + "ADD_BUTTON": "Pievienot Etiķetes" + }, + "LABEL_SELECT": { + "TITLE": "Pievienot Etiķetes", + "PLACEHOLDER": "Meklēt etiķetes", + "NO_RESULT": "Etiķetes nav atrastas", + "CREATE_LABEL": "Izveidot jaunu etiķeti" + } + }, + "MERGE_CONTACT": "Apvienot kontaktu", + "CONTACT_ACTIONS": "Kontaktpersonu darbības", + "MUTE_CONTACT": "Bloķēt Kontaktpersonu", + "UNMUTE_CONTACT": "Atbloķēt Kontaktpersonu", + "MUTED_SUCCESS": "Šī kontaktpersona ir veiksmīgi bloķēta. Jūs nesaņemsit paziņojumus par turpmākajām sarunām.", + "UNMUTED_SUCCESS": "Šī kontaktpersona ir veiksmīgi atbloķēta.", + "SEND_TRANSCRIPT": "Nosūtīt Transkriptu", + "EDIT_LABEL": "Rediģēt", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Pielāgot Īpašības", + "CONTACT_LABELS": "Kontaktpersonu Etiķetes", + "PREVIOUS_CONVERSATIONS": "Iepriekšējās Sarunas", + "NO_RECORDS_FOUND": "Īpašības nav atrastas" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Rediģēt Kontaktpersonu", + "TITLE": "Rediģēt kontaktpersonu", + "DESC": "Rediģēt kontaktinformāciju" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Dzēst Kontaktpersonu", + "TITLE": "Dzēst kontaktpersonu", + "DESC": "Dzēst kontaktinformāciju", + "CONFIRM": { + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai vēlaties izdzēst ", + "YES": "Jā, Dzēst", + "NO": "Nē, Paturēt" + }, + "API": { + "SUCCESS_MESSAGE": "Kontaktpersona ir veiksmīgi izdzēsta", + "ERROR_MESSAGE": "Nevarēja izdzēst kontaktpersonu. Lūdzu, vēlāk pamēģiniet vēlreiz." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Iesniegt", + "CANCEL": "Atcelt", + "AVATAR": { + "LABEL": "Kontaktpersonas Avatārs" + }, + "NAME": { + "PLACEHOLDER": "Ievadiet kontaktpersonas pilno vārdu", + "LABEL": "Pilnais Vārds" + }, + "BIO": { + "PLACEHOLDER": "Ievadiet kontaktpersonas biogrāfiju", + "LABEL": "Biogrāfija" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Ievadiet kontaktpersonas e-pasta adresi", + "LABEL": "e-pasta Adrese", + "DUPLICATE": "Šī e-pasta adrese tiek izmantota citai kontaktpersonai.", + "ERROR": "Lūdzu ievadiet derīgu e-pasta adresi." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Ievadiet kontaktpersonas tālruņa numuru", + "LABEL": "Telefona numurs", + "HELP": "Tālruņa numuram ir jābūt E.164 formātā, piemēram: +37155555555", + "ERROR": "Tālruņa numuram ir jābūt tukšam, vai E.164 formātā", + "DIAL_CODE_ERROR": "Lūdzu, izvēlieties sastādīšanas kodu no saraksta", + "DUPLICATE": "Šis tālruņa numurs tiek izmantots citai kontaktpersonai." + }, + "LOCATION": { + "PLACEHOLDER": "Ievadiet kontaktpersonas atrašanās vietu", + "LABEL": "Atrašanās vieta" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Ievadiet uzņēmuma nosaukumu", + "LABEL": "Uzņēmuma Nosaukums" + }, + "COUNTRY": { + "PLACEHOLDER": "Ievadiet valsts nosaukumu", + "LABEL": "Valsts Nosaukums", + "SELECT_PLACEHOLDER": "Izvēlieties", + "REMOVE": "Noņemt", + "SELECT_COUNTRY": "Izvēlieties valsti" + }, + "CITY": { + "PLACEHOLDER": "Ievadiet pilsētas nosaukumu", + "LABEL": "Pilsētas nosaukums" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Ievadiet Facebook lietotājvārdu", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Ievadiet Twitter lietotājvārdu", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Ievadiet LinkedIn lietotājvārdu", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Ievadiet Github lietotājvārdu", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Kontaktpersonas avatars ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Nevarēja izdzēst kontaktpersonas avataru. Lūdzu, vēlāk pamēģiniet vēlreiz." + } + }, + "SUCCESS_MESSAGE": "Kontaktpersona ir veiksmīgi saglabāta", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Sākt sarunu", + "TITLE": "Jauna saruna", + "DESC": "Sākt jaunu sarunu, nosūtot jaunu ziņojumu.", + "NO_INBOX": "Nevarēja atrast iesūtni, lai sāktu jaunu sarunu ar šo kontaktpersonu.", + "FORM": { + "TO": { + "LABEL": "Kam" + }, + "INBOX": { + "LABEL": "Iesūtne", + "PLACEHOLDER": "Izvēlieties avota iesūtni", + "ERROR": "Izvēlieties iesūtni" + }, + "SUBJECT": { + "LABEL": "Temats", + "PLACEHOLDER": "Temats", + "ERROR": "Temata lauks nedrīkst būt tukšs" + }, + "MESSAGE": { + "LABEL": "Ziņojums", + "PLACEHOLDER": "Rakstiet savu ziņojumu šeit", + "ERROR": "Ziņojuma lauks nedrīkst būt tukšs" + }, + "ATTACHMENTS": { + "SELECT": "Izvēlieties failus", + "HELP_TEXT": "Velciet un nometiet failus šeit vai izvēlieties failus, ko pievienot" + }, + "SUBMIT": "Sūtīt ziņojumu", + "CANCEL": "Atcelt", + "SUCCESS_MESSAGE": "Ziņojums nosūtīts!", + "GO_TO_CONVERSATION": "Skatīt", + "ERROR_MESSAGE": "Nevarēja nosūtīt! mēģiniet vēlreiz" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Sociālie Profili" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Pievienot pielāgotu īpašību", + "COPY_SUCCESSFUL": "Veiksmīgi nokopēts uz clipboard", + "SHOW_MORE": "Rādīt visus atribūtus", + "SHOW_LESS": "Rādīt mazāk atribūtu", + "ACTIONS": { + "COPY": "Kopēt īpašību", + "DELETE": "Dzēst īpašību", + "EDIT": "Rediģēt īpašību" + }, + "ADD": { + "TITLE": "Izveidot pielāgotu īpašību", + "DESC": "Pievienot šai kontaktpersonai pielāgotu informāciju." + }, + "FORM": { + "CREATE": "Pievienot īpašību", + "CANCEL": "Atcelt", + "NAME": { + "LABEL": "Pielāgotās īpašības nosaukums", + "PLACEHOLDER": "Piemēram: shopify id", + "ERROR": "Nederīgs pielāgotās īpašības nosaukums" + }, + "VALUE": { + "LABEL": "Īpašības vērtība", + "PLACEHOLDER": "Piemēram: 11901 " + }, + "ADD": { + "TITLE": "Izveidot jaunu īpašību ", + "SUCCESS": "Īpašība ir veiksmīgi pievienota", + "ERROR": "Nevar pievienot īpašību. Lūdzu, pamēģiniet vēlāk vēlreiz" + }, + "UPDATE": { + "SUCCESS": "Īpašība ir veiksmīgi atjaunināta", + "ERROR": "Nevar atjaunināt īpašību. Lūdzu, pamēģiniet vēlāk vēlreiz" + }, + "DELETE": { + "SUCCESS": "Īpašība ir veiksmīgi izdzēsta", + "ERROR": "Nevar izdzēst īpašību. Lūdzu, pamēģiniet vēlāk vēlreiz" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Pievienot īpašības", + "PLACEHOLDER": "Meklēt īpašības", + "NO_RESULT": "Īpašības nav atrastas" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Izvēlieties vērtību", + "SEARCH_INPUT_PLACEHOLDER": "Meklēšanas vērtība", + "NO_RESULT": "Nav atrasts" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Nepieciešama derīga vērtība", + "INVALID_URL": "Nederīgs URL", + "INVALID_INPUT": "Nepareizi Ievadīts" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Apvienot kontaktpersonas", + "DESCRIPTION": "Apvienojiet kontaktpersonas, lai apvienotu divus profilus vienā, tostarp visas īpašības un sarunas. Konfliktu gadījumā primārās kontaktpersonas īpašībām būs prioritāte.", + "PRIMARY": { + "TITLE": "Primārā kontaktpersona", + "HELP_LABEL": "Jādzēš" + }, + "PARENT": { + "TITLE": "Apvienojamā Kontaktpersona", + "PLACEHOLDER": "Meklēt kontaktpersonu", + "HELP_LABEL": "Jāpatur" + }, + "SUMMARY": { + "TITLE": "Kopsavilkums", + "DELETE_WARNING": "Kontaktpersona {primaryContactName} tiks dzēsta.", + "ATTRIBUTE_WARNING": "Kontaktpersonas {primaryContactName} informācija tiks kopēta uz {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Radās kļūda. Lūdzu, vēlāk mēģiniet vēlreiz." + }, + "FORM": { + "SUBMIT": " Apvienot kontaktpersonas", + "CANCEL": "Atcelt", + "CHILD_CONTACT": { + "ERROR": "Izvēlieties pakārtoto kontaktpersonu, ko apvienot" + }, + "SUCCESS_MESSAGE": "Kontaktpersona ir veiksmīgi apvienota", + "ERROR_MESSAGE": "Nevarēja apvienot kontaktpersonas, mēģiniet vēlreiz!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Kontaktpersonas", + "SEARCH_TITLE": "Meklēt kontaktpersonas", + "ACTIVE_TITLE": "Active contacts", + "SEARCH_PLACEHOLDER": "Meklēt...", + "MESSAGE_BUTTON": "Ziņojums", + "SEND_MESSAGE": "Sūtīt ziņojumu", + "BLOCK_CONTACT": "Bloķēt kontaktpersonu", + "UNBLOCK_CONTACT": "Atbloķēt kontaktpersonu", + "BREADCRUMB": { + "CONTACTS": "Kontaktpersonas" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Pievienot kontaktpersonu", + "EXPORT_CONTACT": "Eksportēt kontaktpersonas", + "IMPORT_CONTACT": "Importēt kontaktpersonas", + "SAVE_CONTACT": "Saglabāt kontaktpersonu", + "EMAIL_ADDRESS_DUPLICATE": "Šī e-pasta adrese tiek izmantota citai kontaktpersonai.", + "PHONE_NUMBER_DUPLICATE": "Šis tālruņa numurs tiek izmantots citai kontaktpersonai.", + "SUCCESS_MESSAGE": "Kontaktpersona ir veiksmīgi saglabāta", + "ERROR_MESSAGE": "Nevar saglabāt kontaktpersonu. Lūdzu, vēlāk mēģiniet vēlreiz." + }, + "BLOCK_SUCCESS_MESSAGE": "Šī kontaktpersona ir veiksmīgi bloķēta", + "BLOCK_ERROR_MESSAGE": "Nevar bloķēt kontaktpersonu. Lūdzu, vēlāk mēģiniet vēlreiz.", + "UNBLOCK_SUCCESS_MESSAGE": "Šī kontaktpersona ir veiksmīgi atbloķēta", + "UNBLOCK_ERROR_MESSAGE": "Nevar atbloķēt kontaktpersonu. Lūdzu, vēlāk mēģiniet vēlreiz.", + "IMPORT_CONTACT": { + "TITLE": "Importēt kontaktpersonas", + "DESCRIPTION": "Importēt kontaktpersonas, izmantojot CSV failu.", + "DOWNLOAD_LABEL": "Lejupielādēt csv paraugu.", + "LABEL": "CSV Fails:", + "CHOOSE_FILE": "Izvēlēties failu", + "CHANGE": "Mainīt", + "CANCEL": "Atcelt", + "IMPORT": "Importēt", + "SUCCESS_MESSAGE": "Kad importēšana būs pabeigta, jūs saņemsiet paziņojumu pa e-pastu.", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" + }, + "EXPORT_CONTACT": { + "TITLE": "Eksportēt kontaktpersonas", + "DESCRIPTION": "Ātri eksportējiet csv failu ar visaptverošu informāciju par jūsu kontaktpersonām", + "CONFIRM": "Eksportēt", + "SUCCESS_MESSAGE": "Notiek eksportēšana, Jūs saņemsit paziņojumu pa e-pastu, kad eksporta fails būs gatavs lejupielādei.", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" + }, + "SORT_BY": { + "LABEL": "Kārtot pēc", + "OPTIONS": { + "NAME": "Nosaukums", + "EMAIL": "E-pasts", + "PHONE_NUMBER": "Telefona numurs", + "COMPANY": "Uzņēmums", + "COUNTRY": "Valsts", + "CITY": "Pilsēta", + "LAST_ACTIVITY": "Pēdējā darbība", + "CREATED_AT": "Izveidots plkst" + } + }, + "ORDER": { + "LABEL": "Šķirošana", + "OPTIONS": { + "ASCENDING": "Augoša", + "DESCENDING": "Dilstoša" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Vai vēlaties saglabāt šo filtru?", + "CONFIRM": "Saglabāt filtru", + "LABEL": "Nosaukums", + "PLACEHOLDER": "Ievadiet filtra nosaukumu", + "ERROR": "Ievadiet derīgu nosaukumu", + "SUCCESS_MESSAGE": "Filtrs ir veiksmīgi saglabāts", + "ERROR_MESSAGE": "Nevar saglabāt filtru. Lūdzu, vēlāk mēģiniet vēlreiz." + }, + "DELETE_SEGMENT": { + "TITLE": "Apstiprināt Dzēšanu", + "DESCRIPTION": "Vai tiešām vēlaties dzēst šo filtru?", + "CONFIRM": "Jā, Dzēst", + "CANCEL": "Nē, Atcelt", + "SUCCESS_MESSAGE": "Filtrs ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Nevar izdzēst filtru. Lūdzu, vēlāk mēģiniet vēlreiz." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Rāda {startItem} - {endItem} no {totalItems} kontaktpersonām" + }, + "FILTER": { + "NAME": "Nosaukums", + "EMAIL": "E-pasts", + "PHONE_NUMBER": "Telefona numurs", + "IDENTIFIER": "Identifikators", + "COUNTRY": "Valsts", + "CITY": "Pilsēta", + "CREATED_AT": "Izveidots plkst", + "LAST_ACTIVITY": "Pēdējā darbība", + "REFERER_LINK": "Atsauces saite", + "BLOCKED": "Bloķēts", + "BLOCKED_TRUE": "Patiesi", + "BLOCKED_FALSE": "Nepatiesi", + "BUTTONS": { + "CLEAR_FILTERS": "Notīrīt filtrus", + "UPDATE_SEGMENT": "Atjaunināt segmentu", + "APPLY_FILTERS": "Lietot filtrus", + "ADD_FILTER": "Pievienot filtru" + }, + "TITLE": "Filtrēt kontaktpersonas", + "EDIT_SEGMENT": "Rediģēt segmentu", + "SEGMENT": { + "LABEL": "Segmenta nosaukums", + "INPUT_PLACEHOLDER": "Ievadiet segmenta nosaukumu" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} papildu filtri", + "CLEAR_FILTERS": "Notīrīt filtrus" + } + }, + "CARD": { + "OF": "no", + "VIEW_DETAILS": "Skatīt detalizētu informāciju", + "EDIT_DETAILS_FORM": { + "TITLE": "Rediģēt kontaktinformāciju", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Ievadiet vārdu" + }, + "LAST_NAME": { + "PLACEHOLDER": "Ievadiet uzvārdu" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Ievadiet e-pasta adresi", + "DUPLICATE": "Šī e-pasta adrese tiek izmantota citai kontaktpersonai." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Ievadiet tālruņa numuru", + "DUPLICATE": "Šis tālruņa numurs tiek izmantots citai kontaktpersonai." + }, + "CITY": { + "PLACEHOLDER": "Ievadiet pilsētas nosaukumu" + }, + "COUNTRY": { + "PLACEHOLDER": "Izvēlieties valsti" + }, + "BIO": { + "PLACEHOLDER": "Ievadiet biogrāfiju" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Ievadiet uzņēmuma nosaukumu" + } + }, + "UPDATE_BUTTON": "Atjaunināt kontaktpersonu", + "SUCCESS_MESSAGE": "Kontaktpersona ir veiksmīgi atjaunināta", + "ERROR_MESSAGE": "Nevar atjaunināt kontaktpersonu. Lūdzu, vēlāk mēģiniet vēlreiz." + }, + "SOCIAL_MEDIA": { + "TITLE": "Rediģēt sociālās saites", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Pievienot Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Pievienot Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Pievienot Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Pievienot LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Pievienot Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "This action is permanent and irreversible.", + "BUTTON": "Delete now" + } + }, + "DETAILS": { + "CREATED_AT": "Izveidots {date}", + "LAST_ACTIVITY": "Pēdējā aktivitāte {date}", + "DELETE_CONTACT_DESCRIPTION": "Neatgriezeniski dzēst šo kontaktpersonu. Šī darbība ir neatgriezeniska", + "DELETE_CONTACT": "Dzēst kontaktpersonu", + "DELETE_DIALOG": { + "TITLE": "Apstiprināt Dzēšanu", + "DESCRIPTION": "Are you sure you want to delete this contact?", + "CONFIRM": "Jā, Dzēst", + "API": { + "SUCCESS_MESSAGE": "Kontaktpersona ir veiksmīgi izdzēsta", + "ERROR_MESSAGE": "Nevarēja izdzēst kontaktpersonu. Lūdzu, vēlāk pamēģiniet vēlreiz." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Nevar augšupielādēt avataru. Lūdzu, vēlāk mēģiniet vēlreiz.", + "SUCCESS_MESSAGE": "Avatars ir veiksmīgi augšupielādēts" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatārs ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Nevarēja izdzēst avataru. Lūdzu, vēlāk mēģiniet vēlreiz." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Atribūti", + "HISTORY": "Vēsture", + "NOTES": "Piezīmes", + "MERGE": "Apvienot" + }, + "HISTORY": { + "EMPTY_STATE": "Ar šo kontaktpersonu nav saistītas iepriekšējās sarunas" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Meklēt atribūtus", + "UNUSED_ATTRIBUTES": "{count} Izmantoti atribūti | {count} Neizmantoti atribūti", + "EMPTY_STATE": "Šajā kontā nav pieejami pielāgoti kontaktpersonu atribūti. Jūs varat iestatījumos izveidot pielāgotu atribūtu.", + "YES": "Jā", + "NO": "Nē", + "TRIGGER": { + "SELECT": "Izvēlieties vērtību", + "INPUT": "Ievadiet vērtību" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Nederīgs numurs", + "REQUIRED": "Nepieciešama derīga vērtība", + "INVALID_INPUT": "Nederīga ievade", + "INVALID_URL": "Nederīgs URL", + "INVALID_DATE": "Nederīgs datums" + }, + "NO_ATTRIBUTES": "Īpašības nav atrastas", + "API": { + "SUCCESS_MESSAGE": "Īpašība ir veiksmīgi atjaunināta", + "DELETE_SUCCESS_MESSAGE": "Īpašība ir veiksmīgi izdzēsta", + "UPDATE_ERROR": "Nevar atjaunināt īpašību. Lūdzu, pamēģiniet vēlāk vēlreiz", + "DELETE_ERROR": "Nevar izdzēst īpašību. Lūdzu, pamēģiniet vēlāk vēlreiz" + } + }, + "MERGE": { + "TITLE": "Apvienot kontaktu", + "DESCRIPTION": "Apvienot divus profilus vienā, iekļaujot visus atribūtus un sarunas. Konfliktu gadījumā primārās kontaktpersonas atribūtiem būs prioritāte.", + "PRIMARY": "Primārā kontaktpersona", + "PRIMARY_HELP_LABEL": "Tiks saglabāts", + "PRIMARY_REQUIRED_ERROR": "Pirms turpināt, lūdzu, atlasiet kontaktpersonu, ar kuru apvienot", + "PARENT": "Tiks apvienots", + "PARENT_HELP_LABEL": "Jādzēš", + "EMPTY_STATE": "Netika atrasta neviena kontaktpersona", + "PLACEHOLDER": "Meklēt primāro kontaktpersonu", + "SEARCH_PLACEHOLDER": "Meklēt kontaktpersonu", + "SEARCH_ERROR_MESSAGE": "Radās kļūda meklējot kontaktpersonas. Lūdzu, vēlāk mēģiniet vēlreiz.", + "SUCCESS_MESSAGE": "Kontaktpersona ir veiksmīgi apvienota", + "ERROR_MESSAGE": "Nevarēja apvienot kontaktpersonas, mēģiniet vēlreiz!", + "IS_SEARCHING": "Meklēšana...", + "BUTTONS": { + "CANCEL": "Atcelt", + "CONFIRM": "Apvienot kontaktu" + } + }, + "NOTES": { + "PLACEHOLDER": "Pievienot piezīmi", + "WROTE": "rakstīja", + "YOU": "Jūs", + "SAVE": "Saglabāt piezīmi", + "ADD_NOTE": "Add contact note", + "EXPAND": "Izvērst", + "COLLAPSE": "Collapse", + "NO_NOTES": "No notes, you can add notes from the contact details page.", + "EMPTY_STATE": "Ar šo kontaktpersonu nav saistītu piezīmju. Varat pievienot piezīmi, ierakstot iepriekšējā lodziņā.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "Šajā kontā nav atrasta neviena kontaktpersona", + "SUBTITLE": "Sāciet pievienot jaunas kontaktpersonas, noklikšķinot uz tālāk esošās pogas", + "BUTTON_LABEL": "Pievienot kontaktpersonu", + "SEARCH_EMPTY_STATE_TITLE": "Neviena kontaktpersona neatbilst jūsu meklēšanas vaicājumam 🔍", + "LIST_EMPTY_STATE_TITLE": "Šajā skatā nav pieejama neviena kontaktpersona 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Piešķirt Etiķetes", + "ASSIGN_LABELS_SUCCESS": "Etiķetes ir veiksmīgi piešķirtas.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "Atlasīti {count}", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "Dzēst", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Dzēst kontaktpersonu" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "Mēs nevarējām pabeigt meklēšanu. Lūdzu, mēģiniet vēlreiz." + }, + "FORM": { + "GO_TO_CONVERSATION": "Apskatīt", + "SUCCESS_MESSAGE": "Ziņa veiksmīgi nosūtīta!", + "ERROR_MESSAGE": "Veidojot sarunu, radās kļūda. Lūdzu, vēlāk mēģiniet vēlreiz.", + "NO_INBOX_ALERT": "Nav pieejamas iesūtnes, lai sāktu sarunu ar šo kontaktpersonu.", + "CONTACT_SELECTOR": { + "LABEL": "Kam:", + "TAG_INPUT_PLACEHOLDER": "Meklēt kontaktpersonu pēc vārda, e-pasta vai tālruņa numura", + "CONTACT_CREATING": "Notiek kontaktpersonas izveide..." + }, + "INBOX_SELECTOR": { + "LABEL": "Izmantojot:", + "BUTTON": "Rādīt iesūtnes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Tēma :", + "SUBJECT_PLACEHOLDER": "Ievadiet šeit sava e-pasta tēmu", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Meklēt kontaktpersonu pēc e-pasta adreses", + "BCC_LABEL": "Bcc:", + "BCC_PLACEHOLDER": "Meklēt kontaktpersonu pēc e-pasta adreses", + "BCC_BUTTON": "Bcc" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Rakstiet savu ziņojumu šeit..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Izvēlieties veidni", + "SEARCH_PLACEHOLDER": "Meklēt veidnes", + "EMPTY_STATE": "Nav atrasta neviena veidne", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp veidne: {templateName}", + "VARIABLES": "Mainīgie", + "BACK": "Atgriezties", + "SEND_MESSAGE": "Sūtīt ziņojumu" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Izvēlieties veidni", + "SEARCH_PLACEHOLDER": "Meklēt veidnes", + "EMPTY_STATE": "Nav atrasta neviena veidne", + "TEMPLATE_PARSER": { + "BACK": "Atgriezties", + "SEND_MESSAGE": "Sūtīt ziņojumu" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Izmest", + "SEND": "Sūtīt ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/contactFilters.json b/app/javascript/dashboard/i18n/locale/lv/contactFilters.json new file mode 100644 index 0000000..ebfb7d4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filtrēt Kontaktpersonas", + "SUBTITLE": "Pievienojiet filtrus un noklikšķiniet uz 'Iesniegt', lai filtrētu kontaktpersonas.", + "EDIT_CUSTOM_SEGMENT": "Rediģēt Segmentu", + "CUSTOM_VIEWS_SUBTITLE": "Pievienot vai noņemt filtrus un atjaunināt segmentu.", + "ADD_NEW_FILTER": "Pievienot Filtru", + "CLEAR_ALL_FILTERS": "Atcelt Visus Filtrus", + "FILTER_DELETE_ERROR": "Lai saglabātu, Jums ir jābūt vismaz vienam filtram", + "SUBMIT_BUTTON_LABEL": "Iesniegt", + "UPDATE_BUTTON_LABEL": "Atjaunināt Segmentu", + "CANCEL_BUTTON_LABEL": "Atcelt", + "CLEAR_BUTTON_LABEL": "Atcelt Filtrus", + "EMPTY_VALUE_ERROR": "Nepieciešama vērtība", + "SEGMENT_LABEL": "Segmenta Nosaukums", + "SEGMENT_QUERY_LABEL": "Segmenta Vaicājums", + "TOOLTIP_LABEL": "Filtrēt kontaktpersonas", + "QUERY_DROPDOWN_LABELS": { + "AND": "UN", + "OR": "VAI" + }, + "OPERATOR_LABELS": { + "equal_to": "Vienāds ar", + "not_equal_to": "Nav vienāds ar", + "contains": "Satur", + "does_not_contain": "Nesatur", + "is_present": "Iekļauj sevī", + "is_not_present": "Neiekļauj sevī", + "is_greater_than": "Ir lielāks par", + "is_lesser_than": "Ir mazāks par", + "days_before": "Ir x dienas pirms" + }, + "ERRORS": { + "VALUE_REQUIRED": "Nepieciešama vērtība" + }, + "ATTRIBUTES": { + "NAME": "Nosaukums", + "EMAIL": "E-pasts", + "PHONE_NUMBER": "Tālruņa numurs", + "IDENTIFIER": "Identifikators", + "CITY": "Pilsēta", + "COUNTRY": "Valsts", + "CUSTOM_ATTRIBUTE_LIST": "Saraksts", + "CUSTOM_ATTRIBUTE_TEXT": "Teksts", + "CUSTOM_ATTRIBUTE_NUMBER": "Numurs", + "CUSTOM_ATTRIBUTE_LINK": "Saite", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Izvēles rūtiņa", + "CREATED_AT": "Izveidots", + "LAST_ACTIVITY": "Pēdējās Darbības", + "REFERER_LINK": "Atsauces sniedzēja saite", + "BLOCKED": "Bloķēts", + "LABELS": "Etiķetes" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standarta Filtri", + "ADDITIONAL_FILTERS": "Papildu Filtri", + "CUSTOM_ATTRIBUTES": "Pielāgotas Īpašības" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/contentTemplates.json b/app/javascript/dashboard/i18n/locale/lv/contentTemplates.json new file mode 100644 index 0000000..1fd0df1 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Meklēt Veidnes", + "NO_TEMPLATES_FOUND": "Veidnes nav atrastas", + "NO_CONTENT": "Nav satura", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Kategorija", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Valoda", + "TEMPLATE_BODY": "Veidnes Pamatteksts", + "CATEGORY": "Kategorija" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Teksts" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Mainīgie", + "LANGUAGE": "Valoda", + "CATEGORY": "Kategorija", + "VARIABLE_PLACEHOLDER": "Ievadiet {variable} vērtību", + "GO_BACK_LABEL": "Atgriezties", + "SEND_MESSAGE_LABEL": "Sūtīt Ziņojumu", + "FORM_ERROR_MESSAGE": "Lūdzu, pirms nosūtīšanas aizpildiet visus mainīgos", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Atpakaļ", + "SEND_MESSAGE_BUTTON": "Sūtīt Ziņojumu" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/conversation.json b/app/javascript/dashboard/i18n/locale/lv/conversation.json new file mode 100644 index 0000000..d3528c1 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Lūdzu, izvēlieties sarunu kreisajā rūtī", + "CSAT_REPLY_MESSAGE": "Lūdzu, novērtējiet sarunu", + "404": "Atvainojiet, mēs nevaram atrast sarunu. Lūdzu mēģiniet vēlreiz", + "SWITCH_VIEW_LAYOUT": "Pārslēgt izkārtojumu", + "DASHBOARD_APP_TAB_MESSAGES": "Ziņojumi", + "UNVERIFIED_SESSION": "Šā lietotāja identitāte nav pārbaudīta", + "NO_MESSAGE_1": "Ak, vai! Izskatās, ka Jūsu iesūtnē nav ziņojumu no klientiem.", + "NO_MESSAGE_2": " lai nosūtītu ziņojumu uz savu lapu!", + "NO_INBOX_1": "Hola! Izskatās, ka jūs vēl neesat pievienojis nevienu iesūtni.", + "NO_INBOX_2": " lai sāktu", + "NO_INBOX_AGENT": "Ak, vai! Izskatās, ka Jūs neesat nevienas iesūtnes dalībnieks. Lūdzu, sazinieties ar savu administratoru", + "SEARCH_MESSAGES": "Meklēt ziņojumus sarunās", + "VIEW_ORIGINAL": "Skatīt oriģinālu", + "VIEW_TRANSLATED": "Skatīt tulkoto", + "EMPTY_STATE": { + "CMD_BAR": "lai atvērtu komandu izvēlni", + "KEYBOARD_SHORTCUTS": "lai skatītu klaviatūras īsinājumtaustiņus" + }, + "SEARCH": { + "TITLE": "Meklēt ziņojumus", + "RESULT_TITLE": "Meklēšanas Rezultāti", + "LOADING_MESSAGE": "Tiek apkopoti dati...", + "PLACEHOLDER": "Ievadiet jebkuru tekstu, lai meklētu ziņojumus", + "NO_MATCHING_RESULTS": "Nav atrasts." + }, + "UNREAD_MESSAGES": "Nelasītie ziņojumi", + "UNREAD_MESSAGE": "Nelasīts ziņojums", + "CLICK_HERE": "Noklikšķiniet šeit", + "LOADING_INBOXES": "Notiek iesūtņu ielāde", + "LOADING_CONVERSATIONS": "Notiek sarunu ielāde", + "CANNOT_REPLY": "Jūs nevarat atbildēt, jo", + "24_HOURS_WINDOW": "24 stundu ziņojuma loga ierobežojums", + "48_HOURS_WINDOW": "48 stundu ziņojuma loga ierobežojums", + "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours", + "NOT_ASSIGNED_TO_YOU": "Šī saruna nav Jums piešķirta. Vai vēlaties piešķirt šo sarunu sev?", + "ASSIGN_TO_ME": "Piešķirt sev", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "Jūs varat atbildēt uz šo sarunu, tikai izmantojot veidnes ziņojumu, jo", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 stundu ziņojuma loga ierobežojums", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "Jūs atbildat uz:", + "REMOVE_SELECTION": "Noņemt Izvēli", + "DOWNLOAD": "Lejupielādēt", + "UNKNOWN_FILE_TYPE": "Nezināms Fails", + "SAVE_CONTACT": "Saglabāt Kontaktpersonu", + "NO_CONTENT": "Nav satura, ko parādīt", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} kopīgoja kontaktpersonu", + "LOCATION": "{sender} kopīgoja atrašanās vietu", + "FILE": "{sender} kopīgoja failu", + "MEETING": "{sender} ir sācis sapulci" + }, + "UPLOADING_ATTACHMENTS": "Notiek pielikumu augšupielāde...", + "REPLIED_TO_STORY": "Atbildēja uz Jūsu stāstu", + "UNSUPPORTED_MESSAGE": "Šis ziņojums netiek atbalstīts. Šo ziņojumu varat apskatīt Facebook/Instagram lietotnē.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "Šis ziņojums netiek atbalstīts. Šo ziņojumu Jūs varat apskatīt lietotnē Facebook Messenger.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "Šis ziņojums netiek atbalstīts. Šo ziņojumu Jūs varat apskatīt lietotnē Instagram.", + "SUCCESS_DELETE_MESSAGE": "Ziņojums veiksmīgi izdzēsts", + "FAIL_DELETE_MESSSAGE": "Nevarēja izdzēst ziņojumu! Mēģiniet vēlreiz", + "NO_RESPONSE": "Nav atbildes", + "RESPONSE": "Atbilde", + "RATING_TITLE": "Vērtējums", + "FEEDBACK_TITLE": "Atsauksmes", + "REPLY_MESSAGE_NOT_FOUND": "Ziņa nav pieejama", + "CARD": { + "SHOW_LABELS": "Rādīt etiķetes", + "HIDE_LABELS": "Slēpt etiķetes" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "Atrisināt", + "REOPEN_ACTION": "Atkārtoti atvērt", + "OPEN_ACTION": "Atvērt", + "MORE_ACTIONS": "More actions", + "OPEN": "Papildu", + "CLOSE": "Aizvērt", + "DETAILS": "detalizēta informācija", + "SNOOZED_UNTIL": "Atlikts līdz", + "SNOOZED_UNTIL_TOMORROW": "Atlikts līdz rītdienai", + "SNOOZED_UNTIL_NEXT_WEEK": "Atlikts līdz nākamajai nedēļai", + "SNOOZED_UNTIL_NEXT_REPLY": "Atlikts līdz nākamajai atbildei", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "nokavēti", + "DUE": "jābeidz" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Atzīmēt kā neapstiprinātu", + "SNOOZE_UNTIL": "Atlikt", + "SNOOZE": { + "TITLE": "Atlikt līdz", + "NEXT_REPLY": "Nākamā atbilde", + "TOMORROW": "Rītdiena", + "NEXT_WEEK": "Nākamā nedēļa" + } + }, + "MENTION": { + "AGENTS": "Aģenti", + "TEAMS": "Komandas" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Atlikt līdz", + "APPLY": "Atlikt", + "CANCEL": "Atcelt" + }, + "PRIORITY": { + "TITLE": "Prioritāte", + "OPTIONS": { + "NONE": "Nav", + "URGENT": "Steidzama", + "HIGH": "Augsta", + "MEDIUM": "Vidēja", + "LOW": "Zema" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "Nav", + "INPUT_PLACEHOLDER": "Izvēlieties prioritāti", + "NO_RESULTS": "Nav atrasts", + "SUCCESSFUL": "Sarunas id {conversationId} prioritāte nomainīta uz {priority}", + "FAILED": "Nevarēja nomainīt prioritāti. Lūdzu, mēģiniet vēlreiz." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Delete conversation #{conversationId}", + "DESCRIPTION": "Are you sure you want to delete this conversation?", + "CONFIRM": "Dzēst" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Atzīmēt kā neapstiprinātu", + "RESOLVED": "Atzīmēt kā atrisinātu", + "MARK_AS_UNREAD": "Atzīmēt kā nelasītu", + "MARK_AS_READ": "Atzīmēt kā lasītu", + "REOPEN": "Atkārtoti atvērt sarunu", + "SNOOZE": { + "TITLE": "Atlikt", + "NEXT_REPLY": "Līdz nākamajai atbildei", + "TOMORROW": "Līdz rītdienai", + "NEXT_WEEK": "Līdz nākamajai nedēļai" + }, + "ASSIGN_AGENT": "Piešķirt aģentu", + "ASSIGN_LABEL": "Piešķirt etiķeti", + "AGENTS_LOADING": "Notiek aģentu ielāde...", + "ASSIGN_TEAM": "Piešķirt komandu", + "DELETE": "Delete conversation", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Sarunas id {conversationId} piešķirts \"{agentName}\"", + "FAILED": "Nevarēja piešķirt aģentu. Lūdzu, mēģiniet vēlreiz." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Sarunai ar id {conversationId} piešķirta etiķete #{labelName}", + "FAILED": "Nevarēja piešķirt etiķeti. Lūdzu, mēģiniet vēlreiz." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Sarunai ar id {conversationId} tika piešķirta komanda \"{team}\"", + "FAILED": "Nevarēja piešķirt komandu. Lūdzu, mēģiniet vēlreiz." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Ziņojuma paraksts", + "ENABLE_SIGN_TOOLTIP": "Iespējot parakstu", + "DISABLE_SIGN_TOOLTIP": "Atspējot parakstu", + "MSG_INPUT": "Shift + Enter, lai pārietu uz jaunu rindu. Sāciet ar '/' lai izvēlētos sagatavotu atbildi.", + "PRIVATE_MSG_INPUT": "Shift + Enter, lai pārietu uz jaunu rindu. Ziņojums būs redzams tikai Aģentiem", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Ziņojuma paraksts nav nokonfigurēts. Lūdzu, nokonfigurējiet to profila iestatījumos.", + "CLICK_HERE": "Noklikšķiniet šeit, lai atjauninātu", + "WHATSAPP_TEMPLATES": "WhatsApp Veidnes" + }, + "REPLYBOX": { + "REPLY": "Atbildēt", + "PRIVATE_NOTE": "Privāta Piezīme", + "SEND": "Nosūtīt", + "CREATE": "Pievienot Piezīmi", + "INSERT_READ_MORE": "Lasīt vairāk", + "DISMISS_REPLY": "Noraidīt atbildi", + "REPLYING_TO": "Atbildot uz:", + "TIP_EMOJI_ICON": "Rādīt emocijzīmju atlasītāju", + "TIP_ATTACH_ICON": "Pievienot failus", + "TIP_AUDIORECORDER_ICON": "Ierakstīt audio", + "TIP_AUDIORECORDER_PERMISSION": "Atļaut piekļuvi pie audio", + "TIP_AUDIORECORDER_ERROR": "Nevarēja atvērt audio", + "DRAG_DROP": "Velciet un nometiet šeit, lai pievienotu", + "START_AUDIO_RECORDING": "Sākt audio ierakstīšanu", + "STOP_AUDIO_RECORDING": "Apturēt audio ierakstīšanu", + "": "", + "EMAIL_HEAD": { + "TO": "KAM", + "ADD_BCC": "Pievienot bcc", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "E-pasta adreses, atdalītas ar komatiem", + "ERROR": "Lūdzu, ievadiet derīgas e-pasta adreses" + }, + "BCC": { + "LABEL": "BCC", + "PLACEHOLDER": "E-pasta adreses, atdalītas ar komatiem", + "ERROR": "Lūdzu, ievadiet derīgas e-pasta adreses" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Nedefinēti mainīgie", + "MESSAGE": "Jūsu ziņojumā: {undefinedVariables} ir {undefinedVariablesCount} nedefinēti mainīgie. Vai tomēr vēlaties nosūtīt ziņojumu?", + "CONFIRM": { + "YES": "Nosūtīt", + "CANCEL": "Atcelt" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "Privāta Piezīme: Redzama tikai Jums un Jūsu komandai", + "CHANGE_STATUS": "Sarunas statuss ir mainīts", + "CHANGE_STATUS_FAILED": "Sarunas statusa maiņa neizdevās", + "CHANGE_AGENT": "Mainīts sarunas Pilnvarotais", + "CHANGE_AGENT_FAILED": "Pilnvarotā maiņa neizdevās", + "ASSIGN_LABEL_SUCCESFUL": "Etiķete ir veiksmīgi piešķirta", + "ASSIGN_LABEL_FAILED": "Etiķetes piešķiršana neizdevās", + "CHANGE_TEAM": "Sarunu komanda mainīta", + "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", + "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", + "FILE_SIZE_LIMIT": "Fails pārsniedz {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB pielikuma ierobežojumu", + "MESSAGE_ERROR": "Nevar nosūtīt šo ziņojumu. Lūdzu, vēlāk mēģiniet vēlreiz", + "SENT_BY": "Sūtīja:", + "BOT": "Bot", + "SEND_FAILED": "Nevarēja nosūtīt ziņojumu! Mēģiniet vēlreiz", + "TRY_AGAIN": "mēģināt vēlreiz", + "ASSIGNMENT": { + "SELECT_AGENT": "Izvēlieties Aģentu", + "REMOVE": "Noņemt", + "ASSIGN": "Piešķirt" + }, + "CONTEXT_MENU": { + "COPY": "Kopēt", + "REPLY_TO": "Atbildēt uz šo ziņojumu", + "DELETE": "Dzēst", + "CREATE_A_CANNED_RESPONSE": "Pievienot sagatavotajām atbildēm", + "TRANSLATE": "Tulkot", + "COPY_PERMALINK": "Kopēt saiti uz ziņojumu", + "LINK_COPIED": "Ziņojuma URL ir iekopēts starpliktuvē", + "DELETE_CONFIRMATION": { + "TITLE": "Vai tiešām vēlaties dzēst šo ziņojumu?", + "MESSAGE": "Šo darbību nevar atsaukt", + "DELETE": "Dzēst", + "CANCEL": "Atcelt" + } + }, + "SIDEBAR": { + "CONTACT": "Kontaktpersona", + "COPILOT": "Kopilots" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Nosūtīt sarunas transkriptu", + "DESC": "Nosūtīt sarunas transkripta kopiju uz norādīto e-pasta adresi", + "SUBMIT": "Iesniegt", + "CANCEL": "Atcelt", + "SEND_EMAIL_SUCCESS": "Sarunas transkripts tika veiksmīgi nosūtīts", + "SEND_EMAIL_ERROR": "Radās kļūda. Lūdzu, mēģiniet vēlreiz", + "FORM": { + "SEND_TO_CONTACT": "Nosūtīt transkriptu klientam", + "SEND_TO_AGENT": "Nosūtīt transkriptu piešķirtajam aģentam", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Nosūtīt transkriptu uz citu e-pasta adresi", + "EMAIL": { + "PLACEHOLDER": "Ievadiet e-pasta adresi", + "ERROR": "Lūdzu ievadiet derīgu e-pasta adresi" + } + } + }, + "ONBOARDING": { + "TITLE": "Sveicināti 👋, Laipni lūdzam {installationName}!", + "DESCRIPTION": "Paldies, ka reģistrējāties. Mēs vēlamies, lai Jūs gūtu maksimālu labumu no {installationName}. Šeit ir dažas lietas, ko varat darīt {installationName} lai Jūsu pieredze būtu patīkamāka.", + "GREETING_MORNING": "👋 Labrīt, {name}. Laipni lūdzam {installationName}.", + "GREETING_AFTERNOON": "👋 Labdien, {name}. Laipni lūdzam {installationName}.", + "GREETING_EVENING": "👋 Labvakar, {name}. Laipni lūdzam {installationName}.", + "READ_LATEST_UPDATES": "Izlasīt mūsu aktuālākos jaunumus", + "ALL_CONVERSATION": { + "TITLE": "Visas Jūsu sarunas vienuviet", + "DESCRIPTION": "Skatīt visas sarunas ar klientiem vienā informācijas panelī. Jūs varat filtrēt sarunas pēc ienākošā kanāla, etiķetes un statusa.", + "NEW_LINK": "Noklikšķiniet šeit, lai izveidotu iesūtni" + }, + "TEAM_MEMBERS": { + "TITLE": "Uzaicināt savas komandas biedrus", + "DESCRIPTION": "Tā kā Jūs gatavojaties runāt ar savu klientu, piesaistiet savus komandas biedrus, lai viņi Jums palīdzētu. Jūs varat uzaicināt savus komandas biedrus, pievienojot viņu e-pasta adreses aģentu sarakstam.", + "NEW_LINK": "Noklikšķiniet šeit, lai uzaicinātu komandas biedru" + }, + "LABELS": { + "TITLE": "Organizēt sarunas ar etiķetēm", + "DESCRIPTION": "Etiķetes nodrošina vienkāršāku veidu, kā klasificēt sarunu. Izveidojiet dažas etiķetes, piemēram, #atbalsta-pieprasījums, #norēķinu-jautājums utt., lai vēlāk varētu tās izmantot sarunas laikā.", + "NEW_LINK": "Noklikšķiniet šeit, lai izveidotu atzīmes" + }, + "CANNED_RESPONSES": { + "TITLE": "Izveidot sagatavotas atbildes", + "DESCRIPTION": "Iepriekš sagatavotas atbildes veidnes palīdz ātri reaģēt uz sarunu. Aģenti var izmantot '/' rakstzīmi, kurai seko kods, lai ievietotu atbildi.", + "NEW_LINK": "Noklikšķiniet šeit, lai izveidotu sagatavotu atbildi" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Piešķirts Aģentam", + "SELF_ASSIGN": "Piešķirts man", + "TEAM_LABEL": "Piešķirtā Komanda", + "SELECT": { + "PLACEHOLDER": "Nav" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Kontaktpersonas Informācija", + "CONVERSATION_ACTIONS": "Sarunas Darbības", + "CONVERSATION_LABELS": "Sarunu Etiķetes", + "CONVERSATION_INFO": "Sarunas Informācija", + "CONTACT_NOTES": "Contact Notes", + "CONTACT_ATTRIBUTES": "Kontaktpersonas Īpašības", + "PREVIOUS_CONVERSATION": "Iepriekšējās Sarunas", + "MACROS": "Macros", + "LINEAR_ISSUES": "Linked Linear Issues", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "Gaida", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Izveidot Īpašību", + "NO_RECORDS_FOUND": "Īpašības nav atrastas", + "UPDATE": { + "SUCCESS": "Īpašība ir veiksmīgi atjaunināta", + "ERROR": "Nevar atjaunināt īpašību. Lūdzu, pamēģiniet vēlāk vēlreiz" + }, + "ADD": { + "TITLE": "Pievienot", + "SUCCESS": "Īpašība ir veiksmīgi pievienota", + "ERROR": "Nevar pievienot īpašību. Lūdzu, pamēģiniet vēlāk vēlreiz" + }, + "DELETE": { + "SUCCESS": "Īpašība ir veiksmīgi izdzēsta", + "ERROR": "Nevar izdzēst īpašību. Lūdzu, pamēģiniet vēlāk vēlreiz" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Pievienot īpašības", + "PLACEHOLDER": "Meklēt īpašības", + "NO_RESULT": "Īpašības nav atrastas" + } + }, + "EMAIL_HEADER": { + "FROM": "No", + "TO": "Kam", + "BCC": "Bcc", + "CC": "Cc", + "SUBJECT": "Tēma", + "EXPAND": "Izvērst e-pastu" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Piedalās", + "SIDEBAR_TITLE": "Sarunas dalībnieki", + "NO_RECORDS_FOUND": "Nav atrasts", + "ADD_PARTICIPANTS": "Izvēlieties dalībniekus", + "REMANING_PARTICIPANTS_TEXT": "+{count} citi", + "REMANING_PARTICIPANT_TEXT": "+{count} cits", + "TOTAL_PARTICIPANTS_TEXT": "{count} cilvēki piedalās.", + "TOTAL_PARTICIPANT_TEXT": "{count} persona piedalās.", + "NO_PARTICIPANTS_TEXT": "Neviens nepiedalās!", + "WATCH_CONVERSATION": "Pievienoties sarunai", + "YOU_ARE_WATCHING": "Jūs piedalāties", + "API": { + "ERROR_MESSAGE": "Nevarēja atjaunināt, mēģiniet vēlreiz!", + "SUCCESS_MESSAGE": "Dalībnieki atjaunināti!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "Skatīt tulkoto saturu", + "DESC": "Jūs varat skatīt tulkoto saturu katrā valodā.", + "ORIGINAL_CONTENT": "Oriģinālais Saturs", + "TRANSLATED_CONTENT": "Tulkotais Saturs", + "NO_TRANSLATIONS_AVAILABLE": "Šim saturam nav pieejami tulkojumi" + }, + "TYPING": { + "ONE": "{user} raksta", + "TWO": "{user} un {secondUser} raksta", + "MULTIPLE": "{user} un {count} citi raksta" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Pamēģiniet" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Nevar lejupielādēt pielikumu. Lūdzu, mēģiniet vēlreiz" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/csatMgmt.json b/app/javascript/dashboard/i18n/locale/lv/csatMgmt.json new file mode 100644 index 0000000..4c55071 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Novērtējiet Jūsu sarunu", + "PLACEHOLDER": "Pastāsti mums vairāk...", + "RATINGS": { + "POOR": "😞 Slikti", + "FAIR": "😑 Vāji", + "AVERAGE": "😐 Vidēji", + "GOOD": "😀 Labi", + "EXCELLENT": "😍 Lieliski" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/customRole.json b/app/javascript/dashboard/i18n/locale/lv/customRole.json new file mode 100644 index 0000000..6a03477 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Pielāgotas lomas", + "LEARN_MORE": "Uzzināt vairāk par pielāgotām lomām", + "DESCRIPTION": "Pielāgotas lomas ir lomas, kuras izveido konta īpašnieks vai administrators. Šīs lomas var piešķirt aģentiem, lai definētu viņu piekļuvi un atļaujas kontā. Pielāgotas lomas var izveidot ar īpašām atļaujām un piekļuves līmeņiem, lai tie atbilstu organizācijas prasībām.", + "HEADER_BTN_TXT": "Pievienot pielāgotu lomu", + "LOADING": "Notiek pielāgotu lomu iegūšana...", + "SEARCH_404": "Šim vaicājumam nav atbilstošu vienumu.", + "PAYWALL": { + "TITLE": "Pārejiet uz maksas versiju, lai izveidotu pielāgotas lomas", + "AVAILABLE_ON": "Pielāgotas lomas līdzeklis ir pieejams tikai biznesa un uzņēmuma plānos.", + "UPGRADE_PROMPT": "Pārejiet uz maksas versiju, lai iegūtu piekļuvi pie papildu funkcijām. Piemēram: komandas pārvaldībai, automatizācijai, pielāgotiem atribūtiem, un citām.", + "UPGRADE_NOW": "Pāriet uz maksas versiju tagad", + "CANCEL_ANYTIME": "Jūs varat jebkurā laikā mainīt vai atcelt savu versiju" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "Pielāgotu lomu funkcija ir pieejama tikai maksas plānos.", + "UPGRADE_PROMPT": "Pārejiet uz maksas versiju, lai piekļūtu papildu funkcijām. Piemēram: audita žurnāliem, aģentu kapacitātei, un citām.", + "ASK_ADMIN": "Lai pārietu uz maksas versiju, lūdzu sazinieties ar savu administratoru." + }, + "LIST": { + "404": "Šajā kontā nav pieejamas pielāgotas lomas.", + "TITLE": "Pārvaldīt pielāgotas lomas", + "DESC": "Pielāgotas lomas ir lomas, kuras izveido konta īpašnieks vai administrators. Šīs lomas var piešķirt aģentiem, lai definētu viņu piekļuvi un atļaujas kontā. Pielāgotas lomas var izveidot ar īpašām atļaujām un piekļuves līmeņiem, lai tie atbilstu organizācijas prasībām.", + "TABLE_HEADER": { + "NAME": "Nosaukums", + "DESCRIPTION": "Apraksts", + "PERMISSIONS": "Atļaujas", + "ACTIONS": "Darbības" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Pārvaldīt visas sarunas", + "CONVERSATION_UNASSIGNED_MANAGE": "Pārvaldīt nepiešķirtās sarunas un tiem piešķirtās sarunas", + "CONVERSATION_PARTICIPATING_MANAGE": "Pārvaldīt iesaistītās sarunas un tiem piešķirtās sarunas", + "CONTACT_MANAGE": "Pārvaldīt kontaktpersonas", + "REPORT_MANAGE": "Pārvaldīt atskaites", + "KNOWLEDGE_BASE_MANAGE": "Pārvaldīt zināšanu bāzi" + }, + "FORM": { + "NAME": { + "LABEL": "Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet vārdu.", + "ERROR": "Nepieciešams nosaukums." + }, + "DESCRIPTION": { + "LABEL": "Apraksts", + "PLACEHOLDER": "Lūdzu, ievadiet aprakstu.", + "ERROR": "Nepieciešams apraksts." + }, + "PERMISSIONS": { + "LABEL": "Atļaujas", + "ERROR": "Nepieciešamas atļaujas." + }, + "CANCEL_BUTTON_TEXT": "Atcelt", + "API": { + "ERROR_MESSAGE": "Nevarēja izveidot savienojumu ar Woot serveri. Lūdzu mēģiniet vēlreiz." + } + }, + "ADD": { + "TITLE": "Pievienot pielāgotu lomu", + "DESC": " Pielāgotas lomas ļauj izveidot lomas ar īpašām atļaujām un piekļuves līmeņiem, kas atbilst organizācijas prasībām.", + "SUBMIT": "Iesniegt", + "API": { + "SUCCESS_MESSAGE": "Pielāgota loma ir veiksmīgi pievienota." + } + }, + "EDIT": { + "BUTTON_TEXT": "Rediģēt", + "TITLE": "Rediģēt pielāgotu lomu", + "DESC": " Pielāgotas lomas ļauj izveidot lomas ar īpašām atļaujām un piekļuves līmeņiem, kas atbilst organizācijas prasībām.", + "SUBMIT": "Atjaunināt", + "API": { + "SUCCESS_MESSAGE": "Pielāgota loma ir veiksmīgi atjaunināta." + } + }, + "DELETE": { + "BUTTON_TEXT": "Dzēst", + "API": { + "SUCCESS_MESSAGE": "Pielāgota loma ir veiksmīgi izdzēsta.", + "ERROR_MESSAGE": "Nevarēja izveidot savienojumu ar Woot serveri. Lūdzu mēģiniet vēlreiz." + }, + "CONFIRM": { + "TITLE": "Apstiprināt dzēšanu", + "MESSAGE": "Vai vēlaties izdzēst ", + "YES": "Jā, dzēst ", + "NO": "Nē, paturēt " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/datePicker.json b/app/javascript/dashboard/i18n/locale/lv/datePicker.json new file mode 100644 index 0000000..b1e7894 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Pielietot", + "CLEAR_BUTTON": "Notīrīt", + "DATE_RANGE_INPUT": { + "START": "Sākuma Datums", + "END": "Beigu Datums" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "DATUMU DIAPAZONS", + "LAST_7_DAYS": "Pēdējās 7 dienas", + "LAST_30_DAYS": "Pēdējās 30 dienas", + "LAST_3_MONTHS": "Pēdējie 3 mēneši", + "LAST_6_MONTHS": "Pēdējie 6 mēneši", + "LAST_YEAR": "Pagājušais gads", + "CUSTOM_RANGE": "Pielāgots datumu diapazons" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/emoji.json b/app/javascript/dashboard/i18n/locale/lv/emoji.json new file mode 100644 index 0000000..c4c0006 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Meklēt emocijzīmes", + "NOT_FOUND": "Neviena emocijzīme neatbilst jūsu meklēšanas vaicājumam", + "REMOVE": "Noņemt" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/general.json b/app/javascript/dashboard/i18n/locale/lv/general.json new file mode 100644 index 0000000..758ec1d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Rāda {firstIndex}-{lastIndex} no {totalCount} vienībām", + "PHONE_INPUT": { + "PLACEHOLDER": "Meklēt", + "EMPTY_STATE": "Nav atrasts" + }, + "CLOSE": "Aizvērt", + "BETA": "Beta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/generalSettings.json b/app/javascript/dashboard/i18n/locale/lv/generalSettings.json new file mode 100644 index 0000000..7cf5696 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "Jūs esat pārsniedzis sarunu ierobežojumu. Hacker plāns pieļauj tikai 500 sarunas.", + "INBOXES": "Jūs esat pārsniedzis iesūtnes ierobežojumu. Hacker plāns atbalsta tikai vietnes tiešraides tērzēšanu. Papildu iesūtnēm, piemēram, e-pastam, WhatsApp utt., ir nepieciešams maksas plāns.", + "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.", + "NON_ADMIN": "Lūdzu, sazinieties ar savu administratoru, lai modernizētu plānu un turpinātu izmantot visas funkcijas." + }, + "TITLE": "Konta iestatījumi", + "SUBMIT": "Atjaunināt iestatījumus", + "BACK": "Atpakaļ", + "DISMISS": "Atcelt", + "UPDATE": { + "ERROR": "Nevarēja atjaunināt iestatījumus, mēģiniet vēlreiz!", + "SUCCESS": "Konta iestatījumi ir veiksmīgi atjaunināti" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Dzēsiet savu Kontu", + "NOTE": "Tiklīdz izdzēsīsiet savu kontu, visi Jūsu dati tiks dzēsti.", + "BUTTON_TEXT": "Izdzēst Savu Kontu", + "CONFIRM": { + "TITLE": "Dzēst Kontu", + "MESSAGE": "Konta dzēšana ir neatgriezeniska. Ievadiet sava konta nosaukumu, lai apstiprinātu, ka vēlaties to neatgriezeniski dzēst.", + "BUTTON_TEXT": "Dzēst", + "DISMISS": "Atcelt", + "PLACE_HOLDER": "Lai apstiprinātu, lūdzu, uzrakstiet {accountName}" + }, + "SUCCESS": "Konts atzīmēts dzēšanai", + "FAILURE": "Nevarēja izdzēst kontu, mēģiniet vēlreiz!", + "SCHEDULED_DELETION": { + "TITLE": "Kontu ir Ieplānots Dzēst", + "MESSAGE_MANUAL": "Šo kontu ir ieplānots dzēst šādā datumā: {deletionDate}. To pieprasīja administrators. Jūs varat atcelt dzēšanu pirms šī datuma.", + "MESSAGE_INACTIVITY": "Šo kontu ir plānots dzēst šādā datumā: {deletionDate} konta neaktivitātes dēļ. Jūs varat atcelt dzēšanu pirms šī datuma.", + "CLEAR_BUTTON": "Atcelt Ieplānoto Dzēšanu" + } + }, + "FORM": { + "ERROR": "Lūdzu, izlabojiet veidlapas kļūdas", + "GENERAL_SECTION": { + "TITLE": "Vispārīgie iestatījumi", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "Konta ID", + "NOTE": "Šis ID ir nepieciešams, ja veidojat uz API balstītu integrāciju" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.", + "DURATION": { + "LABEL": "Inactivity duration", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Preferences", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "Konta nosaukums", + "PLACEHOLDER": "Jūsu konta nosaukums", + "ERROR": "Lūdzu, ievadiet derīgu konta nosaukumu" + }, + "LANGUAGE": { + "LABEL": "Vietnes valoda", + "PLACEHOLDER": "Jūsu konta nosaukums", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Ienākošā e-pasta domēns", + "PLACEHOLDER": "Domēns, kurā saņemsiet e-pastus", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "Atbalsta e-pasts", + "PLACEHOLDER": "Jūsu uzņēmuma atbalsta e-pasts", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclude unattended conversations", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a conversation should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "Atjaunināt", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "Jūsu kontam ir iespējota sarunu nepārtrauktība ar e-pastiem.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "Tagad Jūs varat saņemt e-pasta ziņojumus savā pielāgotajā domēnā." + } + }, + "UPDATE_CHATWOOT": "Ir pieejams Chatwoot {latestChatwootVersion} jauninājums. Lūdzu, atjauniniet savu programmatūru.", + "LEARN_MORE": "Uzzināt vairāk", + "PAYMENT_PENDING": "Jūsu maksājums tiek gaidīts. Lūdzu, atjauniniet savu maksājumu informāciju, lai turpinātu lietot Chatwoot", + "UPGRADE": "Modernizējieties, lai turpinātu lietot Chatwoot", + "LIMITS_UPGRADE": "Jūsu konts ir pārsniedzis lietošanas ierobežojumus. Lūdzu, uzlabojiet savu abonementu, lai turpinātu izmantot Chatwoot", + "OPEN_BILLING": "Atvērt norēķinus" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Nospiediet enter, lai izvēlētos", + "ENTER_TO_REMOVE": "Nospiediet enter, lai noņemtu", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "Izvēlieties vienu", + "SELECT": "Izvēlieties" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Paziņojumi", + "MARK_ALL_DONE": "Atzīmēt visu kā pabeigtu", + "DELETE_TITLE": "dzēsts", + "UNREAD_NOTIFICATION": { + "TITLE": "Nelasīti paziņojumi", + "ALL_NOTIFICATIONS": "Skatīt visus paziņojumus", + "LOADING_UNREAD_MESSAGE": "Notiek nelasītu paziņojumu ielāde...", + "EMPTY_MESSAGE": "Jums nav nelasītu paziņojumu" + }, + "LIST": { + "LOADING_MESSAGE": "Notiek paziņojumu ielāde...", + "404": "Nav paziņojumu", + "TABLE_HEADER": [ + "Nosaukums", + "Telefona numurs", + "Sarunas", + "Pēdējā Sazināšanās" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "Jauna saruna", + "conversation_assignment": "Saruna Piešķirta", + "assigned_conversation_new_message": "Jauns ziņojums", + "participating_conversation_new_message": "Jauns ziņojums", + "conversation_mention": "Pieminēt", + "sla_missed_first_response": "SLA Nokavēts", + "sla_missed_next_response": "SLA Nokavēts", + "sla_missed_resolution": "SLA Nokavēts" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Bezsaistē", + "RECONNECTING": "Notiek savienojuma atjaunošana...", + "RECONNECT_SUCCESS": "Atkārtoti izveidots savienojums" + }, + "BUTTON": { + "REFRESH": "Atjaunot" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Meklēt vai pāriet uz", + "SECTIONS": { + "GENERAL": "Vispārēji", + "REPORTS": "Pārskati", + "CONVERSATION": "Saruna", + "BULK_ACTIONS": "Lielapjoma Darbības", + "CHANGE_ASSIGNEE": "Mainīt Pilnvaroto", + "CHANGE_PRIORITY": "Mainīt prioritāti", + "CHANGE_TEAM": "Mainīt Komandu", + "SNOOZE_CONVERSATION": "Atlikt Sarunu", + "ADD_LABEL": "Pievienot sarunai etiķeti", + "REMOVE_LABEL": "Noņemt etiķeti no sarunas", + "SETTINGS": "Iestatījumi", + "AI_ASSIST": "AI Palīgs", + "APPEARANCE": "Izskats", + "SNOOZE_NOTIFICATION": "Atlikt Paziņojumu" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Doties uz Sarunu Informācijas Paneli", + "GO_TO_CONTACTS_DASHBOARD": "Doties uz Kontaktpersonu Informācijas Paneli", + "GO_TO_REPORTS_OVERVIEW": "Doties uz Pārskatu Kopsavilkumu", + "GO_TO_CONVERSATION_REPORTS": "Doties uz Sarunu Pārskatiem", + "GO_TO_AGENT_REPORTS": "Doties uz Aģentu Pārskatiem", + "GO_TO_LABEL_REPORTS": "Doties uz Etiķešu Pārskatiem", + "GO_TO_INBOX_REPORTS": "Doties uz Iesūtnes Pārskatiem", + "GO_TO_TEAM_REPORTS": "Doties uz Komandas Pārskatiem", + "GO_TO_SETTINGS_AGENTS": "Doties uz Aģentu Iestatījumiem", + "GO_TO_SETTINGS_TEAMS": "Doties uz Komandas Iestatījumiem", + "GO_TO_SETTINGS_INBOXES": "Doties uz Iesūtnes Iestatījumiem", + "GO_TO_SETTINGS_LABELS": "Doties uz Etiķešu Iestatījumiem", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Doties uz Sagatavoto Atbilžu Iestatījumiem", + "GO_TO_SETTINGS_APPLICATIONS": "Doties uz Lietojumprogrammas Iestatījumiem", + "GO_TO_SETTINGS_ACCOUNT": "Doties uz Konta Iestatījumiem", + "GO_TO_SETTINGS_PROFILE": "Doties uz Profila Iestatījumiem", + "GO_TO_NOTIFICATIONS": "Doties uz Paziņojumiem", + "ADD_LABELS_TO_CONVERSATION": "Pievienot sarunai etiķeti", + "ASSIGN_AN_AGENT": "Piešķirt aģentu", + "AI_ASSIST": "AI Palīgs", + "ASSIGN_PRIORITY": "Piešķirt prioritāti", + "ASSIGN_A_TEAM": "Piešķirt komandu", + "MUTE_CONVERSATION": "Izslēgt sarunu", + "UNMUTE_CONVERSATION": "Ieslēgt sarunu", + "REMOVE_LABEL_FROM_CONVERSATION": "Noņemt etiķeti no sarunas", + "REOPEN_CONVERSATION": "Atkārtoti atvērt sarunu", + "RESOLVE_CONVERSATION": "Atrisināt sarunu", + "SEND_TRANSCRIPT": "Nosūtīt uz e-pastu transkriptu", + "SNOOZE_CONVERSATION": "Atlikt Sarunu", + "UNTIL_NEXT_REPLY": "Līdz nākamajai atbildei", + "UNTIL_NEXT_WEEK": "Līdz nākamajai nedēļai", + "UNTIL_TOMORROW": "Līdz rītdienai", + "UNTIL_NEXT_MONTH": "Līdz nākamajam mēnesim", + "AN_HOUR_FROM_NOW": "Līdz stundai, no šī brīža", + "UNTIL_CUSTOM_TIME": "Pielāgot...", + "CHANGE_APPEARANCE": "Mainīt Izskatu", + "LIGHT_MODE": "Gaišs", + "DARK_MODE": "Tumšs", + "SYSTEM_MODE": "Sistēma", + "SNOOZE_NOTIFICATION": "Atlikt Paziņojumu" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Notiek informācijas paneļa lietotnes ielāde..." + }, + "COMMON": { + "OR": "Vai", + "CLICK_HERE": "noklikšķiniet šeit" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/helpCenter.json b/app/javascript/dashboard/i18n/locale/lv/helpCenter.json new file mode 100644 index 0000000..7a55537 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Palīdzības centrs", + "NEW_PAGE": { + "DESCRIPTION": "Izveidojiet saviem klientiem pašapkalpošanās palīdzības centru portālus. Palīdziet viņiem ātri atrast atbildes, negaidot. Racionalizējiet pieprasījumus, palieliniet aģentu efektivitāti un paaugstiniet klientu atbalstu.", + "CREATE_PORTAL_BUTTON": "Izveidot Portālu" + }, + "HEADER": { + "FILTER": "Filtrēt pēc", + "SORT": "Kārtot pēc", + "LOCALE": "Lokalizācija", + "SETTINGS_BUTTON": "Iestatījumi", + "NEW_BUTTON": "Jauns Raksts", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Publicēts", + "DRAFT": "Melnraksts", + "ARCHIVED": "Arhivēts" + }, + "TITLES": { + "ALL_ARTICLES": "Visi Raksti", + "MINE": "Mani Raksti", + "DRAFT": "Melnraksti", + "ARCHIVED": "Arhivētie Raksti" + }, + "LOCALE_SELECT": { + "TITLE": "Izvēlieties lokalizāciju", + "PLACEHOLDER": "Izvēlieties lokalizāciju", + "NO_RESULT": "Lokalizācija netika atrasta", + "SEARCH_PLACEHOLDER": "Meklēt lokalizāciju" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "Visi Raksti", + "PUBLISH_BUTTON": "Publicēt", + "MOVE_TO_ARCHIVE_BUTTON": "Pārvietot uz arhivēts", + "PREVIEW": "Priekšskatījums", + "ADD_TRANSLATION": "Pievienojiet tulkojumu", + "OPEN_SIDEBAR": "Atvērt sānjoslu", + "CLOSE_SIDEBAR": "Aizvērt sānjoslu", + "SAVING": "Notiek saglabāšana...", + "SAVED": "Saglabāts" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Augšupielādēt attēlu", + "UPLOADING": "Notiek Augšupielāde...", + "SUCCESS": "Attēls ir veiksmīgi augšupielādēts", + "ERROR": "Augšupielādējot attēlu, radās kļūda", + "UN_AUTHORIZED_ERROR": "Jums nav tiesību augšupielādēt attēlus", + "ERROR_FILE_SIZE": "Attēla izmēram ir jābūt mazākam par {size}MB", + "ERROR_FILE_FORMAT": "Attēla formātam ir jābūt jpg, jpeg vai png", + "ERROR_FILE_DIMENSIONS": "Attēla izmēram ir jābūt mazākam par 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Raksta iestatījumi", + "FORM": { + "CATEGORY": { + "LABEL": "Kategorija", + "TITLE": "Izvēlieties kategoriju", + "PLACEHOLDER": "Izvēlieties kategoriju", + "NO_RESULT": "Kategorija nav atrasta", + "SEARCH_PLACEHOLDER": "Meklēt kategoriju" + }, + "AUTHOR": { + "LABEL": "Autors", + "TITLE": "Izvēlieties autoru", + "PLACEHOLDER": "Izvēlieties autoru", + "NO_RESULT": "Autors nav atrasts", + "SEARCH_PLACEHOLDER": "Meklēt autoru" + }, + "META_TITLE": { + "LABEL": "Meta virsraksts", + "PLACEHOLDER": "Pievienot meta virsrakstu" + }, + "META_DESCRIPTION": { + "LABEL": "Meta apraksts", + "PLACEHOLDER": "Pievienojiet savu meta aprakstu, lai iegūtu labākus meklētājprogrammas optimizācijas rezultātus..." + }, + "META_TAGS": { + "LABEL": "Meta tagi", + "PLACEHOLDER": "Pievienojiet meta tagus, atdalot tos ar komatu..." + } + }, + "BUTTONS": { + "ARCHIVE": "Arhivēt rakstu", + "DELETE": "Dzēst rakstu" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Bez kategorijas", + "SEARCH_RESULTS": "Meklēšanas rezultāti vaicājumam {query}", + "EMPTY_TEXT": "Meklēt rakstus, ko ievietot atbildēs.", + "SEARCH_LOADER": "Meklēšana...", + "INSERT_ARTICLE": "Ievietot", + "NO_RESULT": "Raksti nav atrasti", + "COPY_LINK": "Kopēt raksta saiti starpliktuvē", + "OPEN_LINK": "Atvērt rakstu jaunā cilnē", + "PREVIEW_LINK": "Raksta priekšskatījums" + }, + "PORTAL": { + "HEADER": "Portāli", + "DEFAULT": "Noklusēts", + "NEW_BUTTON": "Jauns Portāls", + "ACTIVE_BADGE": "aktīvs", + "CHOOSE_LOCALE_LABEL": "Izvēlieties lokalizāciju", + "LOADING_MESSAGE": "Notiek portālu ielāde...", + "ARTICLES_LABEL": "raksti", + "NO_PORTALS_MESSAGE": "Nav pieejami portāli", + "ADD_NEW_LOCALE": "Pievienot jaunu lokalizāciju", + "POPOVER": { + "TITLE": "Portāli", + "PORTAL_SETTINGS": "Portāla iestatījumi", + "SUBTITLE": "Jums ir vairāki portāli, un katram portālam var būt dažādas lokalizācijas.", + "CANCEL_BUTTON_LABEL": "Atcelt", + "CHOOSE_LOCALE_BUTTON": "Izvēlieties Lokalizāciju" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "raksti", + "ADD": "Pievienot lokalizāciju", + "VISIT": "Apmeklēt tīmekļa vietni", + "SETTINGS": "Iestatījumi", + "DELETE": "Dzēst" + }, + "PORTAL_CONFIG": { + "TITLE": "Portāla Konfigurācijas", + "ITEMS": { + "NAME": "Nosaukums", + "DOMAIN": "Pielāgots domēns", + "SLUG": "Slug", + "TITLE": "Portāla nosaukums", + "THEME": "Tēmas krāsa", + "SUB_TEXT": "Portāla apakšteksts" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Pieejamās lokalizācijas", + "TABLE": { + "NAME": "Lokalizācijas nosaukums", + "CODE": "Lokalizācijas kods", + "ARTICLE_COUNT": "Rakstu skaits", + "CATEGORIES": "Kategoriju skaits", + "SWAP": "Apmainīt", + "DELETE": "Dzēst", + "DEFAULT_LOCALE": "Noklusējums" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Dzēst portālu", + "MESSAGE": "Vai tiešām vēlaties dzēst šo portālu", + "YES": "Jā, dzēst portālu", + "NO": "Nē, paturēt portālu", + "API": { + "DELETE_SUCCESS": "Portāls veiksmīgi izdzēsts", + "DELETE_ERROR": "Dzēšot portālu, radās kļūda" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Rediģēt portālu", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Pamatinformācija" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portāla pielāgošana" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Kategorijas" + }, + "LOCALE_SETTINGS": { + "TITLE": "Lokalizācijas" + } + }, + "CATEGORIES": { + "TITLE": "Kategorijas iekš", + "NEW_CATEGORY": "Jauna kategorija", + "TABLE": { + "NAME": "Nosaukums", + "DESCRIPTION": "Apraksts", + "LOCALE": "Lokalizācija", + "ARTICLE_COUNT": "Rakstu skaits", + "ACTION_BUTTON": { + "EDIT": "Rediģēt kategoriju", + "DELETE": "Dzēst kategoriju" + }, + "EMPTY_TEXT": "Kategorijas nav atrastas" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Atjaunināt pamata iestatījumus" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Palīdzības centra informācija", + "BODY": "Pamatinformācija par portālu" + }, + "CUSTOMIZATION": { + "TITLE": "Palīdzības centra pielāgošana", + "BODY": "Pielāgot portālu" + }, + "FINISH": { + "TITLE": "Gatavs", + "BODY": "Viss ir gatavs!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Atpakaļ", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Izveidot Portālu", + "TITLE": "Palīdzības centra informācija", + "CREATE_BASIC_SETTING_BUTTON": "Izveidot portāla pamatiestatījumus" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Portāla pielāgošana", + "TITLE": "Palīdzības centra pielāgošana", + "UPDATE_PORTAL_BUTTON": "Atjaunināt portāla iestatījumus" + }, + "FINISH_PAGE": { + "TITLE": "Gatavs!", + "MESSAGE": "Tagad Jūs šo izveidoto portālu varat redzēt savā visu portālu lapā.", + "FINISH": "Dodieties uz visu portālu lapu" + } + }, + "LOGO": { + "LABEL": "Logotips", + "UPLOAD_BUTTON": "Augšupielādēt logotipu", + "HELP_TEXT": "Šis logotips tiks attēlots portāla galvenē.", + "IMAGE_UPLOAD_SUCCESS": "Logotips veiksmīgi augšupielādēts", + "IMAGE_UPLOAD_ERROR": "Logotips veiksmīgi izdzēsts", + "IMAGE_DELETE_ERROR": "Dzēšot logotipu radās kļūda" + }, + "NAME": { + "LABEL": "Nosaukums", + "PLACEHOLDER": "Portāla nosaukums", + "HELP_TEXT": "Nosaukums tiks izmantots publiskajā portālā iekšēji.", + "ERROR": "Nepieciešams nosaukums" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portāla slug priekš URL", + "ERROR": "Nepieciešams slug" + }, + "DOMAIN": { + "LABEL": "Pielāgots domēns", + "PLACEHOLDER": "Portāla pielāgots domēns", + "HELP_TEXT": "Pievienot tikai tad, ja vēlaties saviem portāliem izmantot pielāgotu domēnu. Piemēram: {exampleURL}", + "ERROR": "Ievadiet derīgu domēna URL" + }, + "HOME_PAGE_LINK": { + "LABEL": "Mājaslapas saite", + "PLACEHOLDER": "Portāla mājaslapas saite", + "HELP_TEXT": "Saite, ko izmanto lai atgrieztos no portāla uz sākumlapu. Piemēram: {exampleURL}", + "ERROR": "Ievadiet derīgu sākumlapas URL" + }, + "THEME_COLOR": { + "LABEL": "Portāla tēmas krāsa", + "HELP_TEXT": "Šī krāsa tiks parādīta kā portāla motīva krāsa." + }, + "PAGE_TITLE": { + "LABEL": "Lapas Nosaukums", + "PLACEHOLDER": "Portāla lapas nosaukums", + "HELP_TEXT": "Lapas nosaukums tiks izmantots publiskajā portālā.", + "ERROR": "Nepieciešams lapas nosaukums" + }, + "HEADER_TEXT": { + "LABEL": "Galvenes Teksts", + "PLACEHOLDER": "Portāla galvenes teksts", + "HELP_TEXT": "Portāla galvenes teksts tiks izmantots publiskajā portālā.", + "ERROR": "Nepieciešams portāla galvenes teksts" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portāls ir veiksmīgi izveidots.", + "ERROR_MESSAGE_FOR_BASIC": "Nevarēja izveidot portālu. Mēģiniet vēlreiz.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portāls ir veiksmīgi atjaunināts.", + "ERROR_MESSAGE_FOR_UPDATE": "Nevarēja atjaunināt portālu. Mēģiniet vēlreiz." + } + }, + "ADD_LOCALE": { + "TITLE": "Pievienot jaunu lokalizāciju", + "SUB_TITLE": "Tādējādi pieejamo tulkojumu sarakstam tiek pievienota jauna lokalizācija.", + "PORTAL": "Portāls", + "LOCALE": { + "LABEL": "Lokalizācija", + "PLACEHOLDER": "Izvēlieties lokalizāciju", + "ERROR": "Nepieciešama lokalizācija" + }, + "BUTTONS": { + "CREATE": "Izveidot lokalizāciju", + "CANCEL": "Atcelt" + }, + "API": { + "SUCCESS_MESSAGE": "Lokalizācija ir veiksmīgi pievienota", + "ERROR_MESSAGE": "Nevar pievienot lokalizāciju. Mēģiniet vēlreiz." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Noklusējuma lokalizācija ir veiksmīgi atjaunināta", + "ERROR_MESSAGE": "Nevar atjaunināt noklusējuma lokalizāciju. Mēģiniet vēlreiz." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Lokalizācija veiksmīgi noņemta no portāla", + "ERROR_MESSAGE": "Nevar noņemt lokalizāciju no portāla. Mēģiniet vēlreiz." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Notiek rakstu ielāde...", + "404": "Neviens raksts neatbilst jūsu meklēšanas vaicājumam 🔍", + "NO_ARTICLES": "Raksti nav pieejami", + "HEADERS": { + "TITLE": "Nosaukums", + "CATEGORY": "Kategorija", + "READ_COUNT": "Skatījumu skaits", + "STATUS": "Statuss", + "LAST_EDITED": "Pēdējo reizi rediģēts" + }, + "COLUMNS": { + "BY": "persona", + "AUTHOR_NOT_AVAILABLE": "Autors nav pieejams" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Notiek raksta ielāde...", + "TITLE_PLACEHOLDER": "Šeit ir raksta nosaukums", + "CONTENT_PLACEHOLDER": "Uzrakstiet savu rakstu šeit", + "API": { + "ERROR": "Saglabājot rakstu, radās kļūda" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Publicējot rakstu, radās kļūda", + "SUCCESS": "Raksts veiksmīgi publicēts" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Arhivējot rakstu, radās kļūda", + "SUCCESS": "Raksts ir veiksmīgi arhivēts" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Izstrādājot rakstu, radās kļūda", + "SUCCESS": "Raksts izveidots veiksmīgi" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai tiešām vēlaties izdzēst šo rakstu?", + "YES": "Jā, Dzēst", + "NO": "Nē, Paturēt" + } + }, + "API": { + "SUCCESS_MESSAGE": "Raksts ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Dzēšot rakstu, radās kļūda" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Lūdzu, pievienojiet raksta virsrakstu un saturu. Tikai tad Jūs varat atjaunināt iestatījumus" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Meklēt rakstus" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Izveidot kategoriju", + "SUB_TITLE": "Kategorija tiks izmantota publiskajā portālā, lai klasificētu rakstus.", + "PORTAL": "Portāls", + "LOCALE": "Lokalizācija", + "NAME": { + "LABEL": "Nosaukums", + "PLACEHOLDER": "Kategorijas nosaukums", + "HELP_TEXT": "Kategorijas nosaukums un ikona tiks izmantota publiskajā portālā, lai klasificētu rakstus.", + "ERROR": "Nepieciešams nosaukums" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Kategorijas slug priekš URL", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Nepieciešams slug" + }, + "DESCRIPTION": { + "LABEL": "Apraksts", + "PLACEHOLDER": "Lūdzu, sniedziet īsu kategorijas aprakstu.", + "ERROR": "Nepieciešams apraksts" + }, + "BUTTONS": { + "CREATE": "Izveidot kategoriju", + "CANCEL": "Atcelt" + }, + "API": { + "SUCCESS_MESSAGE": "Kategorija ir veiksmīgi izveidota", + "ERROR_MESSAGE": "Nevar izveidot kategoriju" + } + }, + "EDIT": { + "TITLE": "Rediģēt kategoriju", + "SUB_TITLE": "Rediģējot kategoriju, kategorija tiks atjaunināta publiskajā portālā.", + "PORTAL": "Portāls", + "LOCALE": "Lokalizācija", + "NAME": { + "LABEL": "Nosaukums", + "PLACEHOLDER": "Kategorijas nosaukums", + "HELP_TEXT": "Kategorijas nosaukums un ikona tiks izmantota publiskajā portālā, lai klasificētu rakstus.", + "ERROR": "Nepieciešams nosaukums" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Kategorijas slug priekš URL", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Nepieciešams slug" + }, + "DESCRIPTION": { + "LABEL": "Apraksts", + "PLACEHOLDER": "Lūdzu, sniedziet īsu kategorijas aprakstu.", + "ERROR": "Nepieciešams apraksts" + }, + "BUTTONS": { + "CREATE": "Atjaunināt kategoriju", + "CANCEL": "Atcelt" + }, + "API": { + "SUCCESS_MESSAGE": "Kategorija ir veiksmīgi atjaunināta", + "ERROR_MESSAGE": "Nevar atjaunināt kategoriju" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Kategorija ir veiksmīgi izdzēsta", + "ERROR_MESSAGE": "Nevar izdzēst kategoriju" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Meklēt rakstus", + "PLACEHOLDER": "Meklēt rakstus", + "NO_RESULT": "Raksti nav atrasti", + "SEARCHING": "Meklēšana...", + "SEARCH_BUTTON": "Meklēt", + "INSERT_ARTICLE": "Ievietot saiti", + "IFRAME_ERROR": "URL ir tukšs vai nederīgs. Nevar parādīt saturu.", + "OPEN_ARTICLE_SEARCH": "Ievietot rakstu no Palīdzības Centra", + "SUCCESS_ARTICLE_INSERTED": "Raksts ir veiksmīgi ievietots", + "PREVIEW_LINK": "Raksta priekšskatījums", + "CANCEL": "Aizvērt", + "BACK": "Atpakaļ", + "BACK_RESULTS": "Atpakaļ uz rezultātiem" + }, + "UPGRADE_PAGE": { + "TITLE": "Palīdzības centrs", + "DESCRIPTION": "Izveidot lietotājiem draudzīgus pašapkalpošanās portālus, palīdzēt saviem lietotājiem piekļūt rakstiem, kā arī saņemt 24/7 atbalstu. Modernizējiet savu abonementu, lai iespējotu šo funkciju.", + "SELF_HOSTED_DESCRIPTION": "Izveidot lietotājiem draudzīgus pašapkalpošanās portālus, palīdzēt saviem lietotājiem piekļūt rakstiem, kā arī saņemt 24/7 atbalstu. Lūdzu, sazinieties ar savu administratoru, lai iespējotu šo funkciju.", + "BUTTON": { + "LEARN_MORE": "Uzzināt vairāk", + "UPGRADE": "Modernizēt" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Vairāki portāli", + "DESCRIPTION": "Izveidot vairākus palīdzības centra portālus dažādiem produktiem, izmantojot vienu un to pašu kontu." + }, + "LOCALES": { + "TITLE": "Lokalizācijas tiek pilnībā atbalstītas", + "DESCRIPTION": "Lokalizēt portālu savā valodā. Mēs atbalstām visas lokalizācijas un atļaujam tulkojumus katram rakstam." + }, + "SEO": { + "TITLE": "Meklētājprogrammu optimizācijai draudzīgs dizains", + "DESCRIPTION": "Pielāgot savus metatagus, lai uzlabotu redzamību meklētājprogrammās, izmantojot mūsu meklētājprogrammu optimizācijai draudzīgās lapas." + }, + "API": { + "TITLE": "Pilns API atbalsts", + "DESCRIPTION": "Izmantot portālu kā headless satura pārvaldības sistēmu ar trešās puses front-end framework, izmantojot mūsu API." + } + } + }, + "LOADING": "Notiek ielāde...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} skatījums | {count} skatījumi", + "DROPDOWN_MENU": { + "PUBLISH": "Publicēt", + "DRAFT": "Melnraksts", + "ARCHIVE": "Arhīvs", + "DELETE": "Dzēst" + }, + "STATUS": { + "DRAFT": "Melnraksts", + "PUBLISHED": "Publicēts", + "ARCHIVED": "Arhivēts" + }, + "CATEGORY": { + "UNCATEGORISED": "Bez kategorijas" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "Visi raksti", + "MINE": "Mani", + "DRAFT": "Melnraksts", + "PUBLISHED": "Publicēts", + "ARCHIVED": "Arhivēts" + }, + "CATEGORY": { + "ALL": "Visas kategorijas" + }, + "LOCALE": { + "ALL": "Visas lokalizācijas" + }, + "NEW_ARTICLE": "Jauns raksts" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Uzrakstīt rakstu", + "SUBTITLE": "Uzrakstīt bagātīgu rakstu, sāksim!", + "BUTTON_LABEL": "Jauns raksts" + }, + "MINE": { + "TITLE": "Jūs neesat uzrakstījis nevienu rakstu", + "SUBTITLE": "Visi raksti, kurus jūs uzrakstījāt, tiek attēloti šeit lai ātri tiem varētu piekļūt." + }, + "DRAFT": { + "TITLE": "Projektos nav rakstu", + "SUBTITLE": "Šeit parādīsies rakstu melnraksti" + }, + "PUBLISHED": { + "TITLE": "Nav publicētu rakstu", + "SUBTITLE": "Šeit parādīsies publicētie raksti" + }, + "ARCHIVED": { + "TITLE": "Arhīvā nav rakstu", + "SUBTITLE": "Arhivēti raksti netiek parādīti portālā. Jūs varat to izmantot, lai atzīmētu novecojušas vai neaktuālas lapas" + }, + "CATEGORY": { + "TITLE": "Šajā kategorijā nav neviena raksta", + "SUBTITLE": "Šīs kategorijas raksti tiks parādīti šeit" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "Jauna kategorija", + "EDIT_CATEGORY": "Rediģēt kategoriju", + "CATEGORIES_COUNT": "{n} kategorija | {n} kategorijas", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Kategorijas ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "Kategorijas nav atrastas", + "SUBTITLE": "Šeit tiks parādītas kategorijas. Kategoriju var pievienot, noklikšķinot uz pogas \"Jauna kategorija\"." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} raksts | {count} raksti" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Kategorija ir veiksmīgi izveidota", + "ERROR_MESSAGE": "Nevar izveidot kategoriju" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Kategorija ir veiksmīgi atjaunināta", + "ERROR_MESSAGE": "Nevar atjaunināt kategoriju" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Kategorija ir veiksmīgi izdzēsta", + "ERROR_MESSAGE": "Nevar izdzēst kategoriju" + } + }, + "HEADER": { + "CREATE": "Izveidot kategoriju", + "EDIT": "Rediģēt kategoriju", + "DESCRIPTION": "Rediģējot kategoriju, kategorija tiks atjaunināta publiskajā portālā.", + "PORTAL": "Portāls", + "LOCALE": "Lokalizācija" + }, + "FORM": { + "NAME": { + "LABEL": "Nosaukums", + "PLACEHOLDER": "Kategorijas nosaukums", + "ERROR": "Nepieciešams nosaukums" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Kategorijas slug priekš URL", + "ERROR": "Nepieciešams slug", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Apraksts", + "PLACEHOLDER": "Lūdzu, sniedziet īsu kategorijas aprakstu.", + "ERROR": "Nepieciešams apraksts" + } + }, + "BUTTONS": { + "CREATE": "Izveidot", + "EDIT": "Atjaunināt", + "CANCEL": "Atcelt" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "Nav pieejama neviena lokalizācija | {n} lokalizācija | {n} lokalizācijas", + "NEW_LOCALE_BUTTON_TEXT": "Jauna lokalizācija", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} raksts | {count} raksti", + "CATEGORIES_COUNT": "{count} kategorija | {count} kategorijas", + "DEFAULT": "Noklusējums", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Padarīt par noklusēto", + "DELETE": "Dzēst" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Pievienot jaunu lokalizāciju", + "DESCRIPTION": "Izvēlieties valodu, kurā šis raksts tiks rakstīts. Tas tiks pievienots jūsu tulkojumu sarakstam, un vēlāk varēsit pievienot citus.", + "COMBOBOX": { + "PLACEHOLDER": "Izvēlieties lokalizāciju..." + }, + "API": { + "SUCCESS_MESSAGE": "Lokalizācija ir veiksmīgi pievienota", + "ERROR_MESSAGE": "Nevar pievienot lokalizāciju. Mēģiniet vēlreiz." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Notiek saglabāšana...", + "SAVED": "Saglabāts" + }, + "PREVIEW": "Priekšskatījums", + "PUBLISH": "Publicēt", + "DRAFT": "Melnraksts", + "ARCHIVE": "Arhīvs", + "BACK_TO_ARTICLES": "Atpakaļ uz rakstiem" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "Papildu īpašības", + "UNCATEGORIZED": "Bez kategorijas", + "EDITOR_PLACEHOLDER": "Uzrakstiet kaut ko..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Raksta īpašības", + "META_DESCRIPTION": "Meta apraksts", + "META_DESCRIPTION_PLACEHOLDER": "Pievienot meta aprakstu", + "META_TITLE": "Meta virsraksts", + "META_TITLE_PLACEHOLDER": "Pievienot meta virsrakstu", + "META_TAGS": "Meta tagi", + "META_TAGS_PLACEHOLDER": "Pievienot meta tagus" + }, + "API": { + "ERROR": "Saglabājot rakstu, radās kļūda" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "Jauns portāls", + "PORTALS": "Portāli", + "CREATE_PORTAL": "Izveidot un pārvaldīt vairākus portālus", + "ARTICLES": "raksti", + "DOMAIN": "domēns", + "PORTAL_NAME": "Portāla nosaukums" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Izveidot jaunu portālu", + "DESCRIPTION": "Piešķiriet savam portālam nosaukumu un izveidojiet lietotājam draudzīgu vietrāža URL. Vēlāk iestatījumos varat modificēt abus.", + "CONFIRM_BUTTON_LABEL": "Izveidot", + "NAME": { + "LABEL": "Nosaukums", + "PLACEHOLDER": "Lietotāja Rokasgrāmata | Chatwoot", + "MESSAGE": "Izvēlieties savam portālam nosaukumu.", + "ERROR": "Nepieciešams nosaukums" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "lietotāja rokasgrāmata", + "ERROR": "Nepieciešams slug", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logotips", + "IMAGE_UPLOAD_ERROR": "Nevarēja augšupielādēt attēlu! Lūdzu, mēģiniet vēlreiz", + "IMAGE_UPLOAD_SUCCESS": "Attēls ir veiksmīgi pievienots. Lūdzu, noklikšķiniet uz saglabāt izmaiņas, lai saglabātu logotipu", + "IMAGE_DELETE_SUCCESS": "Logotips veiksmīgi izdzēsts", + "IMAGE_DELETE_ERROR": "Nevar izdzēst logotipu", + "IMAGE_UPLOAD_SIZE_ERROR": "Attēla izmēram ir jābūt mazākam par {size}MB" + }, + "NAME": { + "LABEL": "Nosaukums", + "PLACEHOLDER": "Portāla nosaukums", + "ERROR": "Nepieciešams nosaukums" + }, + "HEADER_TEXT": { + "LABEL": "Virsraksta teksts", + "PLACEHOLDER": "Portāla galvenes teksts" + }, + "PAGE_TITLE": { + "LABEL": "Lapas nosaukums", + "PLACEHOLDER": "Portāla lapas nosaukums" + }, + "HOME_PAGE_LINK": { + "LABEL": "Mājas lapas saite", + "PLACEHOLDER": "Portāla mājaslapas saite", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portāla slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Tiešraides tērzēšanas widget", + "PLACEHOLDER": "Izvēlieties tiešraides tērzēšanas widget", + "HELP_TEXT": "Izvēlieties tiešsaistes tērzēšanas widget, kas tiks parādīts jūsu palīdzības centrā", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Zīmola krāsa" + }, + "SAVE_CHANGES": "Saglabāt izmaiņas" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Pielāgots domēns", + "LABEL": "Pielāgots domēns:", + "DESCRIPTION": "Jūs varat izvietot savu portālu pielāgotā domēnā. Piemēram, ja jūsu vietne ir yourdomain.com un vēlaties, lai jūsu portāls būtu pieejams vietnē docs.yourdomain.com, vienkārši ievadiet to šajā laukā.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Portāla pielāgots domēns", + "EDIT_BUTTON": "Rediģēt", + "ADD_BUTTON": "Pievienot pielāgoto domēnu", + "STATUS": { + "LIVE": "Tiešraide", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Pievienot pielāgoto domēnu", + "EDIT_HEADER": "Rediģēt pielāgoto domēnu", + "ADD_CONFIRM_BUTTON_LABEL": "Pievienot domēnu", + "EDIT_CONFIRM_BUTTON_LABEL": "Atjaunināt domēnu", + "LABEL": "Pielāgots domēns", + "PLACEHOLDER": "Portāla pielāgots domēns", + "ERROR": "Nepieciešams pielāgots domēns", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS konfigurācija", + "DESCRIPTION": "Piesakieties sava DNS nodrošinātāja kontā un pievienojiet CNAME ierakstu apakšdomēnam, kas norāda uz chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "Nosūtīt" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Dzēst {portalName}", + "HEADER": "Dzēst portālu", + "DESCRIPTION": "Neatgriezeniski dzēst šo portālu. Šī darbība ir neatgriezeniska", + "DIALOG": { + "HEADER": "Vai tiešām vēlaties dzēst vietni {portalName}?", + "DESCRIPTION": "Šī ir pastāvīga darbība, kuru nevar atsaukt.", + "CONFIRM_BUTTON_LABEL": "Dzēst" + } + }, + "EDIT_CONFIGURATION": "Rediģēt konfigurāciju" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portāls ir veiksmīgi izveidots", + "ERROR_MESSAGE": "Nevar izveidot portālu" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portāls ir veiksmīgi atjaunināts", + "ERROR_MESSAGE": "Nevar atjaunināt portālu" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "Notiek Augšupielāde...", + "UPLOAD": "Upload & Process", + "CANCEL": "Atcelt", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Notiek ģenerēšana...", + "CONFIRM_DELETE": "Are you sure you want to delete {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Pabeigts", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/inbox.json b/app/javascript/dashboard/i18n/locale/lv/inbox.json new file mode 100644 index 0000000..6c59d95 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "Mana Iesūtne", + "DISPLAY_DROPDOWN": "Parādīt", + "LOADING": "Notiek paziņojumu iegūšana", + "404": "Šajā grupā nav aktīvu paziņojumu.", + "NO_NOTIFICATIONS": "Nav paziņojumu", + "NOTE": "Paziņojumi no visām abonētajām iesūtnēm", + "NO_MESSAGES_AVAILABLE": "Nevar iegūt ziņojumus", + "SNOOZED_UNTIL": "Atlikts līdz", + "SNOOZED_UNTIL_TOMORROW": "Atlikts līdz rītdienai", + "SNOOZED_UNTIL_NEXT_WEEK": "Atlikts līdz nākamajai nedēļai" + }, + "ACTION_HEADER": { + "SNOOZE": "Atlikt paziņojumu", + "DELETE": "Dzēst paziņojumu", + "BACK": "Atpakaļ" + }, + "TYPES": { + "CONVERSATION_MENTION": "Jūs esat pieminēts sarunā", + "CONVERSATION_CREATION": "Izveidota jauna saruna", + "CONVERSATION_ASSIGNMENT": "Jums ir piešķirta saruna", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Jauns ziņojums piešķirtajā sarunā", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Jauns ziņojums sarunā, kurā piedalāties", + "SLA_MISSED_FIRST_RESPONSE": "SLA pirmā sarunas atbilde nokavēta", + "SLA_MISSED_NEXT_RESPONSE": "SLA nākamā sarunas atbilde nokavēta", + "SLA_MISSED_RESOLUTION": "SLA sarunas atrisināšanas laiks nokavēts" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Pieminēts", + "CONVERSATION_ASSIGNMENT": "Jums piešķirts", + "CONVERSATION_CREATION": "Jauna Saruna", + "SLA_MISSED_FIRST_RESPONSE": "SLA pārkāpums", + "SLA_MISSED_NEXT_RESPONSE": "SLA pārkāpums", + "SLA_MISSED_RESOLUTION": "SLA pārkāpums", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Jauns ziņojums", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Jauns ziņojums", + "SNOOZED_UNTIL": "Atlikts uz {time}", + "SNOOZED_ENDS": "Atlikšana beidzās" + }, + "NO_CONTENT": "Saturs nav pieejams", + "MENU_ITEM": { + "MARK_AS_READ": "Atzīmēt kā lasītu", + "MARK_AS_UNREAD": "Atzīmēt kā nelasītu", + "SNOOZE": "Atlikt", + "DELETE": "Dzēst", + "MARK_ALL_READ": "Atzīmēt visu kā izlasītu", + "DELETE_ALL": "Dzēst visu", + "DELETE_ALL_READ": "Dzēst visu izlasīto" + }, + "DISPLAY_MENU": { + "SORT": "Šķirot", + "DISPLAY": "Parādīt :", + "SORT_OPTIONS": { + "NEWEST": "Jaunākais", + "OLDEST": "Vecākais", + "PRIORITY": "Prioritāte" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Atlikts", + "READ": "Lasīts", + "LABELS": "Etiķetes", + "CONVERSATION_ID": "Sarunas ID" + } + }, + "ALERTS": { + "MARK_AS_READ": "Paziņojums atzīmēts kā izlasīts", + "MARK_AS_UNREAD": "Paziņojums atzīmēts kā nelasīts", + "SNOOZE": "Paziņojums atlikts", + "DELETE": "Paziņojums izdzēsts", + "MARK_ALL_READ": "Visi paziņojumi ir atzīmēti kā lasīti", + "DELETE_ALL": "Visi paziņojumi izdzēsti", + "DELETE_ALL_READ": "Visi lasīšanas paziņojumi ir izdzēsti" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json new file mode 100644 index 0000000..1080f89 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Iesūtnes", + "DESCRIPTION": "Kanāls ir saziņas veids, ko klients izvēlas saziņai ar jums. Iesūtne ir vieta, kur pārvaldāt mijiedarbības ar noteiktu kanālu. Tas var ietvert saziņu no dažādiem avotiem, piemēram, e-pasta, tiešsaistes tērzēšanas un sociālajiem medijiem.", + "LEARN_MORE": "Uzzināt vairāk par iesūtnēm", + "RECONNECTION_REQUIRED": "Jūsu iesūtne ir atvienota. Jūs nesaņemsiet jaunus ziņojumus, kamēr nebūsiet tos atkārtoti autorizējis.", + "CLICK_TO_RECONNECT": "Noklikšķiniet šeit, lai atkārtoti izveidotu savienojumu.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "Šim kontam nav pievienota neviena Iesūtne." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Izvēlieties Kanālu", + "BODY": "Izvēlieties pakalpojumu sniedzēju, kuru vēlaties integrēt ar Chatwoot." + }, + "INBOX": { + "TITLE": "Izveidot Iesūtni", + "BODY": "Autentificēt savu kontu un izveidot iesūtni." + }, + "AGENT": { + "TITLE": "Pievienot Aģentus", + "BODY": "Pievienojiet aģentus izveidotajai iesūtnei." + }, + "FINISH": { + "TITLE": "Gatavs!", + "BODY": "Jūs varat sākt darboties!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Iesūtnes Nosaukums", + "PLACEHOLDER": "Ievadiet Jūsu iesūtnes nosaukumu (piemēram: Acme Inc)", + "ERROR": "Lūdzu, ievadiet derīgu iesūtnes nosaukumu" + }, + "WEBSITE_NAME": { + "LABEL": "Tīmekļa Vietnes Nosaukums", + "PLACEHOLDER": "Ievadiet Jūsu tīmekļa vietnes nosaukumu (piemēram: Acme Inc)" + }, + "FB": { + "HELP": "PS: Pierakstoties mēs iegūstam piekļuvi tikai pie Jūsu lapas ziņojumiem. Chatwoot nekad nevar piekļūt jūsu privātajām ziņām.", + "CHOOSE_PAGE": "Izvēlieties Lapu", + "CHOOSE_PLACEHOLDER": "Izvēlieties lapu no saraksta", + "INBOX_NAME": "Iesūtnes Nosaukums", + "ADD_NAME": "Pievienojiet savas iesūtnes nosaukumu", + "PICK_NAME": "Lūdzu ievadiet Iesūtnes nosaukumu", + "PICK_A_VALUE": "Izvēlieties vērtību", + "CREATE_INBOX": "Izveidot Iesūtni" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Turpināt ar Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Pievienot savu Instagram Profilu", + "HELP": "Lai pievienotu savu Instagram profilu kā kanālu, jums ir jāautentificē savs Instagram profils, noklikšķinot uz 'Turpināt ar Instagram' ", + "ERROR_MESSAGE": "Veidojot savienojumu ar Instagram, radās kļūda. Lūdzu, mēģiniet vēlreiz", + "ERROR_AUTH": "Veidojot savienojumu ar Instagram, radās kļūda. Lūdzu, mēģiniet vēlreiz", + "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "Lai pievienotu savu Twitter profilu kā kanālu, Jums ir jāautentificē savs Twitter profils, noklikšķinot uz \"Pierakstīties ar Twitter\"' ", + "ERROR_MESSAGE": "Radās kļūda, veidojot savienojumu ar Twitter. Lūdzu, mēģiniet vēlreiz", + "TWEETS": { + "ENABLE": "Izveidot sarunas no minētajiem Tvītiem" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Tīmekļa vietnes kanāls", + "DESC": "Izveidot savai tīmekļa vietnei kanālu un sākt atbalstīt savus klientus, izmantojot mūsu tīmekļu vietnes logrīku.", + "LOADING_MESSAGE": "Tiek Veikta Tīmekļa Vietnes Atbalsta Kanāla Izveide", + "CHANNEL_AVATAR": { + "LABEL": "Kanāla Avatārs" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "Lūdzu ievadiet Webhook URL", + "ERROR": "Lūdzu, ievadiet derīgu URL" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Tīmekļa Vietnes Domēns", + "PLACEHOLDER": "Ievadiet savas tīmekļa vietnes domēnu (piemēram: acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Laipni lūdzam Virsraksts", + "PLACEHOLDER": "Sveicināti !" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Laipni lūdzam Teksts", + "PLACEHOLDER": "Sazināties ar mums ir vienkārši. Vaicājiet mums jebko, vai dalieties ar savām atsauksmēm." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Kanāla sveiciena paziņojums", + "PLACEHOLDER": "Acme Inc parasti atbild dažu stundu laikā." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Iespējot kanāla sveicienu", + "HELP_TEXT": "Automātiski nosūtīt sveiciena paziņojumu, kad tiek izveidota jauna saruna.", + "ENABLED": "Iespējots", + "DISABLED": "Atspējots" + }, + "REPLY_TIME": { + "TITLE": "Iestatīt Atbildes laiku", + "IN_A_FEW_MINUTES": "Dažās minutēs", + "IN_A_FEW_HOURS": "Dažās stundās", + "IN_A_DAY": "Dienas laikā", + "HELP_TEXT": "Šis atbildes laiks tiks parādīts tiešsaistes tērzēšanas logrīkā" + }, + "WIDGET_COLOR": { + "LABEL": "Logrīka Krāsa", + "PLACEHOLDER": "Atjaunināt logrīkā izmantoto logrīka krāsu" + }, + "SUBMIT_BUTTON": "Izveidot iesūtni", + "API": { + "ERROR_MESSAGE": "Mēs nevarējām izveidot tīmekļa vietnes kanālu. Lūdzu, mēģiniet vēlreiz" + } + }, + "TWILIO": { + "TITLE": "Twilio SMS/WhatsApp Kanāls", + "DESC": "Integrēt Twilio un sākt atbalstīt savus klientus, izmantojot SMS vai WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "Konta SID", + "PLACEHOLDER": "Lūdzu, ievadiet sava Twilio konta SID", + "ERROR": "Šis lauks ir nepieciešams" + }, + "API_KEY": { + "USE_API_KEY": "Izmantot API Atslēgas Autentifikāciju", + "LABEL": "API Atslēgas SID", + "PLACEHOLDER": "Lūdzu, ievadiet savu API Atslēgas SID", + "ERROR": "Šis lauks ir nepieciešams" + }, + "API_KEY_SECRET": { + "LABEL": "API Atslēgas Noslēpums", + "PLACEHOLDER": "Lūdzu, ievadiet savu API Atslēgas Noslēpumu", + "ERROR": "Šis lauks ir nepieciešams" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "Ziņapmaiņas Pakalpojuma SID", + "PLACEHOLDER": "Lūdzu, ievadiet savu Twilio ziņojumapmaiņas pakalpojuma SID", + "ERROR": "Šis lauks ir nepieciešams", + "USE_MESSAGING_SERVICE": "Izmantot Twilio Ziņojumapmaiņas Pakalpojumu" + }, + "CHANNEL_TYPE": { + "LABEL": "Kanāla Tips", + "ERROR": "Lūdzu, izvēlieties sava Kanāla Tipu" + }, + "AUTH_TOKEN": { + "LABEL": "Auth Token", + "PLACEHOLDER": "Lūdzu, ievadiet savu Twilio Auth Token", + "ERROR": "Šis lauks ir nepieciešams" + }, + "CHANNEL_NAME": { + "LABEL": "Iesūtnes Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet iesūtnes nosaukumu", + "ERROR": "Šis lauks ir nepieciešams" + }, + "PHONE_NUMBER": { + "LABEL": "Telefona numurs", + "PLACEHOLDER": "Lūdzu, ievadiet tālruņa numuru, no kura tiks nosūtīts ziņojums.", + "ERROR": "Lūdzu, norādiet derīgu tālruņa numuru, kas sākas ar zīmi “+” un nesatur atstarpes." + }, + "API_CALLBACK": { + "TITLE": "Atzvanīšanas URL", + "SUBTITLE": "Jums ir jānokonfigurē Twilio pakalpojumā ziņojumu atzvanīšanas URL, izmantojot šeit minēto URL." + }, + "SUBMIT_BUTTON": "Izveidot Twilio Kanālu", + "API": { + "ERROR_MESSAGE": "Mēs nevarējām autentificēt Twilio akreditācijas datus. Lūdzu, mēģiniet vēlreiz" + } + }, + "SMS": { + "TITLE": "SMS Kanāls", + "DESC": "Sāciet atbalstīt savus klientus, izmantojot SMS.", + "PROVIDERS": { + "LABEL": "API Pakalpojumu Sniedzējs", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandwidth" + }, + "API": { + "ERROR_MESSAGE": "Mēs nevarējām saglabāt SMS kanālu" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "Konta ID", + "PLACEHOLDER": "Lūdzu, ievadiet savu Bandwidth konta ID", + "ERROR": "Šis lauks ir nepieciešams" + }, + "API_KEY": { + "LABEL": "API atslēga", + "PLACEHOLDER": "Lūdzu ievadiet Bandwidth API Key", + "ERROR": "Šis lauks ir nepieciešams" + }, + "API_SECRET": { + "LABEL": "API Secret", + "PLACEHOLDER": "Lūdzu ievadiet Bandwidth API Secret", + "ERROR": "Šis lauks ir nepieciešams" + }, + "APPLICATION_ID": { + "LABEL": "Lietojumprogrammas ID", + "PLACEHOLDER": "Lūdzu, ievadiet savu Bandwidth lietojumprogrammas ID", + "ERROR": "Šis lauks ir nepieciešams" + }, + "INBOX_NAME": { + "LABEL": "Iesūtnes Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet iesūtnes nosaukumu", + "ERROR": "Šis lauks ir nepieciešams" + }, + "PHONE_NUMBER": { + "LABEL": "Tālruņa numurs", + "PLACEHOLDER": "Lūdzu, ievadiet tālruņa numuru, no kura tiks nosūtīts ziņojums.", + "ERROR": "Lūdzu, norādiet derīgu tālruņa numuru, kas sākas ar zīmi “+” un nesatur atstarpes." + }, + "SUBMIT_BUTTON": "Izveidot Bandwidth kanālu", + "API": { + "ERROR_MESSAGE": "Mēs nevarējām autentificēt Bandwidth akreditācijas datus. Lūdzu, mēģiniet vēlreiz" + }, + "API_CALLBACK": { + "TITLE": "Atzvanīšanas URL", + "SUBTITLE": "Jums ir jānokonfigurē Bandwidth ziņojumu atzvanīšanas URL, izmantojot šeit minēto URL." + } + } + }, + "WHATSAPP": { + "TITLE": "WhatsApp Kanāls", + "DESC": "Sāciet atbalstīt savus klientus, izmantojot WhatsApp.", + "PROVIDERS": { + "LABEL": "API Pakalpojumu Sniedzējs", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "Iesūtnes Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet iesūtnes nosaukumu", + "ERROR": "Šis lauks ir nepieciešams" + }, + "PHONE_NUMBER": { + "LABEL": "Tālruņa numurs", + "PLACEHOLDER": "Lūdzu, ievadiet tālruņa numuru, no kura tiks nosūtīts ziņojums.", + "ERROR": "Lūdzu, norādiet derīgu tālruņa numuru, kas sākas ar zīmi “+” un nesatur atstarpes." + }, + "PHONE_NUMBER_ID": { + "LABEL": "Tālruņa numura ID", + "PLACEHOLDER": "Lūdzu, ievadiet Tālruņa numura ID, kas iegūts no Facebook izstrādātāja informācijas paneļa.", + "ERROR": "Lūdzu, ievadiet derīgu vērtību." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "Biznesa Konta ID", + "PLACEHOLDER": "Lūdzu, ievadiet Biznesa Konta ID, kas iegūts no Facebook izstrādātāja informācijas paneļa.", + "ERROR": "Lūdzu, ievadiet derīgu vērtību." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook Pārbaudes Token", + "PLACEHOLDER": "Ievadiet verifikācijas token, ko vēlaties izmantot priekš Facebook webhook.", + "ERROR": "Lūdzu, ievadiet derīgu vērtību." + }, + "API_KEY": { + "LABEL": "API atslēga", + "SUBTITLE": "Nokonfigurējiet WhatsApp API atslēgu.", + "PLACEHOLDER": "API atslēga", + "ERROR": "Lūdzu, ievadiet derīgu vērtību." + }, + "API_CALLBACK": { + "TITLE": "Atzvanīšanas URL", + "SUBTITLE": "Jums Facebook izstrādātāju portālā ir jānokonfigurē webhoot URL un verifikācijas token ar tālāk norādītajām vērtībām.", + "WEBHOOK_URL": "Webhook URL", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook Verifikācijas Token" + }, + "SUBMIT_BUTTON": "Izveidot WhatsApp kanālu", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "Mēs nevarējām saglabāt WhatsApp kanālu" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "Telefona numurs", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "Konta SID", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "Auth Token", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "API Atslēgas SID", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Atslēgas Noslēpums", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "API Kanāls", + "DESC": "Integrēt ar API kanālu un sākt atbalstīt savus klientus.", + "CHANNEL_NAME": { + "LABEL": "Kanāla Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet kanāla nosaukumu", + "ERROR": "Šis lauks ir nepieciešams" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "SUBTITLE": "Konfigurēt URL, kurā vēlaties saņemt notikumu atzvanus.", + "PLACEHOLDER": "Webhook URL" + }, + "SUBMIT_BUTTON": "Izveidot API kanālu", + "API": { + "ERROR_MESSAGE": "Mēs nevarējām saglabāt API kanālu" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "E-pasta Kanāls", + "DESC": "Integrēt sava e-pasta iesūtni.", + "CHANNEL_NAME": { + "LABEL": "Kanāla Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet kanāla nosaukumu", + "ERROR": "Šis lauks ir nepieciešams" + }, + "EMAIL": { + "LABEL": "E-pasts", + "SUBTITLE": "Norādiet e-pasta adresi, uz kuru Jūsu klienti sūta atbalsta pieprasījumus.", + "PLACEHOLDER": "E-pasts" + }, + "SUBMIT_BUTTON": "Izveidot E-pasta Kanālu", + "API": { + "ERROR_MESSAGE": "Mēs nevarējām saglabāt e-pasta kanālu" + }, + "FINISH_MESSAGE": "Sākt pārsūtīt savus e-pasta ziņojumus uz tālāk norādīto e-pasta adresi.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "Noklikšķiniet šeit", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "LINE Kanāls", + "DESC": "Integrēt ar LINE kanālu un sākt atbalstīt savus klientus.", + "CHANNEL_NAME": { + "LABEL": "Kanāla Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet kanāla nosaukumu", + "ERROR": "Šis lauks ir nepieciešams" + }, + "LINE_CHANNEL_ID": { + "LABEL": "LINE Kanāla ID", + "PLACEHOLDER": "LINE Kanāla ID" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "LINE Kanāla Secret", + "PLACEHOLDER": "LINE Kanāla Secret" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "LINE Kanāla Token", + "PLACEHOLDER": "LINE Kanāla Token" + }, + "SUBMIT_BUTTON": "Izveidot LINE Kanālu", + "API": { + "ERROR_MESSAGE": "Mēs nevarējām saglabāt LINE kanālu" + }, + "API_CALLBACK": { + "TITLE": "Atzvanīšanas URL", + "SUBTITLE": "Jums LINE lietojumprogrammā ir jānokonfigurē webhook URL, ar šeit minēto URL." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Telegram Kanāls", + "DESC": "Integrēt ar Telegram kanālu un sākt atbalstīt savus klientus.", + "BOT_TOKEN": { + "LABEL": "Bot Token", + "SUBTITLE": "Konfigurēt bot token, ko ieguvāt no Telegram BotFather.", + "PLACEHOLDER": "Bot Token" + }, + "SUBMIT_BUTTON": "Izveidot Telegram Kanālu", + "API": { + "ERROR_MESSAGE": "Mēs nevarējām saglabāt Telegram kanālu" + } + }, + "AUTH": { + "TITLE": "Izvēlieties kanālu", + "DESC": "Chatwoot atbalsta tiešraides tērzēšanas logrīkus, Facebook Messenger, Twitter profilus, WhatsApp, e-pastus kā kanālus. Ja vēlaties izveidot pielāgotu kanālu, varat to izveidot, izmantojot API kanālu. Lai sāktu, izvēlieties vienu no tālāk norādītajiem kanāliem.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Gatavs!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Tīmekļa vietne", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "E-pasts", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Aģenti", + "DESC": "Šeit Jūs varat pievienot aģentus, lai pārvaldītu savu jaunizveidoto iesūtni. Tikai šiem atlasītajiem aģentiem būs piekļuve Jūsu iesūtnei. Aģenti, kas neietilpst šajā iesūtnē, nevarēs redzēt ziņojumus vai atbildēt uz ziņojumiem šajā iesūtnē, kad būs pierakstījušies sistēmā.Webhook
Webhook ir HTTP atzvani, kurus var definēt katram kontam. Tos aktivizē tādi notikumi kā ziņojumu izveide pakalpojumā Chatwoot. Šim kontam varat izveidot vairāk nekā vienu webhook.
Lai izveidotu webhook, noklikšķiniet uz Pievienot jaunu webhook pogas. Jūs varat arī noņemt jebkuru esošo webhook, noklikšķinot uz pogas Dzēst.
Informācijas Paneļa Lietotnes
Informācijas paneļa lietotnes ļauj organizācijām iegult lietojumprogrammu Chatwoot informācijas panelī, lai nodrošinātu kontekstu klientu atbalsta aģentiem. Šī funkcija ļauj Jums izveidot lietojumprogrammu neatkarīgi un iegult to informācijas panelī, lai sniegtu informāciju par lietotāju, viņu pasūtījumiem vai viņu iepriekšējo maksājumu vēsturi.
Kad iegulsiet lietojumprogrammu, izmantojot Chatwoot informācijas paneli, Jūsu lietojumprogramma iegūs sarunas un kontaktpersonas kontekstu kā loga notikumu. Ieviesiet savā lapā ziņojuma notikuma uztvērēju, lai saņemtu kontekstu.
Lai pievienotu jaunu informācijas paneļa lietotni, noklikšķiniet uz pogas 'Pievienot jaunu informācijas paneļa lietotni'.
", + "DESCRIPTION": "Informācijas paneļa lietotnes ļauj organizācijām iegult lietojumprogrammu informācijas panelī, lai nodrošinātu kontekstu klientu atbalsta aģentiem. Šī funkcija ļauj Jums neatkarīgi izveidot lietojumprogrammu un iegult to, lai sniegtu informāciju par lietotāju, viņu pasūtījumiem vai iepriekšējo maksājumu vēsturi.", + "LEARN_MORE": "Uzzināt vairāk par Informācijas paneļa Lietotnēm", + "LIST": { + "404": "Šajā kontā vēl nav nokonfigurēta neviena informācijas paneļa lietotne", + "LOADING": "Notiek informācijas paneļa lietotņu iegūšana...", + "TABLE_HEADER": { + "NAME": "Nosaukums", + "ENDPOINT": "Endpoint" + }, + "EDIT_TOOLTIP": "Rediģēt lietotni", + "DELETE_TOOLTIP": "Dzēst lietotni" + }, + "FORM": { + "TITLE_LABEL": "Nosaukums", + "TITLE_PLACEHOLDER": "Ievadiet informācijas paneļa lietotnes nosaukumu", + "TITLE_ERROR": "Informācijas paneļa lietotnei ir jānorāda nosaukums", + "URL_LABEL": "Endpoint", + "URL_PLACEHOLDER": "Ievadiet endpoint URL, kurā tiek mitināta jūsu lietotne", + "URL_ERROR": "Nepieciešams derīgs URL" + }, + "CREATE": { + "HEADER": "Pievienot jaunu informācijas paneļa lietotni", + "FORM_SUBMIT": "Iesniegt", + "FORM_CANCEL": "Atcelt", + "API_SUCCESS": "Informācijas paneļa lietotne ir veiksmīgi nokonfigurēta", + "API_ERROR": "Mēs nevarējām izveidot lietotni. Lūdzu, vēlāk pamēģiniet vēlreiz" + }, + "UPDATE": { + "HEADER": "Rediģēt informācijas paneļa lietotni", + "FORM_SUBMIT": "Atjaunināt", + "FORM_CANCEL": "Atcelt", + "API_SUCCESS": "Informācijas paneļa lietotne ir veiksmīgi atjaunināta", + "API_ERROR": "Mēs nevarējām atjaunināt lietotni. Lūdzu, vēlāk pamēģiniet vēlreiz" + }, + "DELETE": { + "CONFIRM_YES": "Jā, dzēst", + "CONFIRM_NO": "Nē, paturēt", + "TITLE": "Apstipriniet dzēšanu", + "MESSAGE": "Vai tiešām vēlaties izdzēst lietotni - {appName}?", + "API_SUCCESS": "Informācijas paneļa lietotne ir veiksmīgi izdzēsta", + "API_ERROR": "Mēs nevarējām izdzēst lietotni. Lūdzu, vēlāk pamēģiniet vēlreiz" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Izveidot/Saistīt lineāru problēmu", + "LOADING": "Notiek lineāru problēmu iegūšana...", + "LOADING_ERROR": "Lineāru problēmu iegūšanas laikā radās kļūda. Lūdzu, mēģiniet vēlreiz", + "CREATE": "Izveidot", + "LINK": { + "SEARCH": "Meklēt problēmas", + "SELECT": "Izvēlieties problēmu", + "TITLE": "Saite", + "EMPTY_LIST": "Netika atrasta neviena lineāra problēma", + "LOADING": "Notiek ielāde", + "ERROR": "Lineāru problēmu iegūšanas laikā radās kļūda. Lūdzu, mēģiniet vēlreiz", + "LINK_SUCCESS": "Problēma ir veiksmīgi sasaistīta", + "LINK_ERROR": "Sasaistot problēmu radās kļūda. Lūdzu, mēģiniet vēlreiz", + "LINK_TITLE": "Saruna (#{conversationId}) ar {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Izveidot/saistīt lineāru problēmu", + "DESCRIPTION": "Izveidot lineārus jautājumus no sarunām, vai saistīt esošos netraucētai izsekošanai.", + "FORM": { + "TITLE": { + "LABEL": "Nosaukums", + "PLACEHOLDER": "Ievadiet virsrakstu", + "REQUIRED_ERROR": "Nepieciešams nosaukums" + }, + "DESCRIPTION": { + "LABEL": "Apraksts", + "PLACEHOLDER": "Ievadiet aprakstu" + }, + "TEAM": { + "LABEL": "Komanda", + "PLACEHOLDER": "Izvēlieties komandu", + "SEARCH": "Meklēt komandu", + "REQUIRED_ERROR": "Nepieciešama komanda" + }, + "ASSIGNEE": { + "LABEL": "Uzdevuma saņēmējs", + "PLACEHOLDER": "Izvēlēties pilnvaroto", + "SEARCH": "Meklēt pilnvaroto" + }, + "PRIORITY": { + "LABEL": "Prioritāte", + "PLACEHOLDER": "Izvēlieties prioritāti", + "SEARCH": "Meklēt prioritāti" + }, + "LABEL": { + "LABEL": "Etiķete", + "PLACEHOLDER": "Izvēlēties etiķeti", + "SEARCH": "Meklēt etiķeti" + }, + "STATUS": { + "LABEL": "Statuss", + "PLACEHOLDER": "Izvēlēties statusu", + "SEARCH": "Meklēt statusu" + }, + "PROJECT": { + "LABEL": "Projekts", + "PLACEHOLDER": "Izvēlēties projektu", + "SEARCH": "Meklēt projektu" + } + }, + "CREATE": "Izveidot", + "CANCEL": "Atcelt", + "CREATE_SUCCESS": "Problēma ir veiksmīgi izveidota", + "CREATE_ERROR": "Veidojot problēmu radās kļūda. Lūdzu, mēģiniet vēlreiz", + "LOADING_TEAM_ERROR": "Ienesot komandas radās kļūda. Lūdzu, mēģiniet vēlreiz", + "LOADING_TEAM_ENTITIES_ERROR": "Ienesot komandas entītijas radās kļūda. Lūdzu, mēģiniet vēlreiz" + }, + "ISSUE": { + "STATUS": "Statuss", + "PRIORITY": "Prioritāte", + "ASSIGNEE": "Uzdevuma saņēmējs", + "LABELS": "Etiķetes", + "CREATED_AT": "Izveidots {createdAt}" + }, + "UNLINK": { + "TITLE": "Atsaistīt", + "SUCCESS": "Problēma ir veiksmīgi atsaistīta", + "ERROR": "Atsaistot jautājumu radās kļūda. Lūdzu, mēģiniet vēlreiz" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Vai tiešām vēlaties dzēst integrāciju?", + "MESSAGE": "Vai tiešām vēlaties dzēst integrāciju?", + "CONFIRM": "Jā, dzēst", + "CANCEL": "Atcelt" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Jā, dzēst", + "CANCEL": "Atcelt" + } + } + }, + "CAPTAIN": { + "NAME": "Kapteinis", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Asistenti", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Kopilots", + "TRY_THESE_PROMPTS": "Pamēģiniet", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "Sūtīt ziņojumu...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Kapteinis domā", + "YOU": "Jūs", + "USE": "Izmantot šo", + "RESET": "Atiestatīt", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Izvēlēties Asistentu", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "Jūs", + "ASSISTANT": "Asistents", + "MESSAGE_PLACEHOLDER": "Rakstiet savu ziņojumu...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "Modernizējiet abonementu, lai izmantotu Captain AI", + "AVAILABLE_ON": "Captain nav pieejams bezmaksas abonementā.", + "UPGRADE_PROMPT": "Modernizējiet savu abonementu, lai iegūtu piekļuvi viruālajiem asistentiem un copilot.", + "UPGRADE_NOW": "Pāriet uz maksas versiju tagad", + "CANCEL_ANYTIME": "Jūs varat jebkurā laikā mainīt vai atcelt savu versiju" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Modernizējiet savu abonementu, lai iegūtu piekļuvi viruālajiem asistentiem un copilot.", + "ASK_ADMIN": "Lai pārietu uz maksas versiju, lūdzu sazinieties ar savu administratoru." + }, + "BANNER": { + "RESPONSES": "Jūs esat izmantojis vairāk kā 80% no sava atbilžu ierobežojuma. Lai turpinātu izmantot Captain AI, lūdzu, atjauniniet abonementu.", + "DOCUMENTS": "Sasniegts dokumentu limits. Atjauniniet abonementu, lai turpinātu izmantot Captain AI." + }, + "FORM": { + "CANCEL": "Atcelt", + "CREATE": "Izveidot", + "EDIT": "Atjaunināt" + }, + "ASSISTANTS": { + "HEADER": "Asistenti", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Izveidot jaunu asistentu", + "DELETE": { + "TITLE": "Vai tiešām vēlaties izdzēst asistentu?", + "DESCRIPTION": "Šī darbība ir pastāvīga. Dzēšot šo asistentu, tas tiks noņemts no visām pievienotajām iesūtnēm un neatgriezeniski dzēstas visas ģenerētās zināšanas.", + "CONFIRM": "Jā, dzēst", + "SUCCESS_MESSAGE": "Asistents ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Dzēšot asistentu radās kļūda. Lūdzu, mēģiniet vēlreiz." + }, + "FORM_DESCRIPTION": "Aizpildiet anketu, lai nosauktu savu asistentu, norādītu tā mērķi un produktu, ko tas atbalstīs.", + "CREATE": { + "TITLE": "Izveidot asistentu", + "SUCCESS_MESSAGE": "Asistents ir veiksmīgi izveidots", + "ERROR_MESSAGE": "Veidojot asistentu radās kļūda. Lūdzu, mēģiniet vēlreiz." + }, + "FORM": { + "UPDATE": "Atjaunināt", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "Īpašības", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "Nosaukums", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "Apraksts", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "Produkta Nosaukums", + "PLACEHOLDER": "Enter product name", + "ERROR": "Nepieciešams produkta nosaukums" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "Īpašības", + "ALLOW_CONVERSATION_FAQS": "Ģenerēt bieži uzdotos jautājumus no atrisinātajām sarunām", + "ALLOW_MEMORIES": "Pārtvert galvenās nianses kā atmiņas no klientu mijiedarbībām.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Atjaunināt asistentu", + "SUCCESS_MESSAGE": "Asistents ir veiksmīgi atjaunināts", + "ERROR_MESSAGE": "Atjauninot asistentu radās kļūda. Lūdzu, mēģiniet vēlreiz.", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "Iestatījumi", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Dzēst Asistentu", + "DESCRIPTION": "Šī darbība ir pastāvīga. Dzēšot šo asistentu, tas tiks noņemts no visām pievienotajām iesūtnēm un neatgriezeniski dzēstas visas ģenerētās zināšanas.", + "BUTTON_TEXT": "Dzēst {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Rediģēt Asistentu", + "DELETE_ASSISTANT": "Dzēst Asistentu", + "VIEW_CONNECTED_INBOXES": "Skatīt pievienotās iesūtnes" + }, + "EMPTY_STATE": { + "TITLE": "Asistenti nav pieejami", + "SUBTITLE": "Izveidot palīgu, lai sniegtu lietotājiem ātras un precīzas atbildes. Tas var mācīties no Jūsu palīdzības rakstiem un iepriekšējām sarunām.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Dzēst" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "Izveidot", + "CANCEL": "Atcelt", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Meklēt..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Dzēst" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "Izveidot", + "CANCEL": "Atcelt", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Meklēt..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Dzēst" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Nosaukums", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "Apraksts", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "Izveidot", + "CANCEL": "Atcelt" + } + } + }, + "UPDATE": { + "CANCEL": "Atcelt", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Meklēt..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Dokumenti", + "ADD_NEW": "Izveidot jaunu dokumentu", + "RELATED_RESPONSES": { + "TITLE": "Saistītie bieži uzdotie jautājumi", + "DESCRIPTION": "Šie bieži uzdotie jautājumi tiek ģenerēti tieši no dokumenta." + }, + "FORM_DESCRIPTION": "Ievadiet dokumenta URL, lai to pievienotu kā zināšanu avotu, un izvēlieties asistentu, ar kuru to saistīt.", + "CREATE": { + "TITLE": "Pievienot dokumentu", + "SUCCESS_MESSAGE": "Dokuments ir veiksmīgi izveidots", + "ERROR_MESSAGE": "Veidojot dokumentu, radās kļūda. Lūdzu, mēģiniet vēlreiz." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Ievadiet dokumenta URL", + "ERROR": "Lūdzu, norādiet pareizu dokumenta URL" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Vai tiešām vēlaties izdzēst šo dokumentu?", + "DESCRIPTION": "Šī darbība ir pastāvīga. Dzēšot šo dokumentu visas ģenerētās zināšanas tiks neatgriezeniski izdzēstas.", + "CONFIRM": "Jā, dzēst", + "SUCCESS_MESSAGE": "Dokuments ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Dzēšot dokumentu radās kļūda. Lūdzu, mēģiniet vēlreiz." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "Skatīt Saistītās Atbildes", + "DELETE_DOCUMENT": "Dzēst Dokumentu" + }, + "EMPTY_STATE": { + "TITLE": "Dokumenti nav pieejami", + "SUBTITLE": "Jūsu palīgs izmanto dokumentus, lai izveidotu bieži uzdotos jautājumus. Jūs varat importēt dokumentus, lai nodrošinātu kontekstu savam palīgam.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Jā, dzēst", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "Apraksts", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "Nav", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "API atslēga" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "Parole", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Tips" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Numurs", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Nepieciešams" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "Bieži uzdotie jautājumi", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Izveidot jaunu sarakstu ar bieži uzdotiem jautājumiem", + "DOCUMENTABLE": { + "CONVERSATION": "Saruna #{id}" + }, + "SELECTED": "Atlasīti {count}", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Apstiprināt", + "BULK_DELETE_BUTTON": "Dzēst", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "Bieži uzdotie jautājumi ir veiksmīgi apstiprināti", + "ERROR_MESSAGE": "Apstiprinot bieži uzdotos jautājumus radās kļūda. Lūdzu, mēģiniet vēlreiz." + }, + "BULK_DELETE": { + "TITLE": "Vai dzēst bieži uzdotos jautājumus?", + "DESCRIPTION": "Vai tiešām vēlaties dzēst atlasītos bieži uzdotos jautājumus? Šo darbību nevar atsaukt.", + "CONFIRM": "Jā, dzēst visu", + "SUCCESS_MESSAGE": "Bieži uzdotie jautājumi ir veiksmīgi izdzēsti", + "ERROR_MESSAGE": "Dzēšot bieži uzdotos jautājumus radās kļūda. Lūdzu, mēģiniet vēlreiz." + }, + "DELETE": { + "TITLE": "Vai tiešām vēlaties izdzēst šos bieži uzdotos jautājumus?", + "DESCRIPTION": "", + "CONFIRM": "Jā, dzēst", + "SUCCESS_MESSAGE": "Bieži uzdotie jautājumi ir veiksmīgi izdzēsti", + "ERROR_MESSAGE": "Dzēšot bieži uzdotos jautājumus radās kļūda. Lūdzu, mēģiniet vēlreiz." + }, + "FILTER": { + "ASSISTANT": "Asistents: {selected}", + "STATUS": "Statuss: {selected}", + "ALL_ASSISTANTS": "Visi" + }, + "STATUS": { + "TITLE": "Statuss", + "PENDING": "Gaida", + "APPROVED": "Apstiprināts", + "ALL": "Visi" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Pievienot jautājumu un tā atbildi zināšanu bāzei, kā arī izvēlēties asistentu, ar kuru tas būs saistīts.", + "CREATE": { + "TITLE": "Pievienot bieži uzdotos jautājumus", + "SUCCESS_MESSAGE": "Atbilde ir veiksmīgi pievienota.", + "ERROR_MESSAGE": "Pievienojot atbildi radās kļūda. Lūdzu, mēģiniet vēlreiz." + }, + "FORM": { + "QUESTION": { + "LABEL": "Jautājums", + "PLACEHOLDER": "Ievadiet jautājumu šeit", + "ERROR": "Lūdzu, ievadiet derīgu jautājumu." + }, + "ANSWER": { + "LABEL": "Atbilde", + "PLACEHOLDER": "Ievadiet atbildi šeit", + "ERROR": "Lūdzu, ievadiet derīgu atbildi." + } + }, + "EDIT": { + "TITLE": "Atjaunināt bieži uzdotos jautājumus", + "SUCCESS_MESSAGE": "Bieži uzdotie jautājumi ir veiksmīgi atjaunināti", + "ERROR_MESSAGE": "Atjauninot bieži uzdotos jautājumus, radās kļūda. Lūdzu, mēģiniet vēlreiz", + "APPROVE_SUCCESS_MESSAGE": "Bieži uzdotie jautājumi tika atzīmēti kā apstiprināti" + }, + "OPTIONS": { + "APPROVE": "Apstiprināt", + "EDIT_RESPONSE": "Rediģēt", + "DELETE_RESPONSE": "Dzēst" + }, + "EMPTY_STATE": { + "TITLE": "Bieži uzdoto jautājumu saraksti nav atrasti", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "Bieži uzdotie jautājumi palīdz Jūsu asistentam sniegt ātras un precīzas atbildes uz Jūsu klientu jautājumiem. Tos var ģenerēt automātiski no jūsu satura vai pievienot manuāli.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Pievienotās Iesūtnes", + "ADD_NEW": "Pievienot jaunu iesūtni", + "OPTIONS": { + "DISCONNECT": "Atvienot" + }, + "DELETE": { + "TITLE": "Vai tiešām vēlaties atvienot iesūtni?", + "DESCRIPTION": "", + "CONFIRM": "Jā, dzēst", + "SUCCESS_MESSAGE": "Iesūtne tika veiksmīgi atvienota.", + "ERROR_MESSAGE": "Atvienojot iesūtni radās kļūda. Lūdzu, mēģiniet vēlreiz." + }, + "FORM_DESCRIPTION": "Izvēlieties iesūtni, lai izveidotu savienojumu ar asistentu.", + "CREATE": { + "TITLE": "Pievienot Iesūtni", + "SUCCESS_MESSAGE": "Iesūtne tika veiksmīgi pievienota.", + "ERROR_MESSAGE": "Pievienojot iesūtni radās kļūda. Lūdzu, mēģiniet vēlreiz." + }, + "FORM": { + "INBOX": { + "LABEL": "Iesūtne", + "PLACEHOLDER": "Izvēlieties iesūtni, lai aktivētu asistentu.", + "ERROR": "Nepieciešams izvēlēties iesūtni." + } + }, + "EMPTY_STATE": { + "TITLE": "Nav Pievienotu Iesūtņu", + "SUBTITLE": "Iesūtnes pievienošana ļauj asistentam apstrādāt Jūsu klientu sākotnējos jautājumus, pirms tos pārsūtīt Jums." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/lv/labelsMgmt.json new file mode 100644 index 0000000..c520ba0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Etiķetes", + "HEADER_BTN_TXT": "Pievienot etiķeti", + "LOADING": "Notiek etiķešu iegūšana", + "DESCRIPTION": "Etiķetes palīdz kategorizēt sarunas, interesentus un noteikt to prioritātes. Etiķeti, sarunai vai kontaktpersonai, varat piešķirt Izmantojot sānu paneli.", + "LEARN_MORE": "Uzzināt vairāk par etiķetēm", + "SEARCH_404": "Šim vaicājumam nav atbilstošu vienumu", + "LIST": { + "404": "Šajā kontā nav izveidotas etiķetes.", + "TITLE": "Pārvaldīt Etiķetes", + "DESC": "Etiķetes ļauj grupēt sarunas kopā.", + "TABLE_HEADER": { + "NAME": "Nosaukums", + "DESCRIPTION": "Apraksts", + "COLOR": "Krāsa" + } + }, + "FORM": { + "NAME": { + "LABEL": "Etiķetes Nosaukums", + "PLACEHOLDER": "Etiķetes nosaukums", + "REQUIRED_ERROR": "Nepieciešams etiķetes nosaukums", + "MINIMUM_LENGTH_ERROR": "Nepieciešamais minimālais garums 2 simboli", + "VALID_ERROR": "Ir atļauti tikai Alfabēti burti, Cipari, Defise un Pasvītra" + }, + "DESCRIPTION": { + "LABEL": "Apraksts", + "PLACEHOLDER": "Etiķetes Apraksts" + }, + "COLOR": { + "LABEL": "Krāsa" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Rādīt etiķeti sānjoslā" + }, + "EDIT": "Rediģēt", + "CREATE": "Izveidot", + "DELETE": "Dzēst", + "CANCEL": "Atcelt" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Pievienot sarunai etiķeti", + "MULTIPLE_SUGGESTION": "Izvēlēties šo etiķeti", + "DESELECT": "Noņemt etiķeti", + "DISMISS": "Noraidīt ieteikumu" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Atcelt", + "ADD_SELECTED_LABELS": "Pievienot izvēlētās etiķetes", + "ADD_SELECTED_LABEL": "Pievienot izvēlēto etiķeti", + "ADD_ALL_LABELS": "Pievienot visas etiķetes", + "SUGGESTED_LABELS": "Ieteiktās etiķetes" + }, + "ADD": { + "TITLE": "Pievienot etiķeti", + "DESC": "Etiķetes ļauj grupēt sarunas kopā.", + "API": { + "SUCCESS_MESSAGE": "Etiķete ir veiksmīgi pievienota", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" + } + }, + "EDIT": { + "TITLE": "Rediģēt etiķeti", + "API": { + "SUCCESS_MESSAGE": "Etiķete ir veiksmīgi atjaunināta", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" + } + }, + "DELETE": { + "BUTTON_TEXT": "Dzēst", + "API": { + "SUCCESS_MESSAGE": "Etiķete ir veiksmīgi izdzēsta", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" + }, + "CONFIRM": { + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai vēlaties izdzēst ", + "YES": "Jā, Dzēst ", + "NO": "Nē, Paturēt " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/login.json b/app/javascript/dashboard/i18n/locale/lv/login.json new file mode 100644 index 0000000..12c87ed --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Login to Chatwoot", + "EMAIL": { + "LABEL": "E-pasts", + "PLACEHOLDER": "piemers{'@'}firmasnosaukums.com", + "ERROR": "Lūdzu, ievadiet derīgu e-pasta adresi" + }, + "PASSWORD": { + "LABEL": "Parole", + "PLACEHOLDER": "Parole" + }, + "API": { + "SUCCESS_MESSAGE": "Pieteikšanās veiksmīga", + "ERROR_MESSAGE": "Nevarēja izveidot savienojumu ar Woot serveri. Lūdzu mēģiniet vēlreiz.", + "UNAUTH": "Lietotājvārds vai parole ir nepareiza. Lūdzu mēģiniet vēlreiz." + }, + "OAUTH": { + "GOOGLE_LOGIN": "Pieslēgties, izmantojot Google", + "BUSINESS_ACCOUNTS_ONLY": "Lai pieslēgtos, lūdzu, izmantojiet sava uzņēmuma e-pasta adresi", + "NO_ACCOUNT_FOUND": "Mēs nevarējām atrast Jūsu e-pasta adreses kontu." + }, + "FORGOT_PASSWORD": "Aizmirsāt savu paroli?", + "CREATE_NEW_ACCOUNT": "Izveidot jaunu kontu", + "SUBMIT": "Pierakstīties", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/macros.json b/app/javascript/dashboard/i18n/locale/lv/macros.json new file mode 100644 index 0000000..29ecd5d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Macros", + "DESCRIPTION": "Makro ir saglabātu darbību kopa, kas palīdz klientu apkalpošanas aģentiem viegli veikt uzdevumus. Aģenti var definēt darbību kopu, piemēram, sarunas marķēšanu ar etiķeti, sarunas transkripta nosūtīšanu uz e-pastu, pielāgota atribūta atjaunināšanu utt., un viņi var veikt šīs darbības ar vienu klikšķi.", + "LEARN_MORE": "Uzzināt vairāk par makro", + "HEADER_BTN_TXT": "Pievienot jaunu makro", + "HEADER_BTN_TXT_SAVE": "Saglabāt makro", + "LOADING": "Notiek makro iegūšana", + "ERROR": "Radās kļūda. Lūdzu, mēģiniet vēlreiz", + "ORDER_INFO": "Makro darbosies tādā secībā, kādā Jūs pievienosit savas darbības. Jūs varat tos pārkārtot, velkot tos aiz roktura kas atrodas blakus katram mezglam.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Makro nosaukums", + "PLACEHOLDER": "Ievadiet sava makro nosaukumu", + "ERROR": "Lai izveidotu makro, ir nepieciešams nosaukums" + }, + "ACTIONS": { + "LABEL": "Darbības" + } + }, + "API": { + "SUCCESS_MESSAGE": "Makro ir veiksmīgi pievienots", + "ERROR_MESSAGE": "Nevar izveidot makro. Lūdzu, vēlāk mēģiniet vēlreiz" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nosaukums", + "CREATED BY": "Izveidoja", + "LAST_UPDATED_BY": "Pēdējo reizi atjaunināja", + "VISIBILITY": "Redzamība" + }, + "404": "Nav atrasts neviens makro" + }, + "DELETE": { + "TOOLTIP": "Dzēst makro", + "CONFIRM": { + "MESSAGE": "Vai vēlaties izdzēst ", + "YES": "Jā, Dzēst", + "NO": "Nē" + }, + "API": { + "SUCCESS_MESSAGE": "Makro ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Dzēšot makro radās kļūda. Lūdzu, vēlāk mēģiniet vēlreiz" + } + }, + "EDIT": { + "TOOLTIP": "Rediģēt makro", + "API": { + "SUCCESS_MESSAGE": "Makro ir veiksmīgi atjaunināts", + "ERROR_MESSAGE": "Nevarēja atjaunināt makro. Lūdzu, vēlāk mēģiniet vēlreiz" + } + }, + "EDITOR": { + "START_FLOW": "Sākt Plūsmu", + "END_FLOW": "Beigt Plūsmu", + "LOADING": "Notiek makro iegūšana", + "ADD_BTN_TOOLTIP": "Pievienot jaunu darbību", + "DELETE_BTN_TOOLTIP": "Dzēst Darbību", + "VISIBILITY": { + "LABEL": "Makro Redzamība", + "GLOBAL": { + "LABEL": "Publisks", + "DESCRIPTION": "Šis makro ir publiski pieejams visiem šī konta aģentiem." + }, + "PERSONAL": { + "LABEL": "Privāts", + "DESCRIPTION": "Šis makro būs privāts Jums un nebūs pieejams citiem." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Izpildīt", + "PREVIEW": "Priekšskatīt Makro", + "EXECUTED_SUCCESSFULLY": "Makro ir veiksmīgi izpildīts" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Nepieciešama atribūta atslēga", + "FILTER_OPERATOR_REQUIRED": "Nepieciešams filtra operators", + "VALUE_REQUIRED": "Nepieciešama vērtība", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Vērtībai ir jābūt no 1 līdz 998", + "ACTION_PARAMETERS_REQUIRED": "Nepieciešami darbības parametri", + "ATLEAST_ONE_CONDITION_REQUIRED": "Ir nepieciešams vismaz viens nosacījums", + "ATLEAST_ONE_ACTION_REQUIRED": "Ir nepieciešama vismaz viena darbība" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Piešķirt Komandai", + "ASSIGN_AGENT": "Piešķirt Aģentu", + "ADD_LABEL": "Pievienot Etiķeti", + "REMOVE_LABEL": "Noņemt Etiķeti", + "REMOVE_ASSIGNED_TEAM": "Noņemt Piešķirto Komandu", + "SEND_EMAIL_TRANSCRIPT": "Nosūtīt uz E-pastu Transkriptu", + "MUTE_CONVERSATION": "Izslēgt Sarunu", + "SNOOZE_CONVERSATION": "Atlikt Sarunu", + "RESOLVE_CONVERSATION": "Atrisināt Sarunu", + "SEND_ATTACHMENT": "Sūtīt Pielikumu", + "SEND_MESSAGE": "Nosūtīt Ziņojumu", + "CHANGE_PRIORITY": "Mainīt prioritāti", + "ADD_PRIVATE_NOTE": "Pievienot Privātu Piezīmi", + "SEND_WEBHOOK_EVENT": "Nosūtīt Webhook Notikumu" + }, + "PRIORITY_TYPES": { + "NONE": "Nav", + "LOW": "Zema", + "MEDIUM": "Vidēja", + "HIGH": "Augsta", + "URGENT": "Steidzama" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/mfa.json b/app/javascript/dashboard/i18n/locale/lv/mfa.json new file mode 100644 index 0000000..0bf3f01 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "Iespējots", + "DISABLED": "Atspējots", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Notiek ielāde...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "Kopēt", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "Atcelt", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "Lejupielādēt", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "Parole", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "Atcelt", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "Atcelt", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/report.json b/app/javascript/dashboard/i18n/locale/lv/report.json new file mode 100644 index 0000000..305da81 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Sarunas", + "LOADING_CHART": "Notiek diagrammas datu ielāde...", + "NO_ENOUGH_DATA": "Mēs neesam saņēmuši pietiekami daudz datu punktu, lai izveidotu pārskatu. Lūdzu, vēlāk mēģiniet vēlreiz.", + "DOWNLOAD_AGENT_REPORTS": "Lejupielādēt aģentu pārskatus", + "DATA_FETCHING_FAILED": "Neizdevās izgūt datus. Lūdzu, vēlāk mēģiniet vēlreiz.", + "SUMMARY_FETCHING_FAILED": "Neizdevās izgūt kopsavilkumu. Lūdzu, vēlāk mēģiniet vēlreiz.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Sarunas", + "DESC": "( Kopā )" + }, + "INCOMING_MESSAGES": { + "NAME": "Saņemtās ziņas", + "DESC": "( Kopā )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Nosūtītās ziņas", + "DESC": "( Kopā )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Pirmās Atbildes Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Pirmās Atbildes Laiks ir {metricValue} (pamatojoties uz {conversationCount} sarunām)" + }, + "RESOLUTION_TIME": { + "NAME": "Atrisināšanas Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Atrisināšanas Laiks ir {metricValue} (pamatojoties uz {conversationCount} sarunām)" + }, + "RESOLUTION_COUNT": { + "NAME": "Atrisināšanas Skaits", + "DESC": "( Kopā )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Atrisināšanas Skaits", + "DESC": "( Kopā )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Nodošanas Skaits", + "DESC": "( Kopā )" + }, + "REPLY_TIME": { + "NAME": "Klienta gaidīšanas laiks", + "TOOLTIP_TEXT": "Gaidīšanas laiks ir {metricValue} (pamatojoties uz {conversationCount} atbildēm)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "Pēdējās 7 dienas", + "LAST_14_DAYS": "Pēdējās 14 dienas", + "LAST_30_DAYS": "Pēdējās 30 dienas", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "Pēdējie 3 mēneši", + "LAST_6_MONTHS": "Pēdējie 6 mēneši", + "LAST_YEAR": "Pagājušais gads", + "CUSTOM_DATE_RANGE": "Pielāgots datumu diapazons" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Pielietot", + "PLACEHOLDER": "Izvēlieties datumu diapazonu" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Grupēt Pēc", + "DURATION_FILTER_LABEL": "Ilgums", + "GROUPING_OPTIONS": { + "DAY": "Diena", + "WEEK": "Nedēļa", + "MONTH": "Mēnesis", + "YEAR": "Gads" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Diena" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Diena" + }, + { + "id": 2, + "groupBy": "Nedēļa" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Diena" + }, + { + "id": 2, + "groupBy": "Nedēļa" + }, + { + "id": 3, + "groupBy": "Mēnesis" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 2, + "groupBy": "Nedēļa" + }, + { + "id": 3, + "groupBy": "Mēnesis" + }, + { + "id": 4, + "groupBy": "Mēnesis" + } + ], + "BUSINESS_HOURS": "Darba Laiks", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Notīrīt filtru", + "EMPTY_LIST": "Nav atrasts" + }, + "PAGINATION": { + "RESULTS": "Rāda {start} līdz {end} no {total} rezultātiem", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Aģentu Pārskats", + "DESCRIPTION": "Ērti izsekojiet aģenta darbībai, izmantojot galvenos rādītājus, piemēram, sarunas, atbildes laikus, atrisināšanas laikus un atrisinātos gadījumus. Noklikšķiniet uz aģenta vārda, lai uzzinātu vairāk.", + "LOADING_CHART": "Notiek diagrammas datu ielāde...", + "NO_ENOUGH_DATA": "Mēs neesam saņēmuši pietiekami daudz datu punktu, lai izveidotu pārskatu. Lūdzu, vēlāk mēģiniet vēlreiz.", + "DOWNLOAD_AGENT_REPORTS": "Lejupielādēt aģentu pārskatus", + "FILTER_DROPDOWN_LABEL": "Izvēlieties Aģentu", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Sarunas", + "DESC": "( Kopā )" + }, + "INCOMING_MESSAGES": { + "NAME": "Ienākošie ziņojumi", + "DESC": "( Kopā )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Izejošie ziņojumi", + "DESC": "( Kopā )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Pirmās Atbildes Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Pirmās Atbildes Laiks ir {metricValue} (pamatojoties uz {conversationCount} sarunām)" + }, + "RESOLUTION_TIME": { + "NAME": "Atrisināšanas Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Atrisināšanas Laiks ir {metricValue} (pamatojoties uz {conversationCount} sarunām)" + }, + "RESOLUTION_COUNT": { + "NAME": "Atrisināšanas Skaits", + "DESC": "( Kopā )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Pēdējās 7 dienas" + }, + { + "id": 1, + "name": "Pēdējās 30 dienas" + }, + { + "id": 2, + "name": "Pēdējie 3 mēneši" + }, + { + "id": 3, + "name": "Pēdējie 6 mēneši" + }, + { + "id": 4, + "name": "Pagājušais gads" + }, + { + "id": 5, + "name": "Pielāgots datumu diapazons" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Pielietot", + "PLACEHOLDER": "Izvēlieties datumu diapazonu" + } + }, + "LABEL_REPORTS": { + "HEADER": "Etiķešu Pārskats", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "Notiek diagrammas datu ielāde...", + "NO_ENOUGH_DATA": "Mēs neesam saņēmuši pietiekami daudz datu punktu, lai izveidotu pārskatu. Lūdzu, vēlāk mēģiniet vēlreiz.", + "DOWNLOAD_LABEL_REPORTS": "Lejupielādēt etiķešu pārskatus", + "FILTER_DROPDOWN_LABEL": "Izvēlieties Etiķeti", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Sarunas", + "DESC": "( Kopā )" + }, + "INCOMING_MESSAGES": { + "NAME": "Ienākošie ziņojumi", + "DESC": "( Kopā )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Izejošie ziņojumi", + "DESC": "( Kopā )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Pirmās Atbildes Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Pirmās Atbildes Laiks ir {metricValue} (pamatojoties uz {conversationCount} sarunām)" + }, + "RESOLUTION_TIME": { + "NAME": "Atrisināšanas Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Atrisināšanas Laiks ir {metricValue} (pamatojoties uz {conversationCount} sarunām)" + }, + "RESOLUTION_COUNT": { + "NAME": "Atrisināšanas Skaits", + "DESC": "( Kopā )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Pēdējās 7 dienas" + }, + { + "id": 1, + "name": "Pēdējās 30 dienas" + }, + { + "id": 2, + "name": "Pēdējie 3 mēneši" + }, + { + "id": 3, + "name": "Pēdējie 6 mēneši" + }, + { + "id": 4, + "name": "Pagājušais gads" + }, + { + "id": 5, + "name": "Pielāgots datumu diapazons" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Pielietot", + "PLACEHOLDER": "Izvēlieties datumu diapazonu" + } + }, + "INBOX_REPORTS": { + "HEADER": "Iesūtnes Pārskats", + "DESCRIPTION": "Ātri apskatiet iesūtnes veiktspēju, izmantojot galvenos rādītājus, piemēram, sarunas, atbildes laikus, atrisināšanas laikus un atrisinātos gadījumus. Lai iegūtu plašāku informāciju, noklikšķiniet uz iesūtnes nosaukuma.", + "LOADING_CHART": "Notiek diagrammas datu ielāde...", + "NO_ENOUGH_DATA": "Mēs neesam saņēmuši pietiekami daudz datu punktu, lai izveidotu pārskatu. Lūdzu, vēlāk mēģiniet vēlreiz.", + "DOWNLOAD_INBOX_REPORTS": "Lejupielādēt iesūtnes pārskatus", + "FILTER_DROPDOWN_LABEL": "Izvēlieties Iesūtni", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Sarunas", + "DESC": "( Kopā )" + }, + "INCOMING_MESSAGES": { + "NAME": "Ienākošie ziņojumi", + "DESC": "( Kopā )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Izejošie ziņojumi", + "DESC": "( Kopā )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Pirmās Atbildes Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Pirmās Atbildes Laiks ir {metricValue} (pamatojoties uz {conversationCount} sarunām)" + }, + "RESOLUTION_TIME": { + "NAME": "Atrisināšanas Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Atrisināšanas Laiks ir {metricValue} (pamatojoties uz {conversationCount} sarunām)" + }, + "RESOLUTION_COUNT": { + "NAME": "Atrisināšanas Skaits", + "DESC": "( Kopā )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Pēdējās 7 dienas" + }, + { + "id": 1, + "name": "Pēdējās 30 dienas" + }, + { + "id": 2, + "name": "Pēdējie 3 mēneši" + }, + { + "id": 3, + "name": "Pēdējie 6 mēneši" + }, + { + "id": 4, + "name": "Pagājušais gads" + }, + { + "id": 5, + "name": "Pielāgots datumu diapazons" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Pielietot", + "PLACEHOLDER": "Izvēlieties datumu diapazonu" + } + }, + "TEAM_REPORTS": { + "HEADER": "Komandas Pārskats", + "DESCRIPTION": "Iegūstiet pārskatu par savas komandas veiktspēju, izmantojot būtiskus rādītājus, tostarp sarunas, atbildes laikus, atrisināšanas laikus un atrisinātos gadījumus. Lai iegūtu sīkāku informāciju, noklikšķiniet uz komandas nosaukuma.", + "LOADING_CHART": "Notiek diagrammas datu ielāde...", + "NO_ENOUGH_DATA": "Mēs neesam saņēmuši pietiekami daudz datu punktu, lai izveidotu pārskatu. Lūdzu, vēlāk mēģiniet vēlreiz.", + "DOWNLOAD_TEAM_REPORTS": "Lejupielādēt komandas pārskatus", + "FILTER_DROPDOWN_LABEL": "Izvēlieties Komandu", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Sarunas", + "DESC": "( Kopā )" + }, + "INCOMING_MESSAGES": { + "NAME": "Ienākošie ziņojumi", + "DESC": "( Kopā )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Izejošie ziņojumi", + "DESC": "( Kopā )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Pirmās Atbildes Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Pirmās Atbildes Laiks ir {metricValue} (pamatojoties uz {conversationCount} sarunām)" + }, + "RESOLUTION_TIME": { + "NAME": "Atrisināšanas Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Atrisināšanas Laiks ir {metricValue} (pamatojoties uz {conversationCount} sarunām)" + }, + "RESOLUTION_COUNT": { + "NAME": "Atrisināšanas Skaits", + "DESC": "( Kopā )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Pēdējās 7 dienas" + }, + { + "id": 1, + "name": "Pēdējās 30 dienas" + }, + { + "id": 2, + "name": "Pēdējie 3 mēneši" + }, + { + "id": 3, + "name": "Pēdējie 6 mēneši" + }, + { + "id": 4, + "name": "Pagājušais gads" + }, + { + "id": 5, + "name": "Pielāgots datumu diapazons" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Pielietot", + "PLACEHOLDER": "Izvēlieties datumu diapazonu" + } + }, + "CSAT_REPORTS": { + "HEADER": "CSAT Pārskati", + "NO_RECORDS": "CSAT aptaujas atbildes nav pieejamas.", + "DOWNLOAD": "Lejupielādēt CSAT Pārskatus", + "DOWNLOAD_FAILED": "Neizdevās lejupielādēt CSAT Pārskatus", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Izvēlieties Aģentus" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Kontaktpersona", + "AGENT_NAME": "Piešķirtais aģents", + "RATING": "Vērtējums", + "FEEDBACK_TEXT": "Atsauksmes komentārs" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Kopējais atbilžu skaits", + "TOOLTIP": "Kopējais apkopoto atbilžu skaits" + }, + "SATISFACTION_SCORE": { + "LABEL": "Apmierinātības rādītājs", + "TOOLTIP": "Kopējais pozitīvo atbilžu skaits / Kopējais atbilžu skaits * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Atbildes ātrums", + "TOOLTIP": "Kopējais atbilžu skaits / Kopējais nosūtīto CSAT aptaujas ziņojumu skaits * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Robotu Atskaites", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "Sarunu Skaits", + "TOOLTIP": "Kopējais robota apstrādāto sarunu skaits" + }, + "TOTAL_RESPONSES": { + "LABEL": "Kopējais atbilžu skaits", + "TOOLTIP": "Kopējais robota nosūtīto atbilžu skaits" + }, + "RESOLUTION_RATE": { + "LABEL": "Atrisināšanas Apjoms", + "TOOLTIP": "Kopējais robota atrisināto sarunu skaits / kopējais robota apstrādāto sarunu skaits * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Nodošanas Apjoms", + "TOOLTIP": "Kopējais aģentiem nodoto sarunu skaits / kopējais robota apstrādāto sarunu skaits * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Pārskats", + "LIVE": "Tiešraide", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Atvērt Sarunas", + "LOADING_MESSAGE": "Notiek sarunu metrikas ielāde...", + "OPEN": "Atvērt", + "UNATTENDED": "Bez uzraudzības", + "UNASSIGNED": "Nav piešķirtas", + "PENDING": "Gaida" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Sarunu Satiksme", + "NO_CONVERSATIONS": "Nav sarunu", + "CONVERSATION": "{count} saruna", + "CONVERSATIONS": "{count} sarunas", + "DOWNLOAD_REPORT": "Lejupielādēt atskaiti" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "Nav sarunu", + "CONVERSATION": "{count} saruna", + "CONVERSATIONS": "{count} sarunas", + "DOWNLOAD_REPORT": "Lejupielādēt atskaiti" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Aģentu sarunas", + "LOADING_MESSAGE": "Notiek aģentu metrikas ielāde...", + "NO_AGENTS": "Aģentu sarunas nenotiek", + "TABLE_HEADER": { + "AGENT": "Aģents", + "OPEN": "Atvērt", + "UNATTENDED": "Bez uzraudzības", + "STATUS": "Statuss" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "Visas Komandas", + "HEADER": "Komandu sarunas", + "LOADING_MESSAGE": "Notiek komandu metrikas ielāde...", + "NO_TEAMS": "Dati nav pieejami", + "TABLE_HEADER": { + "TEAM": "Komanda", + "OPEN": "Atvērt", + "UNATTENDED": "Bez uzraudzības", + "STATUS": "Statuss" + } + }, + "AGENT_STATUS": { + "HEADER": "Aģenta statuss", + "ONLINE": "Tiešsaistē", + "BUSY": "Aizņemts", + "OFFLINE": "Bezsaistē" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Svētdiena", + "MONDAY": "Pirmdiena", + "TUESDAY": "Otrdiena", + "WEDNESDAY": "Trešdiena", + "THURSDAY": "Ceturtdiena", + "FRIDAY": "Piektdiena", + "SATURDAY": "Sestdiena" + }, + "SLA_REPORTS": { + "HEADER": "SLA Atskaites", + "NO_RECORDS": "SLA sarunas nav pieejamas.", + "LOADING": "Notiek SLA datu ielāde...", + "DOWNLOAD_SLA_REPORTS": "Lejupielādēt SLA atskaites", + "DOWNLOAD_FAILED": "Neizdevās lejupielādēt SLA atskaites", + "DROPDOWN": { + "ADD_FIlTER": "Pievienot filtru", + "CLEAR_ALL": "Notīrīt visu", + "CLEAR_FILTER": "Notīrīt filtru", + "EMPTY_LIST": "Nav atrasts", + "NO_FILTER": "Nav pieejami filtri", + "SEARCH": "Meklēšanas filtrs", + "INPUT_PLACEHOLDER": { + "SLA": "SLA nosaukums", + "AGENTS": "Aģenta vārds", + "INBOXES": "Iesūtnes nosaukums", + "LABELS": "Etiķetes nosaukums", + "TEAMS": "Komandas nosaukums" + }, + "SLA": "SLA politika", + "INBOXES": "Iesūtne", + "AGENTS": "Aģents", + "LABELS": "Etiķete", + "TEAMS": "Komanda" + }, + "WITH": "ar", + "METRICS": { + "HIT_RATE": { + "LABEL": "Rezultātu Līmenis", + "TOOLTIP": "Izveidoto SLA procentuālā daļa tika veiksmīgi pabeigta" + }, + "NO_OF_MISSES": { + "LABEL": "Nokavēto Skaits", + "TOOLTIP": "Kopējais nokavēto SLA skaits noteiktā periodā" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Sarunu Skaits", + "TOOLTIP": "Kopējais sarunu skaits ar SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Politika", + "CONVERSATION": "Saruna", + "AGENT": "Aģents" + }, + "VIEW_DETAILS": "Skatīt Detaļas" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Iesūtne", + "AGENT": "Aģents", + "TEAM": "Komanda", + "LABEL": "Etiķete", + "AVG_RESOLUTION_TIME": "Vid. Atrisināšanas Laiks", + "AVG_FIRST_RESPONSE_TIME": "Vid. Pirmās Atbildes Laiks", + "AVG_REPLY_TIME": "Vid. Klientu Gaidīšanas Laiks", + "RESOLUTION_COUNT": "Atrisināšanas Skaits", + "CONVERSATIONS": "Sarunu skaits" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/resetPassword.json b/app/javascript/dashboard/i18n/locale/lv/resetPassword.json new file mode 100644 index 0000000..5a736b7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Atiestatīt paroli", + "DESCRIPTION": "Ievadiet e-pasta adresi, kuru izmantojat lai pieteiktos Chatwoot, lai saņemtu paroles atiestatīšanas norādījumus.", + "GO_BACK_TO_LOGIN": "Ja vēlaties atgriezties uz pieteikšanās lapu,", + "EMAIL": { + "LABEL": "E-pasts", + "PLACEHOLDER": "Lūdzu, ievadiet savu e-pastu.", + "ERROR": "Lūdzu, ievadiet derīgu e-pasta adresi." + }, + "API": { + "SUCCESS_MESSAGE": "Paroles atiestatīšanas saite ir nosūtīta uz jūsu e-pastu.", + "ERROR_MESSAGE": "Nevarēja izveidot savienojumu ar Woot serveri. Lūdzu mēģiniet vēlreiz." + }, + "SUBMIT": "Iesniegt" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/search.json b/app/javascript/dashboard/i18n/locale/lv/search.json new file mode 100644 index 0000000..2c52252 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "Kontaktpersonas", + "CONVERSATIONS": "Sarunas", + "MESSAGES": "Ziņojumi", + "ARTICLES": "Raksti" + }, + "SECTION": { + "CONTACTS": "Kontaktpersonas", + "CONVERSATIONS": "Sarunas", + "MESSAGES": "Ziņojumi", + "ARTICLES": "Raksti" + }, + "VIEW_MORE": "Skatīt vairāk", + "LOAD_MORE": "Ielādēt vairāk", + "SEARCHING_DATA": "Meklēšana", + "LOADING_DATA": "Notiek ielāde", + "EMPTY_STATE": "Vaicājumam '{query}' nav atrasts neviens {item} vienums", + "EMPTY_STATE_FULL": "Vaicājumam '{query}' nav atrasts neviens rezultāts", + "PLACEHOLDER_KEYBINDING": "/fokusēt", + "INPUT_PLACEHOLDER": "Ievadiet 3, vai vairāk, rakstzīmes, lai meklētu", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Notīrīt visu", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Lai iegūtu labākus meklēšanas rezultātus, meklējiet pēc sarunas Id, e-pasta, tālruņa numura vai ziņām. ", + "BOT_LABEL": "Bot", + "READ_MORE": "Lasīt vairāk", + "READ_LESS": "Read less", + "WROTE": "rakstīja:", + "FROM": "No", + "EMAIL": "E-pasts", + "EMAIL_SUBJECT": "Tēma", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "izveidots {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "Pēdējās 7 dienas", + "LAST_30_DAYS": "Pēdējās 30 dienas", + "LAST_60_DAYS": "Pēdējās 60 dienas", + "LAST_90_DAYS": "Pēdējās 90 dienas", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "Pielietot", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Notīrīt filtru" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Sūtītājs", + "IN": "Iesūtne", + "AGENTS": "Aģenti", + "CONTACTS": "Kontaktpersonas", + "INBOXES": "Iesūtnes", + "NO_AGENTS": "Aģenti nav atrasti", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/setNewPassword.json b/app/javascript/dashboard/i18n/locale/lv/setNewPassword.json new file mode 100644 index 0000000..1001e99 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Ievadiet jauno paroli", + "PASSWORD": { + "LABEL": "Parole", + "PLACEHOLDER": "Parole", + "ERROR": "Parole ir pārāk īsa." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Apstipriniet paroli", + "PLACEHOLDER": "Apstipriniet Paroli", + "ERROR": "Paroles nesakrīt." + }, + "API": { + "SUCCESS_MESSAGE": "Parole ir veiksmīgi nomainīta.", + "ERROR_MESSAGE": "Nevarēja izveidot savienojumu ar Woot serveri. Lūdzu mēģiniet vēlreiz." + }, + "CAPTCHA": { + "ERROR": "Verifikācijas derīguma termiņš ir beidzies. Lūdzu, vēlreiz atrisiniet captcha." + }, + "SUBMIT": "Iesniegt" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/settings.json b/app/javascript/dashboard/i18n/locale/lv/settings.json new file mode 100644 index 0000000..2e6e77d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Profila Iestatījumi", + "TITLE": "Profila Iestatījumi", + "BTN_TEXT": "Atjaunināt Profilu", + "DELETE_AVATAR": "Dzēst Avatāru", + "AVATAR_DELETE_SUCCESS": "Avatārs ir veiksmīgi izdzēsts", + "AVATAR_DELETE_FAILED": "Avatāra dzēšanas laikā radās kļūda. Lūdzu, mēģiniet vēlreiz", + "UPDATE_SUCCESS": "Jūsu profils ir veiksmīgi atjaunināts", + "PASSWORD_UPDATE_SUCCESS": "Jūsu parole ir veiksmīgi nomainīta", + "AFTER_EMAIL_CHANGED": "Jūsu profils ir veiksmīgi atjaunināts. Lūdzu, atkārtoti pierakstieties, jo Jūsu akreditācijas dati ir mainīti", + "FORM": { + "PICTURE": "Profila Attēls", + "AVATAR": "Profila Attēls", + "ERROR": "Lūdzu, izlabojiet veidlapas kļūdas", + "REMOVE_IMAGE": "Noņemt", + "UPLOAD_IMAGE": "Augšupielādēt attēlu", + "UPDATE_IMAGE": "Atjaunināt attēlu", + "PROFILE_SECTION": { + "TITLE": "Profils", + "NOTE": "Jūsu e -pasta adrese ir jūsu identitāte, un to izmanto lai pierakstītos." + }, + "SEND_MESSAGE": { + "TITLE": "Karstais taustiņš ziņojumu sūtīšanai", + "NOTE": "Jūs varat izvēlēties karsto taustiņu (vai nu Enter, vai Cmd/Ctrl+Enter), pamatojoties uz Jūsu rakstības ieradumiem.", + "UPDATE_SUCCESS": "Jūsu iestatījumi ir veiksmīgi atjaunināti", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Sūtīt ziņojumus, nospiežot taustiņu Enter, nevis noklikšķinot uz pogas Sūtīt." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Sūtīt ziņojumus, nospiežot taustiņu Cmd/Ctrl + Enter, nevis noklikšķinot uz pogas Sūtīt." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interfeiss", + "NOTE": "Pielāgot sava Chatwoot informācijas paneļa izskatu un darbību.", + "FONT_SIZE": { + "TITLE": "Fonta lielums", + "NOTE": "Pielāgot teksta lielumu informācijas panelī, atbilstoši savām vēlmēm.", + "UPDATE_SUCCESS": "Fonta iestatījumi ir veiksmīgi atjaunināti", + "UPDATE_ERROR": "Atjauninot fonta iestatījumus radās kļūda. Lūdzu, mēģiniet vēlreiz", + "OPTIONS": { + "SMALLER": "Mazāks", + "SMALL": "Mazs", + "DEFAULT": "Noklusējums", + "LARGE": "Liels", + "LARGER": "Lielāks", + "EXTRA_LARGE": "Īpaši Liels" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Personīgais ziņojuma paraksts", + "NOTE": "Izveidot unikālu ziņojuma parakstu, kas parādās katra ziņojuma beigās, kuru sūtāt no jebkuras iesūtnes. Varat arī iekļaut attēlu, kas tiek atbalstīts tiešraidē, e-pastā un API iesūtnēs.", + "BTN_TEXT": "Saglabāt ziņojuma parakstu", + "API_ERROR": "Nevarēja saglabāt parakstu! Lūdzu, mēģiniet vēlreiz", + "API_SUCCESS": "Paraksts ir veiksmīgi saglabāts", + "IMAGE_UPLOAD_ERROR": "Nevarēja augšupielādēt attēlu! Lūdzu, mēģiniet vēlreiz", + "IMAGE_UPLOAD_SUCCESS": "Attēls ir veiksmīgi pievienots. Lūdzu, noklikšķiniet uz saglabāt, lai saglabātu parakstu", + "IMAGE_UPLOAD_SIZE_ERROR": "Attēla izmēram ir jābūt mazākam par {size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Ziņojuma Paraksts", + "ERROR": "Ziņojuma Paraksts nevar būt tukšs", + "PLACEHOLDER": "Ievietojiet savu personīgo ziņojumu parakstu šeit." + }, + "PASSWORD_SECTION": { + "TITLE": "Parole", + "NOTE": "Paroles atjaunināšana varētu atiestatīt jūsu pierakstīšanos vairākās ierīcēs.", + "BTN_TEXT": "Mainīt paroli" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "Piekļuves Token", + "NOTE": "Šo token var izmantot, ja veidojat uz API balstītu integrāciju", + "COPY": "Kopēt", + "RESET": "Atiestatīt", + "CONFIRM_RESET": "Are you sure?", + "CONFIRM_HINT": "Click again to confirm", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Brīdinājumi", + "NOTE": "Ieslēgt audio brīdinājumus informācijas panelī, priekš jauniem ziņojumiem un sarunām.", + "PLAY": "Atskaņot skaņu", + "ALERT_TYPES": { + "NONE": "Nav", + "MINE": "Piešķirts", + "ALL": "Visi", + "ASSIGNED": "Man piešķirtās sarunas", + "UNASSIGNED": "Nepiešķirtās sarunas", + "NOTME": "Atvērt citiem piešķirtās sarunas" + }, + "ALERT_COMBINATIONS": { + "NONE": "Jūs neesat izvēlējies nevienu opciju, jūs nesaņemsiet audio brīdinājumus.", + "ASSIGNED": "Jūs saņemsiet brīdinājumus par jums piešķirtajām sarunām.", + "UNASSIGNED": "Jūs saņemsiet brīdinājumus par nepiešķirtām sarunām.", + "NOTME": "Jūs saņemsiet brīdinājumus par sarunām, kas piešķirtas citiem.", + "ASSIGNED+UNASSIGNED": "Jūs saņemsiet brīdinājumus par piešķirtajām sarunām un visām bez uzraudzības atstātām sarunām.", + "ASSIGNED+NOTME": "Jūs saņemsiet brīdinājumus par sarunām, kas piešķirtas jums un citiem, bet ne par sarunām, kas nav piešķirtas.", + "NOTME+UNASSIGNED": "Jūs saņemsiet brīdinājumus par sarunām, kas ir bez uzraudzības, kā arī par sarunām, kas piešķirtas citiem.", + "ASSIGNED+NOTME+UNASSIGNED": "Jūs saņemsiet brīdinājumus par visām sarunām." + }, + "ALERT_TYPE": { + "TITLE": "Brīdinājuma notikumi sarunām", + "NONE": "Nav", + "ASSIGNED": "Piešķirtās Sarunas", + "ALL_CONVERSATIONS": "Visas Sarunas" + }, + "DEFAULT_TONE": { + "TITLE": "Brīdinājumu signāls:" + }, + "CONDITIONS": { + "TITLE": "Brīdinājumu nosacījumi:", + "CONDITION_ONE": "Sūtīt audio brīdinājumus tikai tad, ja pārlūkprogrammas logs nav aktīvs", + "CONDITION_TWO": "Sūtīt brīdinājumus ik pēc 30 sekundēm, līdz visas piešķirtās sarunas ir izlasītas" + }, + "SOUND_PERMISSION_ERROR": "Automātiskā atskaņošana jūsu pārlūkprogrammā ir atspējota. Lai automātiski dzirdētu brīdinājumus, pārlūkprogrammas iestatījumos iespējojiet skaņas atļauju vai mijiedarbojieties ar lapu.", + "READ_MORE": "Lasīt vairāk" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "E-pasta Ziņojumi", + "NOTE": "Atjauniniet savas e -pasta paziņojumu preferences šeit", + "CONVERSATION_ASSIGNMENT": "Nosūtīt e -pasta paziņojumus, kad man tiek piešķirta saruna", + "CONVERSATION_CREATION": "Nosūtīt e -pasta paziņojumus, kad tiek izveidota jauna saruna", + "CONVERSATION_MENTION": "Nosūtīt e -pasta paziņojumus, kad tiekat pieminēts sarunā", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Nosūtīt e -pasta paziņojumus, kad piešķirtā sarunā tiek izveidots jauns ziņojums", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Sūtīt e-pasta paziņojumus, kad sarunā tiek izveidots jauns ziņojums", + "SLA_MISSED_FIRST_RESPONSE": "Nosūtīt e-pasta paziņojumus, ja sarunā tiek nokavēts pirmās atbildes SLA", + "SLA_MISSED_NEXT_RESPONSE": "Nosūtīt e-pasta paziņojumus, ja sarunā tiek nokavēts nākamās atbildes SLA", + "SLA_MISSED_RESOLUTION": "Nosūtīt e-pasta paziņojumus, ja sarunā tiek nokavēts atrisināšanas SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Paziņojumu preferences", + "TYPE_TITLE": "Paziņojuma veids", + "EMAIL": "E-pasts", + "PUSH": "Push paziņojums", + "TYPES": { + "CONVERSATION_CREATED": "Tiek izveidota jauna saruna", + "CONVERSATION_ASSIGNED": "Jums ir piešķirta saruna", + "CONVERSATION_MENTION": "Jūs esat pieminēts sarunā", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Piešķirtajā sarunā ir izveidots jauns ziņojums", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Dalības sarunā ir izveidots jauns ziņojums", + "SLA_MISSED_FIRST_RESPONSE": "Sarunā ir nokavēts pirmās atbildes SLA", + "SLA_MISSED_NEXT_RESPONSE": "Sarunā ir nokavēts nākamās atbildes SLA", + "SLA_MISSED_RESOLUTION": "Sarunā ir nokavēts atrisināšanas SLA" + }, + "BROWSER_PERMISSION": "Iespējojiet push paziņojumus savā pārlūkprogrammā, lai varētu tos saņemt" + }, + "API": { + "UPDATE_SUCCESS": "Jūsu paziņojumu preferences ir veiksmīgi atjauninātas", + "UPDATE_ERROR": "Preferenču atjaunināšanas laikā radās kļūda. Lūdzu, mēģiniet vēlreiz" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Push Paziņojumi", + "NOTE": "Atjauniniet savas Push paziņojumu preferences šeit", + "CONVERSATION_ASSIGNMENT": "Nosūtīt push paziņojumus, kad man tiek piešķirta saruna", + "CONVERSATION_CREATION": "Nosūtīt push paziņojumus, kad tiek izveidota jauna saruna", + "CONVERSATION_MENTION": "Nosūtīt push paziņojumus, kad tiekat pieminēts sarunā", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Nosūtīt push paziņojumus, kad piešķirtā sarunā tiek izveidots jauns ziņojums", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Sūtīt push paziņojumus, kad sarunā tiek izveidots jauns ziņojums", + "HAS_ENABLED_PUSH": "Jūs esat iespējojis push šajā pārlūkprogrammā.", + "REQUEST_PUSH": "Iespējot push paziņojumus", + "SLA_MISSED_FIRST_RESPONSE": "Nosūtīt push paziņojumus, ja sarunā tiek nokavēts pirmās atbildes SLA", + "SLA_MISSED_NEXT_RESPONSE": "Nosūtīt push paziņojumus, ja sarunā tiek nokavēts nākamās atbildes SLA", + "SLA_MISSED_RESOLUTION": "Nosūtīt push paziņojumus, ja sarunā tiek nokavēts atrisināšanas SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "Profila Attēls" + }, + "NAME": { + "LABEL": "Jūsu pilnais vārds", + "ERROR": "Lūdzu, ievadiet derīgu pilnu vārdu", + "PLACEHOLDER": "Lūdzu, ievadiet savu pilno vārdu" + }, + "DISPLAY_NAME": { + "LABEL": "Parādāmais vārds", + "ERROR": "Lūdzu, ievadiet derīgu parādāmo vārdu", + "PLACEHOLDER": "Lūdzu, ievadiet parādāmo vārdu, tas tiks parādīts sarunās" + }, + "AVAILABILITY": { + "LABEL": "Pieejamība", + "STATUS": { + "ONLINE": "Tiešsaistē", + "BUSY": "Aizņemts", + "OFFLINE": "Bezsaistē" + }, + "SET_AVAILABILITY_SUCCESS": "Pieejamība ir veiksmīgi iestatīta", + "SET_AVAILABILITY_ERROR": "Nevarēja iestatīt pieejamību. Lūdzu, mēģiniet vēlreiz", + "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user" + }, + "EMAIL": { + "LABEL": "Jūsu e-pasta adrese", + "ERROR": "Lūdzu, ievadiet derīgu e-pasta adresi", + "PLACEHOLDER": "Lūdzu, ievadiet savu e-pasta adresi, tā tiks parādīta sarunās" + }, + "CURRENT_PASSWORD": { + "LABEL": "Pašreizējā parole", + "ERROR": "Lūdzu, ievadiet pašreizējo paroli", + "PLACEHOLDER": "Lūdzu, ievadiet pašreizējo paroli" + }, + "PASSWORD": { + "LABEL": "Jauna parole", + "ERROR": "Lūdzu, ievadiet paroli, kuras garums ir 6 vai vairāk simboli", + "PLACEHOLDER": "Lūdzu, ievadiet jauno paroli" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Apstipriniet jauno paroli", + "ERROR": "Apstiprinājuma parolei ir jāsakrīt ar paroli", + "PLACEHOLDER": "Lūdzu, vēlreiz ievadiet savu jauno paroli" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Mainīt", + "CHANGE_ACCOUNTS": "Pārslēgt kontu", + "SWITCH_ACCOUNT": "Pārslēgt kontu", + "CONTACT_SUPPORT": "Sazināties ar atbalstu", + "SELECTOR_SUBTITLE": "Izvēlieties kontu no šī saraksta", + "PROFILE_SETTINGS": "Profila iestatījumi", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Tastatūras īsinājumtaustiņi", + "APPEARANCE": "Mainīt izskatu", + "SUPER_ADMIN_CONSOLE": "SuperAdmin konsole", + "DOCS": "Lasīt dokumentāciju", + "CHANGELOG": "Changelog", + "LOGOUT": "Izrakstīties" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "izmēģinājuma dienas atlikušas.", + "TRAIL_BUTTON": "Pirkt Tagad", + "DELETED_USER": "Dzēsts Lietotājs", + "EMAIL_VERIFICATION_PENDING": "Izskatās, ka Jūs vēl neesat verificējis savu e-pasta adresi. Lūdzu, izlasiet savā iesūtnē verifikācijas e-pasta ziņojumu.", + "RESEND_VERIFICATION_MAIL": "Sūtīt verifikācijas e-pastu atkārtoti", + "EMAIL_VERIFICATION_SENT": "Verifikācijas e-pasts ir nosūtīts. Lūdzu, pārbaudiet savu iesūtni.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Konts Iesaldēts", + "MESSAGE": "Jūsu konts ir iesaldēts. Lai iegūtu papildu informāciju, lūdzu, sazinieties ar atbalsta komandu." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Izrakstīties" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Kopēt", + "CODEPEN": "Atvērt programmā CodePen", + "COPY_SUCCESSFUL": "Kopēts starpliktuvē" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Parādīt Vairāk", + "SHOW_LESS": "Parādīt Mazāk" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "Lejupielādēt", + "UPLOADING": "Notiek augšupielāde...", + "INSTAGRAM_STORY_UNAVAILABLE": "Šis stāsts vairs nav pieejams." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "Skatīt kartē" + }, + "FORM_BUBBLE": { + "SUBMIT": "Iesniegt" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "Šis attēls vairs nav pieejams.", + "LOADING_FAILED": "Ielāde neizdevās" + } + }, + "CONFIRM_EMAIL": "Notiek pārbaude...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Pievienot Iesūtni" + } + }, + "SIDEBAR": { + "NO_ITEMS": "Nav vienumu", + "CURRENTLY_VIEWING_ACCOUNT": "Pašlaik skatās:", + "SWITCH": "Pārslēgt", + "INBOX_VIEW": "Iesūtnes Skats", + "CONVERSATIONS": "Sarunas", + "INBOX": "Mana Iesūtne", + "ALL_CONVERSATIONS": "Visas Sarunas", + "MENTIONED_CONVERSATIONS": "Pieminēšanas", + "PARTICIPATING_CONVERSATIONS": "Piedalās", + "UNATTENDED_CONVERSATIONS": "Bez uzraudzības", + "REPORTS": "Pārskati", + "SETTINGS": "Iestatījumi", + "CONTACTS": "Kontaktpersonas", + "ACTIVE": "Aktīvs", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Asistenti", + "CAPTAIN_DOCUMENTS": "Dokumenti", + "CAPTAIN_RESPONSES": "Bieži uzdotie jautājumi", + "CAPTAIN_TOOLS": "Tools", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "Iesūtnes", + "CAPTAIN_SETTINGS": "Iestatījumi", + "HOME": "Sākums", + "AGENTS": "Aģenti", + "AGENT_BOTS": "Bots", + "AUDIT_LOGS": "Audita Žurnāli", + "INBOXES": "Iesūtnes", + "NOTIFICATIONS": "Paziņojumi", + "CANNED_RESPONSES": "Sagatavotās Atbildes", + "INTEGRATIONS": "Integrācijas", + "PROFILE_SETTINGS": "Profila Iestatījumi", + "ACCOUNT_SETTINGS": "Konta Iestatījumi", + "APPLICATIONS": "Lietojumprogrammas", + "LABELS": "Etiķetes", + "CUSTOM_ATTRIBUTES": "Pielāgotas Īpašības", + "AUTOMATION": "Automatizācija", + "MACROS": "Macros", + "TEAMS": "Komandas", + "BILLING": "Norēķini", + "CUSTOM_VIEWS_FOLDER": "Mapes", + "CUSTOM_VIEWS_SEGMENTS": "Segmenti", + "ALL_CONTACTS": "Visi Kontakti", + "TAGGED_WITH": "Marķēts ar", + "NEW_LABEL": "Jauna etiķete", + "NEW_TEAM": "Jauna komanda", + "NEW_INBOX": "Jauna iesūtne", + "REPORTS_CONVERSATION": "Sarunas", + "CSAT": "CSAT", + "LIVE_CHAT": "Tiešraides tērzēšana", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Kampaņas", + "ONGOING": "Notiekošs", + "ONE_OFF": "Vienreizējs", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "Bot", + "REPORTS_AGENT": "Aģenti", + "REPORTS_LABEL": "Etiķetes", + "REPORTS_INBOX": "Iesūtne", + "REPORTS_TEAM": "Komanda", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "Iestatīt sevi kā", + "SET_YOUR_AVAILABILITY": "Iestatīt savu pieejamību", + "SLA": "SLA", + "CUSTOM_ROLES": "Pielāgotas lomas", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Pārskats", + "REAUTHORIZE": "Jūsu iesūtnes savienojuma termiņš ir beidzies. Lūdzu, pievienojiet vēlreiz\n lai turpinātu saņemt un sūtīt ziņas", + "HELP_CENTER": { + "TITLE": "Palīdzības centrs", + "ARTICLES": "Raksti", + "CATEGORIES": "Kategorijas", + "LOCALES": "Lokalizācijas", + "SETTINGS": "Iestatījumi" + }, + "CHANNELS": "Kanāli", + "SET_AUTO_OFFLINE": { + "TEXT": "Automātiski atzīmēt bezsaistē", + "INFO_TEXT": "Ļaut sistēmai, kad neizmantojat lietotni vai informācijas paneli, automātiski atzīmēt Jūs bezsaistē.", + "INFO_SHORT": "Automātiski atzīmēt bezsaistē, kad neizmantojat lietotni." + }, + "DOCS": "Lasīt dokumentus", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "Norēķini", + "DESCRIPTION": "Pārvaldiet savu abonementu šeit. Modernizējiet abonementu un iegūstiet papildu funkcijas savai komandai.", + "CURRENT_PLAN": { + "TITLE": "Pašreizējais Norēķinu Plāns", + "PLAN_NOTE": "Šobrīd Jūs abonējat **{plan}** plānu ar **{quantity}** licencēm", + "SEAT_COUNT": "Lietotāju skaits", + "RENEWS_ON": "Atjaunojas" + }, + "VIEW_PRICING": "Skatīt Izcenojumu", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Pārvaldīt savu abonementu", + "DESCRIPTION": "Apskatīt iepriekšējos rēķinus, rediģēt norēķinu informāciju vai atcelt abonementu.", + "BUTTON_TXT": "Doties uz norēķinu portālu" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Pārvaldīt Captain AI lietošanu un kredītus.", + "BUTTON_TXT": "Iegādāties vairāk kredītu", + "DOCUMENTS": "Dokumenti", + "RESPONSES": "Atbildes", + "UPGRADE": "Captain nav pieejams bezmaksas abonementā. Modernizējiet abonementu tūlīt, lai piekļūtu asistentiem un copilot.", + "REFRESH_CREDITS": "Atjaunot" + }, + "CHAT_WITH_US": { + "TITLE": "Nepieciešama palīdzība?", + "DESCRIPTION": "Vai Jūs saskārāties ar kādām problēmām norēķinu laikā? Mēs esam šeit, lai palīdzētu.", + "BUTTON_TXT": "Tērzēt ar mums" + }, + "NO_BILLING_USER": "Jūsu norēķinu konts tiek konfigurēts. Lūdzu, atsvaidziniet lapu un mēģiniet vēlreiz.", + "TOPUP": { + "BUY_CREDITS": "Iegādāties vairāk kredītu", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Piezīme:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "Atcelt", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Atgriezties", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "Kopēts starpliktuvē", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "Lai pārietu uz maksas versiju, lūdzu sazinieties ar savu administratoru." + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "Pāriet uz maksas versiju tagad", + "CANCEL_ANYTIME": "Jūs varat jebkurā laikā mainīt vai atcelt savu versiju" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Ak, vai! Mēs nevarējām atrast nevienu chatwoot kontu. Lūdzu, izveidojiet jaunu kontu, lai turpinātu.", + "NEW_ACCOUNT": "Jauns Konts", + "SELECTOR_SUBTITLE": "Izveidot jaunu kontu", + "API": { + "SUCCESS_MESSAGE": "Konts ir veiksmīgi izveidots", + "EXIST_MESSAGE": "Konts jau pastāv", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" + }, + "FORM": { + "NAME": { + "LABEL": "Uzņēmuma Nosaukums", + "PLACEHOLDER": "Wayne Enterprises" + }, + "SUBMIT": "Iesniegt", + "CANCEL": "Atcelt" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "Skatīt visus īsinājumtaustiņus", + "TITLE": { + "OPEN_CONVERSATION": "Atvērt sarunu", + "RESOLVE_AND_NEXT": "Atrisināt un pāriet uz nākamo", + "NAVIGATE_DROPDOWN": "Pārvietoties starp nolaižamā saraksta vienumiem", + "RESOLVE_CONVERSATION": "Atrisināt Sarunu", + "GO_TO_CONVERSATION_DASHBOARD": "Doties uz Sarunu Informācijas Paneli", + "ADD_ATTACHMENT": "Pievienot Pielikumu", + "GO_TO_CONTACTS_DASHBOARD": "Doties uz Kontaktu Informācijas Paneli", + "TOGGLE_SIDEBAR": "Pārslēgt Sānjoslu", + "GO_TO_REPORTS_SIDEBAR": "Doties uz Pārskatu sānjoslu", + "MOVE_TO_NEXT_TAB": "Pāriet uz sarunu saraksta nākamo cilni", + "GO_TO_SETTINGS": "Doties uz Iestatījumiem", + "SWITCH_TO_PRIVATE_NOTE": "Pārslēgties uz Privāto Piezīmi", + "SWITCH_TO_REPLY": "Pārslēgties uz Atbildi", + "TOGGLE_SNOOZE_DROPDOWN": "Pārslēgt atlikšanas nolaižamo izvēlni" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "Prioritāte", + "ACTIVE": "Aktīvs", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "Rediģēt" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Atcelt" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Apraksts:", + "PLACEHOLDER": "Ievadiet aprakstu" + }, + "STATUS": { + "LABEL": "Statuss:", + "PLACEHOLDER": "Izvēlēties statusu", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "Pievienot" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "Rediģēt" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Atcelt" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Apraksts:", + "PLACEHOLDER": "Ievadiet aprakstu" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "Pievienot" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "Dzēst", + "CANCEL_BUTTON_LABEL": "Atcelt" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/signup.json b/app/javascript/dashboard/i18n/locale/lv/signup.json new file mode 100644 index 0000000..768f6e2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Izveidot kontu", + "TITLE": "Reģistrēt", + "TESTIMONIAL_HEADER": "Viss, kas nepieciešams, ir viens solis, lai virzītos uz priekšu", + "TESTIMONIAL_CONTENT": "Jūs esat viena soļa attālumā no klientu piesaistīšanas, noturēšanas un jaunu klientu atrašanas.", + "TERMS_ACCEPT": "Izveidojot kontu, Jūs piekrītat mūsu T & C and Privātuma politikai", + "OAUTH": { + "GOOGLE_SIGNUP": "Reģistrēties, izmantojot Google" + }, + "COMPANY_NAME": { + "LABEL": "Uzņēmuma nosaukums", + "PLACEHOLDER": "Ievadiet sava uzņēmuma nosaukumu. Piemēram, Wayne Enterprises", + "ERROR": "Uzņēmuma nosaukums ir pārāk īss." + }, + "FULL_NAME": { + "LABEL": "Pilnais vārds", + "PLACEHOLDER": "Ievadiet savu pilno vārdu. Piemēram, Brūss Veins", + "ERROR": "Pilnais vārds ir pārāk īss." + }, + "EMAIL": { + "LABEL": "Darba e-pasts", + "PLACEHOLDER": "Ievadiet savu darba e-pasta adresi. Piemēram, bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Lūdzu, ievadiet derīgu darba e-pasta adresi." + }, + "PASSWORD": { + "LABEL": "Parole", + "PLACEHOLDER": "Parole", + "ERROR": "Parole ir pārāk īsa", + "IS_INVALID_PASSWORD": "Parolei ir jāsatur vismaz 1 lielais burts, 1 mazais burts, 1 cipars un 1 speciālā rakstzīme.", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Apstipriniet paroli", + "PLACEHOLDER": "Apstipriniet paroli", + "ERROR": "Paroles nesakrīt." + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "Nevarēja izveidot savienojumu ar Woot serveri. Lūdzu mēģiniet vēlreiz." + }, + "SUBMIT": "Izveidot kontu", + "HAVE_AN_ACCOUNT": "Jau ir konts?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/sla.json b/app/javascript/dashboard/i18n/locale/lv/sla.json new file mode 100644 index 0000000..3aa0c43 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Servisa Līmeņa Līgumi", + "ADD_ACTION": "Pievienot SLA", + "ADD_ACTION_LONG": "Izveidot jaunu SLA politiku", + "DESCRIPTION": "Pakalpojuma līmeņa līgumi (SLA) ir līgumi, kas nosaka skaidras cerības starp jūsu komandu un klientiem. Tie nosaka atbildes un atrisināšanas laika standartus, veidojot pārskatatbildības sistēmu un nodrošinot konsekventu, augstas kvalitātes pieredzi.", + "LEARN_MORE": "Uzzināt vairāk par SLA", + "LOADING": "Notiek SLA iegūšana", + "PAYWALL": { + "TITLE": "Pārejiet uz maksas versiju, lai izveidotu SLA", + "AVAILABLE_ON": "SLA funkcija ir pieejama tikai Business un Enterprise versijās.", + "UPGRADE_PROMPT": "Pārejiet uz maksas versiju, lai iegūtu piekļuvi pie papildu funkcijām. Piemēram: komandas pārvaldībai, automatizācijai, pielāgotiem atribūtiem, un citām.", + "UPGRADE_NOW": "Pāriet uz maksas versiju tagad", + "CANCEL_ANYTIME": "Jūs varat jebkurā laikā mainīt vai atcelt savu versiju" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "SLA funkcija ir pieejama tikai maksas versijās.", + "UPGRADE_PROMPT": "Pārejiet uz maksas versiju, lai piekļūtu papildu funkcijām. Piemēram: audita žurnāliem, aģentu kapacitātei, un citām.", + "ASK_ADMIN": "Lai pārietu uz maksas versiju, lūdzu sazinieties ar savu administratoru." + }, + "LIST": { + "404": "Šim kontam nav piesaistīti SLA līgumi.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Uzņēmuma klientu izvirzītās problēmas, kurām nepieciešama tūlītēja uzmanība.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Uzņēmuma klientu izvirzītās problēmas, uz kurām ātri jāreaģē." + }, + "BUSINESS_HOURS_ON": "Darba laiks ieslēgts", + "BUSINESS_HOURS_OFF": "Darba laiks izslēgts", + "RESPONSE_TYPES": { + "FRT": "Pirmās atbildes laika slieksnis", + "NRT": "Nākamās atbildes laika slieksnis", + "RT": "Atrisināšanas laika slieksnis", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA Nosaukums", + "PLACEHOLDER": "SLA Nosaukums", + "REQUIRED_ERROR": "Nepieciešams SLA nosaukums", + "MINIMUM_LENGTH_ERROR": "Nepieciešamais minimālais garums 2 simboli", + "VALID_ERROR": "Ir atļauti tikai Alfabēti burti, Cipari, Defise un Pasvītra" + }, + "DESCRIPTION": { + "LABEL": "Apraksts", + "PLACEHOLDER": "SLA priekš premium klientiem" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "Pirmās Atbildes Laiks", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Nākamās Atbildes Laiks", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "Atrisināšanas Laiks", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Darba Laiks", + "PLACEHOLDER": "Tikai darba laikā" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Slieksnim ir jābūt skaitlim un lielākam par nulli" + }, + "EDIT": "Rediģēt", + "CREATE": "Izveidot", + "DELETE": "Dzēst", + "CANCEL": "Atcelt" + }, + "ADD": { + "TITLE": "Pievienot SLA", + "DESC": "Draudzīgi solījumi priekš lieliska servisa!", + "API": { + "SUCCESS_MESSAGE": "SLA ir veiksmīgi pievienots", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" + } + }, + "DELETE": { + "TITLE": "Dzēst SLA", + "API": { + "SUCCESS_MESSAGE": "SLA ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" + }, + "CONFIRM": { + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai tiešām vēlaties dzēst ", + "YES": "Jā, Dzēst ", + "NO": "Nē, Paturēt " + } + }, + "EVENTS": { + "TITLE": "Nokavētie SLA", + "FRT": "Pirmās reakcijas laiks", + "NRT": "Nākamās reakcijas laiks", + "RT": "Atrisināšanas laiks", + "SHOW_MORE": "{count} vairāk", + "HIDE": "Slēpt {count} rindas" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/teamsSettings.json b/app/javascript/dashboard/i18n/locale/lv/teamsSettings.json new file mode 100644 index 0000000..fcaec61 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Izveidot jaunu komandu", + "HEADER": "Komandas", + "LOADING": "Notiek komandu iegūšana", + "DESCRIPTION": "Komandas ļauj organizēt aģentus grupās, pamatojoties uz viņu pienākumiem. Aģents var piederēt vairākām komandām. Kad strādājat sadarbojoties, varat piešķirt sarunas noteiktām komandām.", + "LEARN_MORE": "Uzzināt vairāk par komandām", + "LIST": { + "404": "Šajā kontā nav izveidota neviena komanda.", + "EDIT_TEAM": "Rediģēt komandu", + "NONE": "Nav" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Izveidojiet jaunu komandu", + "DESC": "Pievienot savai jaunajai komandai nosaukumu un aprakstu." + }, + "AGENTS": { + "BUTTON_TEXT": "Pievienot komandai aģentus", + "TITLE": "Pievienot aģentus komandai - {teamName}", + "DESC": "Pievienot aģentus savai jaunizveidotajai komandai. Tas ļauj sarunās sadarboties kā komandai, kā arī saņemt paziņojumus par jauniem notikumiem tajā pašā sarunā." + }, + "WIZARD_CREATE": { + "TITLE": "Izveidot", + "BODY": "Izveidot jaunu aģentu komandu." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "Pievienot Aģentus", + "BODY": "Pievienot komandai aģentus." + }, + "WIZARD_FINISH": { + "TITLE": "Pabeigt", + "BODY": "Jūs varat sākt darboties!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Rediģēt savas komandas informāciju", + "DESC": "Rediģēt savas komandas nosaukumu un aprakstu.", + "BUTTON_TEXT": "Atjaunināt komandu" + }, + "AGENTS": { + "BUTTON_TEXT": "Atjaunināt aģentus komandā", + "TITLE": "Pievienot aģentus komandai - {teamName}", + "DESC": "Pievienot aģentus savai jaunizveidotajai komandai. Visi pievienotie aģenti tiks informēti, kad saruna tiks piešķirta šai komandai." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Komandas informācija", + "ROUTE": "settings_teams_edit", + "BODY": "Mainīt nosaukumu, aprakstu un citu informāciju." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Rediģēt Aģentus", + "ROUTE": "settings_teams_edit_members", + "BODY": "Rediģēt savas komandas aģentus." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Pabeigt", + "ROUTE": "settings_teams_edit_finish", + "BODY": "Jūs varat sākt darboties!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Nevarēja saglabāt komandas informāciju. Lūdzu, mēģiniet vēlreiz." + }, + "AGENTS": { + "AGENT": "AĢENTS", + "EMAIL": "Epasts", + "BUTTON_TEXT": "Pievienot aģentus", + "ADD_AGENTS": "Notiek aģentu pievienošana Jūsu komandai...", + "SELECT": "izvēlēties", + "SELECT_ALL": "izvēlēties visus aģentus", + "SELECTED_COUNT": "{selected} no {total} aģentiem ir atlasīti." + }, + "ADD": { + "TITLE": "Pievienot aģentus komandai - {teamName}", + "DESC": "Pievienot aģentus savai jaunizveidotajai komandai. Tas ļauj sarunās sadarboties kā komandai, tā arī saņemt paziņojumus par jauniem notikumiem tajā pašā sarunā.", + "SELECT": "izvēlēties", + "SELECT_ALL": "izvēlēties visus aģentus", + "SELECTED_COUNT": "{selected} no {total} aģentiem ir atlasīti.", + "BUTTON_TEXT": "Pievienot aģentus", + "AGENT_VALIDATION_ERROR": "Izvēlieties vismaz vienu aģentu." + }, + "FINISH": { + "TITLE": "Jūsu komanda ir gatava!", + "MESSAGE": "Tagad Jūs sarunās varat sadarboties kā komanda. Laimīgu atbalstu ", + "BUTTON_TEXT": "Pabeigt" + }, + "DELETE": { + "BUTTON_TEXT": "Dzēst", + "API": { + "SUCCESS_MESSAGE": "Komanda ir veiksmīgi izdzēsa.", + "ERROR_MESSAGE": "Nevarēja izdzēst komandu. Lūdzu, mēģiniet vēlreiz." + }, + "CONFIRM": { + "TITLE": "Vai tiešām vēlaties dzēst komandu?", + "PLACE_HOLDER": "Lūdzu, uzrakstiet {teamName} lai apstiprinātu", + "MESSAGE": "Komandas dzēšana noņems komandas uzdevumu no sarunām, kas piešķirtas šai komandai.", + "YES": "Dzēst ", + "NO": "Atcelt" + } + }, + "SETTINGS": "Iestatījumi", + "FORM": { + "UPDATE": "Atjaunināt komandu", + "CREATE": "Izveidot komandu", + "NAME": { + "LABEL": "Komandas nosaukums", + "PLACEHOLDER": "Piemēram: Pārdošana, Klientu Atbalsts" + }, + "DESCRIPTION": { + "LABEL": "Komandas Apraksts", + "PLACEHOLDER": "Īss apraksts par šo komandu." + }, + "AUTO_ASSIGN": { + "LABEL": "Atļaut automātiskai piešķirt šai komandai." + }, + "SUBMIT_CREATE": "Izveidot komandu" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/webhooks.json b/app/javascript/dashboard/i18n/locale/lv/webhooks.json new file mode 100644 index 0000000..f42fe40 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Webhook Iestatījumi" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/lv/whatsappTemplates.json new file mode 100644 index 0000000..29a6e3d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "WhatsApp Veidnes", + "SUBTITLE": "Izvēlieties WhatsApp veidni, kuru vēlaties nosūtīt", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Meklēt Veidnes", + "NO_TEMPLATES_FOUND": "Veidnes nav atrastas", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Kategorija", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Valoda", + "TEMPLATE_BODY": "Veidnes Pamatteksts", + "CATEGORY": "Kategorija" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Mainīgie", + "LANGUAGE": "Valoda", + "CATEGORY": "Kategorija", + "VARIABLE_PLACEHOLDER": "Ievadiet {variable} vērtību", + "GO_BACK_LABEL": "Atgriezties", + "SEND_MESSAGE_LABEL": "Sūtīt Ziņojumu", + "FORM_ERROR_MESSAGE": "Lūdzu, pirms nosūtīšanas aizpildiet visus mainīgos", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/yearInReview.json b/app/javascript/dashboard/i18n/locale/lv/yearInReview.json new file mode 100644 index 0000000..d14712c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lv/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "Aizvērt", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "sarunas", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "Lejupielādēt", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "Share" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/advancedFilters.json b/app/javascript/dashboard/i18n/locale/ml/advancedFilters.json new file mode 100644 index 0000000..3dd44f7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "സംഭാഷണങ്ങൾ തരം തിരിക്കുക", + "SUBTITLE": "Add your filters below and hit 'Apply filters' to cut through the chat clutter.", + "EDIT_CUSTOM_FILTER": "ഫോൾഡർ എഡിറ്റ് ചെയ്യുക", + "CUSTOM_VIEWS_SUBTITLE": "ഫിൽട്ടറുകൾ ചേർക്കുക അല്ലെങ്കിൽ നീക്കം ചെയ്യുന്നതിലൂടെ നിങ്ങളുടെ ഫോൾഡർ അപ്ഡേറ്റ് ചെയ്യുക.", + "ADD_NEW_FILTER": "ഫിൽട്ടർ ചേർക്കുക", + "FILTER_DELETE_ERROR": "Oops, looks like we can't save nothing! Please add at least one filter to save it.", + "SUBMIT_BUTTON_LABEL": "ഫിൽട്ടറുകൾ പ്രയോഗിക്കുക", + "UPDATE_BUTTON_LABEL": "Update folder", + "CANCEL_BUTTON_LABEL": "റദ്ദാക്കുക", + "CLEAR_BUTTON_LABEL": "Clear filters", + "FOLDER_LABEL": "Folder Name", + "FOLDER_QUERY_LABEL": "Folder Query", + "EMPTY_VALUE_ERROR": "Value is required.", + "TOOLTIP_LABEL": "സംഭാഷണങ്ങൾ തരം തിരിക്കുക", + "QUERY_DROPDOWN_LABELS": { + "AND": "ഒപ്പം", + "OR": "അഥവാ" + }, + "INPUT_PLACEHOLDER": "Enter value", + "OPERATOR_LABELS": { + "equal_to": "തുല്യമാണ്", + "not_equal_to": "തുല്യമല്ല", + "does_not_contain": "ഉൾപ്പെട്ടിട്ടില്ല", + "is_present": "നിലവിലുണ്ട്", + "is_not_present": "നിലവിലില്ല", + "is_greater_than": "Is greater than", + "is_less_than": "Is lesser than", + "days_before": "Is x days before", + "starts_with": "Starts with", + "equalTo": "തുല്യമാണ്", + "notEqualTo": "തുല്യമല്ല", + "contains": "അടങ്ങിയിരിക്കുന്നു", + "doesNotContain": "ഉൾപ്പെട്ടിട്ടില്ല", + "isPresent": "നിലവിലുണ്ട്", + "isNotPresent": "നിലവിലില്ല", + "isGreaterThan": "Is greater than", + "isLessThan": "Is lesser than", + "daysBefore": "Is x days before", + "startsWith": "Starts with" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "True", + "FALSE": "False" + }, + "ATTRIBUTES": { + "STATUS": "സ്റ്റാറ്റസ്", + "ASSIGNEE_NAME": "Assignee name", + "INBOX_NAME": "Inbox name", + "TEAM_NAME": "ടീമിന്റെ പേര്", + "CONVERSATION_IDENTIFIER": "Conversation identifier", + "CAMPAIGN_NAME": "Campaign name", + "LABELS": "ലേബലുകൾ", + "BROWSER_LANGUAGE": "Browser language", + "PRIORITY": "Priority", + "COUNTRY_NAME": "Country name", + "REFERER_LINK": "റഫറർ ലിങ്ക്", + "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_TEXT": "Text", + "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "എന്ന സ്ഥലത്ത് സൃഷ്ടിച്ചു", + "LAST_ACTIVITY": "Last activity" + }, + "ERRORS": { + "VALUE_REQUIRED": "Value is required", + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard filters", + "ADDITIONAL_FILTERS": "Additional filters", + "CUSTOM_ATTRIBUTES": "Custom attributes" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "നിങ്ങൾക്ക് ഈ ഫിൽട്ടർ സേവ് ചെയ്യണോ?", + "LABEL": "ഈ ഫിൽട്ടറിന് പേര് നൽകുക", + "PLACEHOLDER": "Name your filter to refer it later.", + "ERROR_MESSAGE": "Name is required.", + "SAVE_BUTTON": "ഫിൽട്ടർ സേവ് ചെയുക", + "CANCEL_BUTTON": "റദ്ദാക്കുക", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder created successfully.", + "ERROR_MESSAGE": "Error while creating folder." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment created successfully.", + "ERROR_MESSAGE": "Error while creating segment." + } + }, + "EDIT": { + "EDIT_BUTTON": "Edit folder" + }, + "DELETE": { + "DELETE_BUTTON": "ഫിൽട്ടർ ഇല്ലാതാക്കുക", + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "ഫിൽട്ടർ ഇല്ലാതാക്കുമെന്ന് ഉറപ്പാണോ ", + "YES": "Yes, delete", + "NO": "No, keep it" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder deleted successfully.", + "ERROR_MESSAGE": "Error while deleting folder." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment deleted successfully.", + "ERROR_MESSAGE": "Error while deleting segment." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/agentBots.json b/app/javascript/dashboard/i18n/locale/ml/agentBots.json new file mode 100644 index 0000000..0bbe3b7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Bots", + "LOADING_EDITOR": "Loading editor...", + "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try. You can manage your bots from this page or create new ones using the 'Add Bot' button.", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "System bot", + "GLOBAL_BOT_BADGE": "System", + "AVATAR": { + "SUCCESS_DELETE": "Bot avatar deleted successfully", + "ERROR_DELETE": "Error deleting bot avatar, please try again" + }, + "BOT_CONFIGURATION": { + "TITLE": "Select an agent bot", + "DESC": "Assign an Agent Bot to your inbox. They can handle initial conversations and transfer them to a live agent when necessary.", + "SUBMIT": "അപ്ഡേറ്റ്", + "DISCONNECT": "Disconnect bot", + "SUCCESS_MESSAGE": "Successfully updated the agent bot.", + "DISCONNECTED_SUCCESS_MESSAGE": "Successfully disconnected the agent bot.", + "ERROR_MESSAGE": "Could not update the agent bot. Please try again.", + "DISCONNECTED_ERROR_MESSAGE": "Could not disconnect the agent bot. Please try again.", + "SELECT_PLACEHOLDER": "Select bot" + }, + "ADD": { + "TITLE": "Add Bot", + "CANCEL_BUTTON_TEXT": "റദ്ദാക്കുക", + "API": { + "SUCCESS_MESSAGE": "Bot added successfully.", + "ERROR_MESSAGE": "Could not add bot. Please try again later." + } + }, + "LIST": { + "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.", + "LOADING": "Fetching bots...", + "TABLE_HEADER": { + "DETAILS": "Bot Details", + "URL": "വെബ്ഹുക്ക് യുആർഎൽ" + } + }, + "DELETE": { + "BUTTON_TEXT": "ഇല്ലാതാക്കുക", + "TITLE": "Delete bot", + "CONFIRM": { + "TITLE": "ഇല്ലാതാക്കൽ സ്ഥിരീകരിക്കുക", + "MESSAGE": "Are you sure you want to delete {name}?", + "YES": "അതെ, ഇല്ലാതാക്കുക", + "NO": "No, Keep" + }, + "API": { + "SUCCESS_MESSAGE": "Bot deleted successfully.", + "ERROR_MESSAGE": "Could not delete bot. Please try again." + } + }, + "EDIT": { + "BUTTON_TEXT": "എഡിറ്റുചെയ്യുക", + "TITLE": "Edit bot", + "API": { + "SUCCESS_MESSAGE": "Bot updated successfully.", + "ERROR_MESSAGE": "Could not update bot. Please try again." + } + }, + "ACCESS_TOKEN": { + "TITLE": "ആക്സസ് ടോക്കൺ", + "DESCRIPTION": "Copy the access token and save it securely", + "COPY_SUCCESSFUL": "Access token copied to clipboard", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "Bot name", + "PLACEHOLDER": "Enter bot name", + "REQUIRED": "Bot name is required" + }, + "DESCRIPTION": { + "LABEL": "വിവരണം", + "PLACEHOLDER": "What does this bot do?" + }, + "WEBHOOK_URL": { + "LABEL": "വെബ്ഹുക്ക് യുആർഎൽ", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "Webhook URL is required" + }, + "ERRORS": { + "NAME": "Bot name is required", + "URL": "Webhook URL is required", + "VALID_URL": "Please enter a valid URL starting with http:// or https://" + }, + "CANCEL": "റദ്ദാക്കുക", + "CREATE": "Create Bot", + "UPDATE": "Update Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them." + }, + "TYPES": { + "WEBHOOK": "Webhook bot" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/agentMgmt.json b/app/javascript/dashboard/i18n/locale/ml/agentMgmt.json new file mode 100644 index 0000000..6174a0a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "ഏജന്റുമാർ", + "HEADER_BTN_TXT": "ഏജന്റിനെ ചേർക്കുക", + "LOADING": "ഏജന്റ് പട്ടിക ലഭ്യമാക്കുന്നു", + "DESCRIPTION": "An agent is a member of your customer support team who can view and respond to user messages. The list below shows all the agents in your account.", + "LEARN_MORE": "Learn about user roles", + "AGENT_TYPES": { + "ADMINISTRATOR": "അഡ്മിനിസ്ട്രേറ്റർ", + "AGENT": "ഏജന്റ്" + }, + "LIST": { + "404": "ഈ അക്കൗണ്ടുമായി ബന്ധപ്പെട്ട ഏജന്റുകളൊന്നുമില്ല", + "TITLE": "നിങ്ങളുടെ ടീമിലെ ഏജന്റുമാരെ മാനേജുചെയ്യുക", + "DESC": "നിങ്ങൾക്ക് നിങ്ങളുടെ ടീമിലെ ഏജന്റുമാരെ ചേർക്കാനും നീക്കംചെയ്യാനും കഴിയും.", + "NAME": "പേര്", + "EMAIL": "ഇമെയിൽ", + "STATUS": "സ്റ്റാറ്റസ്", + "ACTIONS": "പ്രവർത്തനങ്ങൾ", + "VERIFIED": "പരിശോധിച്ചു", + "VERIFICATION_PENDING": "പരിശോധന തീർപ്പുകൽപ്പിച്ചിട്ടില്ല", + "AVAILABLE_CUSTOM_ROLE": "Available custom role permissions" + }, + "ADD": { + "TITLE": "നിങ്ങളുടെ ടീമിലേക്ക് ഏജന്റിനെ ചേർക്കുക", + "DESC": "നിങ്ങളുടെ ഇൻബോക്സുകൾക്കുള്ള പിന്തുണ കൈകാര്യം ചെയ്യാൻ കഴിയുന്ന ആളുകളെ നിങ്ങൾക്ക് ചേർക്കാൻ കഴിയും.", + "CANCEL_BUTTON_TEXT": "റദ്ദാക്കുക", + "FORM": { + "NAME": { + "LABEL": "ഏജന്റിന്റെ പേര്", + "PLACEHOLDER": "ദയവായി ഏജന്റിന്റെ പേര് നൽകുക" + }, + "AGENT_TYPE": { + "LABEL": "ഏജന്റ് തരം", + "PLACEHOLDER": "ദയവായി ഒരു തരം തിരഞ്ഞെടുക്കുക", + "ERROR": "ഏജന്റ് തരം ആവശ്യമാണ്" + }, + "EMAIL": { + "LABEL": "ഇമെയിൽ വിലാസം", + "PLACEHOLDER": "ദയവായി ഏജന്റിന്റെ ഒരു ഇമെയിൽ വിലാസം നൽകുക" + }, + "SUBMIT": "ഏജന്റിനെ ചേർക്കുക" + }, + "API": { + "SUCCESS_MESSAGE": "ഏജന്റിനെ വിജയകരമായി ചേർത്തു", + "EXIST_MESSAGE": "ഏജന്റ് ഇമെയിൽ ഇതിനകം ഉപയോഗത്തിലാണ്, ദയവായി മറ്റൊരു ഇമെയിൽ വിലാസം പരീക്ഷിക്കുക", + "ERROR_MESSAGE": "വൂട്ട് സെർവറിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക" + } + }, + "DELETE": { + "BUTTON_TEXT": "ഇല്ലാതാക്കുക", + "API": { + "SUCCESS_MESSAGE": "ഏജന്റിനെ വിജയകരമായി ഇല്ലാതാക്കി", + "ERROR_MESSAGE": "വൂട്ട് സെർവറിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക" + }, + "CONFIRM": { + "TITLE": "ഇല്ലാതാക്കൽ സ്ഥിരീകരിക്കുക", + "MESSAGE": "ഏജന്റുമാർ
ഒരു ഏജൻറ് നിങ്ങളുടെ ഉപഭോക്തൃ പിന്തുണാ ടീമിലെ ഒരു അംഗമാണ്.
ഏജന്റുമാർക്ക് നിങ്ങളുടെ ഉപയോക്താക്കളിൽ നിന്നുള്ള സന്ദേശങ്ങൾ കാണാനും മറുപടി നൽകാനും കഴിയും. നിങ്ങളുടെ അക്കൗണ്ടിലുള്ള എല്ലാ ഏജന്റുമാരെയും ഈ പട്ടിക കാണിക്കുന്നു. p>
ഒരു പുതിയ ഏജന്റിനെ ചേർക്കുന്നതിന് ഏജന്റിനെ ചേർക്കുക b> ബട്ടൺ ക്ലിക്കുചെയ്യുക. നിങ്ങൾ ചേർത്ത ഏജന്റിന് അവരുടെ അക്കൗണ്ട് സജീവമാക്കുന്നതിന് ഒരു സ്ഥിരീകരണ ലിങ്കുള്ള ഇമെയിൽ ലഭിക്കും. അതിനുശേഷം അവർക്ക് ചാറ്റ് വൂട്ട് ആക്സസ് ചെയ്യാനും സന്ദേശങ്ങളോട് പ്രതികരിക്കാനും കഴിയും.
ചാറ്റ് വൂട്ടിന്റെ സവിശേഷതകളിലേക്കുള്ള ആക്സസ് ഇനിപ്പറയുന്ന റോളുകളെ അടിസ്ഥാനമാക്കിയുള്ളതാണ്.
ഏജൻറ് b> - ഈ റോൾ ഉള്ള ഏജന്റുമാർക്ക് ഇൻബോക്സുകൾ, റിപ്പോർട്ടുകൾ, സംഭാഷണങ്ങൾ എന്നിവ മാത്രമേ ആക്സസ് ചെയ്യാൻ കഴിയൂ. അവർക്ക് മറ്റ് ഏജന്റുമാരുടെയോ അല്ലെങ്കിൽ തങ്ങളുടേയോ സംഭാഷണങ്ങൾ നിർണ്ണയിക്കാനും സംഭാഷണങ്ങൾ പരിഹരിക്കാനും കഴിയും.
അഡ്മിനിസ്ട്രേറ്റർ - ഒരു സാധാരണ ഏജന്റിന്റെ പ്രത്യേകാവകാശങ്ങളോടൊപ്പം ക്രമീകരണങ്ങളും ബില്ലിംഗും ഉൾപ്പെടെ നിങ്ങളുടെ അക്കൗണ്ടിൽ ലഭ്യമായ എല്ലാ ചാറ്റ് വൂട്ട് സവിശേഷതകളിലേക്കും ആക്സസ് ഉണ്ടായിരിക്കുക. p> ", + "YES": "അതെ, ഇല്ലാതാക്കുക ", + "NO": "ഇല്ല, സൂക്ഷിക്കുക" + } + }, + "EDIT": { + "TITLE": "ഏജന്റിനെ എഡിറ്റുചെയ്യുക", + "FORM": { + "NAME": { + "LABEL": "ഏജന്റിന്റെ പേര്", + "PLACEHOLDER": "ദയവായി ഏജന്റിന്റെ പേര് നൽകുക" + }, + "AGENT_TYPE": { + "LABEL": "ഏജന്റ് തരം", + "PLACEHOLDER": "ദയവായി ഒരു തരം തിരഞ്ഞെടുക്കുക", + "ERROR": "ഏജന്റ് തരം ആവശ്യമാണ്" + }, + "EMAIL": { + "LABEL": "ഇമെയിൽ വിലാസം", + "PLACEHOLDER": "ദയവായി ഏജന്റിന്റെ ഒരു ഇമെയിൽ വിലാസം നൽകുക" + }, + "AGENT_AVAILABILITY": { + "LABEL": "ലഭ്യത", + "PLACEHOLDER": "Please select an availability status", + "ERROR": "Availability is required" + }, + "SUBMIT": "ഏജന്റിനെ എഡിറ്റുചെയ്യുക" + }, + "BUTTON_TEXT": "എഡിറ്റുചെയ്യുക", + "CANCEL_BUTTON_TEXT": "റദ്ദാക്കുക", + "API": { + "SUCCESS_MESSAGE": "ഏജന്റിനെ വിജയകരമായി അപ്ഡേറ്റുചെയ്തു", + "ERROR_MESSAGE": "വൂട്ട് സെർവറിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "പാസ്സ്വേർഡ് പുനഃസജ്ജീകരണം", + "ADMIN_SUCCESS_MESSAGE": "പാസ്വേഡ് പുനഃസജ്ജീകരണത്തിന് ഉള്ള ഒരു ഇമെയിൽ ഏജന്റിന് അയച്ചു", + "SUCCESS_MESSAGE": "ഏജന്റിന്റെ പാസ്വേഡ് വിജയകരമായി പുനഃസജീകരിച്ചു", + "ERROR_MESSAGE": "വൂട്ട് സെർവറിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക" + } + }, + "SEARCH": { + "NO_RESULTS": "ഒരു ഫലവും കണ്ടെത്താനായില്ല." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "ഒന്നുമില്ല", + "TITLE": { + "AGENT": "ഏജന്റിനെ തിരഞ്ഞെടുക്കുക", + "TEAM": "ടീം തിരഞ്ഞെടുക്കുക" + }, + "LIST": { + "NONE": "ഒന്നുമില്ല" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "ഏജന്റകളെ ഒന്നും കണ്ടെത്താൻ സാധിച്ചില്ല", + "TEAM": "ടീമുകളൊന്നും കണ്ടെത്താനായില്ല" + }, + "PLACEHOLDER": { + "AGENT": "ഏജന്റുകളെ തിരയുക", + "TEAM": "ടീമുകളെ തിരയുക", + "INPUT": "Search for agents" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/ml/attributesMgmt.json new file mode 100644 index 0000000..decabcf --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "ഇഷ്ടാനുസൃത ആട്രിബ്യൂട്ടുകൾ", + "HEADER_BTN_TXT": "Add Custom Attribute", + "LOADING": "Fetching custom attributes", + "DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.", + "LEARN_MORE": "Learn more about custom attributes", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "സംഭാഷണം", + "CONTACT": "ബന്ധപ്പെടുക" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Text", + "NUMBER": "Number", + "LINK": "Link", + "DATE": "Date", + "LIST": "List", + "CHECKBOX": "Checkbox" + }, + "ADD": { + "TITLE": "Add Custom Attribute", + "SUBMIT": "സൃഷ്ടിക്കുക", + "CANCEL_BUTTON_TEXT": "റദ്ദാക്കുക", + "FORM": { + "NAME": { + "LABEL": "Display Name", + "PLACEHOLDER": "ഇഷ്ടാനുസൃത ആട്രിബ്യൂട്ട് പ്രദർശന നാമം നൽകുക", + "ERROR": "നാമം ആവശ്യമാണ്" + }, + "DESC": { + "LABEL": "വിവരണം", + "PLACEHOLDER": "Enter custom attribute description", + "ERROR": "വിവരണം ആവശ്യമാണ്" + }, + "MODEL": { + "LABEL": "ബാധകമാണ്", + "PLACEHOLDER": "ദയവായി തിരഞ്ഞെടുക്കുക", + "ERROR": "മോഡൽ ആവശ്യമാണ്" + }, + "TYPE": { + "LABEL": "Type", + "PLACEHOLDER": "ദയവായി ഒരു തരം തിരഞ്ഞെടുക്കുക", + "ERROR": "Type is required", + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "ദയവായി മൂല്യം നൽകി എന്റർ കീ അമർത്തുക", + "ERROR": "കുറഞ്ഞത് ഒരു മൂല്യമെങ്കിലും ഉണ്ടായിരിക്കണം" + } + }, + "KEY": { + "LABEL": "കീ", + "PLACEHOLDER": "Enter custom attribute key", + "ERROR": "കീ ആവശ്യമാണ്", + "IN_VALID": "Invalid key" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute added successfully!", + "ERROR_MESSAGE": "Could not create a Custom Attribute. Please try again later." + } + }, + "DELETE": { + "BUTTON_TEXT": "ഇല്ലാതാക്കുക", + "API": { + "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again." + }, + "CONFIRM": { + "TITLE": "നിങ്ങൾക്ക് ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ - {attributeName}", + "PLACE_HOLDER": "സ്ഥിരീകരിക്കാൻ {attributeName} എന്ന് ടൈപ്പ് ചെയ്യുക", + "MESSAGE": "Deleting will remove the custom attribute", + "YES": "ഇല്ലാതാക്കുക ", + "NO": "റദ്ദാക്കുക" + } + }, + "EDIT": { + "TITLE": "Edit Custom Attribute", + "UPDATE_BUTTON_TEXT": "അപ്ഡേറ്റ്", + "TYPE": { + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "ദയവായി മൂല്യങ്ങൾ നൽകി എന്റർ കീ അമർത്തുക" + } + }, + "API": { + "SUCCESS_MESSAGE": "ഇഷ്ടാനുസൃത ആട്രിബ്യൂട്ട് വിജയകരമായി അപ്ഡേറ്റ് ചെയ്തു", + "ERROR_MESSAGE": "There was an error updating custom attribute, please try again" + } + }, + "TABS": { + "HEADER": "ഇഷ്ടാനുസൃത ആട്രിബ്യൂട്ടുകൾ", + "CONVERSATION": "സംഭാഷണം", + "CONTACT": "ബന്ധപ്പെടുക" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "പേര്", + "DESCRIPTION": "വിവരണം", + "TYPE": "തരം", + "KEY": "കീ" + }, + "BUTTONS": { + "EDIT": "എഡിറ്റുചെയ്യുക", + "DELETE": "ഇല്ലാതാക്കുക" + }, + "EMPTY_RESULT": { + "404": "There are no custom attributes created", + "NOT_FOUND": "There are no custom attributes configured" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/auditLogs.json b/app/javascript/dashboard/i18n/locale/ml/auditLogs.json new file mode 100644 index 0000000..f9150aa --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Audit Logs", + "HEADER_BTN_TXT": "Add Audit Logs", + "LOADING": "Fetching Audit Logs", + "DESCRIPTION": "Audit Logs maintain a record of activities in your account, allowing you to track and audit your account, team, or services.", + "LEARN_MORE": "Learn more about audit logs", + "SEARCH_404": "ഈ ചോദ്യവുമായി പൊരുത്തപ്പെടുന്ന ഇനങ്ങളൊന്നുമില്ല", + "SIDEBAR_TXT": "
Audit Logs
Audit Logs are trails for events and actions in a Chatwoot System.
", + "LIST": { + "404": "There are no Audit Logs available in this account.", + "TITLE": "Manage Audit Logs", + "DESC": "Audit Logs are trails for events and actions in a Chatwoot System.", + "TABLE_HEADER": { + "ACTIVITY": "User", + "TIME": "Action", + "IP_ADDRESS": "IP വിലാസം" + } + }, + "API": { + "SUCCESS_MESSAGE": "AuditLogs retrieved successfully", + "ERROR_MESSAGE": "വൂട്ട് സെർവറിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക" + }, + "DEFAULT_USER": "System", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} invited {invitee} to the account as an {role}", + "EDIT": { + "SELF": "{agentName} changed their {attributes} to {values}", + "OTHER": "{agentName} changed {attributes} of {user} to {values}", + "DELETED": "{agentName} changed {attributes} of a deleted user to {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} signed in", + "SIGN_OUT": "{agentName} signed out" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} deleted conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/automation.json b/app/javascript/dashboard/i18n/locale/ml/automation.json new file mode 100644 index 0000000..b6fb7df --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automation", + "DESCRIPTION": "Automation can replace and streamline existing processes that require manual effort, such as adding labels and assigning conversations to the most suitable agent. This allows the team to focus on their strengths while reducing time spent on routine tasks.", + "LEARN_MORE": "Learn more about automation", + "HEADER_BTN_TXT": "Add Automation Rule", + "LOADING": "Fetching automation rules", + "ADD": { + "TITLE": "Add Automation Rule", + "SUBMIT": "സൃഷ്ടിക്കുക", + "CANCEL_BUTTON_TEXT": "റദ്ദാക്കുക", + "FORM": { + "NAME": { + "LABEL": "Rule Name", + "PLACEHOLDER": "Enter rule name", + "ERROR": "നാമം ആവശ്യമാണ്" + }, + "DESC": { + "LABEL": "വിവരണം", + "PLACEHOLDER": "Enter rule description", + "ERROR": "വിവരണം ആവശ്യമാണ്" + }, + "EVENT": { + "LABEL": "Event", + "PLACEHOLDER": "ദയവായി തിരഞ്ഞെടുക്കുക", + "ERROR": "Event is required" + }, + "CONDITIONS": { + "LABEL": "Conditions" + }, + "ACTIONS": { + "LABEL": "പ്രവർത്തനങ്ങൾ" + } + }, + "CONDITION_BUTTON_LABEL": "Add Condition", + "ACTION_BUTTON_LABEL": "Add Action", + "API": { + "SUCCESS_MESSAGE": "Automation rule added successfully", + "ERROR_MESSAGE": "Could not able to create a automation rule, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "പേര്", + "DESCRIPTION": "വിവരണം", + "ACTIVE": "സജീവമാണ്", + "CREATED_ON": "Created on" + }, + "404": "No automation rules found" + }, + "DELETE": { + "TITLE": "Delete Automation Rule", + "SUBMIT": "ഇല്ലാതാക്കുക", + "CANCEL_BUTTON_TEXT": "റദ്ദാക്കുക", + "CONFIRM": { + "TITLE": "ഇല്ലാതാക്കൽ സ്ഥിരീകരിക്കുക", + "MESSAGE": "ഏജന്റുമാർ
ഒരു ഏജൻറ് നിങ്ങളുടെ ഉപഭോക്തൃ പിന്തുണാ ടീമിലെ ഒരു അംഗമാണ്.
ഏജന്റുമാർക്ക് നിങ്ങളുടെ ഉപയോക്താക്കളിൽ നിന്നുള്ള സന്ദേശങ്ങൾ കാണാനും മറുപടി നൽകാനും കഴിയും. നിങ്ങളുടെ അക്കൗണ്ടിലുള്ള എല്ലാ ഏജന്റുമാരെയും ഈ പട്ടിക കാണിക്കുന്നു. p>
ഒരു പുതിയ ഏജന്റിനെ ചേർക്കുന്നതിന് ഏജന്റിനെ ചേർക്കുക b> ബട്ടൺ ക്ലിക്കുചെയ്യുക. നിങ്ങൾ ചേർത്ത ഏജന്റിന് അവരുടെ അക്കൗണ്ട് സജീവമാക്കുന്നതിന് ഒരു സ്ഥിരീകരണ ലിങ്കുള്ള ഇമെയിൽ ലഭിക്കും. അതിനുശേഷം അവർക്ക് ചാറ്റ് വൂട്ട് ആക്സസ് ചെയ്യാനും സന്ദേശങ്ങളോട് പ്രതികരിക്കാനും കഴിയും.
ചാറ്റ് വൂട്ടിന്റെ സവിശേഷതകളിലേക്കുള്ള ആക്സസ് ഇനിപ്പറയുന്ന റോളുകളെ അടിസ്ഥാനമാക്കിയുള്ളതാണ്.
ഏജൻറ് b> - ഈ റോൾ ഉള്ള ഏജന്റുമാർക്ക് ഇൻബോക്സുകൾ, റിപ്പോർട്ടുകൾ, സംഭാഷണങ്ങൾ എന്നിവ മാത്രമേ ആക്സസ് ചെയ്യാൻ കഴിയൂ. അവർക്ക് മറ്റ് ഏജന്റുമാരുടെയോ അല്ലെങ്കിൽ തങ്ങളുടേയോ സംഭാഷണങ്ങൾ നിർണ്ണയിക്കാനും സംഭാഷണങ്ങൾ പരിഹരിക്കാനും കഴിയും.
അഡ്മിനിസ്ട്രേറ്റർ - ഒരു സാധാരണ ഏജന്റിന്റെ പ്രത്യേകാവകാശങ്ങളോടൊപ്പം ക്രമീകരണങ്ങളും ബില്ലിംഗും ഉൾപ്പെടെ നിങ്ങളുടെ അക്കൗണ്ടിൽ ലഭ്യമായ എല്ലാ ചാറ്റ് വൂട്ട് സവിശേഷതകളിലേക്കും ആക്സസ് ഉണ്ടായിരിക്കുക. p> ", + "YES": "അതെ, ഇല്ലാതാക്കുക ", + "NO": "ഇല്ല, സൂക്ഷിക്കുക" + }, + "API": { + "SUCCESS_MESSAGE": "Automation rule deleted successfully", + "ERROR_MESSAGE": "Could not able to delete a automation rule, Please try again later" + } + }, + "EDIT": { + "TITLE": "Edit Automation Rule", + "SUBMIT": "അപ്ഡേറ്റ്", + "CANCEL_BUTTON_TEXT": "റദ്ദാക്കുക", + "API": { + "SUCCESS_MESSAGE": "Automation rule updated successfully", + "ERROR_MESSAGE": "Could not update automation rule, Please try again later" + } + }, + "CLONE": { + "TOOLTIP": "Clone", + "API": { + "SUCCESS_MESSAGE": "Automation cloned successfully", + "ERROR_MESSAGE": "Could not clone automation rule, Please try again later" + } + }, + "FORM": { + "EDIT": "എഡിറ്റുചെയ്യുക", + "CREATE": "സൃഷ്ടിക്കുക", + "DELETE": "ഇല്ലാതാക്കുക", + "CANCEL": "റദ്ദാക്കുക", + "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" + }, + "CONDITION": { + "DELETE_MESSAGE": "You need to have atleast one condition to save", + "CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes" + }, + "ACTION": { + "DELETE_MESSAGE": "You need to have atleast one action to save", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Enter your message here", + "TEAM_DROPDOWN_PLACEHOLDER": "Select teams", + "EMAIL_INPUT_PLACEHOLDER": "Enter email", + "URL_INPUT_PLACEHOLDER": "Enter URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Activate Automation Rule", + "DEACTIVATION_TITLE": "Deactivate Automation Rule", + "ACTIVATION_DESCRIPTION": "This action will activate the automation rule '{automationName}'. Are you sure you want to proceed?", + "DEACTIVATION_DESCRIPTION": "This action will deactivate the automation rule '{automationName}'. Are you sure you want to proceed?", + "ACTIVATION_SUCCESFUL": "Automation Rule Activated Successfully", + "DEACTIVATION_SUCCESFUL": "Automation Rule Deactivated Successfully", + "ACTIVATION_ERROR": "Could not Activate Automation, Please try again later", + "DEACTIVATION_ERROR": "Could not Deactivate Automation, Please try again later", + "CONFIRMATION_LABEL": "Yes", + "CANCEL_LABEL": "No" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Could not upload attachment, Please try again", + "LABEL_IDLE": "Upload Attachment", + "LABEL_UPLOADING": "അപ്ലോഡുചെയ്യുന്നു...", + "LABEL_UPLOADED": "Successfully Uploaded", + "LABEL_UPLOAD_FAILED": "Upload Failed" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Value is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "NONE_OPTION": "ഒന്നുമില്ല", + "EVENTS": { + "CONVERSATION_CREATED": "Conversation Created", + "CONVERSATION_UPDATED": "Conversation Updated", + "MESSAGE_CREATED": "Message Created", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Conversation Opened" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assign to Agent", + "ASSIGN_TEAM": "Assign a Team", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "SEND_EMAIL_TO_TEAM": "Send an Email to Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "സംഭാഷണം ഒച്ചയിലാതാക്കുക", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_WEBHOOK_EVENT": "Send Webhook Event", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "CHANGE_PRIORITY": "Change Priority", + "ADD_SLA": "Add SLA", + "OPEN_CONVERSATION": "Open conversation" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "None", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Message Type", + "MESSAGE_CONTAINS": "Message Contains", + "EMAIL": "ഇമെയിൽ", + "INBOX": "ഇൻബോക്സ്", + "CONVERSATION_LANGUAGE": "Conversation Language", + "PHONE_NUMBER": "ഫോൺ നമ്പർ", + "STATUS": "സ്റ്റാറ്റസ്", + "BROWSER_LANGUAGE": "ബ്രൗസറിന്റെ ഭാഷ", + "MAIL_SUBJECT": "Email Subject", + "COUNTRY_NAME": "രാജ്യം", + "REFERER_LINK": "Referrer Link", + "ASSIGNEE_NAME": "Assignee", + "TEAM_NAME": "Team", + "PRIORITY": "Priority", + "LABELS": "ലേബലുകൾ" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/bulkActions.json b/app/javascript/dashboard/i18n/locale/ml/bulkActions.json new file mode 100644 index 0000000..5001d61 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", + "AGENT_SELECT_LABEL": "ഏജന്റിനെ തിരഞ്ഞെടുക്കുക", + "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", + "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Go back", + "ASSIGN_LABEL": "നിയോഗിക്കുക", + "YES": "Yes", + "SEARCH_INPUT_PLACEHOLDER": "തിരയുക", + "ASSIGN_AGENT_TOOLTIP": "Assign agent", + "ASSIGN_TEAM_TOOLTIP": "Assign team", + "ASSIGN_SUCCESFUL": "Conversations assigned successfully.", + "ASSIGN_FAILED": "Failed to assign conversations. Please try again.", + "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", + "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", + "AGENT_LIST_LOADING": "Loading agents", + "UPDATE": { + "CHANGE_STATUS": "Change status", + "SNOOZE_UNTIL": "Snooze", + "UPDATE_SUCCESFUL": "Conversation status updated successfully.", + "UPDATE_FAILED": "Failed to update conversations. Please try again." + }, + "LABELS": { + "ASSIGN_LABELS": "Assign labels", + "NO_LABELS_FOUND": "ലേബലുകളൊന്നും കണ്ടെത്തിയില്ല", + "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "ASSIGN_SUCCESFUL": "Labels assigned successfully.", + "ASSIGN_FAILED": "Failed to assign labels. Please try again." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "ടീം തിരഞ്ഞെടുക്കുക", + "NONE": "ഒന്നുമില്ല", + "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", + "ASSIGN_SELECTED_TEAMS": "Assign selected team.", + "ASSIGN_SUCCESFUL": "Teams assigned successfully.", + "ASSIGN_FAILED": "Failed to assign team. Please try again." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/campaign.json b/app/javascript/dashboard/i18n/locale/ml/campaign.json new file mode 100644 index 0000000..492ce80 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "പ്രവർത്തനക്ഷമമാക്കി", + "DISABLED": "പ്രവർത്തനരഹിതമാക്കി" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "അയച്ചത്", + "BOT": "ബോട്ട്", + "FROM": "നിന്ന്", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "റദ്ദാക്കുക", + "CREATE_BUTTON_TEXT": "സൃഷ്ടിക്കുക", + "FORM": { + "TITLE": { + "LABEL": "തലക്കെട്ട്", + "PLACEHOLDER": "കാമ്പെയ്നിന്റെ പേര് നൽകുക", + "ERROR": "ശീർഷകം ആവശ്യമാണ്" + }, + "MESSAGE": { + "LABEL": "സന്ദേശം", + "PLACEHOLDER": "ദയവായി പ്രചാരണ സന്ദേശം നൽകുക", + "ERROR": "സന്ദേശം ആവശ്യമാണ്" + }, + "INBOX": { + "LABEL": "ഇൻബോക്സ് തിരഞ്ഞെടുക്കുക", + "PLACEHOLDER": "ഇൻബോക്സ് തിരഞ്ഞെടുക്കുക", + "ERROR": "ഇൻബോക്സ് ആവശ്യമാണ്" + }, + "SENT_BY": { + "LABEL": "അയച്ചത്", + "PLACEHOLDER": "Please select sender", + "ERROR": "അയച്ചയാളെ ആവശ്യമുണ്ട്" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "ദയവായി URL നൽകുക", + "ERROR": "ദയവായി സാധുവായ ഒരു യുആർഎൽ നൽകുക" + }, + "TIME_ON_PAGE": { + "LABEL": "പേജിലെ സമയം (സെക്കൻഡ്)", + "PLACEHOLDER": "ദയവായി സമയം നൽകുക", + "ERROR": "പേജിൽ സമയം ആവശ്യമാണ്" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "പ്രചാരണം പ്രവർത്തനക്ഷമമാക്കുക", + "TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours" + }, + "BUTTONS": { + "CREATE": "സൃഷ്ടിക്കുക", + "CANCEL": "റദ്ദാക്കുക" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "ഒരു തെറ്റുണ്ടായി. ദയവായി വീണ്ടും ശ്രമിക്കുക." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "ഒരു തെറ്റുണ്ടായി. ദയവായി വീണ്ടും ശ്രമിക്കുക." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "പൂർത്തിയാക്കി", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "റദ്ദാക്കുക", + "CREATE_BUTTON_TEXT": "സൃഷ്ടിക്കുക", + "FORM": { + "TITLE": { + "LABEL": "തലക്കെട്ട്", + "PLACEHOLDER": "കാമ്പെയ്നിന്റെ പേര് നൽകുക", + "ERROR": "ശീർഷകം ആവശ്യമാണ്" + }, + "MESSAGE": { + "LABEL": "സന്ദേശം", + "PLACEHOLDER": "ദയവായി പ്രചാരണ സന്ദേശം നൽകുക", + "ERROR": "സന്ദേശം ആവശ്യമാണ്" + }, + "INBOX": { + "LABEL": "ഇൻബോക്സ് തിരഞ്ഞെടുക്കുക", + "PLACEHOLDER": "ഇൻബോക്സ് തിരഞ്ഞെടുക്കുക", + "ERROR": "ഇൻബോക്സ് ആവശ്യമാണ്" + }, + "AUDIENCE": { + "LABEL": "പ്രേക്ഷകർ", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "പ്രേക്ഷകർ ആവശ്യമാണ്" + }, + "SCHEDULED_AT": { + "LABEL": "ഷെഡ്യൂൾ ചെയ്ത സമയം", + "PLACEHOLDER": "ദയവായി സമയം തിരഞ്ഞെടുക്കുക", + "ERROR": "ഷെഡ്യൂൾ ചെയ്ത സമയം ആവശ്യമാണ്" + }, + "BUTTONS": { + "CREATE": "സൃഷ്ടിക്കുക", + "CANCEL": "റദ്ദാക്കുക" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "ഒരു തെറ്റുണ്ടായി. ദയവായി വീണ്ടും ശ്രമിക്കുക." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No WhatsApp campaigns are available", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "പൂർത്തിയാക്കി", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "റദ്ദാക്കുക", + "CREATE_BUTTON_TEXT": "സൃഷ്ടിക്കുക", + "FORM": { + "TITLE": { + "LABEL": "തലക്കെട്ട്", + "PLACEHOLDER": "കാമ്പെയ്നിന്റെ പേര് നൽകുക", + "ERROR": "ശീർഷകം ആവശ്യമാണ്" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "ഇൻബോക്സ് ആവശ്യമാണ്" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "Process {templateName}", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLES_LABEL": "Variables", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "പ്രേക്ഷകർ", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "പ്രേക്ഷകർ ആവശ്യമാണ്" + }, + "SCHEDULED_AT": { + "LABEL": "ഷെഡ്യൂൾ ചെയ്ത സമയം", + "PLACEHOLDER": "ദയവായി സമയം തിരഞ്ഞെടുക്കുക", + "ERROR": "ഷെഡ്യൂൾ ചെയ്ത സമയം ആവശ്യമാണ്" + }, + "BUTTONS": { + "CREATE": "സൃഷ്ടിക്കുക", + "CANCEL": "റദ്ദാക്കുക" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "ഒരു തെറ്റുണ്ടായി. ദയവായി വീണ്ടും ശ്രമിക്കുക." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "ഇല്ലാതാക്കുമെന്ന് ഉറപ്പാണോ?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "ഇല്ലാതാക്കുക", + "API": { + "SUCCESS_MESSAGE": "കാമ്പെയ്ൻ വിജയകരമായി ഇല്ലാതാക്കിയിരിക്കുന്നു", + "ERROR_MESSAGE": "ഒരു തെറ്റുണ്ടായി. ദയവായി വീണ്ടും ശ്രമിക്കുക." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/ml/cannedMgmt.json new file mode 100644 index 0000000..6e66761 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "ക്യാൻഡ് പ്രതികരണങ്ങൾ", + "LEARN_MORE": "Learn more about canned responses", + "DESCRIPTION": "Canned Responses are pre-written reply templates that help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a canned response during a conversation. ", + "HEADER_BTN_TXT": "Add canned response", + "LOADING": "Fetching canned responses...", + "SEARCH_404": "ഈ ചോദ്യവുമായി പൊരുത്തപ്പെടുന്ന ഇനങ്ങളൊന്നുമില്ല.", + "LIST": { + "404": "ഈ അക്കൗണ്ടിൽ ക്യാൻഡ് പ്രതികരണങ്ങളൊന്നും ലഭ്യമല്ല.", + "TITLE": "ക്യാൻഡ് പ്രതികരണങ്ങൾ നിയന്ത്രിക്കുക", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "TABLE_HEADER": { + "SHORT_CODE": "Short code", + "CONTENT": "ഉള്ളടക്കം", + "ACTIONS": "പ്രവർത്തനങ്ങൾ" + } + }, + "ADD": { + "TITLE": "Add canned response", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "CANCEL_BUTTON_TEXT": "റദ്ദാക്കുക", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a short code.", + "ERROR": "Short Code is required." + }, + "CONTENT": { + "LABEL": "സന്ദേശം", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "സമർപ്പിക്കുക" + }, + "API": { + "SUCCESS_MESSAGE": "Canned response added successfully.", + "ERROR_MESSAGE": "സെർവറിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക" + } + }, + "EDIT": { + "TITLE": "Edit canned response", + "CANCEL_BUTTON_TEXT": "റദ്ദാക്കുക", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a shortcode.", + "ERROR": "Short code is required." + }, + "CONTENT": { + "LABEL": "സന്ദേശം", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "സമർപ്പിക്കുക" + }, + "BUTTON_TEXT": "എഡിറ്റുചെയ്യുക", + "API": { + "SUCCESS_MESSAGE": "Canned response is updated successfully.", + "ERROR_MESSAGE": "സെർവറിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക" + } + }, + "DELETE": { + "BUTTON_TEXT": "ഇല്ലാതാക്കുക", + "API": { + "SUCCESS_MESSAGE": "Canned response deleted successfully.", + "ERROR_MESSAGE": "സെർവറിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക" + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "ഇല്ലാതാക്കണമെന്ന് ഉറപ്പാണോ", + "YES": "Yes, delete ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/chatlist.json b/app/javascript/dashboard/i18n/locale/ml/chatlist.json new file mode 100644 index 0000000..cbe3f82 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "സംഭാഷണങ്ങൾ ലഭ്യമാക്കുന്നു", + "LOAD_MORE_CONVERSATIONS": "കൂടുതൽ സംഭാഷണങ്ങൾ ലോഡുചെയ്യുക", + "EOF": "എല്ലാ സംഭാഷണങ്ങളും ലോഡുചെയ്തു 🎉", + "LIST": { + "404": "ഈ ഗ്രൂപ്പിൽ സജീവ സംഭാഷണങ്ങളൊന്നുമില്ല." + }, + "FAILED_TO_SEND": "Failed to send", + "TAB_HEADING": "സംഭാഷണങ്ങൾ", + "MENTION_HEADING": "പരാമർശിക്കുന്നു", + "UNATTENDED_HEADING": "Unattended", + "SEARCH": { + "INPUT": "ആളുകൾ, ചാറ്റുകൾ, ക്യാൻഡ് മറുപടികൾ എന്നിവയ്ക്കായി തിരയുക .." + }, + "FILTER_ALL": "എല്ലാം", + "ASSIGNEE_TYPE_TABS": { + "me": "എന്റേത്", + "unassigned": "നിയുക്തമാക്കാത്തത്", + "all": "എല്ലാം" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "സജീവം" + }, + "resolved": { + "TEXT": "പരിഹരിച്ചത്" + }, + "pending": { + "TEXT": "കെട്ടിക്കിടക്കുന്നു" + }, + "snoozed": { + "TEXT": "സ്നൂസ് ചെയ്തു" + }, + "all": { + "TEXT": "എല്ലാം" + } + }, + "VIEW_FILTER": "കാണുക", + "SORT_TOOLTIP_LABEL": "Sort conversations", + "CHAT_SORT": { + "STATUS": "സ്റ്റാറ്റസ്", + "ORDER_BY": "Order by" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Created", + "OLDEST": "Created at:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Last activity:", + "ACTIVE": "Last activity" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Last activity: Oldest first" + }, + "last_activity_at_desc": { + "TEXT": "Last activity: Newest first" + }, + "created_at_desc": { + "TEXT": "Created at: Newest first" + }, + "created_at_asc": { + "TEXT": "Created at: Oldest first" + }, + "priority_desc": { + "TEXT": "Priority: Highest first" + }, + "priority_asc": { + "TEXT": "Priority: Lowest first" + }, + "waiting_since_asc": { + "TEXT": "Pending Response: Longest first" + }, + "waiting_since_desc": { + "TEXT": "Pending Response: Shortest first" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "ചിത്ര സന്ദേശം" + }, + "audio": { + "CONTENT": "ഓഡിയോ സന്ദേശം" + }, + "video": { + "CONTENT": "വീഡിയോ സന്ദേശം" + }, + "file": { + "CONTENT": "ഫയൽ അറ്റാച്ചുമെന്റ്" + }, + "location": { + "CONTENT": "സ്ഥാനം" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "ഒരു യു. ആർ. എൽ പങ്കിട്ടു" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Sort conversation", + "DROPDOWN_TITLE": "Sort by", + "ITEMS": { + "LATEST": { + "NAME": "Last activity at", + "LABEL": "Last activity" + }, + "CREATED_AT": { + "NAME": "എന്ന സ്ഥലത്ത് സൃഷ്ടിച്ചു", + "LABEL": "എന്ന സ്ഥലത്ത് സൃഷ്ടിച്ചു" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Last user message at", + "LABEL": "Last message" + } + } + }, + "RECEIVED_VIA_EMAIL": "ഇമെയിൽ വഴി ലഭിച്ചു", + "VIEW_TWEET_IN_TWITTER": "ട്വിറ്ററിൽ ട്വീറ്റ് കാണുക", + "REPLY_TO_TWEET": "ഈ ട്വീറ്റിന് മറുപടി നൽകുക", + "LINK_TO_STORY": "Go to instagram story", + "SENT": "വിജയകരമായി അയച്ചു", + "READ": "Read successfully", + "DELIVERED": "Delivered successfully", + "NO_MESSAGES": "സന്ദേശങ്ങളൊന്നുമില്ല", + "NO_CONTENT": "ഉള്ളടക്കമൊന്നും ലഭ്യമല്ല", + "HIDE_QUOTED_TEXT": "ഉദ്ധരിച്ച വാചകം മറയ്ക്കുക", + "SHOW_QUOTED_TEXT": "ഉദ്ധരിച്ച വാചകം കാണിക്കുക", + "MESSAGE_READ": "Read", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/companies.json b/app/javascript/dashboard/i18n/locale/ml/companies.json new file mode 100644 index 0000000..6493041 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "പേര്", + "DOMAIN": "Domain", + "CREATED_AT": "എന്ന സ്ഥലത്ത് സൃഷ്ടിച്ചു", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/components.json b/app/javascript/dashboard/i18n/locale/ml/components.json new file mode 100644 index 0000000..b0bc6e3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} of {totalPages} pages" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "ഒരു ഫലവും കണ്ടെത്താനായില്ല.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} more" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "ഒരു ഫലവും കണ്ടെത്താനായില്ല.", + "SEARCHING": "Searching..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "റദ്ദാക്കുക", + "CONFIRM": "സ്ഥിരീകരിക്കുക" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Search country", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Please select a dial code from the list" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Author is not available" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Learn more", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/contact.json b/app/javascript/dashboard/i18n/locale/ml/contact.json new file mode 100644 index 0000000..0217995 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "ലഭ്യമല്ല", + "EMAIL_ADDRESS": "ഇമെയിൽ വിലാസം", + "PHONE_NUMBER": "ഫോൺ നമ്പർ", + "IDENTIFIER": "Identifier", + "COPY_SUCCESSFUL": "ക്ലിപ്പ്ബോർഡിലേക്ക് വിജയകരമായി പകർത്തി", + "COMPANY": "കമ്പനി", + "LOCATION": "സ്ഥാനം", + "BROWSER_LANGUAGE": "ബ്രൗസറിന്റെ ഭാഷ", + "CONVERSATION_TITLE": "സംഭാഷണ വിശദാംശങ്ങൾ", + "VIEW_PROFILE": "വ്യക്തിവിവരങ്ങൾ കാണുക", + "BROWSER": "ബ്രൗസർ", + "OS": "ഓപ്പറേറ്റിംഗ് സിസ്റ്റം", + "INITIATED_FROM": "ആരംഭിച്ച ആൾ ", + "INITIATED_AT": "ആരംഭിച്ച സമയം ", + "IP_ADDRESS": "IP വിലാസം", + "CREATED_AT_LABEL": "Created", + "NEW_MESSAGE": "പുതിയ സന്ദേശം", + "CALL": "Call", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "ഈ കോൺടാക്റ്റുമായി മുമ്പത്തെ സംഭാഷണങ്ങളൊന്നും ബന്ധപ്പെടുത്തിയിട്ടില്ല.", + "TITLE": "മുമ്പത്തെ സംഭാഷണങ്ങൾ" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Contact Labels", + "ERROR": "ലേബലുകൾ അപ്ഡേറ്റ് ചെയ്യാനായില്ല" + }, + "CONVERSATION": { + "TITLE": "സംഭാഷണ ലേബലുകൾ", + "ADD_BUTTON": "ലേബലുകൾ ചേർക്കുക" + }, + "LABEL_SELECT": { + "TITLE": "ലേബലുകൾ ചേർക്കുക", + "PLACEHOLDER": "ലേബലുകൾ തിരയുക", + "NO_RESULT": "ലേബലുകളൊന്നും കണ്ടെത്തിയില്ല", + "CREATE_LABEL": "Create new label" + } + }, + "MERGE_CONTACT": "കോൺടാക്റ്റ് ലയിപ്പിക്കുക", + "CONTACT_ACTIONS": "Contact actions", + "MUTE_CONTACT": "Block Contact", + "UNMUTE_CONTACT": "Unblock Contact", + "MUTED_SUCCESS": "This contact is blocked successfully. You will not be notified of any future conversations.", + "UNMUTED_SUCCESS": "This contact is unblocked successfully.", + "SEND_TRANSCRIPT": "ട്രാൻസ്ക്രിപ്റ്റ് അയയ്ക്കുക", + "EDIT_LABEL": "എഡിറ്റുചെയ്യുക", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "ഇഷ്ടാനുസൃത ആട്രിബ്യൂട്ടുകൾ", + "CONTACT_LABELS": "Contact Labels", + "PREVIOUS_CONVERSATIONS": "മുമ്പത്തെ സംഭാഷണങ്ങൾ", + "NO_RECORDS_FOUND": "No attributes found" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "കോൺടാക്റ്റ് എഡിറ്റുചെയ്യുക", + "TITLE": "കോൺടാക്റ്റ് എഡിറ്റുചെയ്യുക", + "DESC": "കോൺടാക്റ്റ് വിശദാംശങ്ങൾ എഡിറ്റുചെയ്യുക" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "കോൺടാക്റ്റ് ഇല്ലാതാക്കുക", + "TITLE": "കോൺടാക്റ്റ് ഇല്ലാതാക്കുക", + "DESC": "ബന്ധപ്പെടാനുള്ള വിശദാംശങ്ങൾ ഇല്ലാതാക്കുക", + "CONFIRM": { + "TITLE": "ഇല്ലാതാക്കൽ സ്ഥിരീകരിക്കുക", + "MESSAGE": "
ഏജന്റുമാർ
ഒരു ഏജൻറ് നിങ്ങളുടെ ഉപഭോക്തൃ പിന്തുണാ ടീമിലെ ഒരു അംഗമാണ്.
ഏജന്റുമാർക്ക് നിങ്ങളുടെ ഉപയോക്താക്കളിൽ നിന്നുള്ള സന്ദേശങ്ങൾ കാണാനും മറുപടി നൽകാനും കഴിയും. നിങ്ങളുടെ അക്കൗണ്ടിലുള്ള എല്ലാ ഏജന്റുമാരെയും ഈ പട്ടിക കാണിക്കുന്നു. p>
ഒരു പുതിയ ഏജന്റിനെ ചേർക്കുന്നതിന് ഏജന്റിനെ ചേർക്കുക b> ബട്ടൺ ക്ലിക്കുചെയ്യുക. നിങ്ങൾ ചേർത്ത ഏജന്റിന് അവരുടെ അക്കൗണ്ട് സജീവമാക്കുന്നതിന് ഒരു സ്ഥിരീകരണ ലിങ്കുള്ള ഇമെയിൽ ലഭിക്കും. അതിനുശേഷം അവർക്ക് ചാറ്റ് വൂട്ട് ആക്സസ് ചെയ്യാനും സന്ദേശങ്ങളോട് പ്രതികരിക്കാനും കഴിയും.
ചാറ്റ് വൂട്ടിന്റെ സവിശേഷതകളിലേക്കുള്ള ആക്സസ് ഇനിപ്പറയുന്ന റോളുകളെ അടിസ്ഥാനമാക്കിയുള്ളതാണ്.
ഏജൻറ് b> - ഈ റോൾ ഉള്ള ഏജന്റുമാർക്ക് ഇൻബോക്സുകൾ, റിപ്പോർട്ടുകൾ, സംഭാഷണങ്ങൾ എന്നിവ മാത്രമേ ആക്സസ് ചെയ്യാൻ കഴിയൂ. അവർക്ക് മറ്റ് ഏജന്റുമാരുടെയോ അല്ലെങ്കിൽ തങ്ങളുടേയോ സംഭാഷണങ്ങൾ നിർണ്ണയിക്കാനും സംഭാഷണങ്ങൾ പരിഹരിക്കാനും കഴിയും.
അഡ്മിനിസ്ട്രേറ്റർ - ഒരു സാധാരണ ഏജന്റിന്റെ പ്രത്യേകാവകാശങ്ങളോടൊപ്പം ക്രമീകരണങ്ങളും ബില്ലിംഗും ഉൾപ്പെടെ നിങ്ങളുടെ അക്കൗണ്ടിൽ ലഭ്യമായ എല്ലാ ചാറ്റ് വൂട്ട് സവിശേഷതകളിലേക്കും ആക്സസ് ഉണ്ടായിരിക്കുക. p> ", + "YES": "അതെ, ഇല്ലാതാക്കുക", + "NO": "No, Keep" + }, + "API": { + "SUCCESS_MESSAGE": "കോൺടാക്റ്റ് വിജയകരമായി ഇല്ലാതാക്കിയിരിക്കുന്നു", + "ERROR_MESSAGE": "കോൺടാക്റ്റ് ഇല്ലാതാക്കാൻ കഴിഞ്ഞില്ല. ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "സമർപ്പിക്കുക", + "CANCEL": "റദ്ദാക്കുക", + "AVATAR": { + "LABEL": "കോൺടാക്റ്റ് ലഘുചിത്രം" + }, + "NAME": { + "PLACEHOLDER": "കോൺടാക്റ്റിന്റെ മുഴുവൻ പേര് നൽകുക", + "LABEL": "പൂർണ്ണമായ പേര്" + }, + "BIO": { + "PLACEHOLDER": "കോൺടാക്റ്റിന്റെ ബയോ നൽകുക", + "LABEL": "വിവരണം" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "കോൺടാക്റ്റിന്റെ ഇമെയിൽ വിലാസം നൽകുക", + "LABEL": "ഇമെയിൽ വിലാസം", + "DUPLICATE": "ഈ ഇമെയിൽ വിലാസം മറ്റൊരു കോൺടാക്റ്റിനായി ഉപയോഗത്തിലാണ്.", + "ERROR": "ദയവായി സാധുവായ ഒരു ഇമെയിൽ വിലാസം നൽകുക." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "കോൺടാക്റ്റിന്റെ ഫോൺ നമ്പർ നൽകുക", + "LABEL": "ഫോൺ നമ്പർ", + "HELP": "ഫോൺ നമ്പർ E.164 ഫോർമാറ്റ് ആയിരിക്കണം ഉദാ: +1415555555 [+][രാജ്യ കോഡ്][ഏരിയ കോഡ്][പ്രാദേശിക ഫോൺ നമ്പർ]", + "ERROR": "ഫോൺ നമ്പർ ശൂന്യമോ E.164 ഫോർമാറ്റിലുള്ളതോ ആയിരിക്കണം", + "DIAL_CODE_ERROR": "Please select a dial code from the list", + "DUPLICATE": "ഈ ഫോൺ നമ്പർ മറ്റൊരു കോൺടാക്റ്റിനായി ഉപയോഗിക്കുന്നു." + }, + "LOCATION": { + "PLACEHOLDER": "കോൺടാക്റ്റിന്റെ സ്ഥാനം നൽകുക", + "LABEL": "സ്ഥാനം" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "കമ്പനിയുടെ പേര് നൽകുക", + "LABEL": "കമ്പനിയുടെ പേര്" + }, + "COUNTRY": { + "PLACEHOLDER": "Enter the country name", + "LABEL": "രാജ്യത്തിന്റെ പേര്", + "SELECT_PLACEHOLDER": "Select", + "REMOVE": "നീക്കം ചെയ്യുക", + "SELECT_COUNTRY": "Select Country" + }, + "CITY": { + "PLACEHOLDER": "Enter the city name", + "LABEL": "City Name" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Facebook ഉപയോക്തൃനാമം നൽകുക", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Twitter ഉപയോക്തൃനാമം നൽകുക", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Linkedin ഉപയോക്തൃനാമം നൽകുക", + "LABEL": "Linkedin" + }, + "GITHUB": { + "PLACEHOLDER": "Github ഉപയോക്തൃനാമം നൽകുക", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Contact avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later." + } + }, + "SUCCESS_MESSAGE": "കോൺടാക്റ്റ് വിജയകരമായി സേവ് ചെയ്തിരിക്കുന്നു", + "ERROR_MESSAGE": "ഒരു പിശക് ഉണ്ടായിരുന്നു, ദയവായി വീണ്ടും ശ്രമിക്കുക" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "സംഭാഷണം ആരംഭിക്കുക", + "TITLE": "പുതിയ സംഭാഷണം", + "DESC": "ഒരു പുതിയ സന്ദേശം അയച്ചുകൊണ്ട് ഒരു പുതിയ സംഭാഷണം ആരംഭിക്കുക.", + "NO_INBOX": "ഈ കോൺടാക്റ്റുമായി ഒരു പുതിയ സംഭാഷണം ആരംഭിക്കുന്നതിന് ഒരു ഇൻബോക്സ് കണ്ടെത്താനായില്ല.", + "FORM": { + "TO": { + "LABEL": "To" + }, + "INBOX": { + "LABEL": "ഇൻബോക്സ്", + "PLACEHOLDER": "Choose source inbox", + "ERROR": "ഒരു ഇൻബോക്സ് തിരഞ്ഞെടുക്കുക" + }, + "SUBJECT": { + "LABEL": "വിഷയം", + "PLACEHOLDER": "വിഷയം", + "ERROR": "വിഷയം ശൂന്യമാക്കാൻ പാടില്ല" + }, + "MESSAGE": { + "LABEL": "സന്ദേശം", + "PLACEHOLDER": "നിങ്ങളുടെ സന്ദേശം ഇവിടെ എഴുതുക", + "ERROR": "സന്ദേശം ശൂന്യമാക്കാൻ കഴിയില്ല" + }, + "ATTACHMENTS": { + "SELECT": "Choose files", + "HELP_TEXT": "Drag and drop files here or choose files to attach" + }, + "SUBMIT": "സന്ദേശം അയയ്ക്കുക", + "CANCEL": "റദ്ദാക്കുക", + "SUCCESS_MESSAGE": "സന്ദേശം അയച്ചു!", + "GO_TO_CONVERSATION": "കാണുക", + "ERROR_MESSAGE": "അയയ്ക്കാനായില്ല! വീണ്ടും ശ്രമിക്കുക" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "സോഷ്യൽ പ്രൊഫൈലുകൾ" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Add custom attribute", + "COPY_SUCCESSFUL": "ക്ലിപ്പ്ബോർഡിലേക്ക് വിജയകരമായി പകർത്തി", + "SHOW_MORE": "Show all attributes", + "SHOW_LESS": "Show less attributes", + "ACTIONS": { + "COPY": "Copy attribute", + "DELETE": "Delete attribute", + "EDIT": "Edit attribute" + }, + "ADD": { + "TITLE": "Create custom attribute", + "DESC": "Add custom information to this contact." + }, + "FORM": { + "CREATE": "Add attribute", + "CANCEL": "റദ്ദാക്കുക", + "NAME": { + "LABEL": "Custom attribute name", + "PLACEHOLDER": "Eg: shopify id", + "ERROR": "Invalid custom attribute name" + }, + "VALUE": { + "LABEL": "Attribute value", + "PLACEHOLDER": "Eg: 11901 " + }, + "ADD": { + "TITLE": "Create new attribute ", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Select value", + "SEARCH_INPUT_PLACEHOLDER": "Search value", + "NO_RESULT": "No result found" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Valid value is required", + "INVALID_URL": "Invalid URL", + "INVALID_INPUT": "Invalid Input" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Merge contacts", + "DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact’ s attributes will take precedence.", + "PRIMARY": { + "TITLE": "Primary contact", + "HELP_LABEL": "To be deleted" + }, + "PARENT": { + "TITLE": "Contact to merge", + "PLACEHOLDER": "Search for a contact", + "HELP_LABEL": "To be kept" + }, + "SUMMARY": { + "TITLE": "Summary", + "DELETE_WARNING": "Contact of {primaryContactName} will be deleted.", + "ATTRIBUTE_WARNING": "Contact details of {primaryContactName} will be copied to {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": " Merge contacts", + "CANCEL": "റദ്ദാക്കുക", + "CHILD_CONTACT": { + "ERROR": "Select a child contact to merge" + }, + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "കോൺടാക്റ്റുകൾ", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "Active contacts", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "സന്ദേശം", + "SEND_MESSAGE": "സന്ദേശം അയയ്ക്കുക", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "കോൺടാക്റ്റുകൾ" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Add contact", + "EXPORT_CONTACT": "Export contacts", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Save contact", + "EMAIL_ADDRESS_DUPLICATE": "ഈ ഇമെയിൽ വിലാസം മറ്റൊരു കോൺടാക്റ്റിനായി ഉപയോഗത്തിലാണ്.", + "PHONE_NUMBER_DUPLICATE": "ഈ ഫോൺ നമ്പർ മറ്റൊരു കോൺടാക്റ്റിനായി ഉപയോഗിക്കുന്നു.", + "SUCCESS_MESSAGE": "കോൺടാക്റ്റ് വിജയകരമായി സേവ് ചെയ്തിരിക്കുന്നു", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "This contact is unblocked successfully", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Import contacts", + "DESCRIPTION": "Import contacts through a CSV file.", + "DOWNLOAD_LABEL": "Download a sample csv.", + "LABEL": "CSV ഫയൽ:", + "CHOOSE_FILE": "Choose file", + "CHANGE": "മാറ്റം വരുത്തുക", + "CANCEL": "റദ്ദാക്കുക", + "IMPORT": "Import", + "SUCCESS_MESSAGE": "You will be notified via email when the import is complete.", + "ERROR_MESSAGE": "ഒരു പിശക് ഉണ്ടായിരുന്നു, ദയവായി വീണ്ടും ശ്രമിക്കുക" + }, + "EXPORT_CONTACT": { + "TITLE": "Export contacts", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Export", + "SUCCESS_MESSAGE": "Export is in progress, You will be notified via email when export file is ready to dowanlod.", + "ERROR_MESSAGE": "ഒരു പിശക് ഉണ്ടായിരുന്നു, ദയവായി വീണ്ടും ശ്രമിക്കുക" + }, + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "പേര്", + "EMAIL": "ഇമെയിൽ", + "PHONE_NUMBER": "ഫോൺ നമ്പർ", + "COMPANY": "കമ്പനി", + "COUNTRY": "രാജ്യം", + "CITY": "നഗരം", + "LAST_ACTIVITY": "Last activity", + "CREATED_AT": "എന്ന സ്ഥലത്ത് സൃഷ്ടിച്ചു" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "നിങ്ങൾക്ക് ഈ ഫിൽട്ടർ സേവ് ചെയ്യണോ?", + "CONFIRM": "ഫിൽട്ടർ സേവ് ചെയുക", + "LABEL": "പേര്", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "ഇല്ലാതാക്കൽ സ്ഥിരീകരിക്കുക", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "അതെ, ഇല്ലാതാക്കുക", + "CANCEL": "No, Cancel", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "പേര്", + "EMAIL": "ഇമെയിൽ", + "PHONE_NUMBER": "ഫോൺ നമ്പർ", + "IDENTIFIER": "Identifier", + "COUNTRY": "രാജ്യം", + "CITY": "നഗരം", + "CREATED_AT": "എന്ന സ്ഥലത്ത് സൃഷ്ടിച്ചു", + "LAST_ACTIVITY": "Last activity", + "REFERER_LINK": "റഫറർ ലിങ്ക്", + "BLOCKED": "Blocked", + "BLOCKED_TRUE": "True", + "BLOCKED_FALSE": "False", + "BUTTONS": { + "CLEAR_FILTERS": "Clear filters", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "ഫിൽട്ടറുകൾ പ്രയോഗിക്കുക", + "ADD_FILTER": "ഫിൽട്ടർ ചേർക്കുക" + }, + "TITLE": "Filter contacts", + "EDIT_SEGMENT": "Edit segment", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Clear filters" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "വിശദാംശങ്ങൾ കാണുക", + "EDIT_DETAILS_FORM": { + "TITLE": "കോൺടാക്റ്റ് വിശദാംശങ്ങൾ എഡിറ്റുചെയ്യുക", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "ഈ ഇമെയിൽ വിലാസം മറ്റൊരു കോൺടാക്റ്റിനായി ഉപയോഗത്തിലാണ്." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "ഈ ഫോൺ നമ്പർ മറ്റൊരു കോൺടാക്റ്റിനായി ഉപയോഗിക്കുന്നു." + }, + "CITY": { + "PLACEHOLDER": "Enter the city name" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "കമ്പനിയുടെ പേര് നൽകുക" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "This action is permanent and irreversible.", + "BUTTON": "Delete now" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "കോൺടാക്റ്റ് ഇല്ലാതാക്കുക", + "DELETE_DIALOG": { + "TITLE": "ഇല്ലാതാക്കൽ സ്ഥിരീകരിക്കുക", + "DESCRIPTION": "Are you sure you want to delete this contact?", + "CONFIRM": "അതെ, ഇല്ലാതാക്കുക", + "API": { + "SUCCESS_MESSAGE": "കോൺടാക്റ്റ് വിജയകരമായി ഇല്ലാതാക്കിയിരിക്കുന്നു", + "ERROR_MESSAGE": "കോൺടാക്റ്റ് ഇല്ലാതാക്കാൻ കഴിഞ്ഞില്ല. ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributes", + "HISTORY": "History", + "NOTES": "Notes", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "ഈ കോൺടാക്റ്റുമായി മുമ്പത്തെ സംഭാഷണങ്ങളൊന്നും ബന്ധപ്പെടുത്തിയിട്ടില്ല" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "Yes", + "NO": "No", + "TRIGGER": { + "SELECT": "Select value", + "INPUT": "Enter value" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "Valid value is required", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "Invalid URL", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "No attributes found", + "API": { + "SUCCESS_MESSAGE": "Attribute updated successfully", + "DELETE_SUCCESS_MESSAGE": "Attribute deleted successfully", + "UPDATE_ERROR": "Unable to update attribute. Please try again later", + "DELETE_ERROR": "Unable to delete attribute. Please try again later" + } + }, + "MERGE": { + "TITLE": "കോൺടാക്റ്റ് ലയിപ്പിക്കുക", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Primary contact", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "To be deleted", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Search for a contact", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!", + "IS_SEARCHING": "Searching...", + "BUTTONS": { + "CANCEL": "റദ്ദാക്കുക", + "CONFIRM": "കോൺടാക്റ്റ് ലയിപ്പിക്കുക" + } + }, + "NOTES": { + "PLACEHOLDER": "Add a note", + "WROTE": "wrote", + "YOU": "You", + "SAVE": "Save note", + "ADD_NOTE": "Add contact note", + "EXPAND": "Expand", + "COLLAPSE": "Collapse", + "NO_NOTES": "No notes, you can add notes from the contact details page.", + "EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "No contacts found in this account", + "SUBTITLE": "Start adding new contacts by clicking on the button below", + "BUTTON_LABEL": "Add contact", + "SEARCH_EMPTY_STATE_TITLE": "കോൺടാക്റ്റുകളൊന്നും നിങ്ങളുടെ തിരയലുമായി പൊരുത്തപ്പെടുന്നില്ല", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Assign Labels", + "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "ഇല്ലാതാക്കുക", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "കോൺടാക്റ്റ് ഇല്ലാതാക്കുക" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "കാണുക", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "To:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Subject :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "Bcc:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "Bcc" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "നിങ്ങളുടെ സന്ദേശം ഇവിടെ എഴുതുക..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Variables", + "BACK": "Go back", + "SEND_MESSAGE": "സന്ദേശം അയയ്ക്കുക" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Go back", + "SEND_MESSAGE": "സന്ദേശം അയയ്ക്കുക" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/contactFilters.json b/app/javascript/dashboard/i18n/locale/ml/contactFilters.json new file mode 100644 index 0000000..3b89f3a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filter Contacts", + "SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.", + "EDIT_CUSTOM_SEGMENT": "Edit Segment", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your segment.", + "ADD_NEW_FILTER": "ഫിൽട്ടർ ചേർക്കുക", + "CLEAR_ALL_FILTERS": "Clear All Filters", + "FILTER_DELETE_ERROR": "സേവ് ചെയ്യാൻ നിങ്ങൾക്ക് ഒരു ഫിൽട്ടറെങ്കിലും ഉണ്ടായിരിക്കണം", + "SUBMIT_BUTTON_LABEL": "സമർപ്പിക്കുക", + "UPDATE_BUTTON_LABEL": "Update Segment", + "CANCEL_BUTTON_LABEL": "റദ്ദാക്കുക", + "CLEAR_BUTTON_LABEL": "ഫിൽട്ടറുകൾ മായ്ക്കുക", + "EMPTY_VALUE_ERROR": "Value is required", + "SEGMENT_LABEL": "Segment Name", + "SEGMENT_QUERY_LABEL": "Segment Query", + "TOOLTIP_LABEL": "Filter contacts", + "QUERY_DROPDOWN_LABELS": { + "AND": "ഒപ്പം", + "OR": "അഥവാ" + }, + "OPERATOR_LABELS": { + "equal_to": "തുല്യമാണ്", + "not_equal_to": "തുല്യമല്ല", + "contains": "അടങ്ങിയിരിക്കുന്നു", + "does_not_contain": "ഉൾപ്പെട്ടിട്ടില്ല", + "is_present": "നിലവിലുണ്ട്", + "is_not_present": "നിലവിലില്ല", + "is_greater_than": "Is greater than", + "is_lesser_than": "Is lesser than", + "days_before": "Is x days before" + }, + "ERRORS": { + "VALUE_REQUIRED": "Value is required" + }, + "ATTRIBUTES": { + "NAME": "പേര്", + "EMAIL": "ഇമെയിൽ", + "PHONE_NUMBER": "ഫോൺ നമ്പർ", + "IDENTIFIER": "Identifier", + "CITY": "നഗരം", + "COUNTRY": "രാജ്യം", + "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_TEXT": "Text", + "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Created At", + "LAST_ACTIVITY": "അവസാന പ്രവർത്തനം", + "REFERER_LINK": "Referrer link", + "BLOCKED": "Blocked", + "LABELS": "ലേബലുകൾ" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard Filters", + "ADDITIONAL_FILTERS": "Additional Filters", + "CUSTOM_ATTRIBUTES": "ഇഷ്ടാനുസൃത ആട്രിബ്യൂട്ടുകൾ" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/contentTemplates.json b/app/javascript/dashboard/i18n/locale/ml/contentTemplates.json new file mode 100644 index 0000000..ff9caa4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "NO_CONTENT": "No content", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Text" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "മടങ്ങിപ്പോവുക", + "SEND_MESSAGE_BUTTON": "Send Message" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/conversation.json b/app/javascript/dashboard/i18n/locale/ml/conversation.json new file mode 100644 index 0000000..2b8a41d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "ഇടത് പാളിയിൽ നിന്ന് ഒരു സംഭാഷണം തിരഞ്ഞെടുക്കുക", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", + "404": "Sorry, we cannot find the conversation. Please try again", + "SWITCH_VIEW_LAYOUT": "Switch the layout", + "DASHBOARD_APP_TAB_MESSAGES": "Messages", + "UNVERIFIED_SESSION": "The identity of this user is not verified", + "NO_MESSAGE_1": "നിങ്ങളുടെ ഇൻബോക്സിൽ ഉപഭോക്താക്കളിൽ നിന്ന് സന്ദേശങ്ങളൊന്നും ഇല്ലെന്ന് തോന്നുന്നു.", + "NO_MESSAGE_2": " നിങ്ങളുടെ പേജിലേക്ക് ഒരു സന്ദേശം അയയ്ക്കാൻ!", + "NO_INBOX_1": "നിങ്ങൾ ഇത് വരെ ഇൻബോക്സുകൾ ഒന്നും സ്രഷ്ടിച്ചിട്ടില്ലെന്നു തോന്നുന്നു.", + "NO_INBOX_2": " ആരംഭിക്കുന്നതിന്", + "NO_INBOX_AGENT": "നിങ്ങൾ ഏതെങ്കിലും ഇൻബോക്സിന്റെ ഭാഗമല്ലെന്ന് തോന്നുന്നു. നിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്ററുമായി ബന്ധപ്പെടുക", + "SEARCH_MESSAGES": "സംഭാഷണങ്ങളിൽ സന്ദേശങ്ങൾക്കായി തിരയുക", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "to open command menu", + "KEYBOARD_SHORTCUTS": "to view keyboard shortcuts" + }, + "SEARCH": { + "TITLE": "സന്ദേശങ്ങൾ തിരയുക", + "RESULT_TITLE": "Search Results", + "LOADING_MESSAGE": "ഡാറ്റ ലോഡുചെയ്യുന്നു...", + "PLACEHOLDER": "സന്ദേശങ്ങൾ തിരയാൻ ഏതെങ്കിലും വാചകം ടൈപ്പുചെയ്യുക", + "NO_MATCHING_RESULTS": "No results found." + }, + "UNREAD_MESSAGES": "വായിക്കാത്ത സന്ദേശങ്ങൾ", + "UNREAD_MESSAGE": "വായിക്കാത്ത സന്ദേശം", + "CLICK_HERE": "ഇവിടെ ക്ലിക്കു ചെയ്യുക", + "LOADING_INBOXES": "ഇൻബോക്സുകൾ ലോഡു ചെയ്യുന്നു", + "LOADING_CONVERSATIONS": "സംഭാഷണങ്ങൾ ലോഡു ചെയ്യുന്നു", + "CANNOT_REPLY": "നിങ്ങൾക്ക് മറുപടി നൽകാൻ കഴിയില്ല", + "24_HOURS_WINDOW": "24 മണിക്കൂർ സന്ദേശ വിൻഡോ നിയന്ത്രണം", + "48_HOURS_WINDOW": "48 മണിക്കൂർ സന്ദേശ വിൻഡോ നിയന്ത്രണം", + "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours", + "NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?", + "ASSIGN_TO_ME": "Assign to me", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 മണിക്കൂർ സന്ദേശ വിൻഡോ നിയന്ത്രണം", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "നിങ്ങൾ ഇതിന് മറുപടി നൽകുന്നു:", + "REMOVE_SELECTION": "തിരഞ്ഞെടുക്കൽ നീക്കംചെയ്യുക", + "DOWNLOAD": "ഡൗൺലോഡ്", + "UNKNOWN_FILE_TYPE": "Unknown File", + "SAVE_CONTACT": "Save Contact", + "NO_CONTENT": "No content to display", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} has shared a contact", + "LOCATION": "{sender} has shared a location", + "FILE": "{sender} has shared a file", + "MEETING": "{sender} has started a meeting" + }, + "UPLOADING_ATTACHMENTS": "Uploading attachments...", + "REPLIED_TO_STORY": "Replied to your story", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", + "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", + "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", + "NO_RESPONSE": "No response", + "RESPONSE": "Response", + "RATING_TITLE": "Rating", + "FEEDBACK_TITLE": "Feedback", + "REPLY_MESSAGE_NOT_FOUND": "Message not available", + "CARD": { + "SHOW_LABELS": "Show labels", + "HIDE_LABELS": "Hide labels" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "പരിഹരിക്കുക", + "REOPEN_ACTION": "വീണ്ടും തുറക്കുക", + "OPEN_ACTION": "സജീവം", + "MORE_ACTIONS": "More actions", + "OPEN": "കൂടുതൽ", + "CLOSE": "അടയ്ക്കുക", + "DETAILS": "വിശദാംശങ്ങൾ", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", + "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "missed", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Mark as pending", + "SNOOZE_UNTIL": "Snooze", + "SNOOZE": { + "TITLE": "Snooze until", + "NEXT_REPLY": "Next reply", + "TOMORROW": "Tomorrow", + "NEXT_WEEK": "Next week" + } + }, + "MENTION": { + "AGENTS": "ഏജന്റുമാർ", + "TEAMS": "Teams" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Snooze until", + "APPLY": "Snooze", + "CANCEL": "റദ്ദാക്കുക" + }, + "PRIORITY": { + "TITLE": "Priority", + "OPTIONS": { + "NONE": "ഒന്നുമില്ല", + "URGENT": "Urgent", + "HIGH": "High", + "MEDIUM": "Medium", + "LOW": "Low" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "ഒന്നുമില്ല", + "INPUT_PLACEHOLDER": "Select priority", + "NO_RESULTS": "ഒരു ഫലവും കണ്ടെത്താനായില്ല", + "SUCCESSFUL": "Changed priority of conversation id {conversationId} to {priority}", + "FAILED": "Couldn't change priority. Please try again." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Delete conversation #{conversationId}", + "DESCRIPTION": "Are you sure you want to delete this conversation?", + "CONFIRM": "ഇല്ലാതാക്കുക" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Mark as pending", + "RESOLVED": "Mark as resolved", + "MARK_AS_UNREAD": "Mark as unread", + "MARK_AS_READ": "Mark as read", + "REOPEN": "സംഭാഷണം വീണ്ടും തുറക്കുക", + "SNOOZE": { + "TITLE": "Snooze", + "NEXT_REPLY": "Until next reply", + "TOMORROW": "Until tomorrow", + "NEXT_WEEK": "Until next week" + }, + "ASSIGN_AGENT": "Assign agent", + "ASSIGN_LABEL": "Assign label", + "AGENTS_LOADING": "Loading agents...", + "ASSIGN_TEAM": "Assign team", + "DELETE": "Delete conversation", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Conversation id {conversationId} assigned to \"{agentName}\"", + "FAILED": "Couldn't assign agent. Please try again." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Couldn't assign label. Please try again." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Assigned team \"{team}\" to conversation id {conversationId}", + "FAILED": "Couldn't assign team. Please try again." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Message signature", + "ENABLE_SIGN_TOOLTIP": "Enable signature", + "DISABLE_SIGN_TOOLTIP": "Disable signature", + "MSG_INPUT": "പുതിയ ലൈനിനു വേണ്ടി ഷിഫ്റ്റ് + എന്റർ അടിക്കുക. ഒരു ക്യാൻഡ് പ്രതികരണം തിരഞ്ഞു എടുക്കാൻ വേണ്ടി '/ ' വച്ച് ടൈപ്പ് ചെയ്തു തുടങ്ങുക.", + "PRIVATE_MSG_INPUT": "പുതിയ ലൈനിനു വേണ്ടി ഷിഫ്റ്റ് + എന്റർ അടിക്കുക. ഇത് ഏജന്റുമാർക്ക് മാത്രമേ ദൃശ്യമാകൂ", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.", + "CLICK_HERE": "Click here to update", + "WHATSAPP_TEMPLATES": "Whatsapp Templates" + }, + "REPLYBOX": { + "REPLY": "മറുപടി", + "PRIVATE_NOTE": "സ്വകാര്യ കുറിപ്പ്", + "SEND": "അയയ്ക്കുക", + "CREATE": "കുറിപ്പ് ചേർക്കുക", + "INSERT_READ_MORE": "Read more", + "DISMISS_REPLY": "Dismiss reply", + "REPLYING_TO": "Replying to:", + "TIP_EMOJI_ICON": "Show emoji selector", + "TIP_ATTACH_ICON": "Attach files", + "TIP_AUDIORECORDER_ICON": "Record audio", + "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", + "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "DRAG_DROP": "Drag and drop here to attach", + "START_AUDIO_RECORDING": "Start audio recording", + "STOP_AUDIO_RECORDING": "Stop audio recording", + "": "", + "EMAIL_HEAD": { + "TO": "TO", + "ADD_BCC": "Add bcc", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + }, + "BCC": { + "LABEL": "BCC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Undefined variables", + "MESSAGE": "You have {undefinedVariablesCount} undefined variables in your message: {undefinedVariables}. Would you like to send the message anyway?", + "CONFIRM": { + "YES": "അയയ്ക്കുക", + "CANCEL": "റദ്ദാക്കുക" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "സ്വകാര്യ കുറിപ്പ്: നിങ്ങൾക്കും നിങ്ങളുടെ ടീമിനും മാത്രം ദൃശ്യമാണ്", + "CHANGE_STATUS": "സംഭാഷണ നില മാറ്റി", + "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_AGENT": "സംഭാഷണ നിയുക്തനെ മാറ്റി", + "CHANGE_AGENT_FAILED": "Assignee change failed", + "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", + "ASSIGN_LABEL_FAILED": "Label assignment failed", + "CHANGE_TEAM": "Conversation team changed", + "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", + "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", + "MESSAGE_ERROR": "Unable to send this message, please try again later", + "SENT_BY": "അയച്ചത്:", + "BOT": "ബോട്ട്", + "SEND_FAILED": "സന്ദേശം അയയ്ക്കാനായില്ല! വീണ്ടും ശ്രമിക്കുക", + "TRY_AGAIN": "വീണ്ടും ശ്രമിക്കുക", + "ASSIGNMENT": { + "SELECT_AGENT": "ഏജന്റ് തിരഞ്ഞെടുക്കുക", + "REMOVE": "നീക്കം ചെയ്യുക", + "ASSIGN": "നിയോഗിക്കുക" + }, + "CONTEXT_MENU": { + "COPY": "പകർത്തുക", + "REPLY_TO": "Reply to this message", + "DELETE": "ഇല്ലാതാക്കുക", + "CREATE_A_CANNED_RESPONSE": "Add to canned responses", + "TRANSLATE": "Translate", + "COPY_PERMALINK": "Copy link to the message", + "LINK_COPIED": "Message URL copied to the clipboard", + "DELETE_CONFIRMATION": { + "TITLE": "Are you sure you want to delete this message?", + "MESSAGE": "You cannot undo this action", + "DELETE": "ഇല്ലാതാക്കുക", + "CANCEL": "റദ്ദാക്കുക" + } + }, + "SIDEBAR": { + "CONTACT": "ബന്ധപ്പെടുക", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "സംഭാഷണ ട്രാൻസ്ക്രിപ്റ്റ് അയയ്ക്കുക", + "DESC": "സംഭാഷണ ട്രാൻസ്ക്രിപ്റ്റിന്റെ ഒരു പകർപ്പ് നിർദ്ദിഷ്ട ഇമെയിൽ വിലാസത്തിലേക്ക് അയയ്ക്കുക", + "SUBMIT": "സമർപ്പിക്കുക", + "CANCEL": "റദ്ദാക്കുക", + "SEND_EMAIL_SUCCESS": "ചാറ്റ് ട്രാൻസ്ക്രിപ്റ്റ് വിജയകരമായി അയച്ചു", + "SEND_EMAIL_ERROR": "ഒരു പിശക് ഉണ്ടായിരുന്നു, ദയവായി വീണ്ടും ശ്രമിക്കുക", + "FORM": { + "SEND_TO_CONTACT": "ഉപഭോക്താവിന് ട്രാൻസ്ക്രിപ്റ്റ് അയയ്ക്കുക", + "SEND_TO_AGENT": "നിയുക്ത ഏജന്റിന് ട്രാൻസ്ക്രിപ്റ്റ് അയയ്ക്കുക", + "SEND_TO_OTHER_EMAIL_ADDRESS": "മറ്റൊരു ഇമെയിൽ വിലാസത്തിലേക്ക് ട്രാൻസ്ക്രിപ്റ്റ് അയയ്ക്കുക", + "EMAIL": { + "PLACEHOLDER": "ഒരു ഇമെയിൽ വിലാസം നൽകുക", + "ERROR": "ദയവായി സാധുവായ ഒരു ഇമെയിൽ വിലാസം നൽകുക" + } + } + }, + "ONBOARDING": { + "TITLE": "Hey 👋, Welcome to {installationName}!", + "DESCRIPTION": "Thanks for signing up. We want you to get the most out of {installationName}. Here are a few things you can do in {installationName} to make the experience delightful.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "Read our latest updates", + "ALL_CONVERSATION": { + "TITLE": "All your conversations in one place", + "DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status.", + "NEW_LINK": "Click here to create an inbox" + }, + "TEAM_MEMBERS": { + "TITLE": "Invite your team members", + "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.", + "NEW_LINK": "Click here to invite a team member" + }, + "LABELS": { + "TITLE": "Organize conversations with labels", + "DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.", + "NEW_LINK": "Click here to create tags" + }, + "CANNED_RESPONSES": { + "TITLE": "Create canned responses", + "DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.", + "NEW_LINK": "Click here to create a canned response" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Assigned Agent", + "SELF_ASSIGN": "Assign to me", + "TEAM_LABEL": "Assigned Team", + "SELECT": { + "PLACEHOLDER": "None" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Contact Details", + "CONVERSATION_ACTIONS": "Conversation Actions", + "CONVERSATION_LABELS": "സംഭാഷണ ലേബലുകൾ", + "CONVERSATION_INFO": "Conversation Information", + "CONTACT_NOTES": "Contact Notes", + "CONTACT_ATTRIBUTES": "Contact Attributes", + "PREVIOUS_CONVERSATION": "മുമ്പത്തെ സംഭാഷണങ്ങൾ", + "MACROS": "Macros", + "LINEAR_ISSUES": "Linked Linear Issues", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "കെട്ടിക്കിടക്കുന്നു", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Create attribute", + "NO_RECORDS_FOUND": "No attributes found", + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "ADD": { + "TITLE": "ചേർക്കുക", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + } + }, + "EMAIL_HEADER": { + "FROM": "From", + "TO": "To", + "BCC": "Bcc", + "CC": "Cc", + "SUBJECT": "Subject", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Participating", + "SIDEBAR_TITLE": "Conversation participants", + "NO_RECORDS_FOUND": "ഒരു ഫലവും കണ്ടെത്താനായില്ല", + "ADD_PARTICIPANTS": "Select participants", + "REMANING_PARTICIPANTS_TEXT": "+{count} others", + "REMANING_PARTICIPANT_TEXT": "+{count} other", + "TOTAL_PARTICIPANTS_TEXT": "{count} people are participating.", + "TOTAL_PARTICIPANT_TEXT": "{count} person is participating.", + "NO_PARTICIPANTS_TEXT": "No one is participating!.", + "WATCH_CONVERSATION": "Join conversation", + "YOU_ARE_WATCHING": "You are participating", + "API": { + "ERROR_MESSAGE": "Could not update, try again!", + "SUCCESS_MESSAGE": "Participants updated!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "View translated content", + "DESC": "You can view the translated content in each langauge.", + "ORIGINAL_CONTENT": "Original Content", + "TRANSLATED_CONTENT": "Translated Content", + "NO_TRANSLATIONS_AVAILABLE": "No translations are available for this content" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/csatMgmt.json b/app/javascript/dashboard/i18n/locale/ml/csatMgmt.json new file mode 100644 index 0000000..9e16dc2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Rate your conversation", + "PLACEHOLDER": "Tell us more...", + "RATINGS": { + "POOR": "😞 Poor", + "FAIR": "😑 Fair", + "AVERAGE": "😐 Average", + "GOOD": "😀 Good", + "EXCELLENT": "😍 Excellent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/customRole.json b/app/javascript/dashboard/i18n/locale/ml/customRole.json new file mode 100644 index 0000000..1028764 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Custom Roles", + "LEARN_MORE": "Learn more about custom roles", + "DESCRIPTION": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "HEADER_BTN_TXT": "Add custom role", + "LOADING": "Fetching custom roles...", + "SEARCH_404": "ഈ ചോദ്യവുമായി പൊരുത്തപ്പെടുന്ന ഇനങ്ങളൊന്നുമില്ല.", + "PAYWALL": { + "TITLE": "Upgrade to create custom roles", + "AVAILABLE_ON": "The custom role feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The custom role feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Manage custom roles", + "DESC": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "TABLE_HEADER": { + "NAME": "പേര്", + "DESCRIPTION": "വിവരണം", + "PERMISSIONS": "Permissions", + "ACTIONS": "പ്രവർത്തനങ്ങൾ" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "പേര്", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "Name is required." + }, + "DESCRIPTION": { + "LABEL": "വിവരണം", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "Description is required." + }, + "PERMISSIONS": { + "LABEL": "Permissions", + "ERROR": "Permissions are required." + }, + "CANCEL_BUTTON_TEXT": "റദ്ദാക്കുക", + "API": { + "ERROR_MESSAGE": "സെർവറിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക" + } + }, + "ADD": { + "TITLE": "Add custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "സമർപ്പിക്കുക", + "API": { + "SUCCESS_MESSAGE": "Custom role added successfully." + } + }, + "EDIT": { + "BUTTON_TEXT": "എഡിറ്റുചെയ്യുക", + "TITLE": "Edit custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "അപ്ഡേറ്റ്", + "API": { + "SUCCESS_MESSAGE": "Custom role updated successfully." + } + }, + "DELETE": { + "BUTTON_TEXT": "ഇല്ലാതാക്കുക", + "API": { + "SUCCESS_MESSAGE": "Custom role deleted successfully.", + "ERROR_MESSAGE": "സെർവറിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക" + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "
ഏജന്റുമാർ
ഒരു ഏജൻറ് നിങ്ങളുടെ ഉപഭോക്തൃ പിന്തുണാ ടീമിലെ ഒരു അംഗമാണ്.
ഏജന്റുമാർക്ക് നിങ്ങളുടെ ഉപയോക്താക്കളിൽ നിന്നുള്ള സന്ദേശങ്ങൾ കാണാനും മറുപടി നൽകാനും കഴിയും. നിങ്ങളുടെ അക്കൗണ്ടിലുള്ള എല്ലാ ഏജന്റുമാരെയും ഈ പട്ടിക കാണിക്കുന്നു. p>
ഒരു പുതിയ ഏജന്റിനെ ചേർക്കുന്നതിന് ഏജന്റിനെ ചേർക്കുക b> ബട്ടൺ ക്ലിക്കുചെയ്യുക. നിങ്ങൾ ചേർത്ത ഏജന്റിന് അവരുടെ അക്കൗണ്ട് സജീവമാക്കുന്നതിന് ഒരു സ്ഥിരീകരണ ലിങ്കുള്ള ഇമെയിൽ ലഭിക്കും. അതിനുശേഷം അവർക്ക് ചാറ്റ് വൂട്ട് ആക്സസ് ചെയ്യാനും സന്ദേശങ്ങളോട് പ്രതികരിക്കാനും കഴിയും.
ചാറ്റ് വൂട്ടിന്റെ സവിശേഷതകളിലേക്കുള്ള ആക്സസ് ഇനിപ്പറയുന്ന റോളുകളെ അടിസ്ഥാനമാക്കിയുള്ളതാണ്.
ഏജൻറ് b> - ഈ റോൾ ഉള്ള ഏജന്റുമാർക്ക് ഇൻബോക്സുകൾ, റിപ്പോർട്ടുകൾ, സംഭാഷണങ്ങൾ എന്നിവ മാത്രമേ ആക്സസ് ചെയ്യാൻ കഴിയൂ. അവർക്ക് മറ്റ് ഏജന്റുമാരുടെയോ അല്ലെങ്കിൽ തങ്ങളുടേയോ സംഭാഷണങ്ങൾ നിർണ്ണയിക്കാനും സംഭാഷണങ്ങൾ പരിഹരിക്കാനും കഴിയും.
അഡ്മിനിസ്ട്രേറ്റർ - ഒരു സാധാരണ ഏജന്റിന്റെ പ്രത്യേകാവകാശങ്ങളോടൊപ്പം ക്രമീകരണങ്ങളും ബില്ലിംഗും ഉൾപ്പെടെ നിങ്ങളുടെ അക്കൗണ്ടിൽ ലഭ്യമായ എല്ലാ ചാറ്റ് വൂട്ട് സവിശേഷതകളിലേക്കും ആക്സസ് ഉണ്ടായിരിക്കുക. p> ",
+ "YES": "Yes, delete ",
+ "NO": "No, keep "
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ml/datePicker.json b/app/javascript/dashboard/i18n/locale/ml/datePicker.json
new file mode 100644
index 0000000..55c6777
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ml/datePicker.json
@@ -0,0 +1,19 @@
+{
+ "DATE_PICKER": {
+ "APPLY_BUTTON": "അപേക്ഷിക്കുക",
+ "CLEAR_BUTTON": "Clear",
+ "DATE_RANGE_INPUT": {
+ "START": "Start Date",
+ "END": "End Date"
+ },
+ "DATE_RANGE_OPTIONS": {
+ "TITLE": "DATE RANGE",
+ "LAST_7_DAYS": "കഴിഞ്ഞ 7 ദിവസം",
+ "LAST_30_DAYS": "കഴിഞ്ഞ 30 ദിവസം",
+ "LAST_3_MONTHS": "കഴിഞ്ഞ 3 മാസം",
+ "LAST_6_MONTHS": "കഴിഞ്ഞ 6 മാസം",
+ "LAST_YEAR": "കഴിഞ്ഞ വർഷം",
+ "CUSTOM_RANGE": "ഇഷ്ടാനുസൃത തീയതി ശ്രേണി"
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ml/emoji.json b/app/javascript/dashboard/i18n/locale/ml/emoji.json
new file mode 100644
index 0000000..d0fdc5a
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ml/emoji.json
@@ -0,0 +1,7 @@
+{
+ "EMOJI": {
+ "PLACEHOLDER": "Search emojis",
+ "NOT_FOUND": "No emoji match your search",
+ "REMOVE": "നീക്കം ചെയ്യുക"
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ml/general.json b/app/javascript/dashboard/i18n/locale/ml/general.json
new file mode 100644
index 0000000..60a70e9
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ml/general.json
@@ -0,0 +1,12 @@
+{
+ "GENERAL": {
+ "SHOWING_RESULTS": "Showing {firstIndex}-{lastIndex} of {totalCount} items",
+ "PHONE_INPUT": {
+ "PLACEHOLDER": "തിരയുക",
+ "EMPTY_STATE": "ഒരു ഫലവും കണ്ടെത്താനായില്ല"
+ },
+ "CLOSE": "അടയ്ക്കുക",
+ "BETA": "Beta",
+ "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it."
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ml/generalSettings.json b/app/javascript/dashboard/i18n/locale/ml/generalSettings.json
new file mode 100644
index 0000000..f95147b
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ml/generalSettings.json
@@ -0,0 +1,251 @@
+{
+ "GENERAL_SETTINGS": {
+ "LIMIT_MESSAGES": {
+ "CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.",
+ "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.",
+ "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.",
+ "NON_ADMIN": "Please contact your administrator to upgrade the plan and continue using all features."
+ },
+ "TITLE": "അക്കൗണ്ട് ക്രമീകരണങ്ങൾ",
+ "SUBMIT": "ക്രമീകരണങ്ങൾ അപ്ഡേറ്റു ചെയ്യുക",
+ "BACK": "മടങ്ങിപ്പോവുക",
+ "DISMISS": "Dismiss",
+ "UPDATE": {
+ "ERROR": "ക്രമീകരണങ്ങൾ അപ്ഡേറ്റു ചെയ്യാനായില്ല, വീണ്ടും ശ്രമിക്കുക!",
+ "SUCCESS": "അക്കൗണ്ട് ക്രമീകരണങ്ങൾ വിജയകരമായി അപ്ഡേറ്റു ചെയ്തു"
+ },
+ "ACCOUNT_DELETE_SECTION": {
+ "TITLE": "Delete your Account",
+ "NOTE": "Once you delete your account, all your data will be deleted.",
+ "BUTTON_TEXT": "Delete Your Account",
+ "CONFIRM": {
+ "TITLE": "Delete Account",
+ "MESSAGE": "Deleting your Account is irreversible. Enter your account name below to confirm you want to permanently delete it.",
+ "BUTTON_TEXT": "ഇല്ലാതാക്കുക",
+ "DISMISS": "റദ്ദാക്കുക",
+ "PLACE_HOLDER": "Please type {accountName} to confirm"
+ },
+ "SUCCESS": "Account marked for deletion",
+ "FAILURE": "Could not delete account, try again!",
+ "SCHEDULED_DELETION": {
+ "TITLE": "Account Scheduled for Deletion",
+ "MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.",
+ "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.",
+ "CLEAR_BUTTON": "Cancel Scheduled Deletion"
+ }
+ },
+ "FORM": {
+ "ERROR": "ദയവായി ഫോമിലെ പിശകുകൾ പരിഹരിക്കുക",
+ "GENERAL_SECTION": {
+ "TITLE": "പൊതുവായ ക്രമീകരണങ്ങൾ",
+ "NOTE": ""
+ },
+ "ACCOUNT_ID": {
+ "TITLE": "Account ID",
+ "NOTE": "This ID is required if you are building an API based integration"
+ },
+ "AUTO_RESOLVE": {
+ "TITLE": "Auto-resolve conversations",
+ "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.",
+ "DURATION": {
+ "LABEL": "Inactivity duration",
+ "HELP": "Time period of inactivity after which conversation is auto-resolved",
+ "PLACEHOLDER": "30",
+ "ERROR": "Auto resolve duration should be between 10 minutes and 999 days",
+ "API": {
+ "SUCCESS": "Auto resolve settings updated successfully",
+ "ERROR": "Failed to update auto resolve settings"
+ }
+ },
+ "MESSAGE": {
+ "LABEL": "Custom auto-resolution message",
+ "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity",
+ "HELP": "Message sent to the customer after conversation is auto-resolved"
+ },
+ "PREFERENCES": "Preferences",
+ "LABEL": {
+ "LABEL": "Add label after auto-resolution",
+ "PLACEHOLDER": "Select a label"
+ },
+ "IGNORE_WAITING": {
+ "LABEL": "Skip conversations waiting for agent’s reply"
+ },
+ "UPDATE_BUTTON": "Save Changes"
+ },
+ "NAME": {
+ "LABEL": "അക്കൗണ്ടിന്റെ പേര്",
+ "PLACEHOLDER": "നിങ്ങളുടെ അക്കൗണ്ടിന്റെ പേര്",
+ "ERROR": "ദയവായി സാധുവായ ഒരു അക്കൗണ്ട് പേര് നൽകുക"
+ },
+ "LANGUAGE": {
+ "LABEL": "Site language",
+ "PLACEHOLDER": "നിങ്ങളുടെ അക്കൗണ്ടിന്റെ പേര്",
+ "ERROR": ""
+ },
+ "DOMAIN": {
+ "LABEL": "ഇൻകമിംഗ് ഇമെയിൽ ഡൊമെയ്ൻ",
+ "PLACEHOLDER": "നിങ്ങൾക്ക് ഇമെയിലുകൾ ലഭിക്കുന്ന ഡൊമെയ്ൻ",
+ "ERROR": ""
+ },
+ "SUPPORT_EMAIL": {
+ "LABEL": "ഇമെയിൽ",
+ "PLACEHOLDER": "നിങ്ങളുടെ കമ്പനിയുടെ പിന്തുണാ ഇമെയിൽ",
+ "ERROR": ""
+ },
+ "AUTO_RESOLVE_IGNORE_WAITING": {
+ "LABEL": "Exclude unattended conversations",
+ "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply."
+ },
+ "AUDIO_TRANSCRIPTION": {
+ "TITLE": "Transcribe Audio Messages",
+ "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.",
+ "API": {
+ "SUCCESS": "Audio transcription setting updated successfully",
+ "ERROR": "Failed to update audio transcription setting"
+ }
+ },
+ "AUTO_RESOLVE_DURATION": {
+ "LABEL": "Inactivity duration for resolution",
+ "HELP": "Duration after a conversation should auto resolve if there is no activity",
+ "PLACEHOLDER": "30",
+ "ERROR": "Auto resolve duration should be between 10 minutes and 999 days",
+ "API": {
+ "SUCCESS": "Auto resolve settings updated successfully",
+ "ERROR": "Failed to update auto resolve settings"
+ },
+ "UPDATE_BUTTON": "അപ്ഡേറ്റ്",
+ "MESSAGE_LABEL": "Custom resolution message",
+ "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity",
+ "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity."
+ },
+ "FEATURES": {
+ "INBOUND_EMAIL_ENABLED": "നിങ്ങളുടെ അക്കൗണ്ടിനായി ഇമെയിലുകളുമായുള്ള സംഭാഷണ തുടർച്ച പ്രവർത്തനക്ഷമമാക്കി.",
+ "CUSTOM_EMAIL_DOMAIN_ENABLED": "നിങ്ങളുടെ ഇഷ്ടാനുസൃത ഡൊമെയ്നിൽ നിങ്ങൾക്ക് ഇപ്പോൾ ഇമെയിലുകൾ സ്വീകരിക്കാൻ കഴിയും."
+ }
+ },
+ "UPDATE_CHATWOOT": "An update {latestChatwootVersion} for Chatwoot is available. Please update your instance.",
+ "LEARN_MORE": "Learn more",
+ "PAYMENT_PENDING": "Your payment is pending. Please update your payment information to continue using Chatwoot",
+ "UPGRADE": "Upgrade to continue using Chatwoot",
+ "LIMITS_UPGRADE": "Your account has exceeded the usage limits, please upgrade your plan to continue using Chatwoot",
+ "OPEN_BILLING": "Open billing"
+ },
+ "FORMS": {
+ "MULTISELECT": {
+ "ENTER_TO_SELECT": "Press enter to select",
+ "ENTER_TO_REMOVE": "Press enter to remove",
+ "NO_OPTIONS": "List is empty",
+ "SELECT_ONE": "Select one",
+ "SELECT": "Select"
+ }
+ },
+ "NOTIFICATIONS_PAGE": {
+ "HEADER": "Notifications",
+ "MARK_ALL_DONE": "Mark All Done",
+ "DELETE_TITLE": "deleted",
+ "UNREAD_NOTIFICATION": {
+ "TITLE": "Unread Notifications",
+ "ALL_NOTIFICATIONS": "View all notifications",
+ "LOADING_UNREAD_MESSAGE": "Loading unread notifications...",
+ "EMPTY_MESSAGE": "You have no unread notifications"
+ },
+ "LIST": {
+ "LOADING_MESSAGE": "Loading notifications...",
+ "404": "No Notifications",
+ "TABLE_HEADER": [
+ "പേര്",
+ "ഫോൺ നമ്പർ",
+ "സംഭാഷണങ്ങൾ",
+ "അവസാനം കോൺടാക്റ്റുചെയ്തത്"
+ ]
+ },
+ "TYPE_LABEL": {
+ "conversation_creation": "New conversation",
+ "conversation_assignment": "Conversation Assigned",
+ "assigned_conversation_new_message": "New Message",
+ "participating_conversation_new_message": "New Message",
+ "conversation_mention": "Mention",
+ "sla_missed_first_response": "SLA Missed",
+ "sla_missed_next_response": "SLA Missed",
+ "sla_missed_resolution": "SLA Missed"
+ }
+ },
+ "NETWORK": {
+ "NOTIFICATION": {
+ "OFFLINE": "ഓഫ്ലൈൻ",
+ "RECONNECTING": "Reconnecting...",
+ "RECONNECT_SUCCESS": "Reconnected"
+ },
+ "BUTTON": {
+ "REFRESH": "Refresh"
+ }
+ },
+ "COMMAND_BAR": {
+ "SEARCH_PLACEHOLDER": "Search or jump to",
+ "SECTIONS": {
+ "GENERAL": "General",
+ "REPORTS": "റിപ്പോർട്ടുകൾ",
+ "CONVERSATION": "സംഭാഷണം",
+ "BULK_ACTIONS": "Bulk Actions",
+ "CHANGE_ASSIGNEE": "Change Assignee",
+ "CHANGE_PRIORITY": "Change Priority",
+ "CHANGE_TEAM": "Change Team",
+ "SNOOZE_CONVERSATION": "Snooze Conversation",
+ "ADD_LABEL": "Add label to the conversation",
+ "REMOVE_LABEL": "Remove label from the conversation",
+ "SETTINGS": "ക്രമീകരണങ്ങൾ",
+ "AI_ASSIST": "AI Assist",
+ "APPEARANCE": "Appearance",
+ "SNOOZE_NOTIFICATION": "Snooze Notification"
+ },
+ "COMMANDS": {
+ "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard",
+ "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard",
+ "GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview",
+ "GO_TO_CONVERSATION_REPORTS": "Go to Conversation Reports",
+ "GO_TO_AGENT_REPORTS": "Go to Agent Reports",
+ "GO_TO_LABEL_REPORTS": "Go to Label Reports",
+ "GO_TO_INBOX_REPORTS": "Go to Inbox Reports",
+ "GO_TO_TEAM_REPORTS": "Go to Team Reports",
+ "GO_TO_SETTINGS_AGENTS": "Go to Agent Settings",
+ "GO_TO_SETTINGS_TEAMS": "Go to Team Settings",
+ "GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings",
+ "GO_TO_SETTINGS_LABELS": "Go to Label Settings",
+ "GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings",
+ "GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings",
+ "GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings",
+ "GO_TO_SETTINGS_PROFILE": "Go to Profile Settings",
+ "GO_TO_NOTIFICATIONS": "Go to Notifications",
+ "ADD_LABELS_TO_CONVERSATION": "Add label to the conversation",
+ "ASSIGN_AN_AGENT": "Assign an agent",
+ "AI_ASSIST": "AI Assist",
+ "ASSIGN_PRIORITY": "Assign priority",
+ "ASSIGN_A_TEAM": "Assign a team",
+ "MUTE_CONVERSATION": "Mute conversation",
+ "UNMUTE_CONVERSATION": "Unmute conversation",
+ "REMOVE_LABEL_FROM_CONVERSATION": "Remove label from the conversation",
+ "REOPEN_CONVERSATION": "Reopen conversation",
+ "RESOLVE_CONVERSATION": "Resolve conversation",
+ "SEND_TRANSCRIPT": "Send an email transcript",
+ "SNOOZE_CONVERSATION": "Snooze Conversation",
+ "UNTIL_NEXT_REPLY": "Until next reply",
+ "UNTIL_NEXT_WEEK": "Until next week",
+ "UNTIL_TOMORROW": "Until tomorrow",
+ "UNTIL_NEXT_MONTH": "Until next month",
+ "AN_HOUR_FROM_NOW": "Until an hour from now",
+ "UNTIL_CUSTOM_TIME": "Custom...",
+ "CHANGE_APPEARANCE": "Change Appearance",
+ "LIGHT_MODE": "Light",
+ "DARK_MODE": "Dark",
+ "SYSTEM_MODE": "System",
+ "SNOOZE_NOTIFICATION": "Snooze Notification"
+ }
+ },
+ "DASHBOARD_APPS": {
+ "LOADING_MESSAGE": "Loading Dashboard App..."
+ },
+ "COMMON": {
+ "OR": "Or",
+ "CLICK_HERE": "ഇവിടെ ക്ലിക്കു ചെയ്യുക"
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ml/helpCenter.json b/app/javascript/dashboard/i18n/locale/ml/helpCenter.json
new file mode 100644
index 0000000..b61f618
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ml/helpCenter.json
@@ -0,0 +1,865 @@
+{
+ "HELP_CENTER": {
+ "TITLE": "Help Center",
+ "NEW_PAGE": {
+ "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.",
+ "CREATE_PORTAL_BUTTON": "Create Portal"
+ },
+ "HEADER": {
+ "FILTER": "Filter by",
+ "SORT": "Sort by",
+ "LOCALE": "Locale",
+ "SETTINGS_BUTTON": "ക്രമീകരണങ്ങൾ",
+ "NEW_BUTTON": "New Article",
+ "DROPDOWN_OPTIONS": {
+ "PUBLISHED": "Published",
+ "DRAFT": "Draft",
+ "ARCHIVED": "Archived"
+ },
+ "TITLES": {
+ "ALL_ARTICLES": "All Articles",
+ "MINE": "My Articles",
+ "DRAFT": "Draft Articles",
+ "ARCHIVED": "Archived Articles"
+ },
+ "LOCALE_SELECT": {
+ "TITLE": "Select locale",
+ "PLACEHOLDER": "Select locale",
+ "NO_RESULT": "No locale found",
+ "SEARCH_PLACEHOLDER": "Search locale"
+ }
+ },
+ "EDIT_HEADER": {
+ "ALL_ARTICLES": "All Articles",
+ "PUBLISH_BUTTON": "Publish",
+ "MOVE_TO_ARCHIVE_BUTTON": "Move to archived",
+ "PREVIEW": "Preview",
+ "ADD_TRANSLATION": "Add translation",
+ "OPEN_SIDEBAR": "Open sidebar",
+ "CLOSE_SIDEBAR": "Close sidebar",
+ "SAVING": "Saving...",
+ "SAVED": "Saved"
+ },
+ "ARTICLE_EDITOR": {
+ "IMAGE_UPLOAD": {
+ "TITLE": "ചിത്രം അപ്ലോഡു ചെയ്യുക",
+ "UPLOADING": "അപ്ലോഡുചെയ്യുന്നു...",
+ "SUCCESS": "Image uploaded successfully",
+ "ERROR": "Error while uploading image",
+ "UN_AUTHORIZED_ERROR": "You are not authorized to upload images",
+ "ERROR_FILE_SIZE": "Image size should be less than {size}MB",
+ "ERROR_FILE_FORMAT": "Image format should be jpg, jpeg or png",
+ "ERROR_FILE_DIMENSIONS": "Image dimensions should be less than 2000 x 2000"
+ }
+ },
+ "ARTICLE_SETTINGS": {
+ "TITLE": "Article Settings",
+ "FORM": {
+ "CATEGORY": {
+ "LABEL": "Category",
+ "TITLE": "Select category",
+ "PLACEHOLDER": "Select category",
+ "NO_RESULT": "No category found",
+ "SEARCH_PLACEHOLDER": "Search category"
+ },
+ "AUTHOR": {
+ "LABEL": "Author",
+ "TITLE": "Select author",
+ "PLACEHOLDER": "Select author",
+ "NO_RESULT": "No authors found",
+ "SEARCH_PLACEHOLDER": "Search author"
+ },
+ "META_TITLE": {
+ "LABEL": "Meta title",
+ "PLACEHOLDER": "Add a meta title"
+ },
+ "META_DESCRIPTION": {
+ "LABEL": "Meta description",
+ "PLACEHOLDER": "Add your meta description for better SEO results..."
+ },
+ "META_TAGS": {
+ "LABEL": "Meta tags",
+ "PLACEHOLDER": "Add meta tags separated by comma..."
+ }
+ },
+ "BUTTONS": {
+ "ARCHIVE": "Archive article",
+ "DELETE": "Delete article"
+ }
+ },
+ "ARTICLE_SEARCH_RESULT": {
+ "UNCATEGORIZED": "Uncategorized",
+ "SEARCH_RESULTS": "Search results for {query}",
+ "EMPTY_TEXT": "Search for articles to insert into replies.",
+ "SEARCH_LOADER": "Searching...",
+ "INSERT_ARTICLE": "Insert",
+ "NO_RESULT": "No articles found",
+ "COPY_LINK": "Copy article link to clipboard",
+ "OPEN_LINK": "Open article in new tab",
+ "PREVIEW_LINK": "Preview article"
+ },
+ "PORTAL": {
+ "HEADER": "Portals",
+ "DEFAULT": "Default",
+ "NEW_BUTTON": "New Portal",
+ "ACTIVE_BADGE": "സജീവമാണ്",
+ "CHOOSE_LOCALE_LABEL": "Choose a locale",
+ "LOADING_MESSAGE": "Loading portals...",
+ "ARTICLES_LABEL": "articles",
+ "NO_PORTALS_MESSAGE": "There are no available portals",
+ "ADD_NEW_LOCALE": "Add a new locale",
+ "POPOVER": {
+ "TITLE": "Portals",
+ "PORTAL_SETTINGS": "Portal settings",
+ "SUBTITLE": "You have multiple portals and can have different locales for each portal.",
+ "CANCEL_BUTTON_LABEL": "റദ്ദാക്കുക",
+ "CHOOSE_LOCALE_BUTTON": "Choose Locale"
+ },
+ "PORTAL_SETTINGS": {
+ "LIST_ITEM": {
+ "HEADER": {
+ "COUNT_LABEL": "articles",
+ "ADD": "Add locale",
+ "VISIT": "Visit site",
+ "SETTINGS": "ക്രമീകരണങ്ങൾ",
+ "DELETE": "ഇല്ലാതാക്കുക"
+ },
+ "PORTAL_CONFIG": {
+ "TITLE": "Portal Configurations",
+ "ITEMS": {
+ "NAME": "പേര്",
+ "DOMAIN": "Custom domain",
+ "SLUG": "Slug",
+ "TITLE": "Portal title",
+ "THEME": "Theme color",
+ "SUB_TEXT": "Portal sub text"
+ }
+ },
+ "AVAILABLE_LOCALES": {
+ "TITLE": "Available locales",
+ "TABLE": {
+ "NAME": "Locale name",
+ "CODE": "Locale code",
+ "ARTICLE_COUNT": "No. of articles",
+ "CATEGORIES": "No. of categories",
+ "SWAP": "Swap",
+ "DELETE": "ഇല്ലാതാക്കുക",
+ "DEFAULT_LOCALE": "Default"
+ }
+ }
+ },
+ "DELETE_PORTAL": {
+ "TITLE": "Delete portal",
+ "MESSAGE": "Are you sure you want to delete this portal",
+ "YES": "Yes, delete portal",
+ "NO": "No, keep portal",
+ "API": {
+ "DELETE_SUCCESS": "Portal deleted successfully",
+ "DELETE_ERROR": "Error while deleting portal"
+ }
+ },
+ "SEND_CNAME_INSTRUCTIONS": {
+ "API": {
+ "SUCCESS_MESSAGE": "CNAME instructions sent successfully",
+ "ERROR_MESSAGE": "Error while sending CNAME instructions"
+ }
+ }
+ },
+ "EDIT": {
+ "HEADER_TEXT": "Edit portal",
+ "TABS": {
+ "BASIC_SETTINGS": {
+ "TITLE": "Basic information"
+ },
+ "CUSTOMIZATION_SETTINGS": {
+ "TITLE": "Portal customization"
+ },
+ "CATEGORY_SETTINGS": {
+ "TITLE": "Categories"
+ },
+ "LOCALE_SETTINGS": {
+ "TITLE": "Locales"
+ }
+ },
+ "CATEGORIES": {
+ "TITLE": "Categories in",
+ "NEW_CATEGORY": "New category",
+ "TABLE": {
+ "NAME": "പേര്",
+ "DESCRIPTION": "വിവരണം",
+ "LOCALE": "Locale",
+ "ARTICLE_COUNT": "No. of articles",
+ "ACTION_BUTTON": {
+ "EDIT": "Edit category",
+ "DELETE": "Delete category"
+ },
+ "EMPTY_TEXT": "No categories found"
+ }
+ },
+ "EDIT_BASIC_INFO": {
+ "BUTTON_TEXT": "Update basic settings"
+ }
+ },
+ "ADD": {
+ "CREATE_FLOW": {
+ "BASIC": {
+ "TITLE": "Help center information",
+ "BODY": "Basic information about portal"
+ },
+ "CUSTOMIZATION": {
+ "TITLE": "Help center customization",
+ "BODY": "Customize portal"
+ },
+ "FINISH": {
+ "TITLE": "Voila! 🎉",
+ "BODY": "You're all set!"
+ }
+ },
+ "CREATE_FLOW_PAGE": {
+ "BACK_BUTTON": "മടങ്ങിപ്പോവുക",
+ "BASIC_SETTINGS_PAGE": {
+ "HEADER": "Create Portal",
+ "TITLE": "Help center information",
+ "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
+ },
+ "CUSTOMIZATION_PAGE": {
+ "HEADER": "Portal customisation",
+ "TITLE": "Help center customization",
+ "UPDATE_PORTAL_BUTTON": "Update portal settings"
+ },
+ "FINISH_PAGE": {
+ "TITLE": "Voila!🎉 You're all set up!",
+ "MESSAGE": "You can now see this created portal on your all portals page.",
+ "FINISH": "Go to all portals page"
+ }
+ },
+ "LOGO": {
+ "LABEL": "Logo",
+ "UPLOAD_BUTTON": "Upload logo",
+ "HELP_TEXT": "This logo will be displayed on the portal header.",
+ "IMAGE_UPLOAD_SUCCESS": "Logo uploaded successfully",
+ "IMAGE_UPLOAD_ERROR": "Logo deleted successfully",
+ "IMAGE_DELETE_ERROR": "Error while deleting logo"
+ },
+ "NAME": {
+ "LABEL": "പേര്",
+ "PLACEHOLDER": "Portal name",
+ "HELP_TEXT": "The name will be used in the public facing portal internally.",
+ "ERROR": "നാമം ആവശ്യമാണ്"
+ },
+ "SLUG": {
+ "LABEL": "Slug",
+ "PLACEHOLDER": "Portal slug for urls",
+ "ERROR": "Slug is required"
+ },
+ "DOMAIN": {
+ "LABEL": "Custom Domain",
+ "PLACEHOLDER": "Portal custom domain",
+ "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}",
+ "ERROR": "Enter a valid domain URL"
+ },
+ "HOME_PAGE_LINK": {
+ "LABEL": "Home Page Link",
+ "PLACEHOLDER": "Portal home page link",
+ "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}",
+ "ERROR": "Enter a valid home page URL"
+ },
+ "THEME_COLOR": {
+ "LABEL": "Portal theme color",
+ "HELP_TEXT": "This color will show as the theme color for the portal."
+ },
+ "PAGE_TITLE": {
+ "LABEL": "Page Title",
+ "PLACEHOLDER": "Portal page title",
+ "HELP_TEXT": "The page title will be used in the public facing portal.",
+ "ERROR": "Page title is required"
+ },
+ "HEADER_TEXT": {
+ "LABEL": "Header Text",
+ "PLACEHOLDER": "Portal header text",
+ "HELP_TEXT": "The Portal header text will be used in the public facing portal.",
+ "ERROR": "Portal header text is required"
+ },
+ "API": {
+ "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.",
+ "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
+ "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.",
+ "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
+ }
+ },
+ "ADD_LOCALE": {
+ "TITLE": "Add a new locale",
+ "SUB_TITLE": "This adds a new locale to your available translation list.",
+ "PORTAL": "Portal",
+ "LOCALE": {
+ "LABEL": "Locale",
+ "PLACEHOLDER": "Choose a locale",
+ "ERROR": "Locale is required"
+ },
+ "BUTTONS": {
+ "CREATE": "Create locale",
+ "CANCEL": "റദ്ദാക്കുക"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Locale added successfully",
+ "ERROR_MESSAGE": "Unable to add locale. Try again."
+ }
+ },
+ "CHANGE_DEFAULT_LOCALE": {
+ "API": {
+ "SUCCESS_MESSAGE": "Default locale updated successfully",
+ "ERROR_MESSAGE": "Unable to update default locale. Try again."
+ }
+ },
+ "DELETE_LOCALE": {
+ "API": {
+ "SUCCESS_MESSAGE": "Locale removed from portal successfully",
+ "ERROR_MESSAGE": "Unable to remove locale from portal. Try again."
+ }
+ }
+ },
+ "TABLE": {
+ "LOADING_MESSAGE": "Loading articles...",
+ "404": "No articles matches your search 🔍",
+ "NO_ARTICLES": "There are no available articles",
+ "HEADERS": {
+ "TITLE": "തലക്കെട്ട്",
+ "CATEGORY": "Category",
+ "READ_COUNT": "Views",
+ "STATUS": "സ്റ്റാറ്റസ്",
+ "LAST_EDITED": "Last edited"
+ },
+ "COLUMNS": {
+ "BY": "by",
+ "AUTHOR_NOT_AVAILABLE": "Author is not available"
+ }
+ },
+ "EDIT_ARTICLE": {
+ "LOADING": "Loading article...",
+ "TITLE_PLACEHOLDER": "Article title goes here",
+ "CONTENT_PLACEHOLDER": "Write your article here",
+ "API": {
+ "ERROR": "Error while saving article"
+ }
+ },
+ "PUBLISH_ARTICLE": {
+ "API": {
+ "ERROR": "Error while publishing article",
+ "SUCCESS": "Article published successfully"
+ }
+ },
+ "ARCHIVE_ARTICLE": {
+ "API": {
+ "ERROR": "Error while archiving article",
+ "SUCCESS": "Article archived successfully"
+ }
+ },
+ "DRAFT_ARTICLE": {
+ "API": {
+ "ERROR": "Error while drafting article",
+ "SUCCESS": "Article drafted successfully"
+ }
+ },
+ "DELETE_ARTICLE": {
+ "MODAL": {
+ "CONFIRM": {
+ "TITLE": "ഇല്ലാതാക്കൽ സ്ഥിരീകരിക്കുക",
+ "MESSAGE": "Are you sure to delete the article?",
+ "YES": "അതെ, ഇല്ലാതാക്കുക",
+ "NO": "ഇല്ല, സൂക്ഷിക്കുക"
+ }
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Article deleted successfully",
+ "ERROR_MESSAGE": "Error while deleting article"
+ }
+ },
+ "CREATE_ARTICLE": {
+ "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings"
+ },
+ "SIDEBAR": {
+ "SEARCH": {
+ "PLACEHOLDER": "Search for articles"
+ }
+ },
+ "CATEGORY": {
+ "ADD": {
+ "TITLE": "Create a category",
+ "SUB_TITLE": "The category will be used in the public facing portal to categorize articles.",
+ "PORTAL": "Portal",
+ "LOCALE": "Locale",
+ "NAME": {
+ "LABEL": "പേര്",
+ "PLACEHOLDER": "Category name",
+ "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.",
+ "ERROR": "നാമം ആവശ്യമാണ്"
+ },
+ "SLUG": {
+ "LABEL": "Slug",
+ "PLACEHOLDER": "Category slug for urls",
+ "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug",
+ "ERROR": "Slug is required"
+ },
+ "DESCRIPTION": {
+ "LABEL": "വിവരണം",
+ "PLACEHOLDER": "Give a short description about the category.",
+ "ERROR": "വിവരണം ആവശ്യമാണ്"
+ },
+ "BUTTONS": {
+ "CREATE": "Create category",
+ "CANCEL": "റദ്ദാക്കുക"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Category created successfully",
+ "ERROR_MESSAGE": "Unable to create category"
+ }
+ },
+ "EDIT": {
+ "TITLE": "Edit a category",
+ "SUB_TITLE": "Editing a category will update the category in the public facing portal.",
+ "PORTAL": "Portal",
+ "LOCALE": "Locale",
+ "NAME": {
+ "LABEL": "പേര്",
+ "PLACEHOLDER": "Category name",
+ "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.",
+ "ERROR": "നാമം ആവശ്യമാണ്"
+ },
+ "SLUG": {
+ "LABEL": "Slug",
+ "PLACEHOLDER": "Category slug for urls",
+ "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug",
+ "ERROR": "Slug is required"
+ },
+ "DESCRIPTION": {
+ "LABEL": "വിവരണം",
+ "PLACEHOLDER": "Give a short description about the category.",
+ "ERROR": "വിവരണം ആവശ്യമാണ്"
+ },
+ "BUTTONS": {
+ "CREATE": "Update category",
+ "CANCEL": "റദ്ദാക്കുക"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Category updated successfully",
+ "ERROR_MESSAGE": "Unable to update category"
+ }
+ },
+ "DELETE": {
+ "API": {
+ "SUCCESS_MESSAGE": "Category deleted successfully",
+ "ERROR_MESSAGE": "Unable to delete category"
+ }
+ }
+ },
+ "ARTICLE_SEARCH": {
+ "TITLE": "Search articles",
+ "PLACEHOLDER": "Search articles",
+ "NO_RESULT": "No articles found",
+ "SEARCHING": "Searching...",
+ "SEARCH_BUTTON": "തിരയുക",
+ "INSERT_ARTICLE": "Insert link",
+ "IFRAME_ERROR": "URL is empty or invalid. Unable to display content.",
+ "OPEN_ARTICLE_SEARCH": "Insert article from Help Center",
+ "SUCCESS_ARTICLE_INSERTED": "Article inserted successfully",
+ "PREVIEW_LINK": "Preview article",
+ "CANCEL": "അടയ്ക്കുക",
+ "BACK": "മടങ്ങിപ്പോവുക",
+ "BACK_RESULTS": "Back to results"
+ },
+ "UPGRADE_PAGE": {
+ "TITLE": "Help Center",
+ "DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Upgrade your subscription to enable this feature.",
+ "SELF_HOSTED_DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Please contact your administrator to enable this feature.",
+ "BUTTON": {
+ "LEARN_MORE": "Learn more",
+ "UPGRADE": "Upgrade"
+ },
+ "FEATURES": {
+ "PORTALS": {
+ "TITLE": "Multiple portals",
+ "DESCRIPTION": "Create multiple help center portals for different products using the same account."
+ },
+ "LOCALES": {
+ "TITLE": "Full support for locales",
+ "DESCRIPTION": "Localize the portal in your language. We support all locales and allow translations for every article."
+ },
+ "SEO": {
+ "TITLE": "SEO-friendly design",
+ "DESCRIPTION": "Customize your meta tags to improve your visibility on search engines with our SEO-friendly pages."
+ },
+ "API": {
+ "TITLE": "Full API support",
+ "DESCRIPTION": "Use the portal as a headless CMS with third party front-end frameworks using our APIs."
+ }
+ }
+ },
+ "LOADING": "Loading...",
+ "ARTICLES_PAGE": {
+ "ARTICLE_CARD": {
+ "CARD": {
+ "VIEWS": "{count} view | {count} views",
+ "DROPDOWN_MENU": {
+ "PUBLISH": "Publish",
+ "DRAFT": "Draft",
+ "ARCHIVE": "Archive",
+ "DELETE": "ഇല്ലാതാക്കുക"
+ },
+ "STATUS": {
+ "DRAFT": "Draft",
+ "PUBLISHED": "Published",
+ "ARCHIVED": "Archived"
+ },
+ "CATEGORY": {
+ "UNCATEGORISED": "Uncategorised"
+ }
+ }
+ },
+ "ARTICLES_HEADER": {
+ "TABS": {
+ "ALL": "All articles",
+ "MINE": "എന്റേത്",
+ "DRAFT": "Draft",
+ "PUBLISHED": "Published",
+ "ARCHIVED": "Archived"
+ },
+ "CATEGORY": {
+ "ALL": "All categories"
+ },
+ "LOCALE": {
+ "ALL": "All locales"
+ },
+ "NEW_ARTICLE": "New article"
+ },
+ "EMPTY_STATE": {
+ "ALL": {
+ "TITLE": "Write an article",
+ "SUBTITLE": "Write a rich article, let’s get started!",
+ "BUTTON_LABEL": "New article"
+ },
+ "MINE": {
+ "TITLE": "You haven't written any articles here",
+ "SUBTITLE": "All articles written by you show up here for quick access."
+ },
+ "DRAFT": {
+ "TITLE": "There are no articles in drafts",
+ "SUBTITLE": "Draft articles will appear here"
+ },
+ "PUBLISHED": {
+ "TITLE": "There are no published articles",
+ "SUBTITLE": "Published articles will appear here"
+ },
+ "ARCHIVED": {
+ "TITLE": "There are no articles in the archive",
+ "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages"
+ },
+ "CATEGORY": {
+ "TITLE": "There are no articles in this category",
+ "SUBTITLE": "Articles in this category will appear here"
+ }
+ }
+ },
+ "CATEGORY_PAGE": {
+ "CATEGORY_HEADER": {
+ "NEW_CATEGORY": "New category",
+ "EDIT_CATEGORY": "Edit category",
+ "CATEGORIES_COUNT": "{n} category | {n} categories",
+ "BREADCRUMB": {
+ "CATEGORY_LOCALE": "Categories ({localeCode})",
+ "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)"
+ }
+ },
+ "CATEGORY_EMPTY_STATE": {
+ "TITLE": "No categories found",
+ "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button."
+ },
+ "CATEGORY_CARD": {
+ "ARTICLES_COUNT": "{count} article | {count} articles"
+ },
+ "CATEGORY_DIALOG": {
+ "CREATE": {
+ "API": {
+ "SUCCESS_MESSAGE": "Category created successfully",
+ "ERROR_MESSAGE": "Unable to create category"
+ }
+ },
+ "EDIT": {
+ "API": {
+ "SUCCESS_MESSAGE": "Category updated successfully",
+ "ERROR_MESSAGE": "Unable to update category"
+ }
+ },
+ "DELETE": {
+ "API": {
+ "SUCCESS_MESSAGE": "Category deleted successfully",
+ "ERROR_MESSAGE": "Unable to delete category"
+ }
+ },
+ "HEADER": {
+ "CREATE": "Create category",
+ "EDIT": "Edit category",
+ "DESCRIPTION": "Editing a category will update the category in the public facing portal.",
+ "PORTAL": "Portal",
+ "LOCALE": "Locale"
+ },
+ "FORM": {
+ "NAME": {
+ "LABEL": "പേര്",
+ "PLACEHOLDER": "Category name",
+ "ERROR": "നാമം ആവശ്യമാണ്"
+ },
+ "SLUG": {
+ "LABEL": "Slug",
+ "PLACEHOLDER": "Category slug for urls",
+ "ERROR": "Slug is required",
+ "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}"
+ },
+ "DESCRIPTION": {
+ "LABEL": "വിവരണം",
+ "PLACEHOLDER": "Give a short description about the category.",
+ "ERROR": "വിവരണം ആവശ്യമാണ്"
+ }
+ },
+ "BUTTONS": {
+ "CREATE": "സൃഷ്ടിക്കുക",
+ "EDIT": "അപ്ഡേറ്റ്",
+ "CANCEL": "റദ്ദാക്കുക"
+ }
+ }
+ },
+ "LOCALES_PAGE": {
+ "LOCALES_COUNT": "No locales available | {n} locale | {n} locales",
+ "NEW_LOCALE_BUTTON_TEXT": "New locale",
+ "LOCALE_CARD": {
+ "ARTICLES_COUNT": "{count} article | {count} articles",
+ "CATEGORIES_COUNT": "{count} category | {count} categories",
+ "DEFAULT": "Default",
+ "DROPDOWN_MENU": {
+ "MAKE_DEFAULT": "Make default",
+ "DELETE": "ഇല്ലാതാക്കുക"
+ }
+ },
+ "ADD_LOCALE_DIALOG": {
+ "TITLE": "Add a new locale",
+ "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.",
+ "COMBOBOX": {
+ "PLACEHOLDER": "Select locale..."
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Locale added successfully",
+ "ERROR_MESSAGE": "Unable to add locale. Try again."
+ }
+ }
+ },
+ "EDIT_ARTICLE_PAGE": {
+ "HEADER": {
+ "STATUS": {
+ "SAVING": "Saving...",
+ "SAVED": "Saved"
+ },
+ "PREVIEW": "Preview",
+ "PUBLISH": "Publish",
+ "DRAFT": "Draft",
+ "ARCHIVE": "Archive",
+ "BACK_TO_ARTICLES": "Back to articles"
+ },
+ "EDIT_ARTICLE": {
+ "MORE_PROPERTIES": "More properties",
+ "UNCATEGORIZED": "Uncategorized",
+ "EDITOR_PLACEHOLDER": "Write something..."
+ },
+ "ARTICLE_PROPERTIES": {
+ "ARTICLE_PROPERTIES": "Article properties",
+ "META_DESCRIPTION": "Meta description",
+ "META_DESCRIPTION_PLACEHOLDER": "Add meta description",
+ "META_TITLE": "Meta title",
+ "META_TITLE_PLACEHOLDER": "Add meta title",
+ "META_TAGS": "Meta tags",
+ "META_TAGS_PLACEHOLDER": "Add meta tags"
+ },
+ "API": {
+ "ERROR": "Error while saving article"
+ }
+ },
+ "PORTAL_SWITCHER": {
+ "NEW_PORTAL": "New portal",
+ "PORTALS": "Portals",
+ "CREATE_PORTAL": "Create and manage multiple portals",
+ "ARTICLES": "articles",
+ "DOMAIN": "domain",
+ "PORTAL_NAME": "Portal name"
+ },
+ "CREATE_PORTAL_DIALOG": {
+ "TITLE": "Create new portal",
+ "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.",
+ "CONFIRM_BUTTON_LABEL": "സൃഷ്ടിക്കുക",
+ "NAME": {
+ "LABEL": "പേര്",
+ "PLACEHOLDER": "User Guide | Chatwoot",
+ "MESSAGE": "Choose an name for your portal.",
+ "ERROR": "നാമം ആവശ്യമാണ്"
+ },
+ "SLUG": {
+ "LABEL": "Slug",
+ "PLACEHOLDER": "user-guide",
+ "ERROR": "Slug is required",
+ "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide"
+ }
+ },
+ "PORTAL_SETTINGS": {
+ "FORM": {
+ "AVATAR": {
+ "LABEL": "Logo",
+ "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again",
+ "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo",
+ "IMAGE_DELETE_SUCCESS": "Logo deleted successfully",
+ "IMAGE_DELETE_ERROR": "Unable to delete logo",
+ "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB"
+ },
+ "NAME": {
+ "LABEL": "പേര്",
+ "PLACEHOLDER": "Portal name",
+ "ERROR": "നാമം ആവശ്യമാണ്"
+ },
+ "HEADER_TEXT": {
+ "LABEL": "Header text",
+ "PLACEHOLDER": "Portal header text"
+ },
+ "PAGE_TITLE": {
+ "LABEL": "Page title",
+ "PLACEHOLDER": "Portal page title"
+ },
+ "HOME_PAGE_LINK": {
+ "LABEL": "Home page link",
+ "PLACEHOLDER": "Portal home page link",
+ "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'."
+ },
+ "SLUG": {
+ "LABEL": "Slug",
+ "PLACEHOLDER": "Portal slug"
+ },
+ "LIVE_CHAT_WIDGET": {
+ "LABEL": "Live chat widget",
+ "PLACEHOLDER": "Select live chat widget",
+ "HELP_TEXT": "Select a live chat widget that will appear on your help center",
+ "NONE_OPTION": "No widget"
+ },
+ "BRAND_COLOR": {
+ "LABEL": "Brand color"
+ },
+ "SAVE_CHANGES": "Save changes"
+ },
+ "CONFIGURATION_FORM": {
+ "CUSTOM_DOMAIN": {
+ "HEADER": "Custom domain",
+ "LABEL": "Custom domain:",
+ "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.",
+ "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.",
+ "PLACEHOLDER": "Portal custom domain",
+ "EDIT_BUTTON": "എഡിറ്റുചെയ്യുക",
+ "ADD_BUTTON": "Add custom domain",
+ "STATUS": {
+ "LIVE": "Live",
+ "PENDING": "Awaiting verification",
+ "ERROR": "Verification failed"
+ },
+ "DIALOG": {
+ "ADD_HEADER": "Add custom domain",
+ "EDIT_HEADER": "Edit custom domain",
+ "ADD_CONFIRM_BUTTON_LABEL": "Add domain",
+ "EDIT_CONFIRM_BUTTON_LABEL": "Update domain",
+ "LABEL": "Custom domain",
+ "PLACEHOLDER": "Portal custom domain",
+ "ERROR": "Custom domain is required",
+ "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com"
+ },
+ "DNS_CONFIGURATION_DIALOG": {
+ "HEADER": "DNS configuration",
+ "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help",
+ "COPY": "Successfully copied CNAME",
+ "SEND_INSTRUCTIONS": {
+ "HEADER": "Send instructions",
+ "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.",
+ "PLACEHOLDER": "Enter their email",
+ "ERROR": "Enter a valid email address",
+ "SEND_BUTTON": "അയയ്ക്കുക"
+ }
+ }
+ },
+ "DELETE_PORTAL": {
+ "BUTTON": "Delete {portalName}",
+ "HEADER": "Delete portal",
+ "DESCRIPTION": "Permanently delete this portal. This action is irreversible",
+ "DIALOG": {
+ "HEADER": "Sure you want to delete {portalName}?",
+ "DESCRIPTION": "This is a permanent action that cannot be reversed.",
+ "CONFIRM_BUTTON_LABEL": "ഇല്ലാതാക്കുക"
+ }
+ },
+ "EDIT_CONFIGURATION": "Edit configuration"
+ },
+ "API": {
+ "CREATE_PORTAL": {
+ "SUCCESS_MESSAGE": "Portal created successfully",
+ "ERROR_MESSAGE": "Unable to create portal"
+ },
+ "UPDATE_PORTAL": {
+ "SUCCESS_MESSAGE": "Portal updated successfully",
+ "ERROR_MESSAGE": "Unable to update portal"
+ }
+ }
+ },
+ "PDF_UPLOAD": {
+ "TITLE": "Upload PDF Document",
+ "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI",
+ "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select",
+ "SELECT_FILE": "Select PDF File",
+ "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)",
+ "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...",
+ "UPLOADING": "അപ്ലോഡുചെയ്യുന്നു...",
+ "UPLOAD": "Upload & Process",
+ "CANCEL": "റദ്ദാക്കുക",
+ "ERROR_INVALID_TYPE": "Please select a valid PDF file",
+ "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB",
+ "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again."
+ },
+ "PDF_DOCUMENTS": {
+ "TITLE": "PDF Documents",
+ "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them",
+ "UPLOAD_PDF": "Upload PDF",
+ "UPLOAD_FIRST_PDF": "Upload your first PDF",
+ "UPLOADED_BY": "Uploaded by",
+ "GENERATE_FAQS": "Generate FAQs",
+ "GENERATING": "Generating...",
+ "CONFIRM_DELETE": "Are you sure you want to delete {filename}?",
+ "EMPTY_STATE": {
+ "TITLE": "No PDF documents yet",
+ "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI"
+ },
+ "STATUS": {
+ "UPLOADED": "Ready",
+ "PROCESSING": "Processing",
+ "PROCESSED": "പൂർത്തിയാക്കി",
+ "FAILED": "Failed"
+ }
+ },
+ "CONTENT_GENERATION": {
+ "TITLE": "Content Generation",
+ "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI",
+ "UPLOAD_TITLE": "Upload PDF Document",
+ "DRAG_DROP": "Drag and drop your PDF file here, or click to select",
+ "SELECT_FILE": "Select PDF File",
+ "UPLOADING": "Processing document...",
+ "UPLOAD_SUCCESS": "Document processed successfully!",
+ "UPLOAD_ERROR": "Failed to upload document. Please try again.",
+ "INVALID_FILE_TYPE": "Please select a valid PDF file",
+ "FILE_TOO_LARGE": "File size must be less than 512MB",
+ "GENERATED_CONTENT": "Generated FAQ Content",
+ "PUBLISH_SELECTED": "Publish Selected",
+ "PUBLISHING": "Publishing...",
+ "FROM_DOCUMENT": "From document",
+ "NO_CONTENT": "No generated content available. Upload a PDF document to get started.",
+ "LOADING": "Loading generated content..."
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ml/inbox.json b/app/javascript/dashboard/i18n/locale/ml/inbox.json
new file mode 100644
index 0000000..3b376d0
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ml/inbox.json
@@ -0,0 +1,95 @@
+{
+ "INBOX": {
+ "LIST": {
+ "TITLE": "My Inbox",
+ "DISPLAY_DROPDOWN": "Display",
+ "LOADING": "Fetching notifications",
+ "404": "There are no active notifications in this group.",
+ "NO_NOTIFICATIONS": "No notifications",
+ "NOTE": "Notifications from all subscribed inboxes",
+ "NO_MESSAGES_AVAILABLE": "Oops! Not able to fetch messages",
+ "SNOOZED_UNTIL": "Snoozed until",
+ "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow",
+ "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week"
+ },
+ "ACTION_HEADER": {
+ "SNOOZE": "Snooze notification",
+ "DELETE": "Delete notification",
+ "BACK": "മടങ്ങിപ്പോവുക"
+ },
+ "TYPES": {
+ "CONVERSATION_MENTION": "You have been mentioned in a conversation",
+ "CONVERSATION_CREATION": "New conversation created",
+ "CONVERSATION_ASSIGNMENT": "A conversation has been assigned to you",
+ "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message in an assigned conversation",
+ "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message in a conversation you are participating in",
+ "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation",
+ "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation",
+ "SLA_MISSED_RESOLUTION": "SLA target resolution missed for conversation"
+ },
+ "TYPES_NEXT": {
+ "CONVERSATION_MENTION": "Mentioned",
+ "CONVERSATION_ASSIGNMENT": "Assigned to you",
+ "CONVERSATION_CREATION": "New Conversation",
+ "SLA_MISSED_FIRST_RESPONSE": "SLA breach",
+ "SLA_MISSED_NEXT_RESPONSE": "SLA breach",
+ "SLA_MISSED_RESOLUTION": "SLA breach",
+ "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "പുതിയ സന്ദേശം",
+ "ASSIGNED_CONVERSATION_NEW_MESSAGE": "പുതിയ സന്ദേശം",
+ "SNOOZED_UNTIL": "Snoozed for {time}",
+ "SNOOZED_ENDS": "Snooze ended"
+ },
+ "NO_CONTENT": "ഉള്ളടക്കമൊന്നും ലഭ്യമല്ല",
+ "MENU_ITEM": {
+ "MARK_AS_READ": "Mark as read",
+ "MARK_AS_UNREAD": "Mark as unread",
+ "SNOOZE": "Snooze",
+ "DELETE": "ഇല്ലാതാക്കുക",
+ "MARK_ALL_READ": "എല്ലാം വായിച്ചതായി അടയാളപ്പെടുത്തുക",
+ "DELETE_ALL": "Delete all",
+ "DELETE_ALL_READ": "Delete all read"
+ },
+ "DISPLAY_MENU": {
+ "SORT": "Sort",
+ "DISPLAY": "Display :",
+ "SORT_OPTIONS": {
+ "NEWEST": "Newest",
+ "OLDEST": "Oldest",
+ "PRIORITY": "Priority"
+ },
+ "DISPLAY_OPTIONS": {
+ "SNOOZED": "സ്നൂസ് ചെയ്തു",
+ "READ": "Read",
+ "LABELS": "ലേബലുകൾ",
+ "CONVERSATION_ID": "Conversation ID"
+ }
+ },
+ "ALERTS": {
+ "MARK_AS_READ": "Notification marked as read",
+ "MARK_AS_UNREAD": "Notification marked as unread",
+ "SNOOZE": "Notification snoozed",
+ "DELETE": "Notification deleted",
+ "MARK_ALL_READ": "All notifications marked as read",
+ "DELETE_ALL": "All notifications deleted",
+ "DELETE_ALL_READ": "All read notifications deleted"
+ },
+ "REAUTHORIZE": {
+ "TITLE": "Reauthorization Required",
+ "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.",
+ "BUTTON_TEXT": "Reconnect WhatsApp",
+ "LOADING_FACEBOOK": "Loading Facebook SDK...",
+ "SUCCESS": "WhatsApp reconnected successfully",
+ "ERROR": "Failed to reconnect WhatsApp. Please try again.",
+ "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.",
+ "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.",
+ "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.",
+ "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.",
+ "TROUBLESHOOTING": {
+ "TITLE": "Troubleshooting",
+ "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site",
+ "COOKIES": "Third-party cookies must be enabled",
+ "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account"
+ }
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json
new file mode 100644
index 0000000..278a964
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json
@@ -0,0 +1,1057 @@
+{
+ "INBOX_MGMT": {
+ "HEADER": "ഇൻബോക്സുകൾ",
+ "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.",
+ "LEARN_MORE": "Learn more about inboxes",
+ "RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.",
+ "CLICK_TO_RECONNECT": "Click here to reconnect.",
+ "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.",
+ "COMPLETE_REGISTRATION": "Complete Registration",
+ "LIST": {
+ "404": "ഈ അക്കൗണ്ടിലേക്കു ഇൻബോക്സുകളൊന്നും ബന്ധിപ്പിച്ചിട്ടില്ല."
+ },
+ "CREATE_FLOW": {
+ "CHANNEL": {
+ "TITLE": "ചാനൽ തിരഞ്ഞെടുക്കുക",
+ "BODY": "ചാറ്റ് വൂട്ടുമായി സംയോജിപ്പിക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്ന ദാതാവിനെ തിരഞ്ഞെടുക്കുക."
+ },
+ "INBOX": {
+ "TITLE": "ഇൻബോക്സ് സൃഷ്ടിക്കുക",
+ "BODY": "നിങ്ങളുടെ അക്കൗണ്ട് പ്രാമാണീകരിക്കുകയും ഇൻബോക്സ് സൃഷ്ടിക്കുകയും ചെയ്യുക."
+ },
+ "AGENT": {
+ "TITLE": "ഏജന്റുമാരെ ചേർക്കുക",
+ "BODY": "സൃഷ്ടിച്ച ഇൻബോക്സിലേക്ക് ഏജന്റുമാരെ ചേർക്കുക."
+ },
+ "FINISH": {
+ "TITLE": "Voilà!",
+ "BODY": "എല്ലാം ഭംഗിയായി പാപര്യവസാനിച്ചിരിക്കുന്നു. വരൂ നമുക്ക് പോകാം!"
+ }
+ },
+ "ADD": {
+ "CHANNEL_NAME": {
+ "LABEL": "ഇൻബോക്സ് നാമം",
+ "PLACEHOLDER": "Enter your inbox name (eg: Acme Inc)",
+ "ERROR": "Please enter a valid inbox name"
+ },
+ "WEBSITE_NAME": {
+ "LABEL": "വെബ്സൈറ്റിന്റെ പേര്",
+ "PLACEHOLDER": "നിങ്ങളുടെ വെബ്സൈറ്റിന്റെ പേര് നൽകുക (ഉദാ: പുണ്ണ്യാളൻ അഗർബത്തീസ്)"
+ },
+ "FB": {
+ "HELP": "സൈൻ ഇൻ ചെയ്യുന്നതിലൂടെ, നിങ്ങളുടെ പേജിന്റെ സന്ദേശങ്ങളിലേക്ക് മാത്രമേ ഞങ്ങൾക്ക് പ്രവേശനം ലഭിക്കൂ. നിങ്ങളുടെ സ്വകാര്യ സന്ദേശങ്ങൾ ഒരിക്കലും ചാറ്റ് വൂട്ട് ഉപയോഗിച്ച് ആക്സസ് ചെയ്യാൻ കഴിയില്ല.",
+ "CHOOSE_PAGE": "പേജ് തിരഞ്ഞെടുക്കുക",
+ "CHOOSE_PLACEHOLDER": "ലിസ്റ്റിൽ നിന്ന് ഒരു പേജ് തിരഞ്ഞെടുക്കുക",
+ "INBOX_NAME": "ഇൻബോക്സ് നാമം",
+ "ADD_NAME": "നിങ്ങളുടെ ഇൻബോക്സിനായി ഒരു പേര് ചേർക്കുക",
+ "PICK_NAME": "Pick a Name for your Inbox",
+ "PICK_A_VALUE": "ഒരു മൂല്യം തിരഞ്ഞെടുക്കുക",
+ "CREATE_INBOX": "ഇൻബോക്സ് സൃഷ്ടിക്കുക"
+ },
+ "INSTAGRAM": {
+ "CONTINUE_WITH_INSTAGRAM": "Continue with Instagram",
+ "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile",
+ "HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ",
+ "ERROR_MESSAGE": "There was an error connecting to Instagram, please try again",
+ "ERROR_AUTH": "There was an error connecting to Instagram, please try again",
+ "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.",
+ "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore."
+ },
+ "TIKTOK": {
+ "CONTINUE_WITH_TIKTOK": "Continue with TikTok",
+ "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile",
+ "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ",
+ "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again",
+ "ERROR_AUTH": "There was an error connecting to TikTok, please try again"
+ },
+ "TWITTER": {
+ "HELP": "നിങ്ങളുടെ ട്വിറ്റർ പ്രൊഫൈൽ ഒരു ചാനലായി ചേർക്കുന്നതിന്, 'ട്വിറ്ററിനൊപ്പം പ്രവേശിക്കുക' ക്ലിക്കുചെയ്ത് നിങ്ങളുടെ ട്വിറ്റർ പ്രൊഫൈൽ പ്രാമാണീകരിക്കേണ്ടതുണ്ട് ",
+ "ERROR_MESSAGE": "There was an error connecting to Twitter, please try again",
+ "TWEETS": {
+ "ENABLE": "സൂചിപ്പിച്ച ട്വീറ്റുകളിൽ നിന്ന് സംഭാഷണങ്ങൾ സൃഷ്ടിക്കുക"
+ }
+ },
+ "WEBSITE_CHANNEL": {
+ "TITLE": "വെബ്സൈറ്റ് ചാനൽ",
+ "DESC": "നിങ്ങളുടെ വെബ്സൈറ്റിനായി ഒരു ചാനൽ സൃഷ്ടിച്ച് ഞങ്ങളുടെ വെബ്സൈറ്റ് വിജറ്റ് വഴി ഉപഭോക്താക്കളെ പിന്തുണയ്ക്കാൻ ആരംഭിക്കുക.",
+ "LOADING_MESSAGE": "വെബ്സൈറ്റ് സപ്പോർട്ട് ചാനൽ സൃഷ്ടിക്കുന്നു",
+ "CHANNEL_AVATAR": {
+ "LABEL": "ചാനൽ അവതാർ"
+ },
+ "CHANNEL_WEBHOOK_URL": {
+ "LABEL": "വെബ്ഹുക്ക് യുആർഎൽ",
+ "PLACEHOLDER": "Please enter your Webhook URL",
+ "ERROR": "ദയവായി സാധുവായ ഒരു യുആർഎൽ നൽകുക"
+ },
+ "CHANNEL_DOMAIN": {
+ "LABEL": "വെബ്സൈറ്റ് ഡൊമെയ്ൻ",
+ "PLACEHOLDER": "നിങ്ങളുടെ വെബ്സൈറ്റ് ഡൊമെയ്ൻ നൽകുക (ഉദാ: punnyalan.com)"
+ },
+ "CHANNEL_WELCOME_TITLE": {
+ "LABEL": "സ്വാഗത തലക്കെട്ട്",
+ "PLACEHOLDER": "ഹേയ്, അവിടെയുണ്ടോ!"
+ },
+ "CHANNEL_WELCOME_TAGLINE": {
+ "LABEL": "ടാഗ്ലൈൻ സ്വാഗതം",
+ "PLACEHOLDER": "ഞങ്ങളുമായി കണക്റ്റുചെയ്യുന്നത് ഞങ്ങൾ ലളിതമാക്കുന്നു. ഞങ്ങളോട് എന്തും ചോദിക്കുക, അല്ലെങ്കിൽ നിങ്ങളുടെ ഫീഡ്ബാക്ക് പങ്കിടുക."
+ },
+ "CHANNEL_GREETING_MESSAGE": {
+ "LABEL": "ചാനൽ അഭിവാദ്യ സന്ദേശം",
+ "PLACEHOLDER": "Acme Inc സാധാരണയായി കുറച്ച് മണിക്കൂറിനുള്ളിൽ മറുപടി നൽകുന്നു."
+ },
+ "CHANNEL_GREETING_TOGGLE": {
+ "LABEL": "ചാനൽ അഭിവാദ്യം പ്രവർത്തനക്ഷമമാക്കുക",
+ "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.",
+ "ENABLED": "പ്രവർത്തനക്ഷമമാക്കി",
+ "DISABLED": "പ്രവർത്തനരഹിതമാക്കി"
+ },
+ "REPLY_TIME": {
+ "TITLE": "Set Reply time",
+ "IN_A_FEW_MINUTES": "In a few minutes",
+ "IN_A_FEW_HOURS": "In a few hours",
+ "IN_A_DAY": "In a day",
+ "HELP_TEXT": "This reply time will be displayed on the live chat widget"
+ },
+ "WIDGET_COLOR": {
+ "LABEL": "വിജറ്റ് നിറം",
+ "PLACEHOLDER": "വിജറ്റിൽ ഉപയോഗിച്ച വിജറ്റ് നിറം അപ്ഡേറ്റ് ചെയ്യുക"
+ },
+ "SUBMIT_BUTTON": "ഇൻബോക്സ് സൃഷ്ടിക്കുക",
+ "API": {
+ "ERROR_MESSAGE": "We were not able to create a website channel, please try again"
+ }
+ },
+ "TWILIO": {
+ "TITLE": "Twilio SMS/WhatsApp Channel",
+ "DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.",
+ "ACCOUNT_SID": {
+ "LABEL": "അക്കൗണ്ട് എസ്ഐഡി",
+ "PLACEHOLDER": "ദയവായി നിങ്ങളുടെ ട്വിലിയോ അക്കൗണ്ട് എസ്ഐഡി നൽകുക",
+ "ERROR": "ഈ ഫീൽഡ് ആവശ്യമാണ്"
+ },
+ "API_KEY": {
+ "USE_API_KEY": "Use API Key Authentication",
+ "LABEL": "API Key SID",
+ "PLACEHOLDER": "Please enter your API Key SID",
+ "ERROR": "ഈ ഫീൽഡ് ആവശ്യമാണ്"
+ },
+ "API_KEY_SECRET": {
+ "LABEL": "API Key Secret",
+ "PLACEHOLDER": "Please enter your API Key Secret",
+ "ERROR": "ഈ ഫീൽഡ് ആവശ്യമാണ്"
+ },
+ "MESSAGING_SERVICE_SID": {
+ "LABEL": "Messaging Service SID",
+ "PLACEHOLDER": "Please enter your Twilio Messaging Service SID",
+ "ERROR": "ഈ ഫീൽഡ് ആവശ്യമാണ്",
+ "USE_MESSAGING_SERVICE": "Use a Twilio Messaging Service"
+ },
+ "CHANNEL_TYPE": {
+ "LABEL": "ചാനൽ തരം",
+ "ERROR": "നിങ്ങളുടെ ചാനൽ തരം തിരഞ്ഞെടുക്കുക"
+ },
+ "AUTH_TOKEN": {
+ "LABEL": "ഓത്ത് ടോക്കൺ",
+ "PLACEHOLDER": "ദയവായി നിങ്ങളുടെ ട്വിലിയോ ഓത്ത് ടോക്കൺ നൽകുക",
+ "ERROR": "ഈ ഫീൽഡ് ആവശ്യമാണ്"
+ },
+ "CHANNEL_NAME": {
+ "LABEL": "ഇൻബോക്സ് നാമം",
+ "PLACEHOLDER": "Please enter a inbox name",
+ "ERROR": "ഈ ഫീൽഡ് ആവശ്യമാണ്"
+ },
+ "PHONE_NUMBER": {
+ "LABEL": "ഫോൺ നമ്പർ",
+ "PLACEHOLDER": "ദയവായി സന്ദേശം അയയ്ക്കുന്ന ഫോൺ നമ്പർ നൽകുക.",
+ "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
+ },
+ "API_CALLBACK": {
+ "TITLE": "Callback URL",
+ "SUBTITLE": "You have to configure the message callback URL in Twilio with the URL mentioned here."
+ },
+ "SUBMIT_BUTTON": "ട്വിലിയോ ചാനൽ സൃഷ്ടിക്കുക",
+ "API": {
+ "ERROR_MESSAGE": "ഞങ്ങൾക്ക് ട്വിലിയോ ക്രെഡൻഷ്യലുകൾ പ്രാമാണീകരിക്കാൻ കഴിഞ്ഞില്ല, ദയവായി വീണ്ടും ശ്രമിക്കുക"
+ }
+ },
+ "SMS": {
+ "TITLE": "SMS Channel",
+ "DESC": "Start supporting your customers via SMS.",
+ "PROVIDERS": {
+ "LABEL": "API Provider",
+ "TWILIO": "Twilio",
+ "BANDWIDTH": "Bandwidth"
+ },
+ "API": {
+ "ERROR_MESSAGE": "We were not able to save the SMS channel"
+ },
+ "BANDWIDTH": {
+ "ACCOUNT_ID": {
+ "LABEL": "Account ID",
+ "PLACEHOLDER": "Please enter your Bandwidth Account ID",
+ "ERROR": "ഈ ഫീൽഡ് ആവശ്യമാണ്"
+ },
+ "API_KEY": {
+ "LABEL": "API Key",
+ "PLACEHOLDER": "Please enter your Bandwidth API Key",
+ "ERROR": "ഈ ഫീൽഡ് ആവശ്യമാണ്"
+ },
+ "API_SECRET": {
+ "LABEL": "API Secret",
+ "PLACEHOLDER": "Please enter your Bandwidth API Secret",
+ "ERROR": "ഈ ഫീൽഡ് ആവശ്യമാണ്"
+ },
+ "APPLICATION_ID": {
+ "LABEL": "Application ID",
+ "PLACEHOLDER": "Please enter your Bandwidth Application ID",
+ "ERROR": "ഈ ഫീൽഡ് ആവശ്യമാണ്"
+ },
+ "INBOX_NAME": {
+ "LABEL": "ഇൻബോക്സ് നാമം",
+ "PLACEHOLDER": "Please enter a inbox name",
+ "ERROR": "ഈ ഫീൽഡ് ആവശ്യമാണ്"
+ },
+ "PHONE_NUMBER": {
+ "LABEL": "ഫോൺ നമ്പർ",
+ "PLACEHOLDER": "ദയവായി സന്ദേശം അയയ്ക്കുന്ന ഫോൺ നമ്പർ നൽകുക.",
+ "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
+ },
+ "SUBMIT_BUTTON": "Create Bandwidth Channel",
+ "API": {
+ "ERROR_MESSAGE": "We were not able to authenticate Bandwidth credentials, please try again"
+ },
+ "API_CALLBACK": {
+ "TITLE": "Callback URL",
+ "SUBTITLE": "You have to configure the message callback URL in Bandwidth with the URL mentioned here."
+ }
+ }
+ },
+ "WHATSAPP": {
+ "TITLE": "WhatsApp Channel",
+ "DESC": "Start supporting your customers via WhatsApp.",
+ "PROVIDERS": {
+ "LABEL": "API Provider",
+ "WHATSAPP_EMBEDDED": "WhatsApp Business",
+ "TWILIO": "Twilio",
+ "WHATSAPP_CLOUD": "WhatsApp Cloud",
+ "WHATSAPP_CLOUD_DESC": "Quick setup through Meta",
+ "TWILIO_DESC": "Connect via Twilio credentials",
+ "360_DIALOG": "360Dialog"
+ },
+ "SELECT_PROVIDER": {
+ "TITLE": "Select your API provider",
+ "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials."
+ },
+ "INBOX_NAME": {
+ "LABEL": "ഇൻബോക്സ് നാമം",
+ "PLACEHOLDER": "Please enter an inbox name",
+ "ERROR": "ഈ ഫീൽഡ് ആവശ്യമാണ്"
+ },
+ "PHONE_NUMBER": {
+ "LABEL": "ഫോൺ നമ്പർ",
+ "PLACEHOLDER": "ദയവായി സന്ദേശം അയയ്ക്കുന്ന ഫോൺ നമ്പർ നൽകുക.",
+ "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces."
+ },
+ "PHONE_NUMBER_ID": {
+ "LABEL": "Phone number ID",
+ "PLACEHOLDER": "Please enter the Phone number ID obtained from Facebook developer dashboard.",
+ "ERROR": "Please enter a valid value."
+ },
+ "BUSINESS_ACCOUNT_ID": {
+ "LABEL": "Business Account ID",
+ "PLACEHOLDER": "Please enter the Business Account ID obtained from Facebook developer dashboard.",
+ "ERROR": "Please enter a valid value."
+ },
+ "WEBHOOK_VERIFY_TOKEN": {
+ "LABEL": "Webhook Verify Token",
+ "PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.",
+ "ERROR": "Please enter a valid value."
+ },
+ "API_KEY": {
+ "LABEL": "API key",
+ "SUBTITLE": "Configure the WhatsApp API key.",
+ "PLACEHOLDER": "API key",
+ "ERROR": "Please enter a valid value."
+ },
+ "API_CALLBACK": {
+ "TITLE": "Callback URL",
+ "SUBTITLE": "You have to configure the webhook URL and the verification token in the Facebook Developer portal with the values shown below.",
+ "WEBHOOK_URL": "വെബ്ഹുക്ക് യുആർഎൽ",
+ "WEBHOOK_VERIFICATION_TOKEN": "Webhook Verification Token"
+ },
+ "SUBMIT_BUTTON": "Create WhatsApp Channel",
+ "EMBEDDED_SIGNUP": {
+ "TITLE": "Quick setup with Meta",
+ "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.",
+ "BENEFITS": {
+ "TITLE": "Benefits of Embedded Signup:",
+ "EASY_SETUP": "No manual configuration required",
+ "SECURE_AUTH": "Secure OAuth based authentication",
+ "AUTO_CONFIG": "Automatic webhook and phone number configuration"
+ },
+ "LEARN_MORE": {
+ "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.",
+ "LINK_TEXT": "this link"
+ },
+ "SUBMIT_BUTTON": "Connect with WhatsApp Business",
+ "AUTH_PROCESSING": "Authenticating with Meta",
+ "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...",
+ "PROCESSING": "Setting up your WhatsApp Business Account",
+ "LOADING_SDK": "Loading Facebook SDK...",
+ "CANCELLED": "WhatsApp Signup was cancelled",
+ "SUCCESS_TITLE": "WhatsApp Business Account Connected!",
+ "WAITING_FOR_AUTH": "Waiting for authentication...",
+ "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.",
+ "SIGNUP_ERROR": "Signup error occurred",
+ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.",
+ "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured",
+ "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow",
+ "MANUAL_LINK_TEXT": "manual setup flow"
+ },
+ "API": {
+ "ERROR_MESSAGE": "We were not able to save the WhatsApp channel"
+ }
+ },
+ "VOICE": {
+ "TITLE": "Voice Channel",
+ "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.",
+ "PHONE_NUMBER": {
+ "LABEL": "ഫോൺ നമ്പർ",
+ "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)",
+ "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)"
+ },
+ "TWILIO": {
+ "ACCOUNT_SID": {
+ "LABEL": "അക്കൗണ്ട് എസ്ഐഡി",
+ "PLACEHOLDER": "Enter your Twilio Account SID",
+ "REQUIRED": "Account SID is required"
+ },
+ "AUTH_TOKEN": {
+ "LABEL": "ഓത്ത് ടോക്കൺ",
+ "PLACEHOLDER": "Enter your Twilio Auth Token",
+ "REQUIRED": "Auth Token is required"
+ },
+ "API_KEY_SID": {
+ "LABEL": "API Key SID",
+ "PLACEHOLDER": "Enter your Twilio API Key SID",
+ "REQUIRED": "API Key SID is required"
+ },
+ "API_KEY_SECRET": {
+ "LABEL": "API Key Secret",
+ "PLACEHOLDER": "Enter your Twilio API Key Secret",
+ "REQUIRED": "API Key Secret is required"
+ }
+ },
+ "CONFIGURATION": {
+ "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL",
+ "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.",
+ "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL",
+ "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number."
+ },
+ "SUBMIT_BUTTON": "Create Voice Channel",
+ "API": {
+ "ERROR_MESSAGE": "We were not able to create the voice channel"
+ }
+ },
+ "API_CHANNEL": {
+ "TITLE": "API Channel",
+ "DESC": "Integrate with API channel and start supporting your customers.",
+ "CHANNEL_NAME": {
+ "LABEL": "ചാനലിന്റെ പേര്",
+ "PLACEHOLDER": "ഈ ചാനലിനു ദയവായി ഒരു പേര് നൽകുക",
+ "ERROR": "ഈ ഫീൽഡ് ആവശ്യമാണ്"
+ },
+ "WEBHOOK_URL": {
+ "LABEL": "വെബ്ഹുക്ക് യുആർഎൽ",
+ "SUBTITLE": "Configure the URL where you want to receive callbacks on events.",
+ "PLACEHOLDER": "വെബ്ഹുക്ക് യുആർഎൽ"
+ },
+ "SUBMIT_BUTTON": "Create API Channel",
+ "API": {
+ "ERROR_MESSAGE": "We were not able to save the api channel"
+ }
+ },
+ "EMAIL_CHANNEL": {
+ "TITLE": "Email Channel",
+ "DESC": "Integrate your email inbox.",
+ "CHANNEL_NAME": {
+ "LABEL": "ചാനലിന്റെ പേര്",
+ "PLACEHOLDER": "ഈ ചാനലിനു ദയവായി ഒരു പേര് നൽകുക",
+ "ERROR": "ഈ ഫീൽഡ് ആവശ്യമാണ്"
+ },
+ "EMAIL": {
+ "LABEL": "ഇമെയിൽ",
+ "SUBTITLE": "Email where your customers sends you support tickets",
+ "PLACEHOLDER": "ഇമെയിൽ"
+ },
+ "SUBMIT_BUTTON": "Create Email Channel",
+ "API": {
+ "ERROR_MESSAGE": "We were not able to save the email channel"
+ },
+ "FINISH_MESSAGE": "Start forwarding your emails to the following email address.",
+ "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.",
+ "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:",
+ "CONFIGURE_SMTP_IMAP_LINK": "ഇവിടെ ക്ലിക്കു ചെയ്യുക",
+ "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings"
+ },
+ "LINE_CHANNEL": {
+ "TITLE": "LINE Channel",
+ "DESC": "Integrate with LINE channel and start supporting your customers.",
+ "CHANNEL_NAME": {
+ "LABEL": "ചാനലിന്റെ പേര്",
+ "PLACEHOLDER": "ഈ ചാനലിനു ദയവായി ഒരു പേര് നൽകുക",
+ "ERROR": "ഈ ഫീൽഡ് ആവശ്യമാണ്"
+ },
+ "LINE_CHANNEL_ID": {
+ "LABEL": "LINE Channel ID",
+ "PLACEHOLDER": "LINE Channel ID"
+ },
+ "LINE_CHANNEL_SECRET": {
+ "LABEL": "LINE Channel Secret",
+ "PLACEHOLDER": "LINE Channel Secret"
+ },
+ "LINE_CHANNEL_TOKEN": {
+ "LABEL": "LINE Channel Token",
+ "PLACEHOLDER": "LINE Channel Token"
+ },
+ "SUBMIT_BUTTON": "Create LINE Channel",
+ "API": {
+ "ERROR_MESSAGE": "We were not able to save the LINE channel"
+ },
+ "API_CALLBACK": {
+ "TITLE": "Callback URL",
+ "SUBTITLE": "You have to configure the webhook URL in LINE application with the URL mentioned here."
+ }
+ },
+ "TELEGRAM_CHANNEL": {
+ "TITLE": "Telegram Channel",
+ "DESC": "Integrate with Telegram channel and start supporting your customers.",
+ "BOT_TOKEN": {
+ "LABEL": "Bot Token",
+ "SUBTITLE": "Configure the bot token you have obtained from Telegram BotFather.",
+ "PLACEHOLDER": "Bot Token"
+ },
+ "SUBMIT_BUTTON": "Create Telegram Channel",
+ "API": {
+ "ERROR_MESSAGE": "We were not able to save the telegram channel"
+ }
+ },
+ "AUTH": {
+ "TITLE": "Choose a channel",
+ "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.",
+ "TITLE_NEXT": "Complete the setup",
+ "TITLE_FINISH": "Voilà!",
+ "CHANNEL": {
+ "WEBSITE": {
+ "TITLE": "Website",
+ "DESCRIPTION": "Create a live-chat widget"
+ },
+ "FACEBOOK": {
+ "TITLE": "Facebook",
+ "DESCRIPTION": "Connect your Facebook page"
+ },
+ "WHATSAPP": {
+ "TITLE": "WhatsApp",
+ "DESCRIPTION": "Support your customers on WhatsApp"
+ },
+ "EMAIL": {
+ "TITLE": "ഇമെയിൽ",
+ "DESCRIPTION": "Connect with Gmail, Outlook, or other providers"
+ },
+ "SMS": {
+ "TITLE": "SMS",
+ "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth"
+ },
+ "API": {
+ "TITLE": "API",
+ "DESCRIPTION": "Make a custom channel using our API"
+ },
+ "TELEGRAM": {
+ "TITLE": "Telegram",
+ "DESCRIPTION": "Configure Telegram channel using Bot token"
+ },
+ "LINE": {
+ "TITLE": "Line",
+ "DESCRIPTION": "Integrate your Line channel"
+ },
+ "INSTAGRAM": {
+ "TITLE": "Instagram",
+ "DESCRIPTION": "Connect your instagram account"
+ },
+ "TIKTOK": {
+ "TITLE": "TikTok",
+ "DESCRIPTION": "Connect your TikTok account"
+ },
+ "VOICE": {
+ "TITLE": "Voice",
+ "DESCRIPTION": "Integrate with Twilio Voice"
+ }
+ }
+ },
+ "AGENTS": {
+ "TITLE": "ഏജന്റുമാർ",
+ "DESC": "നിങ്ങളുടെ പുതുതായി സൃഷ്ടിച്ച ഇൻബോക്സ് മാനേജു ചെയ്യുന്നതിന് ഇവിടെ നിങ്ങൾക്ക് ഏജന്റുമാരെ ചേർക്കാൻ കഴിയും. ഈ തിരഞ്ഞെടുത്ത ഏജന്റുമാർക്ക് മാത്രമേ നിങ്ങളുടെ ഇൻബോക്സിലേക്ക് ആക്സസ് ഉണ്ടായിരിക്കുകയുള്ളൂ. ഈ ഇൻബോക്സിന്റെ ഭാഗമല്ലാത്ത ഏജന്റുമാർക്ക് ഈ ഇൻബോക്സിലെ സന്ദേശങ്ങൾ കാണാനോ പ്രതികരിക്കാനോ കഴിയില്ല.
ഒരു അഡ്മിനിസ്ട്രേറ്റർ എന്ന നിലയിൽ, നിങ്ങൾക്ക് എല്ലാ ഇൻബോക്സുകളിലേക്കും ആക്സസ് ആവശ്യമുണ്ടെങ്കിൽ, നിങ്ങൾ സൃഷ്ടിക്കുന്ന എല്ലാ ഇൻബോക്സുകളിലേക്കും നിങ്ങൾ സ്വയം ഏജന്റായി ചേർക്കണം.",
+ "VALIDATION_ERROR": "Add at least one agent to your new Inbox",
+ "PICK_AGENTS": "Pick agents for the inbox"
+ },
+ "DETAILS": {
+ "TITLE": "ഇൻബോക്സ് വിശദാംശങ്ങൾ",
+ "DESC": "ചുവടെയുള്ള ഡ്രോപ്പ്ഡൗണിൽ നിന്ന്, നിങ്ങൾക്ക് ചാറ്റ് വൂട്ടിലേക്ക് കണക്റ്റുചെയ്യാൻ ആഗ്രഹിക്കുന്ന ഫേസ്ബുക്ക് പേജ് തിരഞ്ഞെടുക്കുക. തിരിച്ചറിയലിനായി നിങ്ങളുടെ ഇൻബോക്സിനു ഒരു ഇച്ഛാനുസൃത പേര് നല്കാൻ കഴിയും."
+ },
+ "FINISH": {
+ "TITLE": "പൊളിച്ചു അടുക്കി!",
+ "DESC": "നിങ്ങളുടെ ഫേസ്ബുക്ക് പേജ് ചാറ്റ് വൂട്ടുമായി സമന്വയിപ്പിക്കുന്നത് നിങ്ങൾ വിജയകരമായി പൂർത്തിയാക്കി. അടുത്ത തവണ ഒരു ഉപയോക്താവ് നിങ്ങളുടെ പേജിലേക്ക് സന്ദേശമയയ്ക്കുമ്പോൾ, സംഭാഷണം ഓട്ടോമാറ്റിക്കലി നിങ്ങളുടെ ഇൻബോക്സിൽ ദൃശ്യമാകും.
നിങ്ങൾക്ക് എളുപ്പത്തിൽ സംയോജിപ്പിക്കാൻ കഴിയുന്ന ഒരു വിജറ്റ് സ്ക്രിപ്റ്റും ഞങ്ങൾ നിങ്ങൾക്ക് നൽകുന്നു. ഇത് നിങ്ങളുടെ വെബ്സൈറ്റിലേക്ക് ചേർക്കുക. ഇത് നിങ്ങളുടെ വെബ്സൈറ്റിൽ തത്സമയമായിക്കഴിഞ്ഞാൽ, ഉപയോക്താക്കൾക്ക് നിങ്ങളുടെ വെബ്സൈറ്റിൽ നിന്ന് നിങ്ങൾക്ക് സന്ദേശം അയയ്ക്കാൻ കഴിയും, ഒപ്പം സംഭാഷണം ചാറ്റ് വൂട്ടിൽ തന്നെ ദൃശ്യമാകും.
കൊള്ളാം, അല്ലേ? :)"
+ },
+ "EMAIL_PROVIDER": {
+ "TITLE": "Select your email provider",
+ "DESCRIPTION": "Select an email provider from the list below. If you don't see your email provider in the list, you can select the other provider option and provide the IMAP and SMTP Credentials."
+ },
+ "MICROSOFT": {
+ "TITLE": "Microsoft Email",
+ "DESCRIPTION": "Click on the Sign in with Microsoft button to get started. You will redirected to the email sign in page. Once you accept the requested permissions, you would be redirected back to the inbox creation step.",
+ "EMAIL_PLACEHOLDER": "Enter email address",
+ "SIGN_IN": "Sign in with Microsoft",
+ "ERROR_MESSAGE": "There was an error connecting to Microsoft, please try again"
+ },
+ "GOOGLE": {
+ "TITLE": "Google Email",
+ "DESCRIPTION": "Click on the Sign in with Google button to get started. You will redirected to the email sign in page. Once you accept the requested permissions, you would be redirected back to the inbox creation step.",
+ "SIGN_IN": "Sign in with Google",
+ "EMAIL_PLACEHOLDER": "Enter email address",
+ "ERROR_MESSAGE": "There was an error connecting to Google, please try again"
+ }
+ },
+ "DETAILS": {
+ "LOADING_FB": "ഫേസ്ബുക് ഉപയോഗിച്ച് നിങ്ങളെ പ്രാമാണീകരിക്കുന്നു...",
+ "ERROR_FB_LOADING": "Error loading Facebook SDK. Please disable any ad-blockers and try again from a different browser.",
+ "ERROR_FB_AUTH": "എന്തോ കുഴപ്പം സംഭവിച്ചു, ദയവായി പേജ് പുതുക്കുക...",
+ "ERROR_FB_UNAUTHORIZED": "You're not authorized to perform this action. ",
+ "ERROR_FB_UNAUTHORIZED_HELP": "Please ensure you have access to the Facebook page with full control. You can read more about Facebook roles here.",
+ "CREATING_CHANNEL": "നിങ്ങളുടെ ഇൻബോക്സ് സൃഷ്ടിച്ചു കൊണ്ട് ഇരിക്കുകയാണ്...",
+ "TITLE": "ഇൻബോക്സ് വിശദാംശങ്ങൾ കോൺഫിഗർ ചെയ്യുക",
+ "DESC": ""
+ },
+ "AGENTS": {
+ "BUTTON_TEXT": "ഏജന്റുമാരെ ചേർക്കുക",
+ "ADD_AGENTS": "നിങ്ങളുടെ ഇൻബോക്സിലേക്ക് ഏജന്റുമാരെ ചേർക്കുകയാണ്..."
+ },
+ "FINISH": {
+ "TITLE": "നിങ്ങളുടെ ഇൻബോക്സ് തയ്യാറാണ്!",
+ "MESSAGE": "You can now engage with your customers through your new Channel. Happy supporting",
+ "BUTTON_TEXT": "എന്നെ അവിടേക്ക് കൊണ്ടുപോകുക",
+ "MORE_SETTINGS": "More settings",
+ "WEBSITE_SUCCESS": "നിങ്ങൾ ഒരു വെബ്സൈറ്റ് ചാനൽ സൃഷ്ടിക്കുന്നത് വിജയകരമായി പൂർത്തിയാക്കി. ചുവടെ കാണിച്ചിരിക്കുന്ന കോഡ് പകർത്തി നിങ്ങളുടെ വെബ്സൈറ്റിൽ ചേർക്കുക. അടുത്ത തവണ ഒരു ഉപഭോക്താവ് തത്സമയ ചാറ്റ് ഉപയോഗിക്കുമ്പോൾ, സംഭാഷണം ഓട്ടോമാറ്റിക് ആയി നിങ്ങളുടെ ഇൻബോക്സിൽ ദൃശ്യമാകും.",
+ "WHATSAPP_QR_INSTRUCTION": "Scan the QR code above to quickly test your WhatsApp inbox",
+ "MESSENGER_QR_INSTRUCTION": "Scan the QR code above to quickly test your Facebook Messenger inbox",
+ "TELEGRAM_QR_INSTRUCTION": "Scan the QR code above to quickly test your Telegram inbox"
+ },
+ "REAUTH": "വീണ്ടും അംഗീകാരം നൽകുക",
+ "VIEW": "കാണുക",
+ "EDIT": {
+ "API": {
+ "SUCCESS_MESSAGE": "വിജറ്റ് നിറം വിജയകരമായി അപ്ഡേറ്റു ചെയ്തു",
+ "AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "ഓട്ടോമാറ്റിക് അസൈൻമെന്റ് വിജയകരമായി അപ്ഡേറ്റുചെയ്തു",
+ "ERROR_MESSAGE": "We couldn't update inbox settings. Please try again later."
+ },
+ "EMAIL_COLLECT_BOX": {
+ "ENABLED": "പ്രവർത്തനക്ഷമമാക്കി",
+ "DISABLED": "പ്രവർത്തനരഹിതമാക്കി"
+ },
+ "ENABLE_CSAT": {
+ "ENABLED": "പ്രവർത്തനക്ഷമമാക്കി",
+ "DISABLED": "പ്രവർത്തനരഹിതമാക്കി"
+ },
+ "SENDER_NAME_SECTION": {
+ "TITLE": "Sender name",
+ "SUB_TEXT": "Select the name shown to your customer when they receive emails from your agents.",
+ "FOR_EG": "For eg:",
+ "FRIENDLY": {
+ "TITLE": "Friendly",
+ "FROM": "നിന്ന്",
+ "SUBTITLE": "Add the name of the agent who sent the reply in the sender name to make it friendly."
+ },
+ "PROFESSIONAL": {
+ "TITLE": "Professional",
+ "SUBTITLE": "Use only the configured business name as the sender name in the email header."
+ },
+ "BUSINESS_NAME": {
+ "BUTTON_TEXT": "+ Configure your business name",
+ "PLACEHOLDER": "Enter your business name",
+ "SAVE_BUTTON_TEXT": "Save"
+ }
+ },
+ "ALLOW_MESSAGES_AFTER_RESOLVED": {
+ "ENABLED": "പ്രവർത്തനക്ഷമമാക്കി",
+ "DISABLED": "പ്രവർത്തനരഹിതമാക്കി"
+ },
+ "ENABLE_CONTINUITY_VIA_EMAIL": {
+ "ENABLED": "പ്രവർത്തനക്ഷമമാക്കി",
+ "DISABLED": "പ്രവർത്തനരഹിതമാക്കി"
+ },
+ "LOCK_TO_SINGLE_CONVERSATION": {
+ "ENABLED": "പ്രവർത്തനക്ഷമമാക്കി",
+ "DISABLED": "പ്രവർത്തനരഹിതമാക്കി"
+ },
+ "ENABLE_HMAC": {
+ "LABEL": "Enable"
+ }
+ },
+ "DELETE": {
+ "BUTTON_TEXT": "ഇല്ലാതാക്കുക",
+ "AVATAR_DELETE_BUTTON_TEXT": "Delete Avatar",
+ "CONFIRM": {
+ "TITLE": "ഇല്ലാതാക്കൽ സ്ഥിരീകരിക്കുക",
+ "MESSAGE": "ഇല്ലാതാക്കണമെന്നു ഉറപ്പാണോ ",
+ "PLACE_HOLDER": "Please type {inboxName} to confirm",
+ "YES": "അതെ, ഇല്ലാതാക്കുക ",
+ "NO": "ഇല്ല, സൂക്ഷിക്കുക"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "ഇൻബോക്സ് വിജയകരമായി ഇല്ലാതാക്കിയിരിക്കുന്നു",
+ "ERROR_MESSAGE": "ഇൻബോക്സ് ഇല്ലാതാക്കാൻ കഴിഞ്ഞില്ല. ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക.",
+ "AVATAR_SUCCESS_MESSAGE": "Inbox avatar deleted successfully",
+ "AVATAR_ERROR_MESSAGE": "Could not delete the inbox avatar. Please try again later."
+ }
+ },
+ "TABS": {
+ "SETTINGS": "ക്രമീകരണങ്ങൾ",
+ "COLLABORATORS": "Collaborators",
+ "CONFIGURATION": "Configuration",
+ "CAMPAIGN": "പ്രചാരണങ്ങൾ",
+ "PRE_CHAT_FORM": "Pre Chat Form",
+ "BUSINESS_HOURS": "Business Hours",
+ "WIDGET_BUILDER": "Widget Builder",
+ "BOT_CONFIGURATION": "Bot Configuration",
+ "ACCOUNT_HEALTH": "Account Health",
+ "CSAT": "CSAT"
+ },
+ "ACCOUNT_HEALTH": {
+ "TITLE": "Manage your WhatsApp account",
+ "DESCRIPTION": "Review your WhatsApp account status, messaging limits, and quality. Update settings or resolve issues if needed",
+ "GO_TO_SETTINGS": "Go to Meta Business Manager",
+ "NO_DATA": "Health data is not available",
+ "FIELDS": {
+ "DISPLAY_PHONE_NUMBER": {
+ "LABEL": "Display phone number",
+ "TOOLTIP": "Phone number displayed to customers"
+ },
+ "VERIFIED_NAME": {
+ "LABEL": "Business name",
+ "TOOLTIP": "Business name verified by WhatsApp"
+ },
+ "DISPLAY_NAME_STATUS": {
+ "LABEL": "Display name status",
+ "TOOLTIP": "Status of your business name verification"
+ },
+ "QUALITY_RATING": {
+ "LABEL": "Quality rating",
+ "TOOLTIP": "WhatsApp quality rating for your account"
+ },
+ "MESSAGING_LIMIT_TIER": {
+ "LABEL": "Messaging limit tier",
+ "TOOLTIP": "Daily messaging limit for your account"
+ },
+ "ACCOUNT_MODE": {
+ "LABEL": "Account mode",
+ "TOOLTIP": "Current operating mode of your WhatsApp account"
+ }
+ },
+ "VALUES": {
+ "TIERS": {
+ "TIER_250": "250 customers per 24h",
+ "TIER_1000": "1K customers per 24h",
+ "TIER_1K": "1K customers per 24h",
+ "TIER_10K": "10K customers per 24h",
+ "TIER_100K": "100K customers per 24h",
+ "TIER_UNLIMITED": "Unlimited customers per 24h",
+ "UNKNOWN": "Rating not available"
+ },
+ "STATUSES": {
+ "APPROVED": "Approved",
+ "PENDING_REVIEW": "Pending Review",
+ "AVAILABLE_WITHOUT_REVIEW": "Available Without Review",
+ "REJECTED": "Rejected",
+ "DECLINED": "Declined",
+ "NON_EXISTS": "Non exists"
+ },
+ "MODES": {
+ "SANDBOX": "Sandbox",
+ "LIVE": "Live"
+ }
+ }
+ },
+ "SETTINGS": "ക്രമീകരണങ്ങൾ",
+ "FEATURES": {
+ "LABEL": "Features",
+ "DISPLAY_FILE_PICKER": "Display file picker on the widget",
+ "DISPLAY_EMOJI_PICKER": "Display emoji picker on the widget",
+ "ALLOW_END_CONVERSATION": "Allow users to end conversation from the widget",
+ "USE_INBOX_AVATAR_FOR_BOT": "Use inbox name and avatar for the bot"
+ },
+ "SETTINGS_POPUP": {
+ "MESSENGER_HEADING": "മെസഞ്ചർ സ്ക്രിപ്റ്റ്",
+ "MESSENGER_SUB_HEAD": "ഈ ബട്ടൺ നിങ്ങളുടെ ബോഡി ടാഗിനുള്ളിൽ സ്ഥാപിക്കുക",
+ "ALLOWED_DOMAINS": {
+ "TITLE": "Allowed Domains",
+ "SUBTITLE": "Add wildcard or regular domains separated by commas (leave blank to allow all), e.g. *.chatwoot.dev, chatwoot.com.",
+ "PLACEHOLDER": "Enter domains separated by commas (eg: *.chatwoot.dev, chatwoot.com)"
+ },
+ "INBOX_AGENTS": "ഏജന്റുമാർ",
+ "INBOX_AGENTS_SUB_TEXT": "ഈ ഇൻബോക്സിൽ നിന്ന് ഏജന്റുമാരെ ചേർക്കുക അല്ലെങ്കിൽ നീക്കംചെയ്യുക",
+ "AGENT_ASSIGNMENT": "Conversation Assignment",
+ "AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings",
+ "UPDATE": "അപ്ഡേറ്റ്",
+ "ENABLE_EMAIL_COLLECT_BOX": "Enable email collect box",
+ "ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Enable or disable email collect box on new conversation",
+ "AUTO_ASSIGNMENT": "ഓട്ടോ അസൈൻമെന്റ് പ്രവർത്തനക്ഷമമാക്കുക",
+ "SENDER_NAME_SECTION": "Enable Agent Name in Email",
+ "SENDER_NAME_SECTION_TEXT": "Enable/Disable showing Agent's name in email, if disabled it will show business name",
+ "ENABLE_CONTINUITY_VIA_EMAIL": "ഇമെയിൽ വഴി സംഭാഷണ തുടർച്ച പ്രവർത്തനക്ഷമമാക്കുക",
+ "ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "ബന്ധപ്പെടാനുള്ള ഇമെയിൽ വിലാസം ലഭ്യമാണെങ്കിൽ സംഭാഷണങ്ങൾ ഇമെയിൽ വഴി തുടരും.",
+ "LOCK_TO_SINGLE_CONVERSATION": "Lock to single conversation",
+ "LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT": "Enable or disable multiple conversations for the same contact in this inbox",
+ "INBOX_UPDATE_TITLE": "Inbox Settings",
+ "INBOX_UPDATE_SUB_TEXT": "Update your inbox settings",
+ "AUTO_ASSIGNMENT_SUB_TEXT": "പുതിയ സംഭാഷണങ്ങളിൽ ലഭ്യമായ ഏജന്റുമാരുടെ ഓട്ടോമാറ്റിക് അസൈൻമെന്റ് പ്രാപ്തമാക്കുകയോ അപ്രാപ്തമാക്കുകയോ ചെയ്യുക",
+ "HMAC_VERIFICATION": "User Identity Validation",
+ "HMAC_DESCRIPTION": "In order to validate the user's identity, you can pass an `identifier_hash` for each user. You can generate a HMAC sha256 hash using the `identifier` with the key shown here.",
+ "HMAC_LINK_TO_DOCS": "You can read more here.",
+ "HMAC_MANDATORY_VERIFICATION": "Enforce User Identity Validation",
+ "HMAC_MANDATORY_DESCRIPTION": "If enabled, requests missing the `identifier_hash` will be rejected.",
+ "INBOX_IDENTIFIER": "Inbox Identifier",
+ "INBOX_IDENTIFIER_SUB_TEXT": "Use the `inbox_identifier` token shown here to authentication your API clients.",
+ "FORWARD_EMAIL_TITLE": "Forward to Email",
+ "FORWARD_EMAIL_SUB_TEXT": "Start forwarding your emails to the following email address.",
+ "FORWARD_EMAIL_NOT_CONFIGURED": "Forwarding emails to your inbox is currently disabled on this installation. To use this feature, it must be enabled by your administrator. Please get in touch with them to proceed.",
+ "ALLOW_MESSAGES_AFTER_RESOLVED": "സംഭാഷണം പരിഹരിച്ചതിന് ശേഷം സന്ദേശങ്ങൾ അനുവദിക്കുക",
+ "ALLOW_MESSAGES_AFTER_RESOLVED_SUB_TEXT": "സംഭാഷണം പരിഹരിച്ചതിന് ശേഷവും സന്ദേശങ്ങൾ അയയ്ക്കാൻ അന്തിമ ഉപയോക്താക്കളെ അനുവദിക്കുക.",
+ "WHATSAPP_SECTION_SUBHEADER": "This API Key is used for the integration with the WhatsApp APIs.",
+ "WHATSAPP_SECTION_UPDATE_SUBHEADER": "Enter the new API key to be used for the integration with the WhatsApp APIs.",
+ "WHATSAPP_SECTION_TITLE": "API Key",
+ "WHATSAPP_SECTION_UPDATE_TITLE": "Update API Key",
+ "WHATSAPP_SECTION_UPDATE_PLACEHOLDER": "Enter the new API Key here",
+ "WHATSAPP_SECTION_UPDATE_BUTTON": "അപ്ഡേറ്റ്",
+ "WHATSAPP_EMBEDDED_SIGNUP_TITLE": "WhatsApp Embedded Signup",
+ "WHATSAPP_EMBEDDED_SIGNUP_SUBHEADER": "This inbox is connected through WhatsApp embedded signup.",
+ "WHATSAPP_EMBEDDED_SIGNUP_DESCRIPTION": "You can reconfigure this inbox to update your WhatsApp Business settings.",
+ "WHATSAPP_RECONFIGURE_BUTTON": "Reconfigure",
+ "WHATSAPP_CONNECT_TITLE": "Connect to WhatsApp Business",
+ "WHATSAPP_CONNECT_SUBHEADER": "Upgrade to WhatsApp embedded signup for easier management.",
+ "WHATSAPP_CONNECT_DESCRIPTION": "Connect this inbox to WhatsApp Business for enhanced features and easier management.",
+ "WHATSAPP_CONNECT_BUTTON": "ബന്ധിപ്പിക്കുക",
+ "WHATSAPP_CONNECT_SUCCESS": "Successfully connected to WhatsApp Business!",
+ "WHATSAPP_CONNECT_ERROR": "Failed to connect to WhatsApp Business. Please try again.",
+ "WHATSAPP_RECONFIGURE_SUCCESS": "Successfully reconfigured WhatsApp Business!",
+ "WHATSAPP_RECONFIGURE_ERROR": "Failed to reconfigure WhatsApp Business. Please try again.",
+ "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.",
+ "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.",
+ "WHATSAPP_LOGIN_CANCELLED": "WhatsApp login was cancelled. Please try again.",
+ "WHATSAPP_WEBHOOK_TITLE": "Webhook Verification Token",
+ "WHATSAPP_WEBHOOK_SUBHEADER": "This token is used to verify the authenticity of the webhook endpoint.",
+ "WHATSAPP_TEMPLATES_SYNC_TITLE": "Sync Templates",
+ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.",
+ "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates",
+ "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.",
+ "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings"
+ },
+ "HELP_CENTER": {
+ "LABEL": "Help Center",
+ "PLACEHOLDER": "Select Help Center",
+ "SELECT_PLACEHOLDER": "Select Help Center",
+ "REMOVE": "Remove Help Center",
+ "SUB_TEXT": "Attach a Help Center with the inbox"
+ },
+ "AUTO_ASSIGNMENT": {
+ "MAX_ASSIGNMENT_LIMIT": "Auto assignment limit",
+ "MAX_ASSIGNMENT_LIMIT_RANGE_ERROR": "Please enter a value greater than 0",
+ "MAX_ASSIGNMENT_LIMIT_SUB_TEXT": "Limit the maximum number of conversations from this inbox that can be auto assigned to an agent"
+ },
+ "FACEBOOK_REAUTHORIZE": {
+ "TITLE": "വീണ്ടും അംഗീകാരം നൽകുക",
+ "SUBTITLE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services",
+ "MESSAGE_SUCCESS": "Reconnection successful",
+ "MESSAGE_ERROR": "ഒരു പിശക് ഉണ്ടായിരുന്നു, ദയവായി വീണ്ടും ശ്രമിക്കുക"
+ },
+ "PRE_CHAT_FORM": {
+ "DESCRIPTION": "Pre chat forms enable you to capture user information before they start conversation with you.",
+ "SET_FIELDS": "Pre chat form fields",
+ "SET_FIELDS_HEADER": {
+ "FIELDS": "Fields",
+ "LABEL": "Label",
+ "PLACE_HOLDER": "Placeholder",
+ "KEY": "കീ",
+ "TYPE": "തരം",
+ "REQUIRED": "Required"
+ },
+ "ENABLE": {
+ "LABEL": "Enable pre chat form",
+ "OPTIONS": {
+ "ENABLED": "Yes",
+ "DISABLED": "No"
+ }
+ },
+ "PRE_CHAT_MESSAGE": {
+ "LABEL": "Pre chat message",
+ "PLACEHOLDER": "This message would be visible to the users along with the form"
+ },
+ "REQUIRE_EMAIL": {
+ "LABEL": "Visitors should provide their name and email address before starting the chat"
+ }
+ },
+ "CSAT": {
+ "TITLE": "Enable CSAT",
+ "SUBTITLE": "Automatically trigger CSAT surveys at the end of conversations to understand how customers feel about their support experience. Track satisfaction trends and identify areas for improvement over time.",
+ "DISPLAY_TYPE": {
+ "LABEL": "Display type"
+ },
+ "MESSAGE": {
+ "LABEL": "സന്ദേശം",
+ "PLACEHOLDER": "Please enter a message to show users with the form"
+ },
+ "BUTTON_TEXT": {
+ "LABEL": "Button text",
+ "PLACEHOLDER": "Please rate us"
+ },
+ "LANGUAGE": {
+ "LABEL": "Language",
+ "PLACEHOLDER": "Select template language"
+ },
+ "MESSAGE_PREVIEW": {
+ "LABEL": "Message preview",
+ "TOOLTIP": "This may vary slightly when rendered on WhatsApp's platform."
+ },
+ "TEMPLATE_STATUS": {
+ "APPROVED": "Approved by WhatsApp",
+ "PENDING": "Pending WhatsApp approval",
+ "REJECTED": "Meta rejected the template",
+ "DEFAULT": "Needs WhatsApp approval",
+ "NOT_FOUND": "The template does not exist in the Meta platform."
+ },
+ "TEMPLATE_CREATION": {
+ "SUCCESS_MESSAGE": "WhatsApp template created successfully and sent for approval",
+ "ERROR_MESSAGE": "Failed to create WhatsApp template"
+ },
+ "TEMPLATE_UPDATE_DIALOG": {
+ "TITLE": "Edit survey details",
+ "DESCRIPTION": "We will delete the previous template and make a new one which will be sent again for WhatsApp approval",
+ "CONFIRM": "Create new template",
+ "CANCEL": "Go back"
+ },
+ "SURVEY_RULE": {
+ "LABEL": "Survey rule",
+ "DESCRIPTION_PREFIX": "Send the survey if the conversation",
+ "DESCRIPTION_SUFFIX": "any of the labels",
+ "OPERATOR": {
+ "CONTAINS": "അടങ്ങിയിരിക്കുന്നു",
+ "DOES_NOT_CONTAINS": "ഉൾപ്പെട്ടിട്ടില്ല"
+ },
+ "SELECT_PLACEHOLDER": "select labels"
+ },
+ "NOTE": "Note: CSAT surveys are sent only once per conversation",
+ "WHATSAPP_NOTE": "Note: We will create a template and send it for WhatsApp approval. After being approved, surveys will be sent only once per conversation as per the survey rule.",
+ "API": {
+ "SUCCESS_MESSAGE": "CSAT settings updated successfully",
+ "ERROR_MESSAGE": "We couldn't update CSAT settings. Please try again later."
+ }
+ },
+ "BUSINESS_HOURS": {
+ "TITLE": "Set your availability",
+ "SUBTITLE": "Set your availability on your livechat widget",
+ "WEEKLY_TITLE": "Set your weekly hours",
+ "TIMEZONE_LABEL": "Select timezone",
+ "UPDATE": "Update business hours settings",
+ "TOGGLE_AVAILABILITY": "Enable business availability for this inbox",
+ "UNAVAILABLE_MESSAGE_LABEL": "Unavailable message for visitors",
+ "TOGGLE_HELP": "Enabling business availability will show the available hours on live chat widget even if all the agents are offline. Outside available hours visitors can be warned with a message and a pre-chat form.",
+ "DAY": {
+ "ENABLE": "Enable availability for this day",
+ "UNAVAILABLE": "Unavailable",
+ "HOURS": "hours",
+ "VALIDATION_ERROR": "Starting time should be before closing time.",
+ "CHOOSE": "Choose"
+ },
+ "ALL_DAY": "All-Day"
+ },
+ "IMAP": {
+ "TITLE": "IMAP",
+ "SUBTITLE": "Set your IMAP details",
+ "NOTE_TEXT": "To enable SMTP, please configure IMAP.",
+ "UPDATE": "Update IMAP settings",
+ "TOGGLE_AVAILABILITY": "Enable IMAP configuration for this inbox",
+ "TOGGLE_HELP": "Enabling IMAP will help the user to receive email",
+ "EDIT": {
+ "SUCCESS_MESSAGE": "IMAP settings updated successfully",
+ "ERROR_MESSAGE": "Unable to update IMAP settings"
+ },
+ "ADDRESS": {
+ "LABEL": "Address",
+ "PLACE_HOLDER": "Address (Eg: imap.gmail.com)"
+ },
+ "PORT": {
+ "LABEL": "Port",
+ "PLACE_HOLDER": "Port"
+ },
+ "LOGIN": {
+ "LABEL": "സൈൻ ഇൻ",
+ "PLACE_HOLDER": "സൈൻ ഇൻ"
+ },
+ "PASSWORD": {
+ "LABEL": "പാസ്വേഡ്",
+ "PLACE_HOLDER": "പാസ്വേഡ്"
+ },
+ "ENABLE_SSL": "Enable SSL"
+ },
+ "MICROSOFT": {
+ "TITLE": "Microsoft",
+ "SUBTITLE": "Reauthorize your MICROSOFT account"
+ },
+ "SMTP": {
+ "TITLE": "SMTP",
+ "SUBTITLE": "Set your SMTP details",
+ "UPDATE": "Update SMTP settings",
+ "TOGGLE_AVAILABILITY": "Enable SMTP configuration for this inbox",
+ "TOGGLE_HELP": "Enabling SMTP will help the user to send email",
+ "EDIT": {
+ "SUCCESS_MESSAGE": "SMTP settings updated successfully",
+ "ERROR_MESSAGE": "Unable to update SMTP settings"
+ },
+ "ADDRESS": {
+ "LABEL": "Address",
+ "PLACE_HOLDER": "Address (Eg: smtp.gmail.com)"
+ },
+ "PORT": {
+ "LABEL": "Port",
+ "PLACE_HOLDER": "Port"
+ },
+ "LOGIN": {
+ "LABEL": "സൈൻ ഇൻ",
+ "PLACE_HOLDER": "സൈൻ ഇൻ"
+ },
+ "PASSWORD": {
+ "LABEL": "പാസ്വേഡ്",
+ "PLACE_HOLDER": "പാസ്വേഡ്"
+ },
+ "DOMAIN": {
+ "LABEL": "Domain",
+ "PLACE_HOLDER": "Domain"
+ },
+ "ENCRYPTION": "Encryption",
+ "SSL_TLS": "SSL/TLS",
+ "START_TLS": "STARTTLS",
+ "OPEN_SSL_VERIFY_MODE": "Open SSL Verify Mode",
+ "AUTH_MECHANISM": "Authentication"
+ },
+ "NOTE": "Note: ",
+ "WIDGET_BUILDER": {
+ "WIDGET_OPTIONS": {
+ "AVATAR": {
+ "LABEL": "Website Avatar",
+ "DELETE": {
+ "API": {
+ "SUCCESS_MESSAGE": "Avatar deleted successfully",
+ "ERROR_MESSAGE": "ഒരു പിശക് ഉണ്ടായിരുന്നു, ദയവായി വീണ്ടും ശ്രമിക്കുക"
+ }
+ }
+ },
+ "WEBSITE_NAME": {
+ "LABEL": "വെബ്സൈറ്റിന്റെ പേര്",
+ "PLACE_HOLDER": "നിങ്ങളുടെ വെബ്സൈറ്റിന്റെ പേര് നൽകുക (ഉദാ: പുണ്ണ്യാളൻ അഗർബത്തീസ്)",
+ "ERROR": "Please enter a valid website name"
+ },
+ "WELCOME_HEADING": {
+ "LABEL": "സ്വാഗത തലക്കെട്ട്",
+ "PLACE_HOLDER": "Hi there!"
+ },
+ "WELCOME_TAGLINE": {
+ "LABEL": "ടാഗ്ലൈൻ സ്വാഗതം",
+ "PLACE_HOLDER": "ഞങ്ങളുമായി കണക്റ്റുചെയ്യുന്നത് ഞങ്ങൾ ലളിതമാക്കുന്നു. ഞങ്ങളോട് എന്തും ചോദിക്കുക, അല്ലെങ്കിൽ നിങ്ങളുടെ ഫീഡ്ബാക്ക് പങ്കിടുക."
+ },
+ "REPLY_TIME": {
+ "LABEL": "Reply Time",
+ "IN_A_FEW_MINUTES": "In a few minutes",
+ "IN_A_FEW_HOURS": "In a few hours",
+ "IN_A_DAY": "In a day"
+ },
+ "WIDGET_COLOR_LABEL": "വിജറ്റ് നിറം",
+ "WIDGET_BUBBLE_POSITION_LABEL": "Widget Bubble Position",
+ "WIDGET_BUBBLE_TYPE_LABEL": "Widget Bubble Type",
+ "WIDGET_BUBBLE_LAUNCHER_TITLE": {
+ "DEFAULT": "ഞങ്ങളുമായി ചാറ്റുചെയ്യുക",
+ "LABEL": "Widget Bubble Launcher Title",
+ "PLACE_HOLDER": "ഞങ്ങളുമായി ചാറ്റുചെയ്യുക"
+ },
+ "UPDATE": {
+ "BUTTON_TEXT": "Update Widget Settings",
+ "API": {
+ "SUCCESS_MESSAGE": "Widget settings updated successfully",
+ "ERROR_MESSAGE": "Unable to update widget settings"
+ }
+ },
+ "WIDGET_VIEW_OPTION": {
+ "PREVIEW": "Preview",
+ "SCRIPT": "Script"
+ },
+ "WIDGET_BUBBLE_POSITION": {
+ "LEFT": "Left",
+ "RIGHT": "Right"
+ },
+ "WIDGET_BUBBLE_TYPE": {
+ "STANDARD": "Standard",
+ "EXPANDED_BUBBLE": "Expanded Bubble"
+ }
+ },
+ "WIDGET_SCREEN": {
+ "DEFAULT": "Default",
+ "CHAT": "Chat"
+ },
+ "REPLY_TIME": {
+ "IN_A_FEW_MINUTES": "സാധാരണയായി കുറച്ച് മിനിറ്റിനുള്ളിൽ മറുപടി നൽകുന്നു",
+ "IN_A_FEW_HOURS": "സാധാരണയായി കുറച്ച് മണിക്കൂറിനുള്ളിൽ മറുപടി നൽകുന്നു",
+ "IN_A_DAY": "സാധാരണയായി ഒരു ദിവസത്തിൽ മറുപടി നൽകുന്നു"
+ },
+ "FOOTER": {
+ "START_CONVERSATION_BUTTON_TEXT": "സംഭാഷണം ആരംഭിക്കുക",
+ "CHAT_INPUT_PLACEHOLDER": "നിങ്ങളുടെ സന്ദേശം ടൈപ്പുചെയ്യുക"
+ },
+ "BODY": {
+ "TEAM_AVAILABILITY": {
+ "ONLINE": "We are Online",
+ "OFFLINE": "ഞങ്ങൾ ഇപ്പോൾ അകലെയാണ്"
+ },
+ "USER_MESSAGE": "Hi",
+ "AGENT_MESSAGE": "Hello"
+ },
+ "BRANDING_TEXT": "പ്രായോജകർ Chatwoot",
+ "SCRIPT_SETTINGS": "\n window.chatwootSettings = {options};"
+ },
+ "EMAIL_PROVIDERS": {
+ "MICROSOFT": {
+ "TITLE": "Microsoft",
+ "DESCRIPTION": "Connect with Microsoft"
+ },
+ "GOOGLE": {
+ "TITLE": "Google",
+ "DESCRIPTION": "Connect with Google"
+ },
+ "OTHER_PROVIDERS": {
+ "TITLE": "Other Providers",
+ "DESCRIPTION": "Connect with Other Providers"
+ }
+ },
+ "CHANNELS": {
+ "MESSENGER": "Messenger",
+ "WEB_WIDGET": "Website",
+ "TWITTER_PROFILE": "Twitter",
+ "TWILIO_SMS": "Twilio SMS",
+ "WHATSAPP": "WhatsApp",
+ "SMS": "SMS",
+ "EMAIL": "ഇമെയിൽ",
+ "TELEGRAM": "Telegram",
+ "LINE": "Line",
+ "API": "API Channel",
+ "INSTAGRAM": "Instagram",
+ "TIKTOK": "TikTok",
+ "VOICE": "Voice"
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ml/index.js b/app/javascript/dashboard/i18n/locale/ml/index.js
new file mode 100644
index 0000000..213387d
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ml/index.js
@@ -0,0 +1,77 @@
+import advancedFilters from './advancedFilters.json';
+import agentBots from './agentBots.json';
+import agentMgmt from './agentMgmt.json';
+import attributesMgmt from './attributesMgmt.json';
+import auditLogs from './auditLogs.json';
+import automation from './automation.json';
+import bulkActions from './bulkActions.json';
+import campaign from './campaign.json';
+import cannedMgmt from './cannedMgmt.json';
+import chatlist from './chatlist.json';
+import components from './components.json';
+import contact from './contact.json';
+import contactFilters from './contactFilters.json';
+import conversation from './conversation.json';
+import csatMgmt from './csatMgmt.json';
+import customRole from './customRole.json';
+import datePicker from './datePicker.json';
+import emoji from './emoji.json';
+import general from './general.json';
+import generalSettings from './generalSettings.json';
+import helpCenter from './helpCenter.json';
+import inbox from './inbox.json';
+import inboxMgmt from './inboxMgmt.json';
+import integrationApps from './integrationApps.json';
+import integrations from './integrations.json';
+import labelsMgmt from './labelsMgmt.json';
+import login from './login.json';
+import macros from './macros.json';
+import report from './report.json';
+import resetPassword from './resetPassword.json';
+import search from './search.json';
+import setNewPassword from './setNewPassword.json';
+import settings from './settings.json';
+import signup from './signup.json';
+import sla from './sla.json';
+import teamsSettings from './teamsSettings.json';
+import whatsappTemplates from './whatsappTemplates.json';
+
+export default {
+ ...advancedFilters,
+ ...agentBots,
+ ...agentMgmt,
+ ...attributesMgmt,
+ ...auditLogs,
+ ...automation,
+ ...bulkActions,
+ ...campaign,
+ ...cannedMgmt,
+ ...chatlist,
+ ...components,
+ ...contact,
+ ...contactFilters,
+ ...conversation,
+ ...csatMgmt,
+ ...customRole,
+ ...datePicker,
+ ...emoji,
+ ...general,
+ ...generalSettings,
+ ...helpCenter,
+ ...inbox,
+ ...inboxMgmt,
+ ...integrationApps,
+ ...integrations,
+ ...labelsMgmt,
+ ...login,
+ ...macros,
+ ...report,
+ ...resetPassword,
+ ...search,
+ ...setNewPassword,
+ ...settings,
+ ...signup,
+ ...sla,
+ ...teamsSettings,
+ ...whatsappTemplates,
+};
diff --git a/app/javascript/dashboard/i18n/locale/ml/integrationApps.json b/app/javascript/dashboard/i18n/locale/ml/integrationApps.json
new file mode 100644
index 0000000..d751754
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ml/integrationApps.json
@@ -0,0 +1,62 @@
+{
+ "INTEGRATION_APPS": {
+ "FETCHING": "Fetching Integrations",
+ "NO_HOOK_CONFIGURED": "There are no {integrationId} integrations configured in this account.",
+ "HEADER": "Applications",
+ "STATUS": {
+ "ENABLED": "പ്രവർത്തനക്ഷമമാക്കി",
+ "DISABLED": "പ്രവർത്തനരഹിതമാക്കി"
+ },
+ "CONFIGURE": "കോൺഫിഗർ",
+ "ADD_BUTTON": "Add a new hook",
+ "DELETE": {
+ "TITLE": {
+ "INBOX": "Confirm deletion",
+ "ACCOUNT": "Disconnect"
+ },
+ "MESSAGE": {
+ "INBOX": "Are you sure to delete?",
+ "ACCOUNT": "Are you sure to disconnect?"
+ },
+ "CONFIRM_BUTTON_TEXT": {
+ "INBOX": "അതെ, ഇല്ലാതാക്കുക",
+ "ACCOUNT": "Yes, Disconnect"
+ },
+ "CANCEL_BUTTON_TEXT": "റദ്ദാക്കുക",
+ "API": {
+ "SUCCESS_MESSAGE": "Hook deleted successfully",
+ "ERROR_MESSAGE": "വൂട്ട് സെർവറിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക"
+ }
+ },
+ "LIST": {
+ "FETCHING": "Fetching integration hooks",
+ "INBOX": "ഇൻബോക്സ്",
+ "DELETE": {
+ "BUTTON_TEXT": "ഇല്ലാതാക്കുക"
+ }
+ },
+ "ADD": {
+ "FORM": {
+ "INBOX": {
+ "LABEL": "Select Inbox",
+ "PLACEHOLDER": "Select Inbox"
+ },
+ "SUBMIT": "സൃഷ്ടിക്കുക",
+ "CANCEL": "റദ്ദാക്കുക"
+ },
+ "API": {
+ "SUCCESS_MESSAGE": "Integration hook added successfully",
+ "ERROR_MESSAGE": "വൂട്ട് സെർവറിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക"
+ }
+ },
+ "CONNECT": {
+ "BUTTON_TEXT": "ബന്ധിപ്പിക്കുക"
+ },
+ "DISCONNECT": {
+ "BUTTON_TEXT": "Disconnect"
+ },
+ "SIDEBAR_DESCRIPTION": {
+ "DIALOGFLOW": "Dialogflow is a natural language processing platform for building conversational interfaces. Integrating it with {installationName} lets bots handle queries first and transfer them to agents when needed. It helps qualify leads and reduce agent workload by answering FAQs. To add Dialogflow, create a Service Account in Google Console and share the credentials. Refer to the docs for details"
+ }
+ }
+}
diff --git a/app/javascript/dashboard/i18n/locale/ml/integrations.json b/app/javascript/dashboard/i18n/locale/ml/integrations.json
new file mode 100644
index 0000000..a9024de
--- /dev/null
+++ b/app/javascript/dashboard/i18n/locale/ml/integrations.json
@@ -0,0 +1,977 @@
+{
+ "INTEGRATION_SETTINGS": {
+ "SHOPIFY": {
+ "DELETE": {
+ "TITLE": "Delete Shopify Integration",
+ "MESSAGE": "Are you sure you want to delete the Shopify integration?"
+ },
+ "STORE_URL": {
+ "TITLE": "Connect Shopify Store",
+ "LABEL": "Store URL",
+ "PLACEHOLDER": "your-store.myshopify.com",
+ "HELP": "Enter your Shopify store's myshopify.com URL",
+ "CANCEL": "റദ്ദാക്കുക",
+ "SUBMIT": "Connect Store"
+ },
+ "ERROR": "There was an error connecting to Shopify. Please try again or contact support if the issue persists."
+ },
+ "HEADER": "സംയോജനങ്ങൾ",
+ "DESCRIPTION": "Chatwoot integrates with multiple tools and services to improve your team's efficiency. Explore the list below to configure your favorite apps.",
+ "LEARN_MORE": "Learn more about integrations",
+ "LOADING": "Fetching integrations",
+ "CAPTAIN": {
+ "DISABLED": "Captain is not enabled on your account.",
+ "CLICK_HERE_TO_CONFIGURE": "Click here to configure",
+ "LOADING_CONSOLE": "Loading Captain Console...",
+ "FAILED_TO_LOAD_CONSOLE": "Failed to load Captain Console. Please refresh and try again."
+ },
+ "WEBHOOK": {
+ "SUBSCRIBED_EVENTS": "Subscribed Events",
+ "LEARN_MORE": "Learn more about webhooks",
+ "FORM": {
+ "CANCEL": "റദ്ദാക്കുക",
+ "DESC": "നിങ്ങളുടെ ചാറ്റ് വൂട്ട് അക്കൗണ്ടിൽ എന്താണ് സംഭവിക്കുന്നതെന്നതിനെക്കുറിച്ചുള്ള തത്സമയ വിവരങ്ങൾ വെബ്ഹൂക്ക് ഇവന്റുകൾ നൽകുന്നു. ഒരു കോൾബാക്ക് കോൺഫിഗർ ചെയ്യുന്നതിന് സാധുവായ ഒരു യുആർഎൽ നൽകുക.",
+ "SUBSCRIPTIONS": {
+ "LABEL": "Events",
+ "EVENTS": {
+ "CONVERSATION_CREATED": "Conversation Created",
+ "CONVERSATION_STATUS_CHANGED": "Conversation Status Changed",
+ "CONVERSATION_UPDATED": "Conversation Updated",
+ "MESSAGE_CREATED": "Message created",
+ "MESSAGE_UPDATED": "Message updated",
+ "WEBWIDGET_TRIGGERED": "Live chat widget opened by the user",
+ "CONTACT_CREATED": "Contact created",
+ "CONTACT_UPDATED": "Contact updated",
+ "CONVERSATION_TYPING_ON": "Conversation Typing On",
+ "CONVERSATION_TYPING_OFF": "Conversation Typing Off"
+ }
+ },
+ "NAME": {
+ "LABEL": "Webhook Name",
+ "PLACEHOLDER": "Enter the name of the webhook"
+ },
+ "END_POINT": {
+ "LABEL": "വെബ്ഹുക്ക് യുആർഎൽ",
+ "PLACEHOLDER": "Example: {webhookExampleURL}",
+ "ERROR": "ദയവായി സാധുവായ ഒരു യുആർഎൽ നൽകുക"
+ },
+ "EDIT_SUBMIT": "Update webhook",
+ "ADD_SUBMIT": "വെബ്ഹുക്ക് സൃഷ്ടിക്കുക"
+ },
+ "TITLE": "വെബ്ഹൂക്ക്",
+ "CONFIGURE": "കോൺഫിഗർ",
+ "HEADER": "വെബ്ഹൂക്ക് ക്രമീകരണങ്ങൾ",
+ "HEADER_BTN_TXT": "പുതിയ വെബ്ഹൂക്ക് ഉണ്ടാക്കുക",
+ "LOADING": "അറ്റാച്ചുചെയ്ത വെബ്ഹൂക്കുകൾ ലഭ്യമാക്കുന്നു",
+ "SEARCH_404": "ഈ ചോദ്യവുമായി പൊരുത്തപ്പെടുന്ന ഇനങ്ങളൊന്നുമില്ല",
+ "SIDEBAR_TXT": "
വെബ്ഹൂക്കുകൾ
എല്ലാ അക്കൗണ്ടിനും നിർവചിക്കാവുന്ന എച്ച്ടിടിപി കോൾബാക്കുകളാണ് വെബ്ഹൂക്കുകൾ. ചാറ്റ്വൂട്ടിലെ സന്ദേശ സൃഷ്ടിക്കൽ പോലുള്ള ഇവന്റുകളാണ് അവ പ്രവർത്തനക്ഷമമാക്കുന്നത്. ഈ അക്കൗണ്ടിനായി നിങ്ങൾക്ക് ഒന്നിൽ കൂടുതൽ വെബ്ഹൂക്കുകൾ സൃഷ്ടിക്കാൻ കഴിയും.
ഒരു വെബ്ഹൂക്ക് സൃഷ്ടിക്കുന്നതിന്, പുതിയ വെബ്ഹൂക്ക് ഉണ്ടാക്കുക ബട്ടണിൽ ക്ലിക്കുചെയ്യുക. ഇല്ലാതാക്കുക ബട്ടണിൽ ക്ലിക്കുചെയ്ത് നിങ്ങൾക്ക് നിലവിലുള്ള ഏതെങ്കിലും വെബ്ഹൂക്ക് നീക്കംചെയ്യാനും കഴിയും.
Dashboard Apps
Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.
When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.
To add a new dashboard app, click on the button 'Add a new dashboard app'.
", + "DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.", + "LEARN_MORE": "Learn more about Dashboard Apps", + "LIST": { + "404": "There are no dashboard apps configured on this account yet", + "LOADING": "Fetching dashboard apps...", + "TABLE_HEADER": { + "NAME": "പേര്", + "ENDPOINT": "Endpoint" + }, + "EDIT_TOOLTIP": "Edit app", + "DELETE_TOOLTIP": "Delete app" + }, + "FORM": { + "TITLE_LABEL": "പേര്", + "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", + "TITLE_ERROR": "A name for the dashboard app is required", + "URL_LABEL": "Endpoint", + "URL_PLACEHOLDER": "Enter the endpoint URL where your app is hosted", + "URL_ERROR": "A valid URL is required" + }, + "CREATE": { + "HEADER": "Add a new dashboard app", + "FORM_SUBMIT": "സമർപ്പിക്കുക", + "FORM_CANCEL": "റദ്ദാക്കുക", + "API_SUCCESS": "Dashboard app configured successfully", + "API_ERROR": "We couldn't create an app. Please try again later" + }, + "UPDATE": { + "HEADER": "Edit dashboard app", + "FORM_SUBMIT": "അപ്ഡേറ്റ്", + "FORM_CANCEL": "റദ്ദാക്കുക", + "API_SUCCESS": "Dashboard app updated successfully", + "API_ERROR": "We couldn't update the app. Please try again later" + }, + "DELETE": { + "CONFIRM_YES": "Yes, delete it", + "CONFIRM_NO": "No, keep it", + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete the app - {appName}?", + "API_SUCCESS": "Dashboard app deleted successfully", + "API_ERROR": "We couldn't delete the app. Please try again later" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "Fetching linear issues...", + "LOADING_ERROR": "There was an error fetching the linear issues, please try again", + "CREATE": "സൃഷ്ടിക്കുക", + "LINK": { + "SEARCH": "Search issues", + "SELECT": "Select issue", + "TITLE": "Link", + "EMPTY_LIST": "No linear issues found", + "LOADING": "Loading", + "ERROR": "There was an error fetching the linear issues, please try again", + "LINK_SUCCESS": "Issue linked successfully", + "LINK_ERROR": "There was an error linking the issue, please try again", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "Create Linear issues from conversations, or link existing ones for seamless tracking.", + "FORM": { + "TITLE": { + "LABEL": "തലക്കെട്ട്", + "PLACEHOLDER": "Enter title", + "REQUIRED_ERROR": "ശീർഷകം ആവശ്യമാണ്" + }, + "DESCRIPTION": { + "LABEL": "വിവരണം", + "PLACEHOLDER": "Enter description" + }, + "TEAM": { + "LABEL": "Team", + "PLACEHOLDER": "ടീം തിരഞ്ഞെടുക്കുക", + "SEARCH": "Search team", + "REQUIRED_ERROR": "Team is required" + }, + "ASSIGNEE": { + "LABEL": "Assignee", + "PLACEHOLDER": "Select assignee", + "SEARCH": "Search assignee" + }, + "PRIORITY": { + "LABEL": "Priority", + "PLACEHOLDER": "Select priority", + "SEARCH": "Search priority" + }, + "LABEL": { + "LABEL": "Label", + "PLACEHOLDER": "Select label", + "SEARCH": "Search label" + }, + "STATUS": { + "LABEL": "സ്റ്റാറ്റസ്", + "PLACEHOLDER": "Select status", + "SEARCH": "Search status" + }, + "PROJECT": { + "LABEL": "Project", + "PLACEHOLDER": "Select project", + "SEARCH": "Search project" + } + }, + "CREATE": "സൃഷ്ടിക്കുക", + "CANCEL": "റദ്ദാക്കുക", + "CREATE_SUCCESS": "Issue created successfully", + "CREATE_ERROR": "There was an error creating the issue, please try again", + "LOADING_TEAM_ERROR": "There was an error fetching the teams, please try again", + "LOADING_TEAM_ENTITIES_ERROR": "There was an error fetching the team entities, please try again" + }, + "ISSUE": { + "STATUS": "സ്റ്റാറ്റസ്", + "PRIORITY": "Priority", + "ASSIGNEE": "Assignee", + "LABELS": "ലേബലുകൾ", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Unlink", + "SUCCESS": "Issue unlinked successfully", + "ERROR": "There was an error unlinking the issue, please try again" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Yes, delete", + "CANCEL": "റദ്ദാക്കുക" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Yes, delete", + "CANCEL": "റദ്ദാക്കുക" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "സന്ദേശം അയയ്ക്കുക...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Captain is thinking", + "YOU": "You", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "You", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "നിങ്ങളുടെ സന്ദേശം ടൈപ്പുചെയ്യുക...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "റദ്ദാക്കുക", + "CREATE": "സൃഷ്ടിക്കുക", + "EDIT": "അപ്ഡേറ്റ്" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "അപ്ഡേറ്റ്", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "Features", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "പേര്", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "വിവരണം", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "Features", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "ക്രമീകരണങ്ങൾ", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "ഇല്ലാതാക്കുക" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "സൃഷ്ടിക്കുക", + "CANCEL": "റദ്ദാക്കുക", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "ഇല്ലാതാക്കുക" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "സൃഷ്ടിക്കുക", + "CANCEL": "റദ്ദാക്കുക", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "ഇല്ലാതാക്കുക" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "തലക്കെട്ട്", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "വിവരണം", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "സൃഷ്ടിക്കുക", + "CANCEL": "റദ്ദാക്കുക" + } + } + }, + "UPDATE": { + "CANCEL": "റദ്ദാക്കുക", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "വിവരണം", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "None", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "API Key" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "പാസ്വേഡ്", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Type" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Number", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Required" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "ഇല്ലാതാക്കുക", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "എല്ലാം" + }, + "STATUS": { + "TITLE": "സ്റ്റാറ്റസ്", + "PENDING": "കെട്ടിക്കിടക്കുന്നു", + "APPROVED": "Approved", + "ALL": "എല്ലാം" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "എഡിറ്റുചെയ്യുക", + "DELETE_RESPONSE": "ഇല്ലാതാക്കുക" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Disconnect" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "ഇൻബോക്സ്", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/ml/labelsMgmt.json new file mode 100644 index 0000000..e1882fe --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "ലേബലുകൾ", + "HEADER_BTN_TXT": "ലേബൽ ചേർക്കുക", + "LOADING": "ലേബലുകൾ ലഭ്യമാക്കുന്നു", + "DESCRIPTION": "Labels help you categorize and prioritize conversations and leads. You can assign a label to a conversation or contact using the side panel.", + "LEARN_MORE": "Learn more about labels", + "SEARCH_404": "ഈ ചോദ്യവുമായി പൊരുത്തപ്പെടുന്ന ഇനങ്ങളൊന്നുമില്ല", + "LIST": { + "404": "ഈ അക്കൗണ്ടിൽ ലേബലുകളൊന്നും ലഭ്യമല്ല.", + "TITLE": "ലേബലുകൾ നിയന്ത്രിക്കുക", + "DESC": "സംഭാഷണങ്ങൾ ഒരുമിച്ച് ഗ്രൂപ്പുചെയ്യാൻ ലേബലുകൾ നിങ്ങളെ അനുവദിക്കുന്നു.", + "TABLE_HEADER": { + "NAME": "പേര്", + "DESCRIPTION": "വിവരണം", + "COLOR": "നിറം" + } + }, + "FORM": { + "NAME": { + "LABEL": "ലേബൽ നാമം", + "PLACEHOLDER": "ലേബൽ നാമം", + "REQUIRED_ERROR": "ലേബൽ നാമം ആവശ്യമാണ്", + "MINIMUM_LENGTH_ERROR": "കുറഞ്ഞ ദൈർഘ്യം 2 ആവശ്യമാണ്", + "VALID_ERROR": "അക്ഷരമാല, അക്കങ്ങൾ, ഹൈഫൻ, അണ്ടർ സ്കോർ എന്നിവ മാത്രമേ അനുവദിക്കൂ" + }, + "DESCRIPTION": { + "LABEL": "വിവരണം", + "PLACEHOLDER": "ലേബൽ വിവരണം" + }, + "COLOR": { + "LABEL": "നിറം" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "സൈഡ്ബാറിൽ ലേബൽ കാണിക്കുക" + }, + "EDIT": "എഡിറ്റുചെയ്യുക", + "CREATE": "സൃഷ്ടിക്കുക", + "DELETE": "ഇല്ലാതാക്കുക", + "CANCEL": "റദ്ദാക്കുക" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Add label to conversation", + "MULTIPLE_SUGGESTION": "Select this label", + "DESELECT": "Deselect label", + "DISMISS": "Dismiss suggestion" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Dismiss", + "ADD_SELECTED_LABELS": "Add selected labels", + "ADD_SELECTED_LABEL": "Add selected label", + "ADD_ALL_LABELS": "Add all labels", + "SUGGESTED_LABELS": "Suggested labels" + }, + "ADD": { + "TITLE": "ലേബൽ ചേർക്കുക", + "DESC": "സംഭാഷണങ്ങൾ ഒരുമിച്ച് ഗ്രൂപ്പുചെയ്യാൻ ലേബലുകൾ നിങ്ങളെ അനുവദിക്കുന്നു.", + "API": { + "SUCCESS_MESSAGE": "ലേബൽ വിജയകരമായി ചേർത്തു", + "ERROR_MESSAGE": "ഒരു പിശക് ഉണ്ടായിരുന്നു, ദയവായി വീണ്ടും ശ്രമിക്കുക" + } + }, + "EDIT": { + "TITLE": "ലേബൽ എഡിറ്റുചെയ്യുക", + "API": { + "SUCCESS_MESSAGE": "ലേബൽ വിജയകരമായി അപ്ഡേറ്റുചെയ്തു", + "ERROR_MESSAGE": "ഒരു പിശക് ഉണ്ടായിരുന്നു, ദയവായി വീണ്ടും ശ്രമിക്കുക" + } + }, + "DELETE": { + "BUTTON_TEXT": "ഇല്ലാതാക്കുക", + "API": { + "SUCCESS_MESSAGE": "ലേബൽ വിജയകരമായി ഇല്ലാതാക്കി", + "ERROR_MESSAGE": "ഒരു പിശക് ഉണ്ടായിരുന്നു, ദയവായി വീണ്ടും ശ്രമിക്കുക" + }, + "CONFIRM": { + "TITLE": "ഇല്ലാതാക്കൽ സ്ഥിരീകരിക്കുക", + "MESSAGE": "ഏജന്റുമാർ
ഒരു ഏജൻറ് നിങ്ങളുടെ ഉപഭോക്തൃ പിന്തുണാ ടീമിലെ ഒരു അംഗമാണ്.
ഏജന്റുമാർക്ക് നിങ്ങളുടെ ഉപയോക്താക്കളിൽ നിന്നുള്ള സന്ദേശങ്ങൾ കാണാനും മറുപടി നൽകാനും കഴിയും. നിങ്ങളുടെ അക്കൗണ്ടിലുള്ള എല്ലാ ഏജന്റുമാരെയും ഈ പട്ടിക കാണിക്കുന്നു. p>
ഒരു പുതിയ ഏജന്റിനെ ചേർക്കുന്നതിന് ഏജന്റിനെ ചേർക്കുക b> ബട്ടൺ ക്ലിക്കുചെയ്യുക. നിങ്ങൾ ചേർത്ത ഏജന്റിന് അവരുടെ അക്കൗണ്ട് സജീവമാക്കുന്നതിന് ഒരു സ്ഥിരീകരണ ലിങ്കുള്ള ഇമെയിൽ ലഭിക്കും. അതിനുശേഷം അവർക്ക് ചാറ്റ് വൂട്ട് ആക്സസ് ചെയ്യാനും സന്ദേശങ്ങളോട് പ്രതികരിക്കാനും കഴിയും.
ചാറ്റ് വൂട്ടിന്റെ സവിശേഷതകളിലേക്കുള്ള ആക്സസ് ഇനിപ്പറയുന്ന റോളുകളെ അടിസ്ഥാനമാക്കിയുള്ളതാണ്.
ഏജൻറ് b> - ഈ റോൾ ഉള്ള ഏജന്റുമാർക്ക് ഇൻബോക്സുകൾ, റിപ്പോർട്ടുകൾ, സംഭാഷണങ്ങൾ എന്നിവ മാത്രമേ ആക്സസ് ചെയ്യാൻ കഴിയൂ. അവർക്ക് മറ്റ് ഏജന്റുമാരുടെയോ അല്ലെങ്കിൽ തങ്ങളുടേയോ സംഭാഷണങ്ങൾ നിർണ്ണയിക്കാനും സംഭാഷണങ്ങൾ പരിഹരിക്കാനും കഴിയും.
അഡ്മിനിസ്ട്രേറ്റർ - ഒരു സാധാരണ ഏജന്റിന്റെ പ്രത്യേകാവകാശങ്ങളോടൊപ്പം ക്രമീകരണങ്ങളും ബില്ലിംഗും ഉൾപ്പെടെ നിങ്ങളുടെ അക്കൗണ്ടിൽ ലഭ്യമായ എല്ലാ ചാറ്റ് വൂട്ട് സവിശേഷതകളിലേക്കും ആക്സസ് ഉണ്ടായിരിക്കുക. p> ", + "YES": "അതെ, ഇല്ലാതാക്കുക ", + "NO": "ഇല്ല, സൂക്ഷിക്കുക" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/login.json b/app/javascript/dashboard/i18n/locale/ml/login.json new file mode 100644 index 0000000..b168600 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "ചാറ്റ് വൂട്ടിലേക്ക് ലോഗിൻ ചെയ്യുക", + "EMAIL": { + "LABEL": "ഇമെയിൽ", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "ദയവായി സാധുവായ ഒരു ഇമെയിൽ വിലാസം നൽകുക" + }, + "PASSWORD": { + "LABEL": "പാസ്വേഡ്", + "PLACEHOLDER": "പാസ്വേഡ്" + }, + "API": { + "SUCCESS_MESSAGE": "Login successful", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again.", + "UNAUTH": "Username or password is incorrect. Please try again." + }, + "OAUTH": { + "GOOGLE_LOGIN": "Login with Google", + "BUSINESS_ACCOUNTS_ONLY": "Please use your company email address to login", + "NO_ACCOUNT_FOUND": "We couldn't find an account for your email address." + }, + "FORGOT_PASSWORD": "നിങ്ങളുടെ പാസ്വേഡ് മറന്നോ?", + "CREATE_NEW_ACCOUNT": "പുതിയ അക്കൗണ്ട് സൃഷ്ടിക്കുക", + "SUBMIT": "സൈൻ ഇൻ", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/macros.json b/app/javascript/dashboard/i18n/locale/ml/macros.json new file mode 100644 index 0000000..afd84e3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Macros", + "DESCRIPTION": "A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click.", + "LEARN_MORE": "Learn more about macros", + "HEADER_BTN_TXT": "Add a new macro", + "HEADER_BTN_TXT_SAVE": "Save macro", + "LOADING": "Fetching macros", + "ERROR": "Something went wrong. Please try again", + "ORDER_INFO": "Macros will run in the order you add your actions. You can rearrange them by dragging them by the handle beside each node.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Macro name", + "PLACEHOLDER": "Enter a name for your macro", + "ERROR": "Name is required for creating a macro" + }, + "ACTIONS": { + "LABEL": "പ്രവർത്തനങ്ങൾ" + } + }, + "API": { + "SUCCESS_MESSAGE": "Macro added successfully", + "ERROR_MESSAGE": "Unable to create macro, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "പേര്", + "CREATED BY": "Created by", + "LAST_UPDATED_BY": "Last updated by", + "VISIBILITY": "Visibility" + }, + "404": "No macros found" + }, + "DELETE": { + "TOOLTIP": "Delete macro", + "CONFIRM": { + "MESSAGE": "
ഏജന്റുമാർ
ഒരു ഏജൻറ് നിങ്ങളുടെ ഉപഭോക്തൃ പിന്തുണാ ടീമിലെ ഒരു അംഗമാണ്.
ഏജന്റുമാർക്ക് നിങ്ങളുടെ ഉപയോക്താക്കളിൽ നിന്നുള്ള സന്ദേശങ്ങൾ കാണാനും മറുപടി നൽകാനും കഴിയും. നിങ്ങളുടെ അക്കൗണ്ടിലുള്ള എല്ലാ ഏജന്റുമാരെയും ഈ പട്ടിക കാണിക്കുന്നു. p>
ഒരു പുതിയ ഏജന്റിനെ ചേർക്കുന്നതിന് ഏജന്റിനെ ചേർക്കുക b> ബട്ടൺ ക്ലിക്കുചെയ്യുക. നിങ്ങൾ ചേർത്ത ഏജന്റിന് അവരുടെ അക്കൗണ്ട് സജീവമാക്കുന്നതിന് ഒരു സ്ഥിരീകരണ ലിങ്കുള്ള ഇമെയിൽ ലഭിക്കും. അതിനുശേഷം അവർക്ക് ചാറ്റ് വൂട്ട് ആക്സസ് ചെയ്യാനും സന്ദേശങ്ങളോട് പ്രതികരിക്കാനും കഴിയും.
ചാറ്റ് വൂട്ടിന്റെ സവിശേഷതകളിലേക്കുള്ള ആക്സസ് ഇനിപ്പറയുന്ന റോളുകളെ അടിസ്ഥാനമാക്കിയുള്ളതാണ്.
ഏജൻറ് b> - ഈ റോൾ ഉള്ള ഏജന്റുമാർക്ക് ഇൻബോക്സുകൾ, റിപ്പോർട്ടുകൾ, സംഭാഷണങ്ങൾ എന്നിവ മാത്രമേ ആക്സസ് ചെയ്യാൻ കഴിയൂ. അവർക്ക് മറ്റ് ഏജന്റുമാരുടെയോ അല്ലെങ്കിൽ തങ്ങളുടേയോ സംഭാഷണങ്ങൾ നിർണ്ണയിക്കാനും സംഭാഷണങ്ങൾ പരിഹരിക്കാനും കഴിയും.
അഡ്മിനിസ്ട്രേറ്റർ - ഒരു സാധാരണ ഏജന്റിന്റെ പ്രത്യേകാവകാശങ്ങളോടൊപ്പം ക്രമീകരണങ്ങളും ബില്ലിംഗും ഉൾപ്പെടെ നിങ്ങളുടെ അക്കൗണ്ടിൽ ലഭ്യമായ എല്ലാ ചാറ്റ് വൂട്ട് സവിശേഷതകളിലേക്കും ആക്സസ് ഉണ്ടായിരിക്കുക. p> ", + "YES": "അതെ, ഇല്ലാതാക്കുക", + "NO": "No" + }, + "API": { + "SUCCESS_MESSAGE": "Macro deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the macro. Please try again later" + } + }, + "EDIT": { + "TOOLTIP": "Edit macro", + "API": { + "SUCCESS_MESSAGE": "Macro updated successfully", + "ERROR_MESSAGE": "Could not update Macro, Please try again later" + } + }, + "EDITOR": { + "START_FLOW": "Start Flow", + "END_FLOW": "End Flow", + "LOADING": "Fetching macro", + "ADD_BTN_TOOLTIP": "Add new action", + "DELETE_BTN_TOOLTIP": "Delete Action", + "VISIBILITY": { + "LABEL": "Macro Visibility", + "GLOBAL": { + "LABEL": "Public", + "DESCRIPTION": "This macro is available publicly for all agents in this account." + }, + "PERSONAL": { + "LABEL": "Private", + "DESCRIPTION": "This macro will be private to you and not be available to others." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Execute", + "PREVIEW": "Preview Macro", + "EXECUTED_SUCCESSFULLY": "Macro executed successfully" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Value is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Assign a Team", + "ASSIGN_AGENT": "Assign an Agent", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "സംഭാഷണം ഒച്ചയിലാതാക്കുക", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "CHANGE_PRIORITY": "Change Priority", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "SEND_WEBHOOK_EVENT": "Send Webhook Event" + }, + "PRIORITY_TYPES": { + "NONE": "None", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/mfa.json b/app/javascript/dashboard/i18n/locale/ml/mfa.json new file mode 100644 index 0000000..7afedc2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "പ്രവർത്തനക്ഷമമാക്കി", + "DISABLED": "പ്രവർത്തനരഹിതമാക്കി", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Loading...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "പകർത്തുക", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "റദ്ദാക്കുക", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "ഡൗൺലോഡ്", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "പാസ്വേഡ്", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "റദ്ദാക്കുക", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "റദ്ദാക്കുക", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/report.json b/app/javascript/dashboard/i18n/locale/ml/report.json new file mode 100644 index 0000000..fbbcca1 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "സംഭാഷണങ്ങൾ", + "LOADING_CHART": "ചാർട്ട് ഡാറ്റ ലോഡു ചെയ്യുകയാണ്...", + "NO_ENOUGH_DATA": "റിപ്പോർട്ട് സൃഷ്ടിക്കുന്നതിന് ആവശ്യമായ ഡാറ്റ ഞങ്ങൾക്ക് ലഭിച്ചിട്ടില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക.", + "DOWNLOAD_AGENT_REPORTS": "ഏജന്റ് റിപ്പോർട്ടുകൾ ഡൗൺലോഡ് ചെയ്യുക", + "DATA_FETCHING_FAILED": "Failed to fetch data, please try again later.", + "SUMMARY_FETCHING_FAILED": "Failed to fetch summary, please try again later.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "സംഭാഷണങ്ങൾ", + "DESC": "(ആകെ)" + }, + "INCOMING_MESSAGES": { + "NAME": "ഇൻകമിംഗ് സന്ദേശങ്ങൾ", + "DESC": "( ആകെ )" + }, + "OUTGOING_MESSAGES": { + "NAME": "ഔട്ട് ഗോയിങ് സന്ദേശങ്ങൾ", + "DESC": "( ആകെ )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( ശരാശരി )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "മിഴിവ് സമയം", + "DESC": "( ശരാശരി )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "മിഴിവ് എണ്ണം", + "DESC": "( ആകെ )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "മിഴിവ് എണ്ണം", + "DESC": "(ആകെ)" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Handoff Count", + "DESC": "(ആകെ)" + }, + "REPLY_TIME": { + "NAME": "Customer waiting time", + "TOOLTIP_TEXT": "Waiting time is {metricValue} (based on {conversationCount} replies)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "കഴിഞ്ഞ 7 ദിവസം", + "LAST_14_DAYS": "കഴിഞ്ഞ 14 ദിവസം", + "LAST_30_DAYS": "കഴിഞ്ഞ 30 ദിവസം", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "കഴിഞ്ഞ 3 മാസം", + "LAST_6_MONTHS": "കഴിഞ്ഞ 6 മാസം", + "LAST_YEAR": "കഴിഞ്ഞ വർഷം", + "CUSTOM_DATE_RANGE": "ഇഷ്ടാനുസൃത തീയതി ശ്രേണി" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "അപേക്ഷിക്കുക", + "PLACEHOLDER": "തീയതി ശ്രേണി തിരഞ്ഞെടുക്കുക" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "ഗ്രൂപ്പ് പ്രകാരം", + "DURATION_FILTER_LABEL": "Duration", + "GROUPING_OPTIONS": { + "DAY": "ദിവസം", + "WEEK": "ആഴ്ച", + "MONTH": "മാസം", + "YEAR": "വർഷം" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "ദിവസം" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "ദിവസം" + }, + { + "id": 2, + "groupBy": "ആഴ്ച" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "ദിവസം" + }, + { + "id": 2, + "groupBy": "ആഴ്ച" + }, + { + "id": 3, + "groupBy": "മാസം" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "ദിവസം" + }, + { + "id": 2, + "groupBy": "ആഴ്ച" + }, + { + "id": 3, + "groupBy": "മാസം" + } + ], + "BUSINESS_HOURS": "Business Hours", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "ഒരു ഫലവും കണ്ടെത്താനായില്ല" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "ഏജന്റുമാരുടെ അവലോകനം", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "ചാർട്ട് ഡാറ്റ ലോഡു ചെയ്യുകയാണ്...", + "NO_ENOUGH_DATA": "റിപ്പോർട്ട് സൃഷ്ടിക്കുന്നതിന് ആവശ്യമായ ഡാറ്റ ഞങ്ങൾക്ക് ലഭിച്ചിട്ടില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക.", + "DOWNLOAD_AGENT_REPORTS": "ഏജന്റ് റിപ്പോർട്ടുകൾ ഡൗൺലോഡ് ചെയ്യുക", + "FILTER_DROPDOWN_LABEL": "ഏജന്റ് തിരഞ്ഞെടുക്കുക", + "METRICS": { + "CONVERSATIONS": { + "NAME": "സംഭാഷണങ്ങൾ", + "DESC": "(ആകെ)" + }, + "INCOMING_MESSAGES": { + "NAME": "ഇൻകമിംഗ് സന്ദേശങ്ങൾ", + "DESC": "(ആകെ)" + }, + "OUTGOING_MESSAGES": { + "NAME": "ഔട്ട് ഗോയിങ് സന്ദേശങ്ങൾ", + "DESC": "(ആകെ)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( ശരാശരി )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "മിഴിവ് സമയം", + "DESC": "( ശരാശരി )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "മിഴിവ് എണ്ണം", + "DESC": "(ആകെ)" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "കഴിഞ്ഞ 7 ദിവസം" + }, + { + "id": 1, + "name": "കഴിഞ്ഞ 30 ദിവസം" + }, + { + "id": 2, + "name": "കഴിഞ്ഞ 3 മാസം" + }, + { + "id": 3, + "name": "കഴിഞ്ഞ 6 മാസം" + }, + { + "id": 4, + "name": "കഴിഞ്ഞ വർഷം" + }, + { + "id": 5, + "name": "ഇഷ്ടാനുസൃത തീയതി ശ്രേണി" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "അപേക്ഷിക്കുക", + "PLACEHOLDER": "തീയതി ശ്രേണി തിരഞ്ഞെടുക്കുക" + } + }, + "LABEL_REPORTS": { + "HEADER": "ലേബലുകൾ അവലോകനം", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "ചാർട്ട് ഡാറ്റ ലോഡു ചെയ്യുകയാണ്...", + "NO_ENOUGH_DATA": "റിപ്പോർട്ട് സൃഷ്ടിക്കുന്നതിന് ആവശ്യമായ ഡാറ്റ ഞങ്ങൾക്ക് ലഭിച്ചിട്ടില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക.", + "DOWNLOAD_LABEL_REPORTS": "ലേബൽ റിപ്പോർട്ടുകൾ ഡൗൺലോഡ് ചെയ്യുക", + "FILTER_DROPDOWN_LABEL": "ലേബൽ തിരഞ്ഞെടുക്കുക", + "METRICS": { + "CONVERSATIONS": { + "NAME": "സംഭാഷണങ്ങൾ", + "DESC": "(ആകെ)" + }, + "INCOMING_MESSAGES": { + "NAME": "ഇൻകമിംഗ് സന്ദേശങ്ങൾ", + "DESC": "(ആകെ)" + }, + "OUTGOING_MESSAGES": { + "NAME": "ഔട്ട് ഗോയിങ് സന്ദേശങ്ങൾ", + "DESC": "(ആകെ)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( ശരാശരി )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "മിഴിവ് സമയം", + "DESC": "( ശരാശരി )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "മിഴിവ് എണ്ണം", + "DESC": "(ആകെ)" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "കഴിഞ്ഞ 7 ദിവസം" + }, + { + "id": 1, + "name": "കഴിഞ്ഞ 30 ദിവസം" + }, + { + "id": 2, + "name": "കഴിഞ്ഞ 3 മാസം" + }, + { + "id": 3, + "name": "കഴിഞ്ഞ 6 മാസം" + }, + { + "id": 4, + "name": "കഴിഞ്ഞ വർഷം" + }, + { + "id": 5, + "name": "ഇഷ്ടാനുസൃത തീയതി ശ്രേണി" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "അപേക്ഷിക്കുക", + "PLACEHOLDER": "തീയതി ശ്രേണി തിരഞ്ഞെടുക്കുക" + } + }, + "INBOX_REPORTS": { + "HEADER": "ഇൻബോക്സ് അവലോകനം", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "ചാർട്ട് ഡാറ്റ ലോഡു ചെയ്യുകയാണ്...", + "NO_ENOUGH_DATA": "റിപ്പോർട്ട് സൃഷ്ടിക്കുന്നതിന് ആവശ്യമായ ഡാറ്റ ഞങ്ങൾക്ക് ലഭിച്ചിട്ടില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക.", + "DOWNLOAD_INBOX_REPORTS": "ഇൻബോക്സ് റിപ്പോർട്ടുകൾ ഡൗൺലോഡ് ചെയ്യുക", + "FILTER_DROPDOWN_LABEL": "ഇൻബോക്സ് തിരഞ്ഞെടുക്കുക", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "സംഭാഷണങ്ങൾ", + "DESC": "(ആകെ)" + }, + "INCOMING_MESSAGES": { + "NAME": "ഇൻകമിംഗ് സന്ദേശങ്ങൾ", + "DESC": "(ആകെ)" + }, + "OUTGOING_MESSAGES": { + "NAME": "ഔട്ട് ഗോയിങ് സന്ദേശങ്ങൾ", + "DESC": "(ആകെ)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( ശരാശരി )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "മിഴിവ് സമയം", + "DESC": "( ശരാശരി )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "മിഴിവ് എണ്ണം", + "DESC": "(ആകെ)" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "കഴിഞ്ഞ 7 ദിവസം" + }, + { + "id": 1, + "name": "കഴിഞ്ഞ 30 ദിവസം" + }, + { + "id": 2, + "name": "കഴിഞ്ഞ 3 മാസം" + }, + { + "id": 3, + "name": "കഴിഞ്ഞ 6 മാസം" + }, + { + "id": 4, + "name": "കഴിഞ്ഞ വർഷം" + }, + { + "id": 5, + "name": "ഇഷ്ടാനുസൃത തീയതി ശ്രേണി" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "അപേക്ഷിക്കുക", + "PLACEHOLDER": "തീയതി ശ്രേണി തിരഞ്ഞെടുക്കുക" + } + }, + "TEAM_REPORTS": { + "HEADER": "ടീം അവലോകനം", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "ചാർട്ട് ഡാറ്റ ലോഡു ചെയ്യുകയാണ്...", + "NO_ENOUGH_DATA": "റിപ്പോർട്ട് സൃഷ്ടിക്കുന്നതിന് ആവശ്യമായ ഡാറ്റ ഞങ്ങൾക്ക് ലഭിച്ചിട്ടില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക.", + "DOWNLOAD_TEAM_REPORTS": "ടീം റിപ്പോർട്ടുകൾ ഡൗൺലോഡ് ചെയ്യുക", + "FILTER_DROPDOWN_LABEL": "ടീം തിരഞ്ഞെടുക്കുക", + "METRICS": { + "CONVERSATIONS": { + "NAME": "സംഭാഷണങ്ങൾ", + "DESC": "(ആകെ)" + }, + "INCOMING_MESSAGES": { + "NAME": "ഇൻകമിംഗ് സന്ദേശങ്ങൾ", + "DESC": "(ആകെ)" + }, + "OUTGOING_MESSAGES": { + "NAME": "ഔട്ട് ഗോയിങ് സന്ദേശങ്ങൾ", + "DESC": "(ആകെ)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( ശരാശരി )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "മിഴിവ് സമയം", + "DESC": "( ശരാശരി )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "മിഴിവ് എണ്ണം", + "DESC": "(ആകെ)" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "കഴിഞ്ഞ 7 ദിവസം" + }, + { + "id": 1, + "name": "കഴിഞ്ഞ 30 ദിവസം" + }, + { + "id": 2, + "name": "കഴിഞ്ഞ 3 മാസം" + }, + { + "id": 3, + "name": "കഴിഞ്ഞ 6 മാസം" + }, + { + "id": 4, + "name": "കഴിഞ്ഞ വർഷം" + }, + { + "id": 5, + "name": "ഇഷ്ടാനുസൃത തീയതി ശ്രേണി" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "അപേക്ഷിക്കുക", + "PLACEHOLDER": "തീയതി ശ്രേണി തിരഞ്ഞെടുക്കുക" + } + }, + "CSAT_REPORTS": { + "HEADER": "CSAT റിപ്പോർട്ടുകൾ", + "NO_RECORDS": "CSAT സർവേ പ്രതികരണങ്ങളൊന്നും ലഭ്യമല്ല.", + "DOWNLOAD": "Download CSAT Reports", + "DOWNLOAD_FAILED": "Failed to download CSAT Reports", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Choose Agents" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "ബന്ധപ്പെടുക", + "AGENT_NAME": "നിയോഗിച്ച ഏജന്റ്", + "RATING": "റേറ്റിംഗ്", + "FEEDBACK_TEXT": "ഫീഡ്ബാക്ക് അഭിപ്രായം" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "ആകെ പ്രതികരണങ്ങൾ", + "TOOLTIP": "ശേഖരിച്ച പ്രതികരണങ്ങളുടെ ആകെ എണ്ണം" + }, + "SATISFACTION_SCORE": { + "LABEL": "സംതൃപ്തി സ്കോർ", + "TOOLTIP": "പോസിറ്റീവ് പ്രതികരണങ്ങളുടെ ആകെ എണ്ണം / പ്രതികരണങ്ങളുടെ ആകെ എണ്ണം * 100" + }, + "RESPONSE_RATE": { + "LABEL": "പ്രതികരണ നിരക്ക്", + "TOOLTIP": "മൊത്തം പ്രതികരണങ്ങളുടെ എണ്ണം / അയച്ച CSAT സർവേ സന്ദേശങ്ങളുടെ ആകെ എണ്ണം * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Bot Reports", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "No. of Conversations", + "TOOLTIP": "Total number of conversations handled by the bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total Responses", + "TOOLTIP": "Total number of responses sent by the bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Resolution Rate", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Handoff Rate", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "അവലോകനം", + "LIVE": "Live", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Open Conversations", + "LOADING_MESSAGE": "Loading conversation metrics...", + "OPEN": "സജീവം", + "UNATTENDED": "Unattended", + "UNASSIGNED": "നിയുക്തമാക്കാത്തത്", + "PENDING": "കെട്ടിക്കിടക്കുന്നു" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Conversation Traffic", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Conversations by agents", + "LOADING_MESSAGE": "Loading agent metrics...", + "NO_AGENTS": "There are no conversations by agents", + "TABLE_HEADER": { + "AGENT": "ഏജന്റ്", + "OPEN": "സജീവം", + "UNATTENDED": "Unattended", + "STATUS": "സ്റ്റാറ്റസ്" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Team", + "OPEN": "സജീവം", + "UNATTENDED": "Unattended", + "STATUS": "സ്റ്റാറ്റസ്" + } + }, + "AGENT_STATUS": { + "HEADER": "Agent status", + "ONLINE": "ഓൺലൈൻ", + "BUSY": "തിരക്ക്", + "OFFLINE": "ഓഫ്ലൈൻ" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Sunday", + "MONDAY": "Monday", + "TUESDAY": "Tuesday", + "WEDNESDAY": "Wednesday", + "THURSDAY": "Thursday", + "FRIDAY": "Friday", + "SATURDAY": "Saturday" + }, + "SLA_REPORTS": { + "HEADER": "SLA Reports", + "NO_RECORDS": "SLA applied conversations are not available.", + "LOADING": "Loading SLA data...", + "DOWNLOAD_SLA_REPORTS": "Download SLA reports", + "DOWNLOAD_FAILED": "Failed to download SLA Reports", + "DROPDOWN": { + "ADD_FIlTER": "ഫിൽട്ടർ ചേർക്കുക", + "CLEAR_ALL": "Clear all", + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "ഒരു ഫലവും കണ്ടെത്താനായില്ല", + "NO_FILTER": "No filters available", + "SEARCH": "Search filter", + "INPUT_PLACEHOLDER": { + "SLA": "SLA name", + "AGENTS": "Agent name", + "INBOXES": "Inbox name", + "LABELS": "ലേബൽ നാമം", + "TEAMS": "ടീമിന്റെ പേര്" + }, + "SLA": "SLA Policy", + "INBOXES": "ഇൻബോക്സ്", + "AGENTS": "ഏജന്റ്", + "LABELS": "Label", + "TEAMS": "Team" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentage of SLAs created were completed successfully" + }, + "NO_OF_MISSES": { + "LABEL": "Number of Misses", + "TOOLTIP": "Total SLA misses in a certain period" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Number of Conversations", + "TOOLTIP": "Total number of conversations with SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "സംഭാഷണം", + "AGENT": "ഏജന്റ്" + }, + "VIEW_DETAILS": "View Details" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "ഇൻബോക്സ്", + "AGENT": "ഏജന്റ്", + "TEAM": "Team", + "LABEL": "Label", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "മിഴിവ് എണ്ണം", + "CONVERSATIONS": "No. of conversations" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/resetPassword.json b/app/javascript/dashboard/i18n/locale/ml/resetPassword.json new file mode 100644 index 0000000..c1e2730 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "പാസ്വേഡ് പുനഃസജ്ജമാക്കുക", + "DESCRIPTION": "Enter the email address you use to log in to Chatwoot to get the password reset instructions.", + "GO_BACK_TO_LOGIN": "If you want to go back to the login page,", + "EMAIL": { + "LABEL": "ഇമെയിൽ", + "PLACEHOLDER": "ദയവായി നിങ്ങളുടെ ഇമെയിൽ നൽകുക.", + "ERROR": "ദയവായി സാധുവായ ഒരു ഇമെയിൽ നൽകുക." + }, + "API": { + "SUCCESS_MESSAGE": "Password reset link has been sent to your email.", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again." + }, + "SUBMIT": "സമർപ്പിക്കുക" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/search.json b/app/javascript/dashboard/i18n/locale/ml/search.json new file mode 100644 index 0000000..cf4c56e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "കോൺടാക്റ്റുകൾ", + "CONVERSATIONS": "സംഭാഷണങ്ങൾ", + "MESSAGES": "Messages", + "ARTICLES": "Articles" + }, + "SECTION": { + "CONTACTS": "കോൺടാക്റ്റുകൾ", + "CONVERSATIONS": "സംഭാഷണങ്ങൾ", + "MESSAGES": "Messages", + "ARTICLES": "Articles" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "Searching", + "LOADING_DATA": "Loading", + "EMPTY_STATE": "No {item} found for query '{query}'", + "EMPTY_STATE_FULL": "No results found for query '{query}'", + "PLACEHOLDER_KEYBINDING": "/to focus", + "INPUT_PLACEHOLDER": "Type 3 or more characters to search", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Clear all", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Search by conversation id, email, phone number, messages for better search results. ", + "BOT_LABEL": "ബോട്ട്", + "READ_MORE": "Read more", + "READ_LESS": "Read less", + "WROTE": "wrote:", + "FROM": "From", + "EMAIL": "ഇമെയിൽ", + "EMAIL_SUBJECT": "Subject", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "കഴിഞ്ഞ 7 ദിവസം", + "LAST_30_DAYS": "കഴിഞ്ഞ 30 ദിവസം", + "LAST_60_DAYS": "കഴിഞ്ഞ 60 ദിവസം", + "LAST_90_DAYS": "കഴിഞ്ഞ 90 ദിവസം", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "അപേക്ഷിക്കുക", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Clear filter" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "അയച്ചയാൾ", + "IN": "ഇൻബോക്സ്", + "AGENTS": "ഏജന്റുമാർ", + "CONTACTS": "കോൺടാക്റ്റുകൾ", + "INBOXES": "ഇൻബോക്സുകൾ", + "NO_AGENTS": "ഏജന്റകളെ ഒന്നും കണ്ടെത്താൻ സാധിച്ചില്ല", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/setNewPassword.json b/app/javascript/dashboard/i18n/locale/ml/setNewPassword.json new file mode 100644 index 0000000..312a7a4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Set new password", + "PASSWORD": { + "LABEL": "പാസ്വേഡ്", + "PLACEHOLDER": "പാസ്വേഡ്", + "ERROR": "Password is too short." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm password", + "PLACEHOLDER": "പാസ്വേഡ് സ്ഥിരീകരിക്കുക", + "ERROR": "പാസ്വേഡുകൾ പൊരുത്തപ്പെടുന്നില്ല." + }, + "API": { + "SUCCESS_MESSAGE": "Successfully changed the password.", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again." + }, + "CAPTCHA": { + "ERROR": "Verification expired. Please solve captcha again." + }, + "SUBMIT": "സമർപ്പിക്കുക" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/settings.json b/app/javascript/dashboard/i18n/locale/ml/settings.json new file mode 100644 index 0000000..10aa54f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "പ്രൊഫൈൽ ക്രമീകരണങ്ങൾ", + "TITLE": "പ്രൊഫൈൽ ക്രമീകരണങ്ങൾ", + "BTN_TEXT": "പ്രൊഫൈൽ അപ്ഡേറ്റ് ചെയ്യുക", + "DELETE_AVATAR": "Delete Avatar", + "AVATAR_DELETE_SUCCESS": "Avatar has been deleted successfully", + "AVATAR_DELETE_FAILED": "There is an error while deleting avatar, please try again", + "UPDATE_SUCCESS": "Your profile has been updated successfully", + "PASSWORD_UPDATE_SUCCESS": "Your password has been changed successfully", + "AFTER_EMAIL_CHANGED": "നിങ്ങളുടെ പ്രൊഫൈൽ വിജയകരമായി അപ്ഡേറ്റു ചെയ്തിരിക്കുന്നു, ലോഗിൻ ക്രെഡൻഷ്യലുകൾ മാറ്റിയതിനാൽ ദയവായി വീണ്ടും ലോഗിൻ ചെയ്യുക", + "FORM": { + "PICTURE": "Profile Picture", + "AVATAR": "പ്രൊഫൈൽ ചിത്രം", + "ERROR": "ദയവായി ഫോമിലെ പിശകുകൾ പരിഹരിക്കുക", + "REMOVE_IMAGE": "നീക്കം ചെയ്യുക", + "UPLOAD_IMAGE": "ചിത്രം അപ്ലോഡു ചെയ്യുക", + "UPDATE_IMAGE": "ചിത്രം അപ്ഡേറ്റു ചെയ്യുക", + "PROFILE_SECTION": { + "TITLE": "പ്രൊഫൈൽ", + "NOTE": "നിങ്ങളുടെ ഇമെയിൽ വിലാസം നിങ്ങളുടെ ഐഡന്റിറ്റിയാണ്, ഒപ്പം ലോഗിൻ ചെയ്യാൻ ഇതാണ് ഉപയോഗിക്കേണ്ടത്." + }, + "SEND_MESSAGE": { + "TITLE": "Hotkey to send messages", + "NOTE": "You can select a hotkey (either Enter or Cmd/Ctrl+Enter) based on your preference of writing.", + "UPDATE_SUCCESS": "Your settings have been updated successfully", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Send messages by pressing Enter key instead of clicking the send button." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Send messages by pressing Cmd/Ctrl + enter key instead of clicking the send button." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Default", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Personal message signature", + "NOTE": "Create a unique message signature to appear at the end of every message you send from any inbox. You can also include an inline image, which is supported in live-chat, email, and API inboxes.", + "BTN_TEXT": "Save message signature", + "API_ERROR": "Couldn't save signature! Try again", + "API_SUCCESS": "Signature saved successfully", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save to save the signature", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Message Signature", + "ERROR": "Message Signature cannot be empty", + "PLACEHOLDER": "Insert your personal message signature here." + }, + "PASSWORD_SECTION": { + "TITLE": "പാസ്വേഡ്", + "NOTE": "നിങ്ങളുടെ പാസ്വേഡ് അപ്ഡേറ്റ് ചെയ്യുന്നത് ഒന്നിലധികം ഉപകരണങ്ങളിൽ നിങ്ങളുടെ ലോഗിനുകൾ പുനഃസജ്ജീകരിക്കും.", + "BTN_TEXT": "Change password" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "ആക്സസ് ടോക്കൺ", + "NOTE": "നിങ്ങൾ ഒരു എപിഐ അടിസ്ഥാനമാക്കിയുള്ള സംയോജനം നിർമ്മിക്കുകയാണെങ്കിൽ ഈ ടോക്കൺ ഉപയോഗിക്കാൻ കഴിയും", + "COPY": "പകർത്തുക", + "RESET": "Reset", + "CONFIRM_RESET": "Are you sure?", + "CONFIRM_HINT": "Click again to confirm", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Alerts", + "NOTE": "Enable audio alerts in dashboard for new messages and conversations.", + "PLAY": "Play sound", + "ALERT_TYPES": { + "NONE": "ഒന്നുമില്ല", + "MINE": "Assigned", + "ALL": "എല്ലാം", + "ASSIGNED": "My assigned conversations", + "UNASSIGNED": "Unassigned conversations", + "NOTME": "Open conversations assigned to others" + }, + "ALERT_COMBINATIONS": { + "NONE": "You haven't selected any options, you won't receive any audio alerts.", + "ASSIGNED": "You'll receive alerts for conversations assigned to you.", + "UNASSIGNED": "You'll receive alerts for any unassigned conversations.", + "NOTME": "You'll receive alerts for conversations assigned to others.", + "ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.", + "ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.", + "NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.", + "ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations." + }, + "ALERT_TYPE": { + "TITLE": "Alert events for conversations", + "NONE": "ഒന്നുമില്ല", + "ASSIGNED": "Assigned Conversations", + "ALL_CONVERSATIONS": "All Conversations" + }, + "DEFAULT_TONE": { + "TITLE": "Alert tone:" + }, + "CONDITIONS": { + "TITLE": "Alert conditions:", + "CONDITION_ONE": "Send audio alerts only if the browser window is not active", + "CONDITION_TWO": "Send alerts every 30s until all the assigned conversations are read" + }, + "SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.", + "READ_MORE": "Read more" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "ഇമെയിൽ അറിയിപ്പുകൾ", + "NOTE": "നിങ്ങളുടെ ഇമെയിൽ അറിയിപ്പ് മുൻഗണനകൾ ഇവിടെ അപ്ഡേറ്റു ചെയ്യുക", + "CONVERSATION_ASSIGNMENT": "ഒരു സംഭാഷണം എനിക്ക് നിയോഗിക്കുമ്പോൾ ഇമെയിൽ അറിയിപ്പുകൾ അയയ്ക്കുക", + "CONVERSATION_CREATION": "ഒരു പുതിയ സംഭാഷണം സൃഷ്ടിക്കുമ്പോൾ ഇമെയിൽ അറിയിപ്പുകൾ അയയ്ക്കുക", + "CONVERSATION_MENTION": "Send email notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "Send email notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send email notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send email notifications when a conversation misses resolution SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Notification preferences", + "TYPE_TITLE": "Notification type", + "EMAIL": "ഇമെയിൽ", + "PUSH": "Push notification", + "TYPES": { + "CONVERSATION_CREATED": "A new conversation is created", + "CONVERSATION_ASSIGNED": "A conversation is assigned to you", + "CONVERSATION_MENTION": "You are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "A new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "A new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "A conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "A conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "A conversation misses resolution SLA" + }, + "BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them" + }, + "API": { + "UPDATE_SUCCESS": "Your notification preferences are updated successfully", + "UPDATE_ERROR": "മുൻഗണനകൾ അപ്ഡേറ്റു ചെയ്യുമ്പോൾ ഒരു പിശക് ഉണ്ട്, ദയവായി വീണ്ടും ശ്രമിക്കുക" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Push Notifications", + "NOTE": "Update your push notification preferences here", + "CONVERSATION_ASSIGNMENT": "Send push notifications when a conversation is assigned to me", + "CONVERSATION_CREATION": "Send push notifications when a new conversation is created", + "CONVERSATION_MENTION": "Send push notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in a participating conversation", + "HAS_ENABLED_PUSH": "You have enabled push for this browser.", + "REQUEST_PUSH": "Enable push notifications", + "SLA_MISSED_FIRST_RESPONSE": "Send push notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send push notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send push notifications when a conversation misses resolution SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "പ്രൊഫൈൽ ചിത്രം" + }, + "NAME": { + "LABEL": "നിങ്ങളുടെ മുഴുവൻ പേര്", + "ERROR": "സാധുവായ ഒരു പൂർണ്ണ നാമം നൽകുക", + "PLACEHOLDER": "ദയവായി നിങ്ങളുടെ മുഴുവൻ പേര് നൽകുക" + }, + "DISPLAY_NAME": { + "LABEL": "പ്രദർശന നാമം", + "ERROR": "സാധുവായ ഒരു പ്രദർശന നാമം നൽകുക", + "PLACEHOLDER": "ദയവായി ഒരു പ്രദർശന നാമം നൽകുക, ഇത് സംഭാഷണങ്ങളിൽ ദൃശ്യമാകും" + }, + "AVAILABILITY": { + "LABEL": "ലഭ്യത", + "STATUS": { + "ONLINE": "ഓൺലൈൻ", + "BUSY": "തിരക്ക്", + "OFFLINE": "ഓഫ്ലൈൻ" + }, + "SET_AVAILABILITY_SUCCESS": "Availability has been set successfully", + "SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again", + "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user" + }, + "EMAIL": { + "LABEL": "നിങ്ങളുടെ ഇമെയിൽ വിലാസം", + "ERROR": "ദയവായി സാധുവായ ഒരു ഇമെയിൽ വിലാസം നൽകുക", + "PLACEHOLDER": "ദയവായി നിങ്ങളുടെ ഇമെയിൽ വിലാസം നൽകുക, ഇത് സംഭാഷണങ്ങളിൽ ദൃശ്യമാകും" + }, + "CURRENT_PASSWORD": { + "LABEL": "Current password", + "ERROR": "Please enter the current password", + "PLACEHOLDER": "Please enter the current password" + }, + "PASSWORD": { + "LABEL": "പുതിയ പാസ്വേഡ്", + "ERROR": "ദയവായി 6 അല്ലെങ്കിൽ അതിൽ കൂടുതൽ ദൈർഘ്യമുള്ള പാസ്വേഡ് നൽകുക", + "PLACEHOLDER": "ദയവായി ഒരു പുതിയ പാസ്വേഡ് നൽകുക" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "പുതിയ പാസ്വേഡ് സ്ഥിരീകരിക്കുക", + "ERROR": "പാസ്വേഡുകൾ പൊരുത്തപ്പെടുന്നില്ല", + "PLACEHOLDER": "നിങ്ങളുടെ പുതിയ പാസ്വേഡ് വീണ്ടും നൽകുക" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "മാറ്റം വരുത്തുക", + "CHANGE_ACCOUNTS": "Switch account", + "SWITCH_ACCOUNT": "Switch account", + "CONTACT_SUPPORT": "Contact support", + "SELECTOR_SUBTITLE": "ഇനിപ്പറയുന്ന ലിസ്റ്റിൽ നിന്ന് ഒരു അക്കൗണ്ട് തിരഞ്ഞെടുക്കുക", + "PROFILE_SETTINGS": "Profile settings", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Keyboard shortcuts", + "APPEARANCE": "Change appearance", + "SUPER_ADMIN_CONSOLE": "SuperAdmin console", + "DOCS": "Read documentation", + "CHANGELOG": "Changelog", + "LOGOUT": "Log out" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "ദിവസത്തെ ട്രയൽ ശേഷിക്കുന്നു.", + "TRAIL_BUTTON": "ഇപ്പോൾ വാങ്ങുക", + "DELETED_USER": "Deleted User", + "EMAIL_VERIFICATION_PENDING": "It seems that you haven't verified your email address yet. Please check your inbox for the verification email.", + "RESEND_VERIFICATION_MAIL": "Resend verification email", + "EMAIL_VERIFICATION_SENT": "Verification email has been sent. Please check your inbox.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Account Suspended", + "MESSAGE": "Your account is suspended. Please reach out to the support team for more information." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Log out" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "പകർത്തുക", + "CODEPEN": "Open in CodePen", + "COPY_SUCCESSFUL": "കോഡ് ക്ലിപ്പ്ബോർഡിലേക്ക് വിജയകരമായി പകർത്തി" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Show More", + "SHOW_LESS": "Show Less" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "ഡൗൺലോഡ്", + "UPLOADING": "അപ്ലോഡുചെയ്യുന്നു...", + "INSTAGRAM_STORY_UNAVAILABLE": "This story is no longer available." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "See on map" + }, + "FORM_BUBBLE": { + "SUBMIT": "സമർപ്പിക്കുക" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "This image is no longer available.", + "LOADING_FAILED": "Loading failed" + } + }, + "CONFIRM_EMAIL": "പരിശോധിച്ചുറപ്പിക്കുന്നു...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "ഇൻബോക്സ് ചേർക്കുക" + } + }, + "SIDEBAR": { + "NO_ITEMS": "No items", + "CURRENTLY_VIEWING_ACCOUNT": "Currently viewing:", + "SWITCH": "Switch", + "INBOX_VIEW": "Inbox View", + "CONVERSATIONS": "സംഭാഷണങ്ങൾ", + "INBOX": "My Inbox", + "ALL_CONVERSATIONS": "All Conversations", + "MENTIONED_CONVERSATIONS": "പരാമർശിക്കുന്നു", + "PARTICIPATING_CONVERSATIONS": "Participating", + "UNATTENDED_CONVERSATIONS": "Unattended", + "REPORTS": "റിപ്പോർട്ടുകൾ", + "SETTINGS": "ക്രമീകരണങ്ങൾ", + "CONTACTS": "കോൺടാക്റ്റുകൾ", + "ACTIVE": "സജീവമാണ്", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistants", + "CAPTAIN_DOCUMENTS": "Documents", + "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_TOOLS": "Tools", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "ഇൻബോക്സുകൾ", + "CAPTAIN_SETTINGS": "ക്രമീകരണങ്ങൾ", + "HOME": "ഹോം", + "AGENTS": "ഏജന്റുമാർ", + "AGENT_BOTS": "Bots", + "AUDIT_LOGS": "Audit Logs", + "INBOXES": "ഇൻബോക്സുകൾ", + "NOTIFICATIONS": "Notifications", + "CANNED_RESPONSES": "ക്യാൻഡ് പ്രതികരണങ്ങൾ", + "INTEGRATIONS": "സംയോജനങ്ങൾ", + "PROFILE_SETTINGS": "പ്രൊഫൈൽ ക്രമീകരണങ്ങൾ", + "ACCOUNT_SETTINGS": "അക്കൗണ്ട് ക്രമീകരണങ്ങൾ", + "APPLICATIONS": "Applications", + "LABELS": "ലേബലുകൾ", + "CUSTOM_ATTRIBUTES": "ഇഷ്ടാനുസൃത ആട്രിബ്യൂട്ടുകൾ", + "AUTOMATION": "Automation", + "MACROS": "Macros", + "TEAMS": "Teams", + "BILLING": "Billing", + "CUSTOM_VIEWS_FOLDER": "ഫോൾഡറുകൾ", + "CUSTOM_VIEWS_SEGMENTS": "അംശങ്ങൾ", + "ALL_CONTACTS": "All Contacts", + "TAGGED_WITH": "Tagged with", + "NEW_LABEL": "New label", + "NEW_TEAM": "New team", + "NEW_INBOX": "New inbox", + "REPORTS_CONVERSATION": "സംഭാഷണങ്ങൾ", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "പ്രചാരണങ്ങൾ", + "ONGOING": "Ongoing", + "ONE_OFF": "One off", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "ബോട്ട്", + "REPORTS_AGENT": "ഏജന്റുമാർ", + "REPORTS_LABEL": "ലേബലുകൾ", + "REPORTS_INBOX": "ഇൻബോക്സ്", + "REPORTS_TEAM": "Team", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "Set yourself as", + "SET_YOUR_AVAILABILITY": "Set your availability", + "SLA": "SLA", + "CUSTOM_ROLES": "Custom Roles", + "BETA": "Beta", + "REPORTS_OVERVIEW": "അവലോകനം", + "REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages", + "HELP_CENTER": { + "TITLE": "Help Center", + "ARTICLES": "Articles", + "CATEGORIES": "Categories", + "LOCALES": "Locales", + "SETTINGS": "ക്രമീകരണങ്ങൾ" + }, + "CHANNELS": "ചാനലുകൾ", + "SET_AUTO_OFFLINE": { + "TEXT": "Mark offline automatically", + "INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard.", + "INFO_SHORT": "Automatically mark offline when you aren't using the app." + }, + "DOCS": "Read docs", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "Billing", + "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "CURRENT_PLAN": { + "TITLE": "Current Plan", + "PLAN_NOTE": "You are currently subscribed to the **{plan}** plan with **{quantity}** licenses", + "SEAT_COUNT": "Number of seats", + "RENEWS_ON": "Renews on" + }, + "VIEW_PRICING": "View Pricing", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Manage your subscription", + "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", + "BUTTON_TXT": "Go to the billing portal" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Manage usage and credits for Captain AI.", + "BUTTON_TXT": "Buy more credits", + "DOCUMENTS": "Documents", + "RESPONSES": "Responses", + "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more.", + "REFRESH_CREDITS": "Refresh" + }, + "CHAT_WITH_US": { + "TITLE": "Need help?", + "DESCRIPTION": "Do you face any issues in billing? We are here to help.", + "BUTTON_TXT": "ഞങ്ങളുമായി ചാറ്റുചെയ്യുക" + }, + "NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again.", + "TOPUP": { + "BUY_CREDITS": "Buy more credits", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Note:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "റദ്ദാക്കുക", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Go Back", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "കോഡ് ക്ലിപ്പ്ബോർഡിലേക്ക് വിജയകരമായി പകർത്തി", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.", + "NEW_ACCOUNT": "പുതിയ അക്കൗണ്ട്", + "SELECTOR_SUBTITLE": "അക്കൗണ്ട് ഒരു പുതിയ അക്കൗണ്ട് വിജയകരമായി സൃഷ്ടിക്കുക", + "API": { + "SUCCESS_MESSAGE": "അക്കൗണ്ട് വിജയകരമായി സൃഷ്ടിച്ചു", + "EXIST_MESSAGE": "അക്കൗണ്ട് ഇതിനകം നിലവിലുണ്ട്", + "ERROR_MESSAGE": "വൂട്ട് സെർവറിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക" + }, + "FORM": { + "NAME": { + "LABEL": "കമ്പനിയുടെ പേര്", + "PLACEHOLDER": "പുണ്ണ്യാളൻ അഗർബത്തീസ്" + }, + "SUBMIT": "സമർപ്പിക്കുക", + "CANCEL": "റദ്ദാക്കുക" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "View all shortcuts", + "TITLE": { + "OPEN_CONVERSATION": "Open conversation", + "RESOLVE_AND_NEXT": "Resolve and move to next", + "NAVIGATE_DROPDOWN": "Navigate dropdown items", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "ADD_ATTACHMENT": "Add Attachment", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "TOGGLE_SIDEBAR": "Toggle Sidebar", + "GO_TO_REPORTS_SIDEBAR": "Go to Reports sidebar", + "MOVE_TO_NEXT_TAB": "Move to next tab in conversation list", + "GO_TO_SETTINGS": "Go to Settings", + "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", + "SWITCH_TO_REPLY": "Switch to Reply", + "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "Priority", + "ACTIVE": "സജീവമാണ്", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "എഡിറ്റുചെയ്യുക" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "റദ്ദാക്കുക" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Description:", + "PLACEHOLDER": "Enter description" + }, + "STATUS": { + "LABEL": "Status:", + "PLACEHOLDER": "Select status", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "ചേർക്കുക" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "എഡിറ്റുചെയ്യുക" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "റദ്ദാക്കുക" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Description:", + "PLACEHOLDER": "Enter description" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "ചേർക്കുക" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "ഇല്ലാതാക്കുക", + "CANCEL_BUTTON_LABEL": "റദ്ദാക്കുക" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/signup.json b/app/javascript/dashboard/i18n/locale/ml/signup.json new file mode 100644 index 0000000..27ff6f3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Create an account", + "TITLE": "രജിസ്റ്റർ", + "TESTIMONIAL_HEADER": "All it takes is one step to move forward", + "TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.", + "TERMS_ACCEPT": "By creating an account, you agree to our T & C and Privacy policy", + "OAUTH": { + "GOOGLE_SIGNUP": "Sign up with Google" + }, + "COMPANY_NAME": { + "LABEL": "Company name", + "PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises", + "ERROR": "Company name is too short" + }, + "FULL_NAME": { + "LABEL": "Full name", + "PLACEHOLDER": "Enter your full name. eg: Bruce Wayne", + "ERROR": "Full name is too short" + }, + "EMAIL": { + "LABEL": "Work email", + "PLACEHOLDER": "Enter your work email address. E.g., bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Please enter a valid work email address" + }, + "PASSWORD": { + "LABEL": "പാസ്വേഡ്", + "PLACEHOLDER": "പാസ്വേഡ്", + "ERROR": "പാസ്വേഡ് വളരെ ചെറുതാണ്", + "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "പാസ്വേഡ് സ്ഥിരീകരിക്കുക", + "PLACEHOLDER": "പാസ്വേഡ് സ്ഥിരീകരിക്കുക", + "ERROR": "പാസ്വേഡുകൾ പൊരുത്തപ്പെടുന്നില്ല." + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "സെർവറിലേക്ക് കണക്റ്റുചെയ്യാനായില്ല, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക" + }, + "SUBMIT": "Create account", + "HAVE_AN_ACCOUNT": "Already have an account?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/sla.json b/app/javascript/dashboard/i18n/locale/ml/sla.json new file mode 100644 index 0000000..6e4b666 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Add SLA", + "ADD_ACTION_LONG": "Create a new SLA Policy", + "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", + "LEARN_MORE": "Learn more about SLA", + "LOADING": "Fetching SLAs", + "PAYWALL": { + "TITLE": "Upgrade to create SLAs", + "AVAILABLE_ON": "The SLA feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SLA feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no SLAs available in this account.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Issues raised by enterprise customers, that require immediate attention.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Issues raised by enterprise customers, that needs to be acknowledged quickly." + }, + "BUSINESS_HOURS_ON": "Business hours on", + "BUSINESS_HOURS_OFF": "Business hours off", + "RESPONSE_TYPES": { + "FRT": "First response time threshold", + "NRT": "Next response time threshold", + "RT": "Resolution time threshold", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA Name", + "PLACEHOLDER": "SLA Name", + "REQUIRED_ERROR": "SLA name is required", + "MINIMUM_LENGTH_ERROR": "കുറഞ്ഞ ദൈർഘ്യം 2 ആവശ്യമാണ്", + "VALID_ERROR": "അക്ഷരമാല, അക്കങ്ങൾ, ഹൈഫൻ, അണ്ടർ സ്കോർ എന്നിവ മാത്രമേ അനുവദിക്കൂ" + }, + "DESCRIPTION": { + "LABEL": "വിവരണം", + "PLACEHOLDER": "SLA for premium customers" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "First Response Time", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Next Response Time", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "മിഴിവ് സമയം", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Business Hours", + "PLACEHOLDER": "Only during business hours" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Threshold should be a number and greater than zero" + }, + "EDIT": "എഡിറ്റുചെയ്യുക", + "CREATE": "സൃഷ്ടിക്കുക", + "DELETE": "ഇല്ലാതാക്കുക", + "CANCEL": "റദ്ദാക്കുക" + }, + "ADD": { + "TITLE": "Add SLA", + "DESC": "Friendly promises for great service!", + "API": { + "SUCCESS_MESSAGE": "SLA added successfully", + "ERROR_MESSAGE": "ഒരു പിശക് ഉണ്ടായിരുന്നു, ദയവായി വീണ്ടും ശ്രമിക്കുക" + } + }, + "DELETE": { + "TITLE": "Delete SLA", + "API": { + "SUCCESS_MESSAGE": "SLA deleted successfully", + "ERROR_MESSAGE": "ഒരു പിശക് ഉണ്ടായിരുന്നു, ദയവായി വീണ്ടും ശ്രമിക്കുക" + }, + "CONFIRM": { + "TITLE": "ഇല്ലാതാക്കൽ സ്ഥിരീകരിക്കുക", + "MESSAGE": "Are you sure you want to delete ", + "YES": "അതെ, ഇല്ലാതാക്കുക ", + "NO": "ഇല്ല, സൂക്ഷിക്കുക" + } + }, + "EVENTS": { + "TITLE": "SLA Misses", + "FRT": "ആദ്യ പ്രതികരണ സമയം", + "NRT": "Next response time", + "RT": "Resolution time", + "SHOW_MORE": "{count} more", + "HIDE": "Hide {count} rows" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/teamsSettings.json b/app/javascript/dashboard/i18n/locale/ml/teamsSettings.json new file mode 100644 index 0000000..169ef9c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Create new team", + "HEADER": "Teams", + "LOADING": "Fetching teams", + "DESCRIPTION": "Teams allow you to organize agents into groups based on their responsibilities. An agent can belong to multiple teams. When working collaboratively, you can assign conversations to specific teams.", + "LEARN_MORE": "Learn more about teams", + "LIST": { + "404": "There are no teams created on this account.", + "EDIT_TEAM": "Edit team", + "NONE": "ഒന്നുമില്ല" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Create a new team", + "DESC": "Add a title and description to your new team." + }, + "AGENTS": { + "BUTTON_TEXT": "Add agents to team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation." + }, + "WIZARD_CREATE": { + "TITLE": "സൃഷ്ടിക്കുക", + "BODY": "Create a new team of agents." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "ഏജന്റുമാരെ ചേർക്കുക", + "BODY": "Add agents to the team." + }, + "WIZARD_FINISH": { + "TITLE": "Finish", + "BODY": "എല്ലാം ഭംഗിയായി പാപര്യവസാനിച്ചിരിക്കുന്നു. വരൂ നമുക്ക് പോകാം!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Edit your team details", + "DESC": "Edit title and description to your team.", + "BUTTON_TEXT": "Update team" + }, + "AGENTS": { + "BUTTON_TEXT": "Update agents in team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. All the added agents will be notified when a conversation is assigned to this team." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Team details", + "ROUTE": "settings_teams_edit", + "BODY": "Change name, description and other details." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Edit Agents", + "ROUTE": "settings_teams_edit_members", + "BODY": "Edit agents in your team." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Finish", + "ROUTE": "settings_teams_edit_finish", + "BODY": "എല്ലാം ഭംഗിയായി പാപര്യവസാനിച്ചിരിക്കുന്നു. വരൂ നമുക്ക് പോകാം!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Couldn't save the team details. Try again." + }, + "AGENTS": { + "AGENT": "AGENT", + "EMAIL": "ഇമെയിൽ", + "BUTTON_TEXT": "ഏജന്റുമാരെ ചേർക്കുക", + "ADD_AGENTS": "Adding Agents to your Team...", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected." + }, + "ADD": { + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation.", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected.", + "BUTTON_TEXT": "ഏജന്റുമാരെ ചേർക്കുക", + "AGENT_VALIDATION_ERROR": "Select at least one agent." + }, + "FINISH": { + "TITLE": "Your team is ready!", + "MESSAGE": "You can now collaborate as a team on conversations. Happy supporting ", + "BUTTON_TEXT": "Finish" + }, + "DELETE": { + "BUTTON_TEXT": "ഇല്ലാതാക്കുക", + "API": { + "SUCCESS_MESSAGE": "Team deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the team. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure you want to delete the team?", + "PLACE_HOLDER": "Please type {teamName} to confirm", + "MESSAGE": "Deleting the team will remove the team assignment from the conversations assigned to this team.", + "YES": "ഇല്ലാതാക്കുക ", + "NO": "റദ്ദാക്കുക" + } + }, + "SETTINGS": "ക്രമീകരണങ്ങൾ", + "FORM": { + "UPDATE": "Update team", + "CREATE": "Create team", + "NAME": { + "LABEL": "Team name", + "PLACEHOLDER": "Example: Sales, Customer Support" + }, + "DESCRIPTION": { + "LABEL": "Team Description", + "PLACEHOLDER": "Short description about this team." + }, + "AUTO_ASSIGN": { + "LABEL": "Allow auto assign for this team." + }, + "SUBMIT_CREATE": "Create team" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/webhooks.json b/app/javascript/dashboard/i18n/locale/ml/webhooks.json new file mode 100644 index 0000000..a628f5e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "വെബ്ഹൂക്ക് ക്രമീകരണങ്ങൾ" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/ml/whatsappTemplates.json new file mode 100644 index 0000000..cf28312 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Whatsapp Templates", + "SUBTITLE": "Select the whatsapp template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ml/yearInReview.json b/app/javascript/dashboard/i18n/locale/ml/yearInReview.json new file mode 100644 index 0000000..3d1aed9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ml/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "അടയ്ക്കുക", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "സംഭാഷണങ്ങൾ", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "ഡൗൺലോഡ്", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "സംഭാഷണം പങ്കിടുക" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/advancedFilters.json b/app/javascript/dashboard/i18n/locale/ms/advancedFilters.json new file mode 100644 index 0000000..891e95b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Tapiskan perbualan", + "SUBTITLE": "Add your filters below and hit 'Apply filters' to cut through the chat clutter.", + "EDIT_CUSTOM_FILTER": "Edit Folder", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your folder.", + "ADD_NEW_FILTER": "Add filter", + "FILTER_DELETE_ERROR": "Oops, looks like we can't save nothing! Please add at least one filter to save it.", + "SUBMIT_BUTTON_LABEL": "Tetapkan tapisan", + "UPDATE_BUTTON_LABEL": "Update folder", + "CANCEL_BUTTON_LABEL": "Batalkan", + "CLEAR_BUTTON_LABEL": "Clear filters", + "FOLDER_LABEL": "Folder Name", + "FOLDER_QUERY_LABEL": "Folder Query", + "EMPTY_VALUE_ERROR": "Nilai diperlukan.", + "TOOLTIP_LABEL": "Tapiskan perbualan", + "QUERY_DROPDOWN_LABELS": { + "AND": "DAN", + "OR": "ATAU" + }, + "INPUT_PLACEHOLDER": "Enter value", + "OPERATOR_LABELS": { + "equal_to": "Sama dengan", + "not_equal_to": "Tak sama dengan", + "does_not_contain": "Tidak mengandungi", + "is_present": "Sedia ada", + "is_not_present": "Tidak sedia ada", + "is_greater_than": "Adalah lebih besar", + "is_less_than": "Adalah lebih kurang", + "days_before": "Adalah x hari sebelum", + "starts_with": "Starts with", + "equalTo": "Sama dengan", + "notEqualTo": "Tak sama dengan", + "contains": "Mengandungi", + "doesNotContain": "Tidak mengandungi", + "isPresent": "Sedia ada", + "isNotPresent": "Tidak sedia ada", + "isGreaterThan": "Adalah lebih besar", + "isLessThan": "Adalah lebih kurang", + "daysBefore": "Adalah x hari sebelum", + "startsWith": "Starts with" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "Benar", + "FALSE": "Tidak benar" + }, + "ATTRIBUTES": { + "STATUS": "Status", + "ASSIGNEE_NAME": "Assignee name", + "INBOX_NAME": "Inbox name", + "TEAM_NAME": "Team name", + "CONVERSATION_IDENTIFIER": "Conversation identifier", + "CAMPAIGN_NAME": "Campaign name", + "LABELS": "Label", + "BROWSER_LANGUAGE": "Browser language", + "PRIORITY": "Priority", + "COUNTRY_NAME": "Country name", + "REFERER_LINK": "Perujuk pautan", + "CUSTOM_ATTRIBUTE_LIST": "Senarai", + "CUSTOM_ATTRIBUTE_TEXT": "Teks", + "CUSTOM_ATTRIBUTE_NUMBER": "Nombor", + "CUSTOM_ATTRIBUTE_LINK": "Pautan", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Kotak Semak", + "CREATED_AT": "Created at", + "LAST_ACTIVITY": "Last activity" + }, + "ERRORS": { + "VALUE_REQUIRED": "Nilai diperlukan", + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard filters", + "ADDITIONAL_FILTERS": "Additional filters", + "CUSTOM_ATTRIBUTES": "Custom attributes" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Adakah kamu ingin menetapkan penapis ini?", + "LABEL": "Namakan penapis ini", + "PLACEHOLDER": "Name your filter to refer it later.", + "ERROR_MESSAGE": "Nama diperlukan.", + "SAVE_BUTTON": "Tetapkan penapis", + "CANCEL_BUTTON": "Batal", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder telah ditetapkan.", + "ERROR_MESSAGE": "Ralat apabilia menetapkan folder ini." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segmen telah berjaya ditetapkan.", + "ERROR_MESSAGE": "Segmen tidak berjaya ditetapkan." + } + }, + "EDIT": { + "EDIT_BUTTON": "Edit folder" + }, + "DELETE": { + "DELETE_BUTTON": "Padam tapisan", + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Adakah anda pasti hendak padamkan tapisan ini ", + "YES": "Yes, delete", + "NO": "No, keep it" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder ini sudah dipadamkan.", + "ERROR_MESSAGE": "Ralat apabila padamkan folder ini." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segmen berjaya dipadam.", + "ERROR_MESSAGE": "Ralat apabilia memadamkan segmen." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/agentBots.json b/app/javascript/dashboard/i18n/locale/ms/agentBots.json new file mode 100644 index 0000000..5e0cd93 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Bots", + "LOADING_EDITOR": "Loading editor...", + "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try. You can manage your bots from this page or create new ones using the 'Add Bot' button.", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "System bot", + "GLOBAL_BOT_BADGE": "System", + "AVATAR": { + "SUCCESS_DELETE": "Bot avatar deleted successfully", + "ERROR_DELETE": "Error deleting bot avatar, please try again" + }, + "BOT_CONFIGURATION": { + "TITLE": "Select an agent bot", + "DESC": "Assign an Agent Bot to your inbox. They can handle initial conversations and transfer them to a live agent when necessary.", + "SUBMIT": "Update", + "DISCONNECT": "Disconnect bot", + "SUCCESS_MESSAGE": "Successfully updated the agent bot.", + "DISCONNECTED_SUCCESS_MESSAGE": "Successfully disconnected the agent bot.", + "ERROR_MESSAGE": "Could not update the agent bot. Please try again.", + "DISCONNECTED_ERROR_MESSAGE": "Could not disconnect the agent bot. Please try again.", + "SELECT_PLACEHOLDER": "Select bot" + }, + "ADD": { + "TITLE": "Add Bot", + "CANCEL_BUTTON_TEXT": "Batalkan", + "API": { + "SUCCESS_MESSAGE": "Bot added successfully.", + "ERROR_MESSAGE": "Could not add bot. Please try again later." + } + }, + "LIST": { + "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.", + "LOADING": "Fetching bots...", + "TABLE_HEADER": { + "DETAILS": "Bot Details", + "URL": "Webhook URL" + } + }, + "DELETE": { + "BUTTON_TEXT": "Padamkan", + "TITLE": "Delete bot", + "CONFIRM": { + "TITLE": "Pasti Padamkan", + "MESSAGE": "Are you sure you want to delete {name}?", + "YES": "Yes, Delete", + "NO": "No, Keep" + }, + "API": { + "SUCCESS_MESSAGE": "Bot deleted successfully.", + "ERROR_MESSAGE": "Could not delete bot. Please try again." + } + }, + "EDIT": { + "BUTTON_TEXT": "Edit", + "TITLE": "Edit bot", + "API": { + "SUCCESS_MESSAGE": "Bot updated successfully.", + "ERROR_MESSAGE": "Could not update bot. Please try again." + } + }, + "ACCESS_TOKEN": { + "TITLE": "Access Token", + "DESCRIPTION": "Copy the access token and save it securely", + "COPY_SUCCESSFUL": "Access token copied to clipboard", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "Bot name", + "PLACEHOLDER": "Enter bot name", + "REQUIRED": "Bot name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "What does this bot do?" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "Webhook URL is required" + }, + "ERRORS": { + "NAME": "Bot name is required", + "URL": "Webhook URL is required", + "VALID_URL": "Please enter a valid URL starting with http:// or https://" + }, + "CANCEL": "Batalkan", + "CREATE": "Create Bot", + "UPDATE": "Update Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them." + }, + "TYPES": { + "WEBHOOK": "Webhook bot" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/agentMgmt.json b/app/javascript/dashboard/i18n/locale/ms/agentMgmt.json new file mode 100644 index 0000000..8d383f5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Ejen", + "HEADER_BTN_TXT": "Tambahkan ejen", + "LOADING": "Mendapatkan senarai ejen", + "DESCRIPTION": "An agent is a member of your customer support team who can view and respond to user messages. The list below shows all the agents in your account.", + "LEARN_MORE": "Learn about user roles", + "AGENT_TYPES": { + "ADMINISTRATOR": "Pentadbir", + "AGENT": "Ejen" + }, + "LIST": { + "404": "Tiada ejen yang dikaitkan ke akaun ini", + "TITLE": "Tadbir ejen dalam pasukan anda", + "DESC": "Kamu boleh tambahkan/padamkan ejen dalam pasukan anda.", + "NAME": "Nama", + "EMAIL": "Emel", + "STATUS": "Status", + "ACTIONS": "Tindakan-tindakan", + "VERIFIED": "Disahkan", + "VERIFICATION_PENDING": "Pengesahan belum lagi selesai", + "AVAILABLE_CUSTOM_ROLE": "Available custom role permissions" + }, + "ADD": { + "TITLE": "Tambahkan ejen ke pasukan anda", + "DESC": "Anda boleh tambahkan ejen yang akan mengendalikan perbualan untuk inbox anda.", + "CANCEL_BUTTON_TEXT": "Batal", + "FORM": { + "NAME": { + "LABEL": "Nama Ejen", + "PLACEHOLDER": "Sila masukkan nama ejen" + }, + "AGENT_TYPE": { + "LABEL": "Peranan", + "PLACEHOLDER": "Sila pilih peranan", + "ERROR": "Peranan diperlukan" + }, + "EMAIL": { + "LABEL": "Emel", + "PLACEHOLDER": "Sila masukkan emel ejen anda" + }, + "SUBMIT": "Tambahkan ejen" + }, + "API": { + "SUCCESS_MESSAGE": "Ejen berjaya ditambahkan", + "EXIST_MESSAGE": "Emel ejen telah diguankkan, Tolong gunakkan emel yang lain", + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" + } + }, + "DELETE": { + "BUTTON_TEXT": "Padamkan", + "API": { + "SUCCESS_MESSAGE": "Ejen berjaya dipadam", + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" + }, + "CONFIRM": { + "TITLE": "Pasti Padamkan", + "MESSAGE": "Adakan anda pasti untuk padamkan ", + "YES": "Ya, Padamkan ", + "NO": "Tidak, simpankan " + } + }, + "EDIT": { + "TITLE": "Edit ejen", + "FORM": { + "NAME": { + "LABEL": "Nama Ejen", + "PLACEHOLDER": "Sila masukkan nama ejen" + }, + "AGENT_TYPE": { + "LABEL": "Peranan", + "PLACEHOLDER": "Sila pilih peranan", + "ERROR": "Peranan diperlukan" + }, + "EMAIL": { + "LABEL": "Emel", + "PLACEHOLDER": "Sila masukkan emel ejen anda" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Availability", + "PLACEHOLDER": "Please select an availability status", + "ERROR": "Availability is required" + }, + "SUBMIT": "Edit ejen" + }, + "BUTTON_TEXT": "Edit", + "CANCEL_BUTTON_TEXT": "Batalkan", + "API": { + "SUCCESS_MESSAGE": "Ejen berjaya dikemaskini", + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Reset kata laluan", + "ADMIN_SUCCESS_MESSAGE": "Email untuk reset kata laluan telah di hantar kepada ejen yang berkenaan", + "SUCCESS_MESSAGE": "Kata laluan ejen telah berjaya set semula", + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" + } + }, + "SEARCH": { + "NO_RESULTS": "Tiada dijumpa." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "Tiada", + "TITLE": { + "AGENT": "Pilih ejen", + "TEAM": "Pilih pasukan" + }, + "LIST": { + "NONE": "Tiada" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "Tiada ejen dijumpa", + "TEAM": "Tiada pasukan dijumpa" + }, + "PLACEHOLDER": { + "AGENT": "Cari ejen", + "TEAM": "Cari pasukan", + "INPUT": "Search for agents" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/ms/attributesMgmt.json new file mode 100644 index 0000000..9c474b4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Penyesuian Atribut", + "HEADER_BTN_TXT": "Tambahkan Atribut Penyesuian", + "LOADING": "Mendapatkan atribut penyesuian", + "DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.", + "LEARN_MORE": "Learn more about custom attributes", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Teks", + "NUMBER": "Nombor", + "LINK": "Pautan", + "DATE": "Date", + "LIST": "Senarai", + "CHECKBOX": "Kotak Semak" + }, + "ADD": { + "TITLE": "Tambahkan Atribut Penyesuian", + "SUBMIT": "Create", + "CANCEL_BUTTON_TEXT": "Batalkan", + "FORM": { + "NAME": { + "LABEL": "Display Name", + "PLACEHOLDER": "Enter custom attribute display name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Enter custom attribute description", + "ERROR": "Description is required" + }, + "MODEL": { + "LABEL": "Applies to", + "PLACEHOLDER": "Please select one", + "ERROR": "Model is required" + }, + "TYPE": { + "LABEL": "Type", + "PLACEHOLDER": "Please select a type", + "ERROR": "Type is required", + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter value and press enter key", + "ERROR": "Must have at least one value" + } + }, + "KEY": { + "LABEL": "Key", + "PLACEHOLDER": "Enter custom attribute key", + "ERROR": "Key is required", + "IN_VALID": "Invalid key" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute added successfully!", + "ERROR_MESSAGE": "Could not create a Custom Attribute. Please try again later." + } + }, + "DELETE": { + "BUTTON_TEXT": "Padamkan", + "API": { + "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure want to delete - {attributeName}", + "PLACE_HOLDER": "Please type {attributeName} to confirm", + "MESSAGE": "Deleting will remove the custom attribute", + "YES": "Delete ", + "NO": "Batalkan" + } + }, + "EDIT": { + "TITLE": "Edit Custom Attribute", + "UPDATE_BUTTON_TEXT": "Update", + "TYPE": { + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter values and press enter key" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute updated successfully", + "ERROR_MESSAGE": "There was an error updating custom attribute, please try again" + } + }, + "TABS": { + "HEADER": "Custom Attributes", + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nama", + "DESCRIPTION": "Description", + "TYPE": "Type", + "KEY": "Key" + }, + "BUTTONS": { + "EDIT": "Edit", + "DELETE": "Padamkan" + }, + "EMPTY_RESULT": { + "404": "There are no custom attributes created", + "NOT_FOUND": "There are no custom attributes configured" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/auditLogs.json b/app/javascript/dashboard/i18n/locale/ms/auditLogs.json new file mode 100644 index 0000000..23d80ed --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Audit Logs", + "HEADER_BTN_TXT": "Add Audit Logs", + "LOADING": "Fetching Audit Logs", + "DESCRIPTION": "Audit Logs maintain a record of activities in your account, allowing you to track and audit your account, team, or services.", + "LEARN_MORE": "Learn more about audit logs", + "SEARCH_404": "There are no items matching this query", + "SIDEBAR_TXT": "
Audit Logs
Audit Logs are trails for events and actions in a Chatwoot System.
", + "LIST": { + "404": "There are no Audit Logs available in this account.", + "TITLE": "Manage Audit Logs", + "DESC": "Audit Logs are trails for events and actions in a Chatwoot System.", + "TABLE_HEADER": { + "ACTIVITY": "User", + "TIME": "Action", + "IP_ADDRESS": "IP Address" + } + }, + "API": { + "SUCCESS_MESSAGE": "AuditLogs retrieved successfully", + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" + }, + "DEFAULT_USER": "System", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} invited {invitee} to the account as an {role}", + "EDIT": { + "SELF": "{agentName} changed their {attributes} to {values}", + "OTHER": "{agentName} changed {attributes} of {user} to {values}", + "DELETED": "{agentName} changed {attributes} of a deleted user to {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} signed in", + "SIGN_OUT": "{agentName} signed out" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} deleted conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/automation.json b/app/javascript/dashboard/i18n/locale/ms/automation.json new file mode 100644 index 0000000..3a0c84e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automation", + "DESCRIPTION": "Automation can replace and streamline existing processes that require manual effort, such as adding labels and assigning conversations to the most suitable agent. This allows the team to focus on their strengths while reducing time spent on routine tasks.", + "LEARN_MORE": "Learn more about automation", + "HEADER_BTN_TXT": "Add Automation Rule", + "LOADING": "Fetching automation rules", + "ADD": { + "TITLE": "Add Automation Rule", + "SUBMIT": "Create", + "CANCEL_BUTTON_TEXT": "Batalkan", + "FORM": { + "NAME": { + "LABEL": "Rule Name", + "PLACEHOLDER": "Enter rule name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Enter rule description", + "ERROR": "Description is required" + }, + "EVENT": { + "LABEL": "Event", + "PLACEHOLDER": "Please select one", + "ERROR": "Event is required" + }, + "CONDITIONS": { + "LABEL": "Conditions" + }, + "ACTIONS": { + "LABEL": "Tindakan-tindakan" + } + }, + "CONDITION_BUTTON_LABEL": "Add Condition", + "ACTION_BUTTON_LABEL": "Add Action", + "API": { + "SUCCESS_MESSAGE": "Automation rule added successfully", + "ERROR_MESSAGE": "Could not able to create a automation rule, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nama", + "DESCRIPTION": "Description", + "ACTIVE": "Active", + "CREATED_ON": "Created on" + }, + "404": "No automation rules found" + }, + "DELETE": { + "TITLE": "Delete Automation Rule", + "SUBMIT": "Padamkan", + "CANCEL_BUTTON_TEXT": "Batalkan", + "CONFIRM": { + "TITLE": "Pasti Padamkan", + "MESSAGE": "Adakan anda pasti untuk padamkan ", + "YES": "Ya, Padamkan ", + "NO": "Tidak, simpankan " + }, + "API": { + "SUCCESS_MESSAGE": "Automation rule deleted successfully", + "ERROR_MESSAGE": "Could not able to delete a automation rule, Please try again later" + } + }, + "EDIT": { + "TITLE": "Edit Automation Rule", + "SUBMIT": "Update", + "CANCEL_BUTTON_TEXT": "Batalkan", + "API": { + "SUCCESS_MESSAGE": "Automation rule updated successfully", + "ERROR_MESSAGE": "Could not update automation rule, Please try again later" + } + }, + "CLONE": { + "TOOLTIP": "Clone", + "API": { + "SUCCESS_MESSAGE": "Automation cloned successfully", + "ERROR_MESSAGE": "Could not clone automation rule, Please try again later" + } + }, + "FORM": { + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Padamkan", + "CANCEL": "Batalkan", + "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" + }, + "CONDITION": { + "DELETE_MESSAGE": "You need to have atleast one condition to save", + "CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes" + }, + "ACTION": { + "DELETE_MESSAGE": "You need to have atleast one action to save", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Enter your message here", + "TEAM_DROPDOWN_PLACEHOLDER": "Select teams", + "EMAIL_INPUT_PLACEHOLDER": "Enter email", + "URL_INPUT_PLACEHOLDER": "Enter URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Activate Automation Rule", + "DEACTIVATION_TITLE": "Deactivate Automation Rule", + "ACTIVATION_DESCRIPTION": "This action will activate the automation rule '{automationName}'. Are you sure you want to proceed?", + "DEACTIVATION_DESCRIPTION": "This action will deactivate the automation rule '{automationName}'. Are you sure you want to proceed?", + "ACTIVATION_SUCCESFUL": "Automation Rule Activated Successfully", + "DEACTIVATION_SUCCESFUL": "Automation Rule Deactivated Successfully", + "ACTIVATION_ERROR": "Could not Activate Automation, Please try again later", + "DEACTIVATION_ERROR": "Could not Deactivate Automation, Please try again later", + "CONFIRMATION_LABEL": "Yes", + "CANCEL_LABEL": "No" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Could not upload attachment, Please try again", + "LABEL_IDLE": "Upload Attachment", + "LABEL_UPLOADING": "Uploading...", + "LABEL_UPLOADED": "Successfully Uploaded", + "LABEL_UPLOAD_FAILED": "Upload Failed" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Nilai diperlukan", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "NONE_OPTION": "Tiada", + "EVENTS": { + "CONVERSATION_CREATED": "Conversation Created", + "CONVERSATION_UPDATED": "Conversation Updated", + "MESSAGE_CREATED": "Message Created", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Conversation Opened" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assign to Agent", + "ASSIGN_TEAM": "Assign a Team", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "SEND_EMAIL_TO_TEAM": "Send an Email to Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Mute Conversation", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_WEBHOOK_EVENT": "Send Webhook Event", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "CHANGE_PRIORITY": "Change Priority", + "ADD_SLA": "Add SLA", + "OPEN_CONVERSATION": "Open conversation" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "None", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Message Type", + "MESSAGE_CONTAINS": "Message Contains", + "EMAIL": "Email", + "INBOX": "Inbox", + "CONVERSATION_LANGUAGE": "Conversation Language", + "PHONE_NUMBER": "Phone Number", + "STATUS": "Status", + "BROWSER_LANGUAGE": "Bahasa Pelayar", + "MAIL_SUBJECT": "Email Subject", + "COUNTRY_NAME": "Country", + "REFERER_LINK": "Referrer Link", + "ASSIGNEE_NAME": "Assignee", + "TEAM_NAME": "Team", + "PRIORITY": "Priority", + "LABELS": "Labels" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/bulkActions.json b/app/javascript/dashboard/i18n/locale/ms/bulkActions.json new file mode 100644 index 0000000..7856642 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", + "AGENT_SELECT_LABEL": "Pilih ejen", + "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", + "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Go back", + "ASSIGN_LABEL": "Assign", + "YES": "Yes", + "SEARCH_INPUT_PLACEHOLDER": "Search", + "ASSIGN_AGENT_TOOLTIP": "Assign agent", + "ASSIGN_TEAM_TOOLTIP": "Assign team", + "ASSIGN_SUCCESFUL": "Conversations assigned successfully.", + "ASSIGN_FAILED": "Failed to assign conversations. Please try again.", + "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", + "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", + "AGENT_LIST_LOADING": "Loading agents", + "UPDATE": { + "CHANGE_STATUS": "Change status", + "SNOOZE_UNTIL": "Snooze", + "UPDATE_SUCCESFUL": "Conversation status updated successfully.", + "UPDATE_FAILED": "Failed to update conversations. Please try again." + }, + "LABELS": { + "ASSIGN_LABELS": "Assign labels", + "NO_LABELS_FOUND": "No labels found", + "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "ASSIGN_SUCCESFUL": "Labels assigned successfully.", + "ASSIGN_FAILED": "Failed to assign labels. Please try again." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Pilih pasukan", + "NONE": "Tiada", + "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", + "ASSIGN_SELECTED_TEAMS": "Assign selected team.", + "ASSIGN_SUCCESFUL": "Teams assigned successfully.", + "ASSIGN_FAILED": "Failed to assign team. Please try again." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/campaign.json b/app/javascript/dashboard/i18n/locale/ms/campaign.json new file mode 100644 index 0000000..d73da46 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Sent by", + "BOT": "Bot", + "FROM": "from", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "Batalkan", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "SENT_BY": { + "LABEL": "Sent by", + "PLACEHOLDER": "Please select sender", + "ERROR": "Sender is required" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Please enter the URL", + "ERROR": "Please enter a valid URL" + }, + "TIME_ON_PAGE": { + "LABEL": "Time on page(Seconds)", + "PLACEHOLDER": "Please enter the time", + "ERROR": "Time on page is required" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "Enable campaign", + "TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "Batalkan", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No WhatsApp campaigns are available", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "Batalkan", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "Process {templateName}", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLES_LABEL": "Variables", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Adakan anda pasti untuk padamkan?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "Padamkan", + "API": { + "SUCCESS_MESSAGE": "Campaign deleted successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/ms/cannedMgmt.json new file mode 100644 index 0000000..817d3bd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Canned Responses", + "LEARN_MORE": "Learn more about canned responses", + "DESCRIPTION": "Canned Responses are pre-written reply templates that help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a canned response during a conversation. ", + "HEADER_BTN_TXT": "Add canned response", + "LOADING": "Fetching canned responses...", + "SEARCH_404": "There are no items matching this query.", + "LIST": { + "404": "There are no canned responses available in this account.", + "TITLE": "Manage canned responses", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "TABLE_HEADER": { + "SHORT_CODE": "Short code", + "CONTENT": "Content", + "ACTIONS": "Tindakan-tindakan" + } + }, + "ADD": { + "TITLE": "Add canned response", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "CANCEL_BUTTON_TEXT": "Batalkan", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a short code.", + "ERROR": "Short Code is required." + }, + "CONTENT": { + "LABEL": "Message", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "Submit" + }, + "API": { + "SUCCESS_MESSAGE": "Canned response added successfully.", + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" + } + }, + "EDIT": { + "TITLE": "Edit canned response", + "CANCEL_BUTTON_TEXT": "Batalkan", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a shortcode.", + "ERROR": "Short code is required." + }, + "CONTENT": { + "LABEL": "Message", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "Submit" + }, + "BUTTON_TEXT": "Edit", + "API": { + "SUCCESS_MESSAGE": "Canned response is updated successfully.", + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" + } + }, + "DELETE": { + "BUTTON_TEXT": "Padamkan", + "API": { + "SUCCESS_MESSAGE": "Canned response deleted successfully.", + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Adakan anda pasti untuk padamkan ", + "YES": "Yes, delete ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/chatlist.json b/app/javascript/dashboard/i18n/locale/ms/chatlist.json new file mode 100644 index 0000000..92e6763 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Fetching conversations", + "LOAD_MORE_CONVERSATIONS": "Load more conversations", + "EOF": "All conversations loaded 🎉", + "LIST": { + "404": "There are no active conversations in this group." + }, + "FAILED_TO_SEND": "Failed to send", + "TAB_HEADING": "Conversations", + "MENTION_HEADING": "Mentions", + "UNATTENDED_HEADING": "Unattended", + "SEARCH": { + "INPUT": "Search for People, Chats, Saved Replies .." + }, + "FILTER_ALL": "All", + "ASSIGNEE_TYPE_TABS": { + "me": "Mine", + "unassigned": "Unassigned", + "all": "All" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Open" + }, + "resolved": { + "TEXT": "Resolved" + }, + "pending": { + "TEXT": "Pending" + }, + "snoozed": { + "TEXT": "Snoozed" + }, + "all": { + "TEXT": "All" + } + }, + "VIEW_FILTER": "View", + "SORT_TOOLTIP_LABEL": "Sort conversations", + "CHAT_SORT": { + "STATUS": "Status", + "ORDER_BY": "Order by" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Created", + "OLDEST": "Created at:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Last activity:", + "ACTIVE": "Last activity" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Last activity: Oldest first" + }, + "last_activity_at_desc": { + "TEXT": "Last activity: Newest first" + }, + "created_at_desc": { + "TEXT": "Created at: Newest first" + }, + "created_at_asc": { + "TEXT": "Created at: Oldest first" + }, + "priority_desc": { + "TEXT": "Priority: Highest first" + }, + "priority_asc": { + "TEXT": "Priority: Lowest first" + }, + "waiting_since_asc": { + "TEXT": "Pending Response: Longest first" + }, + "waiting_since_desc": { + "TEXT": "Pending Response: Shortest first" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "has shared a url" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Sort conversation", + "DROPDOWN_TITLE": "Sort by", + "ITEMS": { + "LATEST": { + "NAME": "Last activity at", + "LABEL": "Last activity" + }, + "CREATED_AT": { + "NAME": "Created at", + "LABEL": "Created at" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Last user message at", + "LABEL": "Last message" + } + } + }, + "RECEIVED_VIA_EMAIL": "Received via email", + "VIEW_TWEET_IN_TWITTER": "View tweet in Twitter", + "REPLY_TO_TWEET": "Reply to this tweet", + "LINK_TO_STORY": "Go to instagram story", + "SENT": "Sent successfully", + "READ": "Read successfully", + "DELIVERED": "Delivered successfully", + "NO_MESSAGES": "No Messages", + "NO_CONTENT": "No content available", + "HIDE_QUOTED_TEXT": "Hide Quoted Text", + "SHOW_QUOTED_TEXT": "Show Quoted Text", + "MESSAGE_READ": "Read", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/companies.json b/app/javascript/dashboard/i18n/locale/ms/companies.json new file mode 100644 index 0000000..ed7a718 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "Nama", + "DOMAIN": "Domain", + "CREATED_AT": "Created at", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/components.json b/app/javascript/dashboard/i18n/locale/ms/components.json new file mode 100644 index 0000000..fd5c6dd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} of {totalPages} pages" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "Tiada dijumpa.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} more" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "Tiada dijumpa.", + "SEARCHING": "Searching..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Batalkan", + "CONFIRM": "Confirm" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Search country", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Please select a dial code from the list" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Author is not available" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Learn more", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/contact.json b/app/javascript/dashboard/i18n/locale/ms/contact.json new file mode 100644 index 0000000..e247ac2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Not Available", + "EMAIL_ADDRESS": "Emel", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "COPY_SUCCESSFUL": "Copied to clipboard successfully", + "COMPANY": "Company", + "LOCATION": "Location", + "BROWSER_LANGUAGE": "Bahasa Pelayar", + "CONVERSATION_TITLE": "Conversation Details", + "VIEW_PROFILE": "View Profile", + "BROWSER": "Browser", + "OS": "Operating System", + "INITIATED_FROM": "Initiated from", + "INITIATED_AT": "Initiated at", + "IP_ADDRESS": "IP Address", + "CREATED_AT_LABEL": "Created", + "NEW_MESSAGE": "New message", + "CALL": "Call", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.", + "TITLE": "Previous Conversations" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Contact Labels", + "ERROR": "Couldn't update labels" + }, + "CONVERSATION": { + "TITLE": "Conversation Labels", + "ADD_BUTTON": "Add Labels" + }, + "LABEL_SELECT": { + "TITLE": "Add Labels", + "PLACEHOLDER": "Search labels", + "NO_RESULT": "No labels found", + "CREATE_LABEL": "Create new label" + } + }, + "MERGE_CONTACT": "Merge contact", + "CONTACT_ACTIONS": "Contact actions", + "MUTE_CONTACT": "Block Contact", + "UNMUTE_CONTACT": "Unblock Contact", + "MUTED_SUCCESS": "This contact is blocked successfully. You will not be notified of any future conversations.", + "UNMUTED_SUCCESS": "This contact is unblocked successfully.", + "SEND_TRANSCRIPT": "Send Transcript", + "EDIT_LABEL": "Edit", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Custom Attributes", + "CONTACT_LABELS": "Contact Labels", + "PREVIOUS_CONVERSATIONS": "Previous Conversations", + "NO_RECORDS_FOUND": "No attributes found" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Edit Contact", + "TITLE": "Edit contact", + "DESC": "Edit contact details" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Delete Contact", + "TITLE": "Delete contact", + "DESC": "Delete contact details", + "CONFIRM": { + "TITLE": "Pasti Padamkan", + "MESSAGE": "Adakan anda pasti untuk padamkan ", + "YES": "Yes, Delete", + "NO": "No, Keep" + }, + "API": { + "SUCCESS_MESSAGE": "Contact deleted successfully", + "ERROR_MESSAGE": "Could not delete contact. Please try again later." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Submit", + "CANCEL": "Batalkan", + "AVATAR": { + "LABEL": "Contact Avatar" + }, + "NAME": { + "PLACEHOLDER": "Enter the full name of the contact", + "LABEL": "Full Name" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio of the contact", + "LABEL": "Bio" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address of the contact", + "LABEL": "Emel", + "DUPLICATE": "This email address is in use for another contact.", + "ERROR": "Please enter a valid email address." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number of the contact", + "LABEL": "Phone Number", + "HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]", + "ERROR": "Phone number should be either empty or of E.164 format", + "DIAL_CODE_ERROR": "Please select a dial code from the list", + "DUPLICATE": "This phone number is in use for another contact." + }, + "LOCATION": { + "PLACEHOLDER": "Enter the location of the contact", + "LABEL": "Location" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Enter the company name", + "LABEL": "Company Name" + }, + "COUNTRY": { + "PLACEHOLDER": "Enter the country name", + "LABEL": "Nama Negara", + "SELECT_PLACEHOLDER": "Select", + "REMOVE": "Remove", + "SELECT_COUNTRY": "Select Country" + }, + "CITY": { + "PLACEHOLDER": "Enter the city name", + "LABEL": "City Name" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Enter the Facebook username", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Enter the Twitter username", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Enter the LinkedIn username", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Enter the Github username", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Contact avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later." + } + }, + "SUCCESS_MESSAGE": "Contact saved successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Start conversation", + "TITLE": "New conversation", + "DESC": "Start a new conversation by sending a new message.", + "NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.", + "FORM": { + "TO": { + "LABEL": "To" + }, + "INBOX": { + "LABEL": "Inbox", + "PLACEHOLDER": "Choose source inbox", + "ERROR": "Select an inbox" + }, + "SUBJECT": { + "LABEL": "Subject", + "PLACEHOLDER": "Subject", + "ERROR": "Subject can't be empty" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Write your message here", + "ERROR": "Message can't be empty" + }, + "ATTACHMENTS": { + "SELECT": "Choose files", + "HELP_TEXT": "Drag and drop files here or choose files to attach" + }, + "SUBMIT": "Send message", + "CANCEL": "Batalkan", + "SUCCESS_MESSAGE": "Message sent!", + "GO_TO_CONVERSATION": "View", + "ERROR_MESSAGE": "Couldn't send! try again" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Social Profiles" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Add custom attribute", + "COPY_SUCCESSFUL": "Copied to clipboard successfully", + "SHOW_MORE": "Show all attributes", + "SHOW_LESS": "Show less attributes", + "ACTIONS": { + "COPY": "Copy attribute", + "DELETE": "Delete attribute", + "EDIT": "Edit attribute" + }, + "ADD": { + "TITLE": "Create custom attribute", + "DESC": "Add custom information to this contact." + }, + "FORM": { + "CREATE": "Add attribute", + "CANCEL": "Batalkan", + "NAME": { + "LABEL": "Custom attribute name", + "PLACEHOLDER": "Eg: shopify id", + "ERROR": "Invalid custom attribute name" + }, + "VALUE": { + "LABEL": "Attribute value", + "PLACEHOLDER": "Eg: 11901 " + }, + "ADD": { + "TITLE": "Create new attribute ", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Select value", + "SEARCH_INPUT_PLACEHOLDER": "Search value", + "NO_RESULT": "No result found" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Valid value is required", + "INVALID_URL": "Invalid URL", + "INVALID_INPUT": "Invalid Input" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Merge contacts", + "DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact’ s attributes will take precedence.", + "PRIMARY": { + "TITLE": "Primary contact", + "HELP_LABEL": "To be deleted" + }, + "PARENT": { + "TITLE": "Contact to merge", + "PLACEHOLDER": "Search for a contact", + "HELP_LABEL": "To be kept" + }, + "SUMMARY": { + "TITLE": "Summary", + "DELETE_WARNING": "Contact of {primaryContactName} will be deleted.", + "ATTRIBUTE_WARNING": "Contact details of {primaryContactName} will be copied to {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": " Merge contacts", + "CANCEL": "Batalkan", + "CHILD_CONTACT": { + "ERROR": "Select a child contact to merge" + }, + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Contacts", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "Active contacts", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "Message", + "SEND_MESSAGE": "Send message", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "Contacts" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Add contact", + "EXPORT_CONTACT": "Export contacts", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Save contact", + "EMAIL_ADDRESS_DUPLICATE": "This email address is in use for another contact.", + "PHONE_NUMBER_DUPLICATE": "This phone number is in use for another contact.", + "SUCCESS_MESSAGE": "Contact saved successfully", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "This contact is unblocked successfully", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Import contacts", + "DESCRIPTION": "Import contacts through a CSV file.", + "DOWNLOAD_LABEL": "Download a sample csv.", + "LABEL": "CSV File:", + "CHOOSE_FILE": "Choose file", + "CHANGE": "Change", + "CANCEL": "Batalkan", + "IMPORT": "Import", + "SUCCESS_MESSAGE": "You will be notified via email when the import is complete.", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "EXPORT_CONTACT": { + "TITLE": "Export contacts", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Export", + "SUCCESS_MESSAGE": "Export is in progress, You will be notified via email when export file is ready to download.", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "Nama", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "COMPANY": "Company", + "COUNTRY": "Country", + "CITY": "City", + "LAST_ACTIVITY": "Last activity", + "CREATED_AT": "Created at" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Adakah kamu ingin menetapkan penapis ini?", + "CONFIRM": "Tetapkan penapis", + "LABEL": "Nama", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "Pasti Padamkan", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "Baik, Padamkan", + "CANCEL": "No, Cancel", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "Nama", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "COUNTRY": "Country", + "CITY": "City", + "CREATED_AT": "Created at", + "LAST_ACTIVITY": "Last activity", + "REFERER_LINK": "Perujuk pautan", + "BLOCKED": "Blocked", + "BLOCKED_TRUE": "Benar", + "BLOCKED_FALSE": "Tidak benar", + "BUTTONS": { + "CLEAR_FILTERS": "Clear filters", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "Tetapkan tapisan", + "ADD_FILTER": "Add filter" + }, + "TITLE": "Filter contacts", + "EDIT_SEGMENT": "Edit segment", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Clear filters" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "View details", + "EDIT_DETAILS_FORM": { + "TITLE": "Edit contact details", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "This email address is in use for another contact." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "This phone number is in use for another contact." + }, + "CITY": { + "PLACEHOLDER": "Enter the city name" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Enter the company name" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "This action is permanent and irreversible.", + "BUTTON": "Delete now" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "Delete contact", + "DELETE_DIALOG": { + "TITLE": "Pasti Padamkan", + "DESCRIPTION": "Are you sure you want to delete this contact?", + "CONFIRM": "Baik, Padamkan", + "API": { + "SUCCESS_MESSAGE": "Contact deleted successfully", + "ERROR_MESSAGE": "Could not delete contact. Please try again later." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributes", + "HISTORY": "History", + "NOTES": "Notes", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "There are no previous conversations associated to this contact" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "Yes", + "NO": "No", + "TRIGGER": { + "SELECT": "Select value", + "INPUT": "Enter value" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "Valid value is required", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "Invalid URL", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "No attributes found", + "API": { + "SUCCESS_MESSAGE": "Attribute updated successfully", + "DELETE_SUCCESS_MESSAGE": "Attribute deleted successfully", + "UPDATE_ERROR": "Unable to update attribute. Please try again later", + "DELETE_ERROR": "Unable to delete attribute. Please try again later" + } + }, + "MERGE": { + "TITLE": "Merge contact", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Primary contact", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "To be deleted", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Search for a contact", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!", + "IS_SEARCHING": "Searching...", + "BUTTONS": { + "CANCEL": "Batalkan", + "CONFIRM": "Merge contact" + } + }, + "NOTES": { + "PLACEHOLDER": "Add a note", + "WROTE": "wrote", + "YOU": "You", + "SAVE": "Save note", + "ADD_NOTE": "Add contact note", + "EXPAND": "Expand", + "COLLAPSE": "Collapse", + "NO_NOTES": "No notes, you can add notes from the contact details page.", + "EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "No contacts found in this account", + "SUBTITLE": "Start adding new contacts by clicking on the button below", + "BUTTON_LABEL": "Add contact", + "SEARCH_EMPTY_STATE_TITLE": "No contacts matches your search 🔍", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Assign Labels", + "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "Padamkan", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Delete contact" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "View", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "To:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Subject :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "Bcc:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "Bcc" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Write your message here..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Variables", + "BACK": "Go back", + "SEND_MESSAGE": "Send message" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Go back", + "SEND_MESSAGE": "Send message" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/contactFilters.json b/app/javascript/dashboard/i18n/locale/ms/contactFilters.json new file mode 100644 index 0000000..8bf0cb5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filter Contacts", + "SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.", + "EDIT_CUSTOM_SEGMENT": "Edit Segment", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your segment.", + "ADD_NEW_FILTER": "Tambahan Tapisan", + "CLEAR_ALL_FILTERS": "Clear All Filters", + "FILTER_DELETE_ERROR": "Kamu perlukan sekurang-kurangnya satu tapisan untuk simpan tetapan", + "SUBMIT_BUTTON_LABEL": "Submit", + "UPDATE_BUTTON_LABEL": "Update Segment", + "CANCEL_BUTTON_LABEL": "Batalkan", + "CLEAR_BUTTON_LABEL": "Kosongkan tapisan", + "EMPTY_VALUE_ERROR": "Nilai diperlukan", + "SEGMENT_LABEL": "Segment Name", + "SEGMENT_QUERY_LABEL": "Segment Query", + "TOOLTIP_LABEL": "Filter contacts", + "QUERY_DROPDOWN_LABELS": { + "AND": "DAN", + "OR": "ATAU" + }, + "OPERATOR_LABELS": { + "equal_to": "Sama dengan", + "not_equal_to": "Tak sama dengan", + "contains": "Mengandungi", + "does_not_contain": "Tidak mengandungi", + "is_present": "Sedia ada", + "is_not_present": "Tidak sedia ada", + "is_greater_than": "Adalah lebih besar", + "is_lesser_than": "Is lesser than", + "days_before": "Adalah x hari sebelum" + }, + "ERRORS": { + "VALUE_REQUIRED": "Nilai diperlukan" + }, + "ATTRIBUTES": { + "NAME": "Nama", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "CITY": "City", + "COUNTRY": "Country", + "CUSTOM_ATTRIBUTE_LIST": "Senarai", + "CUSTOM_ATTRIBUTE_TEXT": "Teks", + "CUSTOM_ATTRIBUTE_NUMBER": "Nombor", + "CUSTOM_ATTRIBUTE_LINK": "Pautan", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Kotak Semak", + "CREATED_AT": "Dicipta Pada", + "LAST_ACTIVITY": "Last Activity", + "REFERER_LINK": "Referrer link", + "BLOCKED": "Blocked", + "LABELS": "Labels" + }, + "GROUPS": { + "STANDARD_FILTERS": "Penapis Standard", + "ADDITIONAL_FILTERS": "Penapis Tambahan", + "CUSTOM_ATTRIBUTES": "Custom Attributes" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/contentTemplates.json b/app/javascript/dashboard/i18n/locale/ms/contentTemplates.json new file mode 100644 index 0000000..68b6b10 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "NO_CONTENT": "No content", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Teks" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Back", + "SEND_MESSAGE_BUTTON": "Send Message" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/conversation.json b/app/javascript/dashboard/i18n/locale/ms/conversation.json new file mode 100644 index 0000000..11c3476 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Please select a conversation from left pane", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", + "404": "Sorry, we cannot find the conversation. Please try again", + "SWITCH_VIEW_LAYOUT": "Switch the layout", + "DASHBOARD_APP_TAB_MESSAGES": "Messages", + "UNVERIFIED_SESSION": "The identity of this user is not verified", + "NO_MESSAGE_1": "Uh oh! Looks like there are no messages from customers in your inbox.", + "NO_MESSAGE_2": " to send a message to your page!", + "NO_INBOX_1": "Hola! Looks like you haven't added any inboxes yet.", + "NO_INBOX_2": " to get started", + "NO_INBOX_AGENT": "Uh Oh! Looks like you are not part of any inbox. Please contact your administrator", + "SEARCH_MESSAGES": "Search for messages in conversations", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "to open command menu", + "KEYBOARD_SHORTCUTS": "to view keyboard shortcuts" + }, + "SEARCH": { + "TITLE": "Search messages", + "RESULT_TITLE": "Search Results", + "LOADING_MESSAGE": "Crunching data...", + "PLACEHOLDER": "Type any text to search messages", + "NO_MATCHING_RESULTS": "No results found." + }, + "UNREAD_MESSAGES": "Unread Messages", + "UNREAD_MESSAGE": "Unread Message", + "CLICK_HERE": "Click here", + "LOADING_INBOXES": "Loading inboxes", + "LOADING_CONVERSATIONS": "Loading Conversations", + "CANNOT_REPLY": "You cannot reply due to", + "24_HOURS_WINDOW": "24 hour message window restriction", + "48_HOURS_WINDOW": "48 hour message window restriction", + "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours", + "NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?", + "ASSIGN_TO_ME": "Assign to me", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hour message window restriction", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "You are replying to:", + "REMOVE_SELECTION": "Remove Selection", + "DOWNLOAD": "Download", + "UNKNOWN_FILE_TYPE": "Unknown File", + "SAVE_CONTACT": "Save Contact", + "NO_CONTENT": "No content to display", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} has shared a contact", + "LOCATION": "{sender} has shared a location", + "FILE": "{sender} has shared a file", + "MEETING": "{sender} has started a meeting" + }, + "UPLOADING_ATTACHMENTS": "Uploading attachments...", + "REPLIED_TO_STORY": "Replied to your story", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", + "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", + "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", + "NO_RESPONSE": "No response", + "RESPONSE": "Response", + "RATING_TITLE": "Rating", + "FEEDBACK_TITLE": "Feedback", + "REPLY_MESSAGE_NOT_FOUND": "Message not available", + "CARD": { + "SHOW_LABELS": "Show labels", + "HIDE_LABELS": "Hide labels" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "Resolve", + "REOPEN_ACTION": "Reopen", + "OPEN_ACTION": "Open", + "MORE_ACTIONS": "More actions", + "OPEN": "More", + "CLOSE": "Close", + "DETAILS": "details", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", + "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "missed", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Mark as pending", + "SNOOZE_UNTIL": "Snooze", + "SNOOZE": { + "TITLE": "Snooze until", + "NEXT_REPLY": "Next reply", + "TOMORROW": "Tomorrow", + "NEXT_WEEK": "Next week" + } + }, + "MENTION": { + "AGENTS": "Ejen", + "TEAMS": "Teams" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Snooze until", + "APPLY": "Snooze", + "CANCEL": "Batalkan" + }, + "PRIORITY": { + "TITLE": "Priority", + "OPTIONS": { + "NONE": "Tiada", + "URGENT": "Urgent", + "HIGH": "High", + "MEDIUM": "Medium", + "LOW": "Low" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "Tiada", + "INPUT_PLACEHOLDER": "Select priority", + "NO_RESULTS": "Tiada dijumpa", + "SUCCESSFUL": "Changed priority of conversation id {conversationId} to {priority}", + "FAILED": "Couldn't change priority. Please try again." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Delete conversation #{conversationId}", + "DESCRIPTION": "Are you sure you want to delete this conversation?", + "CONFIRM": "Padamkan" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Mark as pending", + "RESOLVED": "Mark as resolved", + "MARK_AS_UNREAD": "Mark as unread", + "MARK_AS_READ": "Mark as read", + "REOPEN": "Reopen conversation", + "SNOOZE": { + "TITLE": "Snooze", + "NEXT_REPLY": "Until next reply", + "TOMORROW": "Until tomorrow", + "NEXT_WEEK": "Until next week" + }, + "ASSIGN_AGENT": "Assign agent", + "ASSIGN_LABEL": "Assign label", + "AGENTS_LOADING": "Loading agents...", + "ASSIGN_TEAM": "Assign team", + "DELETE": "Delete conversation", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Conversation id {conversationId} assigned to \"{agentName}\"", + "FAILED": "Couldn't assign agent. Please try again." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Couldn't assign label. Please try again." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Assigned team \"{team}\" to conversation id {conversationId}", + "FAILED": "Couldn't assign team. Please try again." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Message signature", + "ENABLE_SIGN_TOOLTIP": "Enable signature", + "DISABLE_SIGN_TOOLTIP": "Disable signature", + "MSG_INPUT": "Shift + enter for new line. Start with '/' to select a Canned Response.", + "PRIVATE_MSG_INPUT": "Shift + enter for new line. This will be visible only to Agents", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.", + "CLICK_HERE": "Click here to update", + "WHATSAPP_TEMPLATES": "Whatsapp Templates" + }, + "REPLYBOX": { + "REPLY": "Reply", + "PRIVATE_NOTE": "Private Note", + "SEND": "Send", + "CREATE": "Add Note", + "INSERT_READ_MORE": "Read more", + "DISMISS_REPLY": "Dismiss reply", + "REPLYING_TO": "Replying to:", + "TIP_EMOJI_ICON": "Show emoji selector", + "TIP_ATTACH_ICON": "Attach files", + "TIP_AUDIORECORDER_ICON": "Record audio", + "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", + "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "DRAG_DROP": "Drag and drop here to attach", + "START_AUDIO_RECORDING": "Start audio recording", + "STOP_AUDIO_RECORDING": "Stop audio recording", + "": "", + "EMAIL_HEAD": { + "TO": "TO", + "ADD_BCC": "Add bcc", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + }, + "BCC": { + "LABEL": "BCC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Undefined variables", + "MESSAGE": "You have {undefinedVariablesCount} undefined variables in your message: {undefinedVariables}. Would you like to send the message anyway?", + "CONFIRM": { + "YES": "Send", + "CANCEL": "Batalkan" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "Private Note: Only visible to you and your team", + "CHANGE_STATUS": "Conversation status changed", + "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_AGENT": "Conversation Assignee changed", + "CHANGE_AGENT_FAILED": "Assignee change failed", + "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", + "ASSIGN_LABEL_FAILED": "Label assignment failed", + "CHANGE_TEAM": "Conversation team changed", + "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", + "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", + "MESSAGE_ERROR": "Unable to send this message, please try again later", + "SENT_BY": "Sent by:", + "BOT": "Bot", + "SEND_FAILED": "Couldn't send message! Try again", + "TRY_AGAIN": "retry", + "ASSIGNMENT": { + "SELECT_AGENT": "Select Agent", + "REMOVE": "Remove", + "ASSIGN": "Assign" + }, + "CONTEXT_MENU": { + "COPY": "Copy", + "REPLY_TO": "Reply to this message", + "DELETE": "Padamkan", + "CREATE_A_CANNED_RESPONSE": "Add to canned responses", + "TRANSLATE": "Translate", + "COPY_PERMALINK": "Copy link to the message", + "LINK_COPIED": "Message URL copied to the clipboard", + "DELETE_CONFIRMATION": { + "TITLE": "Are you sure you want to delete this message?", + "MESSAGE": "You cannot undo this action", + "DELETE": "Padamkan", + "CANCEL": "Batalkan" + } + }, + "SIDEBAR": { + "CONTACT": "Contact", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Send conversation transcript", + "DESC": "Send a copy of the conversation transcript to the specified email address", + "SUBMIT": "Submit", + "CANCEL": "Batalkan", + "SEND_EMAIL_SUCCESS": "The chat transcript was sent successfully", + "SEND_EMAIL_ERROR": "There was an error, please try again", + "FORM": { + "SEND_TO_CONTACT": "Send the transcript to the customer", + "SEND_TO_AGENT": "Send the transcript to the assigned agent", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Send the transcript to another email address", + "EMAIL": { + "PLACEHOLDER": "Enter an email address", + "ERROR": "Please enter a valid email address" + } + } + }, + "ONBOARDING": { + "TITLE": "Hey 👋, Welcome to {installationName}!", + "DESCRIPTION": "Thanks for signing up. We want you to get the most out of {installationName}. Here are a few things you can do in {installationName} to make the experience delightful.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "Read our latest updates", + "ALL_CONVERSATION": { + "TITLE": "All your conversations in one place", + "DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status.", + "NEW_LINK": "Click here to create an inbox" + }, + "TEAM_MEMBERS": { + "TITLE": "Invite your team members", + "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.", + "NEW_LINK": "Click here to invite a team member" + }, + "LABELS": { + "TITLE": "Organize conversations with labels", + "DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.", + "NEW_LINK": "Click here to create tags" + }, + "CANNED_RESPONSES": { + "TITLE": "Create canned responses", + "DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.", + "NEW_LINK": "Click here to create a canned response" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Assigned Agent", + "SELF_ASSIGN": "Assign to me", + "TEAM_LABEL": "Assigned Team", + "SELECT": { + "PLACEHOLDER": "None" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Contact Details", + "CONVERSATION_ACTIONS": "Conversation Actions", + "CONVERSATION_LABELS": "Conversation Labels", + "CONVERSATION_INFO": "Conversation Information", + "CONTACT_NOTES": "Contact Notes", + "CONTACT_ATTRIBUTES": "Contact Attributes", + "PREVIOUS_CONVERSATION": "Previous Conversations", + "MACROS": "Macros", + "LINEAR_ISSUES": "Linked Linear Issues", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "Pending", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Create attribute", + "NO_RECORDS_FOUND": "No attributes found", + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "ADD": { + "TITLE": "Add", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + } + }, + "EMAIL_HEADER": { + "FROM": "From", + "TO": "To", + "BCC": "Bcc", + "CC": "Cc", + "SUBJECT": "Subject", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Participating", + "SIDEBAR_TITLE": "Conversation participants", + "NO_RECORDS_FOUND": "Tiada dijumpa", + "ADD_PARTICIPANTS": "Select participants", + "REMANING_PARTICIPANTS_TEXT": "+{count} others", + "REMANING_PARTICIPANT_TEXT": "+{count} other", + "TOTAL_PARTICIPANTS_TEXT": "{count} people are participating.", + "TOTAL_PARTICIPANT_TEXT": "{count} person is participating.", + "NO_PARTICIPANTS_TEXT": "No one is participating!.", + "WATCH_CONVERSATION": "Join conversation", + "YOU_ARE_WATCHING": "You are participating", + "API": { + "ERROR_MESSAGE": "Could not update, try again!", + "SUCCESS_MESSAGE": "Participants updated!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "View translated content", + "DESC": "You can view the translated content in each langauge.", + "ORIGINAL_CONTENT": "Original Content", + "TRANSLATED_CONTENT": "Translated Content", + "NO_TRANSLATIONS_AVAILABLE": "No translations are available for this content" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/csatMgmt.json b/app/javascript/dashboard/i18n/locale/ms/csatMgmt.json new file mode 100644 index 0000000..9e16dc2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Rate your conversation", + "PLACEHOLDER": "Tell us more...", + "RATINGS": { + "POOR": "😞 Poor", + "FAIR": "😑 Fair", + "AVERAGE": "😐 Average", + "GOOD": "😀 Good", + "EXCELLENT": "😍 Excellent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/customRole.json b/app/javascript/dashboard/i18n/locale/ms/customRole.json new file mode 100644 index 0000000..207363a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Custom Roles", + "LEARN_MORE": "Learn more about custom roles", + "DESCRIPTION": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "HEADER_BTN_TXT": "Add custom role", + "LOADING": "Fetching custom roles...", + "SEARCH_404": "There are no items matching this query.", + "PAYWALL": { + "TITLE": "Upgrade to create custom roles", + "AVAILABLE_ON": "The custom role feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The custom role feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Manage custom roles", + "DESC": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "TABLE_HEADER": { + "NAME": "Nama", + "DESCRIPTION": "Description", + "PERMISSIONS": "Permissions", + "ACTIONS": "Tindakan-tindakan" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "Nama diperlukan." + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "Description is required." + }, + "PERMISSIONS": { + "LABEL": "Permissions", + "ERROR": "Permissions are required." + }, + "CANCEL_BUTTON_TEXT": "Batalkan", + "API": { + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" + } + }, + "ADD": { + "TITLE": "Add custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Submit", + "API": { + "SUCCESS_MESSAGE": "Custom role added successfully." + } + }, + "EDIT": { + "BUTTON_TEXT": "Edit", + "TITLE": "Edit custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Update", + "API": { + "SUCCESS_MESSAGE": "Custom role updated successfully." + } + }, + "DELETE": { + "BUTTON_TEXT": "Padamkan", + "API": { + "SUCCESS_MESSAGE": "Custom role deleted successfully.", + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Adakan anda pasti untuk padamkan ", + "YES": "Yes, delete ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/datePicker.json b/app/javascript/dashboard/i18n/locale/ms/datePicker.json new file mode 100644 index 0000000..c7ef068 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Apply", + "CLEAR_BUTTON": "Clear", + "DATE_RANGE_INPUT": { + "START": "Start Date", + "END": "End Date" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "DATE RANGE", + "LAST_7_DAYS": "Last 7 days", + "LAST_30_DAYS": "Last 30 days", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_RANGE": "Custom date range" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/emoji.json b/app/javascript/dashboard/i18n/locale/ms/emoji.json new file mode 100644 index 0000000..d5b96f0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Search emojis", + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/general.json b/app/javascript/dashboard/i18n/locale/ms/general.json new file mode 100644 index 0000000..2998bcd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Showing {firstIndex}-{lastIndex} of {totalCount} items", + "PHONE_INPUT": { + "PLACEHOLDER": "Search", + "EMPTY_STATE": "Tiada dijumpa" + }, + "CLOSE": "Close", + "BETA": "Beta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/generalSettings.json b/app/javascript/dashboard/i18n/locale/ms/generalSettings.json new file mode 100644 index 0000000..5b62bba --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.", + "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.", + "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.", + "NON_ADMIN": "Please contact your administrator to upgrade the plan and continue using all features." + }, + "TITLE": "Account settings", + "SUBMIT": "Update settings", + "BACK": "Back", + "DISMISS": "Dismiss", + "UPDATE": { + "ERROR": "Could not update settings, try again!", + "SUCCESS": "Successfully updated account settings" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Delete your Account", + "NOTE": "Once you delete your account, all your data will be deleted.", + "BUTTON_TEXT": "Delete Your Account", + "CONFIRM": { + "TITLE": "Delete Account", + "MESSAGE": "Deleting your Account is irreversible. Enter your account name below to confirm you want to permanently delete it.", + "BUTTON_TEXT": "Padamkan", + "DISMISS": "Batalkan", + "PLACE_HOLDER": "Please type {accountName} to confirm" + }, + "SUCCESS": "Account marked for deletion", + "FAILURE": "Could not delete account, try again!", + "SCHEDULED_DELETION": { + "TITLE": "Account Scheduled for Deletion", + "MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.", + "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.", + "CLEAR_BUTTON": "Cancel Scheduled Deletion" + } + }, + "FORM": { + "ERROR": "Please fix form errors", + "GENERAL_SECTION": { + "TITLE": "General settings", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "Account ID", + "NOTE": "This ID is required if you are building an API based integration" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.", + "DURATION": { + "LABEL": "Inactivity duration", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Preferences", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "Account name", + "PLACEHOLDER": "Your account name", + "ERROR": "Please enter a valid account name" + }, + "LANGUAGE": { + "LABEL": "Site language", + "PLACEHOLDER": "Your account name", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Incoming Email Domain", + "PLACEHOLDER": "The domain where you will receive the emails", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "Support Email", + "PLACEHOLDER": "Your company's support email", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclude unattended conversations", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a conversation should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "Update", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "Conversation continuity with emails is enabled for your account.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "You can receive emails in your custom domain now." + } + }, + "UPDATE_CHATWOOT": "An update {latestChatwootVersion} for Chatwoot is available. Please update your instance.", + "LEARN_MORE": "Learn more", + "PAYMENT_PENDING": "Your payment is pending. Please update your payment information to continue using Chatwoot", + "UPGRADE": "Upgrade to continue using Chatwoot", + "LIMITS_UPGRADE": "Your account has exceeded the usage limits, please upgrade your plan to continue using Chatwoot", + "OPEN_BILLING": "Open billing" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Press enter to select", + "ENTER_TO_REMOVE": "Press enter to remove", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "Select one", + "SELECT": "Select" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Notifications", + "MARK_ALL_DONE": "Mark All Done", + "DELETE_TITLE": "deleted", + "UNREAD_NOTIFICATION": { + "TITLE": "Unread Notifications", + "ALL_NOTIFICATIONS": "View all notifications", + "LOADING_UNREAD_MESSAGE": "Loading unread notifications...", + "EMPTY_MESSAGE": "You have no unread notifications" + }, + "LIST": { + "LOADING_MESSAGE": "Loading notifications...", + "404": "No Notifications", + "TABLE_HEADER": [ + "Nama", + "Phone Number", + "Conversations", + "Last Contacted" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "New conversation", + "conversation_assignment": "Conversation Assigned", + "assigned_conversation_new_message": "New Message", + "participating_conversation_new_message": "New Message", + "conversation_mention": "Mention", + "sla_missed_first_response": "SLA Missed", + "sla_missed_next_response": "SLA Missed", + "sla_missed_resolution": "SLA Missed" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Offline", + "RECONNECTING": "Reconnecting...", + "RECONNECT_SUCCESS": "Reconnected" + }, + "BUTTON": { + "REFRESH": "Refresh" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Search or jump to", + "SECTIONS": { + "GENERAL": "General", + "REPORTS": "Reports", + "CONVERSATION": "Conversation", + "BULK_ACTIONS": "Bulk Actions", + "CHANGE_ASSIGNEE": "Change Assignee", + "CHANGE_PRIORITY": "Change Priority", + "CHANGE_TEAM": "Change Team", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "ADD_LABEL": "Add label to the conversation", + "REMOVE_LABEL": "Remove label from the conversation", + "SETTINGS": "Settings", + "AI_ASSIST": "AI Assist", + "APPEARANCE": "Appearance", + "SNOOZE_NOTIFICATION": "Snooze Notification" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview", + "GO_TO_CONVERSATION_REPORTS": "Go to Conversation Reports", + "GO_TO_AGENT_REPORTS": "Go to Agent Reports", + "GO_TO_LABEL_REPORTS": "Go to Label Reports", + "GO_TO_INBOX_REPORTS": "Go to Inbox Reports", + "GO_TO_TEAM_REPORTS": "Go to Team Reports", + "GO_TO_SETTINGS_AGENTS": "Go to Agent Settings", + "GO_TO_SETTINGS_TEAMS": "Go to Team Settings", + "GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings", + "GO_TO_SETTINGS_LABELS": "Go to Label Settings", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings", + "GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings", + "GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings", + "GO_TO_SETTINGS_PROFILE": "Go to Profile Settings", + "GO_TO_NOTIFICATIONS": "Go to Notifications", + "ADD_LABELS_TO_CONVERSATION": "Add label to the conversation", + "ASSIGN_AN_AGENT": "Assign an agent", + "AI_ASSIST": "AI Assist", + "ASSIGN_PRIORITY": "Assign priority", + "ASSIGN_A_TEAM": "Assign a team", + "MUTE_CONVERSATION": "Mute conversation", + "UNMUTE_CONVERSATION": "Unmute conversation", + "REMOVE_LABEL_FROM_CONVERSATION": "Remove label from the conversation", + "REOPEN_CONVERSATION": "Reopen conversation", + "RESOLVE_CONVERSATION": "Resolve conversation", + "SEND_TRANSCRIPT": "Send an email transcript", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "UNTIL_NEXT_REPLY": "Until next reply", + "UNTIL_NEXT_WEEK": "Until next week", + "UNTIL_TOMORROW": "Until tomorrow", + "UNTIL_NEXT_MONTH": "Until next month", + "AN_HOUR_FROM_NOW": "Until an hour from now", + "UNTIL_CUSTOM_TIME": "Custom...", + "CHANGE_APPEARANCE": "Change Appearance", + "LIGHT_MODE": "Light", + "DARK_MODE": "Dark", + "SYSTEM_MODE": "System", + "SNOOZE_NOTIFICATION": "Snooze Notification" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Loading Dashboard App..." + }, + "COMMON": { + "OR": "Or", + "CLICK_HERE": "click here" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/helpCenter.json b/app/javascript/dashboard/i18n/locale/ms/helpCenter.json new file mode 100644 index 0000000..81674aa --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Help Center", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "Create Portal" + }, + "HEADER": { + "FILTER": "Filter by", + "SORT": "Sort by", + "LOCALE": "Locale", + "SETTINGS_BUTTON": "Settings", + "NEW_BUTTON": "New Article", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Published", + "DRAFT": "Draft", + "ARCHIVED": "Archived" + }, + "TITLES": { + "ALL_ARTICLES": "All Articles", + "MINE": "My Articles", + "DRAFT": "Draft Articles", + "ARCHIVED": "Archived Articles" + }, + "LOCALE_SELECT": { + "TITLE": "Select locale", + "PLACEHOLDER": "Select locale", + "NO_RESULT": "No locale found", + "SEARCH_PLACEHOLDER": "Search locale" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "All Articles", + "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", + "PREVIEW": "Preview", + "ADD_TRANSLATION": "Add translation", + "OPEN_SIDEBAR": "Open sidebar", + "CLOSE_SIDEBAR": "Close sidebar", + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Upload image", + "UPLOADING": "Uploading...", + "SUCCESS": "Image uploaded successfully", + "ERROR": "Error while uploading image", + "UN_AUTHORIZED_ERROR": "You are not authorized to upload images", + "ERROR_FILE_SIZE": "Image size should be less than {size}MB", + "ERROR_FILE_FORMAT": "Image format should be jpg, jpeg or png", + "ERROR_FILE_DIMENSIONS": "Image dimensions should be less than 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Article Settings", + "FORM": { + "CATEGORY": { + "LABEL": "Category", + "TITLE": "Select category", + "PLACEHOLDER": "Select category", + "NO_RESULT": "No category found", + "SEARCH_PLACEHOLDER": "Search category" + }, + "AUTHOR": { + "LABEL": "Author", + "TITLE": "Select author", + "PLACEHOLDER": "Select author", + "NO_RESULT": "No authors found", + "SEARCH_PLACEHOLDER": "Search author" + }, + "META_TITLE": { + "LABEL": "Meta title", + "PLACEHOLDER": "Add a meta title" + }, + "META_DESCRIPTION": { + "LABEL": "Meta description", + "PLACEHOLDER": "Add your meta description for better SEO results..." + }, + "META_TAGS": { + "LABEL": "Meta tags", + "PLACEHOLDER": "Add meta tags separated by comma..." + } + }, + "BUTTONS": { + "ARCHIVE": "Archive article", + "DELETE": "Delete article" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Uncategorized", + "SEARCH_RESULTS": "Search results for {query}", + "EMPTY_TEXT": "Search for articles to insert into replies.", + "SEARCH_LOADER": "Searching...", + "INSERT_ARTICLE": "Insert", + "NO_RESULT": "No articles found", + "COPY_LINK": "Copy article link to clipboard", + "OPEN_LINK": "Open article in new tab", + "PREVIEW_LINK": "Preview article" + }, + "PORTAL": { + "HEADER": "Portals", + "DEFAULT": "Default", + "NEW_BUTTON": "New Portal", + "ACTIVE_BADGE": "active", + "CHOOSE_LOCALE_LABEL": "Choose a locale", + "LOADING_MESSAGE": "Loading portals...", + "ARTICLES_LABEL": "articles", + "NO_PORTALS_MESSAGE": "There are no available portals", + "ADD_NEW_LOCALE": "Add a new locale", + "POPOVER": { + "TITLE": "Portals", + "PORTAL_SETTINGS": "Portal settings", + "SUBTITLE": "You have multiple portals and can have different locales for each portal.", + "CANCEL_BUTTON_LABEL": "Batalkan", + "CHOOSE_LOCALE_BUTTON": "Choose Locale" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "articles", + "ADD": "Add locale", + "VISIT": "Visit site", + "SETTINGS": "Settings", + "DELETE": "Padamkan" + }, + "PORTAL_CONFIG": { + "TITLE": "Portal Configurations", + "ITEMS": { + "NAME": "Nama", + "DOMAIN": "Custom domain", + "SLUG": "Slug", + "TITLE": "Portal title", + "THEME": "Theme color", + "SUB_TEXT": "Portal sub text" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Available locales", + "TABLE": { + "NAME": "Locale name", + "CODE": "Locale code", + "ARTICLE_COUNT": "No. of articles", + "CATEGORIES": "No. of categories", + "SWAP": "Swap", + "DELETE": "Padamkan", + "DEFAULT_LOCALE": "Default" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Nama", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Help center information", + "BODY": "Basic information about portal" + }, + "CUSTOMIZATION": { + "TITLE": "Help center customization", + "BODY": "Customize portal" + }, + "FINISH": { + "TITLE": "Voila! 🎉", + "BODY": "You're all set!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Back", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Create Portal", + "TITLE": "Help center information", + "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Portal customisation", + "TITLE": "Help center customization", + "UPDATE_PORTAL_BUTTON": "Update portal settings" + }, + "FINISH_PAGE": { + "TITLE": "Voila!🎉 You're all set up!", + "MESSAGE": "You can now see this created portal on your all portals page.", + "FINISH": "Go to all portals page" + } + }, + "LOGO": { + "LABEL": "Logo", + "UPLOAD_BUTTON": "Upload logo", + "HELP_TEXT": "This logo will be displayed on the portal header.", + "IMAGE_UPLOAD_SUCCESS": "Logo uploaded successfully", + "IMAGE_UPLOAD_ERROR": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Error while deleting logo" + }, + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "Portal name", + "HELP_TEXT": "The name will be used in the public facing portal internally.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug for urls", + "ERROR": "Slug is required" + }, + "DOMAIN": { + "LABEL": "Custom Domain", + "PLACEHOLDER": "Portal custom domain", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}", + "ERROR": "Enter a valid domain URL" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home Page Link", + "PLACEHOLDER": "Portal home page link", + "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}", + "ERROR": "Enter a valid home page URL" + }, + "THEME_COLOR": { + "LABEL": "Portal theme color", + "HELP_TEXT": "This color will show as the theme color for the portal." + }, + "PAGE_TITLE": { + "LABEL": "Page Title", + "PLACEHOLDER": "Portal page title", + "HELP_TEXT": "The page title will be used in the public facing portal.", + "ERROR": "Page title is required" + }, + "HEADER_TEXT": { + "LABEL": "Header Text", + "PLACEHOLDER": "Portal header text", + "HELP_TEXT": "The Portal header text will be used in the public facing portal.", + "ERROR": "Portal header text is required" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", + "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", + "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Loading articles...", + "404": "No articles matches your search 🔍", + "NO_ARTICLES": "There are no available articles", + "HEADERS": { + "TITLE": "Title", + "CATEGORY": "Category", + "READ_COUNT": "Views", + "STATUS": "Status", + "LAST_EDITED": "Last edited" + }, + "COLUMNS": { + "BY": "by", + "AUTHOR_NOT_AVAILABLE": "Author is not available" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Loading article...", + "TITLE_PLACEHOLDER": "Article title goes here", + "CONTENT_PLACEHOLDER": "Write your article here", + "API": { + "ERROR": "Error while saving article" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article published successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Error while drafting article", + "SUCCESS": "Article drafted successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Pasti Padamkan", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Yes, Delete", + "NO": "No, Keep it" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Search for articles" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Create a category", + "SUB_TITLE": "The category will be used in the public facing portal to categorize articles.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Create category", + "CANCEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Search articles", + "PLACEHOLDER": "Search articles", + "NO_RESULT": "No articles found", + "SEARCHING": "Searching...", + "SEARCH_BUTTON": "Search", + "INSERT_ARTICLE": "Insert link", + "IFRAME_ERROR": "URL is empty or invalid. Unable to display content.", + "OPEN_ARTICLE_SEARCH": "Insert article from Help Center", + "SUCCESS_ARTICLE_INSERTED": "Article inserted successfully", + "PREVIEW_LINK": "Preview article", + "CANCEL": "Close", + "BACK": "Back", + "BACK_RESULTS": "Back to results" + }, + "UPGRADE_PAGE": { + "TITLE": "Help Center", + "DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Upgrade your subscription to enable this feature.", + "SELF_HOSTED_DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Please contact your administrator to enable this feature.", + "BUTTON": { + "LEARN_MORE": "Learn more", + "UPGRADE": "Upgrade" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Multiple portals", + "DESCRIPTION": "Create multiple help center portals for different products using the same account." + }, + "LOCALES": { + "TITLE": "Full support for locales", + "DESCRIPTION": "Localize the portal in your language. We support all locales and allow translations for every article." + }, + "SEO": { + "TITLE": "SEO-friendly design", + "DESCRIPTION": "Customize your meta tags to improve your visibility on search engines with our SEO-friendly pages." + }, + "API": { + "TITLE": "Full API support", + "DESCRIPTION": "Use the portal as a headless CMS with third party front-end frameworks using our APIs." + } + } + }, + "LOADING": "Loading...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} view | {count} views", + "DROPDOWN_MENU": { + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "DELETE": "Padamkan" + }, + "STATUS": { + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "UNCATEGORISED": "Uncategorised" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "All articles", + "MINE": "Mine", + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "ALL": "All categories" + }, + "LOCALE": { + "ALL": "All locales" + }, + "NEW_ARTICLE": "New article" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Write an article", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "New article" + }, + "MINE": { + "TITLE": "You haven't written any articles here", + "SUBTITLE": "All articles written by you show up here for quick access." + }, + "DRAFT": { + "TITLE": "There are no articles in drafts", + "SUBTITLE": "Draft articles will appear here" + }, + "PUBLISHED": { + "TITLE": "There are no published articles", + "SUBTITLE": "Published articles will appear here" + }, + "ARCHIVED": { + "TITLE": "There are no articles in the archive", + "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages" + }, + "CATEGORY": { + "TITLE": "There are no articles in this category", + "SUBTITLE": "Articles in this category will appear here" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "New category", + "EDIT_CATEGORY": "Edit category", + "CATEGORIES_COUNT": "{n} category | {n} categories", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categories ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "No categories found", + "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + }, + "HEADER": { + "CREATE": "Create category", + "EDIT": "Edit category", + "DESCRIPTION": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale" + }, + "FORM": { + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "Category name", + "ERROR": "Nama diperlukan" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "ERROR": "Slug is required", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + } + }, + "BUTTONS": { + "CREATE": "Create", + "EDIT": "Update", + "CANCEL": "Batalkan" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "No locales available | {n} locale | {n} locales", + "NEW_LOCALE_BUTTON_TEXT": "New locale", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles", + "CATEGORIES_COUNT": "{count} category | {count} categories", + "DEFAULT": "Default", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Make default", + "DELETE": "Padamkan" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Add a new locale", + "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", + "COMBOBOX": { + "PLACEHOLDER": "Select locale..." + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "PREVIEW": "Preview", + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "BACK_TO_ARTICLES": "Back to articles" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "More properties", + "UNCATEGORIZED": "Uncategorized", + "EDITOR_PLACEHOLDER": "Write something..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Article properties", + "META_DESCRIPTION": "Meta description", + "META_DESCRIPTION_PLACEHOLDER": "Add meta description", + "META_TITLE": "Meta title", + "META_TITLE_PLACEHOLDER": "Add meta title", + "META_TAGS": "Meta tags", + "META_TAGS_PLACEHOLDER": "Add meta tags" + }, + "API": { + "ERROR": "Error while saving article" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "New portal", + "PORTALS": "Portals", + "CREATE_PORTAL": "Create and manage multiple portals", + "ARTICLES": "articles", + "DOMAIN": "domain", + "PORTAL_NAME": "Portal name" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Create new portal", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "Create", + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "User Guide | Chatwoot", + "MESSAGE": "Choose an name for your portal.", + "ERROR": "Nama diperlukan" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Slug is required", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logo", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo", + "IMAGE_DELETE_SUCCESS": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Unable to delete logo", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "Portal name", + "ERROR": "Nama diperlukan" + }, + "HEADER_TEXT": { + "LABEL": "Header text", + "PLACEHOLDER": "Portal header text" + }, + "PAGE_TITLE": { + "LABEL": "Page title", + "PLACEHOLDER": "Portal page title" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home page link", + "PLACEHOLDER": "Portal home page link", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Live chat widget", + "PLACEHOLDER": "Select live chat widget", + "HELP_TEXT": "Select a live chat widget that will appear on your help center", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Brand color" + }, + "SAVE_CHANGES": "Save changes" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Custom domain", + "LABEL": "Custom domain:", + "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Portal custom domain", + "EDIT_BUTTON": "Edit", + "ADD_BUTTON": "Add custom domain", + "STATUS": { + "LIVE": "Live", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Add custom domain", + "EDIT_HEADER": "Edit custom domain", + "ADD_CONFIRM_BUTTON_LABEL": "Add domain", + "EDIT_CONFIRM_BUTTON_LABEL": "Update domain", + "LABEL": "Custom domain", + "PLACEHOLDER": "Portal custom domain", + "ERROR": "Custom domain is required", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS configuration", + "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "Send" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Delete {portalName}", + "HEADER": "Delete portal", + "DESCRIPTION": "Permanently delete this portal. This action is irreversible", + "DIALOG": { + "HEADER": "Sure you want to delete {portalName}?", + "DESCRIPTION": "This is a permanent action that cannot be reversed.", + "CONFIRM_BUTTON_LABEL": "Padamkan" + } + }, + "EDIT_CONFIGURATION": "Edit configuration" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal created successfully", + "ERROR_MESSAGE": "Unable to create portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal updated successfully", + "ERROR_MESSAGE": "Unable to update portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "Uploading...", + "UPLOAD": "Upload & Process", + "CANCEL": "Batalkan", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Generating...", + "CONFIRM_DELETE": "Are you sure you want to delete {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Completed", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/inbox.json b/app/javascript/dashboard/i18n/locale/ms/inbox.json new file mode 100644 index 0000000..7bf5460 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "My Inbox", + "DISPLAY_DROPDOWN": "Display", + "LOADING": "Fetching notifications", + "404": "There are no active notifications in this group.", + "NO_NOTIFICATIONS": "No notifications", + "NOTE": "Notifications from all subscribed inboxes", + "NO_MESSAGES_AVAILABLE": "Oops! Not able to fetch messages", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week" + }, + "ACTION_HEADER": { + "SNOOZE": "Snooze notification", + "DELETE": "Delete notification", + "BACK": "Back" + }, + "TYPES": { + "CONVERSATION_MENTION": "You have been mentioned in a conversation", + "CONVERSATION_CREATION": "New conversation created", + "CONVERSATION_ASSIGNMENT": "A conversation has been assigned to you", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message in a conversation you are participating in", + "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation", + "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation", + "SLA_MISSED_RESOLUTION": "SLA target resolution missed for conversation" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Mentioned", + "CONVERSATION_ASSIGNMENT": "Assigned to you", + "CONVERSATION_CREATION": "New Conversation", + "SLA_MISSED_FIRST_RESPONSE": "SLA breach", + "SLA_MISSED_NEXT_RESPONSE": "SLA breach", + "SLA_MISSED_RESOLUTION": "SLA breach", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message", + "SNOOZED_UNTIL": "Snoozed for {time}", + "SNOOZED_ENDS": "Snooze ended" + }, + "NO_CONTENT": "No content available", + "MENU_ITEM": { + "MARK_AS_READ": "Mark as read", + "MARK_AS_UNREAD": "Mark as unread", + "SNOOZE": "Snooze", + "DELETE": "Padamkan", + "MARK_ALL_READ": "Mark all as read", + "DELETE_ALL": "Delete all", + "DELETE_ALL_READ": "Delete all read" + }, + "DISPLAY_MENU": { + "SORT": "Sort", + "DISPLAY": "Display :", + "SORT_OPTIONS": { + "NEWEST": "Newest", + "OLDEST": "Oldest", + "PRIORITY": "Priority" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Snoozed", + "READ": "Read", + "LABELS": "Label", + "CONVERSATION_ID": "Conversation ID" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notification marked as read", + "MARK_AS_UNREAD": "Notification marked as unread", + "SNOOZE": "Notification snoozed", + "DELETE": "Notification deleted", + "MARK_ALL_READ": "All notifications marked as read", + "DELETE_ALL": "All notifications deleted", + "DELETE_ALL_READ": "All read notifications deleted" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json new file mode 100644 index 0000000..5582442 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Inboxes", + "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.", + "LEARN_MORE": "Learn more about inboxes", + "RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.", + "CLICK_TO_RECONNECT": "Click here to reconnect.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "There are no inboxes attached to this account." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Choose Channel", + "BODY": "Choose the provider you want to integrate with Chatwoot." + }, + "INBOX": { + "TITLE": "Create Inbox", + "BODY": "Authenticate your account and create an inbox." + }, + "AGENT": { + "TITLE": "Add Agents", + "BODY": "Add agents to the created inbox." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "You are all set to go!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Enter your inbox name (eg: Acme Inc)", + "ERROR": "Please enter a valid inbox name" + }, + "WEBSITE_NAME": { + "LABEL": "Website Name", + "PLACEHOLDER": "Enter your website name (eg: Acme Inc)" + }, + "FB": { + "HELP": "PS: By signing in, we only get access to your Page's messages. Your private messages can never be accessed by Chatwoot.", + "CHOOSE_PAGE": "Choose Page", + "CHOOSE_PLACEHOLDER": "Select a page from the list", + "INBOX_NAME": "Inbox Name", + "ADD_NAME": "Add a name for your inbox", + "PICK_NAME": "Pick a Name for your Inbox", + "PICK_A_VALUE": "Pick a value", + "CREATE_INBOX": "Create Inbox" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continue with Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile", + "HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ", + "ERROR_MESSAGE": "There was an error connecting to Instagram, please try again", + "ERROR_AUTH": "There was an error connecting to Instagram, please try again", + "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "To add your Twitter profile as a channel, you need to authenticate your Twitter Profile by clicking on 'Sign in with Twitter' ", + "ERROR_MESSAGE": "There was an error connecting to Twitter, please try again", + "TWEETS": { + "ENABLE": "Create conversations from mentioned Tweets" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Website channel", + "DESC": "Create a channel for your website and start supporting your customers via our website widget.", + "LOADING_MESSAGE": "Creating Website Support Channel", + "CHANNEL_AVATAR": { + "LABEL": "Channel Avatar" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "Please enter your Webhook URL", + "ERROR": "Please enter a valid URL" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Website Domain", + "PLACEHOLDER": "Enter your website domain (eg: acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Welcome Heading", + "PLACEHOLDER": "Hi there !" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Welcome Tagline", + "PLACEHOLDER": "We make it simple to connect with us. Ask us anything, or share your feedback." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Channel greeting message", + "PLACEHOLDER": "Acme Inc typically replies in a few hours." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Enable channel greeting", + "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "REPLY_TIME": { + "TITLE": "Set Reply time", + "IN_A_FEW_MINUTES": "In a few minutes", + "IN_A_FEW_HOURS": "In a few hours", + "IN_A_DAY": "In a day", + "HELP_TEXT": "This reply time will be displayed on the live chat widget" + }, + "WIDGET_COLOR": { + "LABEL": "Widget Color", + "PLACEHOLDER": "Update the widget color used in widget" + }, + "SUBMIT_BUTTON": "Create inbox", + "API": { + "ERROR_MESSAGE": "We were not able to create a website channel, please try again" + } + }, + "TWILIO": { + "TITLE": "Twilio SMS/WhatsApp Channel", + "DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "Account SID", + "PLACEHOLDER": "Please enter your Twilio Account SID", + "ERROR": "This field is required" + }, + "API_KEY": { + "USE_API_KEY": "Use API Key Authentication", + "LABEL": "API Key SID", + "PLACEHOLDER": "Please enter your API Key SID", + "ERROR": "This field is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Please enter your API Key Secret", + "ERROR": "This field is required" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "Messaging Service SID", + "PLACEHOLDER": "Please enter your Twilio Messaging Service SID", + "ERROR": "This field is required", + "USE_MESSAGING_SERVICE": "Use a Twilio Messaging Service" + }, + "CHANNEL_TYPE": { + "LABEL": "Channel Type", + "ERROR": "Please select your Channel Type" + }, + "AUTH_TOKEN": { + "LABEL": "Auth Token", + "PLACEHOLDER": "Please enter your Twilio Auth Token", + "ERROR": "This field is required" + }, + "CHANNEL_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone Number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the message callback URL in Twilio with the URL mentioned here." + }, + "SUBMIT_BUTTON": "Create Twilio Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Twilio credentials, please try again" + } + }, + "SMS": { + "TITLE": "SMS Channel", + "DESC": "Start supporting your customers via SMS.", + "PROVIDERS": { + "LABEL": "API Provider", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandwidth" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the SMS channel" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "Account ID", + "PLACEHOLDER": "Please enter your Bandwidth Account ID", + "ERROR": "This field is required" + }, + "API_KEY": { + "LABEL": "API Key", + "PLACEHOLDER": "Please enter your Bandwidth API Key", + "ERROR": "This field is required" + }, + "API_SECRET": { + "LABEL": "API Secret", + "PLACEHOLDER": "Please enter your Bandwidth API Secret", + "ERROR": "This field is required" + }, + "APPLICATION_ID": { + "LABEL": "Application ID", + "PLACEHOLDER": "Please enter your Bandwidth Application ID", + "ERROR": "This field is required" + }, + "INBOX_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "SUBMIT_BUTTON": "Create Bandwidth Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Bandwidth credentials, please try again" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the message callback URL in Bandwidth with the URL mentioned here." + } + } + }, + "WHATSAPP": { + "TITLE": "WhatsApp Channel", + "DESC": "Start supporting your customers via WhatsApp.", + "PROVIDERS": { + "LABEL": "API Provider", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter an inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "PHONE_NUMBER_ID": { + "LABEL": "Phone number ID", + "PLACEHOLDER": "Please enter the Phone number ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "Business Account ID", + "PLACEHOLDER": "Please enter the Business Account ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook Verify Token", + "PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.", + "ERROR": "Please enter a valid value." + }, + "API_KEY": { + "LABEL": "API key", + "SUBTITLE": "Configure the WhatsApp API key.", + "PLACEHOLDER": "API key", + "ERROR": "Please enter a valid value." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL and the verification token in the Facebook Developer portal with the values shown below.", + "WEBHOOK_URL": "Webhook URL", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook Verification Token" + }, + "SUBMIT_BUTTON": "Create WhatsApp Channel", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "Phone Number", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "Account SID", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "Auth Token", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "API Key SID", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "API Channel", + "DESC": "Integrate with API channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "SUBTITLE": "Configure the URL where you want to receive callbacks on events.", + "PLACEHOLDER": "Webhook URL" + }, + "SUBMIT_BUTTON": "Create API Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the api channel" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "Email Channel", + "DESC": "Integrate your email inbox.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "EMAIL": { + "LABEL": "Email", + "SUBTITLE": "Email where your customers sends you support tickets", + "PLACEHOLDER": "Email" + }, + "SUBMIT_BUTTON": "Create Email Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the email channel" + }, + "FINISH_MESSAGE": "Start forwarding your emails to the following email address.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "Click here", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "LINE Channel", + "DESC": "Integrate with LINE channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "LINE_CHANNEL_ID": { + "LABEL": "LINE Channel ID", + "PLACEHOLDER": "LINE Channel ID" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "LINE Channel Secret", + "PLACEHOLDER": "LINE Channel Secret" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "LINE Channel Token", + "PLACEHOLDER": "LINE Channel Token" + }, + "SUBMIT_BUTTON": "Create LINE Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the LINE channel" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL in LINE application with the URL mentioned here." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Telegram Channel", + "DESC": "Integrate with Telegram channel and start supporting your customers.", + "BOT_TOKEN": { + "LABEL": "Bot Token", + "SUBTITLE": "Configure the bot token you have obtained from Telegram BotFather.", + "PLACEHOLDER": "Bot Token" + }, + "SUBMIT_BUTTON": "Create Telegram Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the telegram channel" + } + }, + "AUTH": { + "TITLE": "Choose a channel", + "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Website", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "Email", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Ejen", + "DESC": "Here you can add agents to manage your newly created inbox. Only these selected agents will have access to your inbox. Agents which are not part of this inbox will not be able to see or respond to messages in this inbox when they login.Webhooks
Webhooks are HTTP callbacks which can be defined for every account. They are triggered by events like message creation in Chatwoot. You can create more than one webhook for this account.
For creating a webhook, click on the Add new webhook button. You can also remove any existing webhook by clicking on the Delete button.
Dashboard Apps
Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.
When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.
To add a new dashboard app, click on the button 'Add a new dashboard app'.
", + "DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.", + "LEARN_MORE": "Learn more about Dashboard Apps", + "LIST": { + "404": "There are no dashboard apps configured on this account yet", + "LOADING": "Fetching dashboard apps...", + "TABLE_HEADER": { + "NAME": "Nama", + "ENDPOINT": "Endpoint" + }, + "EDIT_TOOLTIP": "Edit app", + "DELETE_TOOLTIP": "Delete app" + }, + "FORM": { + "TITLE_LABEL": "Nama", + "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", + "TITLE_ERROR": "A name for the dashboard app is required", + "URL_LABEL": "Endpoint", + "URL_PLACEHOLDER": "Enter the endpoint URL where your app is hosted", + "URL_ERROR": "A valid URL is required" + }, + "CREATE": { + "HEADER": "Add a new dashboard app", + "FORM_SUBMIT": "Submit", + "FORM_CANCEL": "Batalkan", + "API_SUCCESS": "Dashboard app configured successfully", + "API_ERROR": "We couldn't create an app. Please try again later" + }, + "UPDATE": { + "HEADER": "Edit dashboard app", + "FORM_SUBMIT": "Update", + "FORM_CANCEL": "Batalkan", + "API_SUCCESS": "Dashboard app updated successfully", + "API_ERROR": "We couldn't update the app. Please try again later" + }, + "DELETE": { + "CONFIRM_YES": "Yes, delete it", + "CONFIRM_NO": "No, keep it", + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete the app - {appName}?", + "API_SUCCESS": "Dashboard app deleted successfully", + "API_ERROR": "We couldn't delete the app. Please try again later" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "Fetching linear issues...", + "LOADING_ERROR": "There was an error fetching the linear issues, please try again", + "CREATE": "Create", + "LINK": { + "SEARCH": "Search issues", + "SELECT": "Select issue", + "TITLE": "Pautan", + "EMPTY_LIST": "No linear issues found", + "LOADING": "Loading", + "ERROR": "There was an error fetching the linear issues, please try again", + "LINK_SUCCESS": "Issue linked successfully", + "LINK_ERROR": "There was an error linking the issue, please try again", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "Create Linear issues from conversations, or link existing ones for seamless tracking.", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter title", + "REQUIRED_ERROR": "Title is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Enter description" + }, + "TEAM": { + "LABEL": "Team", + "PLACEHOLDER": "Pilih pasukan", + "SEARCH": "Search team", + "REQUIRED_ERROR": "Team is required" + }, + "ASSIGNEE": { + "LABEL": "Assignee", + "PLACEHOLDER": "Select assignee", + "SEARCH": "Search assignee" + }, + "PRIORITY": { + "LABEL": "Priority", + "PLACEHOLDER": "Select priority", + "SEARCH": "Search priority" + }, + "LABEL": { + "LABEL": "Label", + "PLACEHOLDER": "Select label", + "SEARCH": "Search label" + }, + "STATUS": { + "LABEL": "Status", + "PLACEHOLDER": "Select status", + "SEARCH": "Search status" + }, + "PROJECT": { + "LABEL": "Project", + "PLACEHOLDER": "Select project", + "SEARCH": "Search project" + } + }, + "CREATE": "Create", + "CANCEL": "Batalkan", + "CREATE_SUCCESS": "Issue created successfully", + "CREATE_ERROR": "There was an error creating the issue, please try again", + "LOADING_TEAM_ERROR": "There was an error fetching the teams, please try again", + "LOADING_TEAM_ENTITIES_ERROR": "There was an error fetching the team entities, please try again" + }, + "ISSUE": { + "STATUS": "Status", + "PRIORITY": "Priority", + "ASSIGNEE": "Assignee", + "LABELS": "Label", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Unlink", + "SUCCESS": "Issue unlinked successfully", + "ERROR": "There was an error unlinking the issue, please try again" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Yes, delete", + "CANCEL": "Batalkan" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Yes, delete", + "CANCEL": "Batalkan" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "Send message...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Captain is thinking", + "YOU": "You", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "You", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "Type your message...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "Batalkan", + "CREATE": "Create", + "EDIT": "Update" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "Update", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "Features", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "Features", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "Settings", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Padamkan" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "Create", + "CANCEL": "Batalkan", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Padamkan" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "Create", + "CANCEL": "Batalkan", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Padamkan" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "Create", + "CANCEL": "Batalkan" + } + } + }, + "UPDATE": { + "CANCEL": "Batalkan", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "None", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "API Key" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "Password", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Type" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Nombor", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Required" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "Padamkan", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "All" + }, + "STATUS": { + "TITLE": "Status", + "PENDING": "Pending", + "APPROVED": "Approved", + "ALL": "All" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "Edit", + "DELETE_RESPONSE": "Padamkan" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Disconnect" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "Inbox", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/ms/labelsMgmt.json new file mode 100644 index 0000000..156a6ff --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Labels", + "HEADER_BTN_TXT": "Add label", + "LOADING": "Fetching labels", + "DESCRIPTION": "Labels help you categorize and prioritize conversations and leads. You can assign a label to a conversation or contact using the side panel.", + "LEARN_MORE": "Learn more about labels", + "SEARCH_404": "There are no items matching this query", + "LIST": { + "404": "There are no labels available in this account.", + "TITLE": "Manage labels", + "DESC": "Labels let you group the conversations together.", + "TABLE_HEADER": { + "NAME": "Nama", + "DESCRIPTION": "Description", + "COLOR": "Color" + } + }, + "FORM": { + "NAME": { + "LABEL": "Label Name", + "PLACEHOLDER": "Label name", + "REQUIRED_ERROR": "Label name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Label Description" + }, + "COLOR": { + "LABEL": "Color" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Show label on sidebar" + }, + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Padamkan", + "CANCEL": "Batalkan" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Add label to conversation", + "MULTIPLE_SUGGESTION": "Select this label", + "DESELECT": "Deselect label", + "DISMISS": "Dismiss suggestion" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Dismiss", + "ADD_SELECTED_LABELS": "Add selected labels", + "ADD_SELECTED_LABEL": "Add selected label", + "ADD_ALL_LABELS": "Add all labels", + "SUGGESTED_LABELS": "Suggested labels" + }, + "ADD": { + "TITLE": "Add label", + "DESC": "Labels let you group the conversations together.", + "API": { + "SUCCESS_MESSAGE": "Label added successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "EDIT": { + "TITLE": "Edit label", + "API": { + "SUCCESS_MESSAGE": "Label updated successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "DELETE": { + "BUTTON_TEXT": "Padamkan", + "API": { + "SUCCESS_MESSAGE": "Label deleted successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "CONFIRM": { + "TITLE": "Pasti Padamkan", + "MESSAGE": "Adakan anda pasti untuk padamkan ", + "YES": "Ya, Padamkan ", + "NO": "Tidak, simpankan " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/login.json b/app/javascript/dashboard/i18n/locale/ms/login.json new file mode 100644 index 0000000..a34ed17 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Login to Chatwoot", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "Please enter a valid email address" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password" + }, + "API": { + "SUCCESS_MESSAGE": "Login successful", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again.", + "UNAUTH": "Username or password is incorrect. Please try again." + }, + "OAUTH": { + "GOOGLE_LOGIN": "Login with Google", + "BUSINESS_ACCOUNTS_ONLY": "Please use your company email address to login", + "NO_ACCOUNT_FOUND": "We couldn't find an account for your email address." + }, + "FORGOT_PASSWORD": "Forgot your password?", + "CREATE_NEW_ACCOUNT": "Create new account", + "SUBMIT": "Login", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/macros.json b/app/javascript/dashboard/i18n/locale/ms/macros.json new file mode 100644 index 0000000..48099f5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Macros", + "DESCRIPTION": "A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click.", + "LEARN_MORE": "Learn more about macros", + "HEADER_BTN_TXT": "Add a new macro", + "HEADER_BTN_TXT_SAVE": "Save macro", + "LOADING": "Fetching macros", + "ERROR": "Something went wrong. Please try again", + "ORDER_INFO": "Macros will run in the order you add your actions. You can rearrange them by dragging them by the handle beside each node.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Macro name", + "PLACEHOLDER": "Enter a name for your macro", + "ERROR": "Name is required for creating a macro" + }, + "ACTIONS": { + "LABEL": "Tindakan-tindakan" + } + }, + "API": { + "SUCCESS_MESSAGE": "Macro added successfully", + "ERROR_MESSAGE": "Unable to create macro, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nama", + "CREATED BY": "Created by", + "LAST_UPDATED_BY": "Last updated by", + "VISIBILITY": "Visibility" + }, + "404": "No macros found" + }, + "DELETE": { + "TOOLTIP": "Delete macro", + "CONFIRM": { + "MESSAGE": "Adakan anda pasti untuk padamkan ", + "YES": "Baik, Padamkan", + "NO": "No" + }, + "API": { + "SUCCESS_MESSAGE": "Macro deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the macro. Please try again later" + } + }, + "EDIT": { + "TOOLTIP": "Edit macro", + "API": { + "SUCCESS_MESSAGE": "Macro updated successfully", + "ERROR_MESSAGE": "Could not update Macro, Please try again later" + } + }, + "EDITOR": { + "START_FLOW": "Start Flow", + "END_FLOW": "End Flow", + "LOADING": "Fetching macro", + "ADD_BTN_TOOLTIP": "Add new action", + "DELETE_BTN_TOOLTIP": "Delete Action", + "VISIBILITY": { + "LABEL": "Macro Visibility", + "GLOBAL": { + "LABEL": "Public", + "DESCRIPTION": "This macro is available publicly for all agents in this account." + }, + "PERSONAL": { + "LABEL": "Private", + "DESCRIPTION": "This macro will be private to you and not be available to others." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Execute", + "PREVIEW": "Preview Macro", + "EXECUTED_SUCCESSFULLY": "Macro executed successfully" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Nilai diperlukan", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Assign a Team", + "ASSIGN_AGENT": "Assign an Agent", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Mute Conversation", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "CHANGE_PRIORITY": "Change Priority", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "SEND_WEBHOOK_EVENT": "Send Webhook Event" + }, + "PRIORITY_TYPES": { + "NONE": "None", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/mfa.json b/app/javascript/dashboard/i18n/locale/ms/mfa.json new file mode 100644 index 0000000..4e0b282 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "Enabled", + "DISABLED": "Disabled", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Loading...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "Copy", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "Batalkan", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "Download", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "Password", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "Batalkan", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "Batalkan", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/report.json b/app/javascript/dashboard/i18n/locale/ms/report.json new file mode 100644 index 0000000..a703876 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Conversations", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "DATA_FETCHING_FAILED": "Failed to fetch data, please try again later.", + "SUMMARY_FETCHING_FAILED": "Failed to fetch summary, please try again later.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Handoff Count", + "DESC": "( Total )" + }, + "REPLY_TIME": { + "NAME": "Customer waiting time", + "TOOLTIP_TEXT": "Waiting time is {metricValue} (based on {conversationCount} replies)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "Last 7 days", + "LAST_14_DAYS": "Last 14 days", + "LAST_30_DAYS": "Last 30 days", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_DATE_RANGE": "Custom date range" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Group By", + "DURATION_FILTER_LABEL": "Duration", + "GROUPING_OPTIONS": { + "DAY": "Day", + "WEEK": "Week", + "MONTH": "Month", + "YEAR": "Month" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "BUSINESS_HOURS": "Business Hours", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Tiada dijumpa" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Agents Overview", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "FILTER_DROPDOWN_LABEL": "Select Agent", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "LABEL_REPORTS": { + "HEADER": "Labels Overview", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_LABEL_REPORTS": "Download label reports", + "FILTER_DROPDOWN_LABEL": "Select Label", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "INBOX_REPORTS": { + "HEADER": "Inbox Overview", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_INBOX_REPORTS": "Download inbox reports", + "FILTER_DROPDOWN_LABEL": "Select Inbox", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "TEAM_REPORTS": { + "HEADER": "Team Overview", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_TEAM_REPORTS": "Download team reports", + "FILTER_DROPDOWN_LABEL": "Select Team", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "CSAT_REPORTS": { + "HEADER": "CSAT Reports", + "NO_RECORDS": "There are no CSAT survey responses available.", + "DOWNLOAD": "Download CSAT Reports", + "DOWNLOAD_FAILED": "Failed to download CSAT Reports", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Choose Agents" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Contact", + "AGENT_NAME": "Assigned agent", + "RATING": "Rating", + "FEEDBACK_TEXT": "Feedback comment" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Total responses", + "TOOLTIP": "Total number of responses collected" + }, + "SATISFACTION_SCORE": { + "LABEL": "Satisfaction score", + "TOOLTIP": "Total number of positive responses / Total number of responses * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Response rate", + "TOOLTIP": "Total number of responses / Total number of CSAT survey messages sent * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Bot Reports", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "No. of Conversations", + "TOOLTIP": "Total number of conversations handled by the bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total Responses", + "TOOLTIP": "Total number of responses sent by the bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Resolution Rate", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Handoff Rate", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Overview", + "LIVE": "Live", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Open Conversations", + "LOADING_MESSAGE": "Loading conversation metrics...", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "UNASSIGNED": "Unassigned", + "PENDING": "Pending" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Conversation Traffic", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Conversations by agents", + "LOADING_MESSAGE": "Loading agent metrics...", + "NO_AGENTS": "There are no conversations by agents", + "TABLE_HEADER": { + "AGENT": "Ejen", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "STATUS": "Status" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Team", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "STATUS": "Status" + } + }, + "AGENT_STATUS": { + "HEADER": "Agent status", + "ONLINE": "Online", + "BUSY": "Busy", + "OFFLINE": "Offline" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Sunday", + "MONDAY": "Monday", + "TUESDAY": "Tuesday", + "WEDNESDAY": "Wednesday", + "THURSDAY": "Thursday", + "FRIDAY": "Friday", + "SATURDAY": "Saturday" + }, + "SLA_REPORTS": { + "HEADER": "SLA Reports", + "NO_RECORDS": "SLA applied conversations are not available.", + "LOADING": "Loading SLA data...", + "DOWNLOAD_SLA_REPORTS": "Download SLA reports", + "DOWNLOAD_FAILED": "Failed to download SLA Reports", + "DROPDOWN": { + "ADD_FIlTER": "Add filter", + "CLEAR_ALL": "Clear all", + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Tiada dijumpa", + "NO_FILTER": "No filters available", + "SEARCH": "Search filter", + "INPUT_PLACEHOLDER": { + "SLA": "SLA name", + "AGENTS": "Agent name", + "INBOXES": "Inbox name", + "LABELS": "Label name", + "TEAMS": "Team name" + }, + "SLA": "SLA Policy", + "INBOXES": "Inbox", + "AGENTS": "Ejen", + "LABELS": "Label", + "TEAMS": "Team" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentage of SLAs created were completed successfully" + }, + "NO_OF_MISSES": { + "LABEL": "Number of Misses", + "TOOLTIP": "Total SLA misses in a certain period" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Number of Conversations", + "TOOLTIP": "Total number of conversations with SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "Conversation", + "AGENT": "Ejen" + }, + "VIEW_DETAILS": "View Details" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Inbox", + "AGENT": "Ejen", + "TEAM": "Team", + "LABEL": "Label", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "Resolution Count", + "CONVERSATIONS": "No. of conversations" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/resetPassword.json b/app/javascript/dashboard/i18n/locale/ms/resetPassword.json new file mode 100644 index 0000000..955696b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Reset password", + "DESCRIPTION": "Enter the email address you use to log in to Chatwoot to get the password reset instructions.", + "GO_BACK_TO_LOGIN": "If you want to go back to the login page,", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "Please enter your email.", + "ERROR": "Please enter a valid email." + }, + "API": { + "SUCCESS_MESSAGE": "Password reset link has been sent to your email.", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again." + }, + "SUBMIT": "Submit" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/search.json b/app/javascript/dashboard/i18n/locale/ms/search.json new file mode 100644 index 0000000..747956e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "Contacts", + "CONVERSATIONS": "Conversations", + "MESSAGES": "Messages", + "ARTICLES": "Articles" + }, + "SECTION": { + "CONTACTS": "Contacts", + "CONVERSATIONS": "Conversations", + "MESSAGES": "Messages", + "ARTICLES": "Articles" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "Searching", + "LOADING_DATA": "Loading", + "EMPTY_STATE": "No {item} found for query '{query}'", + "EMPTY_STATE_FULL": "No results found for query '{query}'", + "PLACEHOLDER_KEYBINDING": "/to focus", + "INPUT_PLACEHOLDER": "Type 3 or more characters to search", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Clear all", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Search by conversation id, email, phone number, messages for better search results. ", + "BOT_LABEL": "Bot", + "READ_MORE": "Read more", + "READ_LESS": "Read less", + "WROTE": "wrote:", + "FROM": "From", + "EMAIL": "Email", + "EMAIL_SUBJECT": "Subject", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "Last 7 days", + "LAST_30_DAYS": "Last 30 days", + "LAST_60_DAYS": "Last 60 days", + "LAST_90_DAYS": "Last 90 days", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "Apply", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Clear filter" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Sender", + "IN": "Inbox", + "AGENTS": "Ejen", + "CONTACTS": "Contacts", + "INBOXES": "Inboxes", + "NO_AGENTS": "Tiada ejen dijumpa", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/setNewPassword.json b/app/javascript/dashboard/i18n/locale/ms/setNewPassword.json new file mode 100644 index 0000000..4908dad --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Set new password", + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password", + "ERROR": "Password is too short." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm password", + "PLACEHOLDER": "Confirm Password", + "ERROR": "Passwords do not match." + }, + "API": { + "SUCCESS_MESSAGE": "Successfully changed the password.", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again." + }, + "CAPTCHA": { + "ERROR": "Verification expired. Please solve captcha again." + }, + "SUBMIT": "Submit" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/settings.json b/app/javascript/dashboard/i18n/locale/ms/settings.json new file mode 100644 index 0000000..8c52e3f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Profile Settings", + "TITLE": "Profile Settings", + "BTN_TEXT": "Update Profile", + "DELETE_AVATAR": "Delete Avatar", + "AVATAR_DELETE_SUCCESS": "Avatar has been deleted successfully", + "AVATAR_DELETE_FAILED": "There is an error while deleting avatar, please try again", + "UPDATE_SUCCESS": "Your profile has been updated successfully", + "PASSWORD_UPDATE_SUCCESS": "Your password has been changed successfully", + "AFTER_EMAIL_CHANGED": "Your profile has been updated successfully, please login again as your login credentials are changed", + "FORM": { + "PICTURE": "Profile Picture", + "AVATAR": "Profile Image", + "ERROR": "Please fix form errors", + "REMOVE_IMAGE": "Remove", + "UPLOAD_IMAGE": "Upload image", + "UPDATE_IMAGE": "Update image", + "PROFILE_SECTION": { + "TITLE": "Profile", + "NOTE": "Your email address is your identity and is used to log in." + }, + "SEND_MESSAGE": { + "TITLE": "Hotkey to send messages", + "NOTE": "You can select a hotkey (either Enter or Cmd/Ctrl+Enter) based on your preference of writing.", + "UPDATE_SUCCESS": "Your settings have been updated successfully", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Send messages by pressing Enter key instead of clicking the send button." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Send messages by pressing Cmd/Ctrl + enter key instead of clicking the send button." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Default", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Personal message signature", + "NOTE": "Create a unique message signature to appear at the end of every message you send from any inbox. You can also include an inline image, which is supported in live-chat, email, and API inboxes.", + "BTN_TEXT": "Save message signature", + "API_ERROR": "Couldn't save signature! Try again", + "API_SUCCESS": "Signature saved successfully", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save to save the signature", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Message Signature", + "ERROR": "Message Signature cannot be empty", + "PLACEHOLDER": "Insert your personal message signature here." + }, + "PASSWORD_SECTION": { + "TITLE": "Password", + "NOTE": "Updating your password would reset your logins in multiple devices.", + "BTN_TEXT": "Change password" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "Access Token", + "NOTE": "This token can be used if you are building an API based integration", + "COPY": "Copy", + "RESET": "Reset", + "CONFIRM_RESET": "Are you sure?", + "CONFIRM_HINT": "Click again to confirm", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Alerts", + "NOTE": "Enable audio alerts in dashboard for new messages and conversations.", + "PLAY": "Play sound", + "ALERT_TYPES": { + "NONE": "Tiada", + "MINE": "Assigned", + "ALL": "All", + "ASSIGNED": "My assigned conversations", + "UNASSIGNED": "Unassigned conversations", + "NOTME": "Open conversations assigned to others" + }, + "ALERT_COMBINATIONS": { + "NONE": "You haven't selected any options, you won't receive any audio alerts.", + "ASSIGNED": "You'll receive alerts for conversations assigned to you.", + "UNASSIGNED": "You'll receive alerts for any unassigned conversations.", + "NOTME": "You'll receive alerts for conversations assigned to others.", + "ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.", + "ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.", + "NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.", + "ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations." + }, + "ALERT_TYPE": { + "TITLE": "Alert events for conversations", + "NONE": "Tiada", + "ASSIGNED": "Assigned Conversations", + "ALL_CONVERSATIONS": "All Conversations" + }, + "DEFAULT_TONE": { + "TITLE": "Alert tone:" + }, + "CONDITIONS": { + "TITLE": "Alert conditions:", + "CONDITION_ONE": "Send audio alerts only if the browser window is not active", + "CONDITION_TWO": "Send alerts every 30s until all the assigned conversations are read" + }, + "SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.", + "READ_MORE": "Read more" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "Email Notifications", + "NOTE": "Update your email notification preferences here", + "CONVERSATION_ASSIGNMENT": "Send email notifications when a conversation is assigned to me", + "CONVERSATION_CREATION": "Send email notifications when a new conversation is created", + "CONVERSATION_MENTION": "Send email notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "Send email notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send email notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send email notifications when a conversation misses resolution SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Notification preferences", + "TYPE_TITLE": "Notification type", + "EMAIL": "Email", + "PUSH": "Push notification", + "TYPES": { + "CONVERSATION_CREATED": "A new conversation is created", + "CONVERSATION_ASSIGNED": "A conversation is assigned to you", + "CONVERSATION_MENTION": "You are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "A new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "A new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "A conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "A conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "A conversation misses resolution SLA" + }, + "BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them" + }, + "API": { + "UPDATE_SUCCESS": "Your notification preferences are updated successfully", + "UPDATE_ERROR": "There is an error while updating the preferences, please try again" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Push Notifications", + "NOTE": "Update your push notification preferences here", + "CONVERSATION_ASSIGNMENT": "Send push notifications when a conversation is assigned to me", + "CONVERSATION_CREATION": "Send push notifications when a new conversation is created", + "CONVERSATION_MENTION": "Send push notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in a participating conversation", + "HAS_ENABLED_PUSH": "You have enabled push for this browser.", + "REQUEST_PUSH": "Enable push notifications", + "SLA_MISSED_FIRST_RESPONSE": "Send push notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send push notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send push notifications when a conversation misses resolution SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "Profile Image" + }, + "NAME": { + "LABEL": "Your full name", + "ERROR": "Please enter a valid full name", + "PLACEHOLDER": "Please enter your full name" + }, + "DISPLAY_NAME": { + "LABEL": "Display name", + "ERROR": "Please enter a valid display name", + "PLACEHOLDER": "Please enter a display name, this would be displayed in conversations" + }, + "AVAILABILITY": { + "LABEL": "Availability", + "STATUS": { + "ONLINE": "Online", + "BUSY": "Busy", + "OFFLINE": "Offline" + }, + "SET_AVAILABILITY_SUCCESS": "Availability has been set successfully", + "SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again", + "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user" + }, + "EMAIL": { + "LABEL": "Your email address", + "ERROR": "Please enter a valid email address", + "PLACEHOLDER": "Please enter your email address, this would be displayed in conversations" + }, + "CURRENT_PASSWORD": { + "LABEL": "Current password", + "ERROR": "Please enter the current password", + "PLACEHOLDER": "Please enter the current password" + }, + "PASSWORD": { + "LABEL": "New password", + "ERROR": "Please enter a password of length 6 or more", + "PLACEHOLDER": "Please enter a new password" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Confirm new password", + "ERROR": "Confirm password should match the password", + "PLACEHOLDER": "Please re-enter your new password" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Change", + "CHANGE_ACCOUNTS": "Switch account", + "SWITCH_ACCOUNT": "Switch account", + "CONTACT_SUPPORT": "Contact support", + "SELECTOR_SUBTITLE": "Select an account from the following list", + "PROFILE_SETTINGS": "Profile settings", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Keyboard shortcuts", + "APPEARANCE": "Change appearance", + "SUPER_ADMIN_CONSOLE": "SuperAdmin console", + "DOCS": "Read documentation", + "CHANGELOG": "Changelog", + "LOGOUT": "Log out" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "days trial remaining.", + "TRAIL_BUTTON": "Buy Now", + "DELETED_USER": "Deleted User", + "EMAIL_VERIFICATION_PENDING": "It seems that you haven't verified your email address yet. Please check your inbox for the verification email.", + "RESEND_VERIFICATION_MAIL": "Resend verification email", + "EMAIL_VERIFICATION_SENT": "Verification email has been sent. Please check your inbox.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Account Suspended", + "MESSAGE": "Your account is suspended. Please reach out to the support team for more information." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Log out" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Copy", + "CODEPEN": "Open in CodePen", + "COPY_SUCCESSFUL": "Code copied to clipboard successfully" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Show More", + "SHOW_LESS": "Show Less" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "Download", + "UPLOADING": "Uploading...", + "INSTAGRAM_STORY_UNAVAILABLE": "This story is no longer available." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "See on map" + }, + "FORM_BUBBLE": { + "SUBMIT": "Submit" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "This image is no longer available.", + "LOADING_FAILED": "Loading failed" + } + }, + "CONFIRM_EMAIL": "Verifying...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Add Inbox" + } + }, + "SIDEBAR": { + "NO_ITEMS": "No items", + "CURRENTLY_VIEWING_ACCOUNT": "Currently viewing:", + "SWITCH": "Switch", + "INBOX_VIEW": "Inbox View", + "CONVERSATIONS": "Conversations", + "INBOX": "My Inbox", + "ALL_CONVERSATIONS": "All Conversations", + "MENTIONED_CONVERSATIONS": "Mentions", + "PARTICIPATING_CONVERSATIONS": "Participating", + "UNATTENDED_CONVERSATIONS": "Unattended", + "REPORTS": "Reports", + "SETTINGS": "Settings", + "CONTACTS": "Contacts", + "ACTIVE": "Active", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistants", + "CAPTAIN_DOCUMENTS": "Documents", + "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_TOOLS": "Tools", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "Inboxes", + "CAPTAIN_SETTINGS": "Settings", + "HOME": "Home", + "AGENTS": "Ejen", + "AGENT_BOTS": "Bots", + "AUDIT_LOGS": "Audit Logs", + "INBOXES": "Inboxes", + "NOTIFICATIONS": "Notifications", + "CANNED_RESPONSES": "Canned Responses", + "INTEGRATIONS": "Integrations", + "PROFILE_SETTINGS": "Profile Settings", + "ACCOUNT_SETTINGS": "Account Settings", + "APPLICATIONS": "Applications", + "LABELS": "Labels", + "CUSTOM_ATTRIBUTES": "Custom Attributes", + "AUTOMATION": "Automation", + "MACROS": "Macros", + "TEAMS": "Teams", + "BILLING": "Billing", + "CUSTOM_VIEWS_FOLDER": "Folders", + "CUSTOM_VIEWS_SEGMENTS": "Segments", + "ALL_CONTACTS": "All Contacts", + "TAGGED_WITH": "Tagged with", + "NEW_LABEL": "New label", + "NEW_TEAM": "New team", + "NEW_INBOX": "New inbox", + "REPORTS_CONVERSATION": "Conversations", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Campaigns", + "ONGOING": "Ongoing", + "ONE_OFF": "One off", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "Bot", + "REPORTS_AGENT": "Ejen", + "REPORTS_LABEL": "Labels", + "REPORTS_INBOX": "Inbox", + "REPORTS_TEAM": "Team", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "Set yourself as", + "SET_YOUR_AVAILABILITY": "Set your availability", + "SLA": "SLA", + "CUSTOM_ROLES": "Custom Roles", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Overview", + "REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages", + "HELP_CENTER": { + "TITLE": "Help Center", + "ARTICLES": "Articles", + "CATEGORIES": "Categories", + "LOCALES": "Locales", + "SETTINGS": "Settings" + }, + "CHANNELS": "Channels", + "SET_AUTO_OFFLINE": { + "TEXT": "Mark offline automatically", + "INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard.", + "INFO_SHORT": "Automatically mark offline when you aren't using the app." + }, + "DOCS": "Read docs", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "Billing", + "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "CURRENT_PLAN": { + "TITLE": "Current Plan", + "PLAN_NOTE": "You are currently subscribed to the **{plan}** plan with **{quantity}** licenses", + "SEAT_COUNT": "Number of seats", + "RENEWS_ON": "Renews on" + }, + "VIEW_PRICING": "View Pricing", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Manage your subscription", + "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", + "BUTTON_TXT": "Go to the billing portal" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Manage usage and credits for Captain AI.", + "BUTTON_TXT": "Buy more credits", + "DOCUMENTS": "Documents", + "RESPONSES": "Responses", + "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more.", + "REFRESH_CREDITS": "Refresh" + }, + "CHAT_WITH_US": { + "TITLE": "Need help?", + "DESCRIPTION": "Do you face any issues in billing? We are here to help.", + "BUTTON_TXT": "Chat with us" + }, + "NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again.", + "TOPUP": { + "BUY_CREDITS": "Buy more credits", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Note:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "Batalkan", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Go Back", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "Code copied to clipboard successfully", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.", + "NEW_ACCOUNT": "New Account", + "SELECTOR_SUBTITLE": "Create a new account", + "API": { + "SUCCESS_MESSAGE": "Account created successfully", + "EXIST_MESSAGE": "Account already exists", + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" + }, + "FORM": { + "NAME": { + "LABEL": "Company Name", + "PLACEHOLDER": "Wayne Enterprises" + }, + "SUBMIT": "Submit", + "CANCEL": "Batalkan" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "View all shortcuts", + "TITLE": { + "OPEN_CONVERSATION": "Open conversation", + "RESOLVE_AND_NEXT": "Resolve and move to next", + "NAVIGATE_DROPDOWN": "Navigate dropdown items", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "ADD_ATTACHMENT": "Add Attachment", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "TOGGLE_SIDEBAR": "Toggle Sidebar", + "GO_TO_REPORTS_SIDEBAR": "Go to Reports sidebar", + "MOVE_TO_NEXT_TAB": "Move to next tab in conversation list", + "GO_TO_SETTINGS": "Go to Settings", + "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", + "SWITCH_TO_REPLY": "Switch to Reply", + "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "Priority", + "ACTIVE": "Active", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "Edit" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Description:", + "PLACEHOLDER": "Enter description" + }, + "STATUS": { + "LABEL": "Status:", + "PLACEHOLDER": "Select status", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "Add" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "Edit" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Description:", + "PLACEHOLDER": "Enter description" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "Add" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "Padamkan", + "CANCEL_BUTTON_LABEL": "Batalkan" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/signup.json b/app/javascript/dashboard/i18n/locale/ms/signup.json new file mode 100644 index 0000000..7d72e32 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Create an account", + "TITLE": "Register", + "TESTIMONIAL_HEADER": "All it takes is one step to move forward", + "TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.", + "TERMS_ACCEPT": "By creating an account, you agree to our T & C and Privacy policy", + "OAUTH": { + "GOOGLE_SIGNUP": "Sign up with Google" + }, + "COMPANY_NAME": { + "LABEL": "Company name", + "PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises", + "ERROR": "Company name is too short" + }, + "FULL_NAME": { + "LABEL": "Full name", + "PLACEHOLDER": "Enter your full name. eg: Bruce Wayne", + "ERROR": "Full name is too short" + }, + "EMAIL": { + "LABEL": "Work email", + "PLACEHOLDER": "Enter your work email address. E.g., bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Please enter a valid work email address" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password", + "ERROR": "Password is too short", + "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm Password", + "PLACEHOLDER": "Confirm Password", + "ERROR": "Passwords do not match." + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" + }, + "SUBMIT": "Create account", + "HAVE_AN_ACCOUNT": "Already have an account?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/sla.json b/app/javascript/dashboard/i18n/locale/ms/sla.json new file mode 100644 index 0000000..1cc1c03 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Add SLA", + "ADD_ACTION_LONG": "Create a new SLA Policy", + "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", + "LEARN_MORE": "Learn more about SLA", + "LOADING": "Fetching SLAs", + "PAYWALL": { + "TITLE": "Upgrade to create SLAs", + "AVAILABLE_ON": "The SLA feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SLA feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no SLAs available in this account.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Issues raised by enterprise customers, that require immediate attention.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Issues raised by enterprise customers, that needs to be acknowledged quickly." + }, + "BUSINESS_HOURS_ON": "Business hours on", + "BUSINESS_HOURS_OFF": "Business hours off", + "RESPONSE_TYPES": { + "FRT": "First response time threshold", + "NRT": "Next response time threshold", + "RT": "Resolution time threshold", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA Name", + "PLACEHOLDER": "SLA Name", + "REQUIRED_ERROR": "SLA name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "SLA for premium customers" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "First Response Time", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Next Response Time", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "Resolution Time", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Business Hours", + "PLACEHOLDER": "Only during business hours" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Threshold should be a number and greater than zero" + }, + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Padamkan", + "CANCEL": "Batalkan" + }, + "ADD": { + "TITLE": "Add SLA", + "DESC": "Friendly promises for great service!", + "API": { + "SUCCESS_MESSAGE": "SLA added successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "DELETE": { + "TITLE": "Delete SLA", + "API": { + "SUCCESS_MESSAGE": "SLA deleted successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "CONFIRM": { + "TITLE": "Pasti Padamkan", + "MESSAGE": "Are you sure you want to delete ", + "YES": "Ya, Padamkan ", + "NO": "Tidak, simpankan " + } + }, + "EVENTS": { + "TITLE": "SLA Misses", + "FRT": "First response time", + "NRT": "Next response time", + "RT": "Resolution time", + "SHOW_MORE": "{count} more", + "HIDE": "Hide {count} rows" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/teamsSettings.json b/app/javascript/dashboard/i18n/locale/ms/teamsSettings.json new file mode 100644 index 0000000..ee50a9a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Create new team", + "HEADER": "Teams", + "LOADING": "Fetching teams", + "DESCRIPTION": "Teams allow you to organize agents into groups based on their responsibilities. An agent can belong to multiple teams. When working collaboratively, you can assign conversations to specific teams.", + "LEARN_MORE": "Learn more about teams", + "LIST": { + "404": "There are no teams created on this account.", + "EDIT_TEAM": "Edit team", + "NONE": "Tiada" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Create a new team", + "DESC": "Add a title and description to your new team." + }, + "AGENTS": { + "BUTTON_TEXT": "Add agents to team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation." + }, + "WIZARD_CREATE": { + "TITLE": "Create", + "BODY": "Create a new team of agents." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "Add Agents", + "BODY": "Add agents to the team." + }, + "WIZARD_FINISH": { + "TITLE": "Finish", + "BODY": "You are all set to go!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Edit your team details", + "DESC": "Edit title and description to your team.", + "BUTTON_TEXT": "Update team" + }, + "AGENTS": { + "BUTTON_TEXT": "Update agents in team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. All the added agents will be notified when a conversation is assigned to this team." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Team details", + "ROUTE": "settings_teams_edit", + "BODY": "Change name, description and other details." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Edit Agents", + "ROUTE": "settings_teams_edit_members", + "BODY": "Edit agents in your team." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Finish", + "ROUTE": "settings_teams_edit_finish", + "BODY": "You are all set to go!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Couldn't save the team details. Try again." + }, + "AGENTS": { + "AGENT": "AGENT", + "EMAIL": "Emel", + "BUTTON_TEXT": "Add agents", + "ADD_AGENTS": "Adding Agents to your Team...", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected." + }, + "ADD": { + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation.", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected.", + "BUTTON_TEXT": "Add agents", + "AGENT_VALIDATION_ERROR": "Select at least one agent." + }, + "FINISH": { + "TITLE": "Your team is ready!", + "MESSAGE": "You can now collaborate as a team on conversations. Happy supporting ", + "BUTTON_TEXT": "Finish" + }, + "DELETE": { + "BUTTON_TEXT": "Padamkan", + "API": { + "SUCCESS_MESSAGE": "Team deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the team. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure you want to delete the team?", + "PLACE_HOLDER": "Please type {teamName} to confirm", + "MESSAGE": "Deleting the team will remove the team assignment from the conversations assigned to this team.", + "YES": "Delete ", + "NO": "Batalkan" + } + }, + "SETTINGS": "Settings", + "FORM": { + "UPDATE": "Update team", + "CREATE": "Create team", + "NAME": { + "LABEL": "Team name", + "PLACEHOLDER": "Example: Sales, Customer Support" + }, + "DESCRIPTION": { + "LABEL": "Team Description", + "PLACEHOLDER": "Short description about this team." + }, + "AUTO_ASSIGN": { + "LABEL": "Allow auto assign for this team." + }, + "SUBMIT_CREATE": "Create team" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/webhooks.json b/app/javascript/dashboard/i18n/locale/ms/webhooks.json new file mode 100644 index 0000000..347c968 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Webhook Settings" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/ms/whatsappTemplates.json new file mode 100644 index 0000000..cf28312 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Whatsapp Templates", + "SUBTITLE": "Select the whatsapp template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ms/yearInReview.json b/app/javascript/dashboard/i18n/locale/ms/yearInReview.json new file mode 100644 index 0000000..414cee3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ms/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "Close", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "conversations", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "Download", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "Share conversation" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/advancedFilters.json b/app/javascript/dashboard/i18n/locale/ne/advancedFilters.json new file mode 100644 index 0000000..a991cb2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Filter conversations", + "SUBTITLE": "Add your filters below and hit 'Apply filters' to cut through the chat clutter.", + "EDIT_CUSTOM_FILTER": "Edit Folder", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your folder.", + "ADD_NEW_FILTER": "Add filter", + "FILTER_DELETE_ERROR": "Oops, looks like we can't save nothing! Please add at least one filter to save it.", + "SUBMIT_BUTTON_LABEL": "Apply filters", + "UPDATE_BUTTON_LABEL": "Update folder", + "CANCEL_BUTTON_LABEL": "Cancel", + "CLEAR_BUTTON_LABEL": "Clear filters", + "FOLDER_LABEL": "Folder Name", + "FOLDER_QUERY_LABEL": "Folder Query", + "EMPTY_VALUE_ERROR": "Value is required.", + "TOOLTIP_LABEL": "Filter conversations", + "QUERY_DROPDOWN_LABELS": { + "AND": "AND", + "OR": "OR" + }, + "INPUT_PLACEHOLDER": "Enter value", + "OPERATOR_LABELS": { + "equal_to": "Equal to", + "not_equal_to": "Not equal to", + "does_not_contain": "Does not contain", + "is_present": "Is present", + "is_not_present": "Is not present", + "is_greater_than": "Is greater than", + "is_less_than": "Is lesser than", + "days_before": "Is x days before", + "starts_with": "Starts with", + "equalTo": "Equal to", + "notEqualTo": "Not equal to", + "contains": "Contains", + "doesNotContain": "Does not contain", + "isPresent": "Is present", + "isNotPresent": "Is not present", + "isGreaterThan": "Is greater than", + "isLessThan": "Is lesser than", + "daysBefore": "Is x days before", + "startsWith": "Starts with" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "True", + "FALSE": "False" + }, + "ATTRIBUTES": { + "STATUS": "Status", + "ASSIGNEE_NAME": "Assignee name", + "INBOX_NAME": "Inbox name", + "TEAM_NAME": "Team name", + "CONVERSATION_IDENTIFIER": "Conversation identifier", + "CAMPAIGN_NAME": "Campaign name", + "LABELS": "Labels", + "BROWSER_LANGUAGE": "Browser language", + "PRIORITY": "Priority", + "COUNTRY_NAME": "Country name", + "REFERER_LINK": "Referer link", + "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_TEXT": "Text", + "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Created at", + "LAST_ACTIVITY": "Last activity" + }, + "ERRORS": { + "VALUE_REQUIRED": "Value is required", + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard filters", + "ADDITIONAL_FILTERS": "Additional filters", + "CUSTOM_ATTRIBUTES": "Custom attributes" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Do you want to save this filter?", + "LABEL": "Name this filter", + "PLACEHOLDER": "Name your filter to refer it later.", + "ERROR_MESSAGE": "Name is required.", + "SAVE_BUTTON": "Save filter", + "CANCEL_BUTTON": "Cancel", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder created successfully.", + "ERROR_MESSAGE": "Error while creating folder." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment created successfully.", + "ERROR_MESSAGE": "Error while creating segment." + } + }, + "EDIT": { + "EDIT_BUTTON": "Edit folder" + }, + "DELETE": { + "DELETE_BUTTON": "Delete filter", + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete the filter ", + "YES": "Yes, delete", + "NO": "No, keep it" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder deleted successfully.", + "ERROR_MESSAGE": "Error while deleting folder." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment deleted successfully.", + "ERROR_MESSAGE": "Error while deleting segment." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/agentBots.json b/app/javascript/dashboard/i18n/locale/ne/agentBots.json new file mode 100644 index 0000000..d3a0bb9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Bots", + "LOADING_EDITOR": "Loading editor...", + "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try. You can manage your bots from this page or create new ones using the 'Add Bot' button.", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "System bot", + "GLOBAL_BOT_BADGE": "System", + "AVATAR": { + "SUCCESS_DELETE": "Bot avatar deleted successfully", + "ERROR_DELETE": "Error deleting bot avatar, please try again" + }, + "BOT_CONFIGURATION": { + "TITLE": "Select an agent bot", + "DESC": "Assign an Agent Bot to your inbox. They can handle initial conversations and transfer them to a live agent when necessary.", + "SUBMIT": "Update", + "DISCONNECT": "Disconnect bot", + "SUCCESS_MESSAGE": "Successfully updated the agent bot.", + "DISCONNECTED_SUCCESS_MESSAGE": "Successfully disconnected the agent bot.", + "ERROR_MESSAGE": "Could not update the agent bot. Please try again.", + "DISCONNECTED_ERROR_MESSAGE": "Could not disconnect the agent bot. Please try again.", + "SELECT_PLACEHOLDER": "Select bot" + }, + "ADD": { + "TITLE": "Add Bot", + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "SUCCESS_MESSAGE": "Bot added successfully.", + "ERROR_MESSAGE": "Could not add bot. Please try again later." + } + }, + "LIST": { + "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.", + "LOADING": "Fetching bots...", + "TABLE_HEADER": { + "DETAILS": "Bot Details", + "URL": "Webhook URL" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "TITLE": "Delete bot", + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure you want to delete {name}?", + "YES": "Yes, Delete", + "NO": "No, Keep" + }, + "API": { + "SUCCESS_MESSAGE": "Bot deleted successfully.", + "ERROR_MESSAGE": "Could not delete bot. Please try again." + } + }, + "EDIT": { + "BUTTON_TEXT": "Edit", + "TITLE": "Edit bot", + "API": { + "SUCCESS_MESSAGE": "Bot updated successfully.", + "ERROR_MESSAGE": "Could not update bot. Please try again." + } + }, + "ACCESS_TOKEN": { + "TITLE": "Access Token", + "DESCRIPTION": "Copy the access token and save it securely", + "COPY_SUCCESSFUL": "Access token copied to clipboard", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "Bot name", + "PLACEHOLDER": "Enter bot name", + "REQUIRED": "Bot name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "What does this bot do?" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "Webhook URL is required" + }, + "ERRORS": { + "NAME": "Bot name is required", + "URL": "Webhook URL is required", + "VALID_URL": "Please enter a valid URL starting with http:// or https://" + }, + "CANCEL": "Cancel", + "CREATE": "Create Bot", + "UPDATE": "Update Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them." + }, + "TYPES": { + "WEBHOOK": "Webhook bot" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/agentMgmt.json b/app/javascript/dashboard/i18n/locale/ne/agentMgmt.json new file mode 100644 index 0000000..448994e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Agents", + "HEADER_BTN_TXT": "Add Agent", + "LOADING": "Fetching Agent List", + "DESCRIPTION": "An agent is a member of your customer support team who can view and respond to user messages. The list below shows all the agents in your account.", + "LEARN_MORE": "Learn about user roles", + "AGENT_TYPES": { + "ADMINISTRATOR": "Administrator", + "AGENT": "Agent" + }, + "LIST": { + "404": "There are no agents associated to this account", + "TITLE": "Manage agents in your team", + "DESC": "You can add/remove agents to/in your team.", + "NAME": "Name", + "EMAIL": "EMAIL", + "STATUS": "Status", + "ACTIONS": "Actions", + "VERIFIED": "Verified", + "VERIFICATION_PENDING": "Verification Pending", + "AVAILABLE_CUSTOM_ROLE": "Available custom role permissions" + }, + "ADD": { + "TITLE": "Add agent to your team", + "DESC": "You can add people who will be able to handle support for your inboxes.", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "NAME": { + "LABEL": "Agent Name", + "PLACEHOLDER": "Please enter a name of the agent" + }, + "AGENT_TYPE": { + "LABEL": "Role", + "PLACEHOLDER": "Please select a role", + "ERROR": "Role is required" + }, + "EMAIL": { + "LABEL": "Email Address", + "PLACEHOLDER": "Please enter an email address of the agent" + }, + "SUBMIT": "Add Agent" + }, + "API": { + "SUCCESS_MESSAGE": "Agent added successfully", + "EXIST_MESSAGE": "Agent email already in use, Please try another email address", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Agent deleted successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + } + }, + "EDIT": { + "TITLE": "Edit agent", + "FORM": { + "NAME": { + "LABEL": "Agent Name", + "PLACEHOLDER": "Please enter a name of the agent" + }, + "AGENT_TYPE": { + "LABEL": "Role", + "PLACEHOLDER": "Please select a role", + "ERROR": "Role is required" + }, + "EMAIL": { + "LABEL": "Email Address", + "PLACEHOLDER": "Please enter an email address of the agent" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Availability", + "PLACEHOLDER": "Please select an availability status", + "ERROR": "Availability is required" + }, + "SUBMIT": "Edit Agent" + }, + "BUTTON_TEXT": "Edit", + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "SUCCESS_MESSAGE": "Agent updated successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Reset Password", + "ADMIN_SUCCESS_MESSAGE": "An email with reset password instructions has been sent to the agent", + "SUCCESS_MESSAGE": "Agent password reset successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "SEARCH": { + "NO_RESULTS": "No results found." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "None", + "TITLE": { + "AGENT": "Select agent", + "TEAM": "Select team" + }, + "LIST": { + "NONE": "None" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "No agents found", + "TEAM": "No teams found" + }, + "PLACEHOLDER": { + "AGENT": "Search agents", + "TEAM": "Search teams", + "INPUT": "Search for agents" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/ne/attributesMgmt.json new file mode 100644 index 0000000..78886f4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Custom Attributes", + "HEADER_BTN_TXT": "Add Custom Attribute", + "LOADING": "Fetching custom attributes", + "DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.", + "LEARN_MORE": "Learn more about custom attributes", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Text", + "NUMBER": "Number", + "LINK": "Link", + "DATE": "Date", + "LIST": "List", + "CHECKBOX": "Checkbox" + }, + "ADD": { + "TITLE": "Add Custom Attribute", + "SUBMIT": "Create", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "NAME": { + "LABEL": "Display Name", + "PLACEHOLDER": "Enter custom attribute display name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Enter custom attribute description", + "ERROR": "Description is required" + }, + "MODEL": { + "LABEL": "Applies to", + "PLACEHOLDER": "Please select one", + "ERROR": "Model is required" + }, + "TYPE": { + "LABEL": "Type", + "PLACEHOLDER": "Please select a type", + "ERROR": "Type is required", + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter value and press enter key", + "ERROR": "Must have at least one value" + } + }, + "KEY": { + "LABEL": "Key", + "PLACEHOLDER": "Enter custom attribute key", + "ERROR": "Key is required", + "IN_VALID": "Invalid key" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute added successfully!", + "ERROR_MESSAGE": "Could not create a Custom Attribute. Please try again later." + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure want to delete - {attributeName}", + "PLACE_HOLDER": "Please type {attributeName} to confirm", + "MESSAGE": "Deleting will remove the custom attribute", + "YES": "Delete ", + "NO": "Cancel" + } + }, + "EDIT": { + "TITLE": "Edit Custom Attribute", + "UPDATE_BUTTON_TEXT": "Update", + "TYPE": { + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter values and press enter key" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute updated successfully", + "ERROR_MESSAGE": "There was an error updating custom attribute, please try again" + } + }, + "TABS": { + "HEADER": "Custom Attributes", + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Name", + "DESCRIPTION": "Description", + "TYPE": "Type", + "KEY": "Key" + }, + "BUTTONS": { + "EDIT": "Edit", + "DELETE": "Delete" + }, + "EMPTY_RESULT": { + "404": "There are no custom attributes created", + "NOT_FOUND": "There are no custom attributes configured" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/auditLogs.json b/app/javascript/dashboard/i18n/locale/ne/auditLogs.json new file mode 100644 index 0000000..df236f5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Audit Logs", + "HEADER_BTN_TXT": "Add Audit Logs", + "LOADING": "Fetching Audit Logs", + "DESCRIPTION": "Audit Logs maintain a record of activities in your account, allowing you to track and audit your account, team, or services.", + "LEARN_MORE": "Learn more about audit logs", + "SEARCH_404": "There are no items matching this query", + "SIDEBAR_TXT": "Audit Logs
Audit Logs are trails for events and actions in a Chatwoot System.
", + "LIST": { + "404": "There are no Audit Logs available in this account.", + "TITLE": "Manage Audit Logs", + "DESC": "Audit Logs are trails for events and actions in a Chatwoot System.", + "TABLE_HEADER": { + "ACTIVITY": "User", + "TIME": "Action", + "IP_ADDRESS": "IP Address" + } + }, + "API": { + "SUCCESS_MESSAGE": "AuditLogs retrieved successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "DEFAULT_USER": "System", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} invited {invitee} to the account as an {role}", + "EDIT": { + "SELF": "{agentName} changed their {attributes} to {values}", + "OTHER": "{agentName} changed {attributes} of {user} to {values}", + "DELETED": "{agentName} changed {attributes} of a deleted user to {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} signed in", + "SIGN_OUT": "{agentName} signed out" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} deleted conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/automation.json b/app/javascript/dashboard/i18n/locale/ne/automation.json new file mode 100644 index 0000000..713ae7e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automation", + "DESCRIPTION": "Automation can replace and streamline existing processes that require manual effort, such as adding labels and assigning conversations to the most suitable agent. This allows the team to focus on their strengths while reducing time spent on routine tasks.", + "LEARN_MORE": "Learn more about automation", + "HEADER_BTN_TXT": "Add Automation Rule", + "LOADING": "Fetching automation rules", + "ADD": { + "TITLE": "Add Automation Rule", + "SUBMIT": "Create", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "NAME": { + "LABEL": "Rule Name", + "PLACEHOLDER": "Enter rule name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Enter rule description", + "ERROR": "Description is required" + }, + "EVENT": { + "LABEL": "Event", + "PLACEHOLDER": "Please select one", + "ERROR": "Event is required" + }, + "CONDITIONS": { + "LABEL": "Conditions" + }, + "ACTIONS": { + "LABEL": "Actions" + } + }, + "CONDITION_BUTTON_LABEL": "Add Condition", + "ACTION_BUTTON_LABEL": "Add Action", + "API": { + "SUCCESS_MESSAGE": "Automation rule added successfully", + "ERROR_MESSAGE": "Could not able to create a automation rule, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Name", + "DESCRIPTION": "Description", + "ACTIVE": "Active", + "CREATED_ON": "Created on" + }, + "404": "No automation rules found" + }, + "DELETE": { + "TITLE": "Delete Automation Rule", + "SUBMIT": "Delete", + "CANCEL_BUTTON_TEXT": "Cancel", + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + }, + "API": { + "SUCCESS_MESSAGE": "Automation rule deleted successfully", + "ERROR_MESSAGE": "Could not able to delete a automation rule, Please try again later" + } + }, + "EDIT": { + "TITLE": "Edit Automation Rule", + "SUBMIT": "Update", + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "SUCCESS_MESSAGE": "Automation rule updated successfully", + "ERROR_MESSAGE": "Could not update automation rule, Please try again later" + } + }, + "CLONE": { + "TOOLTIP": "Clone", + "API": { + "SUCCESS_MESSAGE": "Automation cloned successfully", + "ERROR_MESSAGE": "Could not clone automation rule, Please try again later" + } + }, + "FORM": { + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Delete", + "CANCEL": "Cancel", + "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" + }, + "CONDITION": { + "DELETE_MESSAGE": "You need to have atleast one condition to save", + "CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes" + }, + "ACTION": { + "DELETE_MESSAGE": "You need to have atleast one action to save", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Enter your message here", + "TEAM_DROPDOWN_PLACEHOLDER": "Select teams", + "EMAIL_INPUT_PLACEHOLDER": "Enter email", + "URL_INPUT_PLACEHOLDER": "Enter URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Activate Automation Rule", + "DEACTIVATION_TITLE": "Deactivate Automation Rule", + "ACTIVATION_DESCRIPTION": "This action will activate the automation rule '{automationName}'. Are you sure you want to proceed?", + "DEACTIVATION_DESCRIPTION": "This action will deactivate the automation rule '{automationName}'. Are you sure you want to proceed?", + "ACTIVATION_SUCCESFUL": "Automation Rule Activated Successfully", + "DEACTIVATION_SUCCESFUL": "Automation Rule Deactivated Successfully", + "ACTIVATION_ERROR": "Could not Activate Automation, Please try again later", + "DEACTIVATION_ERROR": "Could not Deactivate Automation, Please try again later", + "CONFIRMATION_LABEL": "Yes", + "CANCEL_LABEL": "No" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Could not upload attachment, Please try again", + "LABEL_IDLE": "Upload Attachment", + "LABEL_UPLOADING": "अपलोड गर्दै...", + "LABEL_UPLOADED": "Successfully Uploaded", + "LABEL_UPLOAD_FAILED": "Upload Failed" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Value is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "NONE_OPTION": "None", + "EVENTS": { + "CONVERSATION_CREATED": "Conversation Created", + "CONVERSATION_UPDATED": "Conversation Updated", + "MESSAGE_CREATED": "Message Created", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Conversation Opened" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assign to Agent", + "ASSIGN_TEAM": "Assign a Team", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "SEND_EMAIL_TO_TEAM": "Send an Email to Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Mute Conversation", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_WEBHOOK_EVENT": "Send Webhook Event", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "CHANGE_PRIORITY": "Change Priority", + "ADD_SLA": "Add SLA", + "OPEN_CONVERSATION": "Open conversation" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "None", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Message Type", + "MESSAGE_CONTAINS": "Message Contains", + "EMAIL": "Email", + "INBOX": "Inbox", + "CONVERSATION_LANGUAGE": "Conversation Language", + "PHONE_NUMBER": "Phone Number", + "STATUS": "Status", + "BROWSER_LANGUAGE": "Browser Language", + "MAIL_SUBJECT": "Email Subject", + "COUNTRY_NAME": "Country", + "REFERER_LINK": "Referrer Link", + "ASSIGNEE_NAME": "Assignee", + "TEAM_NAME": "Team", + "PRIORITY": "Priority", + "LABELS": "Labels" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/bulkActions.json b/app/javascript/dashboard/i18n/locale/ne/bulkActions.json new file mode 100644 index 0000000..0c8d660 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", + "AGENT_SELECT_LABEL": "Select agent", + "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", + "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Go back", + "ASSIGN_LABEL": "Assign", + "YES": "Yes", + "SEARCH_INPUT_PLACEHOLDER": "Search", + "ASSIGN_AGENT_TOOLTIP": "Assign agent", + "ASSIGN_TEAM_TOOLTIP": "Assign team", + "ASSIGN_SUCCESFUL": "Conversations assigned successfully.", + "ASSIGN_FAILED": "Failed to assign conversations. Please try again.", + "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", + "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", + "AGENT_LIST_LOADING": "Loading agents", + "UPDATE": { + "CHANGE_STATUS": "Change status", + "SNOOZE_UNTIL": "Snooze", + "UPDATE_SUCCESFUL": "Conversation status updated successfully.", + "UPDATE_FAILED": "Failed to update conversations. Please try again." + }, + "LABELS": { + "ASSIGN_LABELS": "Assign labels", + "NO_LABELS_FOUND": "No labels found", + "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "ASSIGN_SUCCESFUL": "Labels assigned successfully.", + "ASSIGN_FAILED": "Failed to assign labels. Please try again." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Select team", + "NONE": "None", + "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", + "ASSIGN_SELECTED_TEAMS": "Assign selected team.", + "ASSIGN_SUCCESFUL": "Teams assigned successfully.", + "ASSIGN_FAILED": "Failed to assign team. Please try again." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/campaign.json b/app/javascript/dashboard/i18n/locale/ne/campaign.json new file mode 100644 index 0000000..10366e7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Sent by", + "BOT": "Bot", + "FROM": "from", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "Cancel", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "SENT_BY": { + "LABEL": "Sent by", + "PLACEHOLDER": "Please select sender", + "ERROR": "Sender is required" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Please enter the URL", + "ERROR": "Please enter a valid URL" + }, + "TIME_ON_PAGE": { + "LABEL": "Time on page(Seconds)", + "PLACEHOLDER": "Please enter the time", + "ERROR": "Time on page is required" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "Enable campaign", + "TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "Cancel", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No WhatsApp campaigns are available", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "Cancel", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "Process {templateName}", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLES_LABEL": "Variables", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Create", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Are you sure to delete?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "Delete", + "API": { + "SUCCESS_MESSAGE": "Campaign deleted successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/ne/cannedMgmt.json new file mode 100644 index 0000000..9cab669 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Canned Responses", + "LEARN_MORE": "Learn more about canned responses", + "DESCRIPTION": "Canned Responses are pre-written reply templates that help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a canned response during a conversation. ", + "HEADER_BTN_TXT": "Add canned response", + "LOADING": "Fetching canned responses...", + "SEARCH_404": "There are no items matching this query.", + "LIST": { + "404": "There are no canned responses available in this account.", + "TITLE": "Manage canned responses", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "TABLE_HEADER": { + "SHORT_CODE": "Short code", + "CONTENT": "Content", + "ACTIONS": "Actions" + } + }, + "ADD": { + "TITLE": "Add canned response", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a short code.", + "ERROR": "Short Code is required." + }, + "CONTENT": { + "LABEL": "Message", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "बुझाउनुहोस्" + }, + "API": { + "SUCCESS_MESSAGE": "Canned response added successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "EDIT": { + "TITLE": "Edit canned response", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a shortcode.", + "ERROR": "Short code is required." + }, + "CONTENT": { + "LABEL": "Message", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "बुझाउनुहोस्" + }, + "BUTTON_TEXT": "Edit", + "API": { + "SUCCESS_MESSAGE": "Canned response is updated successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Canned response deleted successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, delete ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/chatlist.json b/app/javascript/dashboard/i18n/locale/ne/chatlist.json new file mode 100644 index 0000000..92e6763 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Fetching conversations", + "LOAD_MORE_CONVERSATIONS": "Load more conversations", + "EOF": "All conversations loaded 🎉", + "LIST": { + "404": "There are no active conversations in this group." + }, + "FAILED_TO_SEND": "Failed to send", + "TAB_HEADING": "Conversations", + "MENTION_HEADING": "Mentions", + "UNATTENDED_HEADING": "Unattended", + "SEARCH": { + "INPUT": "Search for People, Chats, Saved Replies .." + }, + "FILTER_ALL": "All", + "ASSIGNEE_TYPE_TABS": { + "me": "Mine", + "unassigned": "Unassigned", + "all": "All" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Open" + }, + "resolved": { + "TEXT": "Resolved" + }, + "pending": { + "TEXT": "Pending" + }, + "snoozed": { + "TEXT": "Snoozed" + }, + "all": { + "TEXT": "All" + } + }, + "VIEW_FILTER": "View", + "SORT_TOOLTIP_LABEL": "Sort conversations", + "CHAT_SORT": { + "STATUS": "Status", + "ORDER_BY": "Order by" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Created", + "OLDEST": "Created at:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Last activity:", + "ACTIVE": "Last activity" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Last activity: Oldest first" + }, + "last_activity_at_desc": { + "TEXT": "Last activity: Newest first" + }, + "created_at_desc": { + "TEXT": "Created at: Newest first" + }, + "created_at_asc": { + "TEXT": "Created at: Oldest first" + }, + "priority_desc": { + "TEXT": "Priority: Highest first" + }, + "priority_asc": { + "TEXT": "Priority: Lowest first" + }, + "waiting_since_asc": { + "TEXT": "Pending Response: Longest first" + }, + "waiting_since_desc": { + "TEXT": "Pending Response: Shortest first" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "has shared a url" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Sort conversation", + "DROPDOWN_TITLE": "Sort by", + "ITEMS": { + "LATEST": { + "NAME": "Last activity at", + "LABEL": "Last activity" + }, + "CREATED_AT": { + "NAME": "Created at", + "LABEL": "Created at" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Last user message at", + "LABEL": "Last message" + } + } + }, + "RECEIVED_VIA_EMAIL": "Received via email", + "VIEW_TWEET_IN_TWITTER": "View tweet in Twitter", + "REPLY_TO_TWEET": "Reply to this tweet", + "LINK_TO_STORY": "Go to instagram story", + "SENT": "Sent successfully", + "READ": "Read successfully", + "DELIVERED": "Delivered successfully", + "NO_MESSAGES": "No Messages", + "NO_CONTENT": "No content available", + "HIDE_QUOTED_TEXT": "Hide Quoted Text", + "SHOW_QUOTED_TEXT": "Show Quoted Text", + "MESSAGE_READ": "Read", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/companies.json b/app/javascript/dashboard/i18n/locale/ne/companies.json new file mode 100644 index 0000000..0d64a4a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "Name", + "DOMAIN": "Domain", + "CREATED_AT": "Created at", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/components.json b/app/javascript/dashboard/i18n/locale/ne/components.json new file mode 100644 index 0000000..0a2542a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} of {totalPages} pages" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "No results found.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} more" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "No results found.", + "SEARCHING": "Searching..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Cancel", + "CONFIRM": "Confirm" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Search country", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Please select a dial code from the list" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Author is not available" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Learn more", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/contact.json b/app/javascript/dashboard/i18n/locale/ne/contact.json new file mode 100644 index 0000000..22109f9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Not Available", + "EMAIL_ADDRESS": "Email Address", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "COPY_SUCCESSFUL": "Copied to clipboard successfully", + "COMPANY": "Company", + "LOCATION": "Location", + "BROWSER_LANGUAGE": "Browser Language", + "CONVERSATION_TITLE": "Conversation Details", + "VIEW_PROFILE": "View Profile", + "BROWSER": "Browser", + "OS": "Operating System", + "INITIATED_FROM": "Initiated from", + "INITIATED_AT": "Initiated at", + "IP_ADDRESS": "IP Address", + "CREATED_AT_LABEL": "Created", + "NEW_MESSAGE": "New message", + "CALL": "Call", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.", + "TITLE": "Previous Conversations" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Contact Labels", + "ERROR": "Couldn't update labels" + }, + "CONVERSATION": { + "TITLE": "Conversation Labels", + "ADD_BUTTON": "Add Labels" + }, + "LABEL_SELECT": { + "TITLE": "Add Labels", + "PLACEHOLDER": "Search labels", + "NO_RESULT": "No labels found", + "CREATE_LABEL": "Create new label" + } + }, + "MERGE_CONTACT": "Merge contact", + "CONTACT_ACTIONS": "Contact actions", + "MUTE_CONTACT": "Block Contact", + "UNMUTE_CONTACT": "Unblock Contact", + "MUTED_SUCCESS": "This contact is blocked successfully. You will not be notified of any future conversations.", + "UNMUTED_SUCCESS": "This contact is unblocked successfully.", + "SEND_TRANSCRIPT": "Send Transcript", + "EDIT_LABEL": "Edit", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Custom Attributes", + "CONTACT_LABELS": "Contact Labels", + "PREVIOUS_CONVERSATIONS": "Previous Conversations", + "NO_RECORDS_FOUND": "No attributes found" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Edit Contact", + "TITLE": "Edit contact", + "DESC": "Edit contact details" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Delete Contact", + "TITLE": "Delete contact", + "DESC": "Delete contact details", + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete", + "NO": "No, Keep" + }, + "API": { + "SUCCESS_MESSAGE": "Contact deleted successfully", + "ERROR_MESSAGE": "Could not delete contact. Please try again later." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "बुझाउनुहोस्", + "CANCEL": "Cancel", + "AVATAR": { + "LABEL": "Contact Avatar" + }, + "NAME": { + "PLACEHOLDER": "Enter the full name of the contact", + "LABEL": "Full Name" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio of the contact", + "LABEL": "Bio" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address of the contact", + "LABEL": "Email Address", + "DUPLICATE": "This email address is in use for another contact.", + "ERROR": "Please enter a valid email address." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number of the contact", + "LABEL": "Phone Number", + "HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]", + "ERROR": "Phone number should be either empty or of E.164 format", + "DIAL_CODE_ERROR": "Please select a dial code from the list", + "DUPLICATE": "This phone number is in use for another contact." + }, + "LOCATION": { + "PLACEHOLDER": "Enter the location of the contact", + "LABEL": "Location" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Enter the company name", + "LABEL": "Company Name" + }, + "COUNTRY": { + "PLACEHOLDER": "Enter the country name", + "LABEL": "Country Name", + "SELECT_PLACEHOLDER": "Select", + "REMOVE": "Remove", + "SELECT_COUNTRY": "Select Country" + }, + "CITY": { + "PLACEHOLDER": "Enter the city name", + "LABEL": "City Name" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Enter the Facebook username", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Enter the Twitter username", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Enter the LinkedIn username", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Enter the Github username", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Contact avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later." + } + }, + "SUCCESS_MESSAGE": "Contact saved successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Start conversation", + "TITLE": "New conversation", + "DESC": "Start a new conversation by sending a new message.", + "NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.", + "FORM": { + "TO": { + "LABEL": "To" + }, + "INBOX": { + "LABEL": "Inbox", + "PLACEHOLDER": "Choose source inbox", + "ERROR": "Select an inbox" + }, + "SUBJECT": { + "LABEL": "Subject", + "PLACEHOLDER": "Subject", + "ERROR": "Subject can't be empty" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Write your message here", + "ERROR": "Message can't be empty" + }, + "ATTACHMENTS": { + "SELECT": "Choose files", + "HELP_TEXT": "Drag and drop files here or choose files to attach" + }, + "SUBMIT": "Send message", + "CANCEL": "Cancel", + "SUCCESS_MESSAGE": "Message sent!", + "GO_TO_CONVERSATION": "View", + "ERROR_MESSAGE": "Couldn't send! try again" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Social Profiles" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Add custom attribute", + "COPY_SUCCESSFUL": "Copied to clipboard successfully", + "SHOW_MORE": "Show all attributes", + "SHOW_LESS": "Show less attributes", + "ACTIONS": { + "COPY": "Copy attribute", + "DELETE": "Delete attribute", + "EDIT": "Edit attribute" + }, + "ADD": { + "TITLE": "Create custom attribute", + "DESC": "Add custom information to this contact." + }, + "FORM": { + "CREATE": "Add attribute", + "CANCEL": "Cancel", + "NAME": { + "LABEL": "Custom attribute name", + "PLACEHOLDER": "Eg: shopify id", + "ERROR": "Invalid custom attribute name" + }, + "VALUE": { + "LABEL": "Attribute value", + "PLACEHOLDER": "Eg: 11901 " + }, + "ADD": { + "TITLE": "Create new attribute ", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Select value", + "SEARCH_INPUT_PLACEHOLDER": "Search value", + "NO_RESULT": "No result found" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Valid value is required", + "INVALID_URL": "Invalid URL", + "INVALID_INPUT": "Invalid Input" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Merge contacts", + "DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact’ s attributes will take precedence.", + "PRIMARY": { + "TITLE": "Primary contact", + "HELP_LABEL": "To be deleted" + }, + "PARENT": { + "TITLE": "Contact to merge", + "PLACEHOLDER": "Search for a contact", + "HELP_LABEL": "To be kept" + }, + "SUMMARY": { + "TITLE": "Summary", + "DELETE_WARNING": "Contact of {primaryContactName} will be deleted.", + "ATTRIBUTE_WARNING": "Contact details of {primaryContactName} will be copied to {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": " Merge contacts", + "CANCEL": "Cancel", + "CHILD_CONTACT": { + "ERROR": "Select a child contact to merge" + }, + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Contacts", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "Active contacts", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "Message", + "SEND_MESSAGE": "Send message", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "Contacts" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Add contact", + "EXPORT_CONTACT": "Export contacts", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Save contact", + "EMAIL_ADDRESS_DUPLICATE": "This email address is in use for another contact.", + "PHONE_NUMBER_DUPLICATE": "This phone number is in use for another contact.", + "SUCCESS_MESSAGE": "Contact saved successfully", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "This contact is unblocked successfully", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Import contacts", + "DESCRIPTION": "Import contacts through a CSV file.", + "DOWNLOAD_LABEL": "Download a sample csv.", + "LABEL": "CSV File:", + "CHOOSE_FILE": "Choose file", + "CHANGE": "Change", + "CANCEL": "Cancel", + "IMPORT": "Import", + "SUCCESS_MESSAGE": "You will be notified via email when the import is complete.", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "EXPORT_CONTACT": { + "TITLE": "Export contacts", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Export", + "SUCCESS_MESSAGE": "Export is in progress, You will be notified via email when export file is ready to dowanlod.", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "Name", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "COMPANY": "Company", + "COUNTRY": "Country", + "CITY": "City", + "LAST_ACTIVITY": "Last activity", + "CREATED_AT": "Created at" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Do you want to save this filter?", + "CONFIRM": "Save filter", + "LABEL": "Name", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "Confirm Deletion", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "Yes, Delete", + "CANCEL": "No, Cancel", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "Name", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "COUNTRY": "Country", + "CITY": "City", + "CREATED_AT": "Created at", + "LAST_ACTIVITY": "Last activity", + "REFERER_LINK": "Referer link", + "BLOCKED": "Blocked", + "BLOCKED_TRUE": "True", + "BLOCKED_FALSE": "False", + "BUTTONS": { + "CLEAR_FILTERS": "Clear filters", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "Apply filters", + "ADD_FILTER": "Add filter" + }, + "TITLE": "Filter contacts", + "EDIT_SEGMENT": "Edit segment", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Clear filters" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "View details", + "EDIT_DETAILS_FORM": { + "TITLE": "Edit contact details", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "This email address is in use for another contact." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "This phone number is in use for another contact." + }, + "CITY": { + "PLACEHOLDER": "Enter the city name" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Enter the company name" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "This action is permanent and irreversible.", + "BUTTON": "Delete now" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "Delete contact", + "DELETE_DIALOG": { + "TITLE": "Confirm Deletion", + "DESCRIPTION": "Are you sure you want to delete this contact?", + "CONFIRM": "Yes, Delete", + "API": { + "SUCCESS_MESSAGE": "Contact deleted successfully", + "ERROR_MESSAGE": "Could not delete contact. Please try again later." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributes", + "HISTORY": "History", + "NOTES": "Notes", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "There are no previous conversations associated to this contact" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "Yes", + "NO": "No", + "TRIGGER": { + "SELECT": "Select value", + "INPUT": "Enter value" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "Valid value is required", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "Invalid URL", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "No attributes found", + "API": { + "SUCCESS_MESSAGE": "Attribute updated successfully", + "DELETE_SUCCESS_MESSAGE": "Attribute deleted successfully", + "UPDATE_ERROR": "Unable to update attribute. Please try again later", + "DELETE_ERROR": "Unable to delete attribute. Please try again later" + } + }, + "MERGE": { + "TITLE": "Merge contact", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Primary contact", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "To be deleted", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Search for a contact", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!", + "IS_SEARCHING": "Searching...", + "BUTTONS": { + "CANCEL": "Cancel", + "CONFIRM": "Merge contact" + } + }, + "NOTES": { + "PLACEHOLDER": "Add a note", + "WROTE": "wrote", + "YOU": "You", + "SAVE": "Save note", + "ADD_NOTE": "Add contact note", + "EXPAND": "Expand", + "COLLAPSE": "Collapse", + "NO_NOTES": "No notes, you can add notes from the contact details page.", + "EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "No contacts found in this account", + "SUBTITLE": "Start adding new contacts by clicking on the button below", + "BUTTON_LABEL": "Add contact", + "SEARCH_EMPTY_STATE_TITLE": "No contacts matches your search 🔍", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Assign Labels", + "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "Delete", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Delete contact" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "View", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "To:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Subject :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "Bcc:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "Bcc" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Write your message here..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Variables", + "BACK": "Go back", + "SEND_MESSAGE": "Send message" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Go back", + "SEND_MESSAGE": "Send message" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/contactFilters.json b/app/javascript/dashboard/i18n/locale/ne/contactFilters.json new file mode 100644 index 0000000..4cc1fe5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filter Contacts", + "SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.", + "EDIT_CUSTOM_SEGMENT": "Edit Segment", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your segment.", + "ADD_NEW_FILTER": "Add Filter", + "CLEAR_ALL_FILTERS": "Clear All Filters", + "FILTER_DELETE_ERROR": "You should have atleast one filter to save", + "SUBMIT_BUTTON_LABEL": "बुझाउनुहोस्", + "UPDATE_BUTTON_LABEL": "Update Segment", + "CANCEL_BUTTON_LABEL": "Cancel", + "CLEAR_BUTTON_LABEL": "Clear Filters", + "EMPTY_VALUE_ERROR": "Value is required", + "SEGMENT_LABEL": "Segment Name", + "SEGMENT_QUERY_LABEL": "Segment Query", + "TOOLTIP_LABEL": "Filter contacts", + "QUERY_DROPDOWN_LABELS": { + "AND": "AND", + "OR": "OR" + }, + "OPERATOR_LABELS": { + "equal_to": "Equal to", + "not_equal_to": "Not equal to", + "contains": "Contains", + "does_not_contain": "Does not contain", + "is_present": "Is present", + "is_not_present": "Is not present", + "is_greater_than": "Is greater than", + "is_lesser_than": "Is lesser than", + "days_before": "Is x days before" + }, + "ERRORS": { + "VALUE_REQUIRED": "Value is required" + }, + "ATTRIBUTES": { + "NAME": "Name", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "CITY": "City", + "COUNTRY": "Country", + "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_TEXT": "Text", + "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Created At", + "LAST_ACTIVITY": "Last Activity", + "REFERER_LINK": "Referrer link", + "BLOCKED": "Blocked", + "LABELS": "Labels" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard Filters", + "ADDITIONAL_FILTERS": "Additional Filters", + "CUSTOM_ATTRIBUTES": "Custom Attributes" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/contentTemplates.json b/app/javascript/dashboard/i18n/locale/ne/contentTemplates.json new file mode 100644 index 0000000..79c2c8c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "NO_CONTENT": "No content", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Text" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Back", + "SEND_MESSAGE_BUTTON": "Send Message" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/conversation.json b/app/javascript/dashboard/i18n/locale/ne/conversation.json new file mode 100644 index 0000000..45560d9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Please select a conversation from left pane", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", + "404": "Sorry, we cannot find the conversation. Please try again", + "SWITCH_VIEW_LAYOUT": "Switch the layout", + "DASHBOARD_APP_TAB_MESSAGES": "Messages", + "UNVERIFIED_SESSION": "The identity of this user is not verified", + "NO_MESSAGE_1": "Uh oh! Looks like there are no messages from customers in your inbox.", + "NO_MESSAGE_2": " to send a message to your page!", + "NO_INBOX_1": "Hola! Looks like you haven't added any inboxes yet.", + "NO_INBOX_2": " to get started", + "NO_INBOX_AGENT": "Uh Oh! Looks like you are not part of any inbox. Please contact your administrator", + "SEARCH_MESSAGES": "Search for messages in conversations", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "to open command menu", + "KEYBOARD_SHORTCUTS": "to view keyboard shortcuts" + }, + "SEARCH": { + "TITLE": "Search messages", + "RESULT_TITLE": "Search Results", + "LOADING_MESSAGE": "Crunching data...", + "PLACEHOLDER": "Type any text to search messages", + "NO_MATCHING_RESULTS": "No results found." + }, + "UNREAD_MESSAGES": "Unread Messages", + "UNREAD_MESSAGE": "Unread Message", + "CLICK_HERE": "Click here", + "LOADING_INBOXES": "Loading inboxes", + "LOADING_CONVERSATIONS": "Loading Conversations", + "CANNOT_REPLY": "You cannot reply due to", + "24_HOURS_WINDOW": "24 hour message window restriction", + "48_HOURS_WINDOW": "48 hour message window restriction", + "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours", + "NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?", + "ASSIGN_TO_ME": "Assign to me", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hour message window restriction", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "You are replying to:", + "REMOVE_SELECTION": "Remove Selection", + "DOWNLOAD": "डाउनलोड", + "UNKNOWN_FILE_TYPE": "Unknown File", + "SAVE_CONTACT": "Save Contact", + "NO_CONTENT": "No content to display", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} has shared a contact", + "LOCATION": "{sender} has shared a location", + "FILE": "{sender} has shared a file", + "MEETING": "{sender} has started a meeting" + }, + "UPLOADING_ATTACHMENTS": "Uploading attachments...", + "REPLIED_TO_STORY": "Replied to your story", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", + "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", + "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", + "NO_RESPONSE": "No response", + "RESPONSE": "Response", + "RATING_TITLE": "Rating", + "FEEDBACK_TITLE": "Feedback", + "REPLY_MESSAGE_NOT_FOUND": "Message not available", + "CARD": { + "SHOW_LABELS": "Show labels", + "HIDE_LABELS": "Hide labels" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "Resolve", + "REOPEN_ACTION": "Reopen", + "OPEN_ACTION": "Open", + "MORE_ACTIONS": "More actions", + "OPEN": "More", + "CLOSE": "बन्दा गार्नुहोस्", + "DETAILS": "details", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", + "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "missed", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Mark as pending", + "SNOOZE_UNTIL": "Snooze", + "SNOOZE": { + "TITLE": "Snooze until", + "NEXT_REPLY": "Next reply", + "TOMORROW": "Tomorrow", + "NEXT_WEEK": "Next week" + } + }, + "MENTION": { + "AGENTS": "Agents", + "TEAMS": "Teams" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Snooze until", + "APPLY": "Snooze", + "CANCEL": "Cancel" + }, + "PRIORITY": { + "TITLE": "Priority", + "OPTIONS": { + "NONE": "None", + "URGENT": "Urgent", + "HIGH": "High", + "MEDIUM": "Medium", + "LOW": "Low" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "None", + "INPUT_PLACEHOLDER": "Select priority", + "NO_RESULTS": "No results found", + "SUCCESSFUL": "Changed priority of conversation id {conversationId} to {priority}", + "FAILED": "Couldn't change priority. Please try again." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Delete conversation #{conversationId}", + "DESCRIPTION": "Are you sure you want to delete this conversation?", + "CONFIRM": "Delete" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Mark as pending", + "RESOLVED": "Mark as resolved", + "MARK_AS_UNREAD": "Mark as unread", + "MARK_AS_READ": "Mark as read", + "REOPEN": "Reopen conversation", + "SNOOZE": { + "TITLE": "Snooze", + "NEXT_REPLY": "Until next reply", + "TOMORROW": "Until tomorrow", + "NEXT_WEEK": "Until next week" + }, + "ASSIGN_AGENT": "Assign agent", + "ASSIGN_LABEL": "Assign label", + "AGENTS_LOADING": "Loading agents...", + "ASSIGN_TEAM": "Assign team", + "DELETE": "Delete conversation", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Conversation id {conversationId} assigned to \"{agentName}\"", + "FAILED": "Couldn't assign agent. Please try again." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Couldn't assign label. Please try again." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Assigned team \"{team}\" to conversation id {conversationId}", + "FAILED": "Couldn't assign team. Please try again." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Message signature", + "ENABLE_SIGN_TOOLTIP": "Enable signature", + "DISABLE_SIGN_TOOLTIP": "Disable signature", + "MSG_INPUT": "Shift + enter for new line. Start with '/' to select a Canned Response.", + "PRIVATE_MSG_INPUT": "Shift + enter for new line. This will be visible only to Agents", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.", + "CLICK_HERE": "Click here to update", + "WHATSAPP_TEMPLATES": "Whatsapp Templates" + }, + "REPLYBOX": { + "REPLY": "Reply", + "PRIVATE_NOTE": "Private Note", + "SEND": "Send", + "CREATE": "Add Note", + "INSERT_READ_MORE": "Read more", + "DISMISS_REPLY": "Dismiss reply", + "REPLYING_TO": "Replying to:", + "TIP_EMOJI_ICON": "Show emoji selector", + "TIP_ATTACH_ICON": "Attach files", + "TIP_AUDIORECORDER_ICON": "Record audio", + "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", + "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "DRAG_DROP": "Drag and drop here to attach", + "START_AUDIO_RECORDING": "Start audio recording", + "STOP_AUDIO_RECORDING": "Stop audio recording", + "": "", + "EMAIL_HEAD": { + "TO": "TO", + "ADD_BCC": "Add bcc", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + }, + "BCC": { + "LABEL": "BCC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Undefined variables", + "MESSAGE": "You have {undefinedVariablesCount} undefined variables in your message: {undefinedVariables}. Would you like to send the message anyway?", + "CONFIRM": { + "YES": "Send", + "CANCEL": "Cancel" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "Private Note: Only visible to you and your team", + "CHANGE_STATUS": "Conversation status changed", + "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_AGENT": "Conversation Assignee changed", + "CHANGE_AGENT_FAILED": "Assignee change failed", + "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", + "ASSIGN_LABEL_FAILED": "Label assignment failed", + "CHANGE_TEAM": "Conversation team changed", + "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", + "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", + "MESSAGE_ERROR": "Unable to send this message, please try again later", + "SENT_BY": "Sent by:", + "BOT": "Bot", + "SEND_FAILED": "Couldn't send message! Try again", + "TRY_AGAIN": "retry", + "ASSIGNMENT": { + "SELECT_AGENT": "Select Agent", + "REMOVE": "Remove", + "ASSIGN": "Assign" + }, + "CONTEXT_MENU": { + "COPY": "Copy", + "REPLY_TO": "Reply to this message", + "DELETE": "Delete", + "CREATE_A_CANNED_RESPONSE": "Add to canned responses", + "TRANSLATE": "Translate", + "COPY_PERMALINK": "Copy link to the message", + "LINK_COPIED": "Message URL copied to the clipboard", + "DELETE_CONFIRMATION": { + "TITLE": "Are you sure you want to delete this message?", + "MESSAGE": "You cannot undo this action", + "DELETE": "Delete", + "CANCEL": "Cancel" + } + }, + "SIDEBAR": { + "CONTACT": "Contact", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Send conversation transcript", + "DESC": "Send a copy of the conversation transcript to the specified email address", + "SUBMIT": "बुझाउनुहोस्", + "CANCEL": "Cancel", + "SEND_EMAIL_SUCCESS": "The chat transcript was sent successfully", + "SEND_EMAIL_ERROR": "There was an error, please try again", + "FORM": { + "SEND_TO_CONTACT": "Send the transcript to the customer", + "SEND_TO_AGENT": "Send the transcript to the assigned agent", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Send the transcript to another email address", + "EMAIL": { + "PLACEHOLDER": "Enter an email address", + "ERROR": "Please enter a valid email address" + } + } + }, + "ONBOARDING": { + "TITLE": "Hey 👋, Welcome to {installationName}!", + "DESCRIPTION": "Thanks for signing up. We want you to get the most out of {installationName}. Here are a few things you can do in {installationName} to make the experience delightful.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "Read our latest updates", + "ALL_CONVERSATION": { + "TITLE": "All your conversations in one place", + "DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status.", + "NEW_LINK": "Click here to create an inbox" + }, + "TEAM_MEMBERS": { + "TITLE": "Invite your team members", + "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.", + "NEW_LINK": "Click here to invite a team member" + }, + "LABELS": { + "TITLE": "Organize conversations with labels", + "DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.", + "NEW_LINK": "Click here to create tags" + }, + "CANNED_RESPONSES": { + "TITLE": "Create canned responses", + "DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.", + "NEW_LINK": "Click here to create a canned response" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Assigned Agent", + "SELF_ASSIGN": "Assign to me", + "TEAM_LABEL": "Assigned Team", + "SELECT": { + "PLACEHOLDER": "None" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Contact Details", + "CONVERSATION_ACTIONS": "Conversation Actions", + "CONVERSATION_LABELS": "Conversation Labels", + "CONVERSATION_INFO": "Conversation Information", + "CONTACT_NOTES": "Contact Notes", + "CONTACT_ATTRIBUTES": "Contact Attributes", + "PREVIOUS_CONVERSATION": "Previous Conversations", + "MACROS": "Macros", + "LINEAR_ISSUES": "Linked Linear Issues", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "Pending", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Create attribute", + "NO_RECORDS_FOUND": "No attributes found", + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "ADD": { + "TITLE": "Add", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + } + }, + "EMAIL_HEADER": { + "FROM": "From", + "TO": "To", + "BCC": "Bcc", + "CC": "Cc", + "SUBJECT": "Subject", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Participating", + "SIDEBAR_TITLE": "Conversation participants", + "NO_RECORDS_FOUND": "No results found", + "ADD_PARTICIPANTS": "Select participants", + "REMANING_PARTICIPANTS_TEXT": "+{count} others", + "REMANING_PARTICIPANT_TEXT": "+{count} other", + "TOTAL_PARTICIPANTS_TEXT": "{count} people are participating.", + "TOTAL_PARTICIPANT_TEXT": "{count} person is participating.", + "NO_PARTICIPANTS_TEXT": "No one is participating!.", + "WATCH_CONVERSATION": "Join conversation", + "YOU_ARE_WATCHING": "You are participating", + "API": { + "ERROR_MESSAGE": "Could not update, try again!", + "SUCCESS_MESSAGE": "Participants updated!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "View translated content", + "DESC": "You can view the translated content in each langauge.", + "ORIGINAL_CONTENT": "Original Content", + "TRANSLATED_CONTENT": "Translated Content", + "NO_TRANSLATIONS_AVAILABLE": "No translations are available for this content" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/csatMgmt.json b/app/javascript/dashboard/i18n/locale/ne/csatMgmt.json new file mode 100644 index 0000000..9e16dc2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Rate your conversation", + "PLACEHOLDER": "Tell us more...", + "RATINGS": { + "POOR": "😞 Poor", + "FAIR": "😑 Fair", + "AVERAGE": "😐 Average", + "GOOD": "😀 Good", + "EXCELLENT": "😍 Excellent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/customRole.json b/app/javascript/dashboard/i18n/locale/ne/customRole.json new file mode 100644 index 0000000..5588f67 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Custom Roles", + "LEARN_MORE": "Learn more about custom roles", + "DESCRIPTION": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "HEADER_BTN_TXT": "Add custom role", + "LOADING": "Fetching custom roles...", + "SEARCH_404": "There are no items matching this query.", + "PAYWALL": { + "TITLE": "Upgrade to create custom roles", + "AVAILABLE_ON": "The custom role feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The custom role feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Manage custom roles", + "DESC": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "TABLE_HEADER": { + "NAME": "Name", + "DESCRIPTION": "Description", + "PERMISSIONS": "Permissions", + "ACTIONS": "Actions" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "Name is required." + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "Description is required." + }, + "PERMISSIONS": { + "LABEL": "Permissions", + "ERROR": "Permissions are required." + }, + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "ADD": { + "TITLE": "Add custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "बुझाउनुहोस्", + "API": { + "SUCCESS_MESSAGE": "Custom role added successfully." + } + }, + "EDIT": { + "BUTTON_TEXT": "Edit", + "TITLE": "Edit custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Update", + "API": { + "SUCCESS_MESSAGE": "Custom role updated successfully." + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Custom role deleted successfully.", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, delete ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/datePicker.json b/app/javascript/dashboard/i18n/locale/ne/datePicker.json new file mode 100644 index 0000000..c7ef068 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Apply", + "CLEAR_BUTTON": "Clear", + "DATE_RANGE_INPUT": { + "START": "Start Date", + "END": "End Date" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "DATE RANGE", + "LAST_7_DAYS": "Last 7 days", + "LAST_30_DAYS": "Last 30 days", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_RANGE": "Custom date range" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/emoji.json b/app/javascript/dashboard/i18n/locale/ne/emoji.json new file mode 100644 index 0000000..d5b96f0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Search emojis", + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/general.json b/app/javascript/dashboard/i18n/locale/ne/general.json new file mode 100644 index 0000000..c46aeae --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Showing {firstIndex}-{lastIndex} of {totalCount} items", + "PHONE_INPUT": { + "PLACEHOLDER": "Search", + "EMPTY_STATE": "No results found" + }, + "CLOSE": "बन्दा गार्नुहोस्", + "BETA": "Beta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/generalSettings.json b/app/javascript/dashboard/i18n/locale/ne/generalSettings.json new file mode 100644 index 0000000..d924bff --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.", + "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.", + "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.", + "NON_ADMIN": "Please contact your administrator to upgrade the plan and continue using all features." + }, + "TITLE": "Account settings", + "SUBMIT": "Update settings", + "BACK": "Back", + "DISMISS": "Dismiss", + "UPDATE": { + "ERROR": "Could not update settings, try again!", + "SUCCESS": "Successfully updated account settings" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Delete your Account", + "NOTE": "Once you delete your account, all your data will be deleted.", + "BUTTON_TEXT": "Delete Your Account", + "CONFIRM": { + "TITLE": "Delete Account", + "MESSAGE": "Deleting your Account is irreversible. Enter your account name below to confirm you want to permanently delete it.", + "BUTTON_TEXT": "Delete", + "DISMISS": "Cancel", + "PLACE_HOLDER": "Please type {accountName} to confirm" + }, + "SUCCESS": "Account marked for deletion", + "FAILURE": "Could not delete account, try again!", + "SCHEDULED_DELETION": { + "TITLE": "Account Scheduled for Deletion", + "MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.", + "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.", + "CLEAR_BUTTON": "Cancel Scheduled Deletion" + } + }, + "FORM": { + "ERROR": "Please fix form errors", + "GENERAL_SECTION": { + "TITLE": "General settings", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "Account ID", + "NOTE": "This ID is required if you are building an API based integration" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.", + "DURATION": { + "LABEL": "Inactivity duration", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Preferences", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "Account name", + "PLACEHOLDER": "Your account name", + "ERROR": "Please enter a valid account name" + }, + "LANGUAGE": { + "LABEL": "Site language", + "PLACEHOLDER": "Your account name", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Incoming Email Domain", + "PLACEHOLDER": "The domain where you will receive the emails", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "Support Email", + "PLACEHOLDER": "Your company's support email", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclude unattended conversations", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a conversation should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "Update", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "Conversation continuity with emails is enabled for your account.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "You can receive emails in your custom domain now." + } + }, + "UPDATE_CHATWOOT": "An update {latestChatwootVersion} for Chatwoot is available. Please update your instance.", + "LEARN_MORE": "Learn more", + "PAYMENT_PENDING": "Your payment is pending. Please update your payment information to continue using Chatwoot", + "UPGRADE": "Upgrade to continue using Chatwoot", + "LIMITS_UPGRADE": "Your account has exceeded the usage limits, please upgrade your plan to continue using Chatwoot", + "OPEN_BILLING": "Open billing" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Press enter to select", + "ENTER_TO_REMOVE": "Press enter to remove", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "Select one", + "SELECT": "Select" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Notifications", + "MARK_ALL_DONE": "Mark All Done", + "DELETE_TITLE": "deleted", + "UNREAD_NOTIFICATION": { + "TITLE": "Unread Notifications", + "ALL_NOTIFICATIONS": "View all notifications", + "LOADING_UNREAD_MESSAGE": "Loading unread notifications...", + "EMPTY_MESSAGE": "You have no unread notifications" + }, + "LIST": { + "LOADING_MESSAGE": "Loading notifications...", + "404": "No Notifications", + "TABLE_HEADER": [ + "Name", + "Phone Number", + "Conversations", + "Last Contacted" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "New conversation", + "conversation_assignment": "Conversation Assigned", + "assigned_conversation_new_message": "New Message", + "participating_conversation_new_message": "New Message", + "conversation_mention": "Mention", + "sla_missed_first_response": "SLA Missed", + "sla_missed_next_response": "SLA Missed", + "sla_missed_resolution": "SLA Missed" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Offline", + "RECONNECTING": "Reconnecting...", + "RECONNECT_SUCCESS": "Reconnected" + }, + "BUTTON": { + "REFRESH": "Refresh" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Search or jump to", + "SECTIONS": { + "GENERAL": "General", + "REPORTS": "Reports", + "CONVERSATION": "Conversation", + "BULK_ACTIONS": "Bulk Actions", + "CHANGE_ASSIGNEE": "Change Assignee", + "CHANGE_PRIORITY": "Change Priority", + "CHANGE_TEAM": "Change Team", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "ADD_LABEL": "Add label to the conversation", + "REMOVE_LABEL": "Remove label from the conversation", + "SETTINGS": "Settings", + "AI_ASSIST": "AI Assist", + "APPEARANCE": "Appearance", + "SNOOZE_NOTIFICATION": "Snooze Notification" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview", + "GO_TO_CONVERSATION_REPORTS": "Go to Conversation Reports", + "GO_TO_AGENT_REPORTS": "Go to Agent Reports", + "GO_TO_LABEL_REPORTS": "Go to Label Reports", + "GO_TO_INBOX_REPORTS": "Go to Inbox Reports", + "GO_TO_TEAM_REPORTS": "Go to Team Reports", + "GO_TO_SETTINGS_AGENTS": "Go to Agent Settings", + "GO_TO_SETTINGS_TEAMS": "Go to Team Settings", + "GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings", + "GO_TO_SETTINGS_LABELS": "Go to Label Settings", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings", + "GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings", + "GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings", + "GO_TO_SETTINGS_PROFILE": "Go to Profile Settings", + "GO_TO_NOTIFICATIONS": "Go to Notifications", + "ADD_LABELS_TO_CONVERSATION": "Add label to the conversation", + "ASSIGN_AN_AGENT": "Assign an agent", + "AI_ASSIST": "AI Assist", + "ASSIGN_PRIORITY": "Assign priority", + "ASSIGN_A_TEAM": "Assign a team", + "MUTE_CONVERSATION": "Mute conversation", + "UNMUTE_CONVERSATION": "Unmute conversation", + "REMOVE_LABEL_FROM_CONVERSATION": "Remove label from the conversation", + "REOPEN_CONVERSATION": "Reopen conversation", + "RESOLVE_CONVERSATION": "Resolve conversation", + "SEND_TRANSCRIPT": "Send an email transcript", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "UNTIL_NEXT_REPLY": "Until next reply", + "UNTIL_NEXT_WEEK": "Until next week", + "UNTIL_TOMORROW": "Until tomorrow", + "UNTIL_NEXT_MONTH": "Until next month", + "AN_HOUR_FROM_NOW": "Until an hour from now", + "UNTIL_CUSTOM_TIME": "Custom...", + "CHANGE_APPEARANCE": "Change Appearance", + "LIGHT_MODE": "Light", + "DARK_MODE": "Dark", + "SYSTEM_MODE": "System", + "SNOOZE_NOTIFICATION": "Snooze Notification" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Loading Dashboard App..." + }, + "COMMON": { + "OR": "Or", + "CLICK_HERE": "click here" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/helpCenter.json b/app/javascript/dashboard/i18n/locale/ne/helpCenter.json new file mode 100644 index 0000000..760e2b6 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Help Center", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "Create Portal" + }, + "HEADER": { + "FILTER": "Filter by", + "SORT": "Sort by", + "LOCALE": "Locale", + "SETTINGS_BUTTON": "Settings", + "NEW_BUTTON": "New Article", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Published", + "DRAFT": "Draft", + "ARCHIVED": "Archived" + }, + "TITLES": { + "ALL_ARTICLES": "All Articles", + "MINE": "My Articles", + "DRAFT": "Draft Articles", + "ARCHIVED": "Archived Articles" + }, + "LOCALE_SELECT": { + "TITLE": "Select locale", + "PLACEHOLDER": "Select locale", + "NO_RESULT": "No locale found", + "SEARCH_PLACEHOLDER": "Search locale" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "All Articles", + "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", + "PREVIEW": "Preview", + "ADD_TRANSLATION": "Add translation", + "OPEN_SIDEBAR": "Open sidebar", + "CLOSE_SIDEBAR": "Close sidebar", + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Upload image", + "UPLOADING": "अपलोड गर्दै...", + "SUCCESS": "Image uploaded successfully", + "ERROR": "Error while uploading image", + "UN_AUTHORIZED_ERROR": "You are not authorized to upload images", + "ERROR_FILE_SIZE": "Image size should be less than {size}MB", + "ERROR_FILE_FORMAT": "Image format should be jpg, jpeg or png", + "ERROR_FILE_DIMENSIONS": "Image dimensions should be less than 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Article Settings", + "FORM": { + "CATEGORY": { + "LABEL": "Category", + "TITLE": "Select category", + "PLACEHOLDER": "Select category", + "NO_RESULT": "No category found", + "SEARCH_PLACEHOLDER": "Search category" + }, + "AUTHOR": { + "LABEL": "Author", + "TITLE": "Select author", + "PLACEHOLDER": "Select author", + "NO_RESULT": "No authors found", + "SEARCH_PLACEHOLDER": "Search author" + }, + "META_TITLE": { + "LABEL": "Meta title", + "PLACEHOLDER": "Add a meta title" + }, + "META_DESCRIPTION": { + "LABEL": "Meta description", + "PLACEHOLDER": "Add your meta description for better SEO results..." + }, + "META_TAGS": { + "LABEL": "Meta tags", + "PLACEHOLDER": "Add meta tags separated by comma..." + } + }, + "BUTTONS": { + "ARCHIVE": "Archive article", + "DELETE": "Delete article" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Uncategorized", + "SEARCH_RESULTS": "Search results for {query}", + "EMPTY_TEXT": "Search for articles to insert into replies.", + "SEARCH_LOADER": "Searching...", + "INSERT_ARTICLE": "Insert", + "NO_RESULT": "No articles found", + "COPY_LINK": "Copy article link to clipboard", + "OPEN_LINK": "Open article in new tab", + "PREVIEW_LINK": "Preview article" + }, + "PORTAL": { + "HEADER": "Portals", + "DEFAULT": "Default", + "NEW_BUTTON": "New Portal", + "ACTIVE_BADGE": "active", + "CHOOSE_LOCALE_LABEL": "Choose a locale", + "LOADING_MESSAGE": "Loading portals...", + "ARTICLES_LABEL": "articles", + "NO_PORTALS_MESSAGE": "There are no available portals", + "ADD_NEW_LOCALE": "Add a new locale", + "POPOVER": { + "TITLE": "Portals", + "PORTAL_SETTINGS": "Portal settings", + "SUBTITLE": "You have multiple portals and can have different locales for each portal.", + "CANCEL_BUTTON_LABEL": "Cancel", + "CHOOSE_LOCALE_BUTTON": "Choose Locale" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "articles", + "ADD": "Add locale", + "VISIT": "Visit site", + "SETTINGS": "Settings", + "DELETE": "Delete" + }, + "PORTAL_CONFIG": { + "TITLE": "Portal Configurations", + "ITEMS": { + "NAME": "Name", + "DOMAIN": "Custom domain", + "SLUG": "Slug", + "TITLE": "Portal title", + "THEME": "Theme color", + "SUB_TEXT": "Portal sub text" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Available locales", + "TABLE": { + "NAME": "Locale name", + "CODE": "Locale code", + "ARTICLE_COUNT": "No. of articles", + "CATEGORIES": "No. of categories", + "SWAP": "Swap", + "DELETE": "Delete", + "DEFAULT_LOCALE": "Default" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Name", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Help center information", + "BODY": "Basic information about portal" + }, + "CUSTOMIZATION": { + "TITLE": "Help center customization", + "BODY": "Customize portal" + }, + "FINISH": { + "TITLE": "Voila! 🎉", + "BODY": "You're all set!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Back", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Create Portal", + "TITLE": "Help center information", + "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Portal customisation", + "TITLE": "Help center customization", + "UPDATE_PORTAL_BUTTON": "Update portal settings" + }, + "FINISH_PAGE": { + "TITLE": "Voila!🎉 You're all set up!", + "MESSAGE": "You can now see this created portal on your all portals page.", + "FINISH": "Go to all portals page" + } + }, + "LOGO": { + "LABEL": "Logo", + "UPLOAD_BUTTON": "Upload logo", + "HELP_TEXT": "This logo will be displayed on the portal header.", + "IMAGE_UPLOAD_SUCCESS": "Logo uploaded successfully", + "IMAGE_UPLOAD_ERROR": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Error while deleting logo" + }, + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Portal name", + "HELP_TEXT": "The name will be used in the public facing portal internally.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug for urls", + "ERROR": "Slug is required" + }, + "DOMAIN": { + "LABEL": "Custom Domain", + "PLACEHOLDER": "Portal custom domain", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}", + "ERROR": "Enter a valid domain URL" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home Page Link", + "PLACEHOLDER": "Portal home page link", + "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}", + "ERROR": "Enter a valid home page URL" + }, + "THEME_COLOR": { + "LABEL": "Portal theme color", + "HELP_TEXT": "This color will show as the theme color for the portal." + }, + "PAGE_TITLE": { + "LABEL": "Page Title", + "PLACEHOLDER": "Portal page title", + "HELP_TEXT": "The page title will be used in the public facing portal.", + "ERROR": "Page title is required" + }, + "HEADER_TEXT": { + "LABEL": "Header Text", + "PLACEHOLDER": "Portal header text", + "HELP_TEXT": "The Portal header text will be used in the public facing portal.", + "ERROR": "Portal header text is required" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", + "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", + "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Loading articles...", + "404": "No articles matches your search 🔍", + "NO_ARTICLES": "There are no available articles", + "HEADERS": { + "TITLE": "Title", + "CATEGORY": "Category", + "READ_COUNT": "Views", + "STATUS": "Status", + "LAST_EDITED": "Last edited" + }, + "COLUMNS": { + "BY": "by", + "AUTHOR_NOT_AVAILABLE": "Author is not available" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Loading article...", + "TITLE_PLACEHOLDER": "Article title goes here", + "CONTENT_PLACEHOLDER": "Write your article here", + "API": { + "ERROR": "Error while saving article" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article published successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Error while drafting article", + "SUCCESS": "Article drafted successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Yes, Delete", + "NO": "No, Keep it" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Search for articles" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Create a category", + "SUB_TITLE": "The category will be used in the public facing portal to categorize articles.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Create category", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Search articles", + "PLACEHOLDER": "Search articles", + "NO_RESULT": "No articles found", + "SEARCHING": "Searching...", + "SEARCH_BUTTON": "Search", + "INSERT_ARTICLE": "Insert link", + "IFRAME_ERROR": "URL is empty or invalid. Unable to display content.", + "OPEN_ARTICLE_SEARCH": "Insert article from Help Center", + "SUCCESS_ARTICLE_INSERTED": "Article inserted successfully", + "PREVIEW_LINK": "Preview article", + "CANCEL": "बन्दा गार्नुहोस्", + "BACK": "Back", + "BACK_RESULTS": "Back to results" + }, + "UPGRADE_PAGE": { + "TITLE": "Help Center", + "DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Upgrade your subscription to enable this feature.", + "SELF_HOSTED_DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Please contact your administrator to enable this feature.", + "BUTTON": { + "LEARN_MORE": "Learn more", + "UPGRADE": "Upgrade" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Multiple portals", + "DESCRIPTION": "Create multiple help center portals for different products using the same account." + }, + "LOCALES": { + "TITLE": "Full support for locales", + "DESCRIPTION": "Localize the portal in your language. We support all locales and allow translations for every article." + }, + "SEO": { + "TITLE": "SEO-friendly design", + "DESCRIPTION": "Customize your meta tags to improve your visibility on search engines with our SEO-friendly pages." + }, + "API": { + "TITLE": "Full API support", + "DESCRIPTION": "Use the portal as a headless CMS with third party front-end frameworks using our APIs." + } + } + }, + "LOADING": "Loading...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} view | {count} views", + "DROPDOWN_MENU": { + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "DELETE": "Delete" + }, + "STATUS": { + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "UNCATEGORISED": "Uncategorised" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "All articles", + "MINE": "Mine", + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "ALL": "All categories" + }, + "LOCALE": { + "ALL": "All locales" + }, + "NEW_ARTICLE": "New article" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Write an article", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "New article" + }, + "MINE": { + "TITLE": "You haven't written any articles here", + "SUBTITLE": "All articles written by you show up here for quick access." + }, + "DRAFT": { + "TITLE": "There are no articles in drafts", + "SUBTITLE": "Draft articles will appear here" + }, + "PUBLISHED": { + "TITLE": "There are no published articles", + "SUBTITLE": "Published articles will appear here" + }, + "ARCHIVED": { + "TITLE": "There are no articles in the archive", + "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages" + }, + "CATEGORY": { + "TITLE": "There are no articles in this category", + "SUBTITLE": "Articles in this category will appear here" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "New category", + "EDIT_CATEGORY": "Edit category", + "CATEGORIES_COUNT": "{n} category | {n} categories", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categories ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "No categories found", + "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + }, + "HEADER": { + "CREATE": "Create category", + "EDIT": "Edit category", + "DESCRIPTION": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale" + }, + "FORM": { + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "ERROR": "Slug is required", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + } + }, + "BUTTONS": { + "CREATE": "Create", + "EDIT": "Update", + "CANCEL": "Cancel" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "No locales available | {n} locale | {n} locales", + "NEW_LOCALE_BUTTON_TEXT": "New locale", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles", + "CATEGORIES_COUNT": "{count} category | {count} categories", + "DEFAULT": "Default", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Make default", + "DELETE": "Delete" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Add a new locale", + "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", + "COMBOBOX": { + "PLACEHOLDER": "Select locale..." + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "PREVIEW": "Preview", + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "BACK_TO_ARTICLES": "Back to articles" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "More properties", + "UNCATEGORIZED": "Uncategorized", + "EDITOR_PLACEHOLDER": "Write something..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Article properties", + "META_DESCRIPTION": "Meta description", + "META_DESCRIPTION_PLACEHOLDER": "Add meta description", + "META_TITLE": "Meta title", + "META_TITLE_PLACEHOLDER": "Add meta title", + "META_TAGS": "Meta tags", + "META_TAGS_PLACEHOLDER": "Add meta tags" + }, + "API": { + "ERROR": "Error while saving article" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "New portal", + "PORTALS": "Portals", + "CREATE_PORTAL": "Create and manage multiple portals", + "ARTICLES": "articles", + "DOMAIN": "domain", + "PORTAL_NAME": "Portal name" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Create new portal", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "Create", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "User Guide | Chatwoot", + "MESSAGE": "Choose an name for your portal.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Slug is required", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logo", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo", + "IMAGE_DELETE_SUCCESS": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Unable to delete logo", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Portal name", + "ERROR": "Name is required" + }, + "HEADER_TEXT": { + "LABEL": "Header text", + "PLACEHOLDER": "Portal header text" + }, + "PAGE_TITLE": { + "LABEL": "Page title", + "PLACEHOLDER": "Portal page title" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home page link", + "PLACEHOLDER": "Portal home page link", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Live chat widget", + "PLACEHOLDER": "Select live chat widget", + "HELP_TEXT": "Select a live chat widget that will appear on your help center", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Brand color" + }, + "SAVE_CHANGES": "Save changes" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Custom domain", + "LABEL": "Custom domain:", + "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Portal custom domain", + "EDIT_BUTTON": "Edit", + "ADD_BUTTON": "Add custom domain", + "STATUS": { + "LIVE": "Live", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Add custom domain", + "EDIT_HEADER": "Edit custom domain", + "ADD_CONFIRM_BUTTON_LABEL": "Add domain", + "EDIT_CONFIRM_BUTTON_LABEL": "Update domain", + "LABEL": "Custom domain", + "PLACEHOLDER": "Portal custom domain", + "ERROR": "Custom domain is required", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS configuration", + "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "Send" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Delete {portalName}", + "HEADER": "Delete portal", + "DESCRIPTION": "Permanently delete this portal. This action is irreversible", + "DIALOG": { + "HEADER": "Sure you want to delete {portalName}?", + "DESCRIPTION": "This is a permanent action that cannot be reversed.", + "CONFIRM_BUTTON_LABEL": "Delete" + } + }, + "EDIT_CONFIGURATION": "Edit configuration" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal created successfully", + "ERROR_MESSAGE": "Unable to create portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal updated successfully", + "ERROR_MESSAGE": "Unable to update portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "अपलोड गर्दै...", + "UPLOAD": "Upload & Process", + "CANCEL": "Cancel", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Generating...", + "CONFIRM_DELETE": "Are you sure you want to delete {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Completed", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/inbox.json b/app/javascript/dashboard/i18n/locale/ne/inbox.json new file mode 100644 index 0000000..385e9e4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "My Inbox", + "DISPLAY_DROPDOWN": "Display", + "LOADING": "Fetching notifications", + "404": "There are no active notifications in this group.", + "NO_NOTIFICATIONS": "No notifications", + "NOTE": "Notifications from all subscribed inboxes", + "NO_MESSAGES_AVAILABLE": "Oops! Not able to fetch messages", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week" + }, + "ACTION_HEADER": { + "SNOOZE": "Snooze notification", + "DELETE": "Delete notification", + "BACK": "Back" + }, + "TYPES": { + "CONVERSATION_MENTION": "You have been mentioned in a conversation", + "CONVERSATION_CREATION": "New conversation created", + "CONVERSATION_ASSIGNMENT": "A conversation has been assigned to you", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message in a conversation you are participating in", + "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation", + "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation", + "SLA_MISSED_RESOLUTION": "SLA target resolution missed for conversation" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Mentioned", + "CONVERSATION_ASSIGNMENT": "Assigned to you", + "CONVERSATION_CREATION": "New Conversation", + "SLA_MISSED_FIRST_RESPONSE": "SLA breach", + "SLA_MISSED_NEXT_RESPONSE": "SLA breach", + "SLA_MISSED_RESOLUTION": "SLA breach", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message", + "SNOOZED_UNTIL": "Snoozed for {time}", + "SNOOZED_ENDS": "Snooze ended" + }, + "NO_CONTENT": "No content available", + "MENU_ITEM": { + "MARK_AS_READ": "Mark as read", + "MARK_AS_UNREAD": "Mark as unread", + "SNOOZE": "Snooze", + "DELETE": "Delete", + "MARK_ALL_READ": "Mark all as read", + "DELETE_ALL": "Delete all", + "DELETE_ALL_READ": "Delete all read" + }, + "DISPLAY_MENU": { + "SORT": "Sort", + "DISPLAY": "Display :", + "SORT_OPTIONS": { + "NEWEST": "Newest", + "OLDEST": "Oldest", + "PRIORITY": "Priority" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Snoozed", + "READ": "Read", + "LABELS": "Labels", + "CONVERSATION_ID": "Conversation ID" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notification marked as read", + "MARK_AS_UNREAD": "Notification marked as unread", + "SNOOZE": "Notification snoozed", + "DELETE": "Notification deleted", + "MARK_ALL_READ": "All notifications marked as read", + "DELETE_ALL": "All notifications deleted", + "DELETE_ALL_READ": "All read notifications deleted" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json new file mode 100644 index 0000000..887963c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Inboxes", + "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.", + "LEARN_MORE": "Learn more about inboxes", + "RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.", + "CLICK_TO_RECONNECT": "Click here to reconnect.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "There are no inboxes attached to this account." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Choose Channel", + "BODY": "Choose the provider you want to integrate with Chatwoot." + }, + "INBOX": { + "TITLE": "Create Inbox", + "BODY": "Authenticate your account and create an inbox." + }, + "AGENT": { + "TITLE": "Add Agents", + "BODY": "Add agents to the created inbox." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "You are all set to go!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Enter your inbox name (eg: Acme Inc)", + "ERROR": "Please enter a valid inbox name" + }, + "WEBSITE_NAME": { + "LABEL": "Website Name", + "PLACEHOLDER": "Enter your website name (eg: Acme Inc)" + }, + "FB": { + "HELP": "PS: By signing in, we only get access to your Page's messages. Your private messages can never be accessed by Chatwoot.", + "CHOOSE_PAGE": "Choose Page", + "CHOOSE_PLACEHOLDER": "Select a page from the list", + "INBOX_NAME": "Inbox Name", + "ADD_NAME": "Add a name for your inbox", + "PICK_NAME": "Pick a Name for your Inbox", + "PICK_A_VALUE": "Pick a value", + "CREATE_INBOX": "Create Inbox" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continue with Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile", + "HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ", + "ERROR_MESSAGE": "There was an error connecting to Instagram, please try again", + "ERROR_AUTH": "There was an error connecting to Instagram, please try again", + "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "To add your Twitter profile as a channel, you need to authenticate your Twitter Profile by clicking on 'Sign in with Twitter' ", + "ERROR_MESSAGE": "There was an error connecting to Twitter, please try again", + "TWEETS": { + "ENABLE": "Create conversations from mentioned Tweets" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Website channel", + "DESC": "Create a channel for your website and start supporting your customers via our website widget.", + "LOADING_MESSAGE": "Creating Website Support Channel", + "CHANNEL_AVATAR": { + "LABEL": "Channel Avatar" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "Please enter your Webhook URL", + "ERROR": "Please enter a valid URL" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Website Domain", + "PLACEHOLDER": "Enter your website domain (eg: acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Welcome Heading", + "PLACEHOLDER": "Hi there !" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Welcome Tagline", + "PLACEHOLDER": "We make it simple to connect with us. Ask us anything, or share your feedback." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Channel greeting message", + "PLACEHOLDER": "Acme Inc typically replies in a few hours." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Enable channel greeting", + "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "REPLY_TIME": { + "TITLE": "Set Reply time", + "IN_A_FEW_MINUTES": "In a few minutes", + "IN_A_FEW_HOURS": "In a few hours", + "IN_A_DAY": "In a day", + "HELP_TEXT": "This reply time will be displayed on the live chat widget" + }, + "WIDGET_COLOR": { + "LABEL": "Widget Color", + "PLACEHOLDER": "Update the widget color used in widget" + }, + "SUBMIT_BUTTON": "Create inbox", + "API": { + "ERROR_MESSAGE": "We were not able to create a website channel, please try again" + } + }, + "TWILIO": { + "TITLE": "Twilio SMS/WhatsApp Channel", + "DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "Account SID", + "PLACEHOLDER": "Please enter your Twilio Account SID", + "ERROR": "This field is required" + }, + "API_KEY": { + "USE_API_KEY": "Use API Key Authentication", + "LABEL": "API Key SID", + "PLACEHOLDER": "Please enter your API Key SID", + "ERROR": "This field is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Please enter your API Key Secret", + "ERROR": "This field is required" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "Messaging Service SID", + "PLACEHOLDER": "Please enter your Twilio Messaging Service SID", + "ERROR": "This field is required", + "USE_MESSAGING_SERVICE": "Use a Twilio Messaging Service" + }, + "CHANNEL_TYPE": { + "LABEL": "Channel Type", + "ERROR": "Please select your Channel Type" + }, + "AUTH_TOKEN": { + "LABEL": "Auth Token", + "PLACEHOLDER": "Please enter your Twilio Auth Token", + "ERROR": "This field is required" + }, + "CHANNEL_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone Number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the message callback URL in Twilio with the URL mentioned here." + }, + "SUBMIT_BUTTON": "Create Twilio Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Twilio credentials, please try again" + } + }, + "SMS": { + "TITLE": "SMS Channel", + "DESC": "Start supporting your customers via SMS.", + "PROVIDERS": { + "LABEL": "API Provider", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandwidth" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the SMS channel" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "Account ID", + "PLACEHOLDER": "Please enter your Bandwidth Account ID", + "ERROR": "This field is required" + }, + "API_KEY": { + "LABEL": "API Key", + "PLACEHOLDER": "Please enter your Bandwidth API Key", + "ERROR": "This field is required" + }, + "API_SECRET": { + "LABEL": "API Secret", + "PLACEHOLDER": "Please enter your Bandwidth API Secret", + "ERROR": "This field is required" + }, + "APPLICATION_ID": { + "LABEL": "Application ID", + "PLACEHOLDER": "Please enter your Bandwidth Application ID", + "ERROR": "This field is required" + }, + "INBOX_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "SUBMIT_BUTTON": "Create Bandwidth Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Bandwidth credentials, please try again" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the message callback URL in Bandwidth with the URL mentioned here." + } + } + }, + "WHATSAPP": { + "TITLE": "WhatsApp Channel", + "DESC": "Start supporting your customers via WhatsApp.", + "PROVIDERS": { + "LABEL": "API Provider", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter an inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "PHONE_NUMBER_ID": { + "LABEL": "Phone number ID", + "PLACEHOLDER": "Please enter the Phone number ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "Business Account ID", + "PLACEHOLDER": "Please enter the Business Account ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook Verify Token", + "PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.", + "ERROR": "Please enter a valid value." + }, + "API_KEY": { + "LABEL": "API key", + "SUBTITLE": "Configure the WhatsApp API key.", + "PLACEHOLDER": "API key", + "ERROR": "Please enter a valid value." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL and the verification token in the Facebook Developer portal with the values shown below.", + "WEBHOOK_URL": "Webhook URL", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook Verification Token" + }, + "SUBMIT_BUTTON": "Create WhatsApp Channel", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "Phone Number", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "Account SID", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "Auth Token", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "API Key SID", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "API Channel", + "DESC": "Integrate with API channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "SUBTITLE": "Configure the URL where you want to receive callbacks on events.", + "PLACEHOLDER": "Webhook URL" + }, + "SUBMIT_BUTTON": "Create API Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the api channel" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "Email Channel", + "DESC": "Integrate your email inbox.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "EMAIL": { + "LABEL": "Email", + "SUBTITLE": "Email where your customers sends you support tickets", + "PLACEHOLDER": "Email" + }, + "SUBMIT_BUTTON": "Create Email Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the email channel" + }, + "FINISH_MESSAGE": "Start forwarding your emails to the following email address.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "Click here", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "LINE Channel", + "DESC": "Integrate with LINE channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "LINE_CHANNEL_ID": { + "LABEL": "LINE Channel ID", + "PLACEHOLDER": "LINE Channel ID" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "LINE Channel Secret", + "PLACEHOLDER": "LINE Channel Secret" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "LINE Channel Token", + "PLACEHOLDER": "LINE Channel Token" + }, + "SUBMIT_BUTTON": "Create LINE Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the LINE channel" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL in LINE application with the URL mentioned here." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Telegram Channel", + "DESC": "Integrate with Telegram channel and start supporting your customers.", + "BOT_TOKEN": { + "LABEL": "Bot Token", + "SUBTITLE": "Configure the bot token you have obtained from Telegram BotFather.", + "PLACEHOLDER": "Bot Token" + }, + "SUBMIT_BUTTON": "Create Telegram Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the telegram channel" + } + }, + "AUTH": { + "TITLE": "Choose a channel", + "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Website", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "Email", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Agents", + "DESC": "Here you can add agents to manage your newly created inbox. Only these selected agents will have access to your inbox. Agents which are not part of this inbox will not be able to see or respond to messages in this inbox when they login.Webhooks
Webhooks are HTTP callbacks which can be defined for every account. They are triggered by events like message creation in Chatwoot. You can create more than one webhook for this account.
For creating a webhook, click on the Add new webhook button. You can also remove any existing webhook by clicking on the Delete button.
Dashboard Apps
Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.
When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.
To add a new dashboard app, click on the button 'Add a new dashboard app'.
", + "DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.", + "LEARN_MORE": "Learn more about Dashboard Apps", + "LIST": { + "404": "There are no dashboard apps configured on this account yet", + "LOADING": "Fetching dashboard apps...", + "TABLE_HEADER": { + "NAME": "Name", + "ENDPOINT": "Endpoint" + }, + "EDIT_TOOLTIP": "Edit app", + "DELETE_TOOLTIP": "Delete app" + }, + "FORM": { + "TITLE_LABEL": "Name", + "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", + "TITLE_ERROR": "A name for the dashboard app is required", + "URL_LABEL": "Endpoint", + "URL_PLACEHOLDER": "Enter the endpoint URL where your app is hosted", + "URL_ERROR": "A valid URL is required" + }, + "CREATE": { + "HEADER": "Add a new dashboard app", + "FORM_SUBMIT": "बुझाउनुहोस्", + "FORM_CANCEL": "Cancel", + "API_SUCCESS": "Dashboard app configured successfully", + "API_ERROR": "We couldn't create an app. Please try again later" + }, + "UPDATE": { + "HEADER": "Edit dashboard app", + "FORM_SUBMIT": "Update", + "FORM_CANCEL": "Cancel", + "API_SUCCESS": "Dashboard app updated successfully", + "API_ERROR": "We couldn't update the app. Please try again later" + }, + "DELETE": { + "CONFIRM_YES": "Yes, delete it", + "CONFIRM_NO": "No, keep it", + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete the app - {appName}?", + "API_SUCCESS": "Dashboard app deleted successfully", + "API_ERROR": "We couldn't delete the app. Please try again later" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "Fetching linear issues...", + "LOADING_ERROR": "There was an error fetching the linear issues, please try again", + "CREATE": "Create", + "LINK": { + "SEARCH": "Search issues", + "SELECT": "Select issue", + "TITLE": "Link", + "EMPTY_LIST": "No linear issues found", + "LOADING": "Loading", + "ERROR": "There was an error fetching the linear issues, please try again", + "LINK_SUCCESS": "Issue linked successfully", + "LINK_ERROR": "There was an error linking the issue, please try again", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "Create Linear issues from conversations, or link existing ones for seamless tracking.", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter title", + "REQUIRED_ERROR": "Title is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Enter description" + }, + "TEAM": { + "LABEL": "Team", + "PLACEHOLDER": "Select team", + "SEARCH": "Search team", + "REQUIRED_ERROR": "Team is required" + }, + "ASSIGNEE": { + "LABEL": "Assignee", + "PLACEHOLDER": "Select assignee", + "SEARCH": "Search assignee" + }, + "PRIORITY": { + "LABEL": "Priority", + "PLACEHOLDER": "Select priority", + "SEARCH": "Search priority" + }, + "LABEL": { + "LABEL": "Label", + "PLACEHOLDER": "Select label", + "SEARCH": "Search label" + }, + "STATUS": { + "LABEL": "Status", + "PLACEHOLDER": "Select status", + "SEARCH": "Search status" + }, + "PROJECT": { + "LABEL": "Project", + "PLACEHOLDER": "Select project", + "SEARCH": "Search project" + } + }, + "CREATE": "Create", + "CANCEL": "Cancel", + "CREATE_SUCCESS": "Issue created successfully", + "CREATE_ERROR": "There was an error creating the issue, please try again", + "LOADING_TEAM_ERROR": "There was an error fetching the teams, please try again", + "LOADING_TEAM_ENTITIES_ERROR": "There was an error fetching the team entities, please try again" + }, + "ISSUE": { + "STATUS": "Status", + "PRIORITY": "Priority", + "ASSIGNEE": "Assignee", + "LABELS": "Labels", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Unlink", + "SUCCESS": "Issue unlinked successfully", + "ERROR": "There was an error unlinking the issue, please try again" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Yes, delete", + "CANCEL": "Cancel" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Yes, delete", + "CANCEL": "Cancel" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "Send message...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Captain is thinking", + "YOU": "You", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "You", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "Type your message...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "Cancel", + "CREATE": "Create", + "EDIT": "Update" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "Update", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "Features", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "Features", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "Settings", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Delete" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "Create", + "CANCEL": "Cancel", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Delete" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "Create", + "CANCEL": "Cancel", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Delete" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "Create", + "CANCEL": "Cancel" + } + } + }, + "UPDATE": { + "CANCEL": "Cancel", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "None", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "API Key" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "Password", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Type" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Number", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Required" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "Delete", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "All" + }, + "STATUS": { + "TITLE": "Status", + "PENDING": "Pending", + "APPROVED": "Approved", + "ALL": "All" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "Edit", + "DELETE_RESPONSE": "Delete" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Disconnect" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "Inbox", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/ne/labelsMgmt.json new file mode 100644 index 0000000..705b18d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Labels", + "HEADER_BTN_TXT": "Add label", + "LOADING": "Fetching labels", + "DESCRIPTION": "Labels help you categorize and prioritize conversations and leads. You can assign a label to a conversation or contact using the side panel.", + "LEARN_MORE": "Learn more about labels", + "SEARCH_404": "There are no items matching this query", + "LIST": { + "404": "There are no labels available in this account.", + "TITLE": "Manage labels", + "DESC": "Labels let you group the conversations together.", + "TABLE_HEADER": { + "NAME": "Name", + "DESCRIPTION": "Description", + "COLOR": "Color" + } + }, + "FORM": { + "NAME": { + "LABEL": "Label Name", + "PLACEHOLDER": "Label name", + "REQUIRED_ERROR": "Label name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Label Description" + }, + "COLOR": { + "LABEL": "Color" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Show label on sidebar" + }, + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Delete", + "CANCEL": "Cancel" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Add label to conversation", + "MULTIPLE_SUGGESTION": "Select this label", + "DESELECT": "Deselect label", + "DISMISS": "Dismiss suggestion" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Dismiss", + "ADD_SELECTED_LABELS": "Add selected labels", + "ADD_SELECTED_LABEL": "Add selected label", + "ADD_ALL_LABELS": "Add all labels", + "SUGGESTED_LABELS": "Suggested labels" + }, + "ADD": { + "TITLE": "Add label", + "DESC": "Labels let you group the conversations together.", + "API": { + "SUCCESS_MESSAGE": "Label added successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "EDIT": { + "TITLE": "Edit label", + "API": { + "SUCCESS_MESSAGE": "Label updated successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Label deleted successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/login.json b/app/javascript/dashboard/i18n/locale/ne/login.json new file mode 100644 index 0000000..a34ed17 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Login to Chatwoot", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "Please enter a valid email address" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password" + }, + "API": { + "SUCCESS_MESSAGE": "Login successful", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again.", + "UNAUTH": "Username or password is incorrect. Please try again." + }, + "OAUTH": { + "GOOGLE_LOGIN": "Login with Google", + "BUSINESS_ACCOUNTS_ONLY": "Please use your company email address to login", + "NO_ACCOUNT_FOUND": "We couldn't find an account for your email address." + }, + "FORGOT_PASSWORD": "Forgot your password?", + "CREATE_NEW_ACCOUNT": "Create new account", + "SUBMIT": "Login", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/macros.json b/app/javascript/dashboard/i18n/locale/ne/macros.json new file mode 100644 index 0000000..fcb409f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Macros", + "DESCRIPTION": "A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click.", + "LEARN_MORE": "Learn more about macros", + "HEADER_BTN_TXT": "Add a new macro", + "HEADER_BTN_TXT_SAVE": "Save macro", + "LOADING": "Fetching macros", + "ERROR": "Something went wrong. Please try again", + "ORDER_INFO": "Macros will run in the order you add your actions. You can rearrange them by dragging them by the handle beside each node.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Macro name", + "PLACEHOLDER": "Enter a name for your macro", + "ERROR": "Name is required for creating a macro" + }, + "ACTIONS": { + "LABEL": "Actions" + } + }, + "API": { + "SUCCESS_MESSAGE": "Macro added successfully", + "ERROR_MESSAGE": "Unable to create macro, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Name", + "CREATED BY": "Created by", + "LAST_UPDATED_BY": "Last updated by", + "VISIBILITY": "Visibility" + }, + "404": "No macros found" + }, + "DELETE": { + "TOOLTIP": "Delete macro", + "CONFIRM": { + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete", + "NO": "No" + }, + "API": { + "SUCCESS_MESSAGE": "Macro deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the macro. Please try again later" + } + }, + "EDIT": { + "TOOLTIP": "Edit macro", + "API": { + "SUCCESS_MESSAGE": "Macro updated successfully", + "ERROR_MESSAGE": "Could not update Macro, Please try again later" + } + }, + "EDITOR": { + "START_FLOW": "Start Flow", + "END_FLOW": "End Flow", + "LOADING": "Fetching macro", + "ADD_BTN_TOOLTIP": "Add new action", + "DELETE_BTN_TOOLTIP": "Delete Action", + "VISIBILITY": { + "LABEL": "Macro Visibility", + "GLOBAL": { + "LABEL": "Public", + "DESCRIPTION": "This macro is available publicly for all agents in this account." + }, + "PERSONAL": { + "LABEL": "Private", + "DESCRIPTION": "This macro will be private to you and not be available to others." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Execute", + "PREVIEW": "Preview Macro", + "EXECUTED_SUCCESSFULLY": "Macro executed successfully" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Value is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Assign a Team", + "ASSIGN_AGENT": "Assign an Agent", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Mute Conversation", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "CHANGE_PRIORITY": "Change Priority", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "SEND_WEBHOOK_EVENT": "Send Webhook Event" + }, + "PRIORITY_TYPES": { + "NONE": "None", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/mfa.json b/app/javascript/dashboard/i18n/locale/ne/mfa.json new file mode 100644 index 0000000..9cef374 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "Enabled", + "DISABLED": "Disabled", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Loading...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "Copy", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "Cancel", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "डाउनलोड", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "Password", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "Cancel", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "Cancel", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/report.json b/app/javascript/dashboard/i18n/locale/ne/report.json new file mode 100644 index 0000000..a2ad6bd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Conversations", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "DATA_FETCHING_FAILED": "Failed to fetch data, please try again later.", + "SUMMARY_FETCHING_FAILED": "Failed to fetch summary, please try again later.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Handoff Count", + "DESC": "( Total )" + }, + "REPLY_TIME": { + "NAME": "Customer waiting time", + "TOOLTIP_TEXT": "Waiting time is {metricValue} (based on {conversationCount} replies)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "Last 7 days", + "LAST_14_DAYS": "Last 14 days", + "LAST_30_DAYS": "Last 30 days", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_DATE_RANGE": "Custom date range" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Group By", + "DURATION_FILTER_LABEL": "Duration", + "GROUPING_OPTIONS": { + "DAY": "Day", + "WEEK": "Week", + "MONTH": "Month", + "YEAR": "Month" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "BUSINESS_HOURS": "Business Hours", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "No results found" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Agents Overview", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "FILTER_DROPDOWN_LABEL": "Select Agent", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "LABEL_REPORTS": { + "HEADER": "Labels Overview", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_LABEL_REPORTS": "Download label reports", + "FILTER_DROPDOWN_LABEL": "Select Label", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "INBOX_REPORTS": { + "HEADER": "Inbox Overview", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_INBOX_REPORTS": "Download inbox reports", + "FILTER_DROPDOWN_LABEL": "Select Inbox", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "TEAM_REPORTS": { + "HEADER": "Team Overview", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_TEAM_REPORTS": "Download team reports", + "FILTER_DROPDOWN_LABEL": "Select Team", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "CSAT_REPORTS": { + "HEADER": "CSAT Reports", + "NO_RECORDS": "There are no CSAT survey responses available.", + "DOWNLOAD": "Download CSAT Reports", + "DOWNLOAD_FAILED": "Failed to download CSAT Reports", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Choose Agents" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Contact", + "AGENT_NAME": "Assigned agent", + "RATING": "Rating", + "FEEDBACK_TEXT": "Feedback comment" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Total responses", + "TOOLTIP": "Total number of responses collected" + }, + "SATISFACTION_SCORE": { + "LABEL": "Satisfaction score", + "TOOLTIP": "Total number of positive responses / Total number of responses * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Response rate", + "TOOLTIP": "Total number of responses / Total number of CSAT survey messages sent * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Bot Reports", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "No. of Conversations", + "TOOLTIP": "Total number of conversations handled by the bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total Responses", + "TOOLTIP": "Total number of responses sent by the bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Resolution Rate", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Handoff Rate", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Overview", + "LIVE": "Live", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Open Conversations", + "LOADING_MESSAGE": "Loading conversation metrics...", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "UNASSIGNED": "Unassigned", + "PENDING": "Pending" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Conversation Traffic", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Conversations by agents", + "LOADING_MESSAGE": "Loading agent metrics...", + "NO_AGENTS": "There are no conversations by agents", + "TABLE_HEADER": { + "AGENT": "Agent", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "STATUS": "Status" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Team", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "STATUS": "Status" + } + }, + "AGENT_STATUS": { + "HEADER": "Agent status", + "ONLINE": "Online", + "BUSY": "Busy", + "OFFLINE": "Offline" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Sunday", + "MONDAY": "Monday", + "TUESDAY": "Tuesday", + "WEDNESDAY": "Wednesday", + "THURSDAY": "Thursday", + "FRIDAY": "Friday", + "SATURDAY": "Saturday" + }, + "SLA_REPORTS": { + "HEADER": "SLA Reports", + "NO_RECORDS": "SLA applied conversations are not available.", + "LOADING": "Loading SLA data...", + "DOWNLOAD_SLA_REPORTS": "Download SLA reports", + "DOWNLOAD_FAILED": "Failed to download SLA Reports", + "DROPDOWN": { + "ADD_FIlTER": "Add filter", + "CLEAR_ALL": "Clear all", + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "No results found", + "NO_FILTER": "No filters available", + "SEARCH": "Search filter", + "INPUT_PLACEHOLDER": { + "SLA": "SLA name", + "AGENTS": "Agent name", + "INBOXES": "Inbox name", + "LABELS": "Label name", + "TEAMS": "Team name" + }, + "SLA": "SLA Policy", + "INBOXES": "Inbox", + "AGENTS": "Agent", + "LABELS": "Label", + "TEAMS": "Team" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentage of SLAs created were completed successfully" + }, + "NO_OF_MISSES": { + "LABEL": "Number of Misses", + "TOOLTIP": "Total SLA misses in a certain period" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Number of Conversations", + "TOOLTIP": "Total number of conversations with SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "Conversation", + "AGENT": "Agent" + }, + "VIEW_DETAILS": "View Details" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Inbox", + "AGENT": "Agent", + "TEAM": "Team", + "LABEL": "Label", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "Resolution Count", + "CONVERSATIONS": "No. of conversations" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/resetPassword.json b/app/javascript/dashboard/i18n/locale/ne/resetPassword.json new file mode 100644 index 0000000..51521fd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Reset password", + "DESCRIPTION": "Enter the email address you use to log in to Chatwoot to get the password reset instructions.", + "GO_BACK_TO_LOGIN": "If you want to go back to the login page,", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "Please enter your email.", + "ERROR": "Please enter a valid email." + }, + "API": { + "SUCCESS_MESSAGE": "Password reset link has been sent to your email.", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again." + }, + "SUBMIT": "बुझाउनुहोस्" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/search.json b/app/javascript/dashboard/i18n/locale/ne/search.json new file mode 100644 index 0000000..2fc8e79 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "Contacts", + "CONVERSATIONS": "Conversations", + "MESSAGES": "Messages", + "ARTICLES": "Articles" + }, + "SECTION": { + "CONTACTS": "Contacts", + "CONVERSATIONS": "Conversations", + "MESSAGES": "Messages", + "ARTICLES": "Articles" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "Searching", + "LOADING_DATA": "Loading", + "EMPTY_STATE": "No {item} found for query '{query}'", + "EMPTY_STATE_FULL": "No results found for query '{query}'", + "PLACEHOLDER_KEYBINDING": "/to focus", + "INPUT_PLACEHOLDER": "Type 3 or more characters to search", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Clear all", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Search by conversation id, email, phone number, messages for better search results. ", + "BOT_LABEL": "Bot", + "READ_MORE": "Read more", + "READ_LESS": "Read less", + "WROTE": "wrote:", + "FROM": "From", + "EMAIL": "Email", + "EMAIL_SUBJECT": "Subject", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "Last 7 days", + "LAST_30_DAYS": "Last 30 days", + "LAST_60_DAYS": "Last 60 days", + "LAST_90_DAYS": "Last 90 days", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "Apply", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Clear filter" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Sender", + "IN": "Inbox", + "AGENTS": "Agents", + "CONTACTS": "Contacts", + "INBOXES": "Inboxes", + "NO_AGENTS": "No agents found", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/setNewPassword.json b/app/javascript/dashboard/i18n/locale/ne/setNewPassword.json new file mode 100644 index 0000000..9144cf3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Set new password", + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password", + "ERROR": "Password is too short." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm password", + "PLACEHOLDER": "Confirm Password", + "ERROR": "Passwords do not match." + }, + "API": { + "SUCCESS_MESSAGE": "Successfully changed the password.", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again." + }, + "CAPTCHA": { + "ERROR": "Verification expired. Please solve captcha again." + }, + "SUBMIT": "बुझाउनुहोस्" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/settings.json b/app/javascript/dashboard/i18n/locale/ne/settings.json new file mode 100644 index 0000000..c12f560 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Profile Settings", + "TITLE": "Profile Settings", + "BTN_TEXT": "Update Profile", + "DELETE_AVATAR": "Delete Avatar", + "AVATAR_DELETE_SUCCESS": "Avatar has been deleted successfully", + "AVATAR_DELETE_FAILED": "There is an error while deleting avatar, please try again", + "UPDATE_SUCCESS": "Your profile has been updated successfully", + "PASSWORD_UPDATE_SUCCESS": "Your password has been changed successfully", + "AFTER_EMAIL_CHANGED": "Your profile has been updated successfully, please login again as your login credentials are changed", + "FORM": { + "PICTURE": "Profile Picture", + "AVATAR": "Profile Image", + "ERROR": "Please fix form errors", + "REMOVE_IMAGE": "Remove", + "UPLOAD_IMAGE": "Upload image", + "UPDATE_IMAGE": "Update image", + "PROFILE_SECTION": { + "TITLE": "Profile", + "NOTE": "Your email address is your identity and is used to log in." + }, + "SEND_MESSAGE": { + "TITLE": "Hotkey to send messages", + "NOTE": "You can select a hotkey (either Enter or Cmd/Ctrl+Enter) based on your preference of writing.", + "UPDATE_SUCCESS": "Your settings have been updated successfully", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Send messages by pressing Enter key instead of clicking the send button." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Send messages by pressing Cmd/Ctrl + enter key instead of clicking the send button." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Default", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Personal message signature", + "NOTE": "Create a unique message signature to appear at the end of every message you send from any inbox. You can also include an inline image, which is supported in live-chat, email, and API inboxes.", + "BTN_TEXT": "Save message signature", + "API_ERROR": "Couldn't save signature! Try again", + "API_SUCCESS": "Signature saved successfully", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save to save the signature", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Message Signature", + "ERROR": "Message Signature cannot be empty", + "PLACEHOLDER": "Insert your personal message signature here." + }, + "PASSWORD_SECTION": { + "TITLE": "Password", + "NOTE": "Updating your password would reset your logins in multiple devices.", + "BTN_TEXT": "Change password" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "Access Token", + "NOTE": "This token can be used if you are building an API based integration", + "COPY": "Copy", + "RESET": "Reset", + "CONFIRM_RESET": "Are you sure?", + "CONFIRM_HINT": "Click again to confirm", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Alerts", + "NOTE": "Enable audio alerts in dashboard for new messages and conversations.", + "PLAY": "Play sound", + "ALERT_TYPES": { + "NONE": "None", + "MINE": "Assigned", + "ALL": "All", + "ASSIGNED": "My assigned conversations", + "UNASSIGNED": "Unassigned conversations", + "NOTME": "Open conversations assigned to others" + }, + "ALERT_COMBINATIONS": { + "NONE": "You haven't selected any options, you won't receive any audio alerts.", + "ASSIGNED": "You'll receive alerts for conversations assigned to you.", + "UNASSIGNED": "You'll receive alerts for any unassigned conversations.", + "NOTME": "You'll receive alerts for conversations assigned to others.", + "ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.", + "ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.", + "NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.", + "ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations." + }, + "ALERT_TYPE": { + "TITLE": "Alert events for conversations", + "NONE": "None", + "ASSIGNED": "Assigned Conversations", + "ALL_CONVERSATIONS": "All Conversations" + }, + "DEFAULT_TONE": { + "TITLE": "Alert tone:" + }, + "CONDITIONS": { + "TITLE": "Alert conditions:", + "CONDITION_ONE": "Send audio alerts only if the browser window is not active", + "CONDITION_TWO": "Send alerts every 30s until all the assigned conversations are read" + }, + "SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.", + "READ_MORE": "Read more" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "Email Notifications", + "NOTE": "Update your email notification preferences here", + "CONVERSATION_ASSIGNMENT": "Send email notifications when a conversation is assigned to me", + "CONVERSATION_CREATION": "Send email notifications when a new conversation is created", + "CONVERSATION_MENTION": "Send email notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "Send email notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send email notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send email notifications when a conversation misses resolution SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Notification preferences", + "TYPE_TITLE": "Notification type", + "EMAIL": "Email", + "PUSH": "Push notification", + "TYPES": { + "CONVERSATION_CREATED": "A new conversation is created", + "CONVERSATION_ASSIGNED": "A conversation is assigned to you", + "CONVERSATION_MENTION": "You are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "A new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "A new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "A conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "A conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "A conversation misses resolution SLA" + }, + "BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them" + }, + "API": { + "UPDATE_SUCCESS": "Your notification preferences are updated successfully", + "UPDATE_ERROR": "There is an error while updating the preferences, please try again" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Push Notifications", + "NOTE": "Update your push notification preferences here", + "CONVERSATION_ASSIGNMENT": "Send push notifications when a conversation is assigned to me", + "CONVERSATION_CREATION": "Send push notifications when a new conversation is created", + "CONVERSATION_MENTION": "Send push notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in a participating conversation", + "HAS_ENABLED_PUSH": "You have enabled push for this browser.", + "REQUEST_PUSH": "Enable push notifications", + "SLA_MISSED_FIRST_RESPONSE": "Send push notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send push notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send push notifications when a conversation misses resolution SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "Profile Image" + }, + "NAME": { + "LABEL": "Your full name", + "ERROR": "Please enter a valid full name", + "PLACEHOLDER": "Please enter your full name" + }, + "DISPLAY_NAME": { + "LABEL": "Display name", + "ERROR": "Please enter a valid display name", + "PLACEHOLDER": "Please enter a display name, this would be displayed in conversations" + }, + "AVAILABILITY": { + "LABEL": "Availability", + "STATUS": { + "ONLINE": "Online", + "BUSY": "Busy", + "OFFLINE": "Offline" + }, + "SET_AVAILABILITY_SUCCESS": "Availability has been set successfully", + "SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again", + "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user" + }, + "EMAIL": { + "LABEL": "Your email address", + "ERROR": "Please enter a valid email address", + "PLACEHOLDER": "Please enter your email address, this would be displayed in conversations" + }, + "CURRENT_PASSWORD": { + "LABEL": "Current password", + "ERROR": "Please enter the current password", + "PLACEHOLDER": "Please enter the current password" + }, + "PASSWORD": { + "LABEL": "New password", + "ERROR": "Please enter a password of length 6 or more", + "PLACEHOLDER": "Please enter a new password" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Confirm new password", + "ERROR": "Confirm password should match the password", + "PLACEHOLDER": "Please re-enter your new password" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Change", + "CHANGE_ACCOUNTS": "Switch account", + "SWITCH_ACCOUNT": "Switch account", + "CONTACT_SUPPORT": "Contact support", + "SELECTOR_SUBTITLE": "Select an account from the following list", + "PROFILE_SETTINGS": "Profile settings", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Keyboard shortcuts", + "APPEARANCE": "Change appearance", + "SUPER_ADMIN_CONSOLE": "SuperAdmin console", + "DOCS": "Read documentation", + "CHANGELOG": "Changelog", + "LOGOUT": "Log out" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "days trial remaining.", + "TRAIL_BUTTON": "Buy Now", + "DELETED_USER": "Deleted User", + "EMAIL_VERIFICATION_PENDING": "It seems that you haven't verified your email address yet. Please check your inbox for the verification email.", + "RESEND_VERIFICATION_MAIL": "Resend verification email", + "EMAIL_VERIFICATION_SENT": "Verification email has been sent. Please check your inbox.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Account Suspended", + "MESSAGE": "Your account is suspended. Please reach out to the support team for more information." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Log out" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Copy", + "CODEPEN": "Open in CodePen", + "COPY_SUCCESSFUL": "Code copied to clipboard successfully" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Show More", + "SHOW_LESS": "Show Less" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "डाउनलोड", + "UPLOADING": "अपलोड गर्दै...", + "INSTAGRAM_STORY_UNAVAILABLE": "This story is no longer available." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "See on map" + }, + "FORM_BUBBLE": { + "SUBMIT": "बुझाउनुहोस्" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "This image is no longer available.", + "LOADING_FAILED": "Loading failed" + } + }, + "CONFIRM_EMAIL": "Verifying...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Add Inbox" + } + }, + "SIDEBAR": { + "NO_ITEMS": "No items", + "CURRENTLY_VIEWING_ACCOUNT": "Currently viewing:", + "SWITCH": "Switch", + "INBOX_VIEW": "Inbox View", + "CONVERSATIONS": "Conversations", + "INBOX": "My Inbox", + "ALL_CONVERSATIONS": "All Conversations", + "MENTIONED_CONVERSATIONS": "Mentions", + "PARTICIPATING_CONVERSATIONS": "Participating", + "UNATTENDED_CONVERSATIONS": "Unattended", + "REPORTS": "Reports", + "SETTINGS": "Settings", + "CONTACTS": "Contacts", + "ACTIVE": "Active", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistants", + "CAPTAIN_DOCUMENTS": "Documents", + "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_TOOLS": "Tools", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "Inboxes", + "CAPTAIN_SETTINGS": "Settings", + "HOME": "Home", + "AGENTS": "Agents", + "AGENT_BOTS": "Bots", + "AUDIT_LOGS": "Audit Logs", + "INBOXES": "Inboxes", + "NOTIFICATIONS": "Notifications", + "CANNED_RESPONSES": "Canned Responses", + "INTEGRATIONS": "Integrations", + "PROFILE_SETTINGS": "Profile Settings", + "ACCOUNT_SETTINGS": "Account Settings", + "APPLICATIONS": "Applications", + "LABELS": "Labels", + "CUSTOM_ATTRIBUTES": "Custom Attributes", + "AUTOMATION": "Automation", + "MACROS": "Macros", + "TEAMS": "Teams", + "BILLING": "Billing", + "CUSTOM_VIEWS_FOLDER": "Folders", + "CUSTOM_VIEWS_SEGMENTS": "Segments", + "ALL_CONTACTS": "All Contacts", + "TAGGED_WITH": "Tagged with", + "NEW_LABEL": "New label", + "NEW_TEAM": "New team", + "NEW_INBOX": "New inbox", + "REPORTS_CONVERSATION": "Conversations", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Campaigns", + "ONGOING": "Ongoing", + "ONE_OFF": "One off", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "Bot", + "REPORTS_AGENT": "Agents", + "REPORTS_LABEL": "Labels", + "REPORTS_INBOX": "Inbox", + "REPORTS_TEAM": "Team", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "Set yourself as", + "SET_YOUR_AVAILABILITY": "Set your availability", + "SLA": "SLA", + "CUSTOM_ROLES": "Custom Roles", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Overview", + "REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages", + "HELP_CENTER": { + "TITLE": "Help Center", + "ARTICLES": "Articles", + "CATEGORIES": "Categories", + "LOCALES": "Locales", + "SETTINGS": "Settings" + }, + "CHANNELS": "Channels", + "SET_AUTO_OFFLINE": { + "TEXT": "Mark offline automatically", + "INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard.", + "INFO_SHORT": "Automatically mark offline when you aren't using the app." + }, + "DOCS": "Read docs", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "Billing", + "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "CURRENT_PLAN": { + "TITLE": "Current Plan", + "PLAN_NOTE": "You are currently subscribed to the **{plan}** plan with **{quantity}** licenses", + "SEAT_COUNT": "Number of seats", + "RENEWS_ON": "Renews on" + }, + "VIEW_PRICING": "View Pricing", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Manage your subscription", + "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", + "BUTTON_TXT": "Go to the billing portal" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Manage usage and credits for Captain AI.", + "BUTTON_TXT": "Buy more credits", + "DOCUMENTS": "Documents", + "RESPONSES": "Responses", + "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more.", + "REFRESH_CREDITS": "Refresh" + }, + "CHAT_WITH_US": { + "TITLE": "Need help?", + "DESCRIPTION": "Do you face any issues in billing? We are here to help.", + "BUTTON_TXT": "हामीसँग कुराकानी गर्नुहोस्" + }, + "NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again.", + "TOPUP": { + "BUY_CREDITS": "Buy more credits", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Note:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "Cancel", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Go Back", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "Code copied to clipboard successfully", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.", + "NEW_ACCOUNT": "New Account", + "SELECTOR_SUBTITLE": "Create a new account", + "API": { + "SUCCESS_MESSAGE": "Account created successfully", + "EXIST_MESSAGE": "Account already exists", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "FORM": { + "NAME": { + "LABEL": "Company Name", + "PLACEHOLDER": "Wayne Enterprises" + }, + "SUBMIT": "बुझाउनुहोस्", + "CANCEL": "Cancel" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "View all shortcuts", + "TITLE": { + "OPEN_CONVERSATION": "Open conversation", + "RESOLVE_AND_NEXT": "Resolve and move to next", + "NAVIGATE_DROPDOWN": "Navigate dropdown items", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "ADD_ATTACHMENT": "Add Attachment", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "TOGGLE_SIDEBAR": "Toggle Sidebar", + "GO_TO_REPORTS_SIDEBAR": "Go to Reports sidebar", + "MOVE_TO_NEXT_TAB": "Move to next tab in conversation list", + "GO_TO_SETTINGS": "Go to Settings", + "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", + "SWITCH_TO_REPLY": "Switch to Reply", + "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "Priority", + "ACTIVE": "Active", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "Edit" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Description:", + "PLACEHOLDER": "Enter description" + }, + "STATUS": { + "LABEL": "Status:", + "PLACEHOLDER": "Select status", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "Add" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "Edit" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Description:", + "PLACEHOLDER": "Enter description" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "Add" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "Delete", + "CANCEL_BUTTON_LABEL": "Cancel" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/signup.json b/app/javascript/dashboard/i18n/locale/ne/signup.json new file mode 100644 index 0000000..aa96873 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Create an account", + "TITLE": "Register", + "TESTIMONIAL_HEADER": "All it takes is one step to move forward", + "TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.", + "TERMS_ACCEPT": "By creating an account, you agree to our T & C and Privacy policy", + "OAUTH": { + "GOOGLE_SIGNUP": "Sign up with Google" + }, + "COMPANY_NAME": { + "LABEL": "Company name", + "PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises", + "ERROR": "Company name is too short" + }, + "FULL_NAME": { + "LABEL": "Full name", + "PLACEHOLDER": "Enter your full name. eg: Bruce Wayne", + "ERROR": "Full name is too short" + }, + "EMAIL": { + "LABEL": "Work email", + "PLACEHOLDER": "Enter your work email address. E.g., bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Please enter a valid work email address" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password", + "ERROR": "Password is too short", + "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm Password", + "PLACEHOLDER": "Confirm Password", + "ERROR": "Passwords do not match." + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "SUBMIT": "Create account", + "HAVE_AN_ACCOUNT": "Already have an account?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/sla.json b/app/javascript/dashboard/i18n/locale/ne/sla.json new file mode 100644 index 0000000..0da7873 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Add SLA", + "ADD_ACTION_LONG": "Create a new SLA Policy", + "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", + "LEARN_MORE": "Learn more about SLA", + "LOADING": "Fetching SLAs", + "PAYWALL": { + "TITLE": "Upgrade to create SLAs", + "AVAILABLE_ON": "The SLA feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SLA feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no SLAs available in this account.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Issues raised by enterprise customers, that require immediate attention.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Issues raised by enterprise customers, that needs to be acknowledged quickly." + }, + "BUSINESS_HOURS_ON": "Business hours on", + "BUSINESS_HOURS_OFF": "Business hours off", + "RESPONSE_TYPES": { + "FRT": "First response time threshold", + "NRT": "Next response time threshold", + "RT": "Resolution time threshold", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA Name", + "PLACEHOLDER": "SLA Name", + "REQUIRED_ERROR": "SLA name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "SLA for premium customers" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "First Response Time", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Next Response Time", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "Resolution Time", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Business Hours", + "PLACEHOLDER": "Only during business hours" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Threshold should be a number and greater than zero" + }, + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Delete", + "CANCEL": "Cancel" + }, + "ADD": { + "TITLE": "Add SLA", + "DESC": "Friendly promises for great service!", + "API": { + "SUCCESS_MESSAGE": "SLA added successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "DELETE": { + "TITLE": "Delete SLA", + "API": { + "SUCCESS_MESSAGE": "SLA deleted successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure you want to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + } + }, + "EVENTS": { + "TITLE": "SLA Misses", + "FRT": "First response time", + "NRT": "Next response time", + "RT": "Resolution time", + "SHOW_MORE": "{count} more", + "HIDE": "Hide {count} rows" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/teamsSettings.json b/app/javascript/dashboard/i18n/locale/ne/teamsSettings.json new file mode 100644 index 0000000..f0a950f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Create new team", + "HEADER": "Teams", + "LOADING": "Fetching teams", + "DESCRIPTION": "Teams allow you to organize agents into groups based on their responsibilities. An agent can belong to multiple teams. When working collaboratively, you can assign conversations to specific teams.", + "LEARN_MORE": "Learn more about teams", + "LIST": { + "404": "There are no teams created on this account.", + "EDIT_TEAM": "Edit team", + "NONE": "None" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Create a new team", + "DESC": "Add a title and description to your new team." + }, + "AGENTS": { + "BUTTON_TEXT": "Add agents to team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation." + }, + "WIZARD_CREATE": { + "TITLE": "Create", + "BODY": "Create a new team of agents." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "Add Agents", + "BODY": "Add agents to the team." + }, + "WIZARD_FINISH": { + "TITLE": "Finish", + "BODY": "You are all set to go!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Edit your team details", + "DESC": "Edit title and description to your team.", + "BUTTON_TEXT": "Update team" + }, + "AGENTS": { + "BUTTON_TEXT": "Update agents in team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. All the added agents will be notified when a conversation is assigned to this team." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Team details", + "ROUTE": "settings_teams_edit", + "BODY": "Change name, description and other details." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Edit Agents", + "ROUTE": "settings_teams_edit_members", + "BODY": "Edit agents in your team." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Finish", + "ROUTE": "settings_teams_edit_finish", + "BODY": "You are all set to go!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Couldn't save the team details. Try again." + }, + "AGENTS": { + "AGENT": "AGENT", + "EMAIL": "EMAIL", + "BUTTON_TEXT": "Add agents", + "ADD_AGENTS": "Adding Agents to your Team...", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected." + }, + "ADD": { + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation.", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected.", + "BUTTON_TEXT": "Add agents", + "AGENT_VALIDATION_ERROR": "Select at least one agent." + }, + "FINISH": { + "TITLE": "Your team is ready!", + "MESSAGE": "You can now collaborate as a team on conversations. Happy supporting ", + "BUTTON_TEXT": "Finish" + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Team deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the team. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure you want to delete the team?", + "PLACE_HOLDER": "Please type {teamName} to confirm", + "MESSAGE": "Deleting the team will remove the team assignment from the conversations assigned to this team.", + "YES": "Delete ", + "NO": "Cancel" + } + }, + "SETTINGS": "Settings", + "FORM": { + "UPDATE": "Update team", + "CREATE": "Create team", + "NAME": { + "LABEL": "Team name", + "PLACEHOLDER": "Example: Sales, Customer Support" + }, + "DESCRIPTION": { + "LABEL": "Team Description", + "PLACEHOLDER": "Short description about this team." + }, + "AUTO_ASSIGN": { + "LABEL": "Allow auto assign for this team." + }, + "SUBMIT_CREATE": "Create team" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/webhooks.json b/app/javascript/dashboard/i18n/locale/ne/webhooks.json new file mode 100644 index 0000000..347c968 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Webhook Settings" + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/ne/whatsappTemplates.json new file mode 100644 index 0000000..cf28312 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Whatsapp Templates", + "SUBTITLE": "Select the whatsapp template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/ne/yearInReview.json b/app/javascript/dashboard/i18n/locale/ne/yearInReview.json new file mode 100644 index 0000000..b5128ed --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/ne/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "बन्दा गार्नुहोस्", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "conversations", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "डाउनलोड", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "Share" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/advancedFilters.json b/app/javascript/dashboard/i18n/locale/nl/advancedFilters.json new file mode 100644 index 0000000..1d08363 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Gesprekken filteren", + "SUBTITLE": "Add your filters below and hit 'Apply filters' to cut through the chat clutter.", + "EDIT_CUSTOM_FILTER": "Map bewerken", + "CUSTOM_VIEWS_SUBTITLE": "Filters toevoegen of verwijderen en bijwerken van uw folder.", + "ADD_NEW_FILTER": "Filter toevoegen", + "FILTER_DELETE_ERROR": "Oeps, het lijkt erop dat we niets kunnen opslaan! Voeg ten minste één filter toe om het op te slaan.", + "SUBMIT_BUTTON_LABEL": "Filters toepassen", + "UPDATE_BUTTON_LABEL": "Update folder", + "CANCEL_BUTTON_LABEL": "Annuleren", + "CLEAR_BUTTON_LABEL": "Filters wissen", + "FOLDER_LABEL": "Folder naam", + "FOLDER_QUERY_LABEL": "Folder Query", + "EMPTY_VALUE_ERROR": "Waarde is vereist.", + "TOOLTIP_LABEL": "Gesprekken filteren", + "QUERY_DROPDOWN_LABELS": { + "AND": "EN", + "OR": "OF" + }, + "INPUT_PLACEHOLDER": "Enter value", + "OPERATOR_LABELS": { + "equal_to": "Gelijk aan", + "not_equal_to": "Niet gelijk aan", + "does_not_contain": "Bevat niet", + "is_present": "Is aanwezig", + "is_not_present": "Is niet aanwezig", + "is_greater_than": "Is groter dan", + "is_less_than": "Is lager dan", + "days_before": "Is x dagen vóór", + "starts_with": "Begint met", + "equalTo": "Gelijk aan", + "notEqualTo": "Niet gelijk aan", + "contains": "Bevat", + "doesNotContain": "Bevat niet", + "isPresent": "Is aanwezig", + "isNotPresent": "Is niet aanwezig", + "isGreaterThan": "Is groter dan", + "isLessThan": "Is minder dan", + "daysBefore": "Is x dagen vóór", + "startsWith": "Begint met" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "Waar", + "FALSE": "Onwaar" + }, + "ATTRIBUTES": { + "STATUS": "Status", + "ASSIGNEE_NAME": "Toegewezen naam", + "INBOX_NAME": "Naam postvak", + "TEAM_NAME": "Team Naam", + "CONVERSATION_IDENTIFIER": "Conversatie ID", + "CAMPAIGN_NAME": "Campagne naam", + "LABELS": "Labelen", + "BROWSER_LANGUAGE": "Browser taal", + "PRIORITY": "Prioriteit", + "COUNTRY_NAME": "Land naam", + "REFERER_LINK": "Verwijzende link", + "CUSTOM_ATTRIBUTE_LIST": "Lijst", + "CUSTOM_ATTRIBUTE_TEXT": "Tekst", + "CUSTOM_ATTRIBUTE_NUMBER": "Getal", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Selectievakje", + "CREATED_AT": "Aangemaakt op", + "LAST_ACTIVITY": "Laatste Activiteit" + }, + "ERRORS": { + "VALUE_REQUIRED": "Waarde is vereist", + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standaard filters", + "ADDITIONAL_FILTERS": "Aanvullende filters", + "CUSTOM_ATTRIBUTES": "Aangepaste attributen" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Wil je deze filter opslaan?", + "LABEL": "Geef deze filter een naam", + "PLACEHOLDER": "Name your filter to refer it later.", + "ERROR_MESSAGE": "Naam is vereist.", + "SAVE_BUTTON": "Filter opslaan", + "CANCEL_BUTTON": "Annuleren", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Map succesvol aangemaakt.", + "ERROR_MESSAGE": "Fout tijdens het aanmaken van map." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment succesvol aangemaakt.", + "ERROR_MESSAGE": "Fout bij het maken van segment." + } + }, + "EDIT": { + "EDIT_BUTTON": "Map bewerken" + }, + "DELETE": { + "DELETE_BUTTON": "Filter verwijderen", + "MODAL": { + "CONFIRM": { + "TITLE": "Verwijdering bevestigen", + "MESSAGE": "Weet u zeker dat u de filter wilt verwijderen? ", + "YES": "Ja, verwijderen", + "NO": "Nee, bewaar het" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Map succesvol verwijderd.", + "ERROR_MESSAGE": "Fout bij verwijderen map." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment succesvol verwijderd.", + "ERROR_MESSAGE": "Fout bij verwijderen segment." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/agentBots.json b/app/javascript/dashboard/i18n/locale/nl/agentBots.json new file mode 100644 index 0000000..e0eb228 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Bots", + "LOADING_EDITOR": "Loading editor...", + "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try. You can manage your bots from this page or create new ones using the 'Add Bot' button.", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "System bot", + "GLOBAL_BOT_BADGE": "Systeem", + "AVATAR": { + "SUCCESS_DELETE": "Bot avatar deleted successfully", + "ERROR_DELETE": "Error deleting bot avatar, please try again" + }, + "BOT_CONFIGURATION": { + "TITLE": "Selecteer een agent bot", + "DESC": "Assign an Agent Bot to your inbox. They can handle initial conversations and transfer them to a live agent when necessary.", + "SUBMIT": "Vernieuwen", + "DISCONNECT": "Disconnect bot", + "SUCCESS_MESSAGE": "De agent bot is succesvol bijgewerkt.", + "DISCONNECTED_SUCCESS_MESSAGE": "Succesvol de agent bot verbinding verbroken.", + "ERROR_MESSAGE": "Could not update the agent bot. Please try again.", + "DISCONNECTED_ERROR_MESSAGE": "Could not disconnect the agent bot. Please try again.", + "SELECT_PLACEHOLDER": "Select bot" + }, + "ADD": { + "TITLE": "Add Bot", + "CANCEL_BUTTON_TEXT": "Annuleren", + "API": { + "SUCCESS_MESSAGE": "Bot succesvol toegevoegd.", + "ERROR_MESSAGE": "Could not add bot. Please try again later." + } + }, + "LIST": { + "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.", + "LOADING": "Fetching bots...", + "TABLE_HEADER": { + "DETAILS": "Bot Details", + "URL": "Webhook URL" + } + }, + "DELETE": { + "BUTTON_TEXT": "Verwijderen", + "TITLE": "Delete bot", + "CONFIRM": { + "TITLE": "Verwijderen bevestigen", + "MESSAGE": "Are you sure you want to delete {name}?", + "YES": "Ja, verwijderen", + "NO": "Nee, Behouden" + }, + "API": { + "SUCCESS_MESSAGE": "Bot succesvol verwijderd.", + "ERROR_MESSAGE": "Could not delete bot. Please try again." + } + }, + "EDIT": { + "BUTTON_TEXT": "Bewerken", + "TITLE": "Edit bot", + "API": { + "SUCCESS_MESSAGE": "Bot succesvol bijgewerkt.", + "ERROR_MESSAGE": "Could not update bot. Please try again." + } + }, + "ACCESS_TOKEN": { + "TITLE": "Toegangs-token", + "DESCRIPTION": "Copy the access token and save it securely", + "COPY_SUCCESSFUL": "Access token copied to clipboard", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "Bot Naam", + "PLACEHOLDER": "Enter bot name", + "REQUIRED": "Bot naam is vereist" + }, + "DESCRIPTION": { + "LABEL": "Beschrijving", + "PLACEHOLDER": "Wat doet deze bot?" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "Webhook URL is required" + }, + "ERRORS": { + "NAME": "Bot naam is vereist", + "URL": "Webhook URL is required", + "VALID_URL": "Please enter a valid URL starting with http:// or https://" + }, + "CANCEL": "Annuleren", + "CREATE": "Bot Maken", + "UPDATE": "Bot updaten" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them." + }, + "TYPES": { + "WEBHOOK": "Webhook bot" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/agentMgmt.json b/app/javascript/dashboard/i18n/locale/nl/agentMgmt.json new file mode 100644 index 0000000..4eb1a71 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Medewerkers", + "HEADER_BTN_TXT": "Medewerker toevoegen", + "LOADING": "Ophalen van medewerkerslijst", + "DESCRIPTION": "An agent is a member of your customer support team who can view and respond to user messages. The list below shows all the agents in your account.", + "LEARN_MORE": "Learn about user roles", + "AGENT_TYPES": { + "ADMINISTRATOR": "Beheerder", + "AGENT": "Medewerker" + }, + "LIST": { + "404": "Er zijn geen medewerkers gekoppeld aan dit account", + "TITLE": "Beheer medewerkers in uw team", + "DESC": "U kunt medewerkers toevoegen aan/verwijderen uit uw team.", + "NAME": "Naam", + "EMAIL": "E-mailadres", + "STATUS": "Status", + "ACTIONS": "Acties", + "VERIFIED": "Geverifieerd", + "VERIFICATION_PENDING": "Verificatie in behandeling", + "AVAILABLE_CUSTOM_ROLE": "Available custom role permissions" + }, + "ADD": { + "TITLE": "Voeg medewerker toe aan je team", + "DESC": "U kunt medewerkers toevoegen die de ondersteuning verzorgen voor berichten in uw inboxen.", + "CANCEL_BUTTON_TEXT": "Annuleren", + "FORM": { + "NAME": { + "LABEL": "Naam medewerker", + "PLACEHOLDER": "Voer een naam in voor de medewerker" + }, + "AGENT_TYPE": { + "LABEL": "Type medewerker", + "PLACEHOLDER": "Selecteer een type", + "ERROR": "Type medewerker is vereist" + }, + "EMAIL": { + "LABEL": "Uw e-mailadres", + "PLACEHOLDER": "Voer een e-mailadres in van de medewerker" + }, + "SUBMIT": "Medewerker toevoegen" + }, + "API": { + "SUCCESS_MESSAGE": "Medewerker succesvol toegevoegd", + "EXIST_MESSAGE": "E-mailadres van de medewerker is al in gebruik, probeer een ander e-mailadres", + "ERROR_MESSAGE": "Kan geen verbinding maken met Woot Server, probeer het later opnieuw" + } + }, + "DELETE": { + "BUTTON_TEXT": "Verwijderen", + "API": { + "SUCCESS_MESSAGE": "Medewerker succesvol verwijderd", + "ERROR_MESSAGE": "Kan geen verbinding maken met Woot Server, probeer het later opnieuw" + }, + "CONFIRM": { + "TITLE": "Verwijderen bevestigen", + "MESSAGE": "Weet u zeker dat u wilt verwijderen ", + "YES": "Ja, verwijderen ", + "NO": "Nee, Behouden " + } + }, + "EDIT": { + "TITLE": "Bewerk medewerker", + "FORM": { + "NAME": { + "LABEL": "Naam medewerker", + "PLACEHOLDER": "Voer een naam in voor de medewerker" + }, + "AGENT_TYPE": { + "LABEL": "Type medewerker", + "PLACEHOLDER": "Selecteer een type", + "ERROR": "Type medewerker is vereist" + }, + "EMAIL": { + "LABEL": "Uw e-mailadres", + "PLACEHOLDER": "Voer een e-mailadres in van de medewerker" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Beschikbaarheid", + "PLACEHOLDER": "Selecteer een beschikbaarheidsstatus", + "ERROR": "Beschikbaarheid is vereist" + }, + "SUBMIT": "Bewerk medewerker" + }, + "BUTTON_TEXT": "Bewerken", + "CANCEL_BUTTON_TEXT": "Annuleren", + "API": { + "SUCCESS_MESSAGE": "Medewerker succesvol bijgewerkt", + "ERROR_MESSAGE": "Kan geen verbinding maken met Woot Server, probeer het later opnieuw" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Wachtwoord opnieuw instellen", + "ADMIN_SUCCESS_MESSAGE": "Een e-mail met instructies om het wachtwoord te resetten is verstuurd naar de medewerker", + "SUCCESS_MESSAGE": "Wachtwoord medewerker opnieuw instellen is geslaagd", + "ERROR_MESSAGE": "Kan geen verbinding maken met Woot Server, probeer het later opnieuw" + } + }, + "SEARCH": { + "NO_RESULTS": "Geen resultaten gevonden." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "Geen", + "TITLE": { + "AGENT": "Selecteer agent", + "TEAM": "Selecteer team" + }, + "LIST": { + "NONE": "Geen" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "Geen medewerkers gevonden", + "TEAM": "Geen teams gevonden" + }, + "PLACEHOLDER": { + "AGENT": "Zoek agenten", + "TEAM": "Teams zoeken", + "INPUT": "Zoeken naar agents" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/nl/attributesMgmt.json new file mode 100644 index 0000000..006c4a4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Aangepaste attributen", + "HEADER_BTN_TXT": "Aangepast attribuut toevoegen", + "LOADING": "Aangepaste attributen ophalen", + "DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.", + "LEARN_MORE": "Learn more about custom attributes", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Gesprek", + "CONTACT": "Contact" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Tekst", + "NUMBER": "Getal", + "LINK": "Link", + "DATE": "Date", + "LIST": "Lijst", + "CHECKBOX": "Selectievakje" + }, + "ADD": { + "TITLE": "Aangepast attribuut toevoegen", + "SUBMIT": "Aanmaken", + "CANCEL_BUTTON_TEXT": "Annuleren", + "FORM": { + "NAME": { + "LABEL": "Weergave naam", + "PLACEHOLDER": "Voer aangepaste attribuut weergavenaam in", + "ERROR": "Naam is vereist" + }, + "DESC": { + "LABEL": "Beschrijving", + "PLACEHOLDER": "Voer aangepaste attribuutbeschrijving in", + "ERROR": "Omschrijving is vereist" + }, + "MODEL": { + "LABEL": "Van toepassing op", + "PLACEHOLDER": "Selecteer er een", + "ERROR": "Model is vereist" + }, + "TYPE": { + "LABEL": "Type", + "PLACEHOLDER": "Selecteer een type", + "ERROR": "Type is vereist", + "LIST": { + "LABEL": "Toon waardes", + "PLACEHOLDER": "Voer waarde in en druk op enter-toets", + "ERROR": "Moet minstens één waarde bevatten" + } + }, + "KEY": { + "LABEL": "Sleutel", + "PLACEHOLDER": "Voer aangepaste attribuut sleutel in", + "ERROR": "Sleutel is vereist", + "IN_VALID": "Ongeldige sleutel" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "API": { + "SUCCESS_MESSAGE": "Aangepast attribuut succesvol toegevoegd!", + "ERROR_MESSAGE": "Aanmaken van aangepaste attribuut mislukt. Probeer het later opnieuw." + } + }, + "DELETE": { + "BUTTON_TEXT": "Verwijderen", + "API": { + "SUCCESS_MESSAGE": "Aangepast attribuut succesvol verwijderd.", + "ERROR_MESSAGE": "Kan het aangepaste attribuut niet verwijderen. Probeer het opnieuw." + }, + "CONFIRM": { + "TITLE": "Weet u zeker dat u wilt verwijderen - {attributeName}", + "PLACE_HOLDER": "Voer {attributeName} in om te bevestigen", + "MESSAGE": "Verwijderen zal het aangepaste attribuut verwijderen", + "YES": "Verwijderen ", + "NO": "Annuleren" + } + }, + "EDIT": { + "TITLE": "Aangepast attribuut bewerken", + "UPDATE_BUTTON_TEXT": "Vernieuwen", + "TYPE": { + "LIST": { + "LABEL": "Toon waardes", + "PLACEHOLDER": "Voer waarden in en druk op enter-toets" + } + }, + "API": { + "SUCCESS_MESSAGE": "Aangepast attribuut succesvol bijgewerkt", + "ERROR_MESSAGE": "Er is een fout opgetreden bij het bijwerken van aangepaste attributen, probeer het opnieuw" + } + }, + "TABS": { + "HEADER": "Aangepaste attributen", + "CONVERSATION": "Gesprek", + "CONTACT": "Contact" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Naam", + "DESCRIPTION": "Beschrijving", + "TYPE": "Type", + "KEY": "Sleutel" + }, + "BUTTONS": { + "EDIT": "Bewerken", + "DELETE": "Verwijderen" + }, + "EMPTY_RESULT": { + "404": "Er zijn geen aangepaste attributen aangemaakt", + "NOT_FOUND": "Er zijn geen aangepaste attributen geconfigureerd" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/auditLogs.json b/app/javascript/dashboard/i18n/locale/nl/auditLogs.json new file mode 100644 index 0000000..80cdace --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Audit Logs", + "HEADER_BTN_TXT": "Audit-logs toevoegen", + "LOADING": "Ophalen van Audit Logs", + "DESCRIPTION": "Audit Logs maintain a record of activities in your account, allowing you to track and audit your account, team, or services.", + "LEARN_MORE": "Learn more about audit logs", + "SEARCH_404": "Er zijn geen items die overeenkomen met deze zoekopdracht", + "SIDEBAR_TXT": "Audit Logs
Audit Logs zijn sporen voor gebeurtenissen en acties in een Chatwoot Systeem.
", + "LIST": { + "404": "Er zijn geen Audit Logs beschikbaar in dit account.", + "TITLE": "Beheer Audit Logs", + "DESC": "Audit Logs zijn sporen voor gebeurtenissen en acties in een Chatwoot Systeem.", + "TABLE_HEADER": { + "ACTIVITY": "User", + "TIME": "Tijd", + "IP_ADDRESS": "IP-adres" + } + }, + "API": { + "SUCCESS_MESSAGE": "AuditLogs succesvol opgehaald", + "ERROR_MESSAGE": "Kan geen verbinding maken met Woot Server, probeer het later opnieuw" + }, + "DEFAULT_USER": "Systeem", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} heeft {invitee} uitgenodigd voor het account als een {role}", + "EDIT": { + "SELF": "{agentName} heeft zijn {attributes} gewijzigd naar {values}", + "OTHER": "{agentName} heeft {attributes} van {user} gewijzigd naar {values}", + "DELETED": "{agentName} changed {attributes} of a deleted user to {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} is ingelogd", + "SIGN_OUT": "{agentName} heeft zich afgemeld" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} deleted conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/automation.json b/app/javascript/dashboard/i18n/locale/nl/automation.json new file mode 100644 index 0000000..fdef5df --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automation", + "DESCRIPTION": "Automation can replace and streamline existing processes that require manual effort, such as adding labels and assigning conversations to the most suitable agent. This allows the team to focus on their strengths while reducing time spent on routine tasks.", + "LEARN_MORE": "Learn more about automation", + "HEADER_BTN_TXT": "Automatiseringsregel toevoegen", + "LOADING": "Automatiseringsregels ophalen", + "ADD": { + "TITLE": "Automatiseringsregel toevoegen", + "SUBMIT": "Aanmaken", + "CANCEL_BUTTON_TEXT": "Annuleren", + "FORM": { + "NAME": { + "LABEL": "Regel naam", + "PLACEHOLDER": "Voer regelnaam in", + "ERROR": "Naam is vereist" + }, + "DESC": { + "LABEL": "Beschrijving", + "PLACEHOLDER": "Voer regelomschrijving in", + "ERROR": "Omschrijving is vereist" + }, + "EVENT": { + "LABEL": "Event", + "PLACEHOLDER": "Selecteer er een", + "ERROR": "Event is verplicht" + }, + "CONDITIONS": { + "LABEL": "Voorwaarden" + }, + "ACTIONS": { + "LABEL": "Acties" + } + }, + "CONDITION_BUTTON_LABEL": "Voorwaarde toevoegen", + "ACTION_BUTTON_LABEL": "Actie toevoegen", + "API": { + "SUCCESS_MESSAGE": "Automatiseringsregel succesvol toegevoegd", + "ERROR_MESSAGE": "Kan geen automatiseringsregel aanmaken, probeer het later opnieuw" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Naam", + "DESCRIPTION": "Beschrijving", + "ACTIVE": "Actief", + "CREATED_ON": "Aangemaakt op" + }, + "404": "Geen automatiseringsregels gevonden" + }, + "DELETE": { + "TITLE": "Automatiseringsregel verwijderen", + "SUBMIT": "Verwijderen", + "CANCEL_BUTTON_TEXT": "Annuleren", + "CONFIRM": { + "TITLE": "Verwijderen bevestigen", + "MESSAGE": "Weet u zeker dat u wilt verwijderen ", + "YES": "Ja, verwijderen ", + "NO": "Nee, Behouden " + }, + "API": { + "SUCCESS_MESSAGE": "Automatiseringsregel succesvol verwijderd", + "ERROR_MESSAGE": "Kon geen automatiseringsregel verwijderen, probeer het later opnieuw" + } + }, + "EDIT": { + "TITLE": "Automatiseringsregel bewerken", + "SUBMIT": "Vernieuwen", + "CANCEL_BUTTON_TEXT": "Annuleren", + "API": { + "SUCCESS_MESSAGE": "Automatiseringsregel succesvol bijgewerkt", + "ERROR_MESSAGE": "Automatiseringsregel kon niet worden bijgewerkt, probeer het later opnieuw" + } + }, + "CLONE": { + "TOOLTIP": "Kloon", + "API": { + "SUCCESS_MESSAGE": "Automatisering met succes gekloond", + "ERROR_MESSAGE": "Automatiseringsregel kon niet worden gekloond, probeer het later opnieuw" + } + }, + "FORM": { + "EDIT": "Bewerken", + "CREATE": "Aanmaken", + "DELETE": "Verwijderen", + "CANCEL": "Annuleren", + "RESET_MESSAGE": "Het veranderen van het event type zal de condities en events die u hieronder hebt toegevoegd resetten" + }, + "CONDITION": { + "DELETE_MESSAGE": "U moet tenminste één voorwaarde hebben om op te slaan", + "CONTACT_CUSTOM_ATTR_LABEL": "Aangepaste contactattributen", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Gesprek aangepaste attributen" + }, + "ACTION": { + "DELETE_MESSAGE": "U moet tenminste één actie hebben om op te slaan", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Voer hier uw bericht in", + "TEAM_DROPDOWN_PLACEHOLDER": "Teams selecteren", + "EMAIL_INPUT_PLACEHOLDER": "Enter email", + "URL_INPUT_PLACEHOLDER": "Enter URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Automatiseringsregel activeren", + "DEACTIVATION_TITLE": "Automatiseringsregel deactiveren", + "ACTIVATION_DESCRIPTION": "Deze actie activeert de automatiseringsregel '{automationName}'. Weet u zeker dat u wilt doorgaan?", + "DEACTIVATION_DESCRIPTION": "Deze actie zal de automatiseringsregel '{automationName}' deactiveren. Weet u zeker dat u wilt doorgaan?", + "ACTIVATION_SUCCESFUL": "Automatiseringsregel succesvol geactiveerd", + "DEACTIVATION_SUCCESFUL": "Automatiseringsregel succesvol gedeactiveerd", + "ACTIVATION_ERROR": "Automatisering kon niet worden geactiveerd, probeer het later opnieuw", + "DEACTIVATION_ERROR": "Automatisering kon niet worden gedeactiveerd, probeer het later opnieuw", + "CONFIRMATION_LABEL": "Ja", + "CANCEL_LABEL": "Nee" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Kon bijlage niet uploaden, probeer het opnieuw", + "LABEL_IDLE": "Bijlage uploaden", + "LABEL_UPLOADING": "Uploaden...", + "LABEL_UPLOADED": "Succesvol geüpload", + "LABEL_UPLOAD_FAILED": "Upload mislukt" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Waarde is vereist", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "NONE_OPTION": "Geen", + "EVENTS": { + "CONVERSATION_CREATED": "Gesprek aangemaakt", + "CONVERSATION_UPDATED": "Gesprek bijgewerkt", + "MESSAGE_CREATED": "Message Created", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Conversation Opened" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assign to Agent", + "ASSIGN_TEAM": "Assign a Team", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "SEND_EMAIL_TO_TEAM": "Send an Email to Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Gesprek dempen", + "SNOOZE_CONVERSATION": "Demp gesprek", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_WEBHOOK_EVENT": "Send Webhook Event", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "CHANGE_PRIORITY": "Change Priority", + "ADD_SLA": "Add SLA", + "OPEN_CONVERSATION": "Open conversation" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "Geen", + "LOW": "Laag", + "MEDIUM": "Gemiddeld", + "HIGH": "Hoog", + "URGENT": "Dringend" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Message Type", + "MESSAGE_CONTAINS": "Message Contains", + "EMAIL": "E-mailadres", + "INBOX": "Postvak In", + "CONVERSATION_LANGUAGE": "Conversation Language", + "PHONE_NUMBER": "Telefoonnummer", + "STATUS": "Status", + "BROWSER_LANGUAGE": "Web browser Taal", + "MAIL_SUBJECT": "Email Subject", + "COUNTRY_NAME": "Land", + "REFERER_LINK": "Referrer Link", + "ASSIGNEE_NAME": "Assignee", + "TEAM_NAME": "Team", + "PRIORITY": "Prioriteit", + "LABELS": "Labelen" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/bulkActions.json b/app/javascript/dashboard/i18n/locale/nl/bulkActions.json new file mode 100644 index 0000000..9751d9d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} gesprekken geselecteerd", + "AGENT_SELECT_LABEL": "Selecteer agent", + "ASSIGN_CONFIRMATION_LABEL": "Weet u zeker dat u {conversationCount} {conversationLabel} wilt toewijzen aan", + "UNASSIGN_CONFIRMATION_LABEL": "Weet u zeker dat u {conversationCount} {conversationLabel} wilt ontkoppelen?", + "GO_BACK_LABEL": "Ga terug", + "ASSIGN_LABEL": "Toewijzen", + "YES": "Ja", + "SEARCH_INPUT_PLACEHOLDER": "Zoeken", + "ASSIGN_AGENT_TOOLTIP": "Agent toewijzen", + "ASSIGN_TEAM_TOOLTIP": "Team toewijzen", + "ASSIGN_SUCCESFUL": "Gesprekken succesvol toegewezen.", + "ASSIGN_FAILED": "Toewijzen van gesprekken mislukt, probeer het opnieuw.", + "RESOLVE_SUCCESFUL": "Gesprekken succesvol opgehaald.", + "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Gesprekken die op deze pagina zichtbaar zijn, zijn alleen geselecteerd.", + "AGENT_LIST_LOADING": "Agents worden geladen", + "UPDATE": { + "CHANGE_STATUS": "Status wijzigen", + "SNOOZE_UNTIL": "Sluimeren", + "UPDATE_SUCCESFUL": "Gespreksstatus succesvol bijgewerkt.", + "UPDATE_FAILED": "Update van gesprekken mislukt, probeer het opnieuw." + }, + "LABELS": { + "ASSIGN_LABELS": "Labels toewijzen", + "NO_LABELS_FOUND": "Geen labels gevonden", + "ASSIGN_SELECTED_LABELS": "Geselecteerde labels toewijzen", + "ASSIGN_SUCCESFUL": "Labels met succes toegewezen.", + "ASSIGN_FAILED": "Toewijzen van labels mislukt, probeer het opnieuw." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Selecteer team", + "NONE": "Geen", + "NO_TEAMS_AVAILABLE": "Er zijn nog geen teams toegevoegd aan dit account.", + "ASSIGN_SELECTED_TEAMS": "Geselecteerde team toewijzen.", + "ASSIGN_SUCCESFUL": "Teams assigned successfully.", + "ASSIGN_FAILED": "Toewijzen team mislukt, probeer het opnieuw." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/campaign.json b/app/javascript/dashboard/i18n/locale/nl/campaign.json new file mode 100644 index 0000000..dec753f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "Ingeschakeld", + "DISABLED": "Uitgeschakeld" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Verzonden door", + "BOT": "Bot", + "FROM": "van", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "Annuleren", + "CREATE_BUTTON_TEXT": "Aanmaken", + "FORM": { + "TITLE": { + "LABEL": "Titel", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Bericht", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Bericht is vereist" + }, + "INBOX": { + "LABEL": "Selecteer een inbox", + "PLACEHOLDER": "Selecteer een inbox", + "ERROR": "Inbox is required" + }, + "SENT_BY": { + "LABEL": "Verzonden door", + "PLACEHOLDER": "Please select sender", + "ERROR": "Sender is required" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Please enter the URL", + "ERROR": "Voer een geldige URL in" + }, + "TIME_ON_PAGE": { + "LABEL": "Time on page(Seconds)", + "PLACEHOLDER": "Please enter the time", + "ERROR": "Time on page is required" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "Enable campaign", + "TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours" + }, + "BUTTONS": { + "CREATE": "Aanmaken", + "CANCEL": "Annuleren" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "Annuleren", + "CREATE_BUTTON_TEXT": "Aanmaken", + "FORM": { + "TITLE": { + "LABEL": "Titel", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Bericht", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Bericht is vereist" + }, + "INBOX": { + "LABEL": "Selecteer een inbox", + "PLACEHOLDER": "Selecteer een inbox", + "ERROR": "Inbox is required" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Aanmaken", + "CANCEL": "Annuleren" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No WhatsApp campaigns are available", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "Annuleren", + "CREATE_BUTTON_TEXT": "Aanmaken", + "FORM": { + "TITLE": { + "LABEL": "Titel", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "INBOX": { + "LABEL": "Selecteer een inbox", + "PLACEHOLDER": "Selecteer een inbox", + "ERROR": "Inbox is required" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "Verwerk {templateName}", + "LANGUAGE": "Taal", + "CATEGORY": "Categorie", + "VARIABLES_LABEL": "Variabelen", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Aanmaken", + "CANCEL": "Annuleren" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Weet u zeker dat u wilt verwijderen?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "Verwijderen", + "API": { + "SUCCESS_MESSAGE": "Campaign deleted successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/nl/cannedMgmt.json new file mode 100644 index 0000000..7d1ef85 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Standaard antwoorden", + "LEARN_MORE": "Meer informatie over standaard antwoorden", + "DESCRIPTION": "Canned Responses are pre-written reply templates that help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a canned response during a conversation. ", + "HEADER_BTN_TXT": "Standaard antwoord toevoegen", + "LOADING": "Standaard antwoorden ophalen...", + "SEARCH_404": "Er zijn geen items die overeenkomen met deze zoekopdracht.", + "LIST": { + "404": "Er zijn geen standaard antwoorden beschikbaar in dit account.", + "TITLE": "Beheer standaard antwoorden", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "TABLE_HEADER": { + "SHORT_CODE": "Korte code", + "CONTENT": "Inhoud", + "ACTIONS": "Acties" + } + }, + "ADD": { + "TITLE": "Standaard antwoord toevoegen", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "CANCEL_BUTTON_TEXT": "Annuleren", + "FORM": { + "SHORT_CODE": { + "LABEL": "Korte code", + "PLACEHOLDER": "Vul een korte code in.", + "ERROR": "Korte code is vereist." + }, + "CONTENT": { + "LABEL": "Bericht", + "PLACEHOLDER": "Schrijf het bericht dat je wilt opslaan als sjabloon om later te gebruiken.", + "ERROR": "Bericht is vereist." + }, + "SUBMIT": "Bevestigen" + }, + "API": { + "SUCCESS_MESSAGE": "Canned response added successfully.", + "ERROR_MESSAGE": "Kan geen verbinding maken met de Woot server. Probeer het opnieuw." + } + }, + "EDIT": { + "TITLE": "Edit canned response", + "CANCEL_BUTTON_TEXT": "Annuleren", + "FORM": { + "SHORT_CODE": { + "LABEL": "Korte code", + "PLACEHOLDER": "Please enter a shortcode.", + "ERROR": "Short code is required." + }, + "CONTENT": { + "LABEL": "Bericht", + "PLACEHOLDER": "Schrijf het bericht dat je wilt opslaan als sjabloon om later te gebruiken.", + "ERROR": "Bericht is vereist." + }, + "SUBMIT": "Bevestigen" + }, + "BUTTON_TEXT": "Bewerken", + "API": { + "SUCCESS_MESSAGE": "Canned response is updated successfully.", + "ERROR_MESSAGE": "Kan geen verbinding maken met de Woot server. Probeer het opnieuw." + } + }, + "DELETE": { + "BUTTON_TEXT": "Verwijderen", + "API": { + "SUCCESS_MESSAGE": "Canned response deleted successfully.", + "ERROR_MESSAGE": "Kan geen verbinding maken met de Woot server. Probeer het opnieuw." + }, + "CONFIRM": { + "TITLE": "Verwijdering bevestigen", + "MESSAGE": "Weet u zeker dat u wilt verwijderen ", + "YES": "Ja, verwijder ", + "NO": "Nee, bewaar" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/chatlist.json b/app/javascript/dashboard/i18n/locale/nl/chatlist.json new file mode 100644 index 0000000..a7333be --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Gesprekken ophalen", + "LOAD_MORE_CONVERSATIONS": "Meer gesprekken laden", + "EOF": "Alle gesprekken geladen 🎉", + "LIST": { + "404": "Er zijn geen actieve gesprekken in deze groep." + }, + "FAILED_TO_SEND": "Failed to send", + "TAB_HEADING": "Gesprekken", + "MENTION_HEADING": "Vermeldingen", + "UNATTENDED_HEADING": "Onbeheer", + "SEARCH": { + "INPUT": "Zoek naar mensen, gesprekken, opgeslagen antwoorden .." + }, + "FILTER_ALL": "Allemaal", + "ASSIGNEE_TYPE_TABS": { + "me": "Mijn", + "unassigned": "Niet toegewezen", + "all": "Allemaal" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Open" + }, + "resolved": { + "TEXT": "Opgelost" + }, + "pending": { + "TEXT": "Afwachtend" + }, + "snoozed": { + "TEXT": "Gesluimerd" + }, + "all": { + "TEXT": "Allemaal" + } + }, + "VIEW_FILTER": "Bekijken", + "SORT_TOOLTIP_LABEL": "Sorteer gesprekken", + "CHAT_SORT": { + "STATUS": "Status", + "ORDER_BY": "Sorteren op" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Aangemaakt op", + "OLDEST": "Aangemaakt op:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Laatste Activiteit:", + "ACTIVE": "Laatste Activiteit" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Last activity: Oldest first" + }, + "last_activity_at_desc": { + "TEXT": "Last activity: Newest first" + }, + "created_at_desc": { + "TEXT": "Created at: Newest first" + }, + "created_at_asc": { + "TEXT": "Created at: Oldest first" + }, + "priority_desc": { + "TEXT": "Priority: Highest first" + }, + "priority_asc": { + "TEXT": "Priority: Lowest first" + }, + "waiting_since_asc": { + "TEXT": "Pending Response: Longest first" + }, + "waiting_since_desc": { + "TEXT": "Pending Response: Shortest first" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Bericht met foto" + }, + "audio": { + "CONTENT": "Audiobericht" + }, + "video": { + "CONTENT": "Videobericht" + }, + "file": { + "CONTENT": "Bestandsbijlage" + }, + "location": { + "CONTENT": "Locatie" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "heeft een url gedeeld" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Gesprek sorteren", + "DROPDOWN_TITLE": "Sorteren op", + "ITEMS": { + "LATEST": { + "NAME": "Laatste activiteit om", + "LABEL": "Laatste Activiteit" + }, + "CREATED_AT": { + "NAME": "Aangemaakt op", + "LABEL": "Aangemaakt op" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Laatste bericht van gebruiker op", + "LABEL": "Laatste bericht" + } + } + }, + "RECEIVED_VIA_EMAIL": "Ontvangen via e-mail", + "VIEW_TWEET_IN_TWITTER": "Bekijk tweet op Twitter", + "REPLY_TO_TWEET": "Antwoord op deze tweet", + "LINK_TO_STORY": "Ga naar instagram verhaal", + "SENT": "Succesvol verzonden", + "READ": "Succesvol gelezen", + "DELIVERED": "Succesvol afgeleverd", + "NO_MESSAGES": "Geen berichten", + "NO_CONTENT": "Geen inhoud beschikbaar", + "HIDE_QUOTED_TEXT": "Verberg geciteerde tekst", + "SHOW_QUOTED_TEXT": "Toon geciteerde tekst", + "MESSAGE_READ": "Lezen", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/companies.json b/app/javascript/dashboard/i18n/locale/nl/companies.json new file mode 100644 index 0000000..c6fb4a2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "Naam", + "DOMAIN": "Domeinnaam", + "CREATED_AT": "Aangemaakt op", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/components.json b/app/javascript/dashboard/i18n/locale/nl/components.json new file mode 100644 index 0000000..7f6f763 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} of {totalPages} pages" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "Geen resultaten gevonden.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} more" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "Geen resultaten gevonden.", + "SEARCHING": "Zoeken..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Annuleren", + "CONFIRM": "Bevestigen" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Search country", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Selecteer a. u. b. een belcode uit de lijst" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Author is not available" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Learn more", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/contact.json b/app/javascript/dashboard/i18n/locale/nl/contact.json new file mode 100644 index 0000000..342a7a1 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Niet beschikbaar", + "EMAIL_ADDRESS": "Uw e-mailadres", + "PHONE_NUMBER": "Telefoon nummer", + "IDENTIFIER": "Identificator", + "COPY_SUCCESSFUL": "Succesvol gekopieerd naar klembord", + "COMPANY": "Bedrijfsnaam", + "LOCATION": "Locatie", + "BROWSER_LANGUAGE": "Web browser Taal", + "CONVERSATION_TITLE": "Gesprekdetails", + "VIEW_PROFILE": "Profiel Bekijken", + "BROWSER": "Browser", + "OS": "Besturingssysteem", + "INITIATED_FROM": "Geïnitieerd vanuit", + "INITIATED_AT": "Geïnitieerd op", + "IP_ADDRESS": "IP-adres", + "CREATED_AT_LABEL": "Aangemaakt op", + "NEW_MESSAGE": "Nieuw bericht", + "CALL": "Call", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "Er zijn geen eerdere gesprekken gekoppeld aan dit contact.", + "TITLE": "Vorige gesprekken" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Contact Labels", + "ERROR": "Kan labels niet bijwerken" + }, + "CONVERSATION": { + "TITLE": "Labels voor gesprekken", + "ADD_BUTTON": "Labels toevoegen" + }, + "LABEL_SELECT": { + "TITLE": "Labels toevoegen", + "PLACEHOLDER": "Zoek op labels", + "NO_RESULT": "Geen labels gevonden", + "CREATE_LABEL": "Nieuw label aanmaken" + } + }, + "MERGE_CONTACT": "Contact samenvoegen", + "CONTACT_ACTIONS": "Contact acties", + "MUTE_CONTACT": "Block Contact", + "UNMUTE_CONTACT": "Unblock Contact", + "MUTED_SUCCESS": "This contact is blocked successfully. You will not be notified of any future conversations.", + "UNMUTED_SUCCESS": "This contact is unblocked successfully.", + "SEND_TRANSCRIPT": "Transcript verzenden", + "EDIT_LABEL": "Bewerken", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Aanpasbare attributen", + "CONTACT_LABELS": "Contact Labels", + "PREVIOUS_CONVERSATIONS": "Vorige gesprekken", + "NO_RECORDS_FOUND": "Geen attributen gevonden" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Contact bewerken", + "TITLE": "Contact bewerken", + "DESC": "Bewerk contactgegevens" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Contactpersoon verwijderen", + "TITLE": "Contactpersoon verwijderen", + "DESC": "Contactgegevens verwijderen", + "CONFIRM": { + "TITLE": "Verwijderen bevestigen", + "MESSAGE": "Weet u zeker dat u wilt verwijderen ", + "YES": "Ja, verwijderen", + "NO": "Nee, Behouden" + }, + "API": { + "SUCCESS_MESSAGE": "Contactpersoon werd succesvol verwijderd", + "ERROR_MESSAGE": "Contact verwijderen mislukt. Probeer het later opnieuw." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Bevestigen", + "CANCEL": "Annuleren", + "AVATAR": { + "LABEL": "Contact Avatar" + }, + "NAME": { + "PLACEHOLDER": "Voer de volledige naam van het contact in", + "LABEL": "Volledige Naam" + }, + "BIO": { + "PLACEHOLDER": "Voer de bio van het contact in", + "LABEL": "Bio" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Voer het e-mailadres van de contactpersoon in", + "LABEL": "Uw e-mailadres", + "DUPLICATE": "Dit e-mailadres is reeds in gebruik voor een ander contact.", + "ERROR": "Voer een geldig e-mailadres in." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Voer het telefoonnummer van de contactpersoon in", + "LABEL": "Telefoonnummer", + "HELP": "Telefoonnummer moet van het E.164 formaat zijn: +14155555 [+][landcode][gebiedscode][lokaal telefoonnummer]", + "ERROR": "Telefoonnummer moet leeg of in E.164-formaat zijn", + "DIAL_CODE_ERROR": "Selecteer a. u. b. een belcode uit de lijst", + "DUPLICATE": "Dit telefoonnummer wordt reeds gebruikt voor een ander contactpersoon." + }, + "LOCATION": { + "PLACEHOLDER": "Voer de locatie van het contact in", + "LABEL": "Locatie" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Voer de bedrijfsnaam in", + "LABEL": "Bedrijfsnaam" + }, + "COUNTRY": { + "PLACEHOLDER": "Voer de landnaam in", + "LABEL": "Land Naam", + "SELECT_PLACEHOLDER": "Selecteren", + "REMOVE": "Verwijderen", + "SELECT_COUNTRY": "Selecteer land" + }, + "CITY": { + "PLACEHOLDER": "Voer de plaatsnaam in", + "LABEL": "Gemeente" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Voer de Facebook gebruikersnaam in", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Voer de Twitter gebruikersnaam in", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Voer de LinkedIn gebruikersnaam in", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Voer de Github gebruikersnaam in", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Contactavatar succesvol verwijderd", + "ERROR_MESSAGE": "Contact avatar kon niet verwijderd worden. Probeer het later opnieuw." + } + }, + "SUCCESS_MESSAGE": "Contact succesvol opgeslagen", + "ERROR_MESSAGE": "Er is een fout opgetreden, probeer het opnieuw" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Start gesprek", + "TITLE": "Nieuw gesprek", + "DESC": "Begin een nieuw gesprek door een nieuw bericht te sturen.", + "NO_INBOX": "Kon geen inbox vinden om een nieuw gesprek met dit contact te starten.", + "FORM": { + "TO": { + "LABEL": "Aan" + }, + "INBOX": { + "LABEL": "Postvak In", + "PLACEHOLDER": "Kies bron postvak", + "ERROR": "Selecteer een inbox" + }, + "SUBJECT": { + "LABEL": "Onderwerp", + "PLACEHOLDER": "Onderwerp", + "ERROR": "Onderwerp mag niet leeg zijn" + }, + "MESSAGE": { + "LABEL": "Bericht", + "PLACEHOLDER": "Schrijf hier je bericht", + "ERROR": "Bericht mag niet leeg zijn" + }, + "ATTACHMENTS": { + "SELECT": "Kies bestanden", + "HELP_TEXT": "Sleep bestanden hier naartoe of kies bestanden om toe te voegen" + }, + "SUBMIT": "Verstuur bericht", + "CANCEL": "Annuleren", + "SUCCESS_MESSAGE": "Bericht verzonden!", + "GO_TO_CONVERSATION": "Bekijken", + "ERROR_MESSAGE": "Kon niet worden verzonden! Probeer opnieuw" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Social-profielen" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Aangepast attribuut toevoegen", + "COPY_SUCCESSFUL": "Succesvol gekopieerd naar klembord", + "SHOW_MORE": "Show all attributes", + "SHOW_LESS": "Show less attributes", + "ACTIONS": { + "COPY": "Kopieer attribuut", + "DELETE": "Attribuut verwijderen", + "EDIT": "Attribuut bewerken" + }, + "ADD": { + "TITLE": "Aangepast attribuut maken", + "DESC": "Aangepaste informatie toevoegen aan dit contact." + }, + "FORM": { + "CREATE": "Attribuut toevoegen", + "CANCEL": "Annuleren", + "NAME": { + "LABEL": "Aangepaste attribuutnaam", + "PLACEHOLDER": "Bijvoorbeeld: shopify id", + "ERROR": "Ongeldige aangepaste attribuutnaam" + }, + "VALUE": { + "LABEL": "Attribuut waarde", + "PLACEHOLDER": "Bijv. 11901 " + }, + "ADD": { + "TITLE": "Nieuw attribuut aanmaken ", + "SUCCESS": "Attribuut succesvol toegevoegd", + "ERROR": "Kan het attribuut niet toevoegen. Probeer het later opnieuw" + }, + "UPDATE": { + "SUCCESS": "Attribuut succesvol toegevoegd", + "ERROR": "Kan het attribuut niet bijwerken. Probeer het later opnieuw" + }, + "DELETE": { + "SUCCESS": "Attribuut succesvol verwijderd", + "ERROR": "Attribuut verwijderen mislukt. Probeer het later opnieuw" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Attributen toevoegen", + "PLACEHOLDER": "Attributen zoeken", + "NO_RESULT": "Geen attributen gevonden" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Selecteer waarde", + "SEARCH_INPUT_PLACEHOLDER": "Zoek waarde", + "NO_RESULT": "Geen resultaten gevonden" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Geldige waarde is vereist", + "INVALID_URL": "Ongeldige URL", + "INVALID_INPUT": "Invalid Input" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Contacten samenvoegen", + "DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact’ s attributes will take precedence.", + "PRIMARY": { + "TITLE": "Primair contact", + "HELP_LABEL": "Nog te verwijderen" + }, + "PARENT": { + "TITLE": "Contact om samen te voegen", + "PLACEHOLDER": "Zoeken naar contacten", + "HELP_LABEL": "Te behouden" + }, + "SUMMARY": { + "TITLE": "Samenvatting", + "DELETE_WARNING": "Contact van {primaryContactName} zal worden verwijderd.", + "ATTRIBUTE_WARNING": "Contactgegevens van {primaryContactName} worden gekopieerd naar {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": " Contacten samenvoegen", + "CANCEL": "Annuleren", + "CHILD_CONTACT": { + "ERROR": "Selecteer een sub-contactpersoon om samen te voegen" + }, + "SUCCESS_MESSAGE": "Contact succesvol samengevoegd", + "ERROR_MESSAGE": "Contacten zijn niet samengevoegd, probeer het opnieuw!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Contacten", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "Active contacts", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "Bericht", + "SEND_MESSAGE": "Verstuur bericht", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "Contacten" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Add contact", + "EXPORT_CONTACT": "Export contacts", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Save contact", + "EMAIL_ADDRESS_DUPLICATE": "Dit e-mailadres is reeds in gebruik voor een ander contact.", + "PHONE_NUMBER_DUPLICATE": "Dit telefoonnummer wordt reeds gebruikt voor een ander contactpersoon.", + "SUCCESS_MESSAGE": "Contact succesvol opgeslagen", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "This contact is unblocked successfully", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Import contacts", + "DESCRIPTION": "Contacten importeren via een CSV-bestand.", + "DOWNLOAD_LABEL": "Een voorbeeld CSV-bestand downloaden.", + "LABEL": "CSV-bestand:", + "CHOOSE_FILE": "Choose file", + "CHANGE": "Veranderen", + "CANCEL": "Annuleren", + "IMPORT": "Importeren", + "SUCCESS_MESSAGE": "U wordt per e-mail geïnformeerd wanneer de import is voltooid.", + "ERROR_MESSAGE": "Er is een fout opgetreden, probeer het opnieuw" + }, + "EXPORT_CONTACT": { + "TITLE": "Export contacts", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Exporteren", + "SUCCESS_MESSAGE": "Export is in progress, You will be notified via email when export file is ready to dowanlod.", + "ERROR_MESSAGE": "Er is een fout opgetreden, probeer het opnieuw" + }, + "SORT_BY": { + "LABEL": "Sorteren op", + "OPTIONS": { + "NAME": "Naam", + "EMAIL": "E-mailadres", + "PHONE_NUMBER": "Telefoon nummer", + "COMPANY": "Bedrijfsnaam", + "COUNTRY": "Land", + "CITY": "Woonplaats", + "LAST_ACTIVITY": "Laatste Activiteit", + "CREATED_AT": "Aangemaakt op" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Wil je deze filter opslaan?", + "CONFIRM": "Filter opslaan", + "LABEL": "Naam", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "Verwijderen bevestigen", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "Ja, verwijderen", + "CANCEL": "No, Cancel", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "Naam", + "EMAIL": "E-mailadres", + "PHONE_NUMBER": "Telefoon nummer", + "IDENTIFIER": "Identifier", + "COUNTRY": "Land", + "CITY": "Woonplaats", + "CREATED_AT": "Aangemaakt op", + "LAST_ACTIVITY": "Laatste Activiteit", + "REFERER_LINK": "Verwijzende link", + "BLOCKED": "Blocked", + "BLOCKED_TRUE": "Waar", + "BLOCKED_FALSE": "Onwaar", + "BUTTONS": { + "CLEAR_FILTERS": "Filters wissen", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "Filters toepassen", + "ADD_FILTER": "Filter toevoegen" + }, + "TITLE": "Contacten filteren", + "EDIT_SEGMENT": "Segment bewerken", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Filters wissen" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "Details bekijken", + "EDIT_DETAILS_FORM": { + "TITLE": "Bewerk contactgegevens", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "Dit e-mailadres is reeds in gebruik voor een ander contact." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "Dit telefoonnummer wordt reeds gebruikt voor een ander contactpersoon." + }, + "CITY": { + "PLACEHOLDER": "Voer de plaatsnaam in" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Voer de bedrijfsnaam in" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "This action is permanent and irreversible.", + "BUTTON": "Delete now" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "Contactpersoon verwijderen", + "DELETE_DIALOG": { + "TITLE": "Verwijderen bevestigen", + "DESCRIPTION": "Are you sure you want to delete this contact?", + "CONFIRM": "Ja, verwijderen", + "API": { + "SUCCESS_MESSAGE": "Contactpersoon werd succesvol verwijderd", + "ERROR_MESSAGE": "Contact verwijderen mislukt. Probeer het later opnieuw." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributes", + "HISTORY": "History", + "NOTES": "Notities", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "Er zijn geen eerdere gesprekken gekoppeld aan dit contact" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "Ja", + "NO": "Nee", + "TRIGGER": { + "SELECT": "Selecteer waarde", + "INPUT": "Enter value" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "Geldige waarde is vereist", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "Ongeldige URL", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "Geen attributen gevonden", + "API": { + "SUCCESS_MESSAGE": "Attribuut succesvol toegevoegd", + "DELETE_SUCCESS_MESSAGE": "Attribuut succesvol verwijderd", + "UPDATE_ERROR": "Kan het attribuut niet bijwerken. Probeer het later opnieuw", + "DELETE_ERROR": "Attribuut verwijderen mislukt. Probeer het later opnieuw" + } + }, + "MERGE": { + "TITLE": "Contact samenvoegen", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Primair contact", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "Nog te verwijderen", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Zoeken naar contacten", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Contact succesvol samengevoegd", + "ERROR_MESSAGE": "Contacten zijn niet samengevoegd, probeer het opnieuw!", + "IS_SEARCHING": "Zoeken...", + "BUTTONS": { + "CANCEL": "Annuleren", + "CONFIRM": "Contact samenvoegen" + } + }, + "NOTES": { + "PLACEHOLDER": "Notitie toevoegen", + "WROTE": "schreef", + "YOU": "Jij", + "SAVE": "Save note", + "ADD_NOTE": "Add contact note", + "EXPAND": "Uitklappen", + "COLLAPSE": "Collapse", + "NO_NOTES": "No notes, you can add notes from the contact details page.", + "EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "No contacts found in this account", + "SUBTITLE": "Start adding new contacts by clicking on the button below", + "BUTTON_LABEL": "Add contact", + "SEARCH_EMPTY_STATE_TITLE": "Er zijn geen contacten die overeenkomen met je zoekopdracht 🔍", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Label toewijzen", + "ASSIGN_LABELS_SUCCESS": "Labels met succes toegewezen.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "Verwijderen", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Contactpersoon verwijderen" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "Bekijken", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "Aan:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Onderwerp :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "CC:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "BCC:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "BCC" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Schrijf hier je bericht..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Variabelen", + "BACK": "Ga terug", + "SEND_MESSAGE": "Verstuur bericht" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Ga terug", + "SEND_MESSAGE": "Verstuur bericht" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/contactFilters.json b/app/javascript/dashboard/i18n/locale/nl/contactFilters.json new file mode 100644 index 0000000..e3666f2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Contacten filteren", + "SUBTITLE": "Voeg hieronder filters toe en druk op 'Verzenden' om contacten te filteren.", + "EDIT_CUSTOM_SEGMENT": "Bewerk Segment", + "CUSTOM_VIEWS_SUBTITLE": "Filters toevoegen of verwijderen en bijwerken van uw segment.", + "ADD_NEW_FILTER": "Filter toevoegen", + "CLEAR_ALL_FILTERS": "Alle filters wissen", + "FILTER_DELETE_ERROR": "U moet minstens één filter hebben om op te slaan", + "SUBMIT_BUTTON_LABEL": "Bevestigen", + "UPDATE_BUTTON_LABEL": "Segment Updaten", + "CANCEL_BUTTON_LABEL": "Annuleren", + "CLEAR_BUTTON_LABEL": "Filters wissen", + "EMPTY_VALUE_ERROR": "Waarde is vereist", + "SEGMENT_LABEL": "Segment Naam", + "SEGMENT_QUERY_LABEL": "Segment Query", + "TOOLTIP_LABEL": "Contacten filteren", + "QUERY_DROPDOWN_LABELS": { + "AND": "EN", + "OR": "OF" + }, + "OPERATOR_LABELS": { + "equal_to": "Gelijk aan", + "not_equal_to": "Niet gelijk aan", + "contains": "Bevat", + "does_not_contain": "Bevat niet", + "is_present": "Is aanwezig", + "is_not_present": "Is niet aanwezig", + "is_greater_than": "Is groter dan", + "is_lesser_than": "Is minder dan", + "days_before": "Is x dagen vóór" + }, + "ERRORS": { + "VALUE_REQUIRED": "Waarde is vereist" + }, + "ATTRIBUTES": { + "NAME": "Naam", + "EMAIL": "E-mailadres", + "PHONE_NUMBER": "Telefoon nummer", + "IDENTIFIER": "Identifier", + "CITY": "Woonplaats", + "COUNTRY": "Land", + "CUSTOM_ATTRIBUTE_LIST": "Lijst", + "CUSTOM_ATTRIBUTE_TEXT": "Tekst", + "CUSTOM_ATTRIBUTE_NUMBER": "Getal", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Selectievakje", + "CREATED_AT": "Aangemaakt op", + "LAST_ACTIVITY": "Laatste Activiteit", + "REFERER_LINK": "Verwijzer link", + "BLOCKED": "Blocked", + "LABELS": "Labelen" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standaard Filters", + "ADDITIONAL_FILTERS": "Aanvullende filters", + "CUSTOM_ATTRIBUTES": "Aanpasbare attributen" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/contentTemplates.json b/app/javascript/dashboard/i18n/locale/nl/contentTemplates.json new file mode 100644 index 0000000..2de75cd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Templates zoeken", + "NO_TEMPLATES_FOUND": "Geen templates gevonden voor", + "NO_CONTENT": "No content", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Categorie", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Taal", + "TEMPLATE_BODY": "Template bericht", + "CATEGORY": "Categorie" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Tekst" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variabelen", + "LANGUAGE": "Taal", + "CATEGORY": "Categorie", + "VARIABLE_PLACEHOLDER": "Voer {variable} waarde in", + "GO_BACK_LABEL": "Ga terug", + "SEND_MESSAGE_LABEL": "Verstuur bericht", + "FORM_ERROR_MESSAGE": "Vul alstublieft alle variabelen in voordat u deze verzendt", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Terug", + "SEND_MESSAGE_BUTTON": "Verstuur bericht" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/conversation.json b/app/javascript/dashboard/i18n/locale/nl/conversation.json new file mode 100644 index 0000000..8466f1c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Selecteer een gesprek in het linker paneel", + "CSAT_REPLY_MESSAGE": "Beoordeel het gesprek", + "404": "Sorry, we kunnen het gesprek niet vinden. Probeer het opnieuw", + "SWITCH_VIEW_LAYOUT": "Wissel de lay-out", + "DASHBOARD_APP_TAB_MESSAGES": "Berichten", + "UNVERIFIED_SESSION": "De identiteit van deze gebruiker is niet geverifieerd", + "NO_MESSAGE_1": "Oh oh! Het lijkt erop dat er geen berichten van klanten in uw inbox staan.", + "NO_MESSAGE_2": " om een bericht naar uw pagina te sturen!", + "NO_INBOX_1": "Hola! Het lijkt erop dat je nog geen postvakken hebt toegevoegd.", + "NO_INBOX_2": " om te beginnen", + "NO_INBOX_AGENT": "Oh Oh! Het lijkt erop dat u geen deel uitmaakt van een inbox. Neem contact op met uw beheerder", + "SEARCH_MESSAGES": "Zoek naar berichten in gesprekken", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "to open command menu", + "KEYBOARD_SHORTCUTS": "sneltoetsen weergeven" + }, + "SEARCH": { + "TITLE": "Zoek berichten", + "RESULT_TITLE": "Zoekresultaten", + "LOADING_MESSAGE": "Crunching data...", + "PLACEHOLDER": "Typ een tekst om berichten te zoeken", + "NO_MATCHING_RESULTS": "Geen resultaten gevonden." + }, + "UNREAD_MESSAGES": "Ongelezen berichten", + "UNREAD_MESSAGE": "Ongelezen bericht", + "CLICK_HERE": "Klik hier", + "LOADING_INBOXES": "Inboxen laden", + "LOADING_CONVERSATIONS": "Conversaties laden", + "CANNOT_REPLY": "Je kunt niet reageren omdat", + "24_HOURS_WINDOW": "Beperking van 24-uur berichtenvenster", + "48_HOURS_WINDOW": "Beperking van 48-uur berichtenvenster", + "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours", + "NOT_ASSIGNED_TO_YOU": "Dit gesprek is niet aan je toegewezen. Wil je dit gesprek aan jezelf toewijzen?", + "ASSIGN_TO_ME": "Aan mij toewijzen", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "Je kunt dit gesprek alleen beantwoorden met een sjabloon bericht vanwege", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "Beperking van 24-uur berichtenvenster", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "Je antwoordt op:", + "REMOVE_SELECTION": "Verwijder selectie", + "DOWNLOAD": "Download", + "UNKNOWN_FILE_TYPE": "Onbekend bestand", + "SAVE_CONTACT": "Save Contact", + "NO_CONTENT": "No content to display", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} has shared a contact", + "LOCATION": "{sender} has shared a location", + "FILE": "{sender} has shared a file", + "MEETING": "{sender} has started a meeting" + }, + "UPLOADING_ATTACHMENTS": "Bijlagen uploaden...", + "REPLIED_TO_STORY": "Reageerde op jouw verhaal", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", + "SUCCESS_DELETE_MESSAGE": "Bericht succesvol verwijderd", + "FAIL_DELETE_MESSSAGE": "Kon bericht niet verwijderen! Probeer het opnieuw", + "NO_RESPONSE": "Geen reactie", + "RESPONSE": "Response", + "RATING_TITLE": "Beoordeling", + "FEEDBACK_TITLE": "Feedback", + "REPLY_MESSAGE_NOT_FOUND": "Bericht niet beschikbaar", + "CARD": { + "SHOW_LABELS": "Labels weergeven", + "HIDE_LABELS": "Labels verbergen" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "Oplossen", + "REOPEN_ACTION": "Heropenen", + "OPEN_ACTION": "Open", + "MORE_ACTIONS": "More actions", + "OPEN": "Meer", + "CLOSE": "Sluiten", + "DETAILS": "Details", + "SNOOZED_UNTIL": "Snooze tot", + "SNOOZED_UNTIL_TOMORROW": "Snoozed tot morgen", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed tot volgende week", + "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed tot volgende antwoord", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "missed", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Markeren als in afwachting van", + "SNOOZE_UNTIL": "Snooze", + "SNOOZE": { + "TITLE": "Snooze tot", + "NEXT_REPLY": "Volgende antwoord", + "TOMORROW": "Morgen", + "NEXT_WEEK": "Volgende week" + } + }, + "MENTION": { + "AGENTS": "Medewerkers", + "TEAMS": "Teams" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Snooze tot", + "APPLY": "Snooze", + "CANCEL": "Annuleren" + }, + "PRIORITY": { + "TITLE": "Prioriteit", + "OPTIONS": { + "NONE": "Geen", + "URGENT": "Dringend", + "HIGH": "Hoog", + "MEDIUM": "Gemiddeld", + "LOW": "Laag" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "Geen", + "INPUT_PLACEHOLDER": "Selecteer prioriteit", + "NO_RESULTS": "Geen resultaten gevonden", + "SUCCESSFUL": "Changed priority of conversation id {conversationId} to {priority}", + "FAILED": "Couldn't change priority. Please try again." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Delete conversation #{conversationId}", + "DESCRIPTION": "Are you sure you want to delete this conversation?", + "CONFIRM": "Verwijderen" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Markeren als in afwachting van", + "RESOLVED": "Markeer als opgelost", + "MARK_AS_UNREAD": "Markeer als ongelezen", + "MARK_AS_READ": "Mark as read", + "REOPEN": "Heropen gesprek", + "SNOOZE": { + "TITLE": "Sluimeren", + "NEXT_REPLY": "Tot volgende antwoord", + "TOMORROW": "Tot morgen", + "NEXT_WEEK": "Tot volgende week" + }, + "ASSIGN_AGENT": "Agent toewijzen", + "ASSIGN_LABEL": "Label toewijzen", + "AGENTS_LOADING": "Agents worden geladen...", + "ASSIGN_TEAM": "Team toewijzen", + "DELETE": "Delete conversation", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Gesprek id {conversationId} toegewezen aan \"{agentName}\"", + "FAILED": "Kan agent niet toewijzen. Probeer het opnieuw." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Couldn't assign label. Please try again." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Assigned team \"{team}\" to conversation id {conversationId}", + "FAILED": "Couldn't assign team. Please try again." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Handtekening van berichten", + "ENABLE_SIGN_TOOLTIP": "Handtekening activeren", + "DISABLE_SIGN_TOOLTIP": "Handtekening deactiveren", + "MSG_INPUT": "Shift + enter voor nieuwe regel. Begin met '/' om een standaard antwoord te selecteren.", + "PRIVATE_MSG_INPUT": "Shift + nieuwe regel invoeren. Dit is alleen zichtbaar voor medewerkers", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Berichtondertekening is niet geconfigureerd, configureer deze in de profielinstellingen.", + "CLICK_HERE": "Klik hier om bij te werken", + "WHATSAPP_TEMPLATES": "Whatsapp Templates" + }, + "REPLYBOX": { + "REPLY": "Beantwoorden", + "PRIVATE_NOTE": "Privénotitie", + "SEND": "Verzenden", + "CREATE": "Notitie toevoegen", + "INSERT_READ_MORE": "Meer lezen", + "DISMISS_REPLY": "Antwoord afwijzen", + "REPLYING_TO": "Antwoord op:", + "TIP_EMOJI_ICON": "Toon emoji-kiezer", + "TIP_ATTACH_ICON": "Bestanden toevoegen", + "TIP_AUDIORECORDER_ICON": "Audio opnemen", + "TIP_AUDIORECORDER_PERMISSION": "Sta toegang tot audio toe", + "TIP_AUDIORECORDER_ERROR": "Geluid kon niet worden geopend", + "DRAG_DROP": "Sleep hierheen om toe te voegen", + "START_AUDIO_RECORDING": "Start audio-opname", + "STOP_AUDIO_RECORDING": "Stop audio-opname", + "": "", + "EMAIL_HEAD": { + "TO": "AAN", + "ADD_BCC": "Voeg bcc toe", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + }, + "BCC": { + "LABEL": "BCC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Undefined variables", + "MESSAGE": "You have {undefinedVariablesCount} undefined variables in your message: {undefinedVariables}. Would you like to send the message anyway?", + "CONFIRM": { + "YES": "Verzenden", + "CANCEL": "Annuleren" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "Privéopmerking: alleen zichtbaar voor jou en je team", + "CHANGE_STATUS": "Gespreksstatus veranderd", + "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_AGENT": "Toegewezen persoon voor dit gesprek is veranderd", + "CHANGE_AGENT_FAILED": "Assignee change failed", + "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", + "ASSIGN_LABEL_FAILED": "Label assignment failed", + "CHANGE_TEAM": "Conversation team changed", + "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", + "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", + "MESSAGE_ERROR": "Unable to send this message, please try again later", + "SENT_BY": "Verzonden door:", + "BOT": "Bot", + "SEND_FAILED": "Kon bericht niet verzenden! Probeer het opnieuw", + "TRY_AGAIN": "opnieuw proberen", + "ASSIGNMENT": { + "SELECT_AGENT": "Selecteer medewerker", + "REMOVE": "Verwijderen", + "ASSIGN": "Toewijzen" + }, + "CONTEXT_MENU": { + "COPY": "Kopiëren", + "REPLY_TO": "Reply to this message", + "DELETE": "Verwijderen", + "CREATE_A_CANNED_RESPONSE": "Add to canned responses", + "TRANSLATE": "Vertaal", + "COPY_PERMALINK": "Copy link to the message", + "LINK_COPIED": "Message URL copied to the clipboard", + "DELETE_CONFIRMATION": { + "TITLE": "Weet je zeker dat je dit bericht wilt verwijderen?", + "MESSAGE": "You cannot undo this action", + "DELETE": "Verwijderen", + "CANCEL": "Annuleren" + } + }, + "SIDEBAR": { + "CONTACT": "Contact", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Verstuur conversatie transcript", + "DESC": "Send a copy of the conversation transcript to the specified email address", + "SUBMIT": "Bevestigen", + "CANCEL": "Annuleren", + "SEND_EMAIL_SUCCESS": "The chat transcript was sent successfully", + "SEND_EMAIL_ERROR": "Er is een fout opgetreden, probeer het opnieuw", + "FORM": { + "SEND_TO_CONTACT": "Send the transcript to the customer", + "SEND_TO_AGENT": "Send the transcript to the assigned agent", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Send the transcript to another email address", + "EMAIL": { + "PLACEHOLDER": "Voer een e-mailadres in", + "ERROR": "Voer een geldig e-mailadres in" + } + } + }, + "ONBOARDING": { + "TITLE": "Hey 👋, Welcome to {installationName}!", + "DESCRIPTION": "Thanks for signing up. We want you to get the most out of {installationName}. Here are a few things you can do in {installationName} to make the experience delightful.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "Lees onze laatste updates", + "ALL_CONVERSATION": { + "TITLE": "All your conversations in one place", + "DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status.", + "NEW_LINK": "Click here to create an inbox" + }, + "TEAM_MEMBERS": { + "TITLE": "Invite your team members", + "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.", + "NEW_LINK": "Click here to invite a team member" + }, + "LABELS": { + "TITLE": "Organize conversations with labels", + "DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.", + "NEW_LINK": "Click here to create tags" + }, + "CANNED_RESPONSES": { + "TITLE": "Create canned responses", + "DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.", + "NEW_LINK": "Click here to create a canned response" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Assigned Agent", + "SELF_ASSIGN": "Aan mij toewijzen", + "TEAM_LABEL": "Toegewezen team", + "SELECT": { + "PLACEHOLDER": "Geen" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Contactgegevens", + "CONVERSATION_ACTIONS": "Conversation Actions", + "CONVERSATION_LABELS": "Labels voor gesprekken", + "CONVERSATION_INFO": "Conversation Information", + "CONTACT_NOTES": "Contact Notes", + "CONTACT_ATTRIBUTES": "Contact Attributes", + "PREVIOUS_CONVERSATION": "Vorige gesprekken", + "MACROS": "Macro's", + "LINEAR_ISSUES": "Linked Linear Issues", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "Afwachtend", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Maak kenmerk aan", + "NO_RECORDS_FOUND": "Geen attributen gevonden", + "UPDATE": { + "SUCCESS": "Attribuut succesvol toegevoegd", + "ERROR": "Kan het attribuut niet bijwerken. Probeer het later opnieuw" + }, + "ADD": { + "TITLE": "Toevoegen", + "SUCCESS": "Attribuut succesvol toegevoegd", + "ERROR": "Kan het attribuut niet toevoegen. Probeer het later opnieuw" + }, + "DELETE": { + "SUCCESS": "Attribuut succesvol verwijderd", + "ERROR": "Attribuut verwijderen mislukt. Probeer het later opnieuw" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Attributen toevoegen", + "PLACEHOLDER": "Attributen zoeken", + "NO_RESULT": "Geen attributen gevonden" + } + }, + "EMAIL_HEADER": { + "FROM": "van", + "TO": "Aan", + "BCC": "BCC", + "CC": "CC", + "SUBJECT": "Onderwerp", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Participating", + "SIDEBAR_TITLE": "Conversation participants", + "NO_RECORDS_FOUND": "Geen resultaten gevonden", + "ADD_PARTICIPANTS": "Select participants", + "REMANING_PARTICIPANTS_TEXT": "+{count} others", + "REMANING_PARTICIPANT_TEXT": "+{count} other", + "TOTAL_PARTICIPANTS_TEXT": "{count} people are participating.", + "TOTAL_PARTICIPANT_TEXT": "{count} person is participating.", + "NO_PARTICIPANTS_TEXT": "No one is participating!.", + "WATCH_CONVERSATION": "Join conversation", + "YOU_ARE_WATCHING": "You are participating", + "API": { + "ERROR_MESSAGE": "Could not update, try again!", + "SUCCESS_MESSAGE": "Participants updated!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "View translated content", + "DESC": "You can view the translated content in each langauge.", + "ORIGINAL_CONTENT": "Oorspronkelijke inhoud", + "TRANSLATED_CONTENT": "Vertaalde inhoud", + "NO_TRANSLATIONS_AVAILABLE": "Geen vertalingen beschikbaar voor deze inhoud" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/csatMgmt.json b/app/javascript/dashboard/i18n/locale/nl/csatMgmt.json new file mode 100644 index 0000000..71b8c54 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Beoordeel uw gesprek", + "PLACEHOLDER": "Vertel ons meer...", + "RATINGS": { + "POOR": "😞 Slecht", + "FAIR": "😑 Redelijk", + "AVERAGE": "😐 Gemiddeld", + "GOOD": "😀 Goed", + "EXCELLENT": "😍 Uitstekend" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/customRole.json b/app/javascript/dashboard/i18n/locale/nl/customRole.json new file mode 100644 index 0000000..ad0333c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Custom Roles", + "LEARN_MORE": "Learn more about custom roles", + "DESCRIPTION": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "HEADER_BTN_TXT": "Add custom role", + "LOADING": "Fetching custom roles...", + "SEARCH_404": "Er zijn geen items die overeenkomen met deze zoekopdracht.", + "PAYWALL": { + "TITLE": "Upgrade to create custom roles", + "AVAILABLE_ON": "The custom role feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The custom role feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Manage custom roles", + "DESC": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "TABLE_HEADER": { + "NAME": "Naam", + "DESCRIPTION": "Beschrijving", + "PERMISSIONS": "Permissions", + "ACTIONS": "Acties" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "Naam", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "Naam is vereist." + }, + "DESCRIPTION": { + "LABEL": "Beschrijving", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "Omschrijving is vereist." + }, + "PERMISSIONS": { + "LABEL": "Permissions", + "ERROR": "Permissions are required." + }, + "CANCEL_BUTTON_TEXT": "Annuleren", + "API": { + "ERROR_MESSAGE": "Kan geen verbinding maken met de Woot server. Probeer het opnieuw." + } + }, + "ADD": { + "TITLE": "Add custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Bevestigen", + "API": { + "SUCCESS_MESSAGE": "Custom role added successfully." + } + }, + "EDIT": { + "BUTTON_TEXT": "Bewerken", + "TITLE": "Edit custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Vernieuwen", + "API": { + "SUCCESS_MESSAGE": "Custom role updated successfully." + } + }, + "DELETE": { + "BUTTON_TEXT": "Verwijderen", + "API": { + "SUCCESS_MESSAGE": "Custom role deleted successfully.", + "ERROR_MESSAGE": "Kan geen verbinding maken met de Woot server. Probeer het opnieuw." + }, + "CONFIRM": { + "TITLE": "Verwijdering bevestigen", + "MESSAGE": "Weet u zeker dat u wilt verwijderen ", + "YES": "Ja, verwijder ", + "NO": "Nee, bewaar" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/datePicker.json b/app/javascript/dashboard/i18n/locale/nl/datePicker.json new file mode 100644 index 0000000..92a28fa --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Apply", + "CLEAR_BUTTON": "Clear", + "DATE_RANGE_INPUT": { + "START": "Start Date", + "END": "End Date" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "DATE RANGE", + "LAST_7_DAYS": "Afgelopen 7 dagen", + "LAST_30_DAYS": "Laatste 30 dagen", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_RANGE": "Custom date range" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/emoji.json b/app/javascript/dashboard/i18n/locale/nl/emoji.json new file mode 100644 index 0000000..d364fd3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Zoek emojis", + "NOT_FOUND": "Er zijn geen overeenkomende emoji's gevonden", + "REMOVE": "Verwijderen" + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/general.json b/app/javascript/dashboard/i18n/locale/nl/general.json new file mode 100644 index 0000000..f3a6a4c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Showing {firstIndex}-{lastIndex} of {totalCount} items", + "PHONE_INPUT": { + "PLACEHOLDER": "Zoeken", + "EMPTY_STATE": "Geen resultaten gevonden" + }, + "CLOSE": "Sluiten", + "BETA": "Beta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/generalSettings.json b/app/javascript/dashboard/i18n/locale/nl/generalSettings.json new file mode 100644 index 0000000..3ddf3e2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.", + "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.", + "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.", + "NON_ADMIN": "Please contact your administrator to upgrade the plan and continue using all features." + }, + "TITLE": "Accountinstellingen", + "SUBMIT": "Instellingen bijwerken", + "BACK": "Terug", + "DISMISS": "Negeer", + "UPDATE": { + "ERROR": "Instellingen konden niet worden bijgewerkt, probeer het opnieuw!", + "SUCCESS": "Accountinstellingen succesvol bijgewerkt" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Delete your Account", + "NOTE": "Once you delete your account, all your data will be deleted.", + "BUTTON_TEXT": "Delete Your Account", + "CONFIRM": { + "TITLE": "Delete Account", + "MESSAGE": "Deleting your Account is irreversible. Enter your account name below to confirm you want to permanently delete it.", + "BUTTON_TEXT": "Verwijderen", + "DISMISS": "Annuleren", + "PLACE_HOLDER": "Please type {accountName} to confirm" + }, + "SUCCESS": "Account marked for deletion", + "FAILURE": "Could not delete account, try again!", + "SCHEDULED_DELETION": { + "TITLE": "Account Scheduled for Deletion", + "MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.", + "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.", + "CLEAR_BUTTON": "Cancel Scheduled Deletion" + } + }, + "FORM": { + "ERROR": "Corrigeer formulierfouten", + "GENERAL_SECTION": { + "TITLE": "Algemene instellingen", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "Account ID", + "NOTE": "This ID is required if you are building an API based integration" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.", + "DURATION": { + "LABEL": "Inactivity duration", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Voorkeuren", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "accountnaam", + "PLACEHOLDER": "Uw accountnaam", + "ERROR": "Voer een geldige accountnaam in" + }, + "LANGUAGE": { + "LABEL": "Taal", + "PLACEHOLDER": "Uw accountnaam", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Incoming Email Domain", + "PLACEHOLDER": "The domain where you will receive the emails", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "E-mailadres support", + "PLACEHOLDER": "E-mailadres support van uw bedrijf", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclude unattended conversations", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a conversation should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "Vernieuwen", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "Conversation continuity with emails is enabled for your account.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "You can receive emails in your custom domain now." + } + }, + "UPDATE_CHATWOOT": "An update {latestChatwootVersion} for Chatwoot is available. Please update your instance.", + "LEARN_MORE": "Learn more", + "PAYMENT_PENDING": "Your payment is pending. Please update your payment information to continue using Chatwoot", + "UPGRADE": "Upgrade to continue using Chatwoot", + "LIMITS_UPGRADE": "Your account has exceeded the usage limits, please upgrade your plan to continue using Chatwoot", + "OPEN_BILLING": "Openstaande facturering" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Press enter to select", + "ENTER_TO_REMOVE": "Press enter to remove", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "Selecteer een", + "SELECT": "Selecteer" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Notifications", + "MARK_ALL_DONE": "Mark All Done", + "DELETE_TITLE": "verwijderd", + "UNREAD_NOTIFICATION": { + "TITLE": "Unread Notifications", + "ALL_NOTIFICATIONS": "View all notifications", + "LOADING_UNREAD_MESSAGE": "Loading unread notifications...", + "EMPTY_MESSAGE": "You have no unread notifications" + }, + "LIST": { + "LOADING_MESSAGE": "Loading notifications...", + "404": "Geen meldingen", + "TABLE_HEADER": [ + "Naam", + "Telefoonnummer", + "Gesprekken", + "Laatste contact" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "New conversation", + "conversation_assignment": "Conversation Assigned", + "assigned_conversation_new_message": "Nieuw bericht", + "participating_conversation_new_message": "Nieuw bericht", + "conversation_mention": "Mention", + "sla_missed_first_response": "SLA Missed", + "sla_missed_next_response": "SLA Missed", + "sla_missed_resolution": "SLA Missed" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Offline", + "RECONNECTING": "Reconnecting...", + "RECONNECT_SUCCESS": "Reconnected" + }, + "BUTTON": { + "REFRESH": "Refresh" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Search or jump to", + "SECTIONS": { + "GENERAL": "Algemeen", + "REPORTS": "Rapporten", + "CONVERSATION": "Gesprek", + "BULK_ACTIONS": "Bulk Actions", + "CHANGE_ASSIGNEE": "Change Assignee", + "CHANGE_PRIORITY": "Change Priority", + "CHANGE_TEAM": "Change Team", + "SNOOZE_CONVERSATION": "Demp gesprek", + "ADD_LABEL": "Add label to the conversation", + "REMOVE_LABEL": "Remove label from the conversation", + "SETTINGS": "Instellingen", + "AI_ASSIST": "AI-assistent", + "APPEARANCE": "Weergave", + "SNOOZE_NOTIFICATION": "Snooze Notification" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview", + "GO_TO_CONVERSATION_REPORTS": "Go to Conversation Reports", + "GO_TO_AGENT_REPORTS": "Go to Agent Reports", + "GO_TO_LABEL_REPORTS": "Go to Label Reports", + "GO_TO_INBOX_REPORTS": "Go to Inbox Reports", + "GO_TO_TEAM_REPORTS": "Go to Team Reports", + "GO_TO_SETTINGS_AGENTS": "Go to Agent Settings", + "GO_TO_SETTINGS_TEAMS": "Go to Team Settings", + "GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings", + "GO_TO_SETTINGS_LABELS": "Go to Label Settings", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings", + "GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings", + "GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings", + "GO_TO_SETTINGS_PROFILE": "Go to Profile Settings", + "GO_TO_NOTIFICATIONS": "Go to Notifications", + "ADD_LABELS_TO_CONVERSATION": "Add label to the conversation", + "ASSIGN_AN_AGENT": "Assign an agent", + "AI_ASSIST": "AI-assistent", + "ASSIGN_PRIORITY": "Assign priority", + "ASSIGN_A_TEAM": "Assign a team", + "MUTE_CONVERSATION": "Mute conversation", + "UNMUTE_CONVERSATION": "Unmute conversation", + "REMOVE_LABEL_FROM_CONVERSATION": "Remove label from the conversation", + "REOPEN_CONVERSATION": "Reopen conversation", + "RESOLVE_CONVERSATION": "Resolve conversation", + "SEND_TRANSCRIPT": "Send an email transcript", + "SNOOZE_CONVERSATION": "Demp gesprek", + "UNTIL_NEXT_REPLY": "Tot de volgende reactie", + "UNTIL_NEXT_WEEK": "Tot volgende week", + "UNTIL_TOMORROW": "Tot morgen", + "UNTIL_NEXT_MONTH": "Tot volgende maand", + "AN_HOUR_FROM_NOW": "Until an hour from now", + "UNTIL_CUSTOM_TIME": "Custom...", + "CHANGE_APPEARANCE": "Change Appearance", + "LIGHT_MODE": "Light", + "DARK_MODE": "Dark", + "SYSTEM_MODE": "Systeem", + "SNOOZE_NOTIFICATION": "Snooze Notification" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Loading Dashboard App..." + }, + "COMMON": { + "OR": "Or", + "CLICK_HERE": "klik hier" + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/helpCenter.json b/app/javascript/dashboard/i18n/locale/nl/helpCenter.json new file mode 100644 index 0000000..9215963 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Help Center", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "Create Portal" + }, + "HEADER": { + "FILTER": "Filter by", + "SORT": "Sort by", + "LOCALE": "Locale", + "SETTINGS_BUTTON": "Instellingen", + "NEW_BUTTON": "New Article", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Published", + "DRAFT": "Draft", + "ARCHIVED": "Archived" + }, + "TITLES": { + "ALL_ARTICLES": "All Articles", + "MINE": "My Articles", + "DRAFT": "Draft Articles", + "ARCHIVED": "Archived Articles" + }, + "LOCALE_SELECT": { + "TITLE": "Select locale", + "PLACEHOLDER": "Select locale", + "NO_RESULT": "No locale found", + "SEARCH_PLACEHOLDER": "Search locale" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "All Articles", + "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", + "PREVIEW": "Preview", + "ADD_TRANSLATION": "Add translation", + "OPEN_SIDEBAR": "Open sidebar", + "CLOSE_SIDEBAR": "Close sidebar", + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Afbeelding uploaden", + "UPLOADING": "Uploaden...", + "SUCCESS": "Image uploaded successfully", + "ERROR": "Error while uploading image", + "UN_AUTHORIZED_ERROR": "You are not authorized to upload images", + "ERROR_FILE_SIZE": "Image size should be less than {size}MB", + "ERROR_FILE_FORMAT": "Image format should be jpg, jpeg or png", + "ERROR_FILE_DIMENSIONS": "Image dimensions should be less than 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Article Settings", + "FORM": { + "CATEGORY": { + "LABEL": "Categorie", + "TITLE": "Select category", + "PLACEHOLDER": "Select category", + "NO_RESULT": "No category found", + "SEARCH_PLACEHOLDER": "Search category" + }, + "AUTHOR": { + "LABEL": "Author", + "TITLE": "Select author", + "PLACEHOLDER": "Select author", + "NO_RESULT": "No authors found", + "SEARCH_PLACEHOLDER": "Search author" + }, + "META_TITLE": { + "LABEL": "Meta title", + "PLACEHOLDER": "Add a meta title" + }, + "META_DESCRIPTION": { + "LABEL": "Meta description", + "PLACEHOLDER": "Add your meta description for better SEO results..." + }, + "META_TAGS": { + "LABEL": "Meta tags", + "PLACEHOLDER": "Add meta tags separated by comma..." + } + }, + "BUTTONS": { + "ARCHIVE": "Archive article", + "DELETE": "Delete article" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Uncategorized", + "SEARCH_RESULTS": "Search results for {query}", + "EMPTY_TEXT": "Search for articles to insert into replies.", + "SEARCH_LOADER": "Zoeken...", + "INSERT_ARTICLE": "Insert", + "NO_RESULT": "No articles found", + "COPY_LINK": "Copy article link to clipboard", + "OPEN_LINK": "Open article in new tab", + "PREVIEW_LINK": "Preview article" + }, + "PORTAL": { + "HEADER": "Portals", + "DEFAULT": "Default", + "NEW_BUTTON": "New Portal", + "ACTIVE_BADGE": "active", + "CHOOSE_LOCALE_LABEL": "Choose a locale", + "LOADING_MESSAGE": "Loading portals...", + "ARTICLES_LABEL": "articles", + "NO_PORTALS_MESSAGE": "There are no available portals", + "ADD_NEW_LOCALE": "Add a new locale", + "POPOVER": { + "TITLE": "Portals", + "PORTAL_SETTINGS": "Portal settings", + "SUBTITLE": "You have multiple portals and can have different locales for each portal.", + "CANCEL_BUTTON_LABEL": "Annuleren", + "CHOOSE_LOCALE_BUTTON": "Choose Locale" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "articles", + "ADD": "Add locale", + "VISIT": "Visit site", + "SETTINGS": "Instellingen", + "DELETE": "Verwijderen" + }, + "PORTAL_CONFIG": { + "TITLE": "Portal Configurations", + "ITEMS": { + "NAME": "Naam", + "DOMAIN": "Custom domain", + "SLUG": "Slug", + "TITLE": "Portal title", + "THEME": "Theme color", + "SUB_TEXT": "Portal sub text" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Available locales", + "TABLE": { + "NAME": "Locale name", + "CODE": "Locale code", + "ARTICLE_COUNT": "No. of articles", + "CATEGORIES": "No. of categories", + "SWAP": "Swap", + "DELETE": "Verwijderen", + "DEFAULT_LOCALE": "Default" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Naam", + "DESCRIPTION": "Beschrijving", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Help center information", + "BODY": "Basic information about portal" + }, + "CUSTOMIZATION": { + "TITLE": "Help center customization", + "BODY": "Customize portal" + }, + "FINISH": { + "TITLE": "Voila! 🎉", + "BODY": "You're all set!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Terug", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Create Portal", + "TITLE": "Help center information", + "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Portal customisation", + "TITLE": "Help center customization", + "UPDATE_PORTAL_BUTTON": "Update portal settings" + }, + "FINISH_PAGE": { + "TITLE": "Voila!🎉 You're all set up!", + "MESSAGE": "You can now see this created portal on your all portals page.", + "FINISH": "Go to all portals page" + } + }, + "LOGO": { + "LABEL": "Logo", + "UPLOAD_BUTTON": "Upload logo", + "HELP_TEXT": "This logo will be displayed on the portal header.", + "IMAGE_UPLOAD_SUCCESS": "Logo uploaded successfully", + "IMAGE_UPLOAD_ERROR": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Error while deleting logo" + }, + "NAME": { + "LABEL": "Naam", + "PLACEHOLDER": "Portal name", + "HELP_TEXT": "The name will be used in the public facing portal internally.", + "ERROR": "Naam is vereist" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug for urls", + "ERROR": "Slug is required" + }, + "DOMAIN": { + "LABEL": "Custom Domain", + "PLACEHOLDER": "Portal custom domain", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}", + "ERROR": "Enter a valid domain URL" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home Page Link", + "PLACEHOLDER": "Portal home page link", + "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}", + "ERROR": "Enter a valid home page URL" + }, + "THEME_COLOR": { + "LABEL": "Portal theme color", + "HELP_TEXT": "This color will show as the theme color for the portal." + }, + "PAGE_TITLE": { + "LABEL": "Page Title", + "PLACEHOLDER": "Portal page title", + "HELP_TEXT": "The page title will be used in the public facing portal.", + "ERROR": "Page title is required" + }, + "HEADER_TEXT": { + "LABEL": "Header Text", + "PLACEHOLDER": "Portal header text", + "HELP_TEXT": "The Portal header text will be used in the public facing portal.", + "ERROR": "Portal header text is required" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", + "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", + "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Annuleren" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Loading articles...", + "404": "No articles matches your search 🔍", + "NO_ARTICLES": "There are no available articles", + "HEADERS": { + "TITLE": "Titel", + "CATEGORY": "Categorie", + "READ_COUNT": "Views", + "STATUS": "Status", + "LAST_EDITED": "Last edited" + }, + "COLUMNS": { + "BY": "by", + "AUTHOR_NOT_AVAILABLE": "Author is not available" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Loading article...", + "TITLE_PLACEHOLDER": "Article title goes here", + "CONTENT_PLACEHOLDER": "Write your article here", + "API": { + "ERROR": "Error while saving article" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article published successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Error while drafting article", + "SUCCESS": "Article drafted successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Verwijderen bevestigen", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Ja, verwijderen", + "NO": "Nee, Bewaar het" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Search for articles" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Create a category", + "SUB_TITLE": "The category will be used in the public facing portal to categorize articles.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Naam", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Naam is vereist" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Beschrijving", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Omschrijving is vereist" + }, + "BUTTONS": { + "CREATE": "Create category", + "CANCEL": "Annuleren" + }, + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Naam", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Naam is vereist" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Beschrijving", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Omschrijving is vereist" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Annuleren" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Search articles", + "PLACEHOLDER": "Search articles", + "NO_RESULT": "No articles found", + "SEARCHING": "Zoeken...", + "SEARCH_BUTTON": "Zoeken", + "INSERT_ARTICLE": "Insert link", + "IFRAME_ERROR": "URL is empty or invalid. Unable to display content.", + "OPEN_ARTICLE_SEARCH": "Insert article from Help Center", + "SUCCESS_ARTICLE_INSERTED": "Article inserted successfully", + "PREVIEW_LINK": "Preview article", + "CANCEL": "Sluiten", + "BACK": "Terug", + "BACK_RESULTS": "Back to results" + }, + "UPGRADE_PAGE": { + "TITLE": "Help Center", + "DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Upgrade your subscription to enable this feature.", + "SELF_HOSTED_DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Please contact your administrator to enable this feature.", + "BUTTON": { + "LEARN_MORE": "Learn more", + "UPGRADE": "Upgrade" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Multiple portals", + "DESCRIPTION": "Create multiple help center portals for different products using the same account." + }, + "LOCALES": { + "TITLE": "Full support for locales", + "DESCRIPTION": "Localize the portal in your language. We support all locales and allow translations for every article." + }, + "SEO": { + "TITLE": "SEO-friendly design", + "DESCRIPTION": "Customize your meta tags to improve your visibility on search engines with our SEO-friendly pages." + }, + "API": { + "TITLE": "Full API support", + "DESCRIPTION": "Use the portal as a headless CMS with third party front-end frameworks using our APIs." + } + } + }, + "LOADING": "Loading...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} view | {count} views", + "DROPDOWN_MENU": { + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "DELETE": "Verwijderen" + }, + "STATUS": { + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "UNCATEGORISED": "Uncategorised" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "All articles", + "MINE": "Mijn", + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "ALL": "All categories" + }, + "LOCALE": { + "ALL": "All locales" + }, + "NEW_ARTICLE": "New article" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Write an article", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "New article" + }, + "MINE": { + "TITLE": "You haven't written any articles here", + "SUBTITLE": "All articles written by you show up here for quick access." + }, + "DRAFT": { + "TITLE": "There are no articles in drafts", + "SUBTITLE": "Draft articles will appear here" + }, + "PUBLISHED": { + "TITLE": "There are no published articles", + "SUBTITLE": "Published articles will appear here" + }, + "ARCHIVED": { + "TITLE": "There are no articles in the archive", + "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages" + }, + "CATEGORY": { + "TITLE": "There are no articles in this category", + "SUBTITLE": "Articles in this category will appear here" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "New category", + "EDIT_CATEGORY": "Edit category", + "CATEGORIES_COUNT": "{n} category | {n} categories", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categories ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "No categories found", + "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + }, + "HEADER": { + "CREATE": "Create category", + "EDIT": "Edit category", + "DESCRIPTION": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale" + }, + "FORM": { + "NAME": { + "LABEL": "Naam", + "PLACEHOLDER": "Category name", + "ERROR": "Naam is vereist" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "ERROR": "Slug is required", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Beschrijving", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Omschrijving is vereist" + } + }, + "BUTTONS": { + "CREATE": "Aanmaken", + "EDIT": "Vernieuwen", + "CANCEL": "Annuleren" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "No locales available | {n} locale | {n} locales", + "NEW_LOCALE_BUTTON_TEXT": "New locale", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles", + "CATEGORIES_COUNT": "{count} category | {count} categories", + "DEFAULT": "Default", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Make default", + "DELETE": "Verwijderen" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Add a new locale", + "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", + "COMBOBOX": { + "PLACEHOLDER": "Select locale..." + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "PREVIEW": "Preview", + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "BACK_TO_ARTICLES": "Back to articles" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "More properties", + "UNCATEGORIZED": "Uncategorized", + "EDITOR_PLACEHOLDER": "Write something..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Article properties", + "META_DESCRIPTION": "Meta description", + "META_DESCRIPTION_PLACEHOLDER": "Add meta description", + "META_TITLE": "Meta title", + "META_TITLE_PLACEHOLDER": "Add meta title", + "META_TAGS": "Meta tags", + "META_TAGS_PLACEHOLDER": "Add meta tags" + }, + "API": { + "ERROR": "Error while saving article" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "New portal", + "PORTALS": "Portals", + "CREATE_PORTAL": "Create and manage multiple portals", + "ARTICLES": "articles", + "DOMAIN": "domeinnaam", + "PORTAL_NAME": "Portal name" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Create new portal", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "Aanmaken", + "NAME": { + "LABEL": "Naam", + "PLACEHOLDER": "User Guide | Chatwoot", + "MESSAGE": "Choose an name for your portal.", + "ERROR": "Naam is vereist" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Slug is required", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logo", + "IMAGE_UPLOAD_ERROR": "Kon afbeelding niet uploaden! Probeer het opnieuw", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo", + "IMAGE_DELETE_SUCCESS": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Unable to delete logo", + "IMAGE_UPLOAD_SIZE_ERROR": "De grootte van de afbeelding moet kleiner zijn dan {size}MB" + }, + "NAME": { + "LABEL": "Naam", + "PLACEHOLDER": "Portal name", + "ERROR": "Naam is vereist" + }, + "HEADER_TEXT": { + "LABEL": "Header text", + "PLACEHOLDER": "Portal header text" + }, + "PAGE_TITLE": { + "LABEL": "Page title", + "PLACEHOLDER": "Portal page title" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home page link", + "PLACEHOLDER": "Portal home page link", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Live chat widget", + "PLACEHOLDER": "Select live chat widget", + "HELP_TEXT": "Select a live chat widget that will appear on your help center", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Brand color" + }, + "SAVE_CHANGES": "Save changes" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Custom domain", + "LABEL": "Custom domain:", + "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Portal custom domain", + "EDIT_BUTTON": "Bewerken", + "ADD_BUTTON": "Add custom domain", + "STATUS": { + "LIVE": "Live", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Add custom domain", + "EDIT_HEADER": "Edit custom domain", + "ADD_CONFIRM_BUTTON_LABEL": "Add domain", + "EDIT_CONFIRM_BUTTON_LABEL": "Update domain", + "LABEL": "Custom domain", + "PLACEHOLDER": "Portal custom domain", + "ERROR": "Custom domain is required", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS configuration", + "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "Verzenden" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Delete {portalName}", + "HEADER": "Delete portal", + "DESCRIPTION": "Permanently delete this portal. This action is irreversible", + "DIALOG": { + "HEADER": "Sure you want to delete {portalName}?", + "DESCRIPTION": "This is a permanent action that cannot be reversed.", + "CONFIRM_BUTTON_LABEL": "Verwijderen" + } + }, + "EDIT_CONFIGURATION": "Edit configuration" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal created successfully", + "ERROR_MESSAGE": "Unable to create portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal updated successfully", + "ERROR_MESSAGE": "Unable to update portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "Uploaden...", + "UPLOAD": "Upload & Process", + "CANCEL": "Annuleren", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Genereren...", + "CONFIRM_DELETE": "Are you sure you want to delete {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Completed", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/inbox.json b/app/javascript/dashboard/i18n/locale/nl/inbox.json new file mode 100644 index 0000000..2b1d3d8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "My Inbox", + "DISPLAY_DROPDOWN": "Display", + "LOADING": "Fetching notifications", + "404": "There are no active notifications in this group.", + "NO_NOTIFICATIONS": "No notifications", + "NOTE": "Notifications from all subscribed inboxes", + "NO_MESSAGES_AVAILABLE": "Oops! Not able to fetch messages", + "SNOOZED_UNTIL": "Snooze tot", + "SNOOZED_UNTIL_TOMORROW": "Snoozed tot morgen", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed tot volgende week" + }, + "ACTION_HEADER": { + "SNOOZE": "Snooze notification", + "DELETE": "Delete notification", + "BACK": "Terug" + }, + "TYPES": { + "CONVERSATION_MENTION": "You have been mentioned in a conversation", + "CONVERSATION_CREATION": "New conversation created", + "CONVERSATION_ASSIGNMENT": "A conversation has been assigned to you", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message in a conversation you are participating in", + "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation", + "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation", + "SLA_MISSED_RESOLUTION": "SLA target resolution missed for conversation" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Mentioned", + "CONVERSATION_ASSIGNMENT": "Assigned to you", + "CONVERSATION_CREATION": "New Conversation", + "SLA_MISSED_FIRST_RESPONSE": "SLA breach", + "SLA_MISSED_NEXT_RESPONSE": "SLA breach", + "SLA_MISSED_RESOLUTION": "SLA breach", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Nieuw bericht", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Nieuw bericht", + "SNOOZED_UNTIL": "Snoozed for {time}", + "SNOOZED_ENDS": "Snooze ended" + }, + "NO_CONTENT": "Geen inhoud beschikbaar", + "MENU_ITEM": { + "MARK_AS_READ": "Mark as read", + "MARK_AS_UNREAD": "Markeer als ongelezen", + "SNOOZE": "Sluimeren", + "DELETE": "Verwijderen", + "MARK_ALL_READ": "Markeer alles als gelezen", + "DELETE_ALL": "Delete all", + "DELETE_ALL_READ": "Delete all read" + }, + "DISPLAY_MENU": { + "SORT": "Sort", + "DISPLAY": "Display :", + "SORT_OPTIONS": { + "NEWEST": "Newest", + "OLDEST": "Oldest", + "PRIORITY": "Prioriteit" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Gesluimerd", + "READ": "Lezen", + "LABELS": "Labelen", + "CONVERSATION_ID": "Conversation ID" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notification marked as read", + "MARK_AS_UNREAD": "Notification marked as unread", + "SNOOZE": "Notification snoozed", + "DELETE": "Notification deleted", + "MARK_ALL_READ": "All notifications marked as read", + "DELETE_ALL": "All notifications deleted", + "DELETE_ALL_READ": "All read notifications deleted" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json new file mode 100644 index 0000000..e2d6632 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Inboxen", + "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.", + "LEARN_MORE": "Learn more about inboxes", + "RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.", + "CLICK_TO_RECONNECT": "Click here to reconnect.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "Er zijn geen inboxen aan dit account gekoppeld." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Kies kanaal", + "BODY": "Kies de aanbieder die je wilt integreren met Chatwoot." + }, + "INBOX": { + "TITLE": "Maak inbox", + "BODY": "Verifieer je account en maak een inbox." + }, + "AGENT": { + "TITLE": "Agenten toevoegen", + "BODY": "Voeg agenten toe aan de aangemaakte inbox." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "Je bent helemaal klaar om te beginnen!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Enter your inbox name (eg: Acme Inc)", + "ERROR": "Please enter a valid inbox name" + }, + "WEBSITE_NAME": { + "LABEL": "Website naam", + "PLACEHOLDER": "Voer de naam van je website in (bv. Acme Inc)" + }, + "FB": { + "HELP": "PS: Door in te loggen krijgen we alleen toegang tot berichten van uw Pagina. Chatwood heeft nooit toegang tot je privéberichten.", + "CHOOSE_PAGE": "Kies pagina", + "CHOOSE_PLACEHOLDER": "Select a page from the list", + "INBOX_NAME": "Inbox Name", + "ADD_NAME": "Add a name for your inbox", + "PICK_NAME": "Pick a Name for your Inbox", + "PICK_A_VALUE": "Pick a value", + "CREATE_INBOX": "Maak inbox" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continue with Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile", + "HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ", + "ERROR_MESSAGE": "There was an error connecting to Instagram, please try again", + "ERROR_AUTH": "There was an error connecting to Instagram, please try again", + "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "Om uw Twitterprofiel als kanaal toe te voegen moet u uw Twitterprofiel verifiëren door te klikken op 'Meld je aan met Twitter' ", + "ERROR_MESSAGE": "There was an error connecting to Twitter, please try again", + "TWEETS": { + "ENABLE": "Create conversations from mentioned Tweets" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Website kanaal", + "DESC": "Maak een kanaal voor uw website en begin met het ondersteunen van uw klanten via onze website widget.", + "LOADING_MESSAGE": "Website ondersteuningskanaal aanmaken", + "CHANNEL_AVATAR": { + "LABEL": "Avatar kanaal" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "Please enter your Webhook URL", + "ERROR": "Voer een geldige URL in" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Website domein", + "PLACEHOLDER": "Voer uw website domein in (bv. acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Welkom op titel", + "PLACEHOLDER": "Hallo daar!" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Welkom Tagline", + "PLACEHOLDER": "We maken het eenvoudig om met ons te verbinden. Vraag ons iets of deel uw feedback." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Channel greeting message", + "PLACEHOLDER": "Acme Inc reageert meestal binnen een paar uur." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Enable channel greeting", + "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", + "ENABLED": "Ingeschakeld", + "DISABLED": "Uitgeschakeld" + }, + "REPLY_TIME": { + "TITLE": "Set Reply time", + "IN_A_FEW_MINUTES": "In enkele minuten", + "IN_A_FEW_HOURS": "Over een paar uur", + "IN_A_DAY": "In één dag", + "HELP_TEXT": "This reply time will be displayed on the live chat widget" + }, + "WIDGET_COLOR": { + "LABEL": "Kleur van widget", + "PLACEHOLDER": "Update de widget kleur gebruikt in widget" + }, + "SUBMIT_BUTTON": "Postvak in maken", + "API": { + "ERROR_MESSAGE": "We were not able to create a website channel, please try again" + } + }, + "TWILIO": { + "TITLE": "Twilio SMS/WhatsApp Channel", + "DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "Klant SID", + "PLACEHOLDER": "Voer uw Twilio Account-ID in", + "ERROR": "Dit veld is verplicht" + }, + "API_KEY": { + "USE_API_KEY": "Use API Key Authentication", + "LABEL": "API Key SID", + "PLACEHOLDER": "Please enter your API Key SID", + "ERROR": "Dit veld is verplicht" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Please enter your API Key Secret", + "ERROR": "Dit veld is verplicht" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "Messaging Service SID", + "PLACEHOLDER": "Please enter your Twilio Messaging Service SID", + "ERROR": "Dit veld is verplicht", + "USE_MESSAGING_SERVICE": "Use a Twilio Messaging Service" + }, + "CHANNEL_TYPE": { + "LABEL": "Kanaaltype", + "ERROR": "Selecteer uw kanaaltype" + }, + "AUTH_TOKEN": { + "LABEL": "Authenticatie Token", + "PLACEHOLDER": "Voer je Twilio Auth Token in", + "ERROR": "Dit veld is verplicht" + }, + "CHANNEL_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "Dit veld is verplicht" + }, + "PHONE_NUMBER": { + "LABEL": "Telefoonnummer", + "PLACEHOLDER": "Voer het telefoonnummer in waaruit het bericht wordt verzonden.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "U moet de callback URL voor berichten configureren in Twilio met de URL die hier wordt vermeld." + }, + "SUBMIT_BUTTON": "Twilio-kanaal aanmaken", + "API": { + "ERROR_MESSAGE": "Het is niet gelukt om Twilio referenties te verifiëren, probeer het opnieuw" + } + }, + "SMS": { + "TITLE": "SMS-kanaal", + "DESC": "Start supporting your customers via SMS.", + "PROVIDERS": { + "LABEL": "API-aanbieder", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandbreedte" + }, + "API": { + "ERROR_MESSAGE": "Het SMS-kanaal kon niet worden opgeslagen" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "Account ID", + "PLACEHOLDER": "Voer uw bandbreedte account-ID in", + "ERROR": "Dit veld is verplicht" + }, + "API_KEY": { + "LABEL": "API sleutel", + "PLACEHOLDER": "Please enter your Bandwidth API Key", + "ERROR": "Dit veld is verplicht" + }, + "API_SECRET": { + "LABEL": "API-geheim", + "PLACEHOLDER": "Please enter your Bandwidth API Secret", + "ERROR": "Dit veld is verplicht" + }, + "APPLICATION_ID": { + "LABEL": "Applicatie-ID", + "PLACEHOLDER": "Please enter your Bandwidth Application ID", + "ERROR": "Dit veld is verplicht" + }, + "INBOX_NAME": { + "LABEL": "Inbox Naam", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "Dit veld is verplicht" + }, + "PHONE_NUMBER": { + "LABEL": "Telefoon nummer", + "PLACEHOLDER": "Voer het telefoonnummer in waaruit het bericht wordt verzonden.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "SUBMIT_BUTTON": "Create Bandwidth Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Bandwidth credentials, please try again" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the message callback URL in Bandwidth with the URL mentioned here." + } + } + }, + "WHATSAPP": { + "TITLE": "WhatsApp Channel", + "DESC": "Start supporting your customers via WhatsApp.", + "PROVIDERS": { + "LABEL": "API-aanbieder", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter an inbox name", + "ERROR": "Dit veld is verplicht" + }, + "PHONE_NUMBER": { + "LABEL": "Telefoon nummer", + "PLACEHOLDER": "Voer het telefoonnummer in waaruit het bericht wordt verzonden.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "PHONE_NUMBER_ID": { + "LABEL": "Phone number ID", + "PLACEHOLDER": "Please enter the Phone number ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "Business Account ID", + "PLACEHOLDER": "Please enter the Business Account ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook Verify Token", + "PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.", + "ERROR": "Please enter a valid value." + }, + "API_KEY": { + "LABEL": "API-sleutel", + "SUBTITLE": "Configure the WhatsApp API key.", + "PLACEHOLDER": "API-sleutel", + "ERROR": "Please enter a valid value." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL and the verification token in the Facebook Developer portal with the values shown below.", + "WEBHOOK_URL": "Webhook URL", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook Verification Token" + }, + "SUBMIT_BUTTON": "Create WhatsApp Channel", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "Telefoonnummer", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "Klant SID", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "Authenticatie Token", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "API Key SID", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "API-kanaal", + "DESC": "Integrate with API channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Kanaal naam", + "PLACEHOLDER": "Voer een kanaal naam in", + "ERROR": "Dit veld is verplicht" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "SUBTITLE": "Configure the URL where you want to receive callbacks on events.", + "PLACEHOLDER": "Webhook URL" + }, + "SUBMIT_BUTTON": "Create API Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the api channel" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "Email Channel", + "DESC": "Integrate your email inbox.", + "CHANNEL_NAME": { + "LABEL": "Kanaal naam", + "PLACEHOLDER": "Voer een kanaal naam in", + "ERROR": "Dit veld is verplicht" + }, + "EMAIL": { + "LABEL": "E-mailadres", + "SUBTITLE": "Email where your customers sends you support tickets", + "PLACEHOLDER": "E-mailadres" + }, + "SUBMIT_BUTTON": "Create Email Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the email channel" + }, + "FINISH_MESSAGE": "Start forwarding your emails to the following email address.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "Klik hier", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "LINE-kanaal", + "DESC": "Integrate with LINE channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Kanaal naam", + "PLACEHOLDER": "Voer een kanaal naam in", + "ERROR": "Dit veld is verplicht" + }, + "LINE_CHANNEL_ID": { + "LABEL": "LINE Channel ID", + "PLACEHOLDER": "LINE Channel ID" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "LINE Channel Secret", + "PLACEHOLDER": "LINE Channel Secret" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "LINE Channel Token", + "PLACEHOLDER": "LINE Channel Token" + }, + "SUBMIT_BUTTON": "Create LINE Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the LINE channel" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL in LINE application with the URL mentioned here." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Telegram Channel", + "DESC": "Integrate with Telegram channel and start supporting your customers.", + "BOT_TOKEN": { + "LABEL": "Bot Token", + "SUBTITLE": "Configure the bot token you have obtained from Telegram BotFather.", + "PLACEHOLDER": "Bot Token" + }, + "SUBMIT_BUTTON": "Create Telegram Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the telegram channel" + } + }, + "AUTH": { + "TITLE": "Kies een kanaal", + "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Website", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "E-mailadres", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Agenten", + "DESC": "Hier kunt u agenten toevoegen om uw nieuw gecreëerde inbox te beheren. Alleen deze agenten hebben toegang tot uw inbox. Agents die geen deel uitmaken van dit postvak in zullen niet in staat zijn om berichten in dit postvak te zien of te reageren wanneer ze inloggen.Webhooks
Webhooks zijn HTTP callbacks die voor elk account kunnen worden gedefinieerd. Ze worden geactiveerd door gebeurtenissen zoals het aanmaken van berichten in Chatwoot. Je kunt meer dan één webhook aanmaken voor dit account.
Voor het maken van een webhook, klik op de Voeg nieuwe webhook knop toe. U kunt ook alle bestaande webhook verwijderen door te klikken op de verwijderknop.
Dashboard Apps
Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.
When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.
To add a new dashboard app, click on the button 'Add a new dashboard app'.
", + "DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.", + "LEARN_MORE": "Learn more about Dashboard Apps", + "LIST": { + "404": "There are no dashboard apps configured on this account yet", + "LOADING": "Fetching dashboard apps...", + "TABLE_HEADER": { + "NAME": "Naam", + "ENDPOINT": "Endpoint" + }, + "EDIT_TOOLTIP": "Bewerk app", + "DELETE_TOOLTIP": "App verwijderen" + }, + "FORM": { + "TITLE_LABEL": "Naam", + "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", + "TITLE_ERROR": "A name for the dashboard app is required", + "URL_LABEL": "Endpoint", + "URL_PLACEHOLDER": "Enter the endpoint URL where your app is hosted", + "URL_ERROR": "A valid URL is required" + }, + "CREATE": { + "HEADER": "Voeg een nieuwe dashboard app toe", + "FORM_SUBMIT": "Bevestigen", + "FORM_CANCEL": "Annuleren", + "API_SUCCESS": "Dashboard app configured successfully", + "API_ERROR": "We couldn't create an app. Please try again later" + }, + "UPDATE": { + "HEADER": "Edit dashboard app", + "FORM_SUBMIT": "Vernieuwen", + "FORM_CANCEL": "Annuleren", + "API_SUCCESS": "Dashboard app updated successfully", + "API_ERROR": "We couldn't update the app. Please try again later" + }, + "DELETE": { + "CONFIRM_YES": "Ja, verwijderen", + "CONFIRM_NO": "Nee, behouden", + "TITLE": "Verwijdering bevestigen", + "MESSAGE": "Weet u zeker dat u de app - {appName} wilt verwijderen?", + "API_SUCCESS": "Dashboard app deleted successfully", + "API_ERROR": "We couldn't delete the app. Please try again later" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "Fetching linear issues...", + "LOADING_ERROR": "There was an error fetching the linear issues, please try again", + "CREATE": "Aanmaken", + "LINK": { + "SEARCH": "Search issues", + "SELECT": "Select issue", + "TITLE": "Link", + "EMPTY_LIST": "No linear issues found", + "LOADING": "Loading", + "ERROR": "There was an error fetching the linear issues, please try again", + "LINK_SUCCESS": "Issue linked successfully", + "LINK_ERROR": "There was an error linking the issue, please try again", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "Create Linear issues from conversations, or link existing ones for seamless tracking.", + "FORM": { + "TITLE": { + "LABEL": "Titel", + "PLACEHOLDER": "Enter title", + "REQUIRED_ERROR": "Title is required" + }, + "DESCRIPTION": { + "LABEL": "Beschrijving", + "PLACEHOLDER": "Enter description" + }, + "TEAM": { + "LABEL": "Team", + "PLACEHOLDER": "Selecteer team", + "SEARCH": "Search team", + "REQUIRED_ERROR": "Team is required" + }, + "ASSIGNEE": { + "LABEL": "Assignee", + "PLACEHOLDER": "Select assignee", + "SEARCH": "Search assignee" + }, + "PRIORITY": { + "LABEL": "Prioriteit", + "PLACEHOLDER": "Selecteer prioriteit", + "SEARCH": "Search priority" + }, + "LABEL": { + "LABEL": "Label", + "PLACEHOLDER": "Select label", + "SEARCH": "Search label" + }, + "STATUS": { + "LABEL": "Status", + "PLACEHOLDER": "Select status", + "SEARCH": "Search status" + }, + "PROJECT": { + "LABEL": "Project", + "PLACEHOLDER": "Select project", + "SEARCH": "Search project" + } + }, + "CREATE": "Aanmaken", + "CANCEL": "Annuleren", + "CREATE_SUCCESS": "Issue created successfully", + "CREATE_ERROR": "There was an error creating the issue, please try again", + "LOADING_TEAM_ERROR": "There was an error fetching the teams, please try again", + "LOADING_TEAM_ENTITIES_ERROR": "There was an error fetching the team entities, please try again" + }, + "ISSUE": { + "STATUS": "Status", + "PRIORITY": "Prioriteit", + "ASSIGNEE": "Assignee", + "LABELS": "Labelen", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Unlink", + "SUCCESS": "Issue unlinked successfully", + "ERROR": "There was an error unlinking the issue, please try again" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Ja, verwijderen", + "CANCEL": "Annuleren" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Ja, verwijderen", + "CANCEL": "Annuleren" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "Verstuur bericht...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Captain is thinking", + "YOU": "Jij", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "Jij", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "Typ uw bericht...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "Annuleren", + "CREATE": "Aanmaken", + "EDIT": "Vernieuwen" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Ja, verwijderen", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "Vernieuwen", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "Features", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "Naam", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "Beschrijving", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "Features", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "Instellingen", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Verwijderen" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "Aanmaken", + "CANCEL": "Annuleren", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Verwijderen" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "Aanmaken", + "CANCEL": "Annuleren", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Verwijderen" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Titel", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "Beschrijving", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "Aanmaken", + "CANCEL": "Annuleren" + } + } + }, + "UPDATE": { + "CANCEL": "Annuleren", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Ja, verwijderen", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Ja, verwijderen", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "Beschrijving", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "Geen", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "API sleutel" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "Wachtwoord", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Type" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Getal", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Required" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "Verwijderen", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Ja, verwijderen", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "Allemaal" + }, + "STATUS": { + "TITLE": "Status", + "PENDING": "Afwachtend", + "APPROVED": "Approved", + "ALL": "Allemaal" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "Bewerken", + "DELETE_RESPONSE": "Verwijderen" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Verbinding verbreken" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Ja, verwijderen", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "Postvak In", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/nl/labelsMgmt.json new file mode 100644 index 0000000..a97d345 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Labelen", + "HEADER_BTN_TXT": "Label toevoegen", + "LOADING": "Labels ophalen", + "DESCRIPTION": "Labels help you categorize and prioritize conversations and leads. You can assign a label to a conversation or contact using the side panel.", + "LEARN_MORE": "Learn more about labels", + "SEARCH_404": "Er zijn geen items die overeenkomen met deze zoekopdracht", + "LIST": { + "404": "Er zijn geen labels beschikbaar in dit account.", + "TITLE": "Beheer labels", + "DESC": "Labels laten je gesprekken groeperen.", + "TABLE_HEADER": { + "NAME": "Naam", + "DESCRIPTION": "Beschrijving", + "COLOR": "Kleur" + } + }, + "FORM": { + "NAME": { + "LABEL": "Label naam", + "PLACEHOLDER": "Label naam", + "REQUIRED_ERROR": "Labelnaam is vereist", + "MINIMUM_LENGTH_ERROR": "Minimum lengte van 2 is vereist", + "VALID_ERROR": "Enkel letters, cijfers, liggend streepje & underscore zijn toegestaan" + }, + "DESCRIPTION": { + "LABEL": "Beschrijving", + "PLACEHOLDER": "Beschrijving label" + }, + "COLOR": { + "LABEL": "Kleur" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Label op zijbalk weergeven" + }, + "EDIT": "Bewerken", + "CREATE": "Aanmaken", + "DELETE": "Verwijderen", + "CANCEL": "Annuleren" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Label aan gesprek toevoegen", + "MULTIPLE_SUGGESTION": "Dit label selecteren", + "DESELECT": "Label deselecteren", + "DISMISS": "Voorstel negeren" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Negeren", + "ADD_SELECTED_LABELS": "Voeg geselecteerde labels toe", + "ADD_SELECTED_LABEL": "Geselecteerde label toevoegen", + "ADD_ALL_LABELS": "Voeg alle labels toe", + "SUGGESTED_LABELS": "Suggested labels" + }, + "ADD": { + "TITLE": "Label toevoegen", + "DESC": "Labels laten je gesprekken groeperen.", + "API": { + "SUCCESS_MESSAGE": "Label succesvol toegevoegd", + "ERROR_MESSAGE": "Er is een fout opgetreden, probeer het opnieuw" + } + }, + "EDIT": { + "TITLE": "Bewerk label", + "API": { + "SUCCESS_MESSAGE": "Label succesvol bijgewerkt", + "ERROR_MESSAGE": "Er is een fout opgetreden, probeer het opnieuw" + } + }, + "DELETE": { + "BUTTON_TEXT": "Verwijderen", + "API": { + "SUCCESS_MESSAGE": "Label succesvol verwijderd", + "ERROR_MESSAGE": "Er is een fout opgetreden, probeer het opnieuw" + }, + "CONFIRM": { + "TITLE": "Verwijdering bevestigen", + "MESSAGE": "Weet u zeker dat u wilt verwijderen ", + "YES": "Ja, verwijderen ", + "NO": "Nee, Behouden " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/login.json b/app/javascript/dashboard/i18n/locale/nl/login.json new file mode 100644 index 0000000..fcc586e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Inloggen bij Chatwoot", + "EMAIL": { + "LABEL": "E-mailadres", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "Voer een geldig e-mailadres in" + }, + "PASSWORD": { + "LABEL": "Wachtwoord", + "PLACEHOLDER": "Wachtwoord" + }, + "API": { + "SUCCESS_MESSAGE": "Inloggen geslaagd", + "ERROR_MESSAGE": "Kan geen verbinding maken met de Woot server. Probeer het opnieuw.", + "UNAUTH": "Gebruikersnaam of wachtwoord is onjuist. Probeer het opnieuw." + }, + "OAUTH": { + "GOOGLE_LOGIN": "Inloggen met Google", + "BUSINESS_ACCOUNTS_ONLY": "Gebruik het e-mailadres van uw bedrijf om in te loggen", + "NO_ACCOUNT_FOUND": "Wij hebben geen e-mailadres gevonden voor uw e-mailadres." + }, + "FORGOT_PASSWORD": "Wachtwoord vergeten?", + "CREATE_NEW_ACCOUNT": "Nieuw account aanmaken", + "SUBMIT": "Inloggen", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/macros.json b/app/javascript/dashboard/i18n/locale/nl/macros.json new file mode 100644 index 0000000..d1c3015 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Macro's", + "DESCRIPTION": "A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click.", + "LEARN_MORE": "Learn more about macros", + "HEADER_BTN_TXT": "Add a new macro", + "HEADER_BTN_TXT_SAVE": "Save macro", + "LOADING": "Fetching macros", + "ERROR": "Something went wrong. Please try again", + "ORDER_INFO": "Macros will run in the order you add your actions. You can rearrange them by dragging them by the handle beside each node.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Macro name", + "PLACEHOLDER": "Enter a name for your macro", + "ERROR": "Name is required for creating a macro" + }, + "ACTIONS": { + "LABEL": "Acties" + } + }, + "API": { + "SUCCESS_MESSAGE": "Macro added successfully", + "ERROR_MESSAGE": "Unable to create macro, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Naam", + "CREATED BY": "Aangemaakt door", + "LAST_UPDATED_BY": "Last updated by", + "VISIBILITY": "Zichtbaarheid" + }, + "404": "No macros found" + }, + "DELETE": { + "TOOLTIP": "Delete macro", + "CONFIRM": { + "MESSAGE": "Weet u zeker dat u wilt verwijderen ", + "YES": "Ja, verwijderen", + "NO": "Nee" + }, + "API": { + "SUCCESS_MESSAGE": "Macro deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the macro. Please try again later" + } + }, + "EDIT": { + "TOOLTIP": "Edit macro", + "API": { + "SUCCESS_MESSAGE": "Macro updated successfully", + "ERROR_MESSAGE": "Could not update Macro, Please try again later" + } + }, + "EDITOR": { + "START_FLOW": "Start Flow", + "END_FLOW": "End Flow", + "LOADING": "Fetching macro", + "ADD_BTN_TOOLTIP": "Add new action", + "DELETE_BTN_TOOLTIP": "Delete Action", + "VISIBILITY": { + "LABEL": "Macro Visibility", + "GLOBAL": { + "LABEL": "Public", + "DESCRIPTION": "This macro is available publicly for all agents in this account." + }, + "PERSONAL": { + "LABEL": "Private", + "DESCRIPTION": "This macro will be private to you and not be available to others." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Execute", + "PREVIEW": "Preview Macro", + "EXECUTED_SUCCESSFULLY": "Macro executed successfully" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Waarde is vereist", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Assign a Team", + "ASSIGN_AGENT": "Assign an Agent", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Gesprek dempen", + "SNOOZE_CONVERSATION": "Demp gesprek", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "CHANGE_PRIORITY": "Change Priority", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "SEND_WEBHOOK_EVENT": "Send Webhook Event" + }, + "PRIORITY_TYPES": { + "NONE": "Geen", + "LOW": "Laag", + "MEDIUM": "Gemiddeld", + "HIGH": "Hoog", + "URGENT": "Dringend" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/mfa.json b/app/javascript/dashboard/i18n/locale/nl/mfa.json new file mode 100644 index 0000000..9caa33f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "Ingeschakeld", + "DISABLED": "Uitgeschakeld", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Loading...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "Kopiëren", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "Annuleren", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "Download", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "Wachtwoord", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "Annuleren", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "Annuleren", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/report.json b/app/javascript/dashboard/i18n/locale/nl/report.json new file mode 100644 index 0000000..d10ce7d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Gesprekken", + "LOADING_CHART": "Kaartgegevens laden...", + "NO_ENOUGH_DATA": "We hebben niet genoeg datapunten ontvangen om een rapport te genereren, probeer het later opnieuw.", + "DOWNLOAD_AGENT_REPORTS": "Medewerkerrapporten downloaden", + "DATA_FETCHING_FAILED": "Failed to fetch data, please try again later.", + "SUMMARY_FETCHING_FAILED": "Failed to fetch summary, please try again later.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Gesprekken", + "DESC": "( Totaal )" + }, + "INCOMING_MESSAGES": { + "NAME": "Inkomende berichten", + "DESC": "( Totaal )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Uitgaande berichten", + "DESC": "( Totaal )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Eerste reactietijd", + "DESC": "(Gem. )", + "INFO_TEXT": "Totaal aantal conversaties gebruikt voor berekening:", + "TOOLTIP_TEXT": "Eerste Reactie Tijd is {metricValue} (gebaseerd op {conversationCount} gesprekken)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolutie Tijd", + "DESC": "(Gem. )", + "INFO_TEXT": "Totaal aantal conversaties gebruikt voor berekening:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Aantal Resoluties", + "DESC": "( Totaal )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Aantal Resoluties", + "DESC": "( Totaal )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Handoff Count", + "DESC": "( Totaal )" + }, + "REPLY_TIME": { + "NAME": "Customer waiting time", + "TOOLTIP_TEXT": "Waiting time is {metricValue} (based on {conversationCount} replies)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "Afgelopen 7 dagen", + "LAST_14_DAYS": "Afgelopen 14 dagen", + "LAST_30_DAYS": "Laatste 30 dagen", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_DATE_RANGE": "Custom date range" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Group By", + "DURATION_FILTER_LABEL": "Duration", + "GROUPING_OPTIONS": { + "DAY": "Day", + "WEEK": "Week", + "MONTH": "Month", + "YEAR": "Month" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "BUSINESS_HOURS": "Business Hours", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Geen resultaten gevonden" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Agents Overview", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "Kaartgegevens laden...", + "NO_ENOUGH_DATA": "We hebben niet genoeg datapunten ontvangen om een rapport te genereren, probeer het later opnieuw.", + "DOWNLOAD_AGENT_REPORTS": "Medewerkerrapporten downloaden", + "FILTER_DROPDOWN_LABEL": "Selecteer medewerker", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Gesprekken", + "DESC": "( Totaal )" + }, + "INCOMING_MESSAGES": { + "NAME": "Inkomende berichten", + "DESC": "( Totaal )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Uitgaande berichten", + "DESC": "( Totaal )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Eerste reactietijd", + "DESC": "(Gem. )", + "INFO_TEXT": "Totaal aantal conversaties gebruikt voor berekening:", + "TOOLTIP_TEXT": "Eerste Reactie Tijd is {metricValue} (gebaseerd op {conversationCount} gesprekken)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolutie Tijd", + "DESC": "(Gem. )", + "INFO_TEXT": "Totaal aantal conversaties gebruikt voor berekening:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Aantal Resoluties", + "DESC": "( Totaal )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Afgelopen 7 dagen" + }, + { + "id": 1, + "name": "Laatste 30 dagen" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "LABEL_REPORTS": { + "HEADER": "Labels Overview", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "Kaartgegevens laden...", + "NO_ENOUGH_DATA": "We hebben niet genoeg datapunten ontvangen om een rapport te genereren, probeer het later opnieuw.", + "DOWNLOAD_LABEL_REPORTS": "Download label reports", + "FILTER_DROPDOWN_LABEL": "Select Label", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Gesprekken", + "DESC": "( Totaal )" + }, + "INCOMING_MESSAGES": { + "NAME": "Inkomende berichten", + "DESC": "( Totaal )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Uitgaande berichten", + "DESC": "( Totaal )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Eerste reactietijd", + "DESC": "(Gem. )", + "INFO_TEXT": "Totaal aantal conversaties gebruikt voor berekening:", + "TOOLTIP_TEXT": "Eerste Reactie Tijd is {metricValue} (gebaseerd op {conversationCount} gesprekken)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolutie Tijd", + "DESC": "(Gem. )", + "INFO_TEXT": "Totaal aantal conversaties gebruikt voor berekening:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Aantal Resoluties", + "DESC": "( Totaal )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Afgelopen 7 dagen" + }, + { + "id": 1, + "name": "Laatste 30 dagen" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "INBOX_REPORTS": { + "HEADER": "Inbox Overview", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "Kaartgegevens laden...", + "NO_ENOUGH_DATA": "We hebben niet genoeg datapunten ontvangen om een rapport te genereren, probeer het later opnieuw.", + "DOWNLOAD_INBOX_REPORTS": "Download inbox reports", + "FILTER_DROPDOWN_LABEL": "Selecteer een inbox", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Gesprekken", + "DESC": "( Totaal )" + }, + "INCOMING_MESSAGES": { + "NAME": "Inkomende berichten", + "DESC": "( Totaal )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Uitgaande berichten", + "DESC": "( Totaal )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Eerste reactietijd", + "DESC": "(Gem. )", + "INFO_TEXT": "Totaal aantal conversaties gebruikt voor berekening:", + "TOOLTIP_TEXT": "Eerste Reactie Tijd is {metricValue} (gebaseerd op {conversationCount} gesprekken)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolutie Tijd", + "DESC": "(Gem. )", + "INFO_TEXT": "Totaal aantal conversaties gebruikt voor berekening:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Aantal Resoluties", + "DESC": "( Totaal )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Afgelopen 7 dagen" + }, + { + "id": 1, + "name": "Laatste 30 dagen" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "TEAM_REPORTS": { + "HEADER": "Team Overview", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "Kaartgegevens laden...", + "NO_ENOUGH_DATA": "We hebben niet genoeg datapunten ontvangen om een rapport te genereren, probeer het later opnieuw.", + "DOWNLOAD_TEAM_REPORTS": "Download team reports", + "FILTER_DROPDOWN_LABEL": "Select Team", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Gesprekken", + "DESC": "( Totaal )" + }, + "INCOMING_MESSAGES": { + "NAME": "Inkomende berichten", + "DESC": "( Totaal )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Uitgaande berichten", + "DESC": "( Totaal )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Eerste reactietijd", + "DESC": "(Gem. )", + "INFO_TEXT": "Totaal aantal conversaties gebruikt voor berekening:", + "TOOLTIP_TEXT": "Eerste Reactie Tijd is {metricValue} (gebaseerd op {conversationCount} gesprekken)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolutie Tijd", + "DESC": "(Gem. )", + "INFO_TEXT": "Totaal aantal conversaties gebruikt voor berekening:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Aantal Resoluties", + "DESC": "( Totaal )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Afgelopen 7 dagen" + }, + { + "id": 1, + "name": "Laatste 30 dagen" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "CSAT_REPORTS": { + "HEADER": "CSAT Reports", + "NO_RECORDS": "There are no CSAT survey responses available.", + "DOWNLOAD": "Download CSAT Reports", + "DOWNLOAD_FAILED": "Failed to download CSAT Reports", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Choose Agents" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Contact", + "AGENT_NAME": "Assigned agent", + "RATING": "Beoordeling", + "FEEDBACK_TEXT": "Feedback comment" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Total responses", + "TOOLTIP": "Total number of responses collected" + }, + "SATISFACTION_SCORE": { + "LABEL": "Satisfaction score", + "TOOLTIP": "Total number of positive responses / Total number of responses * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Response rate", + "TOOLTIP": "Total number of responses / Total number of CSAT survey messages sent * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Bot Reports", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "No. of Conversations", + "TOOLTIP": "Total number of conversations handled by the bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total Responses", + "TOOLTIP": "Total number of responses sent by the bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Resolution Rate", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Handoff Rate", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Overview", + "LIVE": "Live", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Open Conversations", + "LOADING_MESSAGE": "Loading conversation metrics...", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "UNASSIGNED": "Niet toegewezen", + "PENDING": "Afwachtend" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Conversation Traffic", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Conversations by agents", + "LOADING_MESSAGE": "Loading agent metrics...", + "NO_AGENTS": "There are no conversations by agents", + "TABLE_HEADER": { + "AGENT": "Medewerker", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "STATUS": "Status" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Team", + "OPEN": "Open", + "UNATTENDED": "Onbeheer", + "STATUS": "Status" + } + }, + "AGENT_STATUS": { + "HEADER": "Agent status", + "ONLINE": "Online", + "BUSY": "Bezig", + "OFFLINE": "Offline" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Sunday", + "MONDAY": "Monday", + "TUESDAY": "Tuesday", + "WEDNESDAY": "Wednesday", + "THURSDAY": "Thursday", + "FRIDAY": "Friday", + "SATURDAY": "Saturday" + }, + "SLA_REPORTS": { + "HEADER": "SLA Reports", + "NO_RECORDS": "SLA applied conversations are not available.", + "LOADING": "Loading SLA data...", + "DOWNLOAD_SLA_REPORTS": "Download SLA reports", + "DOWNLOAD_FAILED": "Failed to download SLA Reports", + "DROPDOWN": { + "ADD_FIlTER": "Filter toevoegen", + "CLEAR_ALL": "Clear all", + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Geen resultaten gevonden", + "NO_FILTER": "No filters available", + "SEARCH": "Search filter", + "INPUT_PLACEHOLDER": { + "SLA": "SLA name", + "AGENTS": "Agent naam", + "INBOXES": "Naam postvak", + "LABELS": "Label naam", + "TEAMS": "Team Naam" + }, + "SLA": "SLA Policy", + "INBOXES": "Postvak In", + "AGENTS": "Medewerker", + "LABELS": "Label", + "TEAMS": "Team" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentage of SLAs created were completed successfully" + }, + "NO_OF_MISSES": { + "LABEL": "Number of Misses", + "TOOLTIP": "Total SLA misses in a certain period" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Number of Conversations", + "TOOLTIP": "Total number of conversations with SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "Gesprek", + "AGENT": "Medewerker" + }, + "VIEW_DETAILS": "View Details" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Postvak In", + "AGENT": "Medewerker", + "TEAM": "Team", + "LABEL": "Label", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "Aantal Resoluties", + "CONVERSATIONS": "Aantal conversaties" + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/resetPassword.json b/app/javascript/dashboard/i18n/locale/nl/resetPassword.json new file mode 100644 index 0000000..5a3788b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Wachtwoord opnieuw instellen", + "DESCRIPTION": "Voer het e-mailadres in dat u gebruikt om in te loggen bij Chatwoot om instructies voor het opnieuw instellen van uw wachtwoord te ontvangen.", + "GO_BACK_TO_LOGIN": "Als u terug wilt gaan naar de inlogpagina,", + "EMAIL": { + "LABEL": "E-mailadres", + "PLACEHOLDER": "Voer uw e-mailadres in.", + "ERROR": "Voer een geldig e-mailadres in." + }, + "API": { + "SUCCESS_MESSAGE": "Wachtwoord reset link is verstuurd naar uw e-mail.", + "ERROR_MESSAGE": "Kan geen verbinding maken met de Woot server. Probeer het opnieuw." + }, + "SUBMIT": "Bevestigen" + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/search.json b/app/javascript/dashboard/i18n/locale/nl/search.json new file mode 100644 index 0000000..1f84ae5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "Contacten", + "CONVERSATIONS": "Gesprekken", + "MESSAGES": "Berichten", + "ARTICLES": "Articles" + }, + "SECTION": { + "CONTACTS": "Contacten", + "CONVERSATIONS": "Gesprekken", + "MESSAGES": "Berichten", + "ARTICLES": "Articles" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "Zoeken", + "LOADING_DATA": "Loading", + "EMPTY_STATE": "Geen {item} gevonden voor query '{query}'", + "EMPTY_STATE_FULL": "Geen resultaten gevonden voor query '{query}'", + "PLACEHOLDER_KEYBINDING": "/om te focussen", + "INPUT_PLACEHOLDER": "Voer 3 of meer tekens in om te zoeken", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Clear all", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Zoeken op gesprek id, e-mail, telefoonnummer, berichten voor betere zoekresultaten. ", + "BOT_LABEL": "Bot", + "READ_MORE": "Meer lezen", + "READ_LESS": "Read less", + "WROTE": "schreef:", + "FROM": "van", + "EMAIL": "E-mailadres", + "EMAIL_SUBJECT": "Onderwerp", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "Afgelopen 7 dagen", + "LAST_30_DAYS": "Laatste 30 dagen", + "LAST_60_DAYS": "Afgelopen 60 dagen", + "LAST_90_DAYS": "Afgelopen 90 dagen", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "en", + "APPLY": "Apply", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Clear filter" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Sender", + "IN": "Postvak In", + "AGENTS": "Medewerkers", + "CONTACTS": "Contacten", + "INBOXES": "Inboxen", + "NO_AGENTS": "Geen medewerkers gevonden", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/setNewPassword.json b/app/javascript/dashboard/i18n/locale/nl/setNewPassword.json new file mode 100644 index 0000000..2b13ec0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Nieuw wachtwoord instellen", + "PASSWORD": { + "LABEL": "Wachtwoord", + "PLACEHOLDER": "Wachtwoord", + "ERROR": "Wachtwoord is te kort." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Bevestig wachtwoord", + "PLACEHOLDER": "Bevestig wachtwoord", + "ERROR": "Wachtwoorden komen niet overeen." + }, + "API": { + "SUCCESS_MESSAGE": "Wachtwoord succesvol veranderd.", + "ERROR_MESSAGE": "Kan geen verbinding maken met de Woot server. Probeer het opnieuw." + }, + "CAPTCHA": { + "ERROR": "Verificatie verlopen. Los de captcha opnieuw op." + }, + "SUBMIT": "Bevestigen" + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/settings.json b/app/javascript/dashboard/i18n/locale/nl/settings.json new file mode 100644 index 0000000..de235af --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Profielinstellingen", + "TITLE": "Profielinstellingen", + "BTN_TEXT": "Profiel bijwerken", + "DELETE_AVATAR": "Verwijder avatar", + "AVATAR_DELETE_SUCCESS": "Avatar succesvol verwijderd", + "AVATAR_DELETE_FAILED": "Er is een fout opgetreden bij het verwijderen van de avatar, probeer het opnieuw", + "UPDATE_SUCCESS": "Uw profiel is succesvol bijgewerkt", + "PASSWORD_UPDATE_SUCCESS": "Uw wachtwoord is succesvol gewijzigd", + "AFTER_EMAIL_CHANGED": "Uw profiel is succesvol bijgewerkt. Log opnieuw in als uw inloggegevens zijn gewijzigd", + "FORM": { + "PICTURE": "Profile Picture", + "AVATAR": "Profiel afbeelding", + "ERROR": "Corrigeer formulierfouten", + "REMOVE_IMAGE": "Verwijderen", + "UPLOAD_IMAGE": "Afbeelding uploaden", + "UPDATE_IMAGE": "Afbeelding bijwerken", + "PROFILE_SECTION": { + "TITLE": "Profiel", + "NOTE": "Uw e-mailadres is uw identiteit en wordt gebruikt om in te loggen." + }, + "SEND_MESSAGE": { + "TITLE": "Sneltoets om berichten te verzenden", + "NOTE": "U kunt een sneltoets selecteren (Enter of Cmd/Ctrl+Enter) gebaseerd op uw voorkeur voor schrijven.", + "UPDATE_SUCCESS": "Uw instellingen zijn met succes bijgewerkt", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Verstuur berichten door op Enter te drukken in plaats van op de verzendknop te klikken." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Verstuur berichten door op Cmd/Ctrl + Enter te drukken in plaats van op de verzendknop te klikken." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Default", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Handtekening persoonlijke berichten", + "NOTE": "Create a unique message signature to appear at the end of every message you send from any inbox. You can also include an inline image, which is supported in live-chat, email, and API inboxes.", + "BTN_TEXT": "Ondertekening van bericht opslaan", + "API_ERROR": "Kon ondertekening niet opslaan! Probeer het opnieuw", + "API_SUCCESS": "Ondertekening succesvol opgeslagen", + "IMAGE_UPLOAD_ERROR": "Kon afbeelding niet uploaden! Probeer het opnieuw", + "IMAGE_UPLOAD_SUCCESS": "Afbeelding succesvol toegevoegd. Klik op opslaan om de handtekening op te slaan", + "IMAGE_UPLOAD_SIZE_ERROR": "De grootte van de afbeelding moet kleiner zijn dan {size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Bericht Ondertekening", + "ERROR": "Bericht ondertekening kan niet leeg zijn", + "PLACEHOLDER": "Voer hier uw persoonlijke bericht handtekening in." + }, + "PASSWORD_SECTION": { + "TITLE": "Wachtwoord", + "NOTE": "Het bijwerken van uw wachtwoord zou uw logins op meerdere apparaten opnieuw instellen.", + "BTN_TEXT": "Wachtwoord wijzigen" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "Toegangs-token", + "NOTE": "Dit token kan worden gebruikt als u een API gebaseerde integratie bouwt", + "COPY": "Kopiëren", + "RESET": "Reset", + "CONFIRM_RESET": "Are you sure?", + "CONFIRM_HINT": "Click again to confirm", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Alerts", + "NOTE": "Enable audio alerts in dashboard for new messages and conversations.", + "PLAY": "Play sound", + "ALERT_TYPES": { + "NONE": "Geen", + "MINE": "Assigned", + "ALL": "Allemaal", + "ASSIGNED": "My assigned conversations", + "UNASSIGNED": "Unassigned conversations", + "NOTME": "Open conversations assigned to others" + }, + "ALERT_COMBINATIONS": { + "NONE": "You haven't selected any options, you won't receive any audio alerts.", + "ASSIGNED": "You'll receive alerts for conversations assigned to you.", + "UNASSIGNED": "You'll receive alerts for any unassigned conversations.", + "NOTME": "You'll receive alerts for conversations assigned to others.", + "ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.", + "ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.", + "NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.", + "ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations." + }, + "ALERT_TYPE": { + "TITLE": "Alert events for conversations", + "NONE": "Geen", + "ASSIGNED": "Toegewezen gesprekken", + "ALL_CONVERSATIONS": "Alle gesprekken" + }, + "DEFAULT_TONE": { + "TITLE": "Notificatie toon:" + }, + "CONDITIONS": { + "TITLE": "Voorwaarden voor notificaties:", + "CONDITION_ONE": "Stuur alleen audio notificaties als het browservenster niet actief is", + "CONDITION_TWO": "Verstuur notificaties om de 30 seconden tot alle toegewezen gesprekken zijn gelezen" + }, + "SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.", + "READ_MORE": "Meer lezen" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "E-mail notificaties", + "NOTE": "Update hier uw e-mailvoorkeuren", + "CONVERSATION_ASSIGNMENT": "E-mailberichten verzenden wanneer een gesprek aan mij is toegewezen", + "CONVERSATION_CREATION": "E-mailberichten verzenden wanneer een nieuw gesprek is gemaakt", + "CONVERSATION_MENTION": "E-mail notificaties versturen wanneer u in een gesprek wordt genoemd", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "E-mail notificaties verzenden wanneer een nieuw bericht is gemaakt in een toegewezen gesprek", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "E-mail notificaties verzenden wanneer een nieuw bericht is gemaakt in een deelnemend gesprek", + "SLA_MISSED_FIRST_RESPONSE": "Send email notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send email notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send email notifications when a conversation misses resolution SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Notification preferences", + "TYPE_TITLE": "Notification type", + "EMAIL": "E-mailadres", + "PUSH": "Push-melding", + "TYPES": { + "CONVERSATION_CREATED": "A new conversation is created", + "CONVERSATION_ASSIGNED": "A conversation is assigned to you", + "CONVERSATION_MENTION": "You are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "A new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "A new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "A conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "A conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "A conversation misses resolution SLA" + }, + "BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them" + }, + "API": { + "UPDATE_SUCCESS": "Uw notificatie-instellingen zijn succesvol bijgewerkt", + "UPDATE_ERROR": "Er is een fout opgetreden tijdens het bijwerken van de voorkeuren, probeer het opnieuw" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Pushberichten", + "NOTE": "Werk je pushberichtvoorkeuren hier bij", + "CONVERSATION_ASSIGNMENT": "Stuur pushberichten wanneer een gesprek aan mij is toegewezen", + "CONVERSATION_CREATION": "Stuur pushberichten wanneer een nieuw gesprek is aangemaakt", + "CONVERSATION_MENTION": "Send push notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in a participating conversation", + "HAS_ENABLED_PUSH": "Je hebt pushberichten voor deze browser ingeschakeld.", + "REQUEST_PUSH": "Pushberichten inschakelen", + "SLA_MISSED_FIRST_RESPONSE": "Send push notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send push notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send push notifications when a conversation misses resolution SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "Profiel afbeelding" + }, + "NAME": { + "LABEL": "Your full name", + "ERROR": "Please enter a valid full name", + "PLACEHOLDER": "Please enter your full name" + }, + "DISPLAY_NAME": { + "LABEL": "Display name", + "ERROR": "Please enter a valid display name", + "PLACEHOLDER": "Please enter a display name, this would be displayed in conversations" + }, + "AVAILABILITY": { + "LABEL": "Availability", + "STATUS": { + "ONLINE": "Online", + "BUSY": "Bezig", + "OFFLINE": "Offline" + }, + "SET_AVAILABILITY_SUCCESS": "Availability has been set successfully", + "SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again", + "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user" + }, + "EMAIL": { + "LABEL": "Uw e-mailadres", + "ERROR": "Voer een geldig e-mailadres in", + "PLACEHOLDER": "Voer je e-mailadres in, dit zou worden weergegeven in gesprekken" + }, + "CURRENT_PASSWORD": { + "LABEL": "Current password", + "ERROR": "Please enter the current password", + "PLACEHOLDER": "Voer uw huidige wachtwoord in" + }, + "PASSWORD": { + "LABEL": "New password", + "ERROR": "Voer een wachtwoord in van 6 of meer", + "PLACEHOLDER": "Voer een nieuw wachtwoord in" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Bevestig nieuw wachtwoord", + "ERROR": "Bevestig wachtwoord moet overeenkomen met het wachtwoord", + "PLACEHOLDER": "Please re-enter your new password" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Veranderen", + "CHANGE_ACCOUNTS": "Switch account", + "SWITCH_ACCOUNT": "Switch account", + "CONTACT_SUPPORT": "Contact support", + "SELECTOR_SUBTITLE": "Select an account from the following list", + "PROFILE_SETTINGS": "Profile settings", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Keyboard shortcuts", + "APPEARANCE": "Change appearance", + "SUPER_ADMIN_CONSOLE": "SuperAdmin console", + "DOCS": "Read documentation", + "CHANGELOG": "Changelog", + "LOGOUT": "Log out" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "dagen proefperiode resterend.", + "TRAIL_BUTTON": "Nu kopen", + "DELETED_USER": "Deleted User", + "EMAIL_VERIFICATION_PENDING": "It seems that you haven't verified your email address yet. Please check your inbox for the verification email.", + "RESEND_VERIFICATION_MAIL": "Resend verification email", + "EMAIL_VERIFICATION_SENT": "Verification email has been sent. Please check your inbox.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Account Suspended", + "MESSAGE": "Your account is suspended. Please reach out to the support team for more information." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Log out" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Kopiëren", + "CODEPEN": "Open in CodePen", + "COPY_SUCCESSFUL": "Code succesvol naar het klembord gekopieerd " + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Show More", + "SHOW_LESS": "Show Less" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "Downloaden", + "UPLOADING": "Uploaden...", + "INSTAGRAM_STORY_UNAVAILABLE": "Dit verhaal is niet meer beschikbaar." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "See on map" + }, + "FORM_BUBBLE": { + "SUBMIT": "Bevestigen" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "This image is no longer available.", + "LOADING_FAILED": "Loading failed" + } + }, + "CONFIRM_EMAIL": "Verifiëren...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Postvak toevoegen" + } + }, + "SIDEBAR": { + "NO_ITEMS": "No items", + "CURRENTLY_VIEWING_ACCOUNT": "Currently viewing:", + "SWITCH": "Switch", + "INBOX_VIEW": "Inbox View", + "CONVERSATIONS": "Gesprekken", + "INBOX": "My Inbox", + "ALL_CONVERSATIONS": "Alle gesprekken", + "MENTIONED_CONVERSATIONS": "Vermeldingen", + "PARTICIPATING_CONVERSATIONS": "Participating", + "UNATTENDED_CONVERSATIONS": "Unattended", + "REPORTS": "Rapporten", + "SETTINGS": "Instellingen", + "CONTACTS": "Contacten", + "ACTIVE": "Actief", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistants", + "CAPTAIN_DOCUMENTS": "Documents", + "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_TOOLS": "Tools", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "Inboxen", + "CAPTAIN_SETTINGS": "Instellingen", + "HOME": "Startpagina", + "AGENTS": "Medewerkers", + "AGENT_BOTS": "Bots", + "AUDIT_LOGS": "Audit Logs", + "INBOXES": "Inboxen", + "NOTIFICATIONS": "Notifications", + "CANNED_RESPONSES": "Standaard antwoorden", + "INTEGRATIONS": "Integraties", + "PROFILE_SETTINGS": "Profielinstellingen", + "ACCOUNT_SETTINGS": "Accountinstellingen", + "APPLICATIONS": "Applicaties", + "LABELS": "Labelen", + "CUSTOM_ATTRIBUTES": "Aangepaste attributen", + "AUTOMATION": "Automation", + "MACROS": "Macro's", + "TEAMS": "Teams", + "BILLING": "Billing", + "CUSTOM_VIEWS_FOLDER": "Folders", + "CUSTOM_VIEWS_SEGMENTS": "Segments", + "ALL_CONTACTS": "All Contacts", + "TAGGED_WITH": "Tagged with", + "NEW_LABEL": "New label", + "NEW_TEAM": "New team", + "NEW_INBOX": "New inbox", + "REPORTS_CONVERSATION": "Gesprekken", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Campagnes", + "ONGOING": "Ongoing", + "ONE_OFF": "One off", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "Bot", + "REPORTS_AGENT": "Medewerkers", + "REPORTS_LABEL": "Labelen", + "REPORTS_INBOX": "Postvak In", + "REPORTS_TEAM": "Team", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "Set yourself as", + "SET_YOUR_AVAILABILITY": "Set your availability", + "SLA": "SLA", + "CUSTOM_ROLES": "Custom Roles", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Overview", + "REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages", + "HELP_CENTER": { + "TITLE": "Help Center", + "ARTICLES": "Articles", + "CATEGORIES": "Categories", + "LOCALES": "Locales", + "SETTINGS": "Instellingen" + }, + "CHANNELS": "Kanalen", + "SET_AUTO_OFFLINE": { + "TEXT": "Mark offline automatically", + "INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard.", + "INFO_SHORT": "Automatically mark offline when you aren't using the app." + }, + "DOCS": "Read docs", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "Billing", + "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "CURRENT_PLAN": { + "TITLE": "Current Plan", + "PLAN_NOTE": "You are currently subscribed to the **{plan}** plan with **{quantity}** licenses", + "SEAT_COUNT": "Number of seats", + "RENEWS_ON": "Renews on" + }, + "VIEW_PRICING": "View Pricing", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Manage your subscription", + "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", + "BUTTON_TXT": "Go to the billing portal" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Manage usage and credits for Captain AI.", + "BUTTON_TXT": "Buy more credits", + "DOCUMENTS": "Documents", + "RESPONSES": "Responses", + "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more.", + "REFRESH_CREDITS": "Refresh" + }, + "CHAT_WITH_US": { + "TITLE": "Need help?", + "DESCRIPTION": "Do you face any issues in billing? We are here to help.", + "BUTTON_TXT": "Chat met ons" + }, + "NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again.", + "TOPUP": { + "BUY_CREDITS": "Buy more credits", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Note:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "Annuleren", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Ga terug", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "Code succesvol naar het klembord gekopieerd ", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.", + "NEW_ACCOUNT": "New Account", + "SELECTOR_SUBTITLE": "Create a new account", + "API": { + "SUCCESS_MESSAGE": "Account created successfully", + "EXIST_MESSAGE": "Account already exists", + "ERROR_MESSAGE": "Kan geen verbinding maken met Woot Server, probeer het later opnieuw" + }, + "FORM": { + "NAME": { + "LABEL": "Bedrijfsnaam", + "PLACEHOLDER": "Wayne Ondernemingen" + }, + "SUBMIT": "Bevestigen", + "CANCEL": "Annuleren" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "View all shortcuts", + "TITLE": { + "OPEN_CONVERSATION": "Open conversation", + "RESOLVE_AND_NEXT": "Resolve and move to next", + "NAVIGATE_DROPDOWN": "Navigate dropdown items", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "ADD_ATTACHMENT": "Add Attachment", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "TOGGLE_SIDEBAR": "Toggle Sidebar", + "GO_TO_REPORTS_SIDEBAR": "Go to Reports sidebar", + "MOVE_TO_NEXT_TAB": "Move to next tab in conversation list", + "GO_TO_SETTINGS": "Go to Settings", + "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", + "SWITCH_TO_REPLY": "Switch to Reply", + "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "Prioriteit", + "ACTIVE": "Actief", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "Bewerken" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Annuleren" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Beschrijving:", + "PLACEHOLDER": "Enter description" + }, + "STATUS": { + "LABEL": "Status:", + "PLACEHOLDER": "Select status", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "Toevoegen" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "Bewerken" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Annuleren" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Beschrijving:", + "PLACEHOLDER": "Enter description" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "Toevoegen" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "Verwijderen", + "CANCEL_BUTTON_LABEL": "Annuleren" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/signup.json b/app/javascript/dashboard/i18n/locale/nl/signup.json new file mode 100644 index 0000000..4d6155c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Nieuw account aanmaken", + "TITLE": "Registreren", + "TESTIMONIAL_HEADER": "Er is maar één stap nodig om vooruit te komen", + "TESTIMONIAL_CONTENT": "U bent één stap verwijderd van het communiceren met uw klanten, ze te behouden en nieuwe te vinden.", + "TERMS_ACCEPT": "Door het aanmaken van een account, gaat u akkoord met onze T & C en Privacy policy", + "OAUTH": { + "GOOGLE_SIGNUP": "Registreren met Google" + }, + "COMPANY_NAME": { + "LABEL": "Bedrijfsnaam", + "PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises", + "ERROR": "Company name is too short" + }, + "FULL_NAME": { + "LABEL": "Volledige naam", + "PLACEHOLDER": "Voer je volledige naam in, bijvoorbeeld Bruce Wayne", + "ERROR": "Volledige naam is te kort" + }, + "EMAIL": { + "LABEL": "Werk e-mail", + "PLACEHOLDER": "Enter your work email address. E.g., bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Please enter a valid work email address" + }, + "PASSWORD": { + "LABEL": "Wachtwoord", + "PLACEHOLDER": "Wachtwoord", + "ERROR": "Wachtwoord is te kort", + "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Bevestig wachtwoord", + "PLACEHOLDER": "Bevestig wachtwoord", + "ERROR": "Wachtwoorden komen niet overeen." + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "Kan geen verbinding maken met Woot Server, probeer het later opnieuw" + }, + "SUBMIT": "Account aanmaken", + "HAVE_AN_ACCOUNT": "Heeft u al een account?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/sla.json b/app/javascript/dashboard/i18n/locale/nl/sla.json new file mode 100644 index 0000000..7d3fa65 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Add SLA", + "ADD_ACTION_LONG": "Create a new SLA Policy", + "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", + "LEARN_MORE": "Learn more about SLA", + "LOADING": "Fetching SLAs", + "PAYWALL": { + "TITLE": "Upgrade to create SLAs", + "AVAILABLE_ON": "The SLA feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SLA feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no SLAs available in this account.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Issues raised by enterprise customers, that require immediate attention.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Issues raised by enterprise customers, that needs to be acknowledged quickly." + }, + "BUSINESS_HOURS_ON": "Business hours on", + "BUSINESS_HOURS_OFF": "Business hours off", + "RESPONSE_TYPES": { + "FRT": "First response time threshold", + "NRT": "Next response time threshold", + "RT": "Resolution time threshold", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA Name", + "PLACEHOLDER": "SLA Name", + "REQUIRED_ERROR": "SLA name is required", + "MINIMUM_LENGTH_ERROR": "Minimum lengte van 2 is vereist", + "VALID_ERROR": "Enkel letters, cijfers, liggend streepje & underscore zijn toegestaan" + }, + "DESCRIPTION": { + "LABEL": "Beschrijving", + "PLACEHOLDER": "SLA for premium customers" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "Eerste reactietijd", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Next Response Time", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "Resolutie Tijd", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Business Hours", + "PLACEHOLDER": "Only during business hours" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Threshold should be a number and greater than zero" + }, + "EDIT": "Bewerken", + "CREATE": "Aanmaken", + "DELETE": "Verwijderen", + "CANCEL": "Annuleren" + }, + "ADD": { + "TITLE": "Add SLA", + "DESC": "Friendly promises for great service!", + "API": { + "SUCCESS_MESSAGE": "SLA added successfully", + "ERROR_MESSAGE": "Er is een fout opgetreden, probeer het opnieuw" + } + }, + "DELETE": { + "TITLE": "Delete SLA", + "API": { + "SUCCESS_MESSAGE": "SLA deleted successfully", + "ERROR_MESSAGE": "Er is een fout opgetreden, probeer het opnieuw" + }, + "CONFIRM": { + "TITLE": "Verwijderen bevestigen", + "MESSAGE": "Are you sure you want to delete ", + "YES": "Ja, verwijderen ", + "NO": "Nee, Behouden " + } + }, + "EVENTS": { + "TITLE": "SLA Misses", + "FRT": "Eerste reactietijd", + "NRT": "Next response time", + "RT": "Resolution time", + "SHOW_MORE": "{count} more", + "HIDE": "Hide {count} rows" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/teamsSettings.json b/app/javascript/dashboard/i18n/locale/nl/teamsSettings.json new file mode 100644 index 0000000..ebfa7f8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Create new team", + "HEADER": "Teams", + "LOADING": "Fetching teams", + "DESCRIPTION": "Teams allow you to organize agents into groups based on their responsibilities. An agent can belong to multiple teams. When working collaboratively, you can assign conversations to specific teams.", + "LEARN_MORE": "Learn more about teams", + "LIST": { + "404": "There are no teams created on this account.", + "EDIT_TEAM": "Edit team", + "NONE": "Geen" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Create a new team", + "DESC": "Add a title and description to your new team." + }, + "AGENTS": { + "BUTTON_TEXT": "Add agents to team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation." + }, + "WIZARD_CREATE": { + "TITLE": "Aanmaken", + "BODY": "Create a new team of agents." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "Agenten toevoegen", + "BODY": "Add agents to the team." + }, + "WIZARD_FINISH": { + "TITLE": "Finish", + "BODY": "Je bent helemaal klaar om te beginnen!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Edit your team details", + "DESC": "Edit title and description to your team.", + "BUTTON_TEXT": "Update team" + }, + "AGENTS": { + "BUTTON_TEXT": "Update agents in team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. All the added agents will be notified when a conversation is assigned to this team." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Team details", + "ROUTE": "settings_teams_edit", + "BODY": "Change name, description and other details." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Edit Agents", + "ROUTE": "settings_teams_edit_members", + "BODY": "Edit agents in your team." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Finish", + "ROUTE": "settings_teams_edit_finish", + "BODY": "Je bent helemaal klaar om te beginnen!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Couldn't save the team details. Try again." + }, + "AGENTS": { + "AGENT": "AGENT", + "EMAIL": "E-mailadres", + "BUTTON_TEXT": "Voeg agenten toe", + "ADD_AGENTS": "Adding Agents to your Team...", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected." + }, + "ADD": { + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation.", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected.", + "BUTTON_TEXT": "Voeg agenten toe", + "AGENT_VALIDATION_ERROR": "Select at least one agent." + }, + "FINISH": { + "TITLE": "Your team is ready!", + "MESSAGE": "You can now collaborate as a team on conversations. Happy supporting ", + "BUTTON_TEXT": "Finish" + }, + "DELETE": { + "BUTTON_TEXT": "Verwijderen", + "API": { + "SUCCESS_MESSAGE": "Team deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the team. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure you want to delete the team?", + "PLACE_HOLDER": "Please type {teamName} to confirm", + "MESSAGE": "Deleting the team will remove the team assignment from the conversations assigned to this team.", + "YES": "Verwijderen ", + "NO": "Annuleren" + } + }, + "SETTINGS": "Instellingen", + "FORM": { + "UPDATE": "Update team", + "CREATE": "Create team", + "NAME": { + "LABEL": "Team name", + "PLACEHOLDER": "Example: Sales, Customer Support" + }, + "DESCRIPTION": { + "LABEL": "Team Description", + "PLACEHOLDER": "Short description about this team." + }, + "AUTO_ASSIGN": { + "LABEL": "Allow auto assign for this team." + }, + "SUBMIT_CREATE": "Create team" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/webhooks.json b/app/javascript/dashboard/i18n/locale/nl/webhooks.json new file mode 100644 index 0000000..f864ac9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Webhook instellingen" + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/nl/whatsappTemplates.json new file mode 100644 index 0000000..5c58624 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Whatsapp Templates", + "SUBTITLE": "Selecteer de whatsapp template die u wilt verzenden", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Templates zoeken", + "NO_TEMPLATES_FOUND": "Geen templates gevonden voor", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Categorie", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Taal", + "TEMPLATE_BODY": "Template bericht", + "CATEGORY": "Categorie" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variabelen", + "LANGUAGE": "Taal", + "CATEGORY": "Categorie", + "VARIABLE_PLACEHOLDER": "Voer {variable} waarde in", + "GO_BACK_LABEL": "Ga terug", + "SEND_MESSAGE_LABEL": "Verstuur bericht", + "FORM_ERROR_MESSAGE": "Vul alstublieft alle variabelen in voordat u deze verzendt", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/nl/yearInReview.json b/app/javascript/dashboard/i18n/locale/nl/yearInReview.json new file mode 100644 index 0000000..c0e6f8c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/nl/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "Sluiten", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "gesprekken", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "Download", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Volgende", + "SHARE": "Deel gesprek" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/advancedFilters.json b/app/javascript/dashboard/i18n/locale/no/advancedFilters.json new file mode 100644 index 0000000..ebac180 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Filter conversations", + "SUBTITLE": "Add your filters below and hit 'Apply filters' to cut through the chat clutter.", + "EDIT_CUSTOM_FILTER": "Edit Folder", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your folder.", + "ADD_NEW_FILTER": "Add filter", + "FILTER_DELETE_ERROR": "Oops, looks like we can't save nothing! Please add at least one filter to save it.", + "SUBMIT_BUTTON_LABEL": "Apply filters", + "UPDATE_BUTTON_LABEL": "Update folder", + "CANCEL_BUTTON_LABEL": "Avbryt", + "CLEAR_BUTTON_LABEL": "Clear filters", + "FOLDER_LABEL": "Folder Name", + "FOLDER_QUERY_LABEL": "Folder Query", + "EMPTY_VALUE_ERROR": "Value is required.", + "TOOLTIP_LABEL": "Filter conversations", + "QUERY_DROPDOWN_LABELS": { + "AND": "AND", + "OR": "OR" + }, + "INPUT_PLACEHOLDER": "Enter value", + "OPERATOR_LABELS": { + "equal_to": "Equal to", + "not_equal_to": "Not equal to", + "does_not_contain": "Does not contain", + "is_present": "Is present", + "is_not_present": "Is not present", + "is_greater_than": "Is greater than", + "is_less_than": "Is lesser than", + "days_before": "Is x days before", + "starts_with": "Starts with", + "equalTo": "Equal to", + "notEqualTo": "Not equal to", + "contains": "Contains", + "doesNotContain": "Does not contain", + "isPresent": "Is present", + "isNotPresent": "Is not present", + "isGreaterThan": "Is greater than", + "isLessThan": "Is lesser than", + "daysBefore": "Is x days before", + "startsWith": "Starts with" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "True", + "FALSE": "False" + }, + "ATTRIBUTES": { + "STATUS": "Satus", + "ASSIGNEE_NAME": "Assignee name", + "INBOX_NAME": "Navn på innboks", + "TEAM_NAME": "Team name", + "CONVERSATION_IDENTIFIER": "Conversation identifier", + "CAMPAIGN_NAME": "Campaign name", + "LABELS": "Etiketter", + "BROWSER_LANGUAGE": "Browser language", + "PRIORITY": "Priority", + "COUNTRY_NAME": "Country name", + "REFERER_LINK": "Referer link", + "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_TEXT": "Text", + "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Created at", + "LAST_ACTIVITY": "Last activity" + }, + "ERRORS": { + "VALUE_REQUIRED": "Value is required", + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard filters", + "ADDITIONAL_FILTERS": "Additional filters", + "CUSTOM_ATTRIBUTES": "Custom attributes" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Do you want to save this filter?", + "LABEL": "Name this filter", + "PLACEHOLDER": "Name your filter to refer it later.", + "ERROR_MESSAGE": "Name is required.", + "SAVE_BUTTON": "Save filter", + "CANCEL_BUTTON": "Avbryt", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder created successfully.", + "ERROR_MESSAGE": "Error while creating folder." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment created successfully.", + "ERROR_MESSAGE": "Error while creating segment." + } + }, + "EDIT": { + "EDIT_BUTTON": "Edit folder" + }, + "DELETE": { + "DELETE_BUTTON": "Delete filter", + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete the filter ", + "YES": "Yes, delete", + "NO": "No, keep it" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder deleted successfully.", + "ERROR_MESSAGE": "Error while deleting folder." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment deleted successfully.", + "ERROR_MESSAGE": "Error while deleting segment." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/agentBots.json b/app/javascript/dashboard/i18n/locale/no/agentBots.json new file mode 100644 index 0000000..1880986 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Bots", + "LOADING_EDITOR": "Loading editor...", + "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try. You can manage your bots from this page or create new ones using the 'Add Bot' button.", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "System bot", + "GLOBAL_BOT_BADGE": "System", + "AVATAR": { + "SUCCESS_DELETE": "Bot avatar deleted successfully", + "ERROR_DELETE": "Error deleting bot avatar, please try again" + }, + "BOT_CONFIGURATION": { + "TITLE": "Select an agent bot", + "DESC": "Assign an Agent Bot to your inbox. They can handle initial conversations and transfer them to a live agent when necessary.", + "SUBMIT": "Oppdater", + "DISCONNECT": "Disconnect bot", + "SUCCESS_MESSAGE": "Successfully updated the agent bot.", + "DISCONNECTED_SUCCESS_MESSAGE": "Successfully disconnected the agent bot.", + "ERROR_MESSAGE": "Could not update the agent bot. Please try again.", + "DISCONNECTED_ERROR_MESSAGE": "Could not disconnect the agent bot. Please try again.", + "SELECT_PLACEHOLDER": "Select bot" + }, + "ADD": { + "TITLE": "Add Bot", + "CANCEL_BUTTON_TEXT": "Avbryt", + "API": { + "SUCCESS_MESSAGE": "Bot added successfully.", + "ERROR_MESSAGE": "Could not add bot. Please try again later." + } + }, + "LIST": { + "404": "No bots found. You can create a bot by clicking the 'Add Bot' button.", + "LOADING": "Fetching bots...", + "TABLE_HEADER": { + "DETAILS": "Bot Details", + "URL": "Webhook URL" + } + }, + "DELETE": { + "BUTTON_TEXT": "Slett", + "TITLE": "Delete bot", + "CONFIRM": { + "TITLE": "Bekreft sletting", + "MESSAGE": "Are you sure you want to delete {name}?", + "YES": "Ja, slett", + "NO": "Nei, behold" + }, + "API": { + "SUCCESS_MESSAGE": "Bot deleted successfully.", + "ERROR_MESSAGE": "Could not delete bot. Please try again." + } + }, + "EDIT": { + "BUTTON_TEXT": "Rediger", + "TITLE": "Edit bot", + "API": { + "SUCCESS_MESSAGE": "Bot updated successfully.", + "ERROR_MESSAGE": "Could not update bot. Please try again." + } + }, + "ACCESS_TOKEN": { + "TITLE": "Tilgangstoken", + "DESCRIPTION": "Copy the access token and save it securely", + "COPY_SUCCESSFUL": "Access token copied to clipboard", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "Bot name", + "PLACEHOLDER": "Enter bot name", + "REQUIRED": "Bot name is required" + }, + "DESCRIPTION": { + "LABEL": "Beskrivelse", + "PLACEHOLDER": "What does this bot do?" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "Webhook URL is required" + }, + "ERRORS": { + "NAME": "Bot name is required", + "URL": "Webhook URL is required", + "VALID_URL": "Please enter a valid URL starting with http:// or https://" + }, + "CANCEL": "Avbryt", + "CREATE": "Create Bot", + "UPDATE": "Update Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them." + }, + "TYPES": { + "WEBHOOK": "Webhook bot" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/agentMgmt.json b/app/javascript/dashboard/i18n/locale/no/agentMgmt.json new file mode 100644 index 0000000..42a65eb --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Agenter", + "HEADER_BTN_TXT": "Legg til agent", + "LOADING": "Henter agentliste", + "DESCRIPTION": "En agent er et medlem av kundestøtteteamet som kan se og svare på brukermeldinger. Listen nedenfor viser alle agenter på kontoen din.", + "LEARN_MORE": "Lær om brukerroller", + "AGENT_TYPES": { + "ADMINISTRATOR": "Administrator", + "AGENT": "Agent" + }, + "LIST": { + "404": "Det er ingen agenter tilknyttet denne kontoen", + "TITLE": "Administrer agentene i ditt team", + "DESC": "Du kan legge til eller fjerne agenter i ditt team.", + "NAME": "Navn", + "EMAIL": "E-POST", + "STATUS": "Satus", + "ACTIONS": "Handlinger", + "VERIFIED": "Verifisert", + "VERIFICATION_PENDING": "Verifisering venter", + "AVAILABLE_CUSTOM_ROLE": "Tilgjengelige egendefinerte rolletillatelser" + }, + "ADD": { + "TITLE": "Legg til agent i teamet ditt", + "DESC": "Du kan legge til personer som vil kunne håndtere støtte for dine innbokser.", + "CANCEL_BUTTON_TEXT": "Avbryt", + "FORM": { + "NAME": { + "LABEL": "Agent navn", + "PLACEHOLDER": "Skriv inn navnet til agenten" + }, + "AGENT_TYPE": { + "LABEL": "Rolle", + "PLACEHOLDER": "Velg en rolle", + "ERROR": "En rolle er påkrevd" + }, + "EMAIL": { + "LABEL": "E-postadresse", + "PLACEHOLDER": "Skriv inn en agent sin e-postadresse" + }, + "SUBMIT": "Legg til agent" + }, + "API": { + "SUCCESS_MESSAGE": "Agent ble lagt til", + "EXIST_MESSAGE": "E-postadressen til agenten er allerede i bruk, prøv en annen e-postadresse", + "ERROR_MESSAGE": "Kunne ikke koble til Woot Server, vennligst prøv igjen senere" + } + }, + "DELETE": { + "BUTTON_TEXT": "Slett", + "API": { + "SUCCESS_MESSAGE": "Agenten ble slettet", + "ERROR_MESSAGE": "Kunne ikke koble til Woot Server, vennligst prøv igjen senere" + }, + "CONFIRM": { + "TITLE": "Bekreft sletting", + "MESSAGE": "Er du sikker på at du vil slette ", + "YES": "Ja, slett ", + "NO": "Nei, behold " + } + }, + "EDIT": { + "TITLE": "Rediger agent", + "FORM": { + "NAME": { + "LABEL": "Agent navn", + "PLACEHOLDER": "Skriv inn navnet til agenten" + }, + "AGENT_TYPE": { + "LABEL": "Rolle", + "PLACEHOLDER": "Velg en rolle", + "ERROR": "En rolle er påkrevd" + }, + "EMAIL": { + "LABEL": "E-postadresse", + "PLACEHOLDER": "Skriv inn en agent sin e-postadresse" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Tilgjengelighet", + "PLACEHOLDER": "Vennligst velg en tilgjengelighet status", + "ERROR": "Tilgjengelighet er påkrevd" + }, + "SUBMIT": "Rediger agent" + }, + "BUTTON_TEXT": "Rediger", + "CANCEL_BUTTON_TEXT": "Avbryt", + "API": { + "SUCCESS_MESSAGE": "Agenten ble oppdatert", + "ERROR_MESSAGE": "Kunne ikke koble til Woot Server, vennligst prøv igjen senere" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Tilbakestill passord", + "ADMIN_SUCCESS_MESSAGE": "En e-post med instruksjoner for å tilbakestille passordet er sendt til agenten", + "SUCCESS_MESSAGE": "Passordet til agenten ble tilbakestilt", + "ERROR_MESSAGE": "Kunne ikke koble til Woot Server, vennligst prøv igjen senere" + } + }, + "SEARCH": { + "NO_RESULTS": "Ingen resultater funnet." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "Ingen", + "TITLE": { + "AGENT": "Velg agent", + "TEAM": "Velg gruppe" + }, + "LIST": { + "NONE": "Ingen" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "Ingen agenter funnet", + "TEAM": "Ingen grupper funnet" + }, + "PLACEHOLDER": { + "AGENT": "Søk etter agenter", + "TEAM": "Søk blant grupper", + "INPUT": "Søk etter agenter" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/no/attributesMgmt.json new file mode 100644 index 0000000..7d1375f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Egendefinerte verdier", + "HEADER_BTN_TXT": "Add Custom Attribute", + "LOADING": "Fetching custom attributes", + "DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.", + "LEARN_MORE": "Learn more about custom attributes", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Text", + "NUMBER": "Number", + "LINK": "Link", + "DATE": "Date", + "LIST": "List", + "CHECKBOX": "Checkbox" + }, + "ADD": { + "TITLE": "Add Custom Attribute", + "SUBMIT": "Opprett", + "CANCEL_BUTTON_TEXT": "Avbryt", + "FORM": { + "NAME": { + "LABEL": "Display Name", + "PLACEHOLDER": "Enter custom attribute display name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Beskrivelse", + "PLACEHOLDER": "Enter custom attribute description", + "ERROR": "Description is required" + }, + "MODEL": { + "LABEL": "Applies to", + "PLACEHOLDER": "Please select one", + "ERROR": "Model is required" + }, + "TYPE": { + "LABEL": "Type", + "PLACEHOLDER": "Please select a type", + "ERROR": "Type is required", + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter value and press enter key", + "ERROR": "Must have at least one value" + } + }, + "KEY": { + "LABEL": "Key", + "PLACEHOLDER": "Enter custom attribute key", + "ERROR": "Key is required", + "IN_VALID": "Invalid key" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute added successfully!", + "ERROR_MESSAGE": "Could not create a Custom Attribute. Please try again later." + } + }, + "DELETE": { + "BUTTON_TEXT": "Slett", + "API": { + "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure want to delete - {attributeName}", + "PLACE_HOLDER": "Please type {attributeName} to confirm", + "MESSAGE": "Deleting will remove the custom attribute", + "YES": "Slett ", + "NO": "Avbryt" + } + }, + "EDIT": { + "TITLE": "Edit Custom Attribute", + "UPDATE_BUTTON_TEXT": "Oppdater", + "TYPE": { + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter values and press enter key" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute updated successfully", + "ERROR_MESSAGE": "There was an error updating custom attribute, please try again" + } + }, + "TABS": { + "HEADER": "Egendefinerte verdier", + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Navn", + "DESCRIPTION": "Beskrivelse", + "TYPE": "Type", + "KEY": "Key" + }, + "BUTTONS": { + "EDIT": "Rediger", + "DELETE": "Slett" + }, + "EMPTY_RESULT": { + "404": "There are no custom attributes created", + "NOT_FOUND": "There are no custom attributes configured" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Please enter custom attribute regex pattern. (Optional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Please enter regex pattern hint. (Optional)" + }, + "ENABLE_REGEX": { + "LABEL": "Enable regex validation" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/auditLogs.json b/app/javascript/dashboard/i18n/locale/no/auditLogs.json new file mode 100644 index 0000000..f47736a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Audit Logs", + "HEADER_BTN_TXT": "Add Audit Logs", + "LOADING": "Fetching Audit Logs", + "DESCRIPTION": "Audit Logs maintain a record of activities in your account, allowing you to track and audit your account, team, or services.", + "LEARN_MORE": "Learn more about audit logs", + "SEARCH_404": "Det finnes ingen elementer som samsvarer med denne spørringen", + "SIDEBAR_TXT": "Audit Logs
Audit Logs are trails for events and actions in a Chatwoot System.
", + "LIST": { + "404": "There are no Audit Logs available in this account.", + "TITLE": "Manage Audit Logs", + "DESC": "Audit Logs are trails for events and actions in a Chatwoot System.", + "TABLE_HEADER": { + "ACTIVITY": "User", + "TIME": "Action", + "IP_ADDRESS": "IP Adresse" + } + }, + "API": { + "SUCCESS_MESSAGE": "AuditLogs retrieved successfully", + "ERROR_MESSAGE": "Kunne ikke koble til Woot Server, vennligst prøv igjen senere" + }, + "DEFAULT_USER": "System", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} invited {invitee} to the account as an {role}", + "EDIT": { + "SELF": "{agentName} changed their {attributes} to {values}", + "OTHER": "{agentName} changed {attributes} of {user} to {values}", + "DELETED": "{agentName} changed {attributes} of a deleted user to {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} signed in", + "SIGN_OUT": "{agentName} signed out" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} deleted conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/automation.json b/app/javascript/dashboard/i18n/locale/no/automation.json new file mode 100644 index 0000000..b73eff7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automation", + "DESCRIPTION": "Automation can replace and streamline existing processes that require manual effort, such as adding labels and assigning conversations to the most suitable agent. This allows the team to focus on their strengths while reducing time spent on routine tasks.", + "LEARN_MORE": "Learn more about automation", + "HEADER_BTN_TXT": "Add Automation Rule", + "LOADING": "Fetching automation rules", + "ADD": { + "TITLE": "Add Automation Rule", + "SUBMIT": "Opprett", + "CANCEL_BUTTON_TEXT": "Avbryt", + "FORM": { + "NAME": { + "LABEL": "Rule Name", + "PLACEHOLDER": "Enter rule name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Beskrivelse", + "PLACEHOLDER": "Enter rule description", + "ERROR": "Description is required" + }, + "EVENT": { + "LABEL": "Event", + "PLACEHOLDER": "Please select one", + "ERROR": "Event is required" + }, + "CONDITIONS": { + "LABEL": "Conditions" + }, + "ACTIONS": { + "LABEL": "Handlinger" + } + }, + "CONDITION_BUTTON_LABEL": "Add Condition", + "ACTION_BUTTON_LABEL": "Add Action", + "API": { + "SUCCESS_MESSAGE": "Automation rule added successfully", + "ERROR_MESSAGE": "Could not able to create a automation rule, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Navn", + "DESCRIPTION": "Beskrivelse", + "ACTIVE": "Active", + "CREATED_ON": "Created on" + }, + "404": "No automation rules found" + }, + "DELETE": { + "TITLE": "Delete Automation Rule", + "SUBMIT": "Slett", + "CANCEL_BUTTON_TEXT": "Avbryt", + "CONFIRM": { + "TITLE": "Bekreft sletting", + "MESSAGE": "Er du sikker på at du vil slette ", + "YES": "Ja, slett ", + "NO": "Nei, behold " + }, + "API": { + "SUCCESS_MESSAGE": "Automation rule deleted successfully", + "ERROR_MESSAGE": "Could not able to delete a automation rule, Please try again later" + } + }, + "EDIT": { + "TITLE": "Edit Automation Rule", + "SUBMIT": "Oppdater", + "CANCEL_BUTTON_TEXT": "Avbryt", + "API": { + "SUCCESS_MESSAGE": "Automation rule updated successfully", + "ERROR_MESSAGE": "Could not update automation rule, Please try again later" + } + }, + "CLONE": { + "TOOLTIP": "Clone", + "API": { + "SUCCESS_MESSAGE": "Automation cloned successfully", + "ERROR_MESSAGE": "Could not clone automation rule, Please try again later" + } + }, + "FORM": { + "EDIT": "Rediger", + "CREATE": "Opprett", + "DELETE": "Slett", + "CANCEL": "Avbryt", + "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" + }, + "CONDITION": { + "DELETE_MESSAGE": "You need to have atleast one condition to save", + "CONTACT_CUSTOM_ATTR_LABEL": "Contact Custom Attributes", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Conversation Custom Attributes" + }, + "ACTION": { + "DELETE_MESSAGE": "You need to have atleast one action to save", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Enter your message here", + "TEAM_DROPDOWN_PLACEHOLDER": "Select teams", + "EMAIL_INPUT_PLACEHOLDER": "Enter email", + "URL_INPUT_PLACEHOLDER": "Enter URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Activate Automation Rule", + "DEACTIVATION_TITLE": "Deactivate Automation Rule", + "ACTIVATION_DESCRIPTION": "This action will activate the automation rule '{automationName}'. Are you sure you want to proceed?", + "DEACTIVATION_DESCRIPTION": "This action will deactivate the automation rule '{automationName}'. Are you sure you want to proceed?", + "ACTIVATION_SUCCESFUL": "Automation Rule Activated Successfully", + "DEACTIVATION_SUCCESFUL": "Automation Rule Deactivated Successfully", + "ACTIVATION_ERROR": "Could not Activate Automation, Please try again later", + "DEACTIVATION_ERROR": "Could not Deactivate Automation, Please try again later", + "CONFIRMATION_LABEL": "Yes", + "CANCEL_LABEL": "No" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Could not upload attachment, Please try again", + "LABEL_IDLE": "Upload Attachment", + "LABEL_UPLOADING": "Laster opp...", + "LABEL_UPLOADED": "Successfully Uploaded", + "LABEL_UPLOAD_FAILED": "Upload Failed" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Value is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "NONE_OPTION": "Ingen", + "EVENTS": { + "CONVERSATION_CREATED": "Conversation Created", + "CONVERSATION_UPDATED": "Conversation Updated", + "MESSAGE_CREATED": "Message Created", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Conversation Opened" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assign to Agent", + "ASSIGN_TEAM": "Assign a Team", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "SEND_EMAIL_TO_TEAM": "Send an Email to Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Demp samtale", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_WEBHOOK_EVENT": "Send Webhook Event", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "CHANGE_PRIORITY": "Change Priority", + "ADD_SLA": "Add SLA", + "OPEN_CONVERSATION": "Open conversation" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "None", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Message Type", + "MESSAGE_CONTAINS": "Message Contains", + "EMAIL": "E-post", + "INBOX": "Inbox", + "CONVERSATION_LANGUAGE": "Conversation Language", + "PHONE_NUMBER": "Telefonnummer", + "STATUS": "Satus", + "BROWSER_LANGUAGE": "Browser Language", + "MAIL_SUBJECT": "Email Subject", + "COUNTRY_NAME": "Country", + "REFERER_LINK": "Referrer Link", + "ASSIGNEE_NAME": "Agent", + "TEAM_NAME": "Team", + "PRIORITY": "Priority", + "LABELS": "Etiketter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/bulkActions.json b/app/javascript/dashboard/i18n/locale/no/bulkActions.json new file mode 100644 index 0000000..c3b4f42 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", + "AGENT_SELECT_LABEL": "Velg agent", + "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", + "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Go back", + "ASSIGN_LABEL": "Tildel", + "YES": "Yes", + "SEARCH_INPUT_PLACEHOLDER": "Søk", + "ASSIGN_AGENT_TOOLTIP": "Assign agent", + "ASSIGN_TEAM_TOOLTIP": "Assign team", + "ASSIGN_SUCCESFUL": "Conversations assigned successfully.", + "ASSIGN_FAILED": "Failed to assign conversations. Please try again.", + "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", + "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", + "AGENT_LIST_LOADING": "Loading agents", + "UPDATE": { + "CHANGE_STATUS": "Change status", + "SNOOZE_UNTIL": "Snooze", + "UPDATE_SUCCESFUL": "Conversation status updated successfully.", + "UPDATE_FAILED": "Failed to update conversations. Please try again." + }, + "LABELS": { + "ASSIGN_LABELS": "Assign labels", + "NO_LABELS_FOUND": "No labels found", + "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "ASSIGN_SUCCESFUL": "Labels assigned successfully.", + "ASSIGN_FAILED": "Failed to assign labels. Please try again." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Velg gruppe", + "NONE": "None", + "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", + "ASSIGN_SELECTED_TEAMS": "Assign selected team.", + "ASSIGN_SUCCESFUL": "Teams assigned successfully.", + "ASSIGN_FAILED": "Failed to assign team. Please try again." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/campaign.json b/app/javascript/dashboard/i18n/locale/no/campaign.json new file mode 100644 index 0000000..b0ac970 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "Aktivert", + "DISABLED": "Deaktivert" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Sendt av", + "BOT": "Bot", + "FROM": "fra", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "Avbryt", + "CREATE_BUTTON_TEXT": "Opprett", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Melding", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "SENT_BY": { + "LABEL": "Sendt av", + "PLACEHOLDER": "Please select sender", + "ERROR": "Sender is required" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Please enter the URL", + "ERROR": "Vennligst skriv inn en gyldig URL" + }, + "TIME_ON_PAGE": { + "LABEL": "Time on page(Seconds)", + "PLACEHOLDER": "Please enter the time", + "ERROR": "Time on page is required" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "Enable campaign", + "TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours" + }, + "BUTTONS": { + "CREATE": "Opprett", + "CANCEL": "Avbryt" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "Avbryt", + "CREATE_BUTTON_TEXT": "Opprett", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "MESSAGE": { + "LABEL": "Melding", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Opprett", + "CANCEL": "Avbryt" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No WhatsApp campaigns are available", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Completed", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "Avbryt", + "CREATE_BUTTON_TEXT": "Opprett", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "Process {templateName}", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLES_LABEL": "Variables", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "ERROR": "Scheduled time is required" + }, + "BUTTONS": { + "CREATE": "Opprett", + "CANCEL": "Avbryt" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Er du sikker på at du vil slette?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "Slett", + "API": { + "SUCCESS_MESSAGE": "Campaign deleted successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/no/cannedMgmt.json new file mode 100644 index 0000000..3c58401 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Forhåndslagde svar", + "LEARN_MORE": "Lær mer om standard svar", + "DESCRIPTION": "Forbudte svar er forhåndskrevne svarmaler som hjelper deg raskt å svare på en samtale. Agenter kan skrive inn '/'-tegnet etterfulgt av en kortkode for å sette inn et standard svar under en samtale. ", + "HEADER_BTN_TXT": "Legge til standard svar", + "LOADING": "Henter standard svar...", + "SEARCH_404": "Det finnes ingen elementer som samsvarer med denne spørringen.", + "LIST": { + "404": "Det er ingen forhåndslagde svar tilgjengelig i denne kontoen.", + "TITLE": "Administrer forhåndslagde svar", + "DESC": "Forbudte svar er forhåndsdefinerte svarmaler som kan brukes til raskt å sende ut svar på samtaler.", + "TABLE_HEADER": { + "SHORT_CODE": "Kortkode", + "CONTENT": "Innhold", + "ACTIONS": "Handlinger" + } + }, + "ADD": { + "TITLE": "Legge til standard svar", + "DESC": "Forbudte svar er forhåndsdefinerte svarmaler som kan brukes til raskt å sende ut svar på samtaler.", + "CANCEL_BUTTON_TEXT": "Avbryt", + "FORM": { + "SHORT_CODE": { + "LABEL": "Kortkode", + "PLACEHOLDER": "Vennligst angi en kortkode.", + "ERROR": "Kortkode kreves." + }, + "CONTENT": { + "LABEL": "Melding", + "PLACEHOLDER": "Vennligst skriv meldingen du vil lagre som mal for bruk senere.", + "ERROR": "Melding er påkrevd." + }, + "SUBMIT": "Send" + }, + "API": { + "SUCCESS_MESSAGE": "Standard svar er lagt til.", + "ERROR_MESSAGE": "Kunne ikke koble til Woot Server, vennligst prøv igjen senere" + } + }, + "EDIT": { + "TITLE": "Rediger forhåndslagd svar", + "CANCEL_BUTTON_TEXT": "Avbryt", + "FORM": { + "SHORT_CODE": { + "LABEL": "Kortkode", + "PLACEHOLDER": "Angi en kortkode.", + "ERROR": "Kortkode kreves." + }, + "CONTENT": { + "LABEL": "Melding", + "PLACEHOLDER": "Vennligst skriv meldingen du vil lagre som mal for bruk senere.", + "ERROR": "Melding er påkrevd." + }, + "SUBMIT": "Send" + }, + "BUTTON_TEXT": "Rediger", + "API": { + "SUCCESS_MESSAGE": "Forhåndslagd svar ble oppdatert.", + "ERROR_MESSAGE": "Kunne ikke koble til Woot Server, vennligst prøv igjen senere" + } + }, + "DELETE": { + "BUTTON_TEXT": "Slett", + "API": { + "SUCCESS_MESSAGE": "Forhåndslagd svar ble slettet.", + "ERROR_MESSAGE": "Kunne ikke koble til Woot Server, vennligst prøv igjen senere" + }, + "CONFIRM": { + "TITLE": "Bekreft sletting", + "MESSAGE": "Er du sikker på at du vil slette ", + "YES": "Ja, slett ", + "NO": "Nei, behold " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/chatlist.json b/app/javascript/dashboard/i18n/locale/no/chatlist.json new file mode 100644 index 0000000..fa878aa --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Henter samtaler", + "LOAD_MORE_CONVERSATIONS": "Last inn flere samtaler", + "EOF": "Alle samtaler lastet 🎉", + "LIST": { + "404": "Det er ingen aktive samtaler i denne gruppen." + }, + "FAILED_TO_SEND": "Kunne ikke sende", + "TAB_HEADING": "Samtaler", + "MENTION_HEADING": "Omtale", + "UNATTENDED_HEADING": "Udeltatt", + "SEARCH": { + "INPUT": "Søk etter personer, samtaler, lagrede svar .." + }, + "FILTER_ALL": "Alle", + "ASSIGNEE_TYPE_TABS": { + "me": "Mine", + "unassigned": "Ikke tildelt", + "all": "Alle" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Åpne" + }, + "resolved": { + "TEXT": "Løst" + }, + "pending": { + "TEXT": "Ventende" + }, + "snoozed": { + "TEXT": "Slumret" + }, + "all": { + "TEXT": "Alle" + } + }, + "VIEW_FILTER": "Vis", + "SORT_TOOLTIP_LABEL": "Sorter samtaler", + "CHAT_SORT": { + "STATUS": "Satus", + "ORDER_BY": "Order by" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Created", + "OLDEST": "Created at:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Last activity:", + "ACTIVE": "Last activity" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Last activity: Oldest first" + }, + "last_activity_at_desc": { + "TEXT": "Last activity: Newest first" + }, + "created_at_desc": { + "TEXT": "Created at: Newest first" + }, + "created_at_asc": { + "TEXT": "Created at: Oldest first" + }, + "priority_desc": { + "TEXT": "Priority: Highest first" + }, + "priority_asc": { + "TEXT": "Priority: Lowest first" + }, + "waiting_since_asc": { + "TEXT": "Pending Response: Longest first" + }, + "waiting_since_desc": { + "TEXT": "Pending Response: Shortest first" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Bildemelding" + }, + "audio": { + "CONTENT": "Lydmelding" + }, + "video": { + "CONTENT": "Video beskjed" + }, + "file": { + "CONTENT": "Vedlegg" + }, + "location": { + "CONTENT": "Plassering" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "har delt en URL" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Sort conversation", + "DROPDOWN_TITLE": "Sort by", + "ITEMS": { + "LATEST": { + "NAME": "Last activity at", + "LABEL": "Last activity" + }, + "CREATED_AT": { + "NAME": "Created at", + "LABEL": "Created at" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Last user message at", + "LABEL": "Last message" + } + } + }, + "RECEIVED_VIA_EMAIL": "Mottatt via e-post", + "VIEW_TWEET_IN_TWITTER": "Vis tweet i Twitter", + "REPLY_TO_TWEET": "Svar på denne tweeten", + "LINK_TO_STORY": "Go to instagram story", + "SENT": "Sent successfully", + "READ": "Read successfully", + "DELIVERED": "Delivered successfully", + "NO_MESSAGES": "Ingen meldinger", + "NO_CONTENT": "No content available", + "HIDE_QUOTED_TEXT": "Hide Quoted Text", + "SHOW_QUOTED_TEXT": "Show Quoted Text", + "MESSAGE_READ": "Read", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/companies.json b/app/javascript/dashboard/i18n/locale/no/companies.json new file mode 100644 index 0000000..98233d9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "Navn", + "DOMAIN": "Domain", + "CREATED_AT": "Created at", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/components.json b/app/javascript/dashboard/i18n/locale/no/components.json new file mode 100644 index 0000000..d5e551f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} of {totalPages} pages" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "Ingen resultater funnet.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} more" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "Ingen resultater funnet.", + "SEARCHING": "Searching..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Avbryt", + "CONFIRM": "Confirm" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Søk etter land", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Please select a dial code from the list" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Author is not available" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Learn more", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/contact.json b/app/javascript/dashboard/i18n/locale/no/contact.json new file mode 100644 index 0000000..e612011 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Ikke tilgjengelig", + "EMAIL_ADDRESS": "E-postadresse", + "PHONE_NUMBER": "Telefonnummer", + "IDENTIFIER": "Identifier", + "COPY_SUCCESSFUL": "Kopiert til utklippstavle", + "COMPANY": "Firma", + "LOCATION": "Plassering", + "BROWSER_LANGUAGE": "Browser Language", + "CONVERSATION_TITLE": "Samtaledetaljer", + "VIEW_PROFILE": "View Profile", + "BROWSER": "Nettleser", + "OS": "Operativsystem", + "INITIATED_FROM": "Startet fra", + "INITIATED_AT": "Started", + "IP_ADDRESS": "IP Adresse", + "CREATED_AT_LABEL": "Created", + "NEW_MESSAGE": "New message", + "CALL": "Call", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "Det er ingen tidligere samtaler knyttet til denne kontakten.", + "TITLE": "Tidligere samtaler" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Contact Labels", + "ERROR": "Couldn't update labels" + }, + "CONVERSATION": { + "TITLE": "Samtaleetiketter", + "ADD_BUTTON": "Add Labels" + }, + "LABEL_SELECT": { + "TITLE": "Add Labels", + "PLACEHOLDER": "Search labels", + "NO_RESULT": "No labels found", + "CREATE_LABEL": "Create new label" + } + }, + "MERGE_CONTACT": "Merge contact", + "CONTACT_ACTIONS": "Contact actions", + "MUTE_CONTACT": "Block Contact", + "UNMUTE_CONTACT": "Unblock Contact", + "MUTED_SUCCESS": "This contact is blocked successfully. You will not be notified of any future conversations.", + "UNMUTED_SUCCESS": "This contact is unblocked successfully.", + "SEND_TRANSCRIPT": "Send kopi av samtale", + "EDIT_LABEL": "Rediger", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Egendefinerte verdier", + "CONTACT_LABELS": "Contact Labels", + "PREVIOUS_CONVERSATIONS": "Tidligere samtaler", + "NO_RECORDS_FOUND": "No attributes found" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Rediger kontakt", + "TITLE": "Rediger kontakt", + "DESC": "Rediger kontaktopplysninger" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Delete Contact", + "TITLE": "Delete contact", + "DESC": "Delete contact details", + "CONFIRM": { + "TITLE": "Bekreft sletting", + "MESSAGE": "Er du sikker på at du vil slette ", + "YES": "Ja, slett", + "NO": "Nei, behold" + }, + "API": { + "SUCCESS_MESSAGE": "Contact deleted successfully", + "ERROR_MESSAGE": "Could not delete contact. Please try again later." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Send", + "CANCEL": "Avbryt", + "AVATAR": { + "LABEL": "Kontaktens profilbilde" + }, + "NAME": { + "PLACEHOLDER": "Angi hele navnet på kontakten", + "LABEL": "Fullt navn" + }, + "BIO": { + "PLACEHOLDER": "Skriv beskrivelse for kontakten", + "LABEL": "Beskrivelse" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Skriv inn e-postadressen til kontakten", + "LABEL": "E-postadresse", + "DUPLICATE": "Denne e-postadressen er allerede i bruk av en annen kontakt.", + "ERROR": "Vennligst skriv inn en gyldig e-postadresse." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Skriv inn telefonnummeret til kontakten", + "LABEL": "Telefonnummer", + "HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]", + "ERROR": "Phone number should be either empty or of E.164 format", + "DIAL_CODE_ERROR": "Please select a dial code from the list", + "DUPLICATE": "This phone number is in use for another contact." + }, + "LOCATION": { + "PLACEHOLDER": "Angi plasseringen til kontakten", + "LABEL": "Plassering" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Skriv inn firmanavn", + "LABEL": "Firmaets navn" + }, + "COUNTRY": { + "PLACEHOLDER": "Enter the country name", + "LABEL": "Country Name", + "SELECT_PLACEHOLDER": "Select", + "REMOVE": "Fjern", + "SELECT_COUNTRY": "Select Country" + }, + "CITY": { + "PLACEHOLDER": "Enter the city name", + "LABEL": "City Name" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Skriv inn Facebook brukernavn", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Skriv inn Twitter brukernavn", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Skriv inn LinkedIn brukernavn", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Skriv inn Github brukernavn", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Contact avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later." + } + }, + "SUCCESS_MESSAGE": "Contact saved successfully", + "ERROR_MESSAGE": "Det oppstod en feil. Prøv igjen" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Start conversation", + "TITLE": "Ny samtale", + "DESC": "Start a new conversation by sending a new message.", + "NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.", + "FORM": { + "TO": { + "LABEL": "To" + }, + "INBOX": { + "LABEL": "Inbox", + "PLACEHOLDER": "Choose source inbox", + "ERROR": "Select an inbox" + }, + "SUBJECT": { + "LABEL": "Subject", + "PLACEHOLDER": "Subject", + "ERROR": "Subject can't be empty" + }, + "MESSAGE": { + "LABEL": "Melding", + "PLACEHOLDER": "Write your message here", + "ERROR": "Message can't be empty" + }, + "ATTACHMENTS": { + "SELECT": "Choose files", + "HELP_TEXT": "Drag and drop files here or choose files to attach" + }, + "SUBMIT": "Send message", + "CANCEL": "Avbryt", + "SUCCESS_MESSAGE": "Message sent!", + "GO_TO_CONVERSATION": "Vis", + "ERROR_MESSAGE": "Couldn't send! try again" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Social Profiles" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Add custom attribute", + "COPY_SUCCESSFUL": "Kopiert til utklippstavle", + "SHOW_MORE": "Show all attributes", + "SHOW_LESS": "Show less attributes", + "ACTIONS": { + "COPY": "Copy attribute", + "DELETE": "Delete attribute", + "EDIT": "Edit attribute" + }, + "ADD": { + "TITLE": "Create custom attribute", + "DESC": "Add custom information to this contact." + }, + "FORM": { + "CREATE": "Add attribute", + "CANCEL": "Avbryt", + "NAME": { + "LABEL": "Custom attribute name", + "PLACEHOLDER": "Eg: shopify id", + "ERROR": "Invalid custom attribute name" + }, + "VALUE": { + "LABEL": "Attribute value", + "PLACEHOLDER": "Eg: 11901 " + }, + "ADD": { + "TITLE": "Create new attribute ", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Select value", + "SEARCH_INPUT_PLACEHOLDER": "Search value", + "NO_RESULT": "No result found" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Valid value is required", + "INVALID_URL": "Invalid URL", + "INVALID_INPUT": "Invalid Input" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Merge contacts", + "DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact’ s attributes will take precedence.", + "PRIMARY": { + "TITLE": "Primary contact", + "HELP_LABEL": "To be deleted" + }, + "PARENT": { + "TITLE": "Contact to merge", + "PLACEHOLDER": "Search for a contact", + "HELP_LABEL": "To be kept" + }, + "SUMMARY": { + "TITLE": "Summary", + "DELETE_WARNING": "Contact of {primaryContactName} will be deleted.", + "ATTRIBUTE_WARNING": "Contact details of {primaryContactName} will be copied to {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": " Merge contacts", + "CANCEL": "Avbryt", + "CHILD_CONTACT": { + "ERROR": "Select a child contact to merge" + }, + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Kontakter", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "Active contacts", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "Melding", + "SEND_MESSAGE": "Send message", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "Kontakter" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Add contact", + "EXPORT_CONTACT": "Export contacts", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Save contact", + "EMAIL_ADDRESS_DUPLICATE": "Denne e-postadressen er allerede i bruk av en annen kontakt.", + "PHONE_NUMBER_DUPLICATE": "This phone number is in use for another contact.", + "SUCCESS_MESSAGE": "Contact saved successfully", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "This contact is unblocked successfully", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Import contacts", + "DESCRIPTION": "Import contacts through a CSV file.", + "DOWNLOAD_LABEL": "Download a sample csv.", + "LABEL": "CSV File:", + "CHOOSE_FILE": "Choose file", + "CHANGE": "Endre", + "CANCEL": "Avbryt", + "IMPORT": "Import", + "SUCCESS_MESSAGE": "You will be notified via email when the import is complete.", + "ERROR_MESSAGE": "Det oppstod en feil. Prøv igjen" + }, + "EXPORT_CONTACT": { + "TITLE": "Export contacts", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Export", + "SUCCESS_MESSAGE": "Export is in progress, You will be notified via email when export file is ready to dowanlod.", + "ERROR_MESSAGE": "Det oppstod en feil. Prøv igjen" + }, + "SORT_BY": { + "LABEL": "Sort by", + "OPTIONS": { + "NAME": "Navn", + "EMAIL": "E-post", + "PHONE_NUMBER": "Telefonnummer", + "COMPANY": "Firma", + "COUNTRY": "Country", + "CITY": "City", + "LAST_ACTIVITY": "Last activity", + "CREATED_AT": "Created at" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Do you want to save this filter?", + "CONFIRM": "Save filter", + "LABEL": "Navn", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "Bekreft sletting", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "Ja, slett", + "CANCEL": "No, Cancel", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "Navn", + "EMAIL": "E-post", + "PHONE_NUMBER": "Telefonnummer", + "IDENTIFIER": "Identifier", + "COUNTRY": "Country", + "CITY": "City", + "CREATED_AT": "Created at", + "LAST_ACTIVITY": "Last activity", + "REFERER_LINK": "Referer link", + "BLOCKED": "Blocked", + "BLOCKED_TRUE": "True", + "BLOCKED_FALSE": "False", + "BUTTONS": { + "CLEAR_FILTERS": "Clear filters", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "Apply filters", + "ADD_FILTER": "Add filter" + }, + "TITLE": "Filter contacts", + "EDIT_SEGMENT": "Edit segment", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Clear filters" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "View details", + "EDIT_DETAILS_FORM": { + "TITLE": "Rediger kontaktopplysninger", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "Denne e-postadressen er allerede i bruk av en annen kontakt." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "This phone number is in use for another contact." + }, + "CITY": { + "PLACEHOLDER": "Enter the city name" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Skriv inn firmanavn" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "This action is permanent and irreversible.", + "BUTTON": "Delete now" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "Delete contact", + "DELETE_DIALOG": { + "TITLE": "Bekreft sletting", + "DESCRIPTION": "Are you sure you want to delete this contact?", + "CONFIRM": "Ja, slett", + "API": { + "SUCCESS_MESSAGE": "Contact deleted successfully", + "ERROR_MESSAGE": "Could not delete contact. Please try again later." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributes", + "HISTORY": "History", + "NOTES": "Notes", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "Det er ingen tidligere samtaler knyttet til denne kontakten" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "Yes", + "NO": "No", + "TRIGGER": { + "SELECT": "Select value", + "INPUT": "Enter value" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "Valid value is required", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "Invalid URL", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "No attributes found", + "API": { + "SUCCESS_MESSAGE": "Attribute updated successfully", + "DELETE_SUCCESS_MESSAGE": "Attribute deleted successfully", + "UPDATE_ERROR": "Unable to update attribute. Please try again later", + "DELETE_ERROR": "Unable to delete attribute. Please try again later" + } + }, + "MERGE": { + "TITLE": "Merge contact", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Primary contact", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "To be deleted", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Search for a contact", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!", + "IS_SEARCHING": "Searching...", + "BUTTONS": { + "CANCEL": "Avbryt", + "CONFIRM": "Merge contact" + } + }, + "NOTES": { + "PLACEHOLDER": "Add a note", + "WROTE": "wrote", + "YOU": "Du", + "SAVE": "Save note", + "ADD_NOTE": "Add contact note", + "EXPAND": "Expand", + "COLLAPSE": "Collapse", + "NO_NOTES": "No notes, you can add notes from the contact details page.", + "EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "No contacts found in this account", + "SUBTITLE": "Start adding new contacts by clicking on the button below", + "BUTTON_LABEL": "Add contact", + "SEARCH_EMPTY_STATE_TITLE": "Ingen kontakter samsvarer med søket ditt 🔍", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Assign Labels", + "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "Slett", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Delete contact" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "Vis", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "To:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Subject :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "Bcc:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "Bcc" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Write your message here..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Variables", + "BACK": "Go back", + "SEND_MESSAGE": "Send message" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Go back", + "SEND_MESSAGE": "Send message" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/contactFilters.json b/app/javascript/dashboard/i18n/locale/no/contactFilters.json new file mode 100644 index 0000000..028a0a7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filter Contacts", + "SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.", + "EDIT_CUSTOM_SEGMENT": "Edit Segment", + "CUSTOM_VIEWS_SUBTITLE": "Add or remove filters and update your segment.", + "ADD_NEW_FILTER": "Add Filter", + "CLEAR_ALL_FILTERS": "Clear All Filters", + "FILTER_DELETE_ERROR": "You should have atleast one filter to save", + "SUBMIT_BUTTON_LABEL": "Send", + "UPDATE_BUTTON_LABEL": "Update Segment", + "CANCEL_BUTTON_LABEL": "Avbryt", + "CLEAR_BUTTON_LABEL": "Clear Filters", + "EMPTY_VALUE_ERROR": "Value is required", + "SEGMENT_LABEL": "Segment Name", + "SEGMENT_QUERY_LABEL": "Segment Query", + "TOOLTIP_LABEL": "Filter contacts", + "QUERY_DROPDOWN_LABELS": { + "AND": "AND", + "OR": "OR" + }, + "OPERATOR_LABELS": { + "equal_to": "Equal to", + "not_equal_to": "Not equal to", + "contains": "Contains", + "does_not_contain": "Does not contain", + "is_present": "Is present", + "is_not_present": "Is not present", + "is_greater_than": "Is greater than", + "is_lesser_than": "Is lesser than", + "days_before": "Is x days before" + }, + "ERRORS": { + "VALUE_REQUIRED": "Value is required" + }, + "ATTRIBUTES": { + "NAME": "Navn", + "EMAIL": "E-post", + "PHONE_NUMBER": "Telefonnummer", + "IDENTIFIER": "Identifier", + "CITY": "City", + "COUNTRY": "Country", + "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_TEXT": "Text", + "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Created At", + "LAST_ACTIVITY": "Last Activity", + "REFERER_LINK": "Referrer link", + "BLOCKED": "Blocked", + "LABELS": "Etiketter" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard Filters", + "ADDITIONAL_FILTERS": "Additional Filters", + "CUSTOM_ATTRIBUTES": "Egendefinerte verdier" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/contentTemplates.json b/app/javascript/dashboard/i18n/locale/no/contentTemplates.json new file mode 100644 index 0000000..dc2f79e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "NO_CONTENT": "Ingen innhold", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Text" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Tilbake", + "SEND_MESSAGE_BUTTON": "Send Message" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/conversation.json b/app/javascript/dashboard/i18n/locale/no/conversation.json new file mode 100644 index 0000000..f282e58 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Velg en samtale fra venstre panel", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", + "404": "Sorry, we cannot find the conversation. Please try again", + "SWITCH_VIEW_LAYOUT": "Switch the layout", + "DASHBOARD_APP_TAB_MESSAGES": "Messages", + "UNVERIFIED_SESSION": "The identity of this user is not verified", + "NO_MESSAGE_1": "Å nei! Ser ut til at det ikke er noen meldinger fra kunder i innboksen din.", + "NO_MESSAGE_2": " for å sende en melding til siden din!", + "NO_INBOX_1": "Tjohei! Det ser ut til at du ikke har lagt til noen innbokser enda.", + "NO_INBOX_2": " for å komme i gang", + "NO_INBOX_AGENT": "Uff da! Det ser ut til at du ikke er en del av innboksen. Kontakt systemansvarlig", + "SEARCH_MESSAGES": "Søk etter meldinger i samtaler", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "to open command menu", + "KEYBOARD_SHORTCUTS": "to view keyboard shortcuts" + }, + "SEARCH": { + "TITLE": "Søk i meldinger", + "RESULT_TITLE": "Search Results", + "LOADING_MESSAGE": "Knuser data...", + "PLACEHOLDER": "Skriv tekst for å søke etter meldinger", + "NO_MATCHING_RESULTS": "No results found." + }, + "UNREAD_MESSAGES": "Uleste meldinger", + "UNREAD_MESSAGE": "Ulest melding", + "CLICK_HERE": "Klikk her", + "LOADING_INBOXES": "Laster innbokser", + "LOADING_CONVERSATIONS": "Laster samtaler", + "CANNOT_REPLY": "Du kan ikke svare på grunn av", + "24_HOURS_WINDOW": "24-timers meldingsrestriksjon", + "48_HOURS_WINDOW": "48-timers meldingsrestriksjon", + "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours", + "NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?", + "ASSIGN_TO_ME": "Assign to me", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24-timers meldingsrestriksjon", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "Du svarer til:", + "REMOVE_SELECTION": "Fjern utvalget", + "DOWNLOAD": "Last ned", + "UNKNOWN_FILE_TYPE": "Unknown File", + "SAVE_CONTACT": "Save Contact", + "NO_CONTENT": "No content to display", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} has shared a contact", + "LOCATION": "{sender} has shared a location", + "FILE": "{sender} has shared a file", + "MEETING": "{sender} has started a meeting" + }, + "UPLOADING_ATTACHMENTS": "Laster opp vedlegg...", + "REPLIED_TO_STORY": "Replied to your story", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", + "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", + "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", + "NO_RESPONSE": "No response", + "RESPONSE": "Response", + "RATING_TITLE": "Rating", + "FEEDBACK_TITLE": "Feedback", + "REPLY_MESSAGE_NOT_FOUND": "Message not available", + "CARD": { + "SHOW_LABELS": "Show labels", + "HIDE_LABELS": "Hide labels" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "Løs", + "REOPEN_ACTION": "Gjenåpne", + "OPEN_ACTION": "Åpne", + "MORE_ACTIONS": "More actions", + "OPEN": "Mer", + "CLOSE": "Lukk", + "DETAILS": "detaljer", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", + "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "missed", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Mark as pending", + "SNOOZE_UNTIL": "Snooze", + "SNOOZE": { + "TITLE": "Snooze until", + "NEXT_REPLY": "Next reply", + "TOMORROW": "Tomorrow", + "NEXT_WEEK": "Next week" + } + }, + "MENTION": { + "AGENTS": "Agenter", + "TEAMS": "Teams" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Snooze until", + "APPLY": "Snooze", + "CANCEL": "Avbryt" + }, + "PRIORITY": { + "TITLE": "Priority", + "OPTIONS": { + "NONE": "None", + "URGENT": "Urgent", + "HIGH": "High", + "MEDIUM": "Medium", + "LOW": "Low" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "None", + "INPUT_PLACEHOLDER": "Select priority", + "NO_RESULTS": "No results found", + "SUCCESSFUL": "Changed priority of conversation id {conversationId} to {priority}", + "FAILED": "Couldn't change priority. Please try again." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Delete conversation #{conversationId}", + "DESCRIPTION": "Are you sure you want to delete this conversation?", + "CONFIRM": "Slett" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Mark as pending", + "RESOLVED": "Mark as resolved", + "MARK_AS_UNREAD": "Mark as unread", + "MARK_AS_READ": "Mark as read", + "REOPEN": "Reopen conversation", + "SNOOZE": { + "TITLE": "Snooze", + "NEXT_REPLY": "Until next reply", + "TOMORROW": "Until tomorrow", + "NEXT_WEEK": "Until next week" + }, + "ASSIGN_AGENT": "Assign agent", + "ASSIGN_LABEL": "Assign label", + "AGENTS_LOADING": "Loading agents...", + "ASSIGN_TEAM": "Assign team", + "DELETE": "Delete conversation", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Conversation id {conversationId} assigned to \"{agentName}\"", + "FAILED": "Couldn't assign agent. Please try again." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Couldn't assign label. Please try again." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Assigned team \"{team}\" to conversation id {conversationId}", + "FAILED": "Couldn't assign team. Please try again." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Message signature", + "ENABLE_SIGN_TOOLTIP": "Enable signature", + "DISABLE_SIGN_TOOLTIP": "Disable signature", + "MSG_INPUT": "Shift + enter for ny linje. Start med '/' for å velge et forhåndslagd svar.", + "PRIVATE_MSG_INPUT": "Skift + enter for ny linje. Dette vil kun være synlig for agenter", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.", + "CLICK_HERE": "Click here to update", + "WHATSAPP_TEMPLATES": "Whatsapp Templates" + }, + "REPLYBOX": { + "REPLY": "Svar", + "PRIVATE_NOTE": "Privat notat", + "SEND": "Send", + "CREATE": "Legg til notat", + "INSERT_READ_MORE": "Read more", + "DISMISS_REPLY": "Dismiss reply", + "REPLYING_TO": "Replying to:", + "TIP_EMOJI_ICON": "Vis emoji-velger", + "TIP_ATTACH_ICON": "Legg ved filer", + "TIP_AUDIORECORDER_ICON": "Record audio", + "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", + "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "DRAG_DROP": "Drag and drop here to attach", + "START_AUDIO_RECORDING": "Start audio recording", + "STOP_AUDIO_RECORDING": "Stop audio recording", + "": "", + "EMAIL_HEAD": { + "TO": "TO", + "ADD_BCC": "Add bcc", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + }, + "BCC": { + "LABEL": "BCC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Undefined variables", + "MESSAGE": "You have {undefinedVariablesCount} undefined variables in your message: {undefinedVariables}. Would you like to send the message anyway?", + "CONFIRM": { + "YES": "Send", + "CANCEL": "Avbryt" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "Privat notat: bare synlig for deg og ditt team", + "CHANGE_STATUS": "Samtalestatus er endret", + "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_AGENT": "Tildelt agent er endret", + "CHANGE_AGENT_FAILED": "Assignee change failed", + "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", + "ASSIGN_LABEL_FAILED": "Label assignment failed", + "CHANGE_TEAM": "Conversation team changed", + "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", + "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", + "MESSAGE_ERROR": "Unable to send this message, please try again later", + "SENT_BY": "Sendt av:", + "BOT": "Bot", + "SEND_FAILED": "Couldn't send message! Try again", + "TRY_AGAIN": "retry", + "ASSIGNMENT": { + "SELECT_AGENT": "Velg agent", + "REMOVE": "Fjern", + "ASSIGN": "Tildel" + }, + "CONTEXT_MENU": { + "COPY": "Kopier", + "REPLY_TO": "Reply to this message", + "DELETE": "Slett", + "CREATE_A_CANNED_RESPONSE": "Add to canned responses", + "TRANSLATE": "Translate", + "COPY_PERMALINK": "Copy link to the message", + "LINK_COPIED": "Message URL copied to the clipboard", + "DELETE_CONFIRMATION": { + "TITLE": "Are you sure you want to delete this message?", + "MESSAGE": "You cannot undo this action", + "DELETE": "Slett", + "CANCEL": "Avbryt" + } + }, + "SIDEBAR": { + "CONTACT": "Contact", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Send kopi av samtale", + "DESC": "Send en kopi av samtalen til den angitte e-postadressen", + "SUBMIT": "Send", + "CANCEL": "Avbryt", + "SEND_EMAIL_SUCCESS": "Kopi av samtalen ble sendt", + "SEND_EMAIL_ERROR": "Det oppstod en feil. Prøv igjen", + "FORM": { + "SEND_TO_CONTACT": "Send kopi av samtalen til kunden", + "SEND_TO_AGENT": "Send kopi av samtalen til den tildelte agenten", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Send kopi av samtalen til en annen e-postadresse", + "EMAIL": { + "PLACEHOLDER": "Skriv inn en e-postadresse", + "ERROR": "Vennligst skriv inn en gyldig e-postadresse" + } + } + }, + "ONBOARDING": { + "TITLE": "Hey 👋, Welcome to {installationName}!", + "DESCRIPTION": "Thanks for signing up. We want you to get the most out of {installationName}. Here are a few things you can do in {installationName} to make the experience delightful.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "Read our latest updates", + "ALL_CONVERSATION": { + "TITLE": "All your conversations in one place", + "DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status.", + "NEW_LINK": "Click here to create an inbox" + }, + "TEAM_MEMBERS": { + "TITLE": "Invite your team members", + "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.", + "NEW_LINK": "Click here to invite a team member" + }, + "LABELS": { + "TITLE": "Organize conversations with labels", + "DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.", + "NEW_LINK": "Click here to create tags" + }, + "CANNED_RESPONSES": { + "TITLE": "Create canned responses", + "DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.", + "NEW_LINK": "Click here to create a canned response" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Assigned Agent", + "SELF_ASSIGN": "Assign to me", + "TEAM_LABEL": "Assigned Team", + "SELECT": { + "PLACEHOLDER": "None" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Contact Details", + "CONVERSATION_ACTIONS": "Conversation Actions", + "CONVERSATION_LABELS": "Samtaleetiketter", + "CONVERSATION_INFO": "Conversation Information", + "CONTACT_NOTES": "Contact Notes", + "CONTACT_ATTRIBUTES": "Contact Attributes", + "PREVIOUS_CONVERSATION": "Tidligere samtaler", + "MACROS": "Macros", + "LINEAR_ISSUES": "Linked Linear Issues", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "Ventende", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Create attribute", + "NO_RECORDS_FOUND": "No attributes found", + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "ADD": { + "TITLE": "Add", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + } + }, + "EMAIL_HEADER": { + "FROM": "From", + "TO": "To", + "BCC": "Bcc", + "CC": "Cc", + "SUBJECT": "Subject", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Participating", + "SIDEBAR_TITLE": "Conversation participants", + "NO_RECORDS_FOUND": "No results found", + "ADD_PARTICIPANTS": "Select participants", + "REMANING_PARTICIPANTS_TEXT": "+{count} others", + "REMANING_PARTICIPANT_TEXT": "+{count} other", + "TOTAL_PARTICIPANTS_TEXT": "{count} people are participating.", + "TOTAL_PARTICIPANT_TEXT": "{count} person is participating.", + "NO_PARTICIPANTS_TEXT": "No one is participating!.", + "WATCH_CONVERSATION": "Join conversation", + "YOU_ARE_WATCHING": "You are participating", + "API": { + "ERROR_MESSAGE": "Could not update, try again!", + "SUCCESS_MESSAGE": "Participants updated!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "View translated content", + "DESC": "You can view the translated content in each langauge.", + "ORIGINAL_CONTENT": "Original Content", + "TRANSLATED_CONTENT": "Translated Content", + "NO_TRANSLATIONS_AVAILABLE": "No translations are available for this content" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/csatMgmt.json b/app/javascript/dashboard/i18n/locale/no/csatMgmt.json new file mode 100644 index 0000000..9e16dc2 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Rate your conversation", + "PLACEHOLDER": "Tell us more...", + "RATINGS": { + "POOR": "😞 Poor", + "FAIR": "😑 Fair", + "AVERAGE": "😐 Average", + "GOOD": "😀 Good", + "EXCELLENT": "😍 Excellent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/customRole.json b/app/javascript/dashboard/i18n/locale/no/customRole.json new file mode 100644 index 0000000..1c596f0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Custom Roles", + "LEARN_MORE": "Learn more about custom roles", + "DESCRIPTION": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "HEADER_BTN_TXT": "Add custom role", + "LOADING": "Fetching custom roles...", + "SEARCH_404": "Det finnes ingen elementer som samsvarer med denne spørringen.", + "PAYWALL": { + "TITLE": "Upgrade to create custom roles", + "AVAILABLE_ON": "The custom role feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The custom role feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Manage custom roles", + "DESC": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "TABLE_HEADER": { + "NAME": "Navn", + "DESCRIPTION": "Beskrivelse", + "PERMISSIONS": "Permissions", + "ACTIONS": "Handlinger" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "Navn", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "Name is required." + }, + "DESCRIPTION": { + "LABEL": "Beskrivelse", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "Description is required." + }, + "PERMISSIONS": { + "LABEL": "Permissions", + "ERROR": "Permissions are required." + }, + "CANCEL_BUTTON_TEXT": "Avbryt", + "API": { + "ERROR_MESSAGE": "Kunne ikke koble til Woot Server, vennligst prøv igjen senere" + } + }, + "ADD": { + "TITLE": "Add custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Send", + "API": { + "SUCCESS_MESSAGE": "Custom role added successfully." + } + }, + "EDIT": { + "BUTTON_TEXT": "Rediger", + "TITLE": "Edit custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Oppdater", + "API": { + "SUCCESS_MESSAGE": "Custom role updated successfully." + } + }, + "DELETE": { + "BUTTON_TEXT": "Slett", + "API": { + "SUCCESS_MESSAGE": "Custom role deleted successfully.", + "ERROR_MESSAGE": "Kunne ikke koble til Woot Server, vennligst prøv igjen senere" + }, + "CONFIRM": { + "TITLE": "Confirm deletion", + "MESSAGE": "Er du sikker på at du vil slette ", + "YES": "Ja, slett ", + "NO": "Nei, behold " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/datePicker.json b/app/javascript/dashboard/i18n/locale/no/datePicker.json new file mode 100644 index 0000000..69f4ec4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Apply", + "CLEAR_BUTTON": "Clear", + "DATE_RANGE_INPUT": { + "START": "Start Date", + "END": "End Date" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "DATE RANGE", + "LAST_7_DAYS": "Siste 7 dager", + "LAST_30_DAYS": "Siste 30 dager", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_RANGE": "Custom date range" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/emoji.json b/app/javascript/dashboard/i18n/locale/no/emoji.json new file mode 100644 index 0000000..08481a5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Search emojis", + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Fjern" + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/general.json b/app/javascript/dashboard/i18n/locale/no/general.json new file mode 100644 index 0000000..f16393c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Showing {firstIndex}-{lastIndex} of {totalCount} items", + "PHONE_INPUT": { + "PLACEHOLDER": "Søk", + "EMPTY_STATE": "Ingen resultater funnet" + }, + "CLOSE": "Lukk", + "BETA": "Beta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/generalSettings.json b/app/javascript/dashboard/i18n/locale/no/generalSettings.json new file mode 100644 index 0000000..aacb3a4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.", + "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.", + "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.", + "NON_ADMIN": "Please contact your administrator to upgrade the plan and continue using all features." + }, + "TITLE": "Kontoinnstillinger", + "SUBMIT": "Oppdater innstillinger", + "BACK": "Tilbake", + "DISMISS": "Dismiss", + "UPDATE": { + "ERROR": "Kunne ikke oppdatere innstillinger, prøv igjen!", + "SUCCESS": "Innstillinger ble oppdatert" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Delete your Account", + "NOTE": "Once you delete your account, all your data will be deleted.", + "BUTTON_TEXT": "Delete Your Account", + "CONFIRM": { + "TITLE": "Delete Account", + "MESSAGE": "Deleting your Account is irreversible. Enter your account name below to confirm you want to permanently delete it.", + "BUTTON_TEXT": "Slett", + "DISMISS": "Avbryt", + "PLACE_HOLDER": "Please type {accountName} to confirm" + }, + "SUCCESS": "Account marked for deletion", + "FAILURE": "Could not delete account, try again!", + "SCHEDULED_DELETION": { + "TITLE": "Account Scheduled for Deletion", + "MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.", + "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.", + "CLEAR_BUTTON": "Cancel Scheduled Deletion" + } + }, + "FORM": { + "ERROR": "Vennligst fiks skjemafeil", + "GENERAL_SECTION": { + "TITLE": "Generelle innstillinger", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "Account ID", + "NOTE": "This ID is required if you are building an API based integration" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.", + "DURATION": { + "LABEL": "Inactivity duration", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Preferences", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "Kontonavn", + "PLACEHOLDER": "Ditt kontonavn", + "ERROR": "Vennligst oppgi et gyldig kontonavn" + }, + "LANGUAGE": { + "LABEL": "Site language", + "PLACEHOLDER": "Ditt kontonavn", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Innkommende e-postdomene", + "PLACEHOLDER": "Domenet hvor du vil motta e-posten", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "Support e-post", + "PLACEHOLDER": "Ditt firmas support e-post", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclude unattended conversations", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a conversation should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "Oppdater", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "Samtalekontinuitet med e-post er aktivert for din konto.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "Du kan motta e-post i ditt egendefinerte domene nå." + } + }, + "UPDATE_CHATWOOT": "En oppdatering av {latestChatwootVersion} for Chatwoot er tilgjengelig. Oppdater din instans.", + "LEARN_MORE": "Learn more", + "PAYMENT_PENDING": "Your payment is pending. Please update your payment information to continue using Chatwoot", + "UPGRADE": "Upgrade to continue using Chatwoot", + "LIMITS_UPGRADE": "Your account has exceeded the usage limits, please upgrade your plan to continue using Chatwoot", + "OPEN_BILLING": "Open billing" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Trykk enter for å velge", + "ENTER_TO_REMOVE": "Trykk enter for å fjerne", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "Velg en", + "SELECT": "Select" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Varsler", + "MARK_ALL_DONE": "Merk alle som ferdige", + "DELETE_TITLE": "deleted", + "UNREAD_NOTIFICATION": { + "TITLE": "Unread Notifications", + "ALL_NOTIFICATIONS": "View all notifications", + "LOADING_UNREAD_MESSAGE": "Loading unread notifications...", + "EMPTY_MESSAGE": "You have no unread notifications" + }, + "LIST": { + "LOADING_MESSAGE": "Laster varsler...", + "404": "Ingen varsler", + "TABLE_HEADER": [ + "Navn", + "Telefonnummer", + "Samtaler", + "Siste kontakt" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "Ny samtale", + "conversation_assignment": "Samtale tildelt", + "assigned_conversation_new_message": "Ny melding", + "participating_conversation_new_message": "Ny melding", + "conversation_mention": "Omtale", + "sla_missed_first_response": "SLA Missed", + "sla_missed_next_response": "SLA Missed", + "sla_missed_resolution": "SLA Missed" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Frakoblet", + "RECONNECTING": "Reconnecting...", + "RECONNECT_SUCCESS": "Reconnected" + }, + "BUTTON": { + "REFRESH": "Refresh" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Search or jump to", + "SECTIONS": { + "GENERAL": "General", + "REPORTS": "Rapporter", + "CONVERSATION": "Conversation", + "BULK_ACTIONS": "Bulk Actions", + "CHANGE_ASSIGNEE": "Change Assignee", + "CHANGE_PRIORITY": "Change Priority", + "CHANGE_TEAM": "Change Team", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "ADD_LABEL": "Add label to the conversation", + "REMOVE_LABEL": "Remove label from the conversation", + "SETTINGS": "Innstillinger", + "AI_ASSIST": "AI Assist", + "APPEARANCE": "Appearance", + "SNOOZE_NOTIFICATION": "Snooze Notification" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview", + "GO_TO_CONVERSATION_REPORTS": "Go to Conversation Reports", + "GO_TO_AGENT_REPORTS": "Go to Agent Reports", + "GO_TO_LABEL_REPORTS": "Go to Label Reports", + "GO_TO_INBOX_REPORTS": "Go to Inbox Reports", + "GO_TO_TEAM_REPORTS": "Go to Team Reports", + "GO_TO_SETTINGS_AGENTS": "Go to Agent Settings", + "GO_TO_SETTINGS_TEAMS": "Go to Team Settings", + "GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings", + "GO_TO_SETTINGS_LABELS": "Go to Label Settings", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings", + "GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings", + "GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings", + "GO_TO_SETTINGS_PROFILE": "Go to Profile Settings", + "GO_TO_NOTIFICATIONS": "Go to Notifications", + "ADD_LABELS_TO_CONVERSATION": "Add label to the conversation", + "ASSIGN_AN_AGENT": "Assign an agent", + "AI_ASSIST": "AI Assist", + "ASSIGN_PRIORITY": "Assign priority", + "ASSIGN_A_TEAM": "Assign a team", + "MUTE_CONVERSATION": "Mute conversation", + "UNMUTE_CONVERSATION": "Unmute conversation", + "REMOVE_LABEL_FROM_CONVERSATION": "Remove label from the conversation", + "REOPEN_CONVERSATION": "Reopen conversation", + "RESOLVE_CONVERSATION": "Resolve conversation", + "SEND_TRANSCRIPT": "Send an email transcript", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "UNTIL_NEXT_REPLY": "Until next reply", + "UNTIL_NEXT_WEEK": "Until next week", + "UNTIL_TOMORROW": "Until tomorrow", + "UNTIL_NEXT_MONTH": "Until next month", + "AN_HOUR_FROM_NOW": "Until an hour from now", + "UNTIL_CUSTOM_TIME": "Custom...", + "CHANGE_APPEARANCE": "Change Appearance", + "LIGHT_MODE": "Light", + "DARK_MODE": "Dark", + "SYSTEM_MODE": "System", + "SNOOZE_NOTIFICATION": "Snooze Notification" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Loading Dashboard App..." + }, + "COMMON": { + "OR": "Or", + "CLICK_HERE": "klikk her" + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/helpCenter.json b/app/javascript/dashboard/i18n/locale/no/helpCenter.json new file mode 100644 index 0000000..ac2901a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Help Center", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "Create Portal" + }, + "HEADER": { + "FILTER": "Filter by", + "SORT": "Sort by", + "LOCALE": "Locale", + "SETTINGS_BUTTON": "Innstillinger", + "NEW_BUTTON": "New Article", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Published", + "DRAFT": "Draft", + "ARCHIVED": "Archived" + }, + "TITLES": { + "ALL_ARTICLES": "All Articles", + "MINE": "My Articles", + "DRAFT": "Draft Articles", + "ARCHIVED": "Archived Articles" + }, + "LOCALE_SELECT": { + "TITLE": "Select locale", + "PLACEHOLDER": "Select locale", + "NO_RESULT": "No locale found", + "SEARCH_PLACEHOLDER": "Search locale" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "All Articles", + "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", + "PREVIEW": "Preview", + "ADD_TRANSLATION": "Add translation", + "OPEN_SIDEBAR": "Open sidebar", + "CLOSE_SIDEBAR": "Close sidebar", + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Last opp bilde", + "UPLOADING": "Laster opp...", + "SUCCESS": "Image uploaded successfully", + "ERROR": "Error while uploading image", + "UN_AUTHORIZED_ERROR": "You are not authorized to upload images", + "ERROR_FILE_SIZE": "Image size should be less than {size}MB", + "ERROR_FILE_FORMAT": "Image format should be jpg, jpeg or png", + "ERROR_FILE_DIMENSIONS": "Image dimensions should be less than 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Article Settings", + "FORM": { + "CATEGORY": { + "LABEL": "Category", + "TITLE": "Select category", + "PLACEHOLDER": "Select category", + "NO_RESULT": "No category found", + "SEARCH_PLACEHOLDER": "Search category" + }, + "AUTHOR": { + "LABEL": "Author", + "TITLE": "Select author", + "PLACEHOLDER": "Select author", + "NO_RESULT": "No authors found", + "SEARCH_PLACEHOLDER": "Search author" + }, + "META_TITLE": { + "LABEL": "Meta title", + "PLACEHOLDER": "Add a meta title" + }, + "META_DESCRIPTION": { + "LABEL": "Meta description", + "PLACEHOLDER": "Add your meta description for better SEO results..." + }, + "META_TAGS": { + "LABEL": "Meta tags", + "PLACEHOLDER": "Add meta tags separated by comma..." + } + }, + "BUTTONS": { + "ARCHIVE": "Archive article", + "DELETE": "Delete article" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Uncategorized", + "SEARCH_RESULTS": "Search results for {query}", + "EMPTY_TEXT": "Search for articles to insert into replies.", + "SEARCH_LOADER": "Searching...", + "INSERT_ARTICLE": "Insert", + "NO_RESULT": "No articles found", + "COPY_LINK": "Copy article link to clipboard", + "OPEN_LINK": "Open article in new tab", + "PREVIEW_LINK": "Preview article" + }, + "PORTAL": { + "HEADER": "Portals", + "DEFAULT": "Default", + "NEW_BUTTON": "New Portal", + "ACTIVE_BADGE": "active", + "CHOOSE_LOCALE_LABEL": "Choose a locale", + "LOADING_MESSAGE": "Loading portals...", + "ARTICLES_LABEL": "articles", + "NO_PORTALS_MESSAGE": "There are no available portals", + "ADD_NEW_LOCALE": "Add a new locale", + "POPOVER": { + "TITLE": "Portals", + "PORTAL_SETTINGS": "Portal settings", + "SUBTITLE": "You have multiple portals and can have different locales for each portal.", + "CANCEL_BUTTON_LABEL": "Avbryt", + "CHOOSE_LOCALE_BUTTON": "Choose Locale" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "articles", + "ADD": "Add locale", + "VISIT": "Visit site", + "SETTINGS": "Innstillinger", + "DELETE": "Slett" + }, + "PORTAL_CONFIG": { + "TITLE": "Portal Configurations", + "ITEMS": { + "NAME": "Navn", + "DOMAIN": "Custom domain", + "SLUG": "Slug", + "TITLE": "Portal title", + "THEME": "Theme color", + "SUB_TEXT": "Portal sub text" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Available locales", + "TABLE": { + "NAME": "Locale name", + "CODE": "Locale code", + "ARTICLE_COUNT": "No. of articles", + "CATEGORIES": "No. of categories", + "SWAP": "Swap", + "DELETE": "Slett", + "DEFAULT_LOCALE": "Default" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Navn", + "DESCRIPTION": "Beskrivelse", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Help center information", + "BODY": "Basic information about portal" + }, + "CUSTOMIZATION": { + "TITLE": "Help center customization", + "BODY": "Customize portal" + }, + "FINISH": { + "TITLE": "Voila! 🎉", + "BODY": "You're all set!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Tilbake", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Create Portal", + "TITLE": "Help center information", + "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Portal customisation", + "TITLE": "Help center customization", + "UPDATE_PORTAL_BUTTON": "Update portal settings" + }, + "FINISH_PAGE": { + "TITLE": "Voila!🎉 You're all set up!", + "MESSAGE": "You can now see this created portal on your all portals page.", + "FINISH": "Go to all portals page" + } + }, + "LOGO": { + "LABEL": "Logo", + "UPLOAD_BUTTON": "Upload logo", + "HELP_TEXT": "This logo will be displayed on the portal header.", + "IMAGE_UPLOAD_SUCCESS": "Logo uploaded successfully", + "IMAGE_UPLOAD_ERROR": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Error while deleting logo" + }, + "NAME": { + "LABEL": "Navn", + "PLACEHOLDER": "Portal name", + "HELP_TEXT": "The name will be used in the public facing portal internally.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug for urls", + "ERROR": "Slug is required" + }, + "DOMAIN": { + "LABEL": "Custom Domain", + "PLACEHOLDER": "Portal custom domain", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}", + "ERROR": "Enter a valid domain URL" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home Page Link", + "PLACEHOLDER": "Portal home page link", + "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}", + "ERROR": "Enter a valid home page URL" + }, + "THEME_COLOR": { + "LABEL": "Portal theme color", + "HELP_TEXT": "This color will show as the theme color for the portal." + }, + "PAGE_TITLE": { + "LABEL": "Page Title", + "PLACEHOLDER": "Portal page title", + "HELP_TEXT": "The page title will be used in the public facing portal.", + "ERROR": "Page title is required" + }, + "HEADER_TEXT": { + "LABEL": "Header Text", + "PLACEHOLDER": "Portal header text", + "HELP_TEXT": "The Portal header text will be used in the public facing portal.", + "ERROR": "Portal header text is required" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", + "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", + "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Avbryt" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Loading articles...", + "404": "No articles matches your search 🔍", + "NO_ARTICLES": "There are no available articles", + "HEADERS": { + "TITLE": "Title", + "CATEGORY": "Category", + "READ_COUNT": "Views", + "STATUS": "Satus", + "LAST_EDITED": "Last edited" + }, + "COLUMNS": { + "BY": "by", + "AUTHOR_NOT_AVAILABLE": "Author is not available" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Loading article...", + "TITLE_PLACEHOLDER": "Article title goes here", + "CONTENT_PLACEHOLDER": "Write your article here", + "API": { + "ERROR": "Error while saving article" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article published successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Error while drafting article", + "SUCCESS": "Article drafted successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Bekreft sletting", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Ja, slett", + "NO": "Nei, behold den" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Search for articles" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Create a category", + "SUB_TITLE": "The category will be used in the public facing portal to categorize articles.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Navn", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Beskrivelse", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Create category", + "CANCEL": "Avbryt" + }, + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Navn", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Beskrivelse", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Avbryt" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Search articles", + "PLACEHOLDER": "Search articles", + "NO_RESULT": "No articles found", + "SEARCHING": "Searching...", + "SEARCH_BUTTON": "Søk", + "INSERT_ARTICLE": "Insert link", + "IFRAME_ERROR": "URL is empty or invalid. Unable to display content.", + "OPEN_ARTICLE_SEARCH": "Insert article from Help Center", + "SUCCESS_ARTICLE_INSERTED": "Article inserted successfully", + "PREVIEW_LINK": "Preview article", + "CANCEL": "Lukk", + "BACK": "Tilbake", + "BACK_RESULTS": "Back to results" + }, + "UPGRADE_PAGE": { + "TITLE": "Help Center", + "DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Upgrade your subscription to enable this feature.", + "SELF_HOSTED_DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Please contact your administrator to enable this feature.", + "BUTTON": { + "LEARN_MORE": "Learn more", + "UPGRADE": "Upgrade" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Multiple portals", + "DESCRIPTION": "Create multiple help center portals for different products using the same account." + }, + "LOCALES": { + "TITLE": "Full support for locales", + "DESCRIPTION": "Localize the portal in your language. We support all locales and allow translations for every article." + }, + "SEO": { + "TITLE": "SEO-friendly design", + "DESCRIPTION": "Customize your meta tags to improve your visibility on search engines with our SEO-friendly pages." + }, + "API": { + "TITLE": "Full API support", + "DESCRIPTION": "Use the portal as a headless CMS with third party front-end frameworks using our APIs." + } + } + }, + "LOADING": "Loading...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} view | {count} views", + "DROPDOWN_MENU": { + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "DELETE": "Slett" + }, + "STATUS": { + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "UNCATEGORISED": "Uncategorised" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "All articles", + "MINE": "Mine", + "DRAFT": "Draft", + "PUBLISHED": "Published", + "ARCHIVED": "Archived" + }, + "CATEGORY": { + "ALL": "All categories" + }, + "LOCALE": { + "ALL": "All locales" + }, + "NEW_ARTICLE": "New article" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Write an article", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "New article" + }, + "MINE": { + "TITLE": "You haven't written any articles here", + "SUBTITLE": "All articles written by you show up here for quick access." + }, + "DRAFT": { + "TITLE": "There are no articles in drafts", + "SUBTITLE": "Draft articles will appear here" + }, + "PUBLISHED": { + "TITLE": "There are no published articles", + "SUBTITLE": "Published articles will appear here" + }, + "ARCHIVED": { + "TITLE": "There are no articles in the archive", + "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages" + }, + "CATEGORY": { + "TITLE": "There are no articles in this category", + "SUBTITLE": "Articles in this category will appear here" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "New category", + "EDIT_CATEGORY": "Edit category", + "CATEGORIES_COUNT": "{n} category | {n} categories", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categories ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "No categories found", + "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + }, + "HEADER": { + "CREATE": "Create category", + "EDIT": "Edit category", + "DESCRIPTION": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale" + }, + "FORM": { + "NAME": { + "LABEL": "Navn", + "PLACEHOLDER": "Category name", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "ERROR": "Slug is required", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Beskrivelse", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + } + }, + "BUTTONS": { + "CREATE": "Opprett", + "EDIT": "Oppdater", + "CANCEL": "Avbryt" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "No locales available | {n} locale | {n} locales", + "NEW_LOCALE_BUTTON_TEXT": "New locale", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles", + "CATEGORIES_COUNT": "{count} category | {count} categories", + "DEFAULT": "Default", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Make default", + "DELETE": "Slett" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Add a new locale", + "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", + "COMBOBOX": { + "PLACEHOLDER": "Select locale..." + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "PREVIEW": "Preview", + "PUBLISH": "Publish", + "DRAFT": "Draft", + "ARCHIVE": "Archive", + "BACK_TO_ARTICLES": "Back to articles" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "More properties", + "UNCATEGORIZED": "Uncategorized", + "EDITOR_PLACEHOLDER": "Write something..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Article properties", + "META_DESCRIPTION": "Meta description", + "META_DESCRIPTION_PLACEHOLDER": "Add meta description", + "META_TITLE": "Meta title", + "META_TITLE_PLACEHOLDER": "Add meta title", + "META_TAGS": "Meta tags", + "META_TAGS_PLACEHOLDER": "Add meta tags" + }, + "API": { + "ERROR": "Error while saving article" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "New portal", + "PORTALS": "Portals", + "CREATE_PORTAL": "Create and manage multiple portals", + "ARTICLES": "articles", + "DOMAIN": "domain", + "PORTAL_NAME": "Portal name" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Create new portal", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "Opprett", + "NAME": { + "LABEL": "Navn", + "PLACEHOLDER": "User Guide | Chatwoot", + "MESSAGE": "Choose an name for your portal.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Slug is required", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logo", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo", + "IMAGE_DELETE_SUCCESS": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Unable to delete logo", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "NAME": { + "LABEL": "Navn", + "PLACEHOLDER": "Portal name", + "ERROR": "Name is required" + }, + "HEADER_TEXT": { + "LABEL": "Header text", + "PLACEHOLDER": "Portal header text" + }, + "PAGE_TITLE": { + "LABEL": "Page title", + "PLACEHOLDER": "Portal page title" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home page link", + "PLACEHOLDER": "Portal home page link", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Live chat widget", + "PLACEHOLDER": "Select live chat widget", + "HELP_TEXT": "Select a live chat widget that will appear on your help center", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Brand color" + }, + "SAVE_CHANGES": "Save changes" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Custom domain", + "LABEL": "Custom domain:", + "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Portal custom domain", + "EDIT_BUTTON": "Rediger", + "ADD_BUTTON": "Add custom domain", + "STATUS": { + "LIVE": "Live", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Add custom domain", + "EDIT_HEADER": "Edit custom domain", + "ADD_CONFIRM_BUTTON_LABEL": "Add domain", + "EDIT_CONFIRM_BUTTON_LABEL": "Update domain", + "LABEL": "Custom domain", + "PLACEHOLDER": "Portal custom domain", + "ERROR": "Custom domain is required", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS configuration", + "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "Send" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Delete {portalName}", + "HEADER": "Delete portal", + "DESCRIPTION": "Permanently delete this portal. This action is irreversible", + "DIALOG": { + "HEADER": "Sure you want to delete {portalName}?", + "DESCRIPTION": "This is a permanent action that cannot be reversed.", + "CONFIRM_BUTTON_LABEL": "Slett" + } + }, + "EDIT_CONFIGURATION": "Edit configuration" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal created successfully", + "ERROR_MESSAGE": "Unable to create portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal updated successfully", + "ERROR_MESSAGE": "Unable to update portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "Laster opp...", + "UPLOAD": "Upload & Process", + "CANCEL": "Avbryt", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Generating...", + "CONFIRM_DELETE": "Are you sure you want to delete {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Completed", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/inbox.json b/app/javascript/dashboard/i18n/locale/no/inbox.json new file mode 100644 index 0000000..762e722 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "My Inbox", + "DISPLAY_DROPDOWN": "Display", + "LOADING": "Fetching notifications", + "404": "There are no active notifications in this group.", + "NO_NOTIFICATIONS": "No notifications", + "NOTE": "Notifications from all subscribed inboxes", + "NO_MESSAGES_AVAILABLE": "Oops! Not able to fetch messages", + "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week" + }, + "ACTION_HEADER": { + "SNOOZE": "Snooze notification", + "DELETE": "Delete notification", + "BACK": "Tilbake" + }, + "TYPES": { + "CONVERSATION_MENTION": "You have been mentioned in a conversation", + "CONVERSATION_CREATION": "New conversation created", + "CONVERSATION_ASSIGNMENT": "A conversation has been assigned to you", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message in a conversation you are participating in", + "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation", + "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation", + "SLA_MISSED_RESOLUTION": "SLA target resolution missed for conversation" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Mentioned", + "CONVERSATION_ASSIGNMENT": "Assigned to you", + "CONVERSATION_CREATION": "New Conversation", + "SLA_MISSED_FIRST_RESPONSE": "SLA breach", + "SLA_MISSED_NEXT_RESPONSE": "SLA breach", + "SLA_MISSED_RESOLUTION": "SLA breach", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message", + "SNOOZED_UNTIL": "Snoozed for {time}", + "SNOOZED_ENDS": "Snooze ended" + }, + "NO_CONTENT": "No content available", + "MENU_ITEM": { + "MARK_AS_READ": "Mark as read", + "MARK_AS_UNREAD": "Mark as unread", + "SNOOZE": "Snooze", + "DELETE": "Slett", + "MARK_ALL_READ": "Mark all as read", + "DELETE_ALL": "Delete all", + "DELETE_ALL_READ": "Delete all read" + }, + "DISPLAY_MENU": { + "SORT": "Sort", + "DISPLAY": "Display :", + "SORT_OPTIONS": { + "NEWEST": "Newest", + "OLDEST": "Oldest", + "PRIORITY": "Priority" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Slumret", + "READ": "Read", + "LABELS": "Etiketter", + "CONVERSATION_ID": "Conversation ID" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notification marked as read", + "MARK_AS_UNREAD": "Notification marked as unread", + "SNOOZE": "Notification snoozed", + "DELETE": "Notification deleted", + "MARK_ALL_READ": "All notifications marked as read", + "DELETE_ALL": "All notifications deleted", + "DELETE_ALL_READ": "All read notifications deleted" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json new file mode 100644 index 0000000..4e6a60a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Innbokser", + "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.", + "LEARN_MORE": "Learn more about inboxes", + "RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.", + "CLICK_TO_RECONNECT": "Click here to reconnect.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "Det er ingen innbokser tilknyttet denne kontoen." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Velg kanal", + "BODY": "Velg tilbyderen du vil integrere med Chatwoot." + }, + "INBOX": { + "TITLE": "Opprett innboks", + "BODY": "Autoriser din konto og opprett en innboks." + }, + "AGENT": { + "TITLE": "Legg til agenter", + "BODY": "Legg agenter til i den opprettede innboksen." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "Klar - ferdig - gå!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Navn på innboks", + "PLACEHOLDER": "Enter your inbox name (eg: Acme Inc)", + "ERROR": "Please enter a valid inbox name" + }, + "WEBSITE_NAME": { + "LABEL": "Nettstedsnavn", + "PLACEHOLDER": "Angi navnet på nettsiden (f. eks.: Acme Inc)" + }, + "FB": { + "HELP": "PS: Ved å logge inn får vi bare tilgang til meldingene til siden. Dine private meldinger vil aldri bli lest av Chatwoot.", + "CHOOSE_PAGE": "Velg side", + "CHOOSE_PLACEHOLDER": "Velg en side fra listen", + "INBOX_NAME": "Navn på innboks", + "ADD_NAME": "Legge til et navn på innboksen din", + "PICK_NAME": "Pick a Name for your Inbox", + "PICK_A_VALUE": "Velg en verdi", + "CREATE_INBOX": "Opprett innboks" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continue with Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile", + "HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ", + "ERROR_MESSAGE": "There was an error connecting to Instagram, please try again", + "ERROR_AUTH": "There was an error connecting to Instagram, please try again", + "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "For å legge til din Twitter-profil som kanal, må du autorisere din Twitter-profil ved å klikke på 'Logg inn med Twitter' ", + "ERROR_MESSAGE": "There was an error connecting to Twitter, please try again", + "TWEETS": { + "ENABLE": "Create conversations from mentioned Tweets" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Nettsidekanal", + "DESC": "Opprett en kanal for nettstedet ditt og begynn å hjelpe kundene dine via nettstedswidgeten.", + "LOADING_MESSAGE": "Oppretter nettstedskanal", + "CHANNEL_AVATAR": { + "LABEL": "Kanal profilbilde" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "Please enter your Webhook URL", + "ERROR": "Vennligst skriv inn en gyldig URL" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Nettstedets domene", + "PLACEHOLDER": "Angi URL på nettsiden (f. eks.: acme.no)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Velkomsttittel", + "PLACEHOLDER": "Tjohei!" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Velkomsthilsen undertittel", + "PLACEHOLDER": "Det skal være lett å kontakte oss. Spør oss om hva som helst, eller del din tilbakemelding." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Kanalhilsen", + "PLACEHOLDER": "Acme AS pleier vanligvis å svare i løpet av noen timer." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Aktiver kanalhilsen", + "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", + "ENABLED": "Aktivert", + "DISABLED": "Deaktivert" + }, + "REPLY_TIME": { + "TITLE": "Angi svartid", + "IN_A_FEW_MINUTES": "Om noen få minutter", + "IN_A_FEW_HOURS": "Om noen få timer", + "IN_A_DAY": "Om en dag", + "HELP_TEXT": "Denne svartiden vil bli vist i live chat widgeten" + }, + "WIDGET_COLOR": { + "LABEL": "Widget farge", + "PLACEHOLDER": "Oppdater fargen brukt i widgeten" + }, + "SUBMIT_BUTTON": "Opprett innboks", + "API": { + "ERROR_MESSAGE": "We were not able to create a website channel, please try again" + } + }, + "TWILIO": { + "TITLE": "Twilio SMS/WhatsApp Channel", + "DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "Konto-SID", + "PLACEHOLDER": "Skriv inn din Twilio konto-SID", + "ERROR": "Dette feltet er obligatorisk" + }, + "API_KEY": { + "USE_API_KEY": "Use API Key Authentication", + "LABEL": "API Key SID", + "PLACEHOLDER": "Please enter your API Key SID", + "ERROR": "Dette feltet er obligatorisk" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Please enter your API Key Secret", + "ERROR": "Dette feltet er obligatorisk" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "Messaging Service SID", + "PLACEHOLDER": "Please enter your Twilio Messaging Service SID", + "ERROR": "Dette feltet er obligatorisk", + "USE_MESSAGING_SERVICE": "Use a Twilio Messaging Service" + }, + "CHANNEL_TYPE": { + "LABEL": "Kanaltype", + "ERROR": "Velg din kanaltype" + }, + "AUTH_TOKEN": { + "LABEL": "Autoriseringstoken", + "PLACEHOLDER": "Vennligst skriv inn din Twilio autoriseringstoken", + "ERROR": "Dette feltet er obligatorisk" + }, + "CHANNEL_NAME": { + "LABEL": "Navn på innboks", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "Dette feltet er obligatorisk" + }, + "PHONE_NUMBER": { + "LABEL": "Telefonnummer", + "PLACEHOLDER": "Vennligst angi telefonnummeret som meldinger skal sendes fra.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "Du må konfigurere callback URL for meldinger med URLen nevnt her." + }, + "SUBMIT_BUTTON": "Opprett Twilio-kanal", + "API": { + "ERROR_MESSAGE": "Vi kunne ikke godkjenne Twilio legitimasjonsopplysningene, vennligst prøv igjen" + } + }, + "SMS": { + "TITLE": "SMS Channel", + "DESC": "Start supporting your customers via SMS.", + "PROVIDERS": { + "LABEL": "API Provider", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandwidth" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the SMS channel" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "Account ID", + "PLACEHOLDER": "Please enter your Bandwidth Account ID", + "ERROR": "Dette feltet er obligatorisk" + }, + "API_KEY": { + "LABEL": "API Key", + "PLACEHOLDER": "Please enter your Bandwidth API Key", + "ERROR": "Dette feltet er obligatorisk" + }, + "API_SECRET": { + "LABEL": "API Secret", + "PLACEHOLDER": "Please enter your Bandwidth API Secret", + "ERROR": "Dette feltet er obligatorisk" + }, + "APPLICATION_ID": { + "LABEL": "Application ID", + "PLACEHOLDER": "Please enter your Bandwidth Application ID", + "ERROR": "Dette feltet er obligatorisk" + }, + "INBOX_NAME": { + "LABEL": "Navn på innboks", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "Dette feltet er obligatorisk" + }, + "PHONE_NUMBER": { + "LABEL": "Telefonnummer", + "PLACEHOLDER": "Vennligst angi telefonnummeret som meldinger skal sendes fra.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "SUBMIT_BUTTON": "Create Bandwidth Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Bandwidth credentials, please try again" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the message callback URL in Bandwidth with the URL mentioned here." + } + } + }, + "WHATSAPP": { + "TITLE": "WhatsApp Channel", + "DESC": "Start supporting your customers via WhatsApp.", + "PROVIDERS": { + "LABEL": "API Provider", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "Navn på innboks", + "PLACEHOLDER": "Please enter an inbox name", + "ERROR": "Dette feltet er obligatorisk" + }, + "PHONE_NUMBER": { + "LABEL": "Telefonnummer", + "PLACEHOLDER": "Vennligst angi telefonnummeret som meldinger skal sendes fra.", + "ERROR": "Please provide a valid phone number that starts with a `+` sign and does not contain any spaces." + }, + "PHONE_NUMBER_ID": { + "LABEL": "Phone number ID", + "PLACEHOLDER": "Please enter the Phone number ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "Business Account ID", + "PLACEHOLDER": "Please enter the Business Account ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook Verify Token", + "PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.", + "ERROR": "Please enter a valid value." + }, + "API_KEY": { + "LABEL": "API key", + "SUBTITLE": "Configure the WhatsApp API key.", + "PLACEHOLDER": "API key", + "ERROR": "Please enter a valid value." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL and the verification token in the Facebook Developer portal with the values shown below.", + "WEBHOOK_URL": "Webhook URL", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook Verification Token" + }, + "SUBMIT_BUTTON": "Create WhatsApp Channel", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "Telefonnummer", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "Konto-SID", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "Autoriseringstoken", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "API Key SID", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "API Kanal", + "DESC": "Integrer med en API-kanal for å støtte dine kunder.", + "CHANNEL_NAME": { + "LABEL": "Kanalnavn", + "PLACEHOLDER": "Vennligst skriv inn et kanalnavn", + "ERROR": "Dette feltet er obligatorisk" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "SUBTITLE": "Configure the URL where you want to receive callbacks on events.", + "PLACEHOLDER": "Webhook URL" + }, + "SUBMIT_BUTTON": "Opprett API-kanal", + "API": { + "ERROR_MESSAGE": "Vi klarte ikke å lagre API-kanalen" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "E-postkanal", + "DESC": "Integrate your email inbox.", + "CHANNEL_NAME": { + "LABEL": "Kanalnavn", + "PLACEHOLDER": "Vennligst skriv inn et kanalnavn", + "ERROR": "Dette feltet er obligatorisk" + }, + "EMAIL": { + "LABEL": "E-post", + "SUBTITLE": "E-post der kundene dine sender deg henvendelser", + "PLACEHOLDER": "E-post" + }, + "SUBMIT_BUTTON": "Opprett e-postkanal", + "API": { + "ERROR_MESSAGE": "Vi kunne ikke lagre e-postkanalen" + }, + "FINISH_MESSAGE": "Begynn å videresende e-post til følgende e-postadresse.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "Klikk her", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "LINE Channel", + "DESC": "Integrate with LINE channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Kanalnavn", + "PLACEHOLDER": "Vennligst skriv inn et kanalnavn", + "ERROR": "Dette feltet er obligatorisk" + }, + "LINE_CHANNEL_ID": { + "LABEL": "LINE Channel ID", + "PLACEHOLDER": "LINE Channel ID" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "LINE Channel Secret", + "PLACEHOLDER": "LINE Channel Secret" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "LINE Channel Token", + "PLACEHOLDER": "LINE Channel Token" + }, + "SUBMIT_BUTTON": "Create LINE Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the LINE channel" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL in LINE application with the URL mentioned here." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Telegram Channel", + "DESC": "Integrate with Telegram channel and start supporting your customers.", + "BOT_TOKEN": { + "LABEL": "Bot Token", + "SUBTITLE": "Configure the bot token you have obtained from Telegram BotFather.", + "PLACEHOLDER": "Bot Token" + }, + "SUBMIT_BUTTON": "Create Telegram Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the telegram channel" + } + }, + "AUTH": { + "TITLE": "Choose a channel", + "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Website", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "E-post", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Agenter", + "DESC": "Her kan du legge til agenter for å administrere innboksen din. Bare de valgte agentene har tilgang til innboksen din. Agenter som ikke er en del av denne innboksen vil ikke kunne se eller svare på meldinger i denne innboksen når de logger inn.Webhooks
Webhooks er HTTP callbacks, som kan defineres for hver konto. De utløses av hendelser som opprettelse av meldinger i Chatwoot. Du kan opprette mer enn en webhook for denne kontoen.
For å opprette en webhook, klikk på Legg til ny webhook. Du kan også fjerne en eksisterende webhook ved å klikke på slett.
Dashboard Apps
Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.
When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.
To add a new dashboard app, click on the button 'Add a new dashboard app'.
", + "DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.", + "LEARN_MORE": "Learn more about Dashboard Apps", + "LIST": { + "404": "There are no dashboard apps configured on this account yet", + "LOADING": "Fetching dashboard apps...", + "TABLE_HEADER": { + "NAME": "Navn", + "ENDPOINT": "Endpoint" + }, + "EDIT_TOOLTIP": "Edit app", + "DELETE_TOOLTIP": "Delete app" + }, + "FORM": { + "TITLE_LABEL": "Navn", + "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", + "TITLE_ERROR": "A name for the dashboard app is required", + "URL_LABEL": "Endpoint", + "URL_PLACEHOLDER": "Enter the endpoint URL where your app is hosted", + "URL_ERROR": "A valid URL is required" + }, + "CREATE": { + "HEADER": "Add a new dashboard app", + "FORM_SUBMIT": "Send", + "FORM_CANCEL": "Avbryt", + "API_SUCCESS": "Dashboard app configured successfully", + "API_ERROR": "We couldn't create an app. Please try again later" + }, + "UPDATE": { + "HEADER": "Edit dashboard app", + "FORM_SUBMIT": "Oppdater", + "FORM_CANCEL": "Avbryt", + "API_SUCCESS": "Dashboard app updated successfully", + "API_ERROR": "We couldn't update the app. Please try again later" + }, + "DELETE": { + "CONFIRM_YES": "Yes, delete it", + "CONFIRM_NO": "No, keep it", + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete the app - {appName}?", + "API_SUCCESS": "Dashboard app deleted successfully", + "API_ERROR": "We couldn't delete the app. Please try again later" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "Fetching linear issues...", + "LOADING_ERROR": "There was an error fetching the linear issues, please try again", + "CREATE": "Opprett", + "LINK": { + "SEARCH": "Search issues", + "SELECT": "Select issue", + "TITLE": "Link", + "EMPTY_LIST": "No linear issues found", + "LOADING": "Loading", + "ERROR": "There was an error fetching the linear issues, please try again", + "LINK_SUCCESS": "Issue linked successfully", + "LINK_ERROR": "There was an error linking the issue, please try again", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "Create Linear issues from conversations, or link existing ones for seamless tracking.", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter title", + "REQUIRED_ERROR": "Title is required" + }, + "DESCRIPTION": { + "LABEL": "Beskrivelse", + "PLACEHOLDER": "Enter description" + }, + "TEAM": { + "LABEL": "Team", + "PLACEHOLDER": "Velg gruppe", + "SEARCH": "Search team", + "REQUIRED_ERROR": "Team is required" + }, + "ASSIGNEE": { + "LABEL": "Agent", + "PLACEHOLDER": "Select assignee", + "SEARCH": "Search assignee" + }, + "PRIORITY": { + "LABEL": "Priority", + "PLACEHOLDER": "Select priority", + "SEARCH": "Search priority" + }, + "LABEL": { + "LABEL": "Label", + "PLACEHOLDER": "Select label", + "SEARCH": "Search label" + }, + "STATUS": { + "LABEL": "Satus", + "PLACEHOLDER": "Select status", + "SEARCH": "Search status" + }, + "PROJECT": { + "LABEL": "Project", + "PLACEHOLDER": "Select project", + "SEARCH": "Search project" + } + }, + "CREATE": "Opprett", + "CANCEL": "Avbryt", + "CREATE_SUCCESS": "Issue created successfully", + "CREATE_ERROR": "There was an error creating the issue, please try again", + "LOADING_TEAM_ERROR": "There was an error fetching the teams, please try again", + "LOADING_TEAM_ENTITIES_ERROR": "There was an error fetching the team entities, please try again" + }, + "ISSUE": { + "STATUS": "Satus", + "PRIORITY": "Priority", + "ASSIGNEE": "Agent", + "LABELS": "Etiketter", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Unlink", + "SUCCESS": "Issue unlinked successfully", + "ERROR": "There was an error unlinking the issue, please try again" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Ja, slett", + "CANCEL": "Avbryt" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Yes, delete", + "CANCEL": "Avbryt" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "Send message...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Captain is thinking", + "YOU": "Du", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "Du", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "Skriv inn meldingen...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "Avbryt", + "CREATE": "Opprett", + "EDIT": "Oppdater" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Ja, slett", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "Oppdater", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "Funksjoner", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "Navn", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "Beskrivelse", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "Funksjoner", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "Innstillinger", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Slett" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "Opprett", + "CANCEL": "Avbryt", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Slett" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "Opprett", + "CANCEL": "Avbryt", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Slett" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "Beskrivelse", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "Opprett", + "CANCEL": "Avbryt" + } + } + }, + "UPDATE": { + "CANCEL": "Avbryt", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Ja, slett", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Yes, delete", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "Beskrivelse", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "None", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "API Key" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "Passord", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Type" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Number", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Required" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "Slett", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Ja, slett", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "Alle" + }, + "STATUS": { + "TITLE": "Satus", + "PENDING": "Ventende", + "APPROVED": "Approved", + "ALL": "Alle" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "Rediger", + "DELETE_RESPONSE": "Slett" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Disconnect" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Ja, slett", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "Innboks", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/no/labelsMgmt.json new file mode 100644 index 0000000..5d27dcd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Etiketter", + "HEADER_BTN_TXT": "Legg til etikett", + "LOADING": "Henter etiketter", + "DESCRIPTION": "Labels help you categorize and prioritize conversations and leads. You can assign a label to a conversation or contact using the side panel.", + "LEARN_MORE": "Learn more about labels", + "SEARCH_404": "Det finnes ingen elementer som samsvarer med denne spørringen", + "LIST": { + "404": "Det er ingen etiketter tilgjengelig i denne kontoen.", + "TITLE": "Administrer etiketter", + "DESC": "Etiketter lar deg gruppere samtaler sammen.", + "TABLE_HEADER": { + "NAME": "Navn", + "DESCRIPTION": "Beskrivelse", + "COLOR": "Farge" + } + }, + "FORM": { + "NAME": { + "LABEL": "Etikettens navn", + "PLACEHOLDER": "Etikettens navn", + "REQUIRED_ERROR": "Label name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + }, + "DESCRIPTION": { + "LABEL": "Beskrivelse", + "PLACEHOLDER": "Etikettbeskrivelse" + }, + "COLOR": { + "LABEL": "Farge" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Vis etikett i sidepanelet" + }, + "EDIT": "Rediger", + "CREATE": "Opprett", + "DELETE": "Slett", + "CANCEL": "Avbryt" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Add label to conversation", + "MULTIPLE_SUGGESTION": "Select this label", + "DESELECT": "Deselect label", + "DISMISS": "Dismiss suggestion" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Dismiss", + "ADD_SELECTED_LABELS": "Add selected labels", + "ADD_SELECTED_LABEL": "Add selected label", + "ADD_ALL_LABELS": "Add all labels", + "SUGGESTED_LABELS": "Suggested labels" + }, + "ADD": { + "TITLE": "Legg til etikett", + "DESC": "Etiketter lar deg gruppere samtaler sammen.", + "API": { + "SUCCESS_MESSAGE": "Etikett lagt til", + "ERROR_MESSAGE": "Det oppstod en feil. Prøv igjen" + } + }, + "EDIT": { + "TITLE": "Rediger etikett", + "API": { + "SUCCESS_MESSAGE": "Etiketten ble oppdatert", + "ERROR_MESSAGE": "Det oppstod en feil. Prøv igjen" + } + }, + "DELETE": { + "BUTTON_TEXT": "Slett", + "API": { + "SUCCESS_MESSAGE": "Etiketten ble slettet", + "ERROR_MESSAGE": "Det oppstod en feil. Prøv igjen" + }, + "CONFIRM": { + "TITLE": "Bekreft sletting", + "MESSAGE": "Er du sikker på at du vil slette ", + "YES": "Ja, slett ", + "NO": "Nei, behold " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/login.json b/app/javascript/dashboard/i18n/locale/no/login.json new file mode 100644 index 0000000..dea863a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Logg inn i Chatwoot", + "EMAIL": { + "LABEL": "E-post", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "Vennligst skriv inn en gyldig e-postadresse" + }, + "PASSWORD": { + "LABEL": "Passord", + "PLACEHOLDER": "Passord" + }, + "API": { + "SUCCESS_MESSAGE": "Login successful", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again.", + "UNAUTH": "Username or password is incorrect. Please try again." + }, + "OAUTH": { + "GOOGLE_LOGIN": "Login with Google", + "BUSINESS_ACCOUNTS_ONLY": "Please use your company email address to login", + "NO_ACCOUNT_FOUND": "We couldn't find an account for your email address." + }, + "FORGOT_PASSWORD": "Glemt passord?", + "CREATE_NEW_ACCOUNT": "Opprett ny konto", + "SUBMIT": "Logg inn", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/macros.json b/app/javascript/dashboard/i18n/locale/no/macros.json new file mode 100644 index 0000000..b5b1e66 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Macros", + "DESCRIPTION": "A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click.", + "LEARN_MORE": "Learn more about macros", + "HEADER_BTN_TXT": "Add a new macro", + "HEADER_BTN_TXT_SAVE": "Save macro", + "LOADING": "Fetching macros", + "ERROR": "Something went wrong. Please try again", + "ORDER_INFO": "Macros will run in the order you add your actions. You can rearrange them by dragging them by the handle beside each node.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Macro name", + "PLACEHOLDER": "Enter a name for your macro", + "ERROR": "Name is required for creating a macro" + }, + "ACTIONS": { + "LABEL": "Handlinger" + } + }, + "API": { + "SUCCESS_MESSAGE": "Macro added successfully", + "ERROR_MESSAGE": "Unable to create macro, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Navn", + "CREATED BY": "Created by", + "LAST_UPDATED_BY": "Last updated by", + "VISIBILITY": "Visibility" + }, + "404": "No macros found" + }, + "DELETE": { + "TOOLTIP": "Delete macro", + "CONFIRM": { + "MESSAGE": "Er du sikker på at du vil slette ", + "YES": "Ja, slett", + "NO": "No" + }, + "API": { + "SUCCESS_MESSAGE": "Macro deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the macro. Please try again later" + } + }, + "EDIT": { + "TOOLTIP": "Edit macro", + "API": { + "SUCCESS_MESSAGE": "Macro updated successfully", + "ERROR_MESSAGE": "Could not update Macro, Please try again later" + } + }, + "EDITOR": { + "START_FLOW": "Start Flow", + "END_FLOW": "End Flow", + "LOADING": "Fetching macro", + "ADD_BTN_TOOLTIP": "Add new action", + "DELETE_BTN_TOOLTIP": "Delete Action", + "VISIBILITY": { + "LABEL": "Macro Visibility", + "GLOBAL": { + "LABEL": "Public", + "DESCRIPTION": "This macro is available publicly for all agents in this account." + }, + "PERSONAL": { + "LABEL": "Private", + "DESCRIPTION": "This macro will be private to you and not be available to others." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Execute", + "PREVIEW": "Preview Macro", + "EXECUTED_SUCCESSFULLY": "Macro executed successfully" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Value is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Assign a Team", + "ASSIGN_AGENT": "Assign an Agent", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Demp samtale", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "CHANGE_PRIORITY": "Change Priority", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "SEND_WEBHOOK_EVENT": "Send Webhook Event" + }, + "PRIORITY_TYPES": { + "NONE": "None", + "LOW": "Low", + "MEDIUM": "Medium", + "HIGH": "High", + "URGENT": "Urgent" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/mfa.json b/app/javascript/dashboard/i18n/locale/no/mfa.json new file mode 100644 index 0000000..b097a46 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "Aktivert", + "DISABLED": "Deaktivert", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Loading...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "Kopier", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "Avbryt", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "Last ned", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "Passord", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "Avbryt", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "Avbryt", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/report.json b/app/javascript/dashboard/i18n/locale/no/report.json new file mode 100644 index 0000000..9dcfa68 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Samtaler", + "LOADING_CHART": "Laster inn diagramdata...", + "NO_ENOUGH_DATA": "Vi har ikke mottatt nok data for å generere rapporten, vennligst prøv igjen senere.", + "DOWNLOAD_AGENT_REPORTS": "Last ned agentrapporter", + "DATA_FETCHING_FAILED": "Failed to fetch data, please try again later.", + "SUMMARY_FETCHING_FAILED": "Failed to fetch summary, please try again later.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Samtaler", + "DESC": "(Totalt )" + }, + "INCOMING_MESSAGES": { + "NAME": "Innkommende meldinger", + "DESC": "(Totalt )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Utgående meldinger", + "DESC": "(Totalt )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Gj. sn. )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Løsningstid", + "DESC": "( Gj. sn. )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Antall løsninger", + "DESC": "(Totalt )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Antall løsninger", + "DESC": "(Totalt )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Handoff Count", + "DESC": "(Totalt )" + }, + "REPLY_TIME": { + "NAME": "Customer waiting time", + "TOOLTIP_TEXT": "Waiting time is {metricValue} (based on {conversationCount} replies)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "Siste 7 dager", + "LAST_14_DAYS": "Siste 14 dager", + "LAST_30_DAYS": "Siste 30 dager", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "Last 3 months", + "LAST_6_MONTHS": "Last 6 months", + "LAST_YEAR": "Last year", + "CUSTOM_DATE_RANGE": "Custom date range" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Group By", + "DURATION_FILTER_LABEL": "Duration", + "GROUPING_OPTIONS": { + "DAY": "Day", + "WEEK": "Week", + "MONTH": "Month", + "YEAR": "Month" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "BUSINESS_HOURS": "Business Hours", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Ingen resultater funnet" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Agents Overview", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "Laster inn diagramdata...", + "NO_ENOUGH_DATA": "Vi har ikke mottatt nok data for å generere rapporten, vennligst prøv igjen senere.", + "DOWNLOAD_AGENT_REPORTS": "Last ned agentrapporter", + "FILTER_DROPDOWN_LABEL": "Velg agent", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Samtaler", + "DESC": "(Totalt )" + }, + "INCOMING_MESSAGES": { + "NAME": "Innkommende meldinger", + "DESC": "(Totalt )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Utgående meldinger", + "DESC": "(Totalt )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Gj. sn. )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Løsningstid", + "DESC": "( Gj. sn. )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Antall løsninger", + "DESC": "(Totalt )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Siste 7 dager" + }, + { + "id": 1, + "name": "Siste 30 dager" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "LABEL_REPORTS": { + "HEADER": "Labels Overview", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "Laster inn diagramdata...", + "NO_ENOUGH_DATA": "Vi har ikke mottatt nok data for å generere rapporten, vennligst prøv igjen senere.", + "DOWNLOAD_LABEL_REPORTS": "Download label reports", + "FILTER_DROPDOWN_LABEL": "Select Label", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Samtaler", + "DESC": "(Totalt )" + }, + "INCOMING_MESSAGES": { + "NAME": "Innkommende meldinger", + "DESC": "(Totalt )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Utgående meldinger", + "DESC": "(Totalt )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Gj. sn. )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Løsningstid", + "DESC": "( Gj. sn. )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Antall løsninger", + "DESC": "(Totalt )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Siste 7 dager" + }, + { + "id": 1, + "name": "Siste 30 dager" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "INBOX_REPORTS": { + "HEADER": "Inbox Overview", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "Laster inn diagramdata...", + "NO_ENOUGH_DATA": "Vi har ikke mottatt nok data for å generere rapporten, vennligst prøv igjen senere.", + "DOWNLOAD_INBOX_REPORTS": "Download inbox reports", + "FILTER_DROPDOWN_LABEL": "Select Inbox", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Samtaler", + "DESC": "(Totalt )" + }, + "INCOMING_MESSAGES": { + "NAME": "Innkommende meldinger", + "DESC": "(Totalt )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Utgående meldinger", + "DESC": "(Totalt )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Gj. sn. )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Løsningstid", + "DESC": "( Gj. sn. )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Antall løsninger", + "DESC": "(Totalt )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Siste 7 dager" + }, + { + "id": 1, + "name": "Siste 30 dager" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "TEAM_REPORTS": { + "HEADER": "Team Overview", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "Laster inn diagramdata...", + "NO_ENOUGH_DATA": "Vi har ikke mottatt nok data for å generere rapporten, vennligst prøv igjen senere.", + "DOWNLOAD_TEAM_REPORTS": "Download team reports", + "FILTER_DROPDOWN_LABEL": "Select Team", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Samtaler", + "DESC": "(Totalt )" + }, + "INCOMING_MESSAGES": { + "NAME": "Innkommende meldinger", + "DESC": "(Totalt )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Utgående meldinger", + "DESC": "(Totalt )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Gj. sn. )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Løsningstid", + "DESC": "( Gj. sn. )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is {metricValue} (based on {conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Antall løsninger", + "DESC": "(Totalt )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Siste 7 dager" + }, + { + "id": 1, + "name": "Siste 30 dager" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "CSAT_REPORTS": { + "HEADER": "CSAT Reports", + "NO_RECORDS": "There are no CSAT survey responses available.", + "DOWNLOAD": "Download CSAT Reports", + "DOWNLOAD_FAILED": "Failed to download CSAT Reports", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Choose Agents" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Contact", + "AGENT_NAME": "Assigned agent", + "RATING": "Rating", + "FEEDBACK_TEXT": "Feedback comment" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Total responses", + "TOOLTIP": "Total number of responses collected" + }, + "SATISFACTION_SCORE": { + "LABEL": "Satisfaction score", + "TOOLTIP": "Total number of positive responses / Total number of responses * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Response rate", + "TOOLTIP": "Total number of responses / Total number of CSAT survey messages sent * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Bot Reports", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "No. of Conversations", + "TOOLTIP": "Total number of conversations handled by the bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total Responses", + "TOOLTIP": "Total number of responses sent by the bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Resolution Rate", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Handoff Rate", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Overview", + "LIVE": "Live", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Open Conversations", + "LOADING_MESSAGE": "Loading conversation metrics...", + "OPEN": "Åpne", + "UNATTENDED": "Unattended", + "UNASSIGNED": "Ikke tildelt", + "PENDING": "Ventende" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Conversation Traffic", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "No conversations", + "CONVERSATION": "{count} conversation", + "CONVERSATIONS": "{count} conversations", + "DOWNLOAD_REPORT": "Download report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Conversations by agents", + "LOADING_MESSAGE": "Loading agent metrics...", + "NO_AGENTS": "There are no conversations by agents", + "TABLE_HEADER": { + "AGENT": "Agent", + "OPEN": "Åpne", + "UNATTENDED": "Unattended", + "STATUS": "Satus" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Gruppe", + "OPEN": "Åpne", + "UNATTENDED": "Udeltatt", + "STATUS": "Satus" + } + }, + "AGENT_STATUS": { + "HEADER": "Agent status", + "ONLINE": "Pålogget", + "BUSY": "Opptatt", + "OFFLINE": "Frakoblet" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Sunday", + "MONDAY": "Monday", + "TUESDAY": "Tuesday", + "WEDNESDAY": "Wednesday", + "THURSDAY": "Thursday", + "FRIDAY": "Friday", + "SATURDAY": "Saturday" + }, + "SLA_REPORTS": { + "HEADER": "SLA Reports", + "NO_RECORDS": "SLA applied conversations are not available.", + "LOADING": "Loading SLA data...", + "DOWNLOAD_SLA_REPORTS": "Download SLA reports", + "DOWNLOAD_FAILED": "Failed to download SLA Reports", + "DROPDOWN": { + "ADD_FIlTER": "Add filter", + "CLEAR_ALL": "Clear all", + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Ingen resultater funnet", + "NO_FILTER": "No filters available", + "SEARCH": "Search filter", + "INPUT_PLACEHOLDER": { + "SLA": "SLA name", + "AGENTS": "Agent navn", + "INBOXES": "Navn på innboks", + "LABELS": "Etikettens navn", + "TEAMS": "Team name" + }, + "SLA": "SLA Policy", + "INBOXES": "Inbox", + "AGENTS": "Agent", + "LABELS": "Label", + "TEAMS": "Team" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentage of SLAs created were completed successfully" + }, + "NO_OF_MISSES": { + "LABEL": "Number of Misses", + "TOOLTIP": "Total SLA misses in a certain period" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Number of Conversations", + "TOOLTIP": "Total number of conversations with SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "Conversation", + "AGENT": "Agent" + }, + "VIEW_DETAILS": "View Details" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Innboks", + "AGENT": "Agent", + "TEAM": "Gruppe", + "LABEL": "Label", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "Antall løsninger", + "CONVERSATIONS": "Antall samtaler" + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/resetPassword.json b/app/javascript/dashboard/i18n/locale/no/resetPassword.json new file mode 100644 index 0000000..72de480 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Reset password", + "DESCRIPTION": "Enter the email address you use to log in to Chatwoot to get the password reset instructions.", + "GO_BACK_TO_LOGIN": "If you want to go back to the login page,", + "EMAIL": { + "LABEL": "E-post", + "PLACEHOLDER": "Skriv inn din e-post.", + "ERROR": "Vennligst skriv inn en gyldig e-postadresse." + }, + "API": { + "SUCCESS_MESSAGE": "Link for å tilbakestille passordet ditt er sendt til e-postadressen din.", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again." + }, + "SUBMIT": "Send" + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/search.json b/app/javascript/dashboard/i18n/locale/no/search.json new file mode 100644 index 0000000..c418d5b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "Kontakter", + "CONVERSATIONS": "Samtaler", + "MESSAGES": "Messages", + "ARTICLES": "Articles" + }, + "SECTION": { + "CONTACTS": "Kontakter", + "CONVERSATIONS": "Samtaler", + "MESSAGES": "Messages", + "ARTICLES": "Articles" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "Searching", + "LOADING_DATA": "Loading", + "EMPTY_STATE": "No {item} found for query '{query}'", + "EMPTY_STATE_FULL": "No results found for query '{query}'", + "PLACEHOLDER_KEYBINDING": "/to focus", + "INPUT_PLACEHOLDER": "Type 3 or more characters to search", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Clear all", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Search by conversation id, email, phone number, messages for better search results. ", + "BOT_LABEL": "Bot", + "READ_MORE": "Read more", + "READ_LESS": "Read less", + "WROTE": "wrote:", + "FROM": "From", + "EMAIL": "E-post", + "EMAIL_SUBJECT": "Subject", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "Siste 7 dager", + "LAST_30_DAYS": "Siste 30 dager", + "LAST_60_DAYS": "Siste 60 dager", + "LAST_90_DAYS": "Siste 90 dager", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "Apply", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Clear filter" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Sender", + "IN": "Inbox", + "AGENTS": "Agenter", + "CONTACTS": "Kontakter", + "INBOXES": "Innbokser", + "NO_AGENTS": "Ingen agenter funnet", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/setNewPassword.json b/app/javascript/dashboard/i18n/locale/no/setNewPassword.json new file mode 100644 index 0000000..24332b6 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Set new password", + "PASSWORD": { + "LABEL": "Passord", + "PLACEHOLDER": "Passord", + "ERROR": "Passordet er for kort." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm password", + "PLACEHOLDER": "Bekreft passord", + "ERROR": "Passordet stemmer ikke." + }, + "API": { + "SUCCESS_MESSAGE": "Passordet ble endret.", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again." + }, + "CAPTCHA": { + "ERROR": "Verification expired. Please solve captcha again." + }, + "SUBMIT": "Send" + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/settings.json b/app/javascript/dashboard/i18n/locale/no/settings.json new file mode 100644 index 0000000..a1c73b8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Brukerinnstillinger", + "TITLE": "Brukerinnstillinger", + "BTN_TEXT": "Oppdater profil", + "DELETE_AVATAR": "Delete Avatar", + "AVATAR_DELETE_SUCCESS": "Avatar has been deleted successfully", + "AVATAR_DELETE_FAILED": "There is an error while deleting avatar, please try again", + "UPDATE_SUCCESS": "Your profile has been updated successfully", + "PASSWORD_UPDATE_SUCCESS": "Ditt passord er endret", + "AFTER_EMAIL_CHANGED": "Din profil har blitt oppdatert, vennligst logg inn igjen ettersom din innloggingsinformasjon er endret", + "FORM": { + "PICTURE": "Profile Picture", + "AVATAR": "Profilbilde", + "ERROR": "Vennligst fiks skjemafeil", + "REMOVE_IMAGE": "Fjern", + "UPLOAD_IMAGE": "Last opp bilde", + "UPDATE_IMAGE": "Oppdater bilde", + "PROFILE_SECTION": { + "TITLE": "Profil", + "NOTE": "Din e-postadresse er din identitet og brukes til å logge inn." + }, + "SEND_MESSAGE": { + "TITLE": "Hotkey to send messages", + "NOTE": "You can select a hotkey (either Enter or Cmd/Ctrl+Enter) based on your preference of writing.", + "UPDATE_SUCCESS": "Your settings have been updated successfully", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Send messages by pressing Enter key instead of clicking the send button." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Send messages by pressing Cmd/Ctrl + enter key instead of clicking the send button." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Default", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Personal message signature", + "NOTE": "Create a unique message signature to appear at the end of every message you send from any inbox. You can also include an inline image, which is supported in live-chat, email, and API inboxes.", + "BTN_TEXT": "Save message signature", + "API_ERROR": "Couldn't save signature! Try again", + "API_SUCCESS": "Signature saved successfully", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save to save the signature", + "IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Message Signature", + "ERROR": "Message Signature cannot be empty", + "PLACEHOLDER": "Insert your personal message signature here." + }, + "PASSWORD_SECTION": { + "TITLE": "Passord", + "NOTE": "Oppdatering av passordet ditt nullstiller logger deg ut på andre enheter.", + "BTN_TEXT": "Change password" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "Tilgangstoken", + "NOTE": "Dette tokenet kan brukes hvis du lager en API-basert integrasjon", + "COPY": "Kopier", + "RESET": "Reset", + "CONFIRM_RESET": "Are you sure?", + "CONFIRM_HINT": "Click again to confirm", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Alerts", + "NOTE": "Enable audio alerts in dashboard for new messages and conversations.", + "PLAY": "Play sound", + "ALERT_TYPES": { + "NONE": "None", + "MINE": "Assigned", + "ALL": "Alle", + "ASSIGNED": "My assigned conversations", + "UNASSIGNED": "Unassigned conversations", + "NOTME": "Open conversations assigned to others" + }, + "ALERT_COMBINATIONS": { + "NONE": "You haven't selected any options, you won't receive any audio alerts.", + "ASSIGNED": "You'll receive alerts for conversations assigned to you.", + "UNASSIGNED": "You'll receive alerts for any unassigned conversations.", + "NOTME": "You'll receive alerts for conversations assigned to others.", + "ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.", + "ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.", + "NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.", + "ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations." + }, + "ALERT_TYPE": { + "TITLE": "Alert events for conversations", + "NONE": "None", + "ASSIGNED": "Assigned Conversations", + "ALL_CONVERSATIONS": "All Conversations" + }, + "DEFAULT_TONE": { + "TITLE": "Alert tone:" + }, + "CONDITIONS": { + "TITLE": "Alert conditions:", + "CONDITION_ONE": "Send audio alerts only if the browser window is not active", + "CONDITION_TWO": "Send alerts every 30s until all the assigned conversations are read" + }, + "SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.", + "READ_MORE": "Read more" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "E-postvarsler", + "NOTE": "Oppdater varslingsinnstillingene for e-post her", + "CONVERSATION_ASSIGNMENT": "Send e-postvarsler når en samtale er tildelt meg", + "CONVERSATION_CREATION": "Send e-postvarsler når en ny samtale opprettes", + "CONVERSATION_MENTION": "Send varsel på e-post når du er nevnt i en samtale", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send e-postvarsler når en ny melding opprettes i en tilordnet samtale", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "Send email notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send email notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send email notifications when a conversation misses resolution SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Notification preferences", + "TYPE_TITLE": "Notification type", + "EMAIL": "E-post", + "PUSH": "Push notification", + "TYPES": { + "CONVERSATION_CREATED": "A new conversation is created", + "CONVERSATION_ASSIGNED": "A conversation is assigned to you", + "CONVERSATION_MENTION": "You are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "A new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "A new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "A conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "A conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "A conversation misses resolution SLA" + }, + "BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them" + }, + "API": { + "UPDATE_SUCCESS": "Dine varslingsinnstillinger er oppdatert", + "UPDATE_ERROR": "Det oppstod en feil under oppdatering av innstillingene. Prøv igjen" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Pushvarsler", + "NOTE": "Oppdater dine push-varslingsinnstillinger her", + "CONVERSATION_ASSIGNMENT": "Send push-varsler når en samtale er tildelt meg", + "CONVERSATION_CREATION": "Send push-varsler når en ny samtale opprettes", + "CONVERSATION_MENTION": "Send pushvarslinger når du er nevnt i en samtale", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send push-varsler når en ny melding opprettes i en tilordnet samtale", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in a participating conversation", + "HAS_ENABLED_PUSH": "Du har aktivert push-varsler for denne nettleseren.", + "REQUEST_PUSH": "Aktiver push-varsler", + "SLA_MISSED_FIRST_RESPONSE": "Send push notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send push notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send push notifications when a conversation misses resolution SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "Profilbilde" + }, + "NAME": { + "LABEL": "Ditt fulle navn", + "ERROR": "Vennligst oppgi et gyldig navn", + "PLACEHOLDER": "Skriv inn fullt navn" + }, + "DISPLAY_NAME": { + "LABEL": "Visningsnavn", + "ERROR": "Vennligst oppgi et gyldig visningsnavn", + "PLACEHOLDER": "Skriv inn et visningsnavn, dette vil bli vist i samtaler" + }, + "AVAILABILITY": { + "LABEL": "Tilgjengelighet", + "STATUS": { + "ONLINE": "Pålogget", + "BUSY": "Opptatt", + "OFFLINE": "Frakoblet" + }, + "SET_AVAILABILITY_SUCCESS": "Availability has been set successfully", + "SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again", + "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user" + }, + "EMAIL": { + "LABEL": "Din e-postadresse", + "ERROR": "Vennligst skriv inn en gyldig e-postadresse", + "PLACEHOLDER": "Vennligst skriv inn din e-postadresse, dette vises i samtaler" + }, + "CURRENT_PASSWORD": { + "LABEL": "Current password", + "ERROR": "Please enter the current password", + "PLACEHOLDER": "Please enter the current password" + }, + "PASSWORD": { + "LABEL": "New password", + "ERROR": "Skriv inn et passord som er 6 eller flere tegn langt", + "PLACEHOLDER": "Vennligst angi et nytt passord" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Bekreft nytt passord", + "ERROR": "Det bekreftende passordet burde samsvare med passordet", + "PLACEHOLDER": "Please re-enter your new password" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Endre", + "CHANGE_ACCOUNTS": "Switch account", + "SWITCH_ACCOUNT": "Switch account", + "CONTACT_SUPPORT": "Contact support", + "SELECTOR_SUBTITLE": "Velg en konto fra følgende liste", + "PROFILE_SETTINGS": "Profile settings", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Keyboard shortcuts", + "APPEARANCE": "Change appearance", + "SUPER_ADMIN_CONSOLE": "SuperAdmin console", + "DOCS": "Read documentation", + "CHANGELOG": "Changelog", + "LOGOUT": "Log out" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "dager gjenværende av prøveperioden.", + "TRAIL_BUTTON": "Kjøp nå", + "DELETED_USER": "Deleted User", + "EMAIL_VERIFICATION_PENDING": "It seems that you haven't verified your email address yet. Please check your inbox for the verification email.", + "RESEND_VERIFICATION_MAIL": "Resend verification email", + "EMAIL_VERIFICATION_SENT": "Verification email has been sent. Please check your inbox.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Account Suspended", + "MESSAGE": "Your account is suspended. Please reach out to the support team for more information." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Log out" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Kopier", + "CODEPEN": "Open in CodePen", + "COPY_SUCCESSFUL": "Koden er kopiert til utklippstavlen" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Show More", + "SHOW_LESS": "Show Less" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "Last ned", + "UPLOADING": "Laster opp...", + "INSTAGRAM_STORY_UNAVAILABLE": "Denne historien er ikke lenger tilgjengelig." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "See on map" + }, + "FORM_BUBBLE": { + "SUBMIT": "Send" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "This image is no longer available.", + "LOADING_FAILED": "Loading failed" + } + }, + "CONFIRM_EMAIL": "Verifiserer...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Legg til innboks" + } + }, + "SIDEBAR": { + "NO_ITEMS": "No items", + "CURRENTLY_VIEWING_ACCOUNT": "Currently viewing:", + "SWITCH": "Switch", + "INBOX_VIEW": "Inbox View", + "CONVERSATIONS": "Samtaler", + "INBOX": "My Inbox", + "ALL_CONVERSATIONS": "All Conversations", + "MENTIONED_CONVERSATIONS": "Omtale", + "PARTICIPATING_CONVERSATIONS": "Participating", + "UNATTENDED_CONVERSATIONS": "Unattended", + "REPORTS": "Rapporter", + "SETTINGS": "Innstillinger", + "CONTACTS": "Kontakter", + "ACTIVE": "Active", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistants", + "CAPTAIN_DOCUMENTS": "Documents", + "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_TOOLS": "Tools", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "Innbokser", + "CAPTAIN_SETTINGS": "Innstillinger", + "HOME": "Hjem", + "AGENTS": "Agenter", + "AGENT_BOTS": "Bots", + "AUDIT_LOGS": "Audit Logs", + "INBOXES": "Innbokser", + "NOTIFICATIONS": "Varsler", + "CANNED_RESPONSES": "Forhåndslagde svar", + "INTEGRATIONS": "Integrasjoner", + "PROFILE_SETTINGS": "Brukerinnstillinger", + "ACCOUNT_SETTINGS": "Kontoinnstillinger", + "APPLICATIONS": "Applications", + "LABELS": "Etiketter", + "CUSTOM_ATTRIBUTES": "Egendefinerte verdier", + "AUTOMATION": "Automation", + "MACROS": "Macros", + "TEAMS": "Teams", + "BILLING": "Billing", + "CUSTOM_VIEWS_FOLDER": "Folders", + "CUSTOM_VIEWS_SEGMENTS": "Segments", + "ALL_CONTACTS": "All Contacts", + "TAGGED_WITH": "Tagged with", + "NEW_LABEL": "New label", + "NEW_TEAM": "New team", + "NEW_INBOX": "New inbox", + "REPORTS_CONVERSATION": "Samtaler", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Campaigns", + "ONGOING": "Ongoing", + "ONE_OFF": "One off", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "Bot", + "REPORTS_AGENT": "Agenter", + "REPORTS_LABEL": "Etiketter", + "REPORTS_INBOX": "Inbox", + "REPORTS_TEAM": "Team", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "Set yourself as", + "SET_YOUR_AVAILABILITY": "Set your availability", + "SLA": "SLA", + "CUSTOM_ROLES": "Custom Roles", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Overview", + "REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages", + "HELP_CENTER": { + "TITLE": "Help Center", + "ARTICLES": "Articles", + "CATEGORIES": "Categories", + "LOCALES": "Locales", + "SETTINGS": "Innstillinger" + }, + "CHANNELS": "Kanaler", + "SET_AUTO_OFFLINE": { + "TEXT": "Mark offline automatically", + "INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard.", + "INFO_SHORT": "Automatically mark offline when you aren't using the app." + }, + "DOCS": "Read docs", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "Billing", + "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "CURRENT_PLAN": { + "TITLE": "Current Plan", + "PLAN_NOTE": "You are currently subscribed to the **{plan}** plan with **{quantity}** licenses", + "SEAT_COUNT": "Number of seats", + "RENEWS_ON": "Renews on" + }, + "VIEW_PRICING": "View Pricing", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Manage your subscription", + "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", + "BUTTON_TXT": "Go to the billing portal" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Manage usage and credits for Captain AI.", + "BUTTON_TXT": "Buy more credits", + "DOCUMENTS": "Documents", + "RESPONSES": "Responses", + "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more.", + "REFRESH_CREDITS": "Refresh" + }, + "CHAT_WITH_US": { + "TITLE": "Need help?", + "DESCRIPTION": "Do you face any issues in billing? We are here to help.", + "BUTTON_TXT": "Chat med oss" + }, + "NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again.", + "TOPUP": { + "BUY_CREDITS": "Buy more credits", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Note:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "Avbryt", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Go Back", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "Koden er kopiert til utklippstavlen", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.", + "NEW_ACCOUNT": "Ny konto", + "SELECTOR_SUBTITLE": "Opprett ny konto", + "API": { + "SUCCESS_MESSAGE": "Kontoen ble opprettet", + "EXIST_MESSAGE": "Kontoen eksisterer allerede", + "ERROR_MESSAGE": "Kunne ikke koble til Woot Server, vennligst prøv igjen senere" + }, + "FORM": { + "NAME": { + "LABEL": "Firmaets navn", + "PLACEHOLDER": "Ola's bedrift" + }, + "SUBMIT": "Send", + "CANCEL": "Avbryt" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "View all shortcuts", + "TITLE": { + "OPEN_CONVERSATION": "Open conversation", + "RESOLVE_AND_NEXT": "Resolve and move to next", + "NAVIGATE_DROPDOWN": "Navigate dropdown items", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "ADD_ATTACHMENT": "Add Attachment", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "TOGGLE_SIDEBAR": "Toggle Sidebar", + "GO_TO_REPORTS_SIDEBAR": "Go to Reports sidebar", + "MOVE_TO_NEXT_TAB": "Move to next tab in conversation list", + "GO_TO_SETTINGS": "Go to Settings", + "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", + "SWITCH_TO_REPLY": "Switch to Reply", + "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "Priority", + "ACTIVE": "Active", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "Rediger" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Avbryt" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Beskrivelse:", + "PLACEHOLDER": "Enter description" + }, + "STATUS": { + "LABEL": "Satus:", + "PLACEHOLDER": "Select status", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "Add" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "Rediger" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Avbryt" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Beskrivelse:", + "PLACEHOLDER": "Enter description" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "Add" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "Slett", + "CANCEL_BUTTON_LABEL": "Avbryt" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/signup.json b/app/javascript/dashboard/i18n/locale/no/signup.json new file mode 100644 index 0000000..4e941c3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Create an account", + "TITLE": "Registrer", + "TESTIMONIAL_HEADER": "All it takes is one step to move forward", + "TESTIMONIAL_CONTENT": "You're one step away from engaging your customers, retaining them and finding new ones.", + "TERMS_ACCEPT": "By creating an account, you agree to our T & C and Privacy policy", + "OAUTH": { + "GOOGLE_SIGNUP": "Sign up with Google" + }, + "COMPANY_NAME": { + "LABEL": "Company name", + "PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises", + "ERROR": "Company name is too short" + }, + "FULL_NAME": { + "LABEL": "Fullt navn", + "PLACEHOLDER": "Skriv inn fullt navn. F. eks: Ola Nordmann", + "ERROR": "Kontonavnet er for kort" + }, + "EMAIL": { + "LABEL": "Bedriftse-postadresse", + "PLACEHOLDER": "Enter your work email address. E.g., bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Please enter a valid work email address" + }, + "PASSWORD": { + "LABEL": "Passord", + "PLACEHOLDER": "Passord", + "ERROR": "Passordet er for kort", + "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Bekreft passord", + "PLACEHOLDER": "Bekreft passord", + "ERROR": "Passordet stemmer ikke." + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "Kunne ikke koble til Woot Server, vennligst prøv igjen senere" + }, + "SUBMIT": "Create account", + "HAVE_AN_ACCOUNT": "Har du allerede en konto?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/sla.json b/app/javascript/dashboard/i18n/locale/no/sla.json new file mode 100644 index 0000000..eb912c4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Add SLA", + "ADD_ACTION_LONG": "Create a new SLA Policy", + "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", + "LEARN_MORE": "Learn more about SLA", + "LOADING": "Fetching SLAs", + "PAYWALL": { + "TITLE": "Upgrade to create SLAs", + "AVAILABLE_ON": "The SLA feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SLA feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no SLAs available in this account.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Issues raised by enterprise customers, that require immediate attention.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Issues raised by enterprise customers, that needs to be acknowledged quickly." + }, + "BUSINESS_HOURS_ON": "Business hours on", + "BUSINESS_HOURS_OFF": "Business hours off", + "RESPONSE_TYPES": { + "FRT": "First response time threshold", + "NRT": "Next response time threshold", + "RT": "Resolution time threshold", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA Name", + "PLACEHOLDER": "SLA Name", + "REQUIRED_ERROR": "SLA name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + }, + "DESCRIPTION": { + "LABEL": "Beskrivelse", + "PLACEHOLDER": "SLA for premium customers" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "First Response Time", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Next Response Time", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "Løsningstid", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Business Hours", + "PLACEHOLDER": "Only during business hours" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Threshold should be a number and greater than zero" + }, + "EDIT": "Rediger", + "CREATE": "Opprett", + "DELETE": "Slett", + "CANCEL": "Avbryt" + }, + "ADD": { + "TITLE": "Add SLA", + "DESC": "Friendly promises for great service!", + "API": { + "SUCCESS_MESSAGE": "SLA added successfully", + "ERROR_MESSAGE": "Det oppstod en feil. Prøv igjen" + } + }, + "DELETE": { + "TITLE": "Delete SLA", + "API": { + "SUCCESS_MESSAGE": "SLA deleted successfully", + "ERROR_MESSAGE": "Det oppstod en feil. Prøv igjen" + }, + "CONFIRM": { + "TITLE": "Bekreft sletting", + "MESSAGE": "Are you sure you want to delete ", + "YES": "Ja, slett ", + "NO": "Nei, behold " + } + }, + "EVENTS": { + "TITLE": "SLA Misses", + "FRT": "Første svartid", + "NRT": "Next response time", + "RT": "Resolution time", + "SHOW_MORE": "{count} more", + "HIDE": "Hide {count} rows" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/teamsSettings.json b/app/javascript/dashboard/i18n/locale/no/teamsSettings.json new file mode 100644 index 0000000..c9d03a9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Create new team", + "HEADER": "Teams", + "LOADING": "Fetching teams", + "DESCRIPTION": "Teams allow you to organize agents into groups based on their responsibilities. An agent can belong to multiple teams. When working collaboratively, you can assign conversations to specific teams.", + "LEARN_MORE": "Learn more about teams", + "LIST": { + "404": "There are no teams created on this account.", + "EDIT_TEAM": "Edit team", + "NONE": "None" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Create a new team", + "DESC": "Add a title and description to your new team." + }, + "AGENTS": { + "BUTTON_TEXT": "Add agents to team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation." + }, + "WIZARD_CREATE": { + "TITLE": "Opprett", + "BODY": "Create a new team of agents." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "Legg til agenter", + "BODY": "Add agents to the team." + }, + "WIZARD_FINISH": { + "TITLE": "Finish", + "BODY": "Klar - ferdig - gå!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Edit your team details", + "DESC": "Edit title and description to your team.", + "BUTTON_TEXT": "Update team" + }, + "AGENTS": { + "BUTTON_TEXT": "Update agents in team", + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. All the added agents will be notified when a conversation is assigned to this team." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Team details", + "ROUTE": "settings_teams_edit", + "BODY": "Change name, description and other details." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Edit Agents", + "ROUTE": "settings_teams_edit_members", + "BODY": "Edit agents in your team." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Finish", + "ROUTE": "settings_teams_edit_finish", + "BODY": "Klar - ferdig - gå!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Couldn't save the team details. Try again." + }, + "AGENTS": { + "AGENT": "AGENT", + "EMAIL": "E-POST", + "BUTTON_TEXT": "Legg til agenter", + "ADD_AGENTS": "Adding Agents to your Team...", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected." + }, + "ADD": { + "TITLE": "Add agents to team - {teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation.", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "{selected} out of {total} agents selected.", + "BUTTON_TEXT": "Legg til agenter", + "AGENT_VALIDATION_ERROR": "Select at least one agent." + }, + "FINISH": { + "TITLE": "Your team is ready!", + "MESSAGE": "You can now collaborate as a team on conversations. Happy supporting ", + "BUTTON_TEXT": "Finish" + }, + "DELETE": { + "BUTTON_TEXT": "Slett", + "API": { + "SUCCESS_MESSAGE": "Team deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the team. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure you want to delete the team?", + "PLACE_HOLDER": "Please type {teamName} to confirm", + "MESSAGE": "Deleting the team will remove the team assignment from the conversations assigned to this team.", + "YES": "Slett ", + "NO": "Avbryt" + } + }, + "SETTINGS": "Innstillinger", + "FORM": { + "UPDATE": "Update team", + "CREATE": "Create team", + "NAME": { + "LABEL": "Team name", + "PLACEHOLDER": "Example: Sales, Customer Support" + }, + "DESCRIPTION": { + "LABEL": "Team Description", + "PLACEHOLDER": "Short description about this team." + }, + "AUTO_ASSIGN": { + "LABEL": "Allow auto assign for this team." + }, + "SUBMIT_CREATE": "Create team" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/webhooks.json b/app/javascript/dashboard/i18n/locale/no/webhooks.json new file mode 100644 index 0000000..a800bb5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Webhook-innstillinger" + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/no/whatsappTemplates.json new file mode 100644 index 0000000..cf28312 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Whatsapp Templates", + "SUBTITLE": "Select the whatsapp template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Category", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "LANGUAGE": "Language", + "CATEGORY": "Category", + "VARIABLE_PLACEHOLDER": "Enter {variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/no/yearInReview.json b/app/javascript/dashboard/i18n/locale/no/yearInReview.json new file mode 100644 index 0000000..22ec102 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/no/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "Lukk", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "samtaler", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "Last ned", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "Share conversation" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/advancedFilters.json b/app/javascript/dashboard/i18n/locale/pl/advancedFilters.json new file mode 100644 index 0000000..c893c14 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Filtruj konwersacje", + "SUBTITLE": "Dodaj swoje filtry poniżej i kliknij 'Zastosuj filtry', aby przefiltrować nieporządek w rozmowach.", + "EDIT_CUSTOM_FILTER": "Edytuj folder", + "CUSTOM_VIEWS_SUBTITLE": "Dodaj lub usuń filtry i zaktualizuj swój folder.", + "ADD_NEW_FILTER": "Dodaj filtr", + "FILTER_DELETE_ERROR": "Ups, wygląda na to, że nic nie możemy zapisać! Proszę dodać co najmniej jeden filtr, aby go zapisać.", + "SUBMIT_BUTTON_LABEL": "Zastosuj filtry", + "UPDATE_BUTTON_LABEL": "Zaktualizuj folder", + "CANCEL_BUTTON_LABEL": "Anuluj", + "CLEAR_BUTTON_LABEL": "Wyczyść filtry", + "FOLDER_LABEL": "Nazwa Folderu", + "FOLDER_QUERY_LABEL": "Zapytanie do Folderu", + "EMPTY_VALUE_ERROR": "Wartość jest wymagana.", + "TOOLTIP_LABEL": "Filtruj konwersacje", + "QUERY_DROPDOWN_LABELS": { + "AND": "i", + "OR": "lub" + }, + "INPUT_PLACEHOLDER": "Enter value", + "OPERATOR_LABELS": { + "equal_to": "Równe", + "not_equal_to": "Nierówne", + "does_not_contain": "Nie zawiera", + "is_present": "Jest obecny", + "is_not_present": "Nie jest obecny", + "is_greater_than": "Jest większy niż", + "is_less_than": "Jest mniejszy niż", + "days_before": "Jest x dni przed", + "starts_with": "Zaczyna się od", + "equalTo": "Równe", + "notEqualTo": "Nierówne", + "contains": "Zawiera", + "doesNotContain": "Nie zawiera", + "isPresent": "Jest obecny", + "isNotPresent": "Nie jest obecny", + "isGreaterThan": "Jest większy niż", + "isLessThan": "Jest mniejsze niż", + "daysBefore": "Jest x dni przed", + "startsWith": "Zaczyna się od" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "Prawda", + "FALSE": "Fałsz" + }, + "ATTRIBUTES": { + "STATUS": "Status", + "ASSIGNEE_NAME": "Imię przydzielonej osoby", + "INBOX_NAME": "Nazwa skrzynki odbiorczej", + "TEAM_NAME": "Nazwa zespołu", + "CONVERSATION_IDENTIFIER": "Identyfikator konwersacji", + "CAMPAIGN_NAME": "Nazwa kampanii", + "LABELS": "Etykiety", + "BROWSER_LANGUAGE": "Język przeglądarki", + "PRIORITY": "Priorytet", + "COUNTRY_NAME": "Nazwa kraju", + "REFERER_LINK": "Link odsyłający", + "CUSTOM_ATTRIBUTE_LIST": "Lista", + "CUSTOM_ATTRIBUTE_TEXT": "Tekst", + "CUSTOM_ATTRIBUTE_NUMBER": "Numer", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Pole Wyboru", + "CREATED_AT": "Utworzono", + "LAST_ACTIVITY": "Ostatnia aktywność" + }, + "ERRORS": { + "VALUE_REQUIRED": "Wartość jest wymagana", + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Wartość musi zawierać się w przedziale od 1 do 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standardowe filtry", + "ADDITIONAL_FILTERS": "Dodatkowe filtry", + "CUSTOM_ATTRIBUTES": "Atrybuty niestandardowe" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Czy chcesz zapisać ten filtr?", + "LABEL": "Nazwij ten filtr", + "PLACEHOLDER": "Nazwij swój filtr, aby móc do niego później się odwołać.", + "ERROR_MESSAGE": "Nazwa jest wymagana.", + "SAVE_BUTTON": "Zapisz filtr", + "CANCEL_BUTTON": "Anuluj", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder został pomyślnie utworzony.", + "ERROR_MESSAGE": "Wystąpił błąd podczas tworzenia folderu." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment został pomyślnie utworzony.", + "ERROR_MESSAGE": "Wystąpił błąd podczas tworzenia segmentu." + } + }, + "EDIT": { + "EDIT_BUTTON": "Edytuj folder" + }, + "DELETE": { + "DELETE_BUTTON": "Usuń filtr", + "MODAL": { + "CONFIRM": { + "TITLE": "Potwierdzenie usunięcia", + "MESSAGE": "Czy na pewno chcesz usunąć ten filtr ", + "YES": "Tak, usuń", + "NO": "Nie, zostaw" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder został pomyślnie usunięty.", + "ERROR_MESSAGE": "Wystąpił błąd podczas usuwania folderu." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment został pomyślnie usunięty.", + "ERROR_MESSAGE": "Wystąpił błąd podczas usuwania segmentu." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/agentBots.json b/app/javascript/dashboard/i18n/locale/pl/agentBots.json new file mode 100644 index 0000000..6060d7e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Boty", + "LOADING_EDITOR": "Ładowanie edytora...", + "DESCRIPTION": "Boty agentów są jak najbardziej fantastyczni członkowie Twojego zespołu. Mogą zajmować się drobnymi sprawami, dzięki czemu Ty możesz skupić się na tym, co naprawdę ważne. Wypróbuj je! Możesz zarządzać swoimi botami z tej strony lub tworzyć nowe za pomocą przycisku 'Dodaj bota'.", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "System bot", + "GLOBAL_BOT_BADGE": "System", + "AVATAR": { + "SUCCESS_DELETE": "Bot avatar deleted successfully", + "ERROR_DELETE": "Error deleting bot avatar, please try again" + }, + "BOT_CONFIGURATION": { + "TITLE": "Wybierz bota agenta", + "DESC": "Przypisz Bota Agenta do swojej skrzynki odbiorczej. Mogą oni obsługiwać wstępne rozmowy i przekazywać je do żywego agenta, gdy jest to konieczne.", + "SUBMIT": "Aktualizuj", + "DISCONNECT": "Odłącz bota", + "SUCCESS_MESSAGE": "Pomyślnie zaktualizowano bota agenta.", + "DISCONNECTED_SUCCESS_MESSAGE": "Pomyślnie odłączono bota agenta.", + "ERROR_MESSAGE": "Nie udało się zaktualizować bota agenta. Proszę spróbować ponownie.", + "DISCONNECTED_ERROR_MESSAGE": "Nie udało się odłączyć bota agenta. Proszę spróbować ponownie.", + "SELECT_PLACEHOLDER": "Wybierz bota" + }, + "ADD": { + "TITLE": "Add Bot", + "CANCEL_BUTTON_TEXT": "Anuluj", + "API": { + "SUCCESS_MESSAGE": "Bot dodany pomyślnie.", + "ERROR_MESSAGE": "Nie udało się dodać bota. Proszę spróbować później." + } + }, + "LIST": { + "404": "Nie znaleziono botów. Możesz utworzyć bota klikając przycisk 'Dodaj bota'.", + "LOADING": "Pobieranie botów...", + "TABLE_HEADER": { + "DETAILS": "Szczegóły bota", + "URL": "Adres URL webhooka" + } + }, + "DELETE": { + "BUTTON_TEXT": "Usuń", + "TITLE": "Usuń bota", + "CONFIRM": { + "TITLE": "Potwierdź usunięcie", + "MESSAGE": "Are you sure you want to delete {name}?", + "YES": "Tak, usuń", + "NO": "Nie, anuluj" + }, + "API": { + "SUCCESS_MESSAGE": "Bot usunięty pomyślnie.", + "ERROR_MESSAGE": "Nie udało się usunąć bota. Proszę spróbować ponownie." + } + }, + "EDIT": { + "BUTTON_TEXT": "Edytuj", + "TITLE": "Edytuj bota", + "API": { + "SUCCESS_MESSAGE": "Bot zaktualizowany pomyślnie.", + "ERROR_MESSAGE": "Nie udało się zaktualizować bota. Proszę spróbować ponownie." + } + }, + "ACCESS_TOKEN": { + "TITLE": "Token dostępu", + "DESCRIPTION": "Copy the access token and save it securely", + "COPY_SUCCESSFUL": "Access token copied to clipboard", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "Nazwa bota", + "PLACEHOLDER": "Enter bot name", + "REQUIRED": "Nazwa bota jest wymagana" + }, + "DESCRIPTION": { + "LABEL": "Opis", + "PLACEHOLDER": "Co robi ten bot?" + }, + "WEBHOOK_URL": { + "LABEL": "Adres URL webhooka", + "PLACEHOLDER": "https://example.com/webhook", + "REQUIRED": "Webhook URL is required" + }, + "ERRORS": { + "NAME": "Nazwa bota jest wymagana", + "URL": "Webhook URL is required", + "VALID_URL": "Please enter a valid URL starting with http:// or https://" + }, + "CANCEL": "Anuluj", + "CREATE": "Create Bot", + "UPDATE": "Update Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure a webhook bot to integrate with your custom services. The bot will receive and process events from conversations and can respond to them." + }, + "TYPES": { + "WEBHOOK": "Bot webhook" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/agentMgmt.json b/app/javascript/dashboard/i18n/locale/pl/agentMgmt.json new file mode 100644 index 0000000..c457392 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Agenci", + "HEADER_BTN_TXT": "Dodaj agenta", + "LOADING": "Pobieranie listy agentów", + "DESCRIPTION": "An agent is a member of your customer support team who can view and respond to user messages. The list below shows all the agents in your account.", + "LEARN_MORE": "Learn about user roles", + "AGENT_TYPES": { + "ADMINISTRATOR": "Administrator", + "AGENT": "Agent" + }, + "LIST": { + "404": "Nie ma agentów powiązanych z tym kontem", + "TITLE": "Zarządzaj agentami w zespole", + "DESC": "Możesz dodać/usunąć agentów do/w zespole.", + "NAME": "Imię", + "EMAIL": "EMAIL", + "STATUS": "Status", + "ACTIONS": "Akcje", + "VERIFIED": "Zweryfikowano", + "VERIFICATION_PENDING": "Weryfikacja oczekuje", + "AVAILABLE_CUSTOM_ROLE": "Available custom role permissions" + }, + "ADD": { + "TITLE": "Dodaj agenta do swojego zespołu", + "DESC": "Możesz dodać osoby, które będą w stanie obsłużyć wsparcie dla twoich skrzynek odbiorczych.", + "CANCEL_BUTTON_TEXT": "Anuluj", + "FORM": { + "NAME": { + "LABEL": "Nazwa agenta", + "PLACEHOLDER": "Wprowadź nazwę agenta" + }, + "AGENT_TYPE": { + "LABEL": "Typ agenta", + "PLACEHOLDER": "Wybierz typ", + "ERROR": "Typ agenta jest wymagany" + }, + "EMAIL": { + "LABEL": "Adres e-mail", + "PLACEHOLDER": "Wprowadź adres e-mail agenta" + }, + "SUBMIT": "Dodaj agenta" + }, + "API": { + "SUCCESS_MESSAGE": "Agent dodany pomyślnie", + "EXIST_MESSAGE": "Email agenta jest już w użyciu, spróbuj innego adresu e-mail", + "ERROR_MESSAGE": "Nie można połączyć się z serwerem Woot, proszę spróbować później" + } + }, + "DELETE": { + "BUTTON_TEXT": "Usuń", + "API": { + "SUCCESS_MESSAGE": "Agent został pomyślnie usunięty", + "ERROR_MESSAGE": "Nie można połączyć się z serwerem Woot, proszę spróbować później" + }, + "CONFIRM": { + "TITLE": "Potwierdź usunięcie", + "MESSAGE": "Czy jesteś pewien, że chcesz usunąć ", + "YES": "Tak, usuń ", + "NO": "Nie, zachowaj " + } + }, + "EDIT": { + "TITLE": "Edytuj agenta", + "FORM": { + "NAME": { + "LABEL": "Imię agenta", + "PLACEHOLDER": "Proszę wprowadzić imię agenta" + }, + "AGENT_TYPE": { + "LABEL": "Rola", + "PLACEHOLDER": "Proszę wybrać rolę", + "ERROR": "Rola jest wymagana" + }, + "EMAIL": { + "LABEL": "Adres e-mail", + "PLACEHOLDER": "Proszę wprowadzić adres e-mail agenta" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Dostępność", + "PLACEHOLDER": "Proszę wybrać status dostępności", + "ERROR": "Dostępność jest wymagana" + }, + "SUBMIT": "Edytuj agenta" + }, + "BUTTON_TEXT": "Edytuj", + "CANCEL_BUTTON_TEXT": "Anuluj", + "API": { + "SUCCESS_MESSAGE": "Agent został pomyślnie zaktualizowany", + "ERROR_MESSAGE": "Nie można połączyć się z serwerem Woot, proszę spróbować później" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Zresetuj hasło", + "ADMIN_SUCCESS_MESSAGE": "E-mail z instrukcjami resetowania hasła został wysłany do agenta", + "SUCCESS_MESSAGE": "Hasło agenta zostało pomyślnie zresetowane", + "ERROR_MESSAGE": "Nie można połączyć się z serwerem Woot, proszę spróbować później" + } + }, + "SEARCH": { + "NO_RESULTS": "Nie znaleziono wyników." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "Brak", + "TITLE": { + "AGENT": "Wybierz konsultanta", + "TEAM": "Wybierz zespół" + }, + "LIST": { + "NONE": "Brak" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "Nie znaleziono agentów", + "TEAM": "Nie znaleziono zespołów" + }, + "PLACEHOLDER": { + "AGENT": "Szukaj agentów", + "TEAM": "Szukaj zespołów", + "INPUT": "Szukaj agentów" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/pl/attributesMgmt.json new file mode 100644 index 0000000..74b127a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Atrybuty Niestandardowe", + "HEADER_BTN_TXT": "Dodaj Atrybut Niestandardowy", + "LOADING": "Pobieranie atrybutów niestandardowych", + "DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.", + "LEARN_MORE": "Learn more about custom attributes", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Rozmowa", + "CONTACT": "Kontakt" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Tekst", + "NUMBER": "Numer", + "LINK": "Link", + "DATE": "Date", + "LIST": "Lista", + "CHECKBOX": "Pole Wyboru" + }, + "ADD": { + "TITLE": "Dodaj Atrybut Niestandardowy", + "SUBMIT": "Utwórz", + "CANCEL_BUTTON_TEXT": "Anuluj", + "FORM": { + "NAME": { + "LABEL": "Nazwa Wyświetlana", + "PLACEHOLDER": "Wprowadź nazwę wyświetlaną atrybutu niestandardowego", + "ERROR": "Nazwa jest wymagana" + }, + "DESC": { + "LABEL": "Opis", + "PLACEHOLDER": "Wprowadź opis atrybutu niestandardowego", + "ERROR": "Opis jest wymagany" + }, + "MODEL": { + "LABEL": "Dotyczy", + "PLACEHOLDER": "Proszę wybrać jedno", + "ERROR": "Model jest wymagany" + }, + "TYPE": { + "LABEL": "Typ", + "PLACEHOLDER": "Proszę wybrać typ", + "ERROR": "Typ jest wymagany", + "LIST": { + "LABEL": "Wartości Listy", + "PLACEHOLDER": "Proszę wprowadzić wartość i nacisnąć klawisz enter", + "ERROR": "Musisz mieć przynajmniej jedną wartość" + } + }, + "KEY": { + "LABEL": "Klucz", + "PLACEHOLDER": "Wprowadź klucz atrybutu niestandardowego", + "ERROR": "Klucz jest wymagany", + "IN_VALID": "Nieprawidłowy klucz" + }, + "REGEX_PATTERN": { + "LABEL": "Wzorzec Regex", + "PLACEHOLDER": "Proszę wprowadzić wzorzec regex atrybutu niestandardowego. (Opcjonalnie)" + }, + "REGEX_CUE": { + "LABEL": "Wskazówka Regex", + "PLACEHOLDER": "Proszę wprowadzić wskazówkę wzorca regex. (Opcjonalnie)" + }, + "ENABLE_REGEX": { + "LABEL": "Włącz walidację regex" + } + }, + "API": { + "SUCCESS_MESSAGE": "Atrybut Niestandardowy został pomyślnie dodany!", + "ERROR_MESSAGE": "Nie udało się utworzyć Atrybutu Niestandardowego. Proszę spróbować później." + } + }, + "DELETE": { + "BUTTON_TEXT": "Usuń", + "API": { + "SUCCESS_MESSAGE": "Atrybut Niestandardowy został pomyślnie usunięty.", + "ERROR_MESSAGE": "Nie udało się usunąć atrybutu niestandardowego. Spróbuj ponownie." + }, + "CONFIRM": { + "TITLE": "Czy na pewno chcesz usunąć - {attributeName}", + "PLACE_HOLDER": "Proszę wpisać {attributeName}, aby potwierdzić", + "MESSAGE": "Usunięcie spowoduje usunięcie atrybutu niestandardowego", + "YES": "Usuń ", + "NO": "Anuluj" + } + }, + "EDIT": { + "TITLE": "Edytuj Atrybut Niestandardowy", + "UPDATE_BUTTON_TEXT": "Aktualizuj", + "TYPE": { + "LIST": { + "LABEL": "Wartości Listy", + "PLACEHOLDER": "Proszę wprowadzić wartości i nacisnąć klawisz enter" + } + }, + "API": { + "SUCCESS_MESSAGE": "Atrybut Niestandardowy został pomyślnie zaktualizowany", + "ERROR_MESSAGE": "Wystąpił błąd podczas aktualizacji atrybutu niestandardowego, proszę spróbować ponownie" + } + }, + "TABS": { + "HEADER": "Atrybuty Niestandardowe", + "CONVERSATION": "Rozmowa", + "CONTACT": "Kontakt" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Imię", + "DESCRIPTION": "Opis", + "TYPE": "Typ", + "KEY": "Klucz" + }, + "BUTTONS": { + "EDIT": "Edytuj", + "DELETE": "Usuń" + }, + "EMPTY_RESULT": { + "404": "Nie utworzono żadnych atrybutów niestandardowych", + "NOT_FOUND": "Nie skonfigurowano żadnych atrybutów niestandardowych" + }, + "REGEX_PATTERN": { + "LABEL": "Wzorzec Regex", + "PLACEHOLDER": "Proszę wprowadzić wzorzec regex atrybutu niestandardowego. (Opcjonalnie)" + }, + "REGEX_CUE": { + "LABEL": "Wskazówka Regex", + "PLACEHOLDER": "Proszę wprowadzić wskazówkę wzorca regex. (Opcjonalnie)" + }, + "ENABLE_REGEX": { + "LABEL": "Włącz walidację regex" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/auditLogs.json b/app/javascript/dashboard/i18n/locale/pl/auditLogs.json new file mode 100644 index 0000000..4846273 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Dzienniki Audytu", + "HEADER_BTN_TXT": "Dodaj Dzienniki Audytu", + "LOADING": "Pobieranie Dzienników Audytu", + "DESCRIPTION": "Audit Logs maintain a record of activities in your account, allowing you to track and audit your account, team, or services.", + "LEARN_MORE": "Learn more about audit logs", + "SEARCH_404": "Brak elementów pasujących do tego zapytania", + "SIDEBAR_TXT": "Dzienniki Audytu
Dzienniki Audytu to ślady działań i zdarzeń w systemie Chatwoot.
", + "LIST": { + "404": "Brak dostępnych Dzienników Audytu na tym koncie.", + "TITLE": "Zarządzaj Dziennikami Audytu", + "DESC": "Dzienniki Audytu to ślady działań i zdarzeń w systemie Chatwoot.", + "TABLE_HEADER": { + "ACTIVITY": "Aktywność", + "TIME": "Akcja", + "IP_ADDRESS": "Adres IP" + } + }, + "API": { + "SUCCESS_MESSAGE": "Dzienniki Audytu pobrane pomyślnie", + "ERROR_MESSAGE": "Nie można połączyć się z serwerem Woot, proszę spróbować później" + }, + "DEFAULT_USER": "System", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} zaprosił {invitee} do konta jako {role}", + "EDIT": { + "SELF": "{agentName} zmienił swoje {attributes} na {values}", + "OTHER": "{agentName} zmienił {attributes} użytkownika {user} na {values}", + "DELETED": "{agentName} changed {attributes} of a deleted user to {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} zalogował się", + "SIGN_OUT": "{agentName} wylogował się" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} deleted conversation #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/automation.json b/app/javascript/dashboard/i18n/locale/pl/automation.json new file mode 100644 index 0000000..63bcba5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automatyzacja", + "DESCRIPTION": "Automation can replace and streamline existing processes that require manual effort, such as adding labels and assigning conversations to the most suitable agent. This allows the team to focus on their strengths while reducing time spent on routine tasks.", + "LEARN_MORE": "Learn more about automation", + "HEADER_BTN_TXT": "Dodaj regułę automatyzacji", + "LOADING": "Pobieranie reguł automatyzacji", + "ADD": { + "TITLE": "Dodaj regułę automatyzacji", + "SUBMIT": "Stwórz", + "CANCEL_BUTTON_TEXT": "Anuluj", + "FORM": { + "NAME": { + "LABEL": "Nazwa reguły", + "PLACEHOLDER": "Wprowadź nazwę reguły", + "ERROR": "Nazwa jest wymagana" + }, + "DESC": { + "LABEL": "Opis", + "PLACEHOLDER": "Wprowadź opis reguły", + "ERROR": "Opis jest wymagany" + }, + "EVENT": { + "LABEL": "Zdarzenie", + "PLACEHOLDER": "Wybierz jedno", + "ERROR": "Zdarzenie jest wymagane" + }, + "CONDITIONS": { + "LABEL": "Warunki" + }, + "ACTIONS": { + "LABEL": "Akcje" + } + }, + "CONDITION_BUTTON_LABEL": "Dodaj warunek", + "ACTION_BUTTON_LABEL": "Dodaj akcję", + "API": { + "SUCCESS_MESSAGE": "Reguła automatyzacji została dodana", + "ERROR_MESSAGE": "Nie udało się utworzyć reguły automatyzacji, spróbuj ponownie później" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Imię", + "DESCRIPTION": "Opis", + "ACTIVE": "Aktywne", + "CREATED_ON": "Utworzona dnia" + }, + "404": "Nie znaleziono reguł automatyzacji" + }, + "DELETE": { + "TITLE": "Usuń regułę automatyzacji", + "SUBMIT": "Usuń", + "CANCEL_BUTTON_TEXT": "Anuluj", + "CONFIRM": { + "TITLE": "Potwierdź usunięcie", + "MESSAGE": "Czy na pewno chcesz usunąć ", + "YES": "Tak, usuń ", + "NO": "Nie, zachowaj " + }, + "API": { + "SUCCESS_MESSAGE": "Reguła automatyzacji została usunięta", + "ERROR_MESSAGE": "Nie udało się usunąć reguły automatyzacji, spróbuj ponownie później" + } + }, + "EDIT": { + "TITLE": "Edytuj regułę automatyzacji", + "SUBMIT": "Aktualizuj", + "CANCEL_BUTTON_TEXT": "Anuluj", + "API": { + "SUCCESS_MESSAGE": "Reguła automatyzacji została zaktualizowana", + "ERROR_MESSAGE": "Nie udało się zaktualizować reguły automatyzacji, spróbuj ponownie później" + } + }, + "CLONE": { + "TOOLTIP": "Klonuj", + "API": { + "SUCCESS_MESSAGE": "Reguła automatyzacji została sklonowana pomyślnie", + "ERROR_MESSAGE": "Nie udało się sklonować reguły automatyzacji, spróbuj ponownie później" + } + }, + "FORM": { + "EDIT": "Edytuj", + "CREATE": "Stwórz", + "DELETE": "Usuń", + "CANCEL": "Anuluj", + "RESET_MESSAGE": "Zmiana typu zdarzenia spowoduje zresetowanie dodanych warunków i zdarzeń poniżej" + }, + "CONDITION": { + "DELETE_MESSAGE": "Musisz mieć co najmniej jeden warunek, aby zapisać", + "CONTACT_CUSTOM_ATTR_LABEL": "Niestandardowe atrybuty kontaktu", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Niestandardowe atrybuty rozmowy" + }, + "ACTION": { + "DELETE_MESSAGE": "Musisz mieć co najmniej jedną akcję, aby zapisać", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Wprowadź swoją wiadomość tutaj", + "TEAM_DROPDOWN_PLACEHOLDER": "Wybierz zespoły", + "EMAIL_INPUT_PLACEHOLDER": "Enter email", + "URL_INPUT_PLACEHOLDER": "Enter URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Aktywuj regułę automatyzacji", + "DEACTIVATION_TITLE": "Wyłącz regułę automatyzacji", + "ACTIVATION_DESCRIPTION": "Ta akcja spowoduje aktywację reguły automatyzacji '{automationName}'. Czy na pewno chcesz kontynuować?", + "DEACTIVATION_DESCRIPTION": "Ta akcja spowoduje deaktywację reguły automatyzacji '{automationName}'. Czy na pewno chcesz kontynuować?", + "ACTIVATION_SUCCESFUL": "Reguła automatyzacji została pomyślnie aktywowana", + "DEACTIVATION_SUCCESFUL": "Reguła automatyzacji została pomyślnie wyłączona", + "ACTIVATION_ERROR": "Nie można aktywować reguły automatyzacji, spróbuj ponownie później", + "DEACTIVATION_ERROR": "Nie można wyłączyć reguły automatyzacji, spróbuj ponownie później", + "CONFIRMATION_LABEL": "Tak", + "CANCEL_LABEL": "Nie" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Nie udało się przesłać załącznika, spróbuj ponownie", + "LABEL_IDLE": "Prześlij załącznik", + "LABEL_UPLOADING": "Przesyłanie...", + "LABEL_UPLOADED": "Przesłano pomyślnie", + "LABEL_UPLOAD_FAILED": "Nie udało się przesłać załącznika" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Wartość jest wymagana", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "NONE_OPTION": "Brak", + "EVENTS": { + "CONVERSATION_CREATED": "Rozpoczęcie rozmowy", + "CONVERSATION_UPDATED": "Aktualizacja rozmowy", + "MESSAGE_CREATED": "Message Created", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Conversation Opened" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Assign to Agent", + "ASSIGN_TEAM": "Assign a Team", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "SEND_EMAIL_TO_TEAM": "Send an Email to Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Wycisz kontakt", + "SNOOZE_CONVERSATION": "Zatrzymaj rozmowę", + "RESOLVE_CONVERSATION": "Zamknij rozmowę", + "SEND_WEBHOOK_EVENT": "Send Webhook Event", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "CHANGE_PRIORITY": "Zmień priorytet", + "ADD_SLA": "Add SLA", + "OPEN_CONVERSATION": "Otwórz rozmowę" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "Brak", + "LOW": "Niski", + "MEDIUM": "Średni", + "HIGH": "Wysoki", + "URGENT": "Pilne" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Message Type", + "MESSAGE_CONTAINS": "Message Contains", + "EMAIL": "E-mail", + "INBOX": "Skrzynka odbiorcza", + "CONVERSATION_LANGUAGE": "Conversation Language", + "PHONE_NUMBER": "Numer telefonu", + "STATUS": "Status", + "BROWSER_LANGUAGE": "Język przeglądarki", + "MAIL_SUBJECT": "Email Subject", + "COUNTRY_NAME": "Kraj", + "REFERER_LINK": "Referrer Link", + "ASSIGNEE_NAME": "Assignee", + "TEAM_NAME": "Zespół", + "PRIORITY": "Priorytet", + "LABELS": "Etykiety" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/bulkActions.json b/app/javascript/dashboard/i18n/locale/pl/bulkActions.json new file mode 100644 index 0000000..dc20e5f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} wybranych rozmów", + "AGENT_SELECT_LABEL": "Wybierz konsultanta", + "ASSIGN_CONFIRMATION_LABEL": "Czy na pewno chcesz przypisać {conversationCount} {conversationLabel} do", + "UNASSIGN_CONFIRMATION_LABEL": "Czy na pewno chcesz odwołać przypisanie {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Powróć", + "ASSIGN_LABEL": "Przypisz", + "YES": "Tak", + "SEARCH_INPUT_PLACEHOLDER": "Szukaj", + "ASSIGN_AGENT_TOOLTIP": "Przypisz Agenta", + "ASSIGN_TEAM_TOOLTIP": "Przypisz zespół", + "ASSIGN_SUCCESFUL": "Rozmowy zostały pomyślnie przypisane.", + "ASSIGN_FAILED": "Failed to assign conversations. Please try again.", + "RESOLVE_SUCCESFUL": "Rozmowy zostały pomyślnie zakończone.", + "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Zaznaczone rozmowy widoczne na tej stronie.", + "AGENT_LIST_LOADING": "Ładowanie agentów", + "UPDATE": { + "CHANGE_STATUS": "Zmień status", + "SNOOZE_UNTIL": "Uśpij", + "UPDATE_SUCCESFUL": "Status rozmowy został pomyślnie zaktualizowany.", + "UPDATE_FAILED": "Failed to update conversations. Please try again." + }, + "LABELS": { + "ASSIGN_LABELS": "Assign labels", + "NO_LABELS_FOUND": "Brak wyników", + "ASSIGN_SELECTED_LABELS": "Przypisz wybrane etykiety", + "ASSIGN_SUCCESFUL": "Etykiety zostały pomyślnie przypisane.", + "ASSIGN_FAILED": "Failed to assign labels. Please try again." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Wybierz zespół", + "NONE": "Brak", + "NO_TEAMS_AVAILABLE": "Na tym koncie nie dodano jeszcze żadnych zespołów.", + "ASSIGN_SELECTED_TEAMS": "Przypisz wybrany zespół.", + "ASSIGN_SUCCESFUL": "Teams assigned successfully.", + "ASSIGN_FAILED": "Failed to assign team. Please try again." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/campaign.json b/app/javascript/dashboard/i18n/locale/pl/campaign.json new file mode 100644 index 0000000..6572232 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "Włączone", + "DISABLED": "Wyłączone" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Wysłane przez", + "BOT": "Bot", + "FROM": "od", + "URL": "Adres URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "Anuluj", + "CREATE_BUTTON_TEXT": "Stwórz", + "FORM": { + "TITLE": { + "LABEL": "Tytuł", + "PLACEHOLDER": "Wprowadź tytuł kampanii", + "ERROR": "Tytuł jest wymagany" + }, + "MESSAGE": { + "LABEL": "Wiadomość", + "PLACEHOLDER": "Wprowadź treść wiadomości dla kampanii", + "ERROR": "Wiadomość jest wymagana" + }, + "INBOX": { + "LABEL": "Wybierz skrzynkę odbiorczą", + "PLACEHOLDER": "Wybierz skrzynkę odbiorczą", + "ERROR": "Skrzynka jest wymagana" + }, + "SENT_BY": { + "LABEL": "Wysłane przez", + "PLACEHOLDER": "Please select sender", + "ERROR": "Nadawca jest wymagany" + }, + "END_POINT": { + "LABEL": "Adres URL", + "PLACEHOLDER": "Wprowadź adres URL", + "ERROR": "Wprowadź poprawny adres URL" + }, + "TIME_ON_PAGE": { + "LABEL": "Czas na stronie (w sekundach)", + "PLACEHOLDER": "Wprowadź czas", + "ERROR": "Czas na stronie jest wymagany" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "Włącz kampanię", + "TRIGGER_ONLY_BUSINESS_HOURS": "Wyzwalaj tylko w godzinach pracy" + }, + "BUTTONS": { + "CREATE": "Stwórz", + "CANCEL": "Anuluj" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "Wystąpił błąd. Spróbuj ponownie." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "Wystąpił błąd. Spróbuj ponownie." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Zakończone", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "Anuluj", + "CREATE_BUTTON_TEXT": "Stwórz", + "FORM": { + "TITLE": { + "LABEL": "Tytuł", + "PLACEHOLDER": "Wprowadź tytuł kampanii", + "ERROR": "Tytuł jest wymagany" + }, + "MESSAGE": { + "LABEL": "Wiadomość", + "PLACEHOLDER": "Wprowadź treść wiadomości dla kampanii", + "ERROR": "Wiadomość jest wymagana" + }, + "INBOX": { + "LABEL": "Wybierz skrzynkę odbiorczą", + "PLACEHOLDER": "Wybierz skrzynkę odbiorczą", + "ERROR": "Skrzynka jest wymagana" + }, + "AUDIENCE": { + "LABEL": "Grupa docelowa", + "PLACEHOLDER": "Wybierz etykiety klienta", + "ERROR": "Grupa docelowa jest wymagana" + }, + "SCHEDULED_AT": { + "LABEL": "Zaplanowany czas", + "PLACEHOLDER": "Wybierz czas", + "ERROR": "Zaplanowany czas jest wymagany" + }, + "BUTTONS": { + "CREATE": "Stwórz", + "CANCEL": "Anuluj" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "Wystąpił błąd. Spróbuj ponownie." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No WhatsApp campaigns are available", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Zakończone", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "Anuluj", + "CREATE_BUTTON_TEXT": "Stwórz", + "FORM": { + "TITLE": { + "LABEL": "Tytuł", + "PLACEHOLDER": "Wprowadź tytuł kampanii", + "ERROR": "Tytuł jest wymagany" + }, + "INBOX": { + "LABEL": "Wybierz skrzynkę odbiorczą", + "PLACEHOLDER": "Wybierz skrzynkę odbiorczą", + "ERROR": "Skrzynka jest wymagana" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "Przetwarzanie {templateName}", + "LANGUAGE": "Język", + "CATEGORY": "Kategoria", + "VARIABLES_LABEL": "Zmienne", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "Grupa docelowa", + "PLACEHOLDER": "Wybierz etykiety klienta", + "ERROR": "Grupa docelowa jest wymagana" + }, + "SCHEDULED_AT": { + "LABEL": "Zaplanowany czas", + "PLACEHOLDER": "Wybierz czas", + "ERROR": "Zaplanowany czas jest wymagany" + }, + "BUTTONS": { + "CREATE": "Stwórz", + "CANCEL": "Anuluj" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "Wystąpił błąd. Spróbuj ponownie." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Czy na pewno chcesz usunąć?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "Usuń", + "API": { + "SUCCESS_MESSAGE": "Kampania została pomyślnie usunięta", + "ERROR_MESSAGE": "Wystąpił błąd. Spróbuj ponownie." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/pl/cannedMgmt.json new file mode 100644 index 0000000..80abbd7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Przygotowane odpowiedzi", + "LEARN_MORE": "Learn more about canned responses", + "DESCRIPTION": "Canned Responses are pre-written reply templates that help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a canned response during a conversation. ", + "HEADER_BTN_TXT": "Add canned response", + "LOADING": "Fetching canned responses...", + "SEARCH_404": "Brak wyników pasujących do wyszukiwania.", + "LIST": { + "404": "Brak dostępnych Gotowych odpowiedzi na tym koncie.", + "TITLE": "Zarządzaj Gotowymi odpowiedziami", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "TABLE_HEADER": { + "SHORT_CODE": "Short code", + "CONTENT": "Zawartość", + "ACTIONS": "Akcje" + } + }, + "ADD": { + "TITLE": "Add canned response", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "CANCEL_BUTTON_TEXT": "Anuluj", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a short code.", + "ERROR": "Short Code is required." + }, + "CONTENT": { + "LABEL": "Wiadomość", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." + }, + "SUBMIT": "Prześlij" + }, + "API": { + "SUCCESS_MESSAGE": "Canned response added successfully.", + "ERROR_MESSAGE": "Nie można połączyć się z serwerem Woot. Spróbuj ponownie." + } + }, + "EDIT": { + "TITLE": "Edit canned response", + "CANCEL_BUTTON_TEXT": "Anuluj", + "FORM": { + "SHORT_CODE": { + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a shortcode.", + "ERROR": "Short code is required." + }, + "CONTENT": { + "LABEL": "Wiadomość", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Wiadomość jest wymagana." + }, + "SUBMIT": "Prześlij" + }, + "BUTTON_TEXT": "Edytuj", + "API": { + "SUCCESS_MESSAGE": "Canned response is updated successfully.", + "ERROR_MESSAGE": "Nie można połączyć się z serwerem Woot. Spróbuj ponownie." + } + }, + "DELETE": { + "BUTTON_TEXT": "Usuń", + "API": { + "SUCCESS_MESSAGE": "Canned response deleted successfully.", + "ERROR_MESSAGE": "Nie można połączyć się z serwerem Woot. Spróbuj ponownie." + }, + "CONFIRM": { + "TITLE": "Potwierdzenie usunięcia", + "MESSAGE": "Czy na pewno chcesz usunąć ", + "YES": "Yes, delete ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/chatlist.json b/app/javascript/dashboard/i18n/locale/pl/chatlist.json new file mode 100644 index 0000000..eb1f040 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Pobieranie konwersacji", + "LOAD_MORE_CONVERSATIONS": "Załaduj więcej rozmów", + "EOF": "Wszystkie rozmowy załadowane 🎉", + "LIST": { + "404": "W tej grupie nie ma aktywnych konwersacji." + }, + "FAILED_TO_SEND": "Failed to send", + "TAB_HEADING": "Rozmowy", + "MENTION_HEADING": "Wzmianki", + "UNATTENDED_HEADING": "Nieobsługiwane", + "SEARCH": { + "INPUT": "Szukaj ludzi, czatów, zapisanych odpowiedzi .." + }, + "FILTER_ALL": "Wszystkie", + "ASSIGNEE_TYPE_TABS": { + "me": "Moje", + "unassigned": "Nieprzypisane", + "all": "Wszystkie" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Otwarte" + }, + "resolved": { + "TEXT": "Rozwiązane" + }, + "pending": { + "TEXT": "Oczekujące" + }, + "snoozed": { + "TEXT": "Uśpij" + }, + "all": { + "TEXT": "Wszystkie" + } + }, + "VIEW_FILTER": "Widok", + "SORT_TOOLTIP_LABEL": "Sortuj rozmowy", + "CHAT_SORT": { + "STATUS": "Status", + "ORDER_BY": "Sortuj według" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Utworzono", + "OLDEST": "Data utworzenia:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Ostatnia aktywność:", + "ACTIVE": "Ostatnia aktywność" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Last activity: Oldest first" + }, + "last_activity_at_desc": { + "TEXT": "Last activity: Newest first" + }, + "created_at_desc": { + "TEXT": "Created at: Newest first" + }, + "created_at_asc": { + "TEXT": "Created at: Oldest first" + }, + "priority_desc": { + "TEXT": "Priority: Highest first" + }, + "priority_asc": { + "TEXT": "Priority: Lowest first" + }, + "waiting_since_asc": { + "TEXT": "Pending Response: Longest first" + }, + "waiting_since_desc": { + "TEXT": "Pending Response: Shortest first" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Wiadomość z obrazkiem" + }, + "audio": { + "CONTENT": "Wiadomość dźwiękowa" + }, + "video": { + "CONTENT": "Wiadomość wideo" + }, + "file": { + "CONTENT": "Załącznik pliku" + }, + "location": { + "CONTENT": "Lokalizacja" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "udostępnił adres URL" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Sortuj rozmowy", + "DROPDOWN_TITLE": "Sortuj według", + "ITEMS": { + "LATEST": { + "NAME": "Ostatnia aktywność o", + "LABEL": "Ostatnia aktywność" + }, + "CREATED_AT": { + "NAME": "Data utworzenia", + "LABEL": "Data utworzenia" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Ostatnia wiadomość użytkownika o", + "LABEL": "Ostatnia wiadomość" + } + } + }, + "RECEIVED_VIA_EMAIL": "Otrzymano przez e-mail", + "VIEW_TWEET_IN_TWITTER": "Zobacz tweeta na Twitterze", + "REPLY_TO_TWEET": "Odpowiedz na tweeta", + "LINK_TO_STORY": "Przejdź do historii na Instagramie", + "SENT": "Wysłano pomyślnie", + "READ": "Przeczytano pomyślnie", + "DELIVERED": "Dostarczono pomyślnie", + "NO_MESSAGES": "Brak wiadomości", + "NO_CONTENT": "Brak treści", + "HIDE_QUOTED_TEXT": "Ukryj cytat", + "SHOW_QUOTED_TEXT": "Pokaż cytat", + "MESSAGE_READ": "Przeczytane", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/companies.json b/app/javascript/dashboard/i18n/locale/pl/companies.json new file mode 100644 index 0000000..bc89b25 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Sortuj według", + "OPTIONS": { + "NAME": "Imię", + "DOMAIN": "Domena", + "CREATED_AT": "Data utworzenia", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/components.json b/app/javascript/dashboard/i18n/locale/pl/components.json new file mode 100644 index 0000000..9801c53 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} of {totalPages} pages" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "Brak wyników.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} more" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "Brak wyników.", + "SEARCHING": "Wyszukiwanie..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Anuluj", + "CONFIRM": "Potwierdź" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Search country", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Wybierz kod kraju z listy" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Author is not available" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Dowiedz się więcej", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutes", + "HOURS": "Hours", + "DAYS": "Days", + "PLACEHOLDER": "Enter duration" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Coming Soon!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/contact.json b/app/javascript/dashboard/i18n/locale/pl/contact.json new file mode 100644 index 0000000..110e17c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Niedostępne", + "EMAIL_ADDRESS": "Adres e-mail", + "PHONE_NUMBER": "Numer telefonu", + "IDENTIFIER": "Identyfikator", + "COPY_SUCCESSFUL": "Skopiowano pomyślnie", + "COMPANY": "Firma", + "LOCATION": "Lokalizacja", + "BROWSER_LANGUAGE": "Język przeglądarki", + "CONVERSATION_TITLE": "Szczegóły rozmowy", + "VIEW_PROFILE": "Pokaż profil", + "BROWSER": "Przeglądarka", + "OS": "System operacyjny", + "INITIATED_FROM": "Zainicjowane z", + "INITIATED_AT": "Zainicjowane o", + "IP_ADDRESS": "Adres IP", + "CREATED_AT_LABEL": "Utworzono", + "NEW_MESSAGE": "Nowa wiadomość", + "CALL": "Call", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "Brak wcześniejszych rozmów z tym kontaktem.", + "TITLE": "Poprzednie rozmowy" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Etykiety kontaktu", + "ERROR": "Nie można zaktualizować etykiet" + }, + "CONVERSATION": { + "TITLE": "Etykiety rozmowy", + "ADD_BUTTON": "Dodaj etykiety" + }, + "LABEL_SELECT": { + "TITLE": "Dodaj etykiety", + "PLACEHOLDER": "Szukaj etykiet", + "NO_RESULT": "Brak wyników", + "CREATE_LABEL": "Utwórz nową etykietę" + } + }, + "MERGE_CONTACT": "Połącz kontakty", + "CONTACT_ACTIONS": "Akcje kontaktu", + "MUTE_CONTACT": "Block Contact", + "UNMUTE_CONTACT": "Unblock Contact", + "MUTED_SUCCESS": "This contact is blocked successfully. You will not be notified of any future conversations.", + "UNMUTED_SUCCESS": "This contact is unblocked successfully.", + "SEND_TRANSCRIPT": "Wyślij transkrypt", + "EDIT_LABEL": "Edytuj", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Niestandardowe atrybuty", + "CONTACT_LABELS": "Etykiety kontaktu", + "PREVIOUS_CONVERSATIONS": "Poprzednie rozmowy", + "NO_RECORDS_FOUND": "Brak wyników" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Edytuj kontakt", + "TITLE": "Edytuj kontakt", + "DESC": "Edytuj dane kontaktowe" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Usuń kontakt", + "TITLE": "Usuń kontakt", + "DESC": "Usuń dane kontaktowe", + "CONFIRM": { + "TITLE": "Potwierdź usunięcie", + "MESSAGE": "Czy na pewno chcesz usunąć ten kontakt?", + "YES": "Tak, usuń", + "NO": "Nie, anuluj" + }, + "API": { + "SUCCESS_MESSAGE": "Kontakt został pomyślnie usunięty", + "ERROR_MESSAGE": "Nie można usunąć kontaktu. Spróbuj ponownie później." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Zapisz", + "CANCEL": "Anuluj", + "AVATAR": { + "LABEL": "Avatar kontaktu" + }, + "NAME": { + "PLACEHOLDER": "Wprowadź pełne imię i nazwisko kontaktu", + "LABEL": "Pełne imię i nazwisko" + }, + "BIO": { + "PLACEHOLDER": "Wprowadź biografię kontaktu", + "LABEL": "Biografia" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Wprowadź adres e-mail kontaktu", + "LABEL": "Adres e-mail", + "DUPLICATE": "Ten adres e-mail jest już używany przez inny kontakt.", + "ERROR": "Wprowadź poprawny adres e-mail." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Wprowadź numer telefonu kontaktu", + "LABEL": "Numer telefonu", + "HELP": "Numer telefonu powinien być w formacie E.164, np. +1415555555 [+][kod kraju][kod kierunkowy][numer telefonu]", + "ERROR": "Numer telefonu powinien być pusty lub mieć format E.164", + "DIAL_CODE_ERROR": "Wybierz kod kraju z listy", + "DUPLICATE": "Ten numer telefonu jest już zajęty przez inny kontakt." + }, + "LOCATION": { + "PLACEHOLDER": "Wprowadź lokalizację kontaktu", + "LABEL": "Lokalizacja" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Wprowadź nazwę firmy", + "LABEL": "Nazwa firmy" + }, + "COUNTRY": { + "PLACEHOLDER": "Wprowadź nazwę kraju", + "LABEL": "Kraj", + "SELECT_PLACEHOLDER": "Wybierz", + "REMOVE": "Usuń", + "SELECT_COUNTRY": "Wybierz kraj" + }, + "CITY": { + "PLACEHOLDER": "Wprowadź nazwę miasta", + "LABEL": "Miasto" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Wprowadź nazwę użytkownika na Facebooku", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Wprowadź nazwę użytkownika na Twitterze", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Wprowadź nazwę użytkownika na LinkedIn", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Wprowadź nazwę użytkownika na GitHub", + "LABEL": "GitHub" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Awatar kontaktu został pomyślnie usunięty", + "ERROR_MESSAGE": "Nie można usunąć awatara kontaktu. Spróbuj ponownie później." + } + }, + "SUCCESS_MESSAGE": "Kontakt został pomyślnie zapisany", + "ERROR_MESSAGE": "Wystąpił błąd, spróbuj ponownie" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Rozpocznij rozmowę", + "TITLE": "Nowa rozmowa", + "DESC": "Rozpocznij nową rozmowę, wysyłając wiadomość.", + "NO_INBOX": "Nie znaleziono skrzynki odbiorczej, aby rozpocząć nową rozmowę z tym kontaktem.", + "FORM": { + "TO": { + "LABEL": "Do" + }, + "INBOX": { + "LABEL": "Skrzynka odbiorcza", + "PLACEHOLDER": "Wybierz skrzynkę odbiorczą", + "ERROR": "Wybierz skrzynkę odbiorczą" + }, + "SUBJECT": { + "LABEL": "Temat", + "PLACEHOLDER": "Temat", + "ERROR": "Temat nie może być pusty" + }, + "MESSAGE": { + "LABEL": "Wiadomość", + "PLACEHOLDER": "Wpisz swoją wiadomość tutaj", + "ERROR": "Wiadomość nie może być pusta" + }, + "ATTACHMENTS": { + "SELECT": "Choose files", + "HELP_TEXT": "Drag and drop files here or choose files to attach" + }, + "SUBMIT": "Wyślij wiadomość", + "CANCEL": "Anuluj", + "SUCCESS_MESSAGE": "Wiadomość została wysłana!", + "GO_TO_CONVERSATION": "Przejdź do rozmowy", + "ERROR_MESSAGE": "Nie udało się wysłać wiadomości! Spróbuj ponownie" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Profile społecznościowe" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Dodaj niestandardowy atrybut", + "COPY_SUCCESSFUL": "Skopiowano pomyślnie", + "SHOW_MORE": "Show all attributes", + "SHOW_LESS": "Show less attributes", + "ACTIONS": { + "COPY": "Kopiuj atrybut", + "DELETE": "Usuń atrybut", + "EDIT": "Edytuj atrybut" + }, + "ADD": { + "TITLE": "Dodaj niestandardowy atrybut", + "DESC": "Dodaj niestandardową informację do tego kontaktu." + }, + "FORM": { + "CREATE": "Dodaj atrybut", + "CANCEL": "Anuluj", + "NAME": { + "LABEL": "Nazwa niestandardowego atrybutu", + "PLACEHOLDER": "Na przykład: ID Shopify", + "ERROR": "Nieprawidłowa nazwa niestandardowego atrybutu" + }, + "VALUE": { + "LABEL": "Wartość atrybutu", + "PLACEHOLDER": "Na przykład: 11901" + }, + "ADD": { + "TITLE": "Dodaj niestandardowy atrybut ", + "SUCCESS": "Pomyślnie dodano atrybut", + "ERROR": "Nie można dodać atrybutu. Spróbuj ponownie później." + }, + "UPDATE": { + "SUCCESS": "Pomyślnie zaktualizowano atrybut", + "ERROR": "Nie można zaktualizować atrybutu. Spróbuj ponownie później." + }, + "DELETE": { + "SUCCESS": "Pomyślnie usunięto atrybut", + "ERROR": "Nie można usunąć atrybutu. Spróbuj ponownie później." + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Dodaj atrybuty", + "PLACEHOLDER": "Wyszukaj atrybuty", + "NO_RESULT": "Brak wyników" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Wybierz wartość", + "SEARCH_INPUT_PLACEHOLDER": "Wyszukaj wartość", + "NO_RESULT": "Brak wyników" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Wymagana jest prawidłowa wartość", + "INVALID_URL": "Nieprawidłowy adres URL", + "INVALID_INPUT": "Invalid Input" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Połącz kontakty", + "DESCRIPTION": "Połącz kontakty, aby połączyć dwa profile w jeden, wraz z wszystkimi atrybutami i rozmowami. W przypadku konfliktu atrybuty z profilu głównego będą miały pierwszeństwo.", + "PRIMARY": { + "TITLE": "Główny kontakt", + "HELP_LABEL": "Usunięcie" + }, + "PARENT": { + "TITLE": "Kontakt do scalenia", + "PLACEHOLDER": "Wyszukaj kontakty", + "HELP_LABEL": "Zachowaj" + }, + "SUMMARY": { + "TITLE": "Podsumowanie", + "DELETE_WARNING": "Kontakt {primaryContactName} zostanie usunięty.", + "ATTRIBUTE_WARNING": "Dane kontaktowe z {primaryContactName} zostaną skopiowane do {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": "Połącz kontakty", + "CANCEL": "Anuluj", + "CHILD_CONTACT": { + "ERROR": "Wybierz kontakt do scalenia" + }, + "SUCCESS_MESSAGE": "Kontakty zostały pomyślnie połączone", + "ERROR_MESSAGE": "Nie można połączyć kontaktów. Spróbuj ponownie!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Kontakty", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "Active contacts", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "Wiadomość", + "SEND_MESSAGE": "Wyślij wiadomość", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "Kontakty" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Add contact", + "EXPORT_CONTACT": "Export contacts", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Save contact", + "EMAIL_ADDRESS_DUPLICATE": "Ten adres e-mail jest już używany przez inny kontakt.", + "PHONE_NUMBER_DUPLICATE": "Ten numer telefonu jest już zajęty przez inny kontakt.", + "SUCCESS_MESSAGE": "Kontakt został pomyślnie zapisany", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "This contact is unblocked successfully", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Import contacts", + "DESCRIPTION": "Importuj kontakty z pliku CSV.", + "DOWNLOAD_LABEL": "Pobierz przykładowy plik CSV", + "LABEL": "Plik CSV:", + "CHOOSE_FILE": "Choose file", + "CHANGE": "Zmień dostępność", + "CANCEL": "Anuluj", + "IMPORT": "Importuj", + "SUCCESS_MESSAGE": "Otrzymasz powiadomienie e-mailem, gdy import zostanie zakończony.", + "ERROR_MESSAGE": "Wystąpił błąd, spróbuj ponownie" + }, + "EXPORT_CONTACT": { + "TITLE": "Export contacts", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Eksportuj", + "SUCCESS_MESSAGE": "Eksportowanie w toku, otrzymasz powiadomienie e-mailem, gdy plik będzie gotowy do pobrania.", + "ERROR_MESSAGE": "Wystąpił błąd, spróbuj ponownie" + }, + "SORT_BY": { + "LABEL": "Sortuj według", + "OPTIONS": { + "NAME": "Imię", + "EMAIL": "E-mail", + "PHONE_NUMBER": "Numer telefonu", + "COMPANY": "Firma", + "COUNTRY": "Kraj", + "CITY": "Miasto", + "LAST_ACTIVITY": "Ostatnia aktywność", + "CREATED_AT": "Data utworzenia" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Czy chcesz zapisać ten filtr?", + "CONFIRM": "Zapisz filtr", + "LABEL": "Imię", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "Potwierdź usunięcie", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "Tak, usuń", + "CANCEL": "No, Cancel", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "Imię", + "EMAIL": "E-mail", + "PHONE_NUMBER": "Numer telefonu", + "IDENTIFIER": "Identyfikator", + "COUNTRY": "Kraj", + "CITY": "Miasto", + "CREATED_AT": "Data utworzenia", + "LAST_ACTIVITY": "Ostatnia aktywność", + "REFERER_LINK": "Link odsyłający", + "BLOCKED": "Blocked", + "BLOCKED_TRUE": "Prawda", + "BLOCKED_FALSE": "Fałsz", + "BUTTONS": { + "CLEAR_FILTERS": "Wyczyść filtry", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "Zastosuj filtry", + "ADD_FILTER": "Dodaj filtr" + }, + "TITLE": "Filtruj kontakty", + "EDIT_SEGMENT": "Edytuj segment", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Wyczyść filtry" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "Zobacz szczegóły", + "EDIT_DETAILS_FORM": { + "TITLE": "Edytuj dane kontaktowe", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "Ten adres e-mail jest już używany przez inny kontakt." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "Ten numer telefonu jest już zajęty przez inny kontakt." + }, + "CITY": { + "PLACEHOLDER": "Wprowadź nazwę miasta" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Wprowadź nazwę firmy" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "This action is permanent and irreversible.", + "BUTTON": "Delete now" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "Usuń kontakt", + "DELETE_DIALOG": { + "TITLE": "Potwierdź usunięcie", + "DESCRIPTION": "Are you sure you want to delete this contact?", + "CONFIRM": "Tak, usuń", + "API": { + "SUCCESS_MESSAGE": "Kontakt został pomyślnie usunięty", + "ERROR_MESSAGE": "Nie można usunąć kontaktu. Spróbuj ponownie później." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Awatar został pomyślnie usunięty", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributes", + "HISTORY": "History", + "NOTES": "Notatki", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "Brak wcześniejszych rozmów z tym kontaktem" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "Tak", + "NO": "Nie", + "TRIGGER": { + "SELECT": "Wybierz wartość", + "INPUT": "Enter value" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "Wymagana jest prawidłowa wartość", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "Nieprawidłowy adres URL", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "Brak wyników", + "API": { + "SUCCESS_MESSAGE": "Pomyślnie zaktualizowano atrybut", + "DELETE_SUCCESS_MESSAGE": "Pomyślnie usunięto atrybut", + "UPDATE_ERROR": "Nie można zaktualizować atrybutu. Spróbuj ponownie później.", + "DELETE_ERROR": "Nie można usunąć atrybutu. Spróbuj ponownie później." + } + }, + "MERGE": { + "TITLE": "Połącz kontakty", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Główny kontakt", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "Usunięcie", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Wyszukaj kontakty", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Kontakty zostały pomyślnie połączone", + "ERROR_MESSAGE": "Nie można połączyć kontaktów. Spróbuj ponownie!", + "IS_SEARCHING": "Wyszukiwanie...", + "BUTTONS": { + "CANCEL": "Anuluj", + "CONFIRM": "Połącz kontakty" + } + }, + "NOTES": { + "PLACEHOLDER": "Dodaj notatkę", + "WROTE": "napisał/a", + "YOU": "You", + "SAVE": "Save note", + "ADD_NOTE": "Add contact note", + "EXPAND": "Expand", + "COLLAPSE": "Collapse", + "NO_NOTES": "No notes, you can add notes from the contact details page.", + "EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "No contacts found in this account", + "SUBTITLE": "Start adding new contacts by clicking on the button below", + "BUTTON_LABEL": "Add contact", + "SEARCH_EMPTY_STATE_TITLE": "Brak kontaktów pasujących do wyszukiwania 🔍", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "No contacts are active at the moment 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Przypisz etykiety", + "ASSIGN_LABELS_SUCCESS": "Etykiety zostały pomyślnie przypisane.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Select all ({count})", + "DELETE_CONTACTS": "Usuń", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Usuń kontakt" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "Widok", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "Do:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Temat :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "Bcc:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "Bcc" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Wpisz swoją wiadomość tutaj..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Zmienne", + "BACK": "Powróć", + "SEND_MESSAGE": "Wyślij wiadomość" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Powróć", + "SEND_MESSAGE": "Wyślij wiadomość" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/contactFilters.json b/app/javascript/dashboard/i18n/locale/pl/contactFilters.json new file mode 100644 index 0000000..98765d1 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filtruj kontakty", + "SUBTITLE": "Dodaj filtry poniżej i kliknij „Prześlij”, aby filtrować kontakty.", + "EDIT_CUSTOM_SEGMENT": "Edytuj segment", + "CUSTOM_VIEWS_SUBTITLE": "Dodaj lub usuń filtry i zaktualizuj swój segment.", + "ADD_NEW_FILTER": "Dodaj filtr", + "CLEAR_ALL_FILTERS": "Wyczyść wszystkie filtry", + "FILTER_DELETE_ERROR": "Musisz mieć co najmniej jeden filtr do zapisu", + "SUBMIT_BUTTON_LABEL": "Prześlij", + "UPDATE_BUTTON_LABEL": "Aktualizuj segment", + "CANCEL_BUTTON_LABEL": "Anuluj", + "CLEAR_BUTTON_LABEL": "Wyczyść filtry", + "EMPTY_VALUE_ERROR": "Wartość jest wymagana", + "SEGMENT_LABEL": "Nazwa segmentu", + "SEGMENT_QUERY_LABEL": "Zapytanie segmentowe", + "TOOLTIP_LABEL": "Filtruj kontakty", + "QUERY_DROPDOWN_LABELS": { + "AND": "i", + "OR": "lub" + }, + "OPERATOR_LABELS": { + "equal_to": "Równa się", + "not_equal_to": "Nie równa się", + "contains": "Zawiera", + "does_not_contain": "Nie zawiera", + "is_present": "Istnieje", + "is_not_present": "Nie istnieje", + "is_greater_than": "Jest większe niż", + "is_lesser_than": "Jest mniejsze niż", + "days_before": "Jest x dni przed" + }, + "ERRORS": { + "VALUE_REQUIRED": "Wartość jest wymagana" + }, + "ATTRIBUTES": { + "NAME": "Nazwa", + "EMAIL": "E-mail", + "PHONE_NUMBER": "Numer telefonu", + "IDENTIFIER": "Identyfikator", + "CITY": "Miasto", + "COUNTRY": "Kraj", + "CUSTOM_ATTRIBUTE_LIST": "Lista niestandardowa", + "CUSTOM_ATTRIBUTE_TEXT": "Tekst niestandardowy", + "CUSTOM_ATTRIBUTE_NUMBER": "Numer niestandardowy", + "CUSTOM_ATTRIBUTE_LINK": "Link niestandardowy", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Pole wyboru niestandardowe", + "CREATED_AT": "Utworzono", + "LAST_ACTIVITY": "Ostatnia aktywność", + "REFERER_LINK": "Link referencyjny", + "BLOCKED": "Blocked", + "LABELS": "Etykiety" + }, + "GROUPS": { + "STANDARD_FILTERS": "Filtry standardowe", + "ADDITIONAL_FILTERS": "Dodatkowe filtry", + "CUSTOM_ATTRIBUTES": "Niestandardowe atrybuty" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/contentTemplates.json b/app/javascript/dashboard/i18n/locale/pl/contentTemplates.json new file mode 100644 index 0000000..5ecb625 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Wyszukaj szablony", + "NO_TEMPLATES_FOUND": "Nie znaleziono szablonów dla", + "NO_CONTENT": "No content", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Kategoria", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Język", + "TEMPLATE_BODY": "Treść szablonu", + "CATEGORY": "Kategoria" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Tekst" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Zmienne", + "LANGUAGE": "Język", + "CATEGORY": "Kategoria", + "VARIABLE_PLACEHOLDER": "Wprowadź wartość {variable}", + "GO_BACK_LABEL": "Powrót", + "SEND_MESSAGE_LABEL": "Wyślij wiadomość", + "FORM_ERROR_MESSAGE": "Proszę wypełnić wszystkie zmienne przed wysłaniem", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Powrót", + "SEND_MESSAGE_BUTTON": "Wyślij wiadomość" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/conversation.json b/app/javascript/dashboard/i18n/locale/pl/conversation.json new file mode 100644 index 0000000..62b4a10 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Wybierz konwersację z lewego panelu", + "CSAT_REPLY_MESSAGE": "Oceń konwersację", + "404": "Przepraszamy, nie można odnaleźć konwersacji. Spróbuj ponownie", + "SWITCH_VIEW_LAYOUT": "Zmień układ", + "DASHBOARD_APP_TAB_MESSAGES": "Wiadomości", + "UNVERIFIED_SESSION": "Tożsamość tego użytkownika nie jest zweryfikowana", + "NO_MESSAGE_1": "Ups! Wygląda na to, że nie ma wiadomości od klientów w Twojej skrzynce odbiorczej.", + "NO_MESSAGE_2": " aby wysłać wiadomość na swoją stronę!", + "NO_INBOX_1": "Hola! Wygląda na to, że nie dodałeś jeszcze żadnej skrzynki odbiorczej.", + "NO_INBOX_2": " aby rozpocząć", + "NO_INBOX_AGENT": "Uh Oh! Wygląda na to, że nie jesteś częścią żadnej skrzynki odbiorczej. Skontaktuj się z administratorem", + "SEARCH_MESSAGES": "Szukaj wiadomości w konwersacjach", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "to open command menu", + "KEYBOARD_SHORTCUTS": "to view keyboard shortcuts" + }, + "SEARCH": { + "TITLE": "Szukaj wiadomości", + "RESULT_TITLE": "Wyniki wyszukiwania", + "LOADING_MESSAGE": "Trwa przetwarzanie danych...", + "PLACEHOLDER": "Wpisz dowolny tekst, aby wyszukać wiadomości", + "NO_MATCHING_RESULTS": "Brak wyników." + }, + "UNREAD_MESSAGES": "Nieprzeczytane wiadomości", + "UNREAD_MESSAGE": "Nieprzeczytana wiadomość", + "CLICK_HERE": "Kliknij tutaj", + "LOADING_INBOXES": "Ładowanie skrzynek odbiorczych", + "LOADING_CONVERSATIONS": "Ładowanie konwersacji", + "CANNOT_REPLY": "Nie możesz odpowiedzieć z powodu", + "24_HOURS_WINDOW": "Ograniczenie 24-godzinnego okna wiadomości", + "48_HOURS_WINDOW": "ograniczenia 48-godzinnego okna wiadomości", + "API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours", + "NOT_ASSIGNED_TO_YOU": "Ta konwersacja nie jest Ci przypisana. Czy chcesz przypisać tę konwersację do siebie?", + "ASSIGN_TO_ME": "Przypisz do mnie", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "Możesz odpowiedzieć na tę rozmowę tylko za pomocą szablonu wiadomości, ponieważ", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "Ograniczenie 24-godzinnego okna wiadomości", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.", + "REPLYING_TO": "Osoba, której odpowiadasz to:", + "REMOVE_SELECTION": "Usuń zaznaczenie", + "DOWNLOAD": "Pobierz", + "UNKNOWN_FILE_TYPE": "Nieznany plik", + "SAVE_CONTACT": "Save Contact", + "NO_CONTENT": "No content to display", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} has shared a contact", + "LOCATION": "{sender} has shared a location", + "FILE": "{sender} has shared a file", + "MEETING": "{sender} rozpoczął spotkanie" + }, + "UPLOADING_ATTACHMENTS": "Przesyłanie załączników...", + "REPLIED_TO_STORY": "Odpowiedziałeś na swoją historię", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", + "SUCCESS_DELETE_MESSAGE": "Wiadomość usunięta pomyślnie", + "FAIL_DELETE_MESSSAGE": "Nie można usunąć wiadomości! Spróbuj ponownie", + "NO_RESPONSE": "Brak odpowiedzi", + "RESPONSE": "Response", + "RATING_TITLE": "Ocena", + "FEEDBACK_TITLE": "Opinia", + "REPLY_MESSAGE_NOT_FOUND": "Message not available", + "CARD": { + "SHOW_LABELS": "Pokaż etykiety", + "HIDE_LABELS": "Ukryj etykiety" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "Rozwiąż", + "REOPEN_ACTION": "Otwórz ponownie", + "OPEN_ACTION": "Otwórz", + "MORE_ACTIONS": "More actions", + "OPEN": "Więcej", + "CLOSE": "Zamknij", + "DETAILS": "szczegóły", + "SNOOZED_UNTIL": "Uśpione do", + "SNOOZED_UNTIL_TOMORROW": "Uśpij do jutra", + "SNOOZED_UNTIL_NEXT_WEEK": "Uśpione do następnego tygodnia", + "SNOOZED_UNTIL_NEXT_REPLY": "Uśpione do następnej odpowiedzi", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "missed", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Oznacz jako oczekujące", + "SNOOZE_UNTIL": "Uśpij", + "SNOOZE": { + "TITLE": "Uśpij do", + "NEXT_REPLY": "Następna odpowiedź", + "TOMORROW": "Jutro", + "NEXT_WEEK": "Następny tydzień" + } + }, + "MENTION": { + "AGENTS": "Agenci", + "TEAMS": "Zespoły" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Uśpij do", + "APPLY": "Uśpij", + "CANCEL": "Anuluj" + }, + "PRIORITY": { + "TITLE": "Priorytet", + "OPTIONS": { + "NONE": "Brak", + "URGENT": "Pilne", + "HIGH": "Wysoki", + "MEDIUM": "Średni", + "LOW": "Niski" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "Brak", + "INPUT_PLACEHOLDER": "Wybierz priorytet", + "NO_RESULTS": "Brak wyników", + "SUCCESSFUL": "Zmieniono priorytet konwersacji o identyfikatorze {conversationId} na {priority}", + "FAILED": "Nie można zmienić priorytetu. Spróbuj ponownie." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Delete conversation #{conversationId}", + "DESCRIPTION": "Are you sure you want to delete this conversation?", + "CONFIRM": "Usuń" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Oznacz jako oczekujące", + "RESOLVED": "Oznacz jako rozwiązane", + "MARK_AS_UNREAD": "Oznacz jako nieprzeczytane", + "MARK_AS_READ": "Mark as read", + "REOPEN": "Otwórz ponownie", + "SNOOZE": { + "TITLE": "Uśpij", + "NEXT_REPLY": "Do następnej odpowiedzi", + "TOMORROW": "Do jutra", + "NEXT_WEEK": "Do następnego tygodnia" + }, + "ASSIGN_AGENT": "Przypisz Agenta", + "ASSIGN_LABEL": "Przypisz etykietę", + "AGENTS_LOADING": "Ładowanie agentów...", + "ASSIGN_TEAM": "Przypisz zespół", + "DELETE": "Delete conversation", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Konwersacja o identyfikatorze {conversationId} przypisana do \"{agentName}\"", + "FAILED": "Nie można przypisać agenta. Spróbuj ponownie." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Nie można przypisać etykiety. Spróbuj ponownie." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Przypisano zespół \"{team}\" do konwersacji o identyfikatorze {conversationId}", + "FAILED": "Nie można przypisać zespołu. Spróbuj ponownie." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Podpis wiadomości", + "ENABLE_SIGN_TOOLTIP": "Włącz podpis", + "DISABLE_SIGN_TOOLTIP": "Wyłącz podpis", + "MSG_INPUT": "Shift + enter dla nowej linii. Zacznij od '/' aby wybrać Gotową odpowiedź.", + "PRIVATE_MSG_INPUT": "Shift + enter dla nowej linii. Będzie widoczne tylko dla agentów", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Podpis wiadomości nie jest skonfigurowany, należy go skonfigurować w ustawieniach profilu.", + "CLICK_HERE": "Kliknij tutaj, aby zaktualizować", + "WHATSAPP_TEMPLATES": "Szablony WhatsApp" + }, + "REPLYBOX": { + "REPLY": "Odpowiedz", + "PRIVATE_NOTE": "Notatka prywatna", + "SEND": "Wyślij", + "CREATE": "Dodaj notatkę", + "INSERT_READ_MORE": "Czytaj więcej", + "DISMISS_REPLY": "Dismiss reply", + "REPLYING_TO": "Replying to:", + "TIP_EMOJI_ICON": "Pokaż selektor emotikonek", + "TIP_ATTACH_ICON": "Dołącz pliki", + "TIP_AUDIORECORDER_ICON": "Nagrywaj audio", + "TIP_AUDIORECORDER_PERMISSION": "Zezwól na dostęp do dźwięku", + "TIP_AUDIORECORDER_ERROR": "Nie można otworzyć dźwięku", + "DRAG_DROP": "Przeciągnij i upuść tutaj, aby dołączyć", + "START_AUDIO_RECORDING": "Rozpocznij nagrywanie audio", + "STOP_AUDIO_RECORDING": "Zatrzymaj nagrywanie audio", + "": "", + "EMAIL_HEAD": { + "TO": "DO", + "ADD_BCC": "Dodaj Bcc", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "Adresy e-mail oddzielone przecinkami", + "ERROR": "Wprowadź poprawny adres e-mail" + }, + "BCC": { + "LABEL": "BCC", + "PLACEHOLDER": "Adresy e-mail oddzielone przecinkami", + "ERROR": "Wprowadź poprawny adres e-mail" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Niezdefiniowane zmienne", + "MESSAGE": "Masz {undefinedVariablesCount} niezdefiniowane zmienne w swojej wiadomości: {undefinedVariables}. Czy chcesz wysłać wiadomość mimo to?", + "CONFIRM": { + "YES": "Wyślij", + "CANCEL": "Anuluj" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "Prywatna uwaga: widoczne tylko dla Ciebie i Twojego zespołu", + "CHANGE_STATUS": "Zmieniono status konwersacji", + "CHANGE_STATUS_FAILED": "Nie udało się zmienić statusu konwersacji", + "CHANGE_AGENT": "Zmieniono przypisaną osobę do konwersacji", + "CHANGE_AGENT_FAILED": "Nie udało się zmienić przypisanej osoby", + "ASSIGN_LABEL_SUCCESFUL": "Etykieta przypisana pomyślnie", + "ASSIGN_LABEL_FAILED": "Nie udało się przypisać etykiety", + "CHANGE_TEAM": "Zmieniono przypisany zespół konwersacji", + "SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully", + "FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again", + "FILE_SIZE_LIMIT": "Plik przekracza limit rozmiaru załącznika %{MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB", + "MESSAGE_ERROR": "Nie można wysłać tej wiadomości, spróbuj ponownie później", + "SENT_BY": "Wysłane przez:", + "BOT": "Bot", + "SEND_FAILED": "Nie można wysłać wiadomości! Spróbuj ponownie", + "TRY_AGAIN": "spróbuj ponownie", + "ASSIGNMENT": { + "SELECT_AGENT": "Wybierz Agenta", + "REMOVE": "Usuń", + "ASSIGN": "Przypisz" + }, + "CONTEXT_MENU": { + "COPY": "Kopiuj", + "REPLY_TO": "Reply to this message", + "DELETE": "Usuń", + "CREATE_A_CANNED_RESPONSE": "Dodaj do gotowych odpowiedzi", + "TRANSLATE": "Przetłumacz", + "COPY_PERMALINK": "Kopiuj link do wiadomości", + "LINK_COPIED": "URL wiadomości skopiowany do schowka", + "DELETE_CONFIRMATION": { + "TITLE": "Czy na pewno chcesz usunąć tę wiadomość?", + "MESSAGE": "Tej akcji nie można cofnąć", + "DELETE": "Usuń", + "CANCEL": "Anuluj" + } + }, + "SIDEBAR": { + "CONTACT": "Kontakt", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Wyślij transkrypt wiadomości", + "DESC": "Wyślij kopię transkryptu rozmowy na podany adres e-mail", + "SUBMIT": "Prześlij", + "CANCEL": "Anuluj", + "SEND_EMAIL_SUCCESS": "Transkrypt rozmowy został pomyślnie wysłany", + "SEND_EMAIL_ERROR": "Wystąpił błąd, spróbuj ponownie", + "FORM": { + "SEND_TO_CONTACT": "Wyślij transkrypt do klienta", + "SEND_TO_AGENT": "Wyślij transkrypt do przypisanego agenta", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Wyślij transkrypt na inny adres e-mail", + "EMAIL": { + "PLACEHOLDER": "Wprowadź adres e-mail", + "ERROR": "Wprowadź poprawny adres e-mail" + } + } + }, + "ONBOARDING": { + "TITLE": "Cześć 👋, Witamy w {installationName}!", + "DESCRIPTION": "Dziękujemy za rejestrację. Chcemy, abyś jak najlepiej skorzystał z {installationName}. Oto kilka rzeczy, które możesz spróbować, aby zapewnić sobie jak najlepsze doświadczenie z {installationName}.", + "GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.", + "GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.", + "GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.", + "READ_LATEST_UPDATES": "Przeczytaj najnowsze aktualizacje", + "ALL_CONVERSATION": { + "TITLE": "Wszystkie Twoje konwersacje w jednym miejscu", + "DESCRIPTION": "Zobacz wszystkie konwersacje z klientami w jednym miejscu. Możesz filtrować konwersacje według kanału, z którego pochodzą, etykiet lub statusu.", + "NEW_LINK": "Kliknij tutaj, aby utworzyć nową skrzynkę odbiorczą" + }, + "TEAM_MEMBERS": { + "TITLE": "Zaproszenie członków zespołu", + "DESCRIPTION": "Ponieważ przygotowujesz się do rozmowy z klientem, zaproś członków zespołu, aby pomogli Ci. Możesz zaprosić członków zespołu, dodając ich adresy e-mail do listy agentów.", + "NEW_LINK": "Kliknij tutaj, aby zaprosić nowego członka zespołu" + }, + "LABELS": { + "TITLE": "Organizuj konwersacje za pomocą etykiet", + "DESCRIPTION": "Etykiety ułatwiają kategoryzację konwersacji. Utwórz etykiety, takie jak #zapytanie-o-wsparcie, #pytanie-o-fakturę itp., aby później łatwo z nich korzystać w trakcie rozmowy.", + "NEW_LINK": "Kliknij tutaj, aby utworzyć nową etykietę" + }, + "CANNED_RESPONSES": { + "TITLE": "Create canned responses", + "DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.", + "NEW_LINK": "Click here to create a canned response" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Przypisany Agent", + "SELF_ASSIGN": "Przypisz do mnie", + "TEAM_LABEL": "Przypisany zespół", + "SELECT": { + "PLACEHOLDER": "Brak" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Dane kontaktowe", + "CONVERSATION_ACTIONS": "Akcje konwersacji", + "CONVERSATION_LABELS": "Etykiety konwersacji", + "CONVERSATION_INFO": "Informacje o konwersacji", + "CONTACT_NOTES": "Contact Notes", + "CONTACT_ATTRIBUTES": "Atrybuty kontaktu", + "PREVIOUS_CONVERSATION": "Poprzednie konwersacje", + "MACROS": "Makra", + "LINEAR_ISSUES": "Linked Linear Issues", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "Oczekujące", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Utwórz atrybut", + "NO_RECORDS_FOUND": "Brak wyników", + "UPDATE": { + "SUCCESS": "Atrybut zaktualizowany pomyślnie", + "ERROR": "Nie można zaktualizować atrybutu. Spróbuj ponownie później" + }, + "ADD": { + "TITLE": "Dodaj", + "SUCCESS": "Atrybut dodany pomyślnie", + "ERROR": "Nie można dodać atrybutu. Spróbuj ponownie później" + }, + "DELETE": { + "SUCCESS": "Atrybut usunięty pomyślnie", + "ERROR": "Nie można usunąć atrybutu. Spróbuj ponownie później" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Dodaj atrybuty", + "PLACEHOLDER": "Wyszukaj atrybuty", + "NO_RESULT": "Brak wyników" + } + }, + "EMAIL_HEADER": { + "FROM": "Od", + "TO": "Do", + "BCC": "Bcc", + "CC": "Cc", + "SUBJECT": "Temat", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Uczestniczący", + "SIDEBAR_TITLE": "Uczestnicy konwersacji", + "NO_RECORDS_FOUND": "Nie znaleziono rekordów", + "ADD_PARTICIPANTS": "Wybierz uczestników", + "REMANING_PARTICIPANTS_TEXT": "+{count} innych", + "REMANING_PARTICIPANT_TEXT": "+{count} inna osoba", + "TOTAL_PARTICIPANTS_TEXT": "Bierze w nich udział {count} osób.", + "TOTAL_PARTICIPANT_TEXT": "Bierze w nich udział {count} osoba.", + "NO_PARTICIPANTS_TEXT": "Nikt nie bierze udziału!", + "WATCH_CONVERSATION": "Dołącz do konwersacji", + "YOU_ARE_WATCHING": "Bierzesz udział", + "API": { + "ERROR_MESSAGE": "Nie można zaktualizować, spróbuj ponownie!", + "SUCCESS_MESSAGE": "Uczestnicy zaktualizowani!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "Wyświetl przetłumaczone treści", + "DESC": "Możesz zobaczyć przetłumaczone treści w każdym języku.", + "ORIGINAL_CONTENT": "Oryginalna treść", + "TRANSLATED_CONTENT": "Przetłumaczona treść", + "NO_TRANSLATIONS_AVAILABLE": "Brak dostępnych tłumaczeń dla tej treści" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/csatMgmt.json b/app/javascript/dashboard/i18n/locale/pl/csatMgmt.json new file mode 100644 index 0000000..568df98 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Oceń udzielone Ci wsparcie", + "PLACEHOLDER": "Dodaj swój komentarz...", + "RATINGS": { + "POOR": "😞 Słabo", + "FAIR": "😑 Średnio", + "AVERAGE": "😐 Przeciętnie", + "GOOD": "😀 Dobrze", + "EXCELLENT": "😍 Doskonale" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/customRole.json b/app/javascript/dashboard/i18n/locale/pl/customRole.json new file mode 100644 index 0000000..3514e09 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Custom Roles", + "LEARN_MORE": "Learn more about custom roles", + "DESCRIPTION": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "HEADER_BTN_TXT": "Add custom role", + "LOADING": "Fetching custom roles...", + "SEARCH_404": "Brak wyników pasujących do wyszukiwania.", + "PAYWALL": { + "TITLE": "Upgrade to create custom roles", + "AVAILABLE_ON": "The custom role feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The custom role feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Manage custom roles", + "DESC": "Custom roles are roles that are created by the account owner or admin. These roles can be assigned to agents to define their access and permissions within the account. Custom roles can be created with specific permissions and access levels to suit the requirements of the organization.", + "TABLE_HEADER": { + "NAME": "Imię", + "DESCRIPTION": "Opis", + "PERMISSIONS": "Permissions", + "ACTIONS": "Akcje" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "Imię", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "Nazwa jest wymagana." + }, + "DESCRIPTION": { + "LABEL": "Opis", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "Opis jest wymagany." + }, + "PERMISSIONS": { + "LABEL": "Permissions", + "ERROR": "Permissions are required." + }, + "CANCEL_BUTTON_TEXT": "Anuluj", + "API": { + "ERROR_MESSAGE": "Nie można połączyć się z serwerem Woot. Spróbuj ponownie." + } + }, + "ADD": { + "TITLE": "Add custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Prześlij", + "API": { + "SUCCESS_MESSAGE": "Custom role added successfully." + } + }, + "EDIT": { + "BUTTON_TEXT": "Edytuj", + "TITLE": "Edit custom role", + "DESC": " Custom roles allows you to create roles with specific permissions and access levels to suit the requirements of the organization.", + "SUBMIT": "Aktualizuj", + "API": { + "SUCCESS_MESSAGE": "Custom role updated successfully." + } + }, + "DELETE": { + "BUTTON_TEXT": "Usuń", + "API": { + "SUCCESS_MESSAGE": "Custom role deleted successfully.", + "ERROR_MESSAGE": "Nie można połączyć się z serwerem Woot. Spróbuj ponownie." + }, + "CONFIRM": { + "TITLE": "Potwierdzenie usunięcia", + "MESSAGE": "Czy jesteś pewien, że chcesz usunąć ", + "YES": "Tak, usuń ", + "NO": "No, keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/datePicker.json b/app/javascript/dashboard/i18n/locale/pl/datePicker.json new file mode 100644 index 0000000..6a3ca94 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Zastosuj", + "CLEAR_BUTTON": "Clear", + "DATE_RANGE_INPUT": { + "START": "Start Date", + "END": "End Date" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "DATE RANGE", + "LAST_7_DAYS": "Ostatnie 7 dni", + "LAST_30_DAYS": "Ostatnie 30 dni", + "LAST_3_MONTHS": "Ostatnie 3 miesiące", + "LAST_6_MONTHS": "Ostatnie 6 miesięcy", + "LAST_YEAR": "Ostatni rok", + "CUSTOM_RANGE": "Niestandardowy zakres dat" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/emoji.json b/app/javascript/dashboard/i18n/locale/pl/emoji.json new file mode 100644 index 0000000..b0be442 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Wyszukaj emoji", + "NOT_FOUND": "Nie znaleziono emoji pasującego do wyszukiwania", + "REMOVE": "Usuń" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/general.json b/app/javascript/dashboard/i18n/locale/pl/general.json new file mode 100644 index 0000000..9a0d9b7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Showing {firstIndex}-{lastIndex} of {totalCount} items", + "PHONE_INPUT": { + "PLACEHOLDER": "Szukaj", + "EMPTY_STATE": "Nie znaleziono rekordów" + }, + "CLOSE": "Zamknij", + "BETA": "Beta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/generalSettings.json b/app/javascript/dashboard/i18n/locale/pl/generalSettings.json new file mode 100644 index 0000000..3798b6f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "You have exceeded the conversation limit. Hacker plan allows only 500 conversations.", + "INBOXES": "You have exceeded the inbox limit. Hacker plan only supports website live-chat. Additional inboxes like email, WhatsApp etc. require a paid plan.", + "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.", + "NON_ADMIN": "Please contact your administrator to upgrade the plan and continue using all features." + }, + "TITLE": "Ustawienia konta", + "SUBMIT": "Zaktualizuj ustawienia", + "BACK": "Powrót", + "DISMISS": "Odrzuć", + "UPDATE": { + "ERROR": "Nie udało się zaktualizować ustawień, spróbuj ponownie!", + "SUCCESS": "Ustawienia konta zostały pomyślnie zaktualizowane" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Delete your Account", + "NOTE": "Once you delete your account, all your data will be deleted.", + "BUTTON_TEXT": "Delete Your Account", + "CONFIRM": { + "TITLE": "Delete Account", + "MESSAGE": "Deleting your Account is irreversible. Enter your account name below to confirm you want to permanently delete it.", + "BUTTON_TEXT": "Usuń", + "DISMISS": "Anuluj", + "PLACE_HOLDER": "Proszę wpisać {accountName}, aby potwierdzić" + }, + "SUCCESS": "Account marked for deletion", + "FAILURE": "Could not delete account, try again!", + "SCHEDULED_DELETION": { + "TITLE": "Account Scheduled for Deletion", + "MESSAGE_MANUAL": "This account is scheduled for deletion on {deletionDate}. This was requested by an administrator. You can cancel the deletion before this date.", + "MESSAGE_INACTIVITY": "This account is scheduled for deletion on {deletionDate} due to account inactivity. You can cancel the deletion before this date.", + "CLEAR_BUTTON": "Cancel Scheduled Deletion" + } + }, + "FORM": { + "ERROR": "Proszę poprawić błędy formularza", + "GENERAL_SECTION": { + "TITLE": "Ustawienia ogólne", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "ID konta", + "NOTE": "To ID jest wymagane, jeśli tworzysz integrację opartą na API" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolve conversations", + "NOTE": "This configuration would allow you to automatically resolve the conversation after a certain period of inactivity.", + "DURATION": { + "LABEL": "Inactivity duration", + "HELP": "Time period of inactivity after which conversation is auto-resolved", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + } + }, + "MESSAGE": { + "LABEL": "Custom auto-resolution message", + "PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "HELP": "Message sent to the customer after conversation is auto-resolved" + }, + "PREFERENCES": "Preferencje", + "LABEL": { + "LABEL": "Add label after auto-resolution", + "PLACEHOLDER": "Select a label" + }, + "IGNORE_WAITING": { + "LABEL": "Skip conversations waiting for agent’s reply" + }, + "UPDATE_BUTTON": "Save Changes" + }, + "NAME": { + "LABEL": "Nazwa konta", + "PLACEHOLDER": "Nazwa konta", + "ERROR": "Wprowadź poprawną nazwę konta" + }, + "LANGUAGE": { + "LABEL": "Język strony", + "PLACEHOLDER": "Język konta", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Domena przychodzących wiadomości e-mail", + "PLACEHOLDER": "Domena, na której otrzymujesz wiadomości e-mail", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "E-mail obsługi", + "PLACEHOLDER": "E-mail obsługi klienta Twojej firmy", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Exclude unattended conversations", + "HELP": "When enabled, the system will skip resolving conversations that are still waiting for an agent's reply." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcribe Audio Messages", + "NOTE": "Automatically transcribe audio messages in conversations. Generate a text transcript whenever an audio message is sent or received, and display it alongside the message.", + "API": { + "SUCCESS": "Audio transcription setting updated successfully", + "ERROR": "Failed to update audio transcription setting" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Inactivity duration for resolution", + "HELP": "Duration after a conversation should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Auto resolve duration should be between 10 minutes and 999 days", + "API": { + "SUCCESS": "Auto resolve settings updated successfully", + "ERROR": "Failed to update auto resolve settings" + }, + "UPDATE_BUTTON": "Aktualizuj", + "MESSAGE_LABEL": "Custom resolution message", + "MESSAGE_PLACEHOLDER": "Conversation was marked resolved by system due to 15 days of inactivity", + "MESSAGE_HELP": "This message is sent to the customer when a conversation is automatically resolved by the system due to inactivity." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "Kontynuacja rozmów za pomocą wiadomości e-mail jest włączona dla Twojego konta.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "Możesz teraz odbierać wiadomości e-mail na swojej własnej domenie." + } + }, + "UPDATE_CHATWOOT": "Dostępna jest aktualizacja do wersji {latestChatwootVersion} Chatwoot. Proszę zaktualizować swoją instancję.", + "LEARN_MORE": "Dowiedz się więcej", + "PAYMENT_PENDING": "Twoja płatność jest w toku. Zaktualizuj informacje o płatności, aby kontynuować korzystanie z Chatwoot.", + "UPGRADE": "Upgrade to continue using Chatwoot", + "LIMITS_UPGRADE": "Twoje konto przekroczyło limit użytkowania. Zaktualizuj swój plan, aby kontynuować korzystanie z Chatwoot.", + "OPEN_BILLING": "Otwórz fakturę" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Naciśnij Enter, aby wybrać", + "ENTER_TO_REMOVE": "Naciśnij Enter, aby usunąć", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "Wybierz jeden", + "SELECT": "Wybierz" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Powiadomienia", + "MARK_ALL_DONE": "Oznacz wszystkie jako zrobione", + "DELETE_TITLE": "usunięto", + "UNREAD_NOTIFICATION": { + "TITLE": "Nieprzeczytane powiadomienia", + "ALL_NOTIFICATIONS": "Wyświetl wszystkie powiadomienia", + "LOADING_UNREAD_MESSAGE": "Ładowanie nieprzeczytanych powiadomień...", + "EMPTY_MESSAGE": "Nie masz żadnych nieprzeczytanych powiadomień" + }, + "LIST": { + "LOADING_MESSAGE": "Ładowanie powiadomień...", + "404": "Nie znaleziono powiadomień", + "TABLE_HEADER": [ + "Nazwisko", + "Numer telefonu", + "Rozmowy", + "Ostatni kontakt" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "Nowa rozmowa", + "conversation_assignment": "Przypisanie rozmowy", + "assigned_conversation_new_message": "Nowa wiadomość", + "participating_conversation_new_message": "Nowa wiadomość", + "conversation_mention": "Wzmianka", + "sla_missed_first_response": "SLA Missed", + "sla_missed_next_response": "SLA Missed", + "sla_missed_resolution": "SLA Missed" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Niedostępny", + "RECONNECTING": "Reconnecting...", + "RECONNECT_SUCCESS": "Reconnected" + }, + "BUTTON": { + "REFRESH": "Odśwież" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Szukaj lub przejdź do", + "SECTIONS": { + "GENERAL": "Ogólne", + "REPORTS": "Raporty", + "CONVERSATION": "Rozmowa", + "BULK_ACTIONS": "Bulk Actions", + "CHANGE_ASSIGNEE": "Zmień przypisanego", + "CHANGE_PRIORITY": "Zmień priorytet", + "CHANGE_TEAM": "Zmień zespół", + "SNOOZE_CONVERSATION": "Zatrzymaj rozmowę", + "ADD_LABEL": "Dodaj etykietę do rozmowy", + "REMOVE_LABEL": "Usuń etykietę z rozmowy", + "SETTINGS": "Ustawienia", + "AI_ASSIST": "AI Assist", + "APPEARANCE": "Appearance", + "SNOOZE_NOTIFICATION": "Snooze Notification" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Przejdź do pulpitu rozmów", + "GO_TO_CONTACTS_DASHBOARD": "Przejdź do pulpitu kontaktów", + "GO_TO_REPORTS_OVERVIEW": "Przejdź do przeglądu raportów", + "GO_TO_CONVERSATION_REPORTS": "Przejdź do raportów rozmów", + "GO_TO_AGENT_REPORTS": "Przejdź do raportów agentów", + "GO_TO_LABEL_REPORTS": "Przejdź do raportów etykiet", + "GO_TO_INBOX_REPORTS": "Przejdź do raportów skrzynek odbiorczych", + "GO_TO_TEAM_REPORTS": "Przejdź do raportów zespołów", + "GO_TO_SETTINGS_AGENTS": "Przejdź do ustawień agentów", + "GO_TO_SETTINGS_TEAMS": "Przejdź do ustawień zespołów", + "GO_TO_SETTINGS_INBOXES": "Przejdź do ustawień skrzynek odbiorczych", + "GO_TO_SETTINGS_LABELS": "Przejdź do ustawień etykiet", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Przejdź do ustawień gotowych odpowiedzi", + "GO_TO_SETTINGS_APPLICATIONS": "Przejdź do ustawień aplikacji", + "GO_TO_SETTINGS_ACCOUNT": "Przejdź do ustawień konta", + "GO_TO_SETTINGS_PROFILE": "Przejdź do ustawień profilu", + "GO_TO_NOTIFICATIONS": "Przejdź do powiadomień", + "ADD_LABELS_TO_CONVERSATION": "Dodaj etykietę do rozmowy", + "ASSIGN_AN_AGENT": "Przypisz agenta", + "AI_ASSIST": "AI Assist", + "ASSIGN_PRIORITY": "Przypisz priorytet", + "ASSIGN_A_TEAM": "Przypisz zespół", + "MUTE_CONVERSATION": "Wycisz rozmowę", + "UNMUTE_CONVERSATION": "Wyłącz wyciszenie rozmowy", + "REMOVE_LABEL_FROM_CONVERSATION": "Usuń etykietę z rozmowy", + "REOPEN_CONVERSATION": "Ponownie otwórz rozmowę", + "RESOLVE_CONVERSATION": "Zamknij rozmowę", + "SEND_TRANSCRIPT": "Wyślij transkrypt rozmowy", + "SNOOZE_CONVERSATION": "Zatrzymaj rozmowę", + "UNTIL_NEXT_REPLY": "Do następnej odpowiedzi", + "UNTIL_NEXT_WEEK": "Do następnego tygodnia", + "UNTIL_TOMORROW": "Do jutra", + "UNTIL_NEXT_MONTH": "Do następnego miesiąca", + "AN_HOUR_FROM_NOW": "Do godziny od teraz", + "UNTIL_CUSTOM_TIME": "Niestandardowe...", + "CHANGE_APPEARANCE": "Change Appearance", + "LIGHT_MODE": "Light", + "DARK_MODE": "Dark", + "SYSTEM_MODE": "System", + "SNOOZE_NOTIFICATION": "Snooze Notification" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Ładowanie aplikacji pulpitu..." + }, + "COMMON": { + "OR": "Or", + "CLICK_HERE": "kliknij tutaj" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/helpCenter.json b/app/javascript/dashboard/i18n/locale/pl/helpCenter.json new file mode 100644 index 0000000..e1f2ce0 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Centrum pomocy", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "Utwórz portal" + }, + "HEADER": { + "FILTER": "Filtruj według", + "SORT": "Sortuj według", + "LOCALE": "Język", + "SETTINGS_BUTTON": "Ustawienia", + "NEW_BUTTON": "Nowy artykuł", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Opublikowane", + "DRAFT": "Szkic", + "ARCHIVED": "Zarchiwizowane" + }, + "TITLES": { + "ALL_ARTICLES": "Wszystkie artykuły", + "MINE": "Moje artykuły", + "DRAFT": "Artykuły w trakcie tworzenia", + "ARCHIVED": "Archiwalne artykuły" + }, + "LOCALE_SELECT": { + "TITLE": "Select locale", + "PLACEHOLDER": "Select locale", + "NO_RESULT": "No locale found", + "SEARCH_PLACEHOLDER": "Search locale" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "Wszystkie artykuły", + "PUBLISH_BUTTON": "Opublikuj", + "MOVE_TO_ARCHIVE_BUTTON": "Przenieś do archiwum", + "PREVIEW": "Podgląd", + "ADD_TRANSLATION": "Dodaj tłumaczenie", + "OPEN_SIDEBAR": "Otwórz panel boczny", + "CLOSE_SIDEBAR": "Zamknij panel boczny", + "SAVING": "Zapisywanie...", + "SAVED": "Zapisano" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Prześlij obraz", + "UPLOADING": "Przesyłanie...", + "SUCCESS": "Obraz został pomyślnie przesłany", + "ERROR": "Błąd podczas przesyłania obrazu", + "UN_AUTHORIZED_ERROR": "You are not authorized to upload images", + "ERROR_FILE_SIZE": "Rozmiar obrazu powinien być mniejszy niż {size}MB", + "ERROR_FILE_FORMAT": "Format obrazu powinien być jpg, jpeg lub png", + "ERROR_FILE_DIMENSIONS": "Wymiary obrazu powinny być mniejsze niż 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Ustawienia artykułu", + "FORM": { + "CATEGORY": { + "LABEL": "Kategoria", + "TITLE": "Wybierz kategorię", + "PLACEHOLDER": "Wybierz kategorię", + "NO_RESULT": "Brak znalezionych kategorii", + "SEARCH_PLACEHOLDER": "Szukaj kategorii" + }, + "AUTHOR": { + "LABEL": "Autor", + "TITLE": "Wybierz autora", + "PLACEHOLDER": "Wybierz autora", + "NO_RESULT": "Brak znalezionych autorów", + "SEARCH_PLACEHOLDER": "Szukaj autora" + }, + "META_TITLE": { + "LABEL": "Tytuł meta", + "PLACEHOLDER": "Dodaj tytuł meta" + }, + "META_DESCRIPTION": { + "LABEL": "Opis meta", + "PLACEHOLDER": "Dodaj opis meta dla lepszych wyników SEO..." + }, + "META_TAGS": { + "LABEL": "Tagi meta", + "PLACEHOLDER": "Dodaj tagi meta oddzielone przecinkami..." + } + }, + "BUTTONS": { + "ARCHIVE": "Archiwizuj artykuł", + "DELETE": "Usuń artykuł" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Bez kategorii", + "SEARCH_RESULTS": "Search results for {query}", + "EMPTY_TEXT": "Search for articles to insert into replies.", + "SEARCH_LOADER": "Wyszukiwanie...", + "INSERT_ARTICLE": "Wstaw", + "NO_RESULT": "Brak znalezionych artykułów", + "COPY_LINK": "Skopiuj link do artykułu do schowka", + "OPEN_LINK": "Otwórz artykuł w nowej karcie", + "PREVIEW_LINK": "Podgląd artykułu" + }, + "PORTAL": { + "HEADER": "Portale", + "DEFAULT": "Domyślny", + "NEW_BUTTON": "Nowy portal", + "ACTIVE_BADGE": "aktywna", + "CHOOSE_LOCALE_LABEL": "Wybierz język", + "LOADING_MESSAGE": "Ładowanie portalów...", + "ARTICLES_LABEL": "artykułów", + "NO_PORTALS_MESSAGE": "Brak dostępnych portali", + "ADD_NEW_LOCALE": "Dodaj nowy język", + "POPOVER": { + "TITLE": "Portale", + "PORTAL_SETTINGS": "Ustawienia portalu", + "SUBTITLE": "Masz wiele portali i możesz mieć różne języki dla każdego z nich.", + "CANCEL_BUTTON_LABEL": "Anuluj", + "CHOOSE_LOCALE_BUTTON": "Wybierz język" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "artykułów", + "ADD": "Dodaj język", + "VISIT": "Odwiedź stronę", + "SETTINGS": "Ustawienia", + "DELETE": "Usuń" + }, + "PORTAL_CONFIG": { + "TITLE": "Konfiguracje portalu", + "ITEMS": { + "NAME": "Nazwa", + "DOMAIN": "Niestandardowa domena", + "SLUG": "Slug", + "TITLE": "Tytuł portalu", + "THEME": "Kolor motywu", + "SUB_TEXT": "Tekst dodatkowy portalu" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Dostępne języki", + "TABLE": { + "NAME": "Nazwa języka", + "CODE": "Kod języka", + "ARTICLE_COUNT": "Liczba artykułów", + "CATEGORIES": "Liczba kategorii", + "SWAP": "Zamień", + "DELETE": "Usuń", + "DEFAULT_LOCALE": "Domyślny" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Usuń portal", + "MESSAGE": "Czy na pewno chcesz usunąć ten portal", + "YES": "Tak, usuń portal", + "NO": "Nie, zachowaj portal", + "API": { + "DELETE_SUCCESS": "Portal został pomyślnie usunięty", + "DELETE_ERROR": "Błąd podczas usuwania portalu" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edytuj portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Podstawowe informacje" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Dostosowanie portalu" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Kategorie" + }, + "LOCALE_SETTINGS": { + "TITLE": "Języki" + } + }, + "CATEGORIES": { + "TITLE": "Kategorie w", + "NEW_CATEGORY": "Nowa kategoria", + "TABLE": { + "NAME": "Nazwa", + "DESCRIPTION": "Opis", + "LOCALE": "Język", + "ARTICLE_COUNT": "Liczba artykułów", + "ACTION_BUTTON": { + "EDIT": "Edytuj kategorię", + "DELETE": "Usuń kategorię" + }, + "EMPTY_TEXT": "Nie znaleziono kategorii" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Zaktualizuj podstawowe ustawienia" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Informacje o centrum pomocy", + "BODY": "Podstawowe informacje o portalu" + }, + "CUSTOMIZATION": { + "TITLE": "Dostosowanie centrum pomocy", + "BODY": "Dostosuj portal" + }, + "FINISH": { + "TITLE": "Gotowe! 🎉", + "BODY": "Wszystko jest gotowe!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Powrót", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Utwórz portal", + "TITLE": "Informacje o centrum pomocy", + "CREATE_BASIC_SETTING_BUTTON": "Utwórz podstawowe ustawienia portalu" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Dostosowanie portalu", + "TITLE": "Dostosowanie centrum pomocy", + "UPDATE_PORTAL_BUTTON": "Zaktualizuj ustawienia portalu" + }, + "FINISH_PAGE": { + "TITLE": "Gotowe!🎉 Wszystko jest gotowe!", + "MESSAGE": "Możesz teraz zobaczyć utworzony portal na stronie z wszystkimi portalami.", + "FINISH": "Przejdź do strony z wszystkimi portalami" + } + }, + "LOGO": { + "LABEL": "Logo", + "UPLOAD_BUTTON": "Prześlij logo", + "HELP_TEXT": "To logo będzie wyświetlane w nagłówku portalu.", + "IMAGE_UPLOAD_SUCCESS": "Logo uploaded successfully", + "IMAGE_UPLOAD_ERROR": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Error while deleting logo" + }, + "NAME": { + "LABEL": "Nazwa", + "PLACEHOLDER": "Nazwa portalu", + "HELP_TEXT": "Nazwa będzie używana w publicznym portalu wewnętrznie.", + "ERROR": "Nazwa jest wymagana" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug portalu dla adresów URL", + "ERROR": "Slug jest wymagany" + }, + "DOMAIN": { + "LABEL": "Niestandardowa domena", + "PLACEHOLDER": "Niestandardowa domena portalu", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}", + "ERROR": "Podaj poprawny adres URL domeny" + }, + "HOME_PAGE_LINK": { + "LABEL": "Link do strony głównej", + "PLACEHOLDER": "Link do strony głównej portalu", + "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}", + "ERROR": "Podaj poprawny adres URL strony głównej" + }, + "THEME_COLOR": { + "LABEL": "Kolor motywu portalu", + "HELP_TEXT": "Ten kolor będzie widoczny jako kolor motywu portalu." + }, + "PAGE_TITLE": { + "LABEL": "Tytuł strony", + "PLACEHOLDER": "Tytuł strony portalu", + "HELP_TEXT": "Tytuł strony będzie używany w publicznym portalu.", + "ERROR": "Tytuł strony jest wymagany" + }, + "HEADER_TEXT": { + "LABEL": "Tekst nagłówka", + "PLACEHOLDER": "Tekst nagłówka portalu", + "HELP_TEXT": "Tekst nagłówka portalu będzie używany w publicznym portalu.", + "ERROR": "Tekst nagłówka portalu jest wymagany" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal utworzony pomyślnie.", + "ERROR_MESSAGE_FOR_BASIC": "Nie udało się utworzyć portalu. Spróbuj ponownie.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal zaktualizowany pomyślnie.", + "ERROR_MESSAGE_FOR_UPDATE": "Nie udało się zaktualizować portalu. Spróbuj ponownie." + } + }, + "ADD_LOCALE": { + "TITLE": "Dodaj nowy język", + "SUB_TITLE": "Dodaje nowy język do listy dostępnych tłumaczeń.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Język", + "PLACEHOLDER": "Wybierz język", + "ERROR": "Język jest wymagany" + }, + "BUTTONS": { + "CREATE": "Utwórz język", + "CANCEL": "Anuluj" + }, + "API": { + "SUCCESS_MESSAGE": "Język dodany pomyślnie", + "ERROR_MESSAGE": "Nie można dodać języka. Spróbuj ponownie." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Domyślny język zaktualizowany pomyślnie", + "ERROR_MESSAGE": "Nie można zaktualizować domyślnego języka. Spróbuj ponownie." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Język usunięty z portalu pomyślnie", + "ERROR_MESSAGE": "Nie można usunąć języka z portalu. Spróbuj ponownie." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Ładowanie artykułów...", + "404": "Nie znaleziono artykułów pasujących do wyszukiwania 🔍", + "NO_ARTICLES": "Brak dostępnych artykułów", + "HEADERS": { + "TITLE": "Tytuł", + "CATEGORY": "Kategoria", + "READ_COUNT": "Views", + "STATUS": "Status", + "LAST_EDITED": "Ostatnio edytowane" + }, + "COLUMNS": { + "BY": "przez", + "AUTHOR_NOT_AVAILABLE": "Author is not available" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Ładowanie artykułu...", + "TITLE_PLACEHOLDER": "Tutaj wprowadź tytuł artykułu", + "CONTENT_PLACEHOLDER": "Napisz tutaj treść artykułu", + "API": { + "ERROR": "Błąd podczas zapisywania artykułu" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Błąd podczas publikowania artykułu", + "SUCCESS": "Artykuł opublikowany pomyślnie" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Błąd podczas archiwizowania artykułu", + "SUCCESS": "Artykuł zarchiwizowany pomyślnie" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Error while drafting article", + "SUCCESS": "Article drafted successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Potwierdź usunięcie", + "MESSAGE": "Czy na pewno chcesz usunąć ten artykuł?", + "YES": "Tak, usuń", + "NO": "Nie, zachowaj" + } + }, + "API": { + "SUCCESS_MESSAGE": "Artykuł pomyślnie usunięty", + "ERROR_MESSAGE": "Błąd podczas usuwania artykułu" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Proszę dodać tytuł i treść artykułu, aby móc zaktualizować ustawienia" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Wyszukaj artykułów" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Utwórz kategorię", + "SUB_TITLE": "Kategoria będzie używana w publicznym portalu do kategoryzacji artykułów.", + "PORTAL": "Portal", + "LOCALE": "Język", + "NAME": { + "LABEL": "Nazwa", + "PLACEHOLDER": "Nazwa kategorii", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Nazwa jest wymagana" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug kategorii dla adresów URL", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/pl-PL/categories/my-slug", + "ERROR": "Slug jest wymagany" + }, + "DESCRIPTION": { + "LABEL": "Opis", + "PLACEHOLDER": "Krótki opis kategorii.", + "ERROR": "Opis jest wymagany" + }, + "BUTTONS": { + "CREATE": "Utwórz kategorię", + "CANCEL": "Anuluj" + }, + "API": { + "SUCCESS_MESSAGE": "Kategoria utworzona pomyślnie", + "ERROR_MESSAGE": "Nie można utworzyć kategorii" + } + }, + "EDIT": { + "TITLE": "Edytuj kategorię", + "SUB_TITLE": "Edycja kategorii spowoduje aktualizację kategorii w publicznym portalu.", + "PORTAL": "Portal", + "LOCALE": "Język", + "NAME": { + "LABEL": "Nazwa", + "PLACEHOLDER": "Nazwa kategorii", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", + "ERROR": "Nazwa jest wymagana" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug kategorii dla adresów URL", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/pl-PL/categories/my-slug", + "ERROR": "Slug jest wymagany" + }, + "DESCRIPTION": { + "LABEL": "Opis", + "PLACEHOLDER": "Krótki opis kategorii.", + "ERROR": "Opis jest wymagany" + }, + "BUTTONS": { + "CREATE": "Aktualizuj kategorię", + "CANCEL": "Anuluj" + }, + "API": { + "SUCCESS_MESSAGE": "Kategoria zaktualizowana pomyślnie", + "ERROR_MESSAGE": "Nie można zaktualizować kategorii" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Kategoria pomyślnie usunięta", + "ERROR_MESSAGE": "Nie można usunąć kategorii" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Search articles", + "PLACEHOLDER": "Search articles", + "NO_RESULT": "Brak znalezionych artykułów", + "SEARCHING": "Wyszukiwanie...", + "SEARCH_BUTTON": "Szukaj", + "INSERT_ARTICLE": "Insert link", + "IFRAME_ERROR": "URL is empty or invalid. Unable to display content.", + "OPEN_ARTICLE_SEARCH": "Insert article from Help Center", + "SUCCESS_ARTICLE_INSERTED": "Article inserted successfully", + "PREVIEW_LINK": "Podgląd artykułu", + "CANCEL": "Zamknij", + "BACK": "Powrót", + "BACK_RESULTS": "Back to results" + }, + "UPGRADE_PAGE": { + "TITLE": "Centrum pomocy", + "DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Upgrade your subscription to enable this feature.", + "SELF_HOSTED_DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Please contact your administrator to enable this feature.", + "BUTTON": { + "LEARN_MORE": "Dowiedz się więcej", + "UPGRADE": "Upgrade" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Multiple portals", + "DESCRIPTION": "Create multiple help center portals for different products using the same account." + }, + "LOCALES": { + "TITLE": "Full support for locales", + "DESCRIPTION": "Localize the portal in your language. We support all locales and allow translations for every article." + }, + "SEO": { + "TITLE": "SEO-friendly design", + "DESCRIPTION": "Customize your meta tags to improve your visibility on search engines with our SEO-friendly pages." + }, + "API": { + "TITLE": "Full API support", + "DESCRIPTION": "Use the portal as a headless CMS with third party front-end frameworks using our APIs." + } + } + }, + "LOADING": "Loading...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} view | {count} views", + "DROPDOWN_MENU": { + "PUBLISH": "Opublikuj", + "DRAFT": "Szkic", + "ARCHIVE": "Archive", + "DELETE": "Usuń" + }, + "STATUS": { + "DRAFT": "Szkic", + "PUBLISHED": "Opublikowane", + "ARCHIVED": "Zarchiwizowane" + }, + "CATEGORY": { + "UNCATEGORISED": "Uncategorised" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "All articles", + "MINE": "Moje", + "DRAFT": "Szkic", + "PUBLISHED": "Opublikowane", + "ARCHIVED": "Zarchiwizowane" + }, + "CATEGORY": { + "ALL": "All categories" + }, + "LOCALE": { + "ALL": "All locales" + }, + "NEW_ARTICLE": "New article" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Write an article", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "New article" + }, + "MINE": { + "TITLE": "You haven't written any articles here", + "SUBTITLE": "All articles written by you show up here for quick access." + }, + "DRAFT": { + "TITLE": "There are no articles in drafts", + "SUBTITLE": "Draft articles will appear here" + }, + "PUBLISHED": { + "TITLE": "There are no published articles", + "SUBTITLE": "Published articles will appear here" + }, + "ARCHIVED": { + "TITLE": "There are no articles in the archive", + "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages" + }, + "CATEGORY": { + "TITLE": "There are no articles in this category", + "SUBTITLE": "Articles in this category will appear here" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "Nowa kategoria", + "EDIT_CATEGORY": "Edytuj kategorię", + "CATEGORIES_COUNT": "{n} category | {n} categories", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categories ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "Nie znaleziono kategorii", + "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Kategoria utworzona pomyślnie", + "ERROR_MESSAGE": "Nie można utworzyć kategorii" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Kategoria zaktualizowana pomyślnie", + "ERROR_MESSAGE": "Nie można zaktualizować kategorii" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Kategoria pomyślnie usunięta", + "ERROR_MESSAGE": "Nie można usunąć kategorii" + } + }, + "HEADER": { + "CREATE": "Utwórz kategorię", + "EDIT": "Edytuj kategorię", + "DESCRIPTION": "Edycja kategorii spowoduje aktualizację kategorii w publicznym portalu.", + "PORTAL": "Portal", + "LOCALE": "Język" + }, + "FORM": { + "NAME": { + "LABEL": "Imię", + "PLACEHOLDER": "Nazwa kategorii", + "ERROR": "Nazwa jest wymagana" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug kategorii dla adresów URL", + "ERROR": "Slug jest wymagany", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Opis", + "PLACEHOLDER": "Krótki opis kategorii.", + "ERROR": "Opis jest wymagany" + } + }, + "BUTTONS": { + "CREATE": "Stwórz", + "EDIT": "Aktualizuj", + "CANCEL": "Anuluj" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "No locales available | {n} locale | {n} locales", + "NEW_LOCALE_BUTTON_TEXT": "New locale", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles", + "CATEGORIES_COUNT": "{count} category | {count} categories", + "DEFAULT": "Domyślny", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Make default", + "DELETE": "Usuń" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Dodaj nowy język", + "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", + "COMBOBOX": { + "PLACEHOLDER": "Select locale..." + }, + "API": { + "SUCCESS_MESSAGE": "Język dodany pomyślnie", + "ERROR_MESSAGE": "Nie można dodać języka. Spróbuj ponownie." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Zapisywanie...", + "SAVED": "Zapisano" + }, + "PREVIEW": "Podgląd", + "PUBLISH": "Opublikuj", + "DRAFT": "Szkic", + "ARCHIVE": "Archive", + "BACK_TO_ARTICLES": "Back to articles" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "More properties", + "UNCATEGORIZED": "Bez kategorii", + "EDITOR_PLACEHOLDER": "Write something..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Article properties", + "META_DESCRIPTION": "Opis meta", + "META_DESCRIPTION_PLACEHOLDER": "Add meta description", + "META_TITLE": "Tytuł meta", + "META_TITLE_PLACEHOLDER": "Add meta title", + "META_TAGS": "Tagi meta", + "META_TAGS_PLACEHOLDER": "Add meta tags" + }, + "API": { + "ERROR": "Błąd podczas zapisywania artykułu" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "New portal", + "PORTALS": "Portale", + "CREATE_PORTAL": "Create and manage multiple portals", + "ARTICLES": "artykułów", + "DOMAIN": "domena", + "PORTAL_NAME": "Nazwa portalu" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Create new portal", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "Stwórz", + "NAME": { + "LABEL": "Imię", + "PLACEHOLDER": "User Guide | Chatwoot", + "MESSAGE": "Choose an name for your portal.", + "ERROR": "Nazwa jest wymagana" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Slug jest wymagany", + "FORMAT_ERROR": "Please enter a valid slug, for eg: user-guide" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logo", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo", + "IMAGE_DELETE_SUCCESS": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Unable to delete logo", + "IMAGE_UPLOAD_SIZE_ERROR": "Rozmiar obrazu powinien być mniejszy niż {size}MB" + }, + "NAME": { + "LABEL": "Imię", + "PLACEHOLDER": "Nazwa portalu", + "ERROR": "Nazwa jest wymagana" + }, + "HEADER_TEXT": { + "LABEL": "Header text", + "PLACEHOLDER": "Tekst nagłówka portalu" + }, + "PAGE_TITLE": { + "LABEL": "Page title", + "PLACEHOLDER": "Tytuł strony portalu" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home page link", + "PLACEHOLDER": "Link do strony głównej portalu", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Live chat widget", + "PLACEHOLDER": "Select live chat widget", + "HELP_TEXT": "Select a live chat widget that will appear on your help center", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Brand color" + }, + "SAVE_CHANGES": "Save changes" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Niestandardowa domena", + "LABEL": "Niestandardowa domena:", + "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Niestandardowa domena portalu", + "EDIT_BUTTON": "Edytuj", + "ADD_BUTTON": "Add custom domain", + "STATUS": { + "LIVE": "Na żywo", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Add custom domain", + "EDIT_HEADER": "Edit custom domain", + "ADD_CONFIRM_BUTTON_LABEL": "Add domain", + "EDIT_CONFIRM_BUTTON_LABEL": "Update domain", + "LABEL": "Niestandardowa domena", + "PLACEHOLDER": "Niestandardowa domena portalu", + "ERROR": "Custom domain is required", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS configuration", + "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "Wyślij" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Delete {portalName}", + "HEADER": "Usuń portal", + "DESCRIPTION": "Permanently delete this portal. This action is irreversible", + "DIALOG": { + "HEADER": "Sure you want to delete {portalName}?", + "DESCRIPTION": "This is a permanent action that cannot be reversed.", + "CONFIRM_BUTTON_LABEL": "Usuń" + } + }, + "EDIT_CONFIGURATION": "Edit configuration" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal utworzony pomyślnie", + "ERROR_MESSAGE": "Unable to create portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal zaktualizowany pomyślnie", + "ERROR_MESSAGE": "Unable to update portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "Przesyłanie...", + "UPLOAD": "Upload & Process", + "CANCEL": "Anuluj", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Generowanie...", + "CONFIRM_DELETE": "Are you sure you want to delete {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Zakończone", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/inbox.json b/app/javascript/dashboard/i18n/locale/pl/inbox.json new file mode 100644 index 0000000..d7f3183 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "My Inbox", + "DISPLAY_DROPDOWN": "Display", + "LOADING": "Fetching notifications", + "404": "There are no active notifications in this group.", + "NO_NOTIFICATIONS": "No notifications", + "NOTE": "Notifications from all subscribed inboxes", + "NO_MESSAGES_AVAILABLE": "Oops! Not able to fetch messages", + "SNOOZED_UNTIL": "Uśpione do", + "SNOOZED_UNTIL_TOMORROW": "Uśpij do jutra", + "SNOOZED_UNTIL_NEXT_WEEK": "Uśpione do następnego tygodnia" + }, + "ACTION_HEADER": { + "SNOOZE": "Snooze notification", + "DELETE": "Delete notification", + "BACK": "Powrót" + }, + "TYPES": { + "CONVERSATION_MENTION": "You have been mentioned in a conversation", + "CONVERSATION_CREATION": "New conversation created", + "CONVERSATION_ASSIGNMENT": "A conversation has been assigned to you", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "New message in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "New message in a conversation you are participating in", + "SLA_MISSED_FIRST_RESPONSE": "SLA target first response missed for conversation", + "SLA_MISSED_NEXT_RESPONSE": "SLA target next response missed for conversation", + "SLA_MISSED_RESOLUTION": "SLA target resolution missed for conversation" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Mentioned", + "CONVERSATION_ASSIGNMENT": "Assigned to you", + "CONVERSATION_CREATION": "New Conversation", + "SLA_MISSED_FIRST_RESPONSE": "SLA breach", + "SLA_MISSED_NEXT_RESPONSE": "SLA breach", + "SLA_MISSED_RESOLUTION": "SLA breach", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Nowa wiadomość", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Nowa wiadomość", + "SNOOZED_UNTIL": "Snoozed for {time}", + "SNOOZED_ENDS": "Snooze ended" + }, + "NO_CONTENT": "Brak treści", + "MENU_ITEM": { + "MARK_AS_READ": "Mark as read", + "MARK_AS_UNREAD": "Oznacz jako nieprzeczytane", + "SNOOZE": "Uśpij", + "DELETE": "Usuń", + "MARK_ALL_READ": "Oznacz wszystko jako przeczytane", + "DELETE_ALL": "Delete all", + "DELETE_ALL_READ": "Delete all read" + }, + "DISPLAY_MENU": { + "SORT": "Sort", + "DISPLAY": "Display :", + "SORT_OPTIONS": { + "NEWEST": "Newest", + "OLDEST": "Oldest", + "PRIORITY": "Priorytet" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Uśpij", + "READ": "Przeczytane", + "LABELS": "Etykiety", + "CONVERSATION_ID": "Conversation ID" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notification marked as read", + "MARK_AS_UNREAD": "Notification marked as unread", + "SNOOZE": "Notification snoozed", + "DELETE": "Notification deleted", + "MARK_ALL_READ": "All notifications marked as read", + "DELETE_ALL": "All notifications deleted", + "DELETE_ALL_READ": "All read notifications deleted" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json new file mode 100644 index 0000000..c304242 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Zarządzanie skrzynkami", + "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.", + "LEARN_MORE": "Learn more about inboxes", + "RECONNECTION_REQUIRED": "Your inbox is disconnected. You won't receive new messages until you reauthorize it.", + "CLICK_TO_RECONNECT": "Click here to reconnect.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "Nie ma żadnych skrzynek odbiorczych przypisanych do tego konta." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Wybierz kanał", + "BODY": "Wybierz dostawcę, którego chcesz zintegrować z Chatwoot." + }, + "INBOX": { + "TITLE": "Utwórz skrzynkę odbiorczą", + "BODY": "Uwierzytelnij swoje konto i utwórz skrzynkę odbiorczą." + }, + "AGENT": { + "TITLE": "Dodaj agentów", + "BODY": "Dodaj agentów do utworzonej skrzynki odbiorczej." + }, + "FINISH": { + "TITLE": "Voilà!", + "BODY": "Wszystko jest gotowe!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Nazwa skrzynki odbiorczej", + "PLACEHOLDER": "Wprowadź nazwę skrzynki odbiorczej (np. Acme Inc).", + "ERROR": "Wprowadź poprawną nazwę skrzynki odbiorczej" + }, + "WEBSITE_NAME": { + "LABEL": "Nazwa strony", + "PLACEHOLDER": "Wprowadź nazwę swojej witryny (np. Acme Inc.)." + }, + "FB": { + "HELP": "PS: Logując się, uzyskujemy dostęp tylko do wiadomości na Twojej stronie. Chatwoot nigdy nie będzie miał dostępu do prywatnych wiadomości.", + "CHOOSE_PAGE": "Wybierz stronę", + "CHOOSE_PLACEHOLDER": "Wybierz stronę z listy", + "INBOX_NAME": "Nazwa skrzynki odbiorczej", + "ADD_NAME": "Dodaj nazwę skrzynki odbiorczej", + "PICK_NAME": "Pick a Name for your Inbox", + "PICK_A_VALUE": "Wybierz wartość", + "CREATE_INBOX": "Utwórz skrzynkę odbiorczą" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continue with Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Connect your Instagram Profile", + "HELP": "To add your Instagram profile as a channel, you need to authenticate your Instagram Profile by clicking on 'Continue with Instagram' ", + "ERROR_MESSAGE": "There was an error connecting to Instagram, please try again", + "ERROR_AUTH": "There was an error connecting to Instagram, please try again", + "NEW_INBOX_SUGGESTION": "This Instagram account was previously linked to a different inbox and has now been migrated here. All new messages will appear here. The old inbox will no longer be able to send or receive messages for this account.", + "DUPLICATE_INBOX_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. You won’t be able to send/receive Instagram messages from this inbox anymore." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "Aby dodać swój profil na Twitterze jako kanał, musisz uwierzytelnić swój profil Twittera, klikając „Zaloguj się przez Twitter”", + "ERROR_MESSAGE": "Wystąpił błąd podczas łączenia z Twitterem. Spróbuj ponownie", + "TWEETS": { + "ENABLE": "Tworzenie konwersacji na podstawie wspomnianych tweetów" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Kanał strony internetowej", + "DESC": "Utwórz kanał dla swojej strony internetowej i zacznij obsługiwać klientów za pomocą naszego widżetu na stronie.", + "LOADING_MESSAGE": "Tworzenie kanału wsparcia dla strony internetowej", + "CHANNEL_AVATAR": { + "LABEL": "Awatar kanału" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "URL webhooka", + "PLACEHOLDER": "Please enter your Webhook URL", + "ERROR": "Wprowadź poprawny adres URL" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Domena strony internetowej", + "PLACEHOLDER": "Wprowadź domenę strony (np. acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Tytuł powitania", + "PLACEHOLDER": "Cześć!" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Tagline powitania", + "PLACEHOLDER": "Łatwo się z nami skontaktujesz. Zadaj pytanie lub podziel się opinią." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Wiadomość powitalna kanału", + "PLACEHOLDER": "Firma Acme Inc zazwyczaj odpowiada w ciągu kilku godzin." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Włącz powitanie dla kanału", + "HELP_TEXT": "Automatycznie wysyłaj wiadomość powitalną, gdy utworzona zostanie nowa rozmowa.", + "ENABLED": "Włączone", + "DISABLED": "Wyłączone" + }, + "REPLY_TIME": { + "TITLE": "Ustaw czas odpowiedzi", + "IN_A_FEW_MINUTES": "W ciągu kilku minut", + "IN_A_FEW_HOURS": "W ciągu kilku godzin", + "IN_A_DAY": "W ciągu dnia", + "HELP_TEXT": "Czas odpowiedzi będzie wyświetlany w widżecie czatu na żywo." + }, + "WIDGET_COLOR": { + "LABEL": "Kolor widżetu", + "PLACEHOLDER": "Zaktualizuj kolor widżetu używany w widżecie" + }, + "SUBMIT_BUTTON": "Utwórz skrzynkę odbiorczą", + "API": { + "ERROR_MESSAGE": "Nie udało się utworzyć kanału dla strony internetowej. Spróbuj ponownie" + } + }, + "TWILIO": { + "TITLE": "Kanał Twilio SMS/WhatsApp", + "DESC": "Zintegruj Twilio i rozpocznij obsługę klientów za pomocą wiadomości SMS lub WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "ID konta", + "PLACEHOLDER": "Wprowadź ID konta Twilio", + "ERROR": "To pole jest wymagane" + }, + "API_KEY": { + "USE_API_KEY": "Use API Key Authentication", + "LABEL": "API Key SID", + "PLACEHOLDER": "Please enter your API Key SID", + "ERROR": "To pole jest wymagane" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Please enter your API Key Secret", + "ERROR": "To pole jest wymagane" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "ID usługi wiadomości", + "PLACEHOLDER": "Wprowadź ID usługi wiadomości Twilio", + "ERROR": "To pole jest wymagane", + "USE_MESSAGING_SERVICE": "Użyj usługi wiadomości Twilio" + }, + "CHANNEL_TYPE": { + "LABEL": "Typ kanału", + "ERROR": "Wybierz typ kanału" + }, + "AUTH_TOKEN": { + "LABEL": "Token uwierzytelniania", + "PLACEHOLDER": "Wprowadź token uwierzytelniania Twilio", + "ERROR": "To pole jest wymagane" + }, + "CHANNEL_NAME": { + "LABEL": "Nazwa skrzynki odbiorczej", + "PLACEHOLDER": "Wprowadź nazwę skrzynki odbiorczej", + "ERROR": "To pole jest wymagane" + }, + "PHONE_NUMBER": { + "LABEL": "Numer telefonu", + "PLACEHOLDER": "Wprowadź numer telefonu, z którego będzie wysyłana wiadomość.", + "ERROR": "Podaj poprawny numer telefonu, który zaczyna się od znaku „+” i nie zawiera spacji." + }, + "API_CALLBACK": { + "TITLE": "Adres URL zwrotny API", + "SUBTITLE": "Musisz skonfigurować adres URL zwrotny wiadomości w Twilio z adresem URL podanym tutaj." + }, + "SUBMIT_BUTTON": "Utwórz kanał Twilio", + "API": { + "ERROR_MESSAGE": "Nie udało się uwierzytelnić danych logowania Twilio. Spróbuj ponownie" + } + }, + "SMS": { + "TITLE": "Kanał SMS", + "DESC": "Rozpocznij obsługę klientów za pomocą wiadomości SMS.", + "PROVIDERS": { + "LABEL": "Dostawca API", + "TWILIO": "Twilio", + "BANDWIDTH": "Przepustowość" + }, + "API": { + "ERROR_MESSAGE": "Nie udało się zapisać kanału SMS" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "ID konta", + "PLACEHOLDER": "Wprowadź ID konta przepustowości", + "ERROR": "To pole jest wymagane" + }, + "API_KEY": { + "LABEL": "Klucz API", + "PLACEHOLDER": "Please enter your Bandwidth API Key", + "ERROR": "To pole jest wymagane" + }, + "API_SECRET": { + "LABEL": "Sekret API", + "PLACEHOLDER": "Please enter your Bandwidth API Secret", + "ERROR": "To pole jest wymagane" + }, + "APPLICATION_ID": { + "LABEL": "ID aplikacji", + "PLACEHOLDER": "Wprowadź ID aplikacji przepustowości", + "ERROR": "To pole jest wymagane" + }, + "INBOX_NAME": { + "LABEL": "Nazwa skrzynki odbiorczej", + "PLACEHOLDER": "Wprowadź nazwę skrzynki odbiorczej", + "ERROR": "To pole jest wymagane" + }, + "PHONE_NUMBER": { + "LABEL": "Numer telefonu", + "PLACEHOLDER": "Wprowadź numer telefonu, z którego będzie wysyłana wiadomość.", + "ERROR": "Podaj poprawny numer telefonu, który zaczyna się od znaku „+” i nie zawiera spacji." + }, + "SUBMIT_BUTTON": "Utwórz kanał SMS", + "API": { + "ERROR_MESSAGE": "Nie udało się uwierzytelnić poświadczeń przepustowości. Spróbuj ponownie" + }, + "API_CALLBACK": { + "TITLE": "Adres URL zwrotny API", + "SUBTITLE": "Musisz skonfigurować adres URL zwrotny wiadomości w przepustowości z adresem URL podanym tutaj." + } + } + }, + "WHATSAPP": { + "TITLE": "Kanał WhatsApp", + "DESC": "Rozpocznij obsługę klientów za pomocą wiadomości WhatsApp.", + "PROVIDERS": { + "LABEL": "Dostawca API", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "Chmura WhatsApp", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "Nazwa skrzynki odbiorczej", + "PLACEHOLDER": "Wprowadź nazwę skrzynki odbiorczej", + "ERROR": "To pole jest wymagane" + }, + "PHONE_NUMBER": { + "LABEL": "Numer telefonu", + "PLACEHOLDER": "Wprowadź numer telefonu, z którego zostanie wysłana wiadomość.", + "ERROR": "Podaj poprawny numer telefonu, który zaczyna się od znaku „+” i nie zawiera spacji." + }, + "PHONE_NUMBER_ID": { + "LABEL": "ID numeru telefonu", + "PLACEHOLDER": "Wprowadź ID numeru telefonu uzyskane z panelu dewelopera Facebooka.", + "ERROR": "Wprowadź poprawną wartość." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "ID konta firmowego", + "PLACEHOLDER": "Wprowadź ID konta firmowego uzyskane z panelu dewelopera Facebooka.", + "ERROR": "Wprowadź poprawną wartość." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Token weryfikujący Webhook", + "PLACEHOLDER": "Enter a verify token which you want to configure for Facebook webhooks.", + "ERROR": "Wprowadź poprawną wartość." + }, + "API_KEY": { + "LABEL": "Klucz API", + "SUBTITLE": "Skonfiguruj klucz API WhatsApp.", + "PLACEHOLDER": "Klucz API", + "ERROR": "Wprowadź poprawną wartość." + }, + "API_CALLBACK": { + "TITLE": "Adres URL zwrotny API", + "SUBTITLE": "Musisz skonfigurować adres URL webhooka i token weryfikacyjny w portalu dewelopera Facebooka z podanymi tutaj wartościami.", + "WEBHOOK_URL": "Adres URL webhooka", + "WEBHOOK_VERIFICATION_TOKEN": "Token weryfikacyjny webhooka" + }, + "SUBMIT_BUTTON": "Utwórz kanał WhatsApp", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "Nie udało się zapisać kanału WhatsApp" + } + }, + "VOICE": { + "TITLE": "Voice Channel", + "DESC": "Integrate Twilio Voice and start supporting your customers via phone calls.", + "PHONE_NUMBER": { + "LABEL": "Numer telefonu", + "PLACEHOLDER": "Enter your phone number (e.g. +1234567890)", + "ERROR": "Please provide a valid phone number in E.164 format (e.g. +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "ID konta", + "PLACEHOLDER": "Enter your Twilio Account SID", + "REQUIRED": "Account SID is required" + }, + "AUTH_TOKEN": { + "LABEL": "Token uwierzytelniania", + "PLACEHOLDER": "Enter your Twilio Auth Token", + "REQUIRED": "Auth Token is required" + }, + "API_KEY_SID": { + "LABEL": "API Key SID", + "PLACEHOLDER": "Enter your Twilio API Key SID", + "REQUIRED": "API Key SID is required" + }, + "API_KEY_SECRET": { + "LABEL": "API Key Secret", + "PLACEHOLDER": "Enter your Twilio API Key Secret", + "REQUIRED": "API Key Secret is required" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Create Voice Channel", + "API": { + "ERROR_MESSAGE": "We were not able to create the voice channel" + } + }, + "API_CHANNEL": { + "TITLE": "Kanał API", + "DESC": "Zintegruj kanał API i rozpocznij obsługę klientów.", + "CHANNEL_NAME": { + "LABEL": "Nazwa kanału", + "PLACEHOLDER": "Wprowadź nazwę kanału", + "ERROR": "To pole jest wymagane" + }, + "WEBHOOK_URL": { + "LABEL": "Adres URL webhooka", + "SUBTITLE": "Configure the URL where you want to receive callbacks on events.", + "PLACEHOLDER": "Adres URL webhooka" + }, + "SUBMIT_BUTTON": "Utwórz kanał API", + "API": { + "ERROR_MESSAGE": "Nie udało się zapisać kanału API" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "Kanał e-mail", + "DESC": "Integrate your email inbox.", + "CHANNEL_NAME": { + "LABEL": "Nazwa kanału", + "PLACEHOLDER": "Wprowadź nazwę kanału", + "ERROR": "To pole jest wymagane" + }, + "EMAIL": { + "LABEL": "E-mail", + "SUBTITLE": "Adres e-mail, na który klienci wysyłają zgłoszenia", + "PLACEHOLDER": "E-mail" + }, + "SUBMIT_BUTTON": "Utwórz kanał e-mail", + "API": { + "ERROR_MESSAGE": "Nie udało nam się zapisać kanału e-mail" + }, + "FINISH_MESSAGE": "Zacznij przekierowywać wiadomości na poniższy adres e-mail.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "Kliknij tutaj", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "Kanał LINE", + "DESC": "Zintegruj kanał LINE i rozpocznij obsługę klientów.", + "CHANNEL_NAME": { + "LABEL": "Nazwa kanału", + "PLACEHOLDER": "Wprowadź nazwę kanału", + "ERROR": "To pole jest wymagane" + }, + "LINE_CHANNEL_ID": { + "LABEL": "ID kanału LINE", + "PLACEHOLDER": "ID kanału LINE" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "Sekret kanału LINE", + "PLACEHOLDER": "Sekret kanału LINE" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "Token kanału LINE", + "PLACEHOLDER": "Token kanału LINE" + }, + "SUBMIT_BUTTON": "Utwórz kanał LINE", + "API": { + "ERROR_MESSAGE": "Nie udało się zapisać kanału LINE" + }, + "API_CALLBACK": { + "TITLE": "Adres URL zwrotny API", + "SUBTITLE": "Musisz skonfigurować adres URL webhooka w aplikacji LINE z podanym tutaj adresem URL." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Kanał Telegram", + "DESC": "Zintegruj kanał Telegram i rozpocznij obsługę klientów.", + "BOT_TOKEN": { + "LABEL": "Token bota", + "SUBTITLE": "Skonfiguruj token bota, który otrzymałeś od Telegram BotFather.", + "PLACEHOLDER": "Token bota" + }, + "SUBMIT_BUTTON": "Utwórz kanał Telegram", + "API": { + "ERROR_MESSAGE": "Nie udało się zapisać kanału Telegram" + } + }, + "AUTH": { + "TITLE": "Wybierz kanał", + "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Voilà!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Website", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "E-mail", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voice", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Agenci", + "DESC": "Tutaj możesz dodać agentów do zarządzania swoją nowo utworzoną skrzynką odbiorczą. Tylko ci wybrani agenci będą mieli dostęp do Twojej skrzynki odbiorczej. Agenci, którzy nie są częścią tej skrzynki odbiorczej nie będą mogli zobaczyć ani odpowiadać na wiadomości w tej skrzynce odbiorczej podczas logowania.Webhooki
Webhooki są wywołaniami zwrotnymi HTTP, które mogą być zdefiniowane dla każdego konta. Są wywoływane przez zdarzenia takie jak utworzenie wiadomości w Chatwoot. Możesz utworzyć więcej niż jeden webhook dla tego konta.
Aby utworzyć webhook, kliknij przycisk Dodaj nowy webhook. Możesz również usunąć istniejący webhook, klikając przycisk Usuń.
Aplikacje na pulpicie
Aplikacje na pulpicie umożliwiają organizacjom osadzenie aplikacji wewnątrz panelu Chatwoot w celu dostarczenia kontekstu dla agentów obsługi klienta. Ta funkcja umożliwia tworzenie niezależnej aplikacji i osadzanie jej w celu dostarczania informacji o użytkowniku, jego zamówieniach lub historii płatności.
Kiedy osadzisz swoją aplikację za pomocą pulpitu Chatwoot, Twoja aplikacja otrzyma kontekst rozmowy i kontaktu jako zdarzenie okna. W swojej stronie zaimplementuj nasłuchiwanie zdarzenia wiadomości, aby otrzymać kontekst.
Aby dodać nową aplikację na pulpicie, kliknij przycisk 'Dodaj nową aplikację na pulpicie'.
", + "DESCRIPTION": "Aplikacje na pulpicie umożliwiają organizacjom osadzenie aplikacji wewnątrz panelu w celu dostarczenia kontekstu dla agentów obsługi klienta. Ta funkcja umożliwia tworzenie niezależnej aplikacji i osadzanie jej w celu dostarczania informacji o użytkowniku, jego zamówieniach lub historii płatności.", + "LEARN_MORE": "Learn more about Dashboard Apps", + "LIST": { + "404": "Na tym koncie nie skonfigurowano jeszcze aplikacji na pulpicie", + "LOADING": "Pobieranie aplikacji na pulpicie...", + "TABLE_HEADER": { + "NAME": "Imię", + "ENDPOINT": "Punkt końcowy" + }, + "EDIT_TOOLTIP": "Edytuj aplikację", + "DELETE_TOOLTIP": "Usuń aplikację" + }, + "FORM": { + "TITLE_LABEL": "Nazwa", + "TITLE_PLACEHOLDER": "Wprowadź nazwę dla aplikacji na pulpicie", + "TITLE_ERROR": "Nazwa aplikacji na pulpicie jest wymagana", + "URL_LABEL": "Punkt końcowy", + "URL_PLACEHOLDER": "Wprowadź adres URL punktu końcowego, gdzie jest hostowana Twoja aplikacja", + "URL_ERROR": "Wymagany jest poprawny adres URL" + }, + "CREATE": { + "HEADER": "Dodaj nową aplikację na pulpicie", + "FORM_SUBMIT": "Wyślij", + "FORM_CANCEL": "Anuluj", + "API_SUCCESS": "Aplikacja na pulpicie została pomyślnie skonfigurowana", + "API_ERROR": "Nie udało się utworzyć aplikacji. Spróbuj ponownie później" + }, + "UPDATE": { + "HEADER": "Edytuj aplikację na pulpicie", + "FORM_SUBMIT": "Aktualizuj", + "FORM_CANCEL": "Anuluj", + "API_SUCCESS": "Aplikacja na pulpicie została pomyślnie zaktualizowana", + "API_ERROR": "Nie udało się zaktualizować aplikacji. Spróbuj ponownie później" + }, + "DELETE": { + "CONFIRM_YES": "Tak, usuń", + "CONFIRM_NO": "Nie, zostaw", + "TITLE": "Potwierdzenie usunięcia", + "MESSAGE": "Czy na pewno chcesz usunąć aplikację - {appName}?", + "API_SUCCESS": "Aplikacja na pulpicie została pomyślnie usunięta", + "API_ERROR": "Nie udało się usunąć aplikacji. Spróbuj ponownie później" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Create/Link Linear Issue", + "LOADING": "Fetching linear issues...", + "LOADING_ERROR": "There was an error fetching the linear issues, please try again", + "CREATE": "Stwórz", + "LINK": { + "SEARCH": "Search issues", + "SELECT": "Select issue", + "TITLE": "Link", + "EMPTY_LIST": "No linear issues found", + "LOADING": "Loading", + "ERROR": "There was an error fetching the linear issues, please try again", + "LINK_SUCCESS": "Issue linked successfully", + "LINK_ERROR": "There was an error linking the issue, please try again", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Create/link linear issue", + "DESCRIPTION": "Create Linear issues from conversations, or link existing ones for seamless tracking.", + "FORM": { + "TITLE": { + "LABEL": "Tytuł", + "PLACEHOLDER": "Enter title", + "REQUIRED_ERROR": "Tytuł jest wymagany" + }, + "DESCRIPTION": { + "LABEL": "Opis", + "PLACEHOLDER": "Enter description" + }, + "TEAM": { + "LABEL": "Zespół", + "PLACEHOLDER": "Wybierz zespół", + "SEARCH": "Search team", + "REQUIRED_ERROR": "Team is required" + }, + "ASSIGNEE": { + "LABEL": "Assignee", + "PLACEHOLDER": "Select assignee", + "SEARCH": "Search assignee" + }, + "PRIORITY": { + "LABEL": "Priorytet", + "PLACEHOLDER": "Wybierz priorytet", + "SEARCH": "Search priority" + }, + "LABEL": { + "LABEL": "Etykieta", + "PLACEHOLDER": "Select label", + "SEARCH": "Search label" + }, + "STATUS": { + "LABEL": "Status", + "PLACEHOLDER": "Select status", + "SEARCH": "Search status" + }, + "PROJECT": { + "LABEL": "Project", + "PLACEHOLDER": "Select project", + "SEARCH": "Search project" + } + }, + "CREATE": "Stwórz", + "CANCEL": "Anuluj", + "CREATE_SUCCESS": "Issue created successfully", + "CREATE_ERROR": "There was an error creating the issue, please try again", + "LOADING_TEAM_ERROR": "There was an error fetching the teams, please try again", + "LOADING_TEAM_ENTITIES_ERROR": "There was an error fetching the team entities, please try again" + }, + "ISSUE": { + "STATUS": "Status", + "PRIORITY": "Priorytet", + "ASSIGNEE": "Assignee", + "LABELS": "Etykiety", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Unlink", + "SUCCESS": "Issue unlinked successfully", + "ERROR": "There was an error unlinking the issue, please try again" + }, + "NO_LINKED_ISSUES": "No linked issues found", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Tak, usuń", + "CANCEL": "Anuluj" + }, + "CTA": { + "TITLE": "Connect to Linear", + "AGENT_DESCRIPTION": "Linear workspace is not connected. Request your administrator to connect a workspace to use this integration.", + "DESCRIPTION": "Linear workspace is not connected. Click the button below to connect your workspace to use this integration.", + "BUTTON_TEXT": "Connect Linear workspace" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Are you sure you want to delete the Notion integration?", + "MESSAGE": "Deleting this integration will remove access to your Notion workspace and stop all related functionality.", + "CONFIRM": "Tak, usuń", + "CANCEL": "Anuluj" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Get started with Copilot", + "KICK_OFF_MESSAGE": "Need a quick summary, want to check past conversations, or draft a better reply? Copilot’s here to speed things up.", + "SEND_MESSAGE": "Wyślij wiadomość...", + "EMPTY_MESSAGE": "There was an error generating the response. Please try again.", + "LOADER": "Captain is thinking", + "YOU": "You", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Show steps", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Summarize this conversation", + "CONTENT": "Summarize the key points discussed between the customer and the support agent, including the customer's concerns, questions, and the solutions or responses provided by the support agent" + }, + "SUGGEST": { + "LABEL": "Suggest an answer", + "CONTENT": "Analyze the customer's inquiry, and draft a response that effectively addresses their concerns or questions. Ensure the reply is clear, concise, and provides helpful information." + }, + "RATE": { + "LABEL": "Rate this conversation", + "CONTENT": "Review the conversation to see how well it meets the customer's needs. Share a rating out of 5 based on tone, clarity, and effectiveness." + }, + "HIGH_PRIORITY": { + "LABEL": "High priority conversations", + "CONTENT": "Give me a summary of all high priority open conversations. Include the conversation ID, customer name (if available), last message content, and assigned agent. Group by status if relevant." + }, + "LIST_CONTACTS": { + "LABEL": "List contacts", + "CONTENT": "Show me the list of top 10 contacts. Include name, email or phone number (if available), last seen time, tags (if any)." + } + } + }, + "PLAYGROUND": { + "USER": "You", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "Wpisz treść wiadomości...", + "HEADER": "Playground", + "DESCRIPTION": "Use this playground to send messages to your assistant and check if it responds accurately, quickly, and in the tone you expect.", + "CREDIT_NOTE": "Messages sent here will count toward your Captain credits." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "Anuluj", + "CREATE": "Stwórz", + "EDIT": "Aktualizuj" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "There are no assistants available in your account.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Tak, usuń", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "Aktualizuj", + "SECTIONS": { + "BASIC_INFO": "Basic Information", + "SYSTEM_MESSAGES": "System Messages", + "INSTRUCTIONS": "Instructions", + "FEATURES": "Funkcje", + "TOOLS": "Tools " + }, + "NAME": { + "LABEL": "Imię", + "PLACEHOLDER": "Enter assistant name", + "ERROR": "The name is required" + }, + "TEMPERATURE": { + "LABEL": "Response Temperature", + "DESCRIPTION": "Adjust how creative or restrictive the assistant's responses should be. Lower values produce more focused and deterministic responses, while higher values allow for more creative and varied outputs." + }, + "DESCRIPTION": { + "LABEL": "Opis", + "PLACEHOLDER": "Enter assistant description", + "ERROR": "The description is required" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Enter product name", + "ERROR": "The product name is required" + }, + "WELCOME_MESSAGE": { + "LABEL": "Welcome Message", + "PLACEHOLDER": "Enter welcome message" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Handoff Message", + "PLACEHOLDER": "Enter handoff message" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Resolution Message", + "PLACEHOLDER": "Enter resolution message" + }, + "INSTRUCTIONS": { + "LABEL": "Instructions", + "PLACEHOLDER": "Enter instructions for the assistant" + }, + "FEATURES": { + "TITLE": "Funkcje", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Could not find the assistant. Please try again." + }, + "SETTINGS": { + "HEADER": "Ustawienia", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Usuń" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "Stwórz", + "CANCEL": "Anuluj", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Usuń" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "Stwórz", + "CANCEL": "Anuluj", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "BULK_DELETE_BUTTON": "Usuń" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Tytuł", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "Opis", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "Stwórz", + "CANCEL": "Anuluj" + } + } + }, + "UPDATE": { + "CANCEL": "Anuluj", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "Adres URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "Adres URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Tak, usuń", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Tools", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Tak, usuń", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "Opis", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "Brak", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "Klucz API" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "Hasło", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Typ" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Numer", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Wymagane" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Select all ({count})", + "UNSELECT_ALL": "Unselect all ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "Usuń", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Tak, usuń", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "Wszystkie" + }, + "STATUS": { + "TITLE": "Status", + "PENDING": "Oczekujące", + "APPROVED": "Approved", + "ALL": "Wszystkie" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "Edytuj", + "DELETE_RESPONSE": "Usuń" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Rozłącz" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Tak, usuń", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "Skrzynka odbiorcza", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/pl/labelsMgmt.json new file mode 100644 index 0000000..2bc9ed5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Etykiety", + "HEADER_BTN_TXT": "Dodaj etykietę", + "LOADING": "Pobieranie etykiet", + "DESCRIPTION": "Labels help you categorize and prioritize conversations and leads. You can assign a label to a conversation or contact using the side panel.", + "LEARN_MORE": "Learn more about labels", + "SEARCH_404": "Brak elementów pasujących do tego zapytania", + "LIST": { + "404": "Brak etykiet na tym koncie.", + "TITLE": "Zarządzaj etykietami", + "DESC": "Etykiety pozwalają na grupowanie rozmów razem.", + "TABLE_HEADER": { + "NAME": "Imię", + "DESCRIPTION": "Opis", + "COLOR": "Kolor" + } + }, + "FORM": { + "NAME": { + "LABEL": "Nazwa etykiety", + "PLACEHOLDER": "Nazwa etykiety", + "REQUIRED_ERROR": "Nazwa etykiety jest wymagana", + "MINIMUM_LENGTH_ERROR": "Wymagana długość wynosi minimum 2", + "VALID_ERROR": "Dozwolone są tylko litery, cyfry, myślnik i podkreślenie" + }, + "DESCRIPTION": { + "LABEL": "Opis", + "PLACEHOLDER": "Opis etykiety" + }, + "COLOR": { + "LABEL": "Kolor" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Pokaż etykietę na panelu bocznym" + }, + "EDIT": "Edytuj", + "CREATE": "Stwórz", + "DELETE": "Usuń", + "CANCEL": "Anuluj" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Add label to conversation", + "MULTIPLE_SUGGESTION": "Select this label", + "DESELECT": "Deselect label", + "DISMISS": "Dismiss suggestion" + }, + "POWERED_BY": "Chatwoot AI", + "DISMISS": "Odrzuć", + "ADD_SELECTED_LABELS": "Add selected labels", + "ADD_SELECTED_LABEL": "Add selected label", + "ADD_ALL_LABELS": "Add all labels", + "SUGGESTED_LABELS": "Suggested labels" + }, + "ADD": { + "TITLE": "Dodaj etykietę", + "DESC": "Etykiety pozwalają na grupowanie rozmów razem.", + "API": { + "SUCCESS_MESSAGE": "Etykieta dodana pomyślnie", + "ERROR_MESSAGE": "Wystąpił błąd, spróbuj ponownie" + } + }, + "EDIT": { + "TITLE": "Edytuj etykietę", + "API": { + "SUCCESS_MESSAGE": "Etykieta została pomyślnie zaktualizowana", + "ERROR_MESSAGE": "Wystąpił błąd, spróbuj ponownie" + } + }, + "DELETE": { + "BUTTON_TEXT": "Usuń", + "API": { + "SUCCESS_MESSAGE": "Etykieta została usunięta", + "ERROR_MESSAGE": "Wystąpił błąd, spróbuj ponownie" + }, + "CONFIRM": { + "TITLE": "Potwierdź usunięcie", + "MESSAGE": "Czy na pewno chcesz usunąć ", + "YES": "Tak, usuń ", + "NO": "Nie, zachowaj " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/login.json b/app/javascript/dashboard/i18n/locale/pl/login.json new file mode 100644 index 0000000..ea05184 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Zaloguj się do Chatwoot", + "EMAIL": { + "LABEL": "E-mail", + "PLACEHOLDER": "example{'@'}companyname.com", + "ERROR": "Wprowadź poprawny adres e-mail" + }, + "PASSWORD": { + "LABEL": "Hasło", + "PLACEHOLDER": "Hasło" + }, + "API": { + "SUCCESS_MESSAGE": "Logowanie udane", + "ERROR_MESSAGE": "Nie można połączyć się z serwerem Woot. Spróbuj ponownie.", + "UNAUTH": "Nazwa użytkownika lub hasło jest nieprawidłowe. Spróbuj ponownie." + }, + "OAUTH": { + "GOOGLE_LOGIN": "Zaloguj się przez Google", + "BUSINESS_ACCOUNTS_ONLY": "Prosimy użyć adresu e-mail firmowego do logowania", + "NO_ACCOUNT_FOUND": "Nie znaleźliśmy konta dla podanego adresu e-mail." + }, + "FORGOT_PASSWORD": "Zapomniałeś hasła?", + "CREATE_NEW_ACCOUNT": "Utwórz nowe konto", + "SUBMIT": "Zaloguj się", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/macros.json b/app/javascript/dashboard/i18n/locale/pl/macros.json new file mode 100644 index 0000000..dab2bce --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Makra", + "DESCRIPTION": "A macro is a set of saved actions that help customer service agents easily complete tasks. The agents can define a set of actions like tagging a conversation with a label, sending an email transcript, updating a custom attribute, etc., and they can run these actions in a single click.", + "LEARN_MORE": "Learn more about macros", + "HEADER_BTN_TXT": "Dodaj nowe makro", + "HEADER_BTN_TXT_SAVE": "Zapisz makro", + "LOADING": "Pobieranie makr", + "ERROR": "Wystąpił błąd. Spróbuj ponownie", + "ORDER_INFO": "Makra będą uruchamiane w kolejności, w jakiej dodajesz czynności. Możesz zmieniać ich kolejność, przeciągając je za uchwyt obok każdego węzła.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Nazwa makra", + "PLACEHOLDER": "Wprowadź nazwę makra", + "ERROR": "Wymagana jest nazwa makra" + }, + "ACTIONS": { + "LABEL": "Akcje" + } + }, + "API": { + "SUCCESS_MESSAGE": "Makro pomyślnie dodane", + "ERROR_MESSAGE": "Nie można utworzyć makra. Spróbuj ponownie później" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Imię", + "CREATED BY": "Utworzone przez", + "LAST_UPDATED_BY": "Ostatnio zaktualizowane przez", + "VISIBILITY": "Widoczność" + }, + "404": "Nie znaleziono makr" + }, + "DELETE": { + "TOOLTIP": "Usuń makro", + "CONFIRM": { + "MESSAGE": "Czy na pewno chcesz usunąć ", + "YES": "Tak, usuń", + "NO": "Nie" + }, + "API": { + "SUCCESS_MESSAGE": "Makro pomyślnie usunięte", + "ERROR_MESSAGE": "Wystąpił błąd podczas usuwania makra. Spróbuj ponownie później" + } + }, + "EDIT": { + "TOOLTIP": "Edytuj makro", + "API": { + "SUCCESS_MESSAGE": "Makro pomyślnie zaktualizowane", + "ERROR_MESSAGE": "Nie można zaktualizować makra. Spróbuj ponownie później" + } + }, + "EDITOR": { + "START_FLOW": "Rozpocznij przepływ", + "END_FLOW": "Zakończ przepływ", + "LOADING": "Pobieranie makra", + "ADD_BTN_TOOLTIP": "Dodaj nową czynność", + "DELETE_BTN_TOOLTIP": "Usuń czynność", + "VISIBILITY": { + "LABEL": "Widoczność makra", + "GLOBAL": { + "LABEL": "Publiczne", + "DESCRIPTION": "To makro jest publicznie dostępne dla wszystkich agentów na tym koncie." + }, + "PERSONAL": { + "LABEL": "Prywatne", + "DESCRIPTION": "To makro będzie prywatne i nie będzie dostępne dla innych." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Wykonaj", + "PREVIEW": "Podgląd makra", + "EXECUTED_SUCCESSFULLY": "Makro pomyślnie wykonane" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Attribute key is required", + "FILTER_OPERATOR_REQUIRED": "Filter operator is required", + "VALUE_REQUIRED": "Wartość jest wymagana", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "Value must be between 1 and 998", + "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", + "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", + "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Assign a Team", + "ASSIGN_AGENT": "Assign an Agent", + "ADD_LABEL": "Add a Label", + "REMOVE_LABEL": "Remove a Label", + "REMOVE_ASSIGNED_TEAM": "Remove Assigned Team", + "SEND_EMAIL_TRANSCRIPT": "Send an Email Transcript", + "MUTE_CONVERSATION": "Wycisz kontakt", + "SNOOZE_CONVERSATION": "Zatrzymaj rozmowę", + "RESOLVE_CONVERSATION": "Zamknij rozmowę", + "SEND_ATTACHMENT": "Send Attachment", + "SEND_MESSAGE": "Send a Message", + "CHANGE_PRIORITY": "Zmień priorytet", + "ADD_PRIVATE_NOTE": "Add a Private Note", + "SEND_WEBHOOK_EVENT": "Send Webhook Event" + }, + "PRIORITY_TYPES": { + "NONE": "Brak", + "LOW": "Niski", + "MEDIUM": "Średni", + "HIGH": "Wysoki", + "URGENT": "Pilne" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/mfa.json b/app/javascript/dashboard/i18n/locale/pl/mfa.json new file mode 100644 index 0000000..3c3738b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "Włączone", + "DISABLED": "Wyłączone", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "Loading...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "Kopiuj", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "Anuluj", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "Pobierz", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "Hasło", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "Anuluj", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "Anuluj", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/report.json b/app/javascript/dashboard/i18n/locale/pl/report.json new file mode 100644 index 0000000..9a82f5b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Raporty rozmów", + "LOADING_CHART": "Ładowanie danych wykresów...", + "NO_ENOUGH_DATA": "Nie ma wystarczającej ilości danych do wygenerowania raportu. Spróbuj ponownie później.", + "DOWNLOAD_AGENT_REPORTS": "Pobierz raporty agenta", + "DATA_FETCHING_FAILED": "Nie udało się pobrać danych, spróbuj ponownie później.", + "SUMMARY_FETCHING_FAILED": "Nie udało się pobrać podsumowania, spróbuj ponownie później.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Rozmowy", + "DESC": "(łącznie)" + }, + "INCOMING_MESSAGES": { + "NAME": "Wiadomości przychodzące", + "DESC": "(łącznie)" + }, + "OUTGOING_MESSAGES": { + "NAME": "Wiadomości wychodzące", + "DESC": "(łącznie)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Czas pierwszej odpowiedzi", + "DESC": "(średni)", + "INFO_TEXT": "Całkowita liczba rozmów używanych do obliczeń:", + "TOOLTIP_TEXT": "Czas pierwszej odpowiedzi to {metricValue} (na podstawie {conversationCount} rozmów)" + }, + "RESOLUTION_TIME": { + "NAME": "Czas rozwiązania", + "DESC": "(średni)", + "INFO_TEXT": "Całkowita liczba rozmów używanych do obliczeń:", + "TOOLTIP_TEXT": "Czas rozwiązania to {metricValue} (na podstawie {conversationCount} rozmów)" + }, + "RESOLUTION_COUNT": { + "NAME": "Liczba rozwiązań", + "DESC": "(łącznie)" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Liczba rozwiązań", + "DESC": "(łącznie)" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Handoff Count", + "DESC": "(łącznie)" + }, + "REPLY_TIME": { + "NAME": "Customer waiting time", + "TOOLTIP_TEXT": "Waiting time is {metricValue} (based on {conversationCount} replies)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "Ostatnie 7 dni", + "LAST_14_DAYS": "Ostatnie 14 dni", + "LAST_30_DAYS": "Ostatnie 30 dni", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "Ostatnie 3 miesiące", + "LAST_6_MONTHS": "Ostatnie 6 miesięcy", + "LAST_YEAR": "Ostatni rok", + "CUSTOM_DATE_RANGE": "Niestandardowy zakres dat" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Zastosuj", + "PLACEHOLDER": "Wybierz zakres dat" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Grupuj według", + "DURATION_FILTER_LABEL": "Czas trwania", + "GROUPING_OPTIONS": { + "DAY": "Dzień", + "WEEK": "Tydzień", + "MONTH": "Miesiąc", + "YEAR": "Rok" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Dzień" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Dzień" + }, + { + "id": 2, + "groupBy": "Tydzień" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Dzień" + }, + { + "id": 2, + "groupBy": "Tydzień" + }, + { + "id": 3, + "groupBy": "Miesiąc" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "BUSINESS_HOURS": "Godziny pracy", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Nie znaleziono rekordów" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Przegląd agentów", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "Ładowanie danych wykresów...", + "NO_ENOUGH_DATA": "Nie ma wystarczającej ilości danych do wygenerowania raportu. Spróbuj ponownie później.", + "DOWNLOAD_AGENT_REPORTS": "Pobierz raporty agenta", + "FILTER_DROPDOWN_LABEL": "Wybierz agenta", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Rozmowy", + "DESC": "(łącznie)" + }, + "INCOMING_MESSAGES": { + "NAME": "Wiadomości przychodzące", + "DESC": "(łącznie)" + }, + "OUTGOING_MESSAGES": { + "NAME": "Wiadomości wychodzące", + "DESC": "(łącznie)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Czas pierwszej odpowiedzi", + "DESC": "(średni)", + "INFO_TEXT": "Całkowita liczba rozmów używanych do obliczeń:", + "TOOLTIP_TEXT": "Czas pierwszej odpowiedzi to {metricValue} (na podstawie {conversationCount} rozmów)" + }, + "RESOLUTION_TIME": { + "NAME": "Czas rozwiązania", + "DESC": "(średni)", + "INFO_TEXT": "Całkowita liczba rozmów używanych do obliczeń:", + "TOOLTIP_TEXT": "Czas rozwiązania to {metricValue} (na podstawie {conversationCount} rozmów)" + }, + "RESOLUTION_COUNT": { + "NAME": "Liczba rozwiązań", + "DESC": "(łącznie)" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Ostatnie 7 dni" + }, + { + "id": 1, + "name": "Ostatnie 30 dni" + }, + { + "id": 2, + "name": "Ostatnie 3 miesiące" + }, + { + "id": 3, + "name": "Ostatnie 6 miesięcy" + }, + { + "id": 4, + "name": "Ostatni rok" + }, + { + "id": 5, + "name": "Niestandardowy zakres dat" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Zastosuj", + "PLACEHOLDER": "Wybierz zakres dat" + } + }, + "LABEL_REPORTS": { + "HEADER": "Przegląd etykiet", + "DESCRIPTION": "Track label performance with key metrics including conversations, response times, resolution times, and resolved cases. Click a label name for detailed insights.", + "LOADING_CHART": "Ładowanie danych wykresów...", + "NO_ENOUGH_DATA": "Nie ma wystarczającej ilości danych do wygenerowania raportu. Spróbuj ponownie później.", + "DOWNLOAD_LABEL_REPORTS": "Pobierz raporty etykiety", + "FILTER_DROPDOWN_LABEL": "Wybierz etykietę", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Rozmowy", + "DESC": "(łącznie)" + }, + "INCOMING_MESSAGES": { + "NAME": "Wiadomości przychodzące", + "DESC": "(łącznie)" + }, + "OUTGOING_MESSAGES": { + "NAME": "Wiadomości wychodzące", + "DESC": "(łącznie)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Czas pierwszej odpowiedzi", + "DESC": "(średni)", + "INFO_TEXT": "Całkowita liczba rozmów używanych do obliczeń:", + "TOOLTIP_TEXT": "Czas pierwszej odpowiedzi to {metricValue} (na podstawie {conversationCount} rozmów)" + }, + "RESOLUTION_TIME": { + "NAME": "Czas rozwiązania", + "DESC": "(średni)", + "INFO_TEXT": "Całkowita liczba rozmów używanych do obliczeń:", + "TOOLTIP_TEXT": "Czas rozwiązania to {metricValue} (na podstawie {conversationCount} rozmów)" + }, + "RESOLUTION_COUNT": { + "NAME": "Liczba rozwiązań", + "DESC": "(łącznie)" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Ostatnie 7 dni" + }, + { + "id": 1, + "name": "Ostatnie 30 dni" + }, + { + "id": 2, + "name": "Ostatnie 3 miesiące" + }, + { + "id": 3, + "name": "Ostatnie 6 miesięcy" + }, + { + "id": 4, + "name": "Ostatni rok" + }, + { + "id": 5, + "name": "Niestandardowy zakres dat" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Zastosuj", + "PLACEHOLDER": "Wybierz zakres dat" + } + }, + "INBOX_REPORTS": { + "HEADER": "Przegląd skrzynki odbiorczej", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "Ładowanie danych wykresów...", + "NO_ENOUGH_DATA": "Nie ma wystarczającej ilości danych do wygenerowania raportu. Spróbuj ponownie później.", + "DOWNLOAD_INBOX_REPORTS": "Pobierz raporty skrzynki odbiorczej", + "FILTER_DROPDOWN_LABEL": "Wybierz skrzynkę odbiorczą", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Rozmowy", + "DESC": "(łącznie)" + }, + "INCOMING_MESSAGES": { + "NAME": "Wiadomości przychodzące", + "DESC": "(łącznie)" + }, + "OUTGOING_MESSAGES": { + "NAME": "Wiadomości wychodzące", + "DESC": "(łącznie)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Czas pierwszej odpowiedzi", + "DESC": "(średni)", + "INFO_TEXT": "Całkowita liczba rozmów używanych do obliczeń:", + "TOOLTIP_TEXT": "Czas pierwszej odpowiedzi to {metricValue} (na podstawie {conversationCount} rozmów)" + }, + "RESOLUTION_TIME": { + "NAME": "Czas rozwiązania", + "DESC": "(średni)", + "INFO_TEXT": "Całkowita liczba rozmów używanych do obliczeń:", + "TOOLTIP_TEXT": "Czas rozwiązania to {metricValue} (na podstawie {conversationCount} rozmów)" + }, + "RESOLUTION_COUNT": { + "NAME": "Liczba rozwiązań", + "DESC": "(łącznie)" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Ostatnie 7 dni" + }, + { + "id": 1, + "name": "Ostatnie 30 dni" + }, + { + "id": 2, + "name": "Ostatnie 3 miesiące" + }, + { + "id": 3, + "name": "Ostatnie 6 miesięcy" + }, + { + "id": 4, + "name": "Ostatni rok" + }, + { + "id": 5, + "name": "Niestandardowy zakres dat" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Zastosuj", + "PLACEHOLDER": "Wybierz zakres dat" + } + }, + "TEAM_REPORTS": { + "HEADER": "Przegląd zespołu", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "Ładowanie danych wykresów...", + "NO_ENOUGH_DATA": "Nie ma wystarczającej ilości danych do wygenerowania raportu. Spróbuj ponownie później.", + "DOWNLOAD_TEAM_REPORTS": "Pobierz raporty zespołu", + "FILTER_DROPDOWN_LABEL": "Wybierz zespół", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Rozmowy", + "DESC": "(łącznie)" + }, + "INCOMING_MESSAGES": { + "NAME": "Wiadomości przychodzące", + "DESC": "(łącznie)" + }, + "OUTGOING_MESSAGES": { + "NAME": "Wiadomości wychodzące", + "DESC": "(łącznie)" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Czas pierwszej odpowiedzi", + "DESC": "(średni)", + "INFO_TEXT": "Całkowita liczba rozmów używanych do obliczeń:", + "TOOLTIP_TEXT": "Czas pierwszej odpowiedzi to {metricValue} (na podstawie {conversationCount} rozmów)" + }, + "RESOLUTION_TIME": { + "NAME": "Czas rozwiązania", + "DESC": "(średni)", + "INFO_TEXT": "Całkowita liczba rozmów używanych do obliczeń:", + "TOOLTIP_TEXT": "Czas rozwiązania to {metricValue} (na podstawie {conversationCount} rozmów)" + }, + "RESOLUTION_COUNT": { + "NAME": "Liczba rozwiązań", + "DESC": "(łącznie)" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Ostatnie 7 dni" + }, + { + "id": 1, + "name": "Ostatnie 30 dni" + }, + { + "id": 2, + "name": "Ostatnie 3 miesiące" + }, + { + "id": 3, + "name": "Ostatnie 6 miesięcy" + }, + { + "id": 4, + "name": "Ostatni rok" + }, + { + "id": 5, + "name": "Niestandardowy zakres dat" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Zastosuj", + "PLACEHOLDER": "Wybierz zakres dat" + } + }, + "CSAT_REPORTS": { + "HEADER": "Raporty CSAT", + "NO_RECORDS": "Brak dostępnych odpowiedzi w ankiecie CSAT.", + "DOWNLOAD": "Pobierz raporty CSAT", + "DOWNLOAD_FAILED": "Nie udało się pobrać raportów CSAT", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Wybierz agentów" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Kontakt", + "AGENT_NAME": "Przypisany agent", + "RATING": "Ocena", + "FEEDBACK_TEXT": "Tekst opinii" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Łącznie odpowiedzi", + "TOOLTIP": "Całkowita liczba zebranych odpowiedzi" + }, + "SATISFACTION_SCORE": { + "LABEL": "Wskaźnik zadowolenia", + "TOOLTIP": "Wskaźnik zadowolenia: (Liczba pozytywnych odpowiedzi / Całkowita liczba odpowiedzi) * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Wskaźnik odpowiedzi", + "TOOLTIP": "Wskaźnik odpowiedzi: (Całkowita liczba odpowiedzi / Całkowita liczba wysłanych ankiet CSAT) * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Bot Reports", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "No. of Conversations", + "TOOLTIP": "Total number of conversations handled by the bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total Responses", + "TOOLTIP": "Total number of responses sent by the bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Resolution Rate", + "TOOLTIP": "Total number of conversations resolved by the bot / Total number of conversations handled by the bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Handoff Rate", + "TOOLTIP": "Total number of conversations handed off to agents / Total number of conversations handled by the bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Przegląd", + "LIVE": "Na żywo", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Aktywne rozmowy", + "LOADING_MESSAGE": "Ładowanie metryk rozmów...", + "OPEN": "Otwarte", + "UNATTENDED": "Nieobsługiwane", + "UNASSIGNED": "Nieprzypisane", + "PENDING": "Oczekujące" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Ruch rozmów", + "NO_CONVERSATIONS": "Brak rozmów", + "CONVERSATION": "{count} rozmowa", + "CONVERSATIONS": "{count} rozmowy", + "DOWNLOAD_REPORT": "Download report" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "Brak rozmów", + "CONVERSATION": "{count} rozmowa", + "CONVERSATIONS": "{count} rozmowy", + "DOWNLOAD_REPORT": "Download report" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Rozmowy według agentów", + "LOADING_MESSAGE": "Ładowanie metryk agentów...", + "NO_AGENTS": "Brak rozmów według agentów", + "TABLE_HEADER": { + "AGENT": "Agent", + "OPEN": "Otwórz", + "UNATTENDED": "Nieobsługiwane", + "STATUS": "Status" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Zespół", + "OPEN": "Otwórz", + "UNATTENDED": "Nieobsługiwane", + "STATUS": "Status" + } + }, + "AGENT_STATUS": { + "HEADER": "Status agenta", + "ONLINE": "Dostępny", + "BUSY": "Zajęty", + "OFFLINE": "Niedostępny" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Niedziela", + "MONDAY": "Poniedziałek", + "TUESDAY": "Wtorek", + "WEDNESDAY": "Środa", + "THURSDAY": "Czwartek", + "FRIDAY": "Piątek", + "SATURDAY": "Sobota" + }, + "SLA_REPORTS": { + "HEADER": "SLA Reports", + "NO_RECORDS": "SLA applied conversations are not available.", + "LOADING": "Loading SLA data...", + "DOWNLOAD_SLA_REPORTS": "Download SLA reports", + "DOWNLOAD_FAILED": "Failed to download SLA Reports", + "DROPDOWN": { + "ADD_FIlTER": "Dodaj filtr", + "CLEAR_ALL": "Clear all", + "CLEAR_FILTER": "Clear filter", + "EMPTY_LIST": "Nie znaleziono rekordów", + "NO_FILTER": "No filters available", + "SEARCH": "Search filter", + "INPUT_PLACEHOLDER": { + "SLA": "SLA name", + "AGENTS": "Nazwa agenta", + "INBOXES": "Nazwa skrzynki odbiorczej", + "LABELS": "Nazwa etykiety", + "TEAMS": "Nazwa zespołu" + }, + "SLA": "SLA Policy", + "INBOXES": "Skrzynka odbiorcza", + "AGENTS": "Agent", + "LABELS": "Etykieta", + "TEAMS": "Zespół" + }, + "WITH": "with", + "METRICS": { + "HIT_RATE": { + "LABEL": "Hit Rate", + "TOOLTIP": "Percentage of SLAs created were completed successfully" + }, + "NO_OF_MISSES": { + "LABEL": "Number of Misses", + "TOOLTIP": "Total SLA misses in a certain period" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Number of Conversations", + "TOOLTIP": "Total number of conversations with SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Policy", + "CONVERSATION": "Rozmowa", + "AGENT": "Agent" + }, + "VIEW_DETAILS": "View Details" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Skrzynka odbiorcza", + "AGENT": "Agent", + "TEAM": "Zespół", + "LABEL": "Etykieta", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "Liczba rozwiązań", + "CONVERSATIONS": "Ilość rozmów" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/resetPassword.json b/app/javascript/dashboard/i18n/locale/pl/resetPassword.json new file mode 100644 index 0000000..a42bf74 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Zresetuj hasło", + "DESCRIPTION": "Enter the email address you use to log in to Chatwoot to get the password reset instructions.", + "GO_BACK_TO_LOGIN": "If you want to go back to the login page,", + "EMAIL": { + "LABEL": "E-mail", + "PLACEHOLDER": "Wprowadź swój adres e-mail.", + "ERROR": "Wprowadź poprawny adres e-mail." + }, + "API": { + "SUCCESS_MESSAGE": "Link do resetowania hasła został wysłany na Twój adres e-mail.", + "ERROR_MESSAGE": "Nie można połączyć się z serwerem Woot. Spróbuj ponownie." + }, + "SUBMIT": "Prześlij" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/search.json b/app/javascript/dashboard/i18n/locale/pl/search.json new file mode 100644 index 0000000..c1f6ed5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "Kontakty", + "CONVERSATIONS": "Rozmowy", + "MESSAGES": "Wiadomości", + "ARTICLES": "Articles" + }, + "SECTION": { + "CONTACTS": "Kontakty", + "CONVERSATIONS": "Rozmowy", + "MESSAGES": "Wiadomości", + "ARTICLES": "Articles" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "Wyszukiwanie", + "LOADING_DATA": "Loading", + "EMPTY_STATE": "Nie znaleziono {item} dla zapytania '{query}'", + "EMPTY_STATE_FULL": "Nie znaleziono wyników dla zapytania '{query}'", + "PLACEHOLDER_KEYBINDING": "/aby skupić się", + "INPUT_PLACEHOLDER": "Wpisz co najmniej 3 znaki, aby wyszukać", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Clear all", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Wyszukaj według identyfikatora rozmowy, adresu e-mail, numeru telefonu lub treści wiadomości, aby uzyskać lepsze wyniki wyszukiwania.", + "BOT_LABEL": "Bot", + "READ_MORE": "Czytaj więcej", + "READ_LESS": "Read less", + "WROTE": "napisał/a:", + "FROM": "Od", + "EMAIL": "E-mail", + "EMAIL_SUBJECT": "Temat", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "Ostatnie 7 dni", + "LAST_30_DAYS": "Ostatnie 30 dni", + "LAST_60_DAYS": "Ostatnie 60 dni", + "LAST_90_DAYS": "Ostatnie 90 dni", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "Zastosuj", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Clear filter" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Nadawca", + "IN": "Skrzynka odbiorcza", + "AGENTS": "Agenci", + "CONTACTS": "Kontakty", + "INBOXES": "Zarządzanie skrzynkami", + "NO_AGENTS": "Nie znaleziono agentów", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/setNewPassword.json b/app/javascript/dashboard/i18n/locale/pl/setNewPassword.json new file mode 100644 index 0000000..88b3248 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Ustaw nowe hasło", + "PASSWORD": { + "LABEL": "Hasło", + "PLACEHOLDER": "Hasło", + "ERROR": "Hasło jest zbyt krótkie." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Potwierdź hasło", + "PLACEHOLDER": "Potwierdź hasło", + "ERROR": "Hasła nie pasują." + }, + "API": { + "SUCCESS_MESSAGE": "Pomyślnie zmieniono hasło.", + "ERROR_MESSAGE": "Nie można połączyć się z serwerem Woot. Spróbuj ponownie." + }, + "CAPTCHA": { + "ERROR": "Weryfikacja wygasła. Proszę rozwiązać captcha ponownie." + }, + "SUBMIT": "Prześlij" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/settings.json b/app/javascript/dashboard/i18n/locale/pl/settings.json new file mode 100644 index 0000000..fddff53 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Ustawienia profilu", + "TITLE": "Ustawienia profilu", + "BTN_TEXT": "Aktualizuj profil", + "DELETE_AVATAR": "Usuń awatar", + "AVATAR_DELETE_SUCCESS": "Awatar został usunięty", + "AVATAR_DELETE_FAILED": "Wystąpił błąd podczas usuwania awatara, spróbuj ponownie", + "UPDATE_SUCCESS": "Twój profil został pomyślnie zaktualizowany", + "PASSWORD_UPDATE_SUCCESS": "Twoje hasło zostało zmienione", + "AFTER_EMAIL_CHANGED": "Twój profil został pomyślnie zaktualizowany, zaloguj się ponownie po zmianie danych logowania", + "FORM": { + "PICTURE": "Profile Picture", + "AVATAR": "Zdjęcie profilowe", + "ERROR": "Proszę naprawić błędy formularza", + "REMOVE_IMAGE": "Usuń", + "UPLOAD_IMAGE": "Prześlij obraz", + "UPDATE_IMAGE": "Aktualizuj obraz", + "PROFILE_SECTION": { + "TITLE": "Profil", + "NOTE": "Twój adres e-mail jest Twoją tożsamością i jest używany do logowania." + }, + "SEND_MESSAGE": { + "TITLE": "Skrót klawiszowy do wysyłania wiadomości", + "NOTE": "Możesz wybrać skrót klawiszowy (Enter lub Cmd/Ctrl+Enter) w zależności od preferencji pisania.", + "UPDATE_SUCCESS": "Twoje ustawienia zostały pomyślnie zaktualizowane", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Wyślij wiadomości, naciskając klawisz Enter zamiast kliknięcia przycisku Wyślij." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Wyślij wiadomości, naciskając klawisze Cmd/Ctrl + Enter zamiast kliknięcia przycisku Wyślij." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Domyślny", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Osobisty podpis wiadomości", + "NOTE": "Create a unique message signature to appear at the end of every message you send from any inbox. You can also include an inline image, which is supported in live-chat, email, and API inboxes.", + "BTN_TEXT": "Zapisz podpis wiadomości", + "API_ERROR": "Nie można zapisać podpisu! Spróbuj ponownie", + "API_SUCCESS": "Podpis został pomyślnie zapisany", + "IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save to save the signature", + "IMAGE_UPLOAD_SIZE_ERROR": "Rozmiar obrazu powinien być mniejszy niż {size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Podpis wiadomości", + "ERROR": "Podpis wiadomości nie może być pusty", + "PLACEHOLDER": "Wprowadź swój osobisty podpis wiadomości tutaj." + }, + "PASSWORD_SECTION": { + "TITLE": "Hasło", + "NOTE": "Zmiana hasła spowoduje zresetowanie logowania na wielu urządzeniach.", + "BTN_TEXT": "Zmień hasło" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "Token dostępu", + "NOTE": "Ten token może być użyty, jeśli budujesz integrację opartą na API", + "COPY": "Kopiuj", + "RESET": "Reset", + "CONFIRM_RESET": "Are you sure?", + "CONFIRM_HINT": "Click again to confirm", + "RESET_SUCCESS": "Access token regenerated successfully", + "RESET_ERROR": "Unable to regenerate access token. Please try again" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Alerts", + "NOTE": "Enable audio alerts in dashboard for new messages and conversations.", + "PLAY": "Play sound", + "ALERT_TYPES": { + "NONE": "Brak", + "MINE": "Assigned", + "ALL": "Wszystkie", + "ASSIGNED": "My assigned conversations", + "UNASSIGNED": "Unassigned conversations", + "NOTME": "Open conversations assigned to others" + }, + "ALERT_COMBINATIONS": { + "NONE": "You haven't selected any options, you won't receive any audio alerts.", + "ASSIGNED": "You'll receive alerts for conversations assigned to you.", + "UNASSIGNED": "You'll receive alerts for any unassigned conversations.", + "NOTME": "You'll receive alerts for conversations assigned to others.", + "ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.", + "ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.", + "NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.", + "ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations." + }, + "ALERT_TYPE": { + "TITLE": "Alert events for conversations", + "NONE": "Brak", + "ASSIGNED": "Przypisane rozmowy", + "ALL_CONVERSATIONS": "Rozmowy" + }, + "DEFAULT_TONE": { + "TITLE": "Domyślny dźwięk powiadomień:" + }, + "CONDITIONS": { + "TITLE": "Warunki powiadomień:", + "CONDITION_ONE": "Wysyłaj dźwiękowe powiadomienia tylko wtedy, gdy okno przeglądarki nie jest aktywne", + "CONDITION_TWO": "Wysyłaj powiadomienia co 30 sekund, dopóki wszystkie przypisane rozmowy nie zostaną odczytane" + }, + "SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.", + "READ_MORE": "Czytaj więcej" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "Powiadomienia e-mail", + "NOTE": "Zaktualizuj ustawienia powiadomień e-mail tutaj", + "CONVERSATION_ASSIGNMENT": "Wysyłaj powiadomienia e-mail, gdy konwersacja jest przypisana do mnie", + "CONVERSATION_CREATION": "Wysyłaj powiadomienia e-mail po utworzeniu nowej rozmowy", + "CONVERSATION_MENTION": "Wysyłaj powiadomienia e-mail, gdy zostaniesz wymieniony w rozmowie", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Wysyłaj powiadomienia e-mail, gdy w przypisanej konwersacji zostanie utworzona nowa wiadomość", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Wysyłaj powiadomienia e-mail, gdy w rozmowie, w której bierzesz udział, zostanie utworzona nowa wiadomość", + "SLA_MISSED_FIRST_RESPONSE": "Send email notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send email notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send email notifications when a conversation misses resolution SLA" + }, + "NOTIFICATIONS": { + "TITLE": "Notification preferences", + "TYPE_TITLE": "Notification type", + "EMAIL": "E-mail", + "PUSH": "Push notification", + "TYPES": { + "CONVERSATION_CREATED": "A new conversation is created", + "CONVERSATION_ASSIGNED": "A conversation is assigned to you", + "CONVERSATION_MENTION": "You are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "A new message is created in an assigned conversation", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "A new message is created in a participating conversation", + "SLA_MISSED_FIRST_RESPONSE": "A conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "A conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "A conversation misses resolution SLA" + }, + "BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them" + }, + "API": { + "UPDATE_SUCCESS": "Twoje preferencje powiadomień zostały pomyślnie zaktualizowane", + "UPDATE_ERROR": "Wystąpił błąd podczas aktualizacji preferencji, spróbuj ponownie" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Powiadomienia push", + "NOTE": "Zaktualizuj ustawienia powiadomień push tutaj", + "CONVERSATION_ASSIGNMENT": "Wyślij powiadomienia push, gdy konwersacja jest przypisana do mnie", + "CONVERSATION_CREATION": "Wysyłaj powiadomienia push po utworzeniu nowej rozmowy", + "CONVERSATION_MENTION": "Wyślij powiadomienia push, gdy jesteś wymieniony w rozmowie", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Wysyłaj powiadomienia push, gdy w przypisanej konwersacji zostanie utworzona nowa wiadomość", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Wyślij powiadomienia push, gdy w rozmowie, w której bierzesz udział, zostanie utworzona nowa wiadomość", + "HAS_ENABLED_PUSH": "Włączyłeś opcję powiadomień push dla tej przeglądarki.", + "REQUEST_PUSH": "Włącz powiadomienia push", + "SLA_MISSED_FIRST_RESPONSE": "Send push notifications when a conversation misses first response SLA", + "SLA_MISSED_NEXT_RESPONSE": "Send push notifications when a conversation misses next response SLA", + "SLA_MISSED_RESOLUTION": "Send push notifications when a conversation misses resolution SLA" + }, + "PROFILE_IMAGE": { + "LABEL": "Zdjęcie profilowe" + }, + "NAME": { + "LABEL": "Twoje imię i nazwisko", + "ERROR": "Podaj swoje imię i nazwisko", + "PLACEHOLDER": "Podaj swoje imię i nazwisko" + }, + "DISPLAY_NAME": { + "LABEL": "Wyświetlana nazwa", + "ERROR": "Wprowadź poprawną nazwę wyświetlaną", + "PLACEHOLDER": "Wprowadź nazwę wyświetlaną, która będzie widoczna w rozmowach" + }, + "AVAILABILITY": { + "LABEL": "Dostępność", + "STATUS": { + "ONLINE": "Dostępny", + "BUSY": "Zajęty", + "OFFLINE": "Niedostępny" + }, + "SET_AVAILABILITY_SUCCESS": "Dostępność została pomyślnie ustawiona", + "SET_AVAILABILITY_ERROR": "Nie można ustawić dostępności, spróbuj ponownie", + "IMPERSONATING_ERROR": "Cannot change availability while impersonating a user" + }, + "EMAIL": { + "LABEL": "Twój adres e-mail", + "ERROR": "Wprowadź poprawny adres e-mail", + "PLACEHOLDER": "Wprowadź swój adres e-mail, który będzie widoczny w rozmowach" + }, + "CURRENT_PASSWORD": { + "LABEL": "Aktualne hasło", + "ERROR": "Wprowadź aktualne hasło", + "PLACEHOLDER": "Wprowadź aktualne hasło" + }, + "PASSWORD": { + "LABEL": "Nowe hasło", + "ERROR": "Wprowadź hasło o długości co najmniej 6 znaków", + "PLACEHOLDER": "Wprowadź nowe hasło" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Potwierdź nowe hasło", + "ERROR": "Potwierdzenie hasła musi być zgodne z hasłem", + "PLACEHOLDER": "Wprowadź ponownie nowe hasło" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Zmień dostępność", + "CHANGE_ACCOUNTS": "Switch account", + "SWITCH_ACCOUNT": "Switch account", + "CONTACT_SUPPORT": "Contact support", + "SELECTOR_SUBTITLE": "Wybierz konto z poniższej listy", + "PROFILE_SETTINGS": "Profile settings", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Keyboard shortcuts", + "APPEARANCE": "Change appearance", + "SUPER_ADMIN_CONSOLE": "SuperAdmin console", + "DOCS": "Read documentation", + "CHANGELOG": "Changelog", + "LOGOUT": "Log out" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "dni pozostało w okresie próbnym.", + "TRAIL_BUTTON": "Kup teraz", + "DELETED_USER": "Usunięty użytkownik", + "EMAIL_VERIFICATION_PENDING": "It seems that you haven't verified your email address yet. Please check your inbox for the verification email.", + "RESEND_VERIFICATION_MAIL": "Resend verification email", + "EMAIL_VERIFICATION_SENT": "Verification email has been sent. Please check your inbox.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Konto zawieszone", + "MESSAGE": "Twoje konto zostało zawieszone. Skontaktuj się z zespołem pomocy technicznej w celu uzyskania dodatkowych informacji." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Log out" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Kopiuj", + "CODEPEN": "Otwórz w CodePen", + "COPY_SUCCESSFUL": "Kod został skopiowany do schowka" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Pokaż więcej", + "SHOW_LESS": "Pokaż mniej" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "Pobierz", + "UPLOADING": "Przesyłanie...", + "INSTAGRAM_STORY_UNAVAILABLE": "Ta historia nie jest już dostępna." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "Zobacz na mapie" + }, + "FORM_BUBBLE": { + "SUBMIT": "Wyślij" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "This image is no longer available.", + "LOADING_FAILED": "Loading failed" + } + }, + "CONFIRM_EMAIL": "Weryfikacja...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Dodaj skrzynkę odbiorczą" + } + }, + "SIDEBAR": { + "NO_ITEMS": "No items", + "CURRENTLY_VIEWING_ACCOUNT": "Aktualnie przeglądane konto:", + "SWITCH": "Przełącz", + "INBOX_VIEW": "Inbox View", + "CONVERSATIONS": "Rozmowy", + "INBOX": "My Inbox", + "ALL_CONVERSATIONS": "Rozmowy", + "MENTIONED_CONVERSATIONS": "Wzmianki", + "PARTICIPATING_CONVERSATIONS": "Udział", + "UNATTENDED_CONVERSATIONS": "Bez odpowiedzi", + "REPORTS": "Raporty", + "SETTINGS": "Ustawienia", + "CONTACTS": "Kontakty", + "ACTIVE": "Aktywne", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistants", + "CAPTAIN_DOCUMENTS": "Documents", + "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_TOOLS": "Tools", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "Zarządzanie skrzynkami", + "CAPTAIN_SETTINGS": "Ustawienia", + "HOME": "Strona główna", + "AGENTS": "Agenci", + "AGENT_BOTS": "Boty", + "AUDIT_LOGS": "Logi audytowe", + "INBOXES": "Skrzynki odbiorcze", + "NOTIFICATIONS": "Powiadomienia", + "CANNED_RESPONSES": "Gotowe odpowiedzi", + "INTEGRATIONS": "Integracje", + "PROFILE_SETTINGS": "Ustawienia profilu", + "ACCOUNT_SETTINGS": "Ustawienia konta", + "APPLICATIONS": "Aplikacje", + "LABELS": "Etykiety", + "CUSTOM_ATTRIBUTES": "Niestandardowe atrybuty", + "AUTOMATION": "Automatyzacja", + "MACROS": "Makra", + "TEAMS": "Zespoły", + "BILLING": "Rozliczenia", + "CUSTOM_VIEWS_FOLDER": "Foldery", + "CUSTOM_VIEWS_SEGMENTS": "Segmenty", + "ALL_CONTACTS": "Wszyscy Kontakty", + "TAGGED_WITH": "Otagowane jako", + "NEW_LABEL": "Nowa etykieta", + "NEW_TEAM": "Nowy zespół", + "NEW_INBOX": "Nowa skrzynka odbiorcza", + "REPORTS_CONVERSATION": "Rozmowy", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Kampanie", + "ONGOING": "Trwające", + "ONE_OFF": "Jednorazowe", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "Bot", + "REPORTS_AGENT": "Agenci", + "REPORTS_LABEL": "Etykiety", + "REPORTS_INBOX": "Skrzynka odbiorcza", + "REPORTS_TEAM": "Zespół", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "Ustaw dostępność jako", + "SET_YOUR_AVAILABILITY": "Ustaw swoją dostępność", + "SLA": "SLA", + "CUSTOM_ROLES": "Custom Roles", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Przegląd", + "REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages", + "HELP_CENTER": { + "TITLE": "Centrum pomocy", + "ARTICLES": "Articles", + "CATEGORIES": "Kategorie", + "LOCALES": "Języki", + "SETTINGS": "Ustawienia" + }, + "CHANNELS": "Channels", + "SET_AUTO_OFFLINE": { + "TEXT": "Automatycznie oznaczaj jako offline", + "INFO_TEXT": "Pozwól systemowi automatycznie oznaczać Cię jako offline, gdy nie korzystasz z aplikacji lub panelu", + "INFO_SHORT": "Automatically mark offline when you aren't using the app." + }, + "DOCS": "Czytaj dokumentację", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "Rozliczenia", + "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "CURRENT_PLAN": { + "TITLE": "Obecny plan", + "PLAN_NOTE": "Obecnie subskrybujesz plan **{plan}** z **{quantity}** licencjami", + "SEAT_COUNT": "Number of seats", + "RENEWS_ON": "Renews on" + }, + "VIEW_PRICING": "View Pricing", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Zarządzaj subskrypcją", + "DESCRIPTION": "Wyświetl swoje poprzednie faktury, edytuj dane rozliczeniowe lub anuluj subskrypcję.", + "BUTTON_TXT": "Przejdź do portalu rozliczeniowego" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Manage usage and credits for Captain AI.", + "BUTTON_TXT": "Buy more credits", + "DOCUMENTS": "Documents", + "RESPONSES": "Responses", + "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more.", + "REFRESH_CREDITS": "Odśwież" + }, + "CHAT_WITH_US": { + "TITLE": "Potrzebujesz pomocy?", + "DESCRIPTION": "Masz problemy z rozliczeniami? Jesteśmy tutaj, aby pomóc.", + "BUTTON_TXT": "Porozmawiaj z nami" + }, + "NO_BILLING_USER": "Konfigurowanie konta rozliczeniowego. Odśwież stronę i spróbuj ponownie.", + "TOPUP": { + "BUY_CREDITS": "Buy more credits", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Uwaga:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "Anuluj", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Powrót", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "Kod został skopiowany do schowka", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Ups! Nie znaleziono żadnych kont Chatwoot. Aby kontynuować, utwórz nowe konto.", + "NEW_ACCOUNT": "Nowe konto", + "SELECTOR_SUBTITLE": "Utwórz nowe konto", + "API": { + "SUCCESS_MESSAGE": "Konto zostało pomyślnie utworzone", + "EXIST_MESSAGE": "Konto już istnieje", + "ERROR_MESSAGE": "Nie można połączyć się z serwerem Woot, spróbuj ponownie później" + }, + "FORM": { + "NAME": { + "LABEL": "Nazwa firmy", + "PLACEHOLDER": "Przedsiębiorstwo Wayne" + }, + "SUBMIT": "Wyślij", + "CANCEL": "Anuluj" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "Wyświetl wszystkie skróty", + "TITLE": { + "OPEN_CONVERSATION": "Otwórz rozmowę", + "RESOLVE_AND_NEXT": "Zamknij i przejdź do następnej", + "NAVIGATE_DROPDOWN": "Przejdź do elementów menu rozwijanego", + "RESOLVE_CONVERSATION": "Zamknij rozmowę", + "GO_TO_CONVERSATION_DASHBOARD": "Przejdź do panelu rozmów", + "ADD_ATTACHMENT": "Dodaj załącznik", + "GO_TO_CONTACTS_DASHBOARD": "Przejdź do panelu kontaktów", + "TOGGLE_SIDEBAR": "Przełącz panel boczny", + "GO_TO_REPORTS_SIDEBAR": "Przejdź do panelu raportów", + "MOVE_TO_NEXT_TAB": "Przejdź do następnej karty na liście rozmów", + "GO_TO_SETTINGS": "Przejdź do ustawień", + "SWITCH_TO_PRIVATE_NOTE": "Przełącz do prywatnej notatki", + "SWITCH_TO_REPLY": "Przełącz do odpowiedzi", + "TOGGLE_SNOOZE_DROPDOWN": "Przełącz menu rozwijane drzemki" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "Priorytet", + "ACTIVE": "Aktywne", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "Edytuj" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Anuluj" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Opis:", + "PLACEHOLDER": "Enter description" + }, + "STATUS": { + "LABEL": "Status:", + "PLACEHOLDER": "Select status", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "Dodaj" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "Edytuj" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Anuluj" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Opis:", + "PLACEHOLDER": "Enter description" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "Dodaj" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "Usuń", + "CANCEL_BUTTON_LABEL": "Anuluj" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/signup.json b/app/javascript/dashboard/i18n/locale/pl/signup.json new file mode 100644 index 0000000..e142162 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Utwórz konto", + "TITLE": "Rejestracja", + "TESTIMONIAL_HEADER": "Wszystko czego potrzebujesz to jeden krok do przodu", + "TESTIMONIAL_CONTENT": "Jesteś tylko jeden krok od zaangażowania swoich klientów, zatrzymania ich i znalezienia nowych.", + "TERMS_ACCEPT": "Tworząc konto, zgadzasz się na nasze Warunki korzystania i Politykę prywatności", + "OAUTH": { + "GOOGLE_SIGNUP": "Zarejestruj się za pomocą Google" + }, + "COMPANY_NAME": { + "LABEL": "Nazwa firmy", + "PLACEHOLDER": "Wprowadź nazwę swojej firmy, np. Wayne Enterprises", + "ERROR": "Nazwa firmy jest zbyt krótka" + }, + "FULL_NAME": { + "LABEL": "Imię i nazwisko", + "PLACEHOLDER": "Wprowadź swoje imię i nazwisko, np. Bruce Wayne", + "ERROR": "Imię i nazwisko są zbyt krótkie" + }, + "EMAIL": { + "LABEL": "E-mail służbowy", + "PLACEHOLDER": "Enter your work email address. E.g., bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Wprowadź poprawny adres e-mail służbowy" + }, + "PASSWORD": { + "LABEL": "Hasło", + "PLACEHOLDER": "Hasło", + "ERROR": "Hasło jest zbyt krótkie", + "IS_INVALID_PASSWORD": "Hasło powinno zawierać co najmniej 1 wielką literę, 1 małą literę, 1 cyfrę i 1 znak specjalny", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Potwierdź hasło", + "PLACEHOLDER": "Potwierdź hasło", + "ERROR": "Hasła nie pasują." + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "Nie można połączyć się z serwerem Woot. Spróbuj ponownie później" + }, + "SUBMIT": "Utwórz konto", + "HAVE_AN_ACCOUNT": "Masz już konto?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/sla.json b/app/javascript/dashboard/i18n/locale/pl/sla.json new file mode 100644 index 0000000..7870322 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Add SLA", + "ADD_ACTION_LONG": "Create a new SLA Policy", + "DESCRIPTION": "Service Level Agreements (SLAs) are contracts that define clear expectations between your team and customers. They establish standards for response and resolution times, creating a framework for accountability and ensures a consistent, high-quality experience.", + "LEARN_MORE": "Learn more about SLA", + "LOADING": "Fetching SLAs", + "PAYWALL": { + "TITLE": "Upgrade to create SLAs", + "AVAILABLE_ON": "The SLA feature is only available in the Business and Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to advanced features like team management, automations, custom attributes, and more.", + "UPGRADE_NOW": "Upgrade now", + "CANCEL_ANYTIME": "You can change or cancel your plan anytime" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SLA feature is only available in the paid plans.", + "UPGRADE_PROMPT": "Upgrade to a paid plan to access advanced features like audit logs, agent capacity, and more.", + "ASK_ADMIN": "Please reach out to your administrator for the upgrade." + }, + "LIST": { + "404": "There are no SLAs available in this account.", + "EMPTY": { + "TITLE_1": "Enterprise P0", + "DESC_1": "Issues raised by enterprise customers, that require immediate attention.", + "TITLE_2": "Enterprise P1", + "DESC_2": "Issues raised by enterprise customers, that needs to be acknowledged quickly." + }, + "BUSINESS_HOURS_ON": "Business hours on", + "BUSINESS_HOURS_OFF": "Business hours off", + "RESPONSE_TYPES": { + "FRT": "First response time threshold", + "NRT": "Next response time threshold", + "RT": "Resolution time threshold", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "SLA Name", + "PLACEHOLDER": "SLA Name", + "REQUIRED_ERROR": "SLA name is required", + "MINIMUM_LENGTH_ERROR": "Wymagana długość wynosi minimum 2", + "VALID_ERROR": "Dozwolone są tylko litery, cyfry, myślnik i podkreślenie" + }, + "DESCRIPTION": { + "LABEL": "Opis", + "PLACEHOLDER": "SLA for premium customers" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "Czas pierwszej odpowiedzi", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Next Response Time", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "Czas rozwiązania", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Godziny pracy", + "PLACEHOLDER": "Only during business hours" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Threshold should be a number and greater than zero" + }, + "EDIT": "Edytuj", + "CREATE": "Stwórz", + "DELETE": "Usuń", + "CANCEL": "Anuluj" + }, + "ADD": { + "TITLE": "Add SLA", + "DESC": "Friendly promises for great service!", + "API": { + "SUCCESS_MESSAGE": "SLA added successfully", + "ERROR_MESSAGE": "Wystąpił błąd, spróbuj ponownie" + } + }, + "DELETE": { + "TITLE": "Delete SLA", + "API": { + "SUCCESS_MESSAGE": "SLA deleted successfully", + "ERROR_MESSAGE": "Wystąpił błąd, spróbuj ponownie" + }, + "CONFIRM": { + "TITLE": "Potwierdź usunięcie", + "MESSAGE": "Are you sure you want to delete ", + "YES": "Tak, usuń ", + "NO": "Nie, zachowaj " + } + }, + "EVENTS": { + "TITLE": "SLA Misses", + "FRT": "Czas pierwszej odpowiedzi", + "NRT": "Next response time", + "RT": "Resolution time", + "SHOW_MORE": "{count} more", + "HIDE": "Hide {count} rows" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/teamsSettings.json b/app/javascript/dashboard/i18n/locale/pl/teamsSettings.json new file mode 100644 index 0000000..41132aa --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Utwórz nowy zespół", + "HEADER": "Zespoły", + "LOADING": "Fetching teams", + "DESCRIPTION": "Teams allow you to organize agents into groups based on their responsibilities. An agent can belong to multiple teams. When working collaboratively, you can assign conversations to specific teams.", + "LEARN_MORE": "Learn more about teams", + "LIST": { + "404": "Na tym koncie nie ma żadnych zespołów.", + "EDIT_TEAM": "Edytuj zespół", + "NONE": "Brak" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Utwórz nowy zespół", + "DESC": "Dodaj tytuł i opis do swojego nowego zespołu." + }, + "AGENTS": { + "BUTTON_TEXT": "Dodaj agentów do zespołu", + "TITLE": "Dodaj agentów do zespołu - {teamName}", + "DESC": "Dodaj agentów do swojego nowo utworzonego zespołu. Dzięki temu możesz współpracować jako zespół w rozmowach oraz otrzymywać powiadomienia o nowych wydarzeniach w tej samej rozmowie." + }, + "WIZARD_CREATE": { + "TITLE": "Stwórz", + "BODY": "Utwórz nowy zespół agentów." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "Dodaj agentów", + "BODY": "Dodaj agentów do zespołu." + }, + "WIZARD_FINISH": { + "TITLE": "Zakończ", + "BODY": "Wszystko jest gotowe!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Edytuj dane swojego zespołu", + "DESC": "Edytuj tytuł i opis swojego zespołu.", + "BUTTON_TEXT": "Aktualizuj zespół" + }, + "AGENTS": { + "BUTTON_TEXT": "Aktualizuj agentów w zespole", + "TITLE": "Dodaj agentów do zespołu - {teamName}", + "DESC": "Dodaj agentów do swojego nowo utworzonego zespołu. Wszyscy dodani agenci zostaną powiadomieni, gdy rozmowa zostanie przypisana do tego zespołu." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Szczegóły zespołu", + "ROUTE": "settings_teams_edit", + "BODY": "Zmień nazwę, opis i inne dane." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Edytuj agentów", + "ROUTE": "settings_teams_edit_members", + "BODY": "Edytuj agentów w zespole." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Zakończ", + "ROUTE": "settings_teams_edit_finish", + "BODY": "Wszystko jest gotowe!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Nie udało się zapisać szczegółów zespołu. Spróbuj ponownie." + }, + "AGENTS": { + "AGENT": "AGENT", + "EMAIL": "EMAIL", + "BUTTON_TEXT": "Dodaj agentów", + "ADD_AGENTS": "Dodaj agenta do swojego zespołu...", + "SELECT": "wybierz", + "SELECT_ALL": "zaznacz wszystkich agentów", + "SELECTED_COUNT": "{selected} z {total} agentów wybranych." + }, + "ADD": { + "TITLE": "Dodaj agentów do zespołu - {teamName}", + "DESC": "Dodaj agentów do swojego nowo utworzonego zespołu. Dzięki temu możesz współpracować jako zespół w rozmowach oraz otrzymywać powiadomienia o nowych wydarzeniach w tej samej rozmowie.", + "SELECT": "wybierz", + "SELECT_ALL": "zaznacz wszystkich agentów", + "SELECTED_COUNT": "{selected} z {total} agentów wybranych.", + "BUTTON_TEXT": "Dodaj agentów", + "AGENT_VALIDATION_ERROR": "Wybierz co najmniej jednego agenta." + }, + "FINISH": { + "TITLE": "Twój zespół jest gotowy!", + "MESSAGE": "Możesz teraz współpracować jako zespół w rozmowach. Powodzenia w obsłudze klientów.", + "BUTTON_TEXT": "Zakończ" + }, + "DELETE": { + "BUTTON_TEXT": "Usuń", + "API": { + "SUCCESS_MESSAGE": "Zespół został pomyślnie usunięty.", + "ERROR_MESSAGE": "Nie można usunąć zespołu. Spróbuj ponownie." + }, + "CONFIRM": { + "TITLE": "Are you sure you want to delete the team?", + "PLACE_HOLDER": "Wpisz {teamName}, aby potwierdzić", + "MESSAGE": "Usuwanie zespołu spowoduje usunięcie przypisania zespołu z rozmów przypisanych do tego zespołu.", + "YES": "Usuń ", + "NO": "Anuluj" + } + }, + "SETTINGS": "Ustawienia", + "FORM": { + "UPDATE": "Aktualizuj zespół", + "CREATE": "Utwórz zespół", + "NAME": { + "LABEL": "Nazwa zespołu", + "PLACEHOLDER": "Przykład: Sprzedaż, Obsługa klienta" + }, + "DESCRIPTION": { + "LABEL": "Opis zespołu", + "PLACEHOLDER": "Krótki opis tego zespołu." + }, + "AUTO_ASSIGN": { + "LABEL": "Włącz automatyczne przypisywanie dla tego zespołu." + }, + "SUBMIT_CREATE": "Utwórz zespół" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/webhooks.json b/app/javascript/dashboard/i18n/locale/pl/webhooks.json new file mode 100644 index 0000000..1be3e04 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Ustawienia webhooka" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/pl/whatsappTemplates.json new file mode 100644 index 0000000..100d7db --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Szablony WhatsApp", + "SUBTITLE": "Wybierz szablon WhatsApp, który chcesz wysłać", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Wyszukaj szablony", + "NO_TEMPLATES_FOUND": "Nie znaleziono szablonów dla", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Kategoria", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Język", + "TEMPLATE_BODY": "Treść szablonu", + "CATEGORY": "Kategoria" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Zmienne", + "LANGUAGE": "Język", + "CATEGORY": "Kategoria", + "VARIABLE_PLACEHOLDER": "Wprowadź wartość {variable}", + "GO_BACK_LABEL": "Powrót", + "SEND_MESSAGE_LABEL": "Wyślij wiadomość", + "FORM_ERROR_MESSAGE": "Proszę wypełnić wszystkie zmienne przed wysłaniem", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pl/yearInReview.json b/app/javascript/dashboard/i18n/locale/pl/yearInReview.json new file mode 100644 index 0000000..cdd423b --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pl/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "Zamknij", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "Rozmowy", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "Pobierz", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "Udostępnij" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/advancedFilters.json b/app/javascript/dashboard/i18n/locale/pt/advancedFilters.json new file mode 100644 index 0000000..89b99d4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Filtrar conversas", + "SUBTITLE": "Adicione os seus filtros abaixo e clique em 'Aplicar filtros' para eliminar a confusão no chat.", + "EDIT_CUSTOM_FILTER": "Editar pasta", + "CUSTOM_VIEWS_SUBTITLE": "Adicione ou remova filtros e atualize sua pasta.", + "ADD_NEW_FILTER": "Adicionar filtro", + "FILTER_DELETE_ERROR": "Não foi possível guardar! Por favor, adicione, pelo menos, um filtro para guardar.", + "SUBMIT_BUTTON_LABEL": "Aplicar filtros", + "UPDATE_BUTTON_LABEL": "Atualizar pasta", + "CANCEL_BUTTON_LABEL": "Cancelar", + "CLEAR_BUTTON_LABEL": "Limpar filtros", + "FOLDER_LABEL": "Nome da pasta", + "FOLDER_QUERY_LABEL": "Consulta de pasta", + "EMPTY_VALUE_ERROR": "Valor obrigatório.", + "TOOLTIP_LABEL": "Filtrar conversas", + "QUERY_DROPDOWN_LABELS": { + "AND": "E", + "OR": "OU" + }, + "INPUT_PLACEHOLDER": "Inserir valor", + "OPERATOR_LABELS": { + "equal_to": "Igual a", + "not_equal_to": "Não é igual a", + "does_not_contain": "Não contém", + "is_present": "Está presente", + "is_not_present": "Não está presente", + "is_greater_than": "É maior do que", + "is_less_than": "É menor do que", + "days_before": "É x dias antes", + "starts_with": "Começa com", + "equalTo": "Igual a", + "notEqualTo": "Não é igual a", + "contains": "Contém", + "doesNotContain": "Não contém", + "isPresent": "Está presente", + "isNotPresent": "Não está presente", + "isGreaterThan": "É maior do que", + "isLessThan": "É menor do que", + "daysBefore": "É x dias antes", + "startsWith": "Começa com" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "Verdadeiro", + "FALSE": "Falso" + }, + "ATTRIBUTES": { + "STATUS": "Situação", + "ASSIGNEE_NAME": "Nome do titular", + "INBOX_NAME": "Nome da caixa de entrada", + "TEAM_NAME": "Nome da equipa", + "CONVERSATION_IDENTIFIER": "ID da conversa", + "CAMPAIGN_NAME": "Nome da campanha", + "LABELS": "Etiquetas", + "BROWSER_LANGUAGE": "Idioma do browser", + "PRIORITY": "Prioridade", + "COUNTRY_NAME": "Nome do país", + "REFERER_LINK": "Link de referência", + "CUSTOM_ATTRIBUTE_LIST": "Lista", + "CUSTOM_ATTRIBUTE_TEXT": "Texto", + "CUSTOM_ATTRIBUTE_NUMBER": "Número", + "CUSTOM_ATTRIBUTE_LINK": "Endereço", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Caixa de seleção", + "CREATED_AT": "Criada em", + "LAST_ACTIVITY": "Última atividade" + }, + "ERRORS": { + "VALUE_REQUIRED": "Valor obrigatório", + "ATTRIBUTE_KEY_REQUIRED": "A chave do atributo é necessária", + "FILTER_OPERATOR_REQUIRED": "Operador do filtro é necessário", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "O valor deve ser entre 1 e 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Filtros padrão", + "ADDITIONAL_FILTERS": "Filtros adicionais", + "CUSTOM_ATTRIBUTES": "Atributos personalizados" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Pretende guardar este filtro?", + "LABEL": "Nome do filtro", + "PLACEHOLDER": "Dê um nome ao filtro, para consultá-lo mais tarde.", + "ERROR_MESSAGE": "Nome é obrigatório.", + "SAVE_BUTTON": "Guardar filtro", + "CANCEL_BUTTON": "Cancelar", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Pasta criada com sucesso.", + "ERROR_MESSAGE": "Erro ao criar a pasta." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segmento criado com sucesso.", + "ERROR_MESSAGE": "Erro ao criar segmento." + } + }, + "EDIT": { + "EDIT_BUTTON": "Editar pasta" + }, + "DELETE": { + "DELETE_BUTTON": "Apagar filtro", + "MODAL": { + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Tem a certeza que deseja excluir o filtro ", + "YES": "Sim, excluir", + "NO": "Não, manter" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Pasta criada com sucesso.", + "ERROR_MESSAGE": "Erro ao apagar a pasta." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segmento apagado com sucesso.", + "ERROR_MESSAGE": "Erro ao apagar segmento." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/agentBots.json b/app/javascript/dashboard/i18n/locale/pt/agentBots.json new file mode 100644 index 0000000..e2feb92 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Bots", + "LOADING_EDITOR": "A carregar editor...", + "DESCRIPTION": "Os Agentes Bots são como os membros mais fabulosos da sua equipa. Tratam das pequenas coisas, para que se possa concentrar no que realmente importa. Experimente. Pode gerir os seus bots nesta página ou criar novos, utilizando o botão \"Adicionar Bot\".", + "LEARN_MORE": "Learn about agent bots", + "GLOBAL_BOT": "Bot do sistema", + "GLOBAL_BOT_BADGE": "Sistema", + "AVATAR": { + "SUCCESS_DELETE": "Avatar do bot apagado", + "ERROR_DELETE": "Erro ao apagar avatar do bot, por favor tente novamente" + }, + "BOT_CONFIGURATION": { + "TITLE": "Selecione um agente bot", + "DESC": "Atribua um agente bot à sua caixa de entrada. Eles podem lidar com conversas iniciais e transferi-las para um agente humano quando necessário.", + "SUBMIT": "Atualização", + "DISCONNECT": "Desligar bot", + "SUCCESS_MESSAGE": "Agente bot atualizado com sucesso.", + "DISCONNECTED_SUCCESS_MESSAGE": "O agente bot foi desligado com sucesso.", + "ERROR_MESSAGE": "Não foi possível atualizar o agente bot. Por favor, tente novamente.", + "DISCONNECTED_ERROR_MESSAGE": "Não foi possível desligar o agente bot. Por favor, tente novamente.", + "SELECT_PLACEHOLDER": "Selecionar bot" + }, + "ADD": { + "TITLE": "Adicionar Bot", + "CANCEL_BUTTON_TEXT": "Cancelar", + "API": { + "SUCCESS_MESSAGE": "Bot adicionado com sucesso.", + "ERROR_MESSAGE": "Não foi possível adicionar o bot. Por favor, tente novamente mais tarde." + } + }, + "LIST": { + "404": "Nenhum bot encontrado. Pode criar um bot clicando no botão \"Adicionar Bot\".", + "LOADING": "A carregar bots...", + "TABLE_HEADER": { + "DETAILS": "Detalhes do bot", + "URL": "URL do Webhook" + } + }, + "DELETE": { + "BUTTON_TEXT": "Excluir", + "TITLE": "Apagar bot", + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Tem a certeza que pretende apagar o {name}?", + "YES": "Sim, excluir", + "NO": "Não, manter" + }, + "API": { + "SUCCESS_MESSAGE": "Bot apagado com sucesso.", + "ERROR_MESSAGE": "Não foi possível apagar o bot. Por favor, tente novamente." + } + }, + "EDIT": { + "BUTTON_TEXT": "Editar", + "TITLE": "Editar bot", + "API": { + "SUCCESS_MESSAGE": "Bot atualizado com sucesso.", + "ERROR_MESSAGE": "Não foi possível atualizar o bot. Por favor, tente novamente." + } + }, + "ACCESS_TOKEN": { + "TITLE": "Token de acesso", + "DESCRIPTION": "Copie o token de acesso e guarde-o de forma segura", + "COPY_SUCCESSFUL": "Token de acesso copiado para área de transferência", + "RESET_SUCCESS": "O token de acesso voltou a ser gerado", + "RESET_ERROR": "Não foi possível voltar a gerar o token de acesso, por favor tente novamente" + }, + "FORM": { + "AVATAR": { + "LABEL": "Bot avatar" + }, + "NAME": { + "LABEL": "Nome do bot", + "PLACEHOLDER": "Insira o nome do bot", + "REQUIRED": "O nome do bot é obrigatório" + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "O que faz este bot?" + }, + "WEBHOOK_URL": { + "LABEL": "URL do Webhook", + "PLACEHOLDER": "https://exemplo.com/webhook", + "REQUIRED": "O URL do Webhook é obrigatório" + }, + "ERRORS": { + "NAME": "O nome do bot é obrigatório", + "URL": "O URL do Webhook é obrigatório", + "VALID_URL": "Por favor, insira um URL válido que comece por http:// ou https://" + }, + "CANCEL": "Cancelar", + "CREATE": "Criar Bot", + "UPDATE": "Atualizar Bot" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure um webhook para o bot integrar com os seus serviços personalizados. O bot receberá e processará eventos de conversas e pode respondê-los." + }, + "TYPES": { + "WEBHOOK": "Webhook bot" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/agentMgmt.json b/app/javascript/dashboard/i18n/locale/pt/agentMgmt.json new file mode 100644 index 0000000..d9c7c5f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Agentes", + "HEADER_BTN_TXT": "Adicionar agente", + "LOADING": "A procurar lista de agentes", + "DESCRIPTION": "Um agente é um membro da sua equipa de suporte que pode visualizar e responder às mensagens de clientes. A lista abaixo mostra todos os agentes da sua conta.", + "LEARN_MORE": "Saber mais sobre os papéis de utilizadores", + "AGENT_TYPES": { + "ADMINISTRATOR": "Administrador", + "AGENT": "Agente" + }, + "LIST": { + "404": "Não há agentes associados a esta conta", + "TITLE": "Gerir agentes na sua equipa", + "DESC": "Pode adicionar/remover agentes para/da sua equipa.", + "NAME": "Nome:", + "EMAIL": "E-mail:", + "STATUS": "Situação", + "ACTIONS": "Ações", + "VERIFIED": "Verificada", + "VERIFICATION_PENDING": "Verificação pendente", + "AVAILABLE_CUSTOM_ROLE": "Available custom role permissions" + }, + "ADD": { + "TITLE": "Adicionar agente à sua equipa", + "DESC": "Pode adicionar pessoas que serão capazes de lidar com o suporte das suas caixas de entrada.", + "CANCEL_BUTTON_TEXT": "Cancelar", + "FORM": { + "NAME": { + "LABEL": "Nome do agente", + "PLACEHOLDER": "Por favor, insira o nome do agente" + }, + "AGENT_TYPE": { + "LABEL": "Tipo de agente", + "PLACEHOLDER": "Por favor, selecione um tipo", + "ERROR": "O tipo de agente é obrigatório" + }, + "EMAIL": { + "LABEL": "Endereço de e-mail", + "PLACEHOLDER": "Por favor, insira o endereço de e-mail do agente" + }, + "SUBMIT": "Adicionar agente" + }, + "API": { + "SUCCESS_MESSAGE": "Agente adicionado com sucesso", + "EXIST_MESSAGE": "O e-mail do agente já está a ser utilizado, por favor tente outro endereço de e-mail", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot, por favor, tente novamente mais tarde" + } + }, + "DELETE": { + "BUTTON_TEXT": "Excluir", + "API": { + "SUCCESS_MESSAGE": "Agente excluído com sucesso", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot, por favor, tente novamente mais tarde" + }, + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Tem certeza que deseja excluir agente ", + "YES": "Sim, excluir ", + "NO": "Não, manter " + } + }, + "EDIT": { + "TITLE": "Editar agente", + "FORM": { + "NAME": { + "LABEL": "Nome do agente", + "PLACEHOLDER": "Por favor, insira o nome do agente" + }, + "AGENT_TYPE": { + "LABEL": "Tipo de agente", + "PLACEHOLDER": "Por favor, selecione um tipo", + "ERROR": "O tipo de agente é obrigatório" + }, + "EMAIL": { + "LABEL": "Endereço de e-mail", + "PLACEHOLDER": "Por favor, insira o endereço de e-mail do agente" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Disponibilidade", + "PLACEHOLDER": "Por favor, selecione um estado de disponibilidade", + "ERROR": "Disponibilidade é necessária" + }, + "SUBMIT": "Editar agente" + }, + "BUTTON_TEXT": "Editar", + "CANCEL_BUTTON_TEXT": "Cancelar", + "API": { + "SUCCESS_MESSAGE": "Agente atualizado com sucesso", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot, por favor, tente novamente mais tarde" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Redefinir a palavra-passe", + "ADMIN_SUCCESS_MESSAGE": "Um e-mail com instruções para redefinir a palavra-passe foi enviado para o agente", + "SUCCESS_MESSAGE": "Palavra-passe do agente redefinida com sucesso", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot, por favor, tente novamente mais tarde" + } + }, + "SEARCH": { + "NO_RESULTS": "Nenhum resultado encontrado." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "Nenhum", + "TITLE": { + "AGENT": "Escolher agente", + "TEAM": "Escolher equipa" + }, + "LIST": { + "NONE": "Nenhuma" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "Nenhum agente encontrado", + "TEAM": "Nenhuma equipa encontrada" + }, + "PLACEHOLDER": { + "AGENT": "Procurar agentes", + "TEAM": "Procurar equipas", + "INPUT": "Procurar agentes" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/pt/attributesMgmt.json new file mode 100644 index 0000000..242c174 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Atributos personalizados", + "HEADER_BTN_TXT": "Adicionar atributo personalizado", + "LOADING": "A obter atributos personalizados", + "DESCRIPTION": "A custom attribute tracks additional details about your contacts or conversations—such as the subscription plan or the date of their first purchase. You can add different types of custom attributes, such as text, lists, or numbers, to capture the specific information you need.", + "LEARN_MORE": "Learn more about custom attributes", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Conversa", + "CONTACT": "Contacto" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Texto", + "NUMBER": "Número", + "LINK": "Endereço", + "DATE": "Date", + "LIST": "Lista", + "CHECKBOX": "Caixa de seleção" + }, + "ADD": { + "TITLE": "Adicionar atributo personalizado", + "SUBMIT": "Criar", + "CANCEL_BUTTON_TEXT": "Cancelar", + "FORM": { + "NAME": { + "LABEL": "Mostrar nome", + "PLACEHOLDER": "Introduza o nome de exibição do atributo personalizado", + "ERROR": "Nome é obrigatório" + }, + "DESC": { + "LABEL": "Descrição", + "PLACEHOLDER": "Introduza a descrição do atributo personalizado", + "ERROR": "Descrição é obrigatória" + }, + "MODEL": { + "LABEL": "Aplica-se a", + "PLACEHOLDER": "Por favor, selecione um", + "ERROR": "Modelo é obrigatório" + }, + "TYPE": { + "LABEL": "Tipo", + "PLACEHOLDER": "Por favor, selecione um tipo", + "ERROR": "Tipo é obrigatório", + "LIST": { + "LABEL": "Listar valores", + "PLACEHOLDER": "Por favor, insira um valor e pressione Enter", + "ERROR": "Deve possuir, pelo menos, um valor" + } + }, + "KEY": { + "LABEL": "Chave", + "PLACEHOLDER": "Introduzir chave de atributo personalizado", + "ERROR": "Chave é obrigatória", + "IN_VALID": "Chave inválida" + }, + "REGEX_PATTERN": { + "LABEL": "Padrão regex", + "PLACEHOLDER": "Por favor, insira um padrão regex de atributo personalizado. (Opcional)" + }, + "REGEX_CUE": { + "LABEL": "Sugestão regex", + "PLACEHOLDER": "Por favor, insira dica para o padrão regex. (Opcional)" + }, + "ENABLE_REGEX": { + "LABEL": "Ativar validação de regex" + } + }, + "API": { + "SUCCESS_MESSAGE": "Atributo personalizado adicionado com sucesso!", + "ERROR_MESSAGE": "Não foi possível criar um atributo personalizado, por favor, tente novamente mais tarde." + } + }, + "DELETE": { + "BUTTON_TEXT": "Excluir", + "API": { + "SUCCESS_MESSAGE": "Atributo personalizado excluído com sucesso.", + "ERROR_MESSAGE": "Não foi possível excluir o atributo personalizado. Tente novamente." + }, + "CONFIRM": { + "TITLE": "Tem a certeza que pretende apagar a equipa - {attributeName}", + "PLACE_HOLDER": "Por favor, digite {attributeName} para confirmar", + "MESSAGE": "A eliminação irá remover o atributo personalizado", + "YES": "Excluir ", + "NO": "Cancelar" + } + }, + "EDIT": { + "TITLE": "Editar atributo personalizado", + "UPDATE_BUTTON_TEXT": "Atualização", + "TYPE": { + "LIST": { + "LABEL": "Listar valores", + "PLACEHOLDER": "Por favor, insira valores e pressione Enter" + } + }, + "API": { + "SUCCESS_MESSAGE": "Atributo personalizado atualizado com sucesso", + "ERROR_MESSAGE": "Houve um erro na atualização do atributo personalizado, por favor, tente novamente" + } + }, + "TABS": { + "HEADER": "Atributos personalizados", + "CONVERSATION": "Conversa", + "CONTACT": "Contacto" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nome:", + "DESCRIPTION": "Descrição", + "TYPE": "Tipo", + "KEY": "Chave" + }, + "BUTTONS": { + "EDIT": "Editar", + "DELETE": "Excluir" + }, + "EMPTY_RESULT": { + "404": "Não há atributos personalizados criados", + "NOT_FOUND": "Não há atributos personalizados configurados" + }, + "REGEX_PATTERN": { + "LABEL": "Padrão regex", + "PLACEHOLDER": "Por favor, insira um padrão regex de atributo personalizado. (Opcional)" + }, + "REGEX_CUE": { + "LABEL": "Sugestão regex", + "PLACEHOLDER": "Por favor, insira uma dica para o padrão regex. (Opcional)" + }, + "ENABLE_REGEX": { + "LABEL": "Ativar validação de regex" + } + }, + "BADGES": { + "PRE_CHAT": "Pre-chat", + "RESOLUTION": "Resolution" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/auditLogs.json b/app/javascript/dashboard/i18n/locale/pt/auditLogs.json new file mode 100644 index 0000000..04f1bdd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Logs de auditoria", + "HEADER_BTN_TXT": "Adicionar logs de auditoria", + "LOADING": "A obter logs de auditoria", + "DESCRIPTION": "Os logs de auditoria mantêm um registo das atividades na sua conta, permitindo-lhe acompanhar e auditar a sua conta, equipa ou serviços.", + "LEARN_MORE": "Saber mais sobre os logs de auditoria", + "SEARCH_404": "Não existem itens correspondentes a esta consulta", + "SIDEBAR_TXT": "Logs de auditoria
Logs de auditoria são registos de eventos e ações de um Sistema de Chatwoot.
", + "LIST": { + "404": "Não há logs de auditoria referentes a esta conta.", + "TITLE": "Gerir logs de auditoria", + "DESC": "Logs de auditoria são registos de eventos e ações do Sistema Chatwoot.", + "TABLE_HEADER": { + "ACTIVITY": "User", + "TIME": "Horário", + "IP_ADDRESS": "Endereço IP" + } + }, + "API": { + "SUCCESS_MESSAGE": "Logs de auditoria recuperados com sucesso", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot, por favor, tente novamente mais tarde" + }, + "DEFAULT_USER": "Sistema", + "AUTOMATION_RULE": { + "ADD": "{agentName} created a new automation rule (#{id})", + "EDIT": "{agentName} updated an automation rule (#{id})", + "DELETE": "{agentName} deleted an automation rule (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} convidou {invitee} para a conta como {role}", + "EDIT": { + "SELF": "{agentName} alterou o seu {attributes} para {values}", + "OTHER": "{agentName} alterou o parâmetro {attributes} do utilizador {user} para {values}", + "DELETED": "{agentName} alterou o parâmetro {attributes} de um utilizador excluído para {values}" + } + }, + "INBOX": { + "ADD": "{agentName} created a new inbox (#{id})", + "EDIT": "{agentName} updated an inbox (#{id})", + "DELETE": "{agentName} deleted an inbox (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} created a new webhook (#{id})", + "EDIT": "{agentName} updated a webhook (#{id})", + "DELETE": "{agentName} deleted a webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} iniciou sessão", + "SIGN_OUT": "{agentName} terminou sessão" + }, + "TEAM": { + "ADD": "{agentName} created a new team (#{id})", + "EDIT": "{agentName} updated a team (#{id})", + "DELETE": "{agentName} deleted a team (#{id})" + }, + "MACRO": { + "ADD": "{agentName} created a new macro (#{id})", + "EDIT": "{agentName} updated a macro (#{id})", + "DELETE": "{agentName} deleted a macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} added {user} to the inbox(#{inbox_id})", + "REMOVE": "{agentName} removed {user} from the inbox(#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} added {user} to the team(#{team_id})", + "REMOVE": "{agentName} removed {user} from the team(#{team_id})" + }, + "ACCOUNT": { + "EDIT": "{agentName} updated the account configuration (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} apagou a conversa #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/automation.json b/app/javascript/dashboard/i18n/locale/pt/automation.json new file mode 100644 index 0000000..b97cf76 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automatização", + "DESCRIPTION": "A automação pode substituir e racionalizar os processos existentes que requerem esforço manual, como a adição de etiquetas e a atribuição de conversas ao agente mais adequado. Isto permite que a equipa se foque em tarefas maiores, reduzindo o tempo gasto em tarefas rotineiras.", + "LEARN_MORE": "Saber mais sobre automação", + "HEADER_BTN_TXT": "Adicionar regra de automação", + "LOADING": "A procurar regras de automação", + "ADD": { + "TITLE": "Adicionar regra de automação", + "SUBMIT": "Criar", + "CANCEL_BUTTON_TEXT": "Cancelar", + "FORM": { + "NAME": { + "LABEL": "Nome da regra", + "PLACEHOLDER": "Insira o nome da regra", + "ERROR": "Nome é obrigatório" + }, + "DESC": { + "LABEL": "Descrição", + "PLACEHOLDER": "Insira descrição da regra", + "ERROR": "Descrição é obrigatória" + }, + "EVENT": { + "LABEL": "Evento", + "PLACEHOLDER": "Por favor, selecione um", + "ERROR": "Evento é necessário" + }, + "CONDITIONS": { + "LABEL": "Condições" + }, + "ACTIONS": { + "LABEL": "Ações" + } + }, + "CONDITION_BUTTON_LABEL": "Adicionar condição", + "ACTION_BUTTON_LABEL": "Adicionar ação", + "API": { + "SUCCESS_MESSAGE": "Regra de automação adicionada com sucesso", + "ERROR_MESSAGE": "Não foi possível criar uma regra de automação, por favor, tente novamente mais tarde" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nome:", + "DESCRIPTION": "Descrição", + "ACTIVE": "Ativa", + "CREATED_ON": "Criado em" + }, + "404": "Nenhuma regra de automação encontrada" + }, + "DELETE": { + "TITLE": "Apagar regra de automação", + "SUBMIT": "Excluir", + "CANCEL_BUTTON_TEXT": "Cancelar", + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Tem a certeza que pretende excluir a automação ", + "YES": "Sim, excluir ", + "NO": "Não, manter " + }, + "API": { + "SUCCESS_MESSAGE": "Regra de automação excluída com sucesso", + "ERROR_MESSAGE": "Não foi possível excluir a regra de automação, por favor, tente novamente mais tarde" + } + }, + "EDIT": { + "TITLE": "Editar regra de automação", + "SUBMIT": "Atualização", + "CANCEL_BUTTON_TEXT": "Cancelar", + "API": { + "SUCCESS_MESSAGE": "Regra de automação atualizada com sucesso", + "ERROR_MESSAGE": "Não foi possível atualizar a regra de automação, por favor, tente novamente mais tarde" + } + }, + "CLONE": { + "TOOLTIP": "Clone", + "API": { + "SUCCESS_MESSAGE": "Automação clonada com sucesso", + "ERROR_MESSAGE": "Não foi possível clonar a regra de automação, por favor, tente novamente mais tarde" + } + }, + "FORM": { + "EDIT": "Editar", + "CREATE": "Criar", + "DELETE": "Excluir", + "CANCEL": "Cancelar", + "RESET_MESSAGE": "Alterar o tipo de evento irá redefinir as condições e eventos adicionados abaixo" + }, + "CONDITION": { + "DELETE_MESSAGE": "É necessário ter, pelo menos, uma condição para guardar", + "CONTACT_CUSTOM_ATTR_LABEL": "Atributos personalizados do contacto", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Atributos personalizados da conversa" + }, + "ACTION": { + "DELETE_MESSAGE": "É necessário ter, pelo menos, uma ação para guardar", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Introduza aqui a sua mensagem", + "TEAM_DROPDOWN_PLACEHOLDER": "Selecionar equipas", + "EMAIL_INPUT_PLACEHOLDER": "Inserir e-mail", + "URL_INPUT_PLACEHOLDER": "Inserir URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Ativar regra de automação", + "DEACTIVATION_TITLE": "Desativar regra de automação", + "ACTIVATION_DESCRIPTION": "Esta ação irá ativar a regra de automação '{automationName}'. Tem a certeza que pretende continuar?", + "DEACTIVATION_DESCRIPTION": "Esta ação irá desativar a regra de automação '{automationName}'. Tem a certeza que pretende continuar?", + "ACTIVATION_SUCCESFUL": "Regra de automação ativada com sucesso", + "DEACTIVATION_SUCCESFUL": "Regra de automação desativada com sucesso", + "ACTIVATION_ERROR": "Não foi possível ativar a automação. Por favor, tente novamente mais tarde", + "DEACTIVATION_ERROR": "Não foi possível desativar a automação. Por favor, tente novamente mais tarde", + "CONFIRMATION_LABEL": "Sim", + "CANCEL_LABEL": "Não" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Não foi possível carregar anexo, por favor, tente novamente", + "LABEL_IDLE": "Carregar anexo", + "LABEL_UPLOADING": "A carregar...", + "LABEL_UPLOADED": "Anexo carregado com sucesso", + "LABEL_UPLOAD_FAILED": "Falha ao carregar anexo" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "A chave do atributo é necessária", + "FILTER_OPERATOR_REQUIRED": "Operador do filtro é necessário", + "VALUE_REQUIRED": "Valor obrigatório", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "O valor deve ser entre 1 e 998", + "ACTION_PARAMETERS_REQUIRED": "Os parâmetros de ação são obrigatórios", + "ATLEAST_ONE_CONDITION_REQUIRED": "Pelo menos uma condição é obrigatória", + "ATLEAST_ONE_ACTION_REQUIRED": "Pelo menos uma ação é obrigatória" + }, + "NONE_OPTION": "Nenhuma", + "EVENTS": { + "CONVERSATION_CREATED": "Conversa criada", + "CONVERSATION_UPDATED": "Conversa atualizada", + "MESSAGE_CREATED": "Mensagem criada", + "CONVERSATION_RESOLVED": "Conversation Resolved", + "CONVERSATION_OPENED": "Conversa aberta" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Atribuir ao agente", + "ASSIGN_TEAM": "Atribuir equipa", + "ADD_LABEL": "Adicionar etiqueta", + "REMOVE_LABEL": "Remover um rótulo", + "SEND_EMAIL_TO_TEAM": "Enviar um e-mail para a equipa", + "SEND_EMAIL_TRANSCRIPT": "Enviar transcrição por e-mail", + "MUTE_CONVERSATION": "Silenciar Conversa", + "SNOOZE_CONVERSATION": "Adiar conversa", + "RESOLVE_CONVERSATION": "Resolver conversa", + "SEND_WEBHOOK_EVENT": "Enviar evento webhook", + "SEND_ATTACHMENT": "Enviar anexo", + "SEND_MESSAGE": "Enviar mensagem", + "ADD_PRIVATE_NOTE": "Adicionar uma Nota Privada", + "CHANGE_PRIORITY": "Alterar prioridade", + "ADD_SLA": "Adicionar SLA", + "OPEN_CONVERSATION": "Abrir conversa" + }, + "MESSAGE_TYPES": { + "INCOMING": "Incoming Message", + "OUTGOING": "Outgoing Message" + }, + "PRIORITY_TYPES": { + "NONE": "Nenhuma", + "LOW": "Baixa", + "MEDIUM": "Média", + "HIGH": "Elevada", + "URGENT": "Urgente" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Tipo de mensagem", + "MESSAGE_CONTAINS": "A mensagem contém", + "EMAIL": "E-mail", + "INBOX": "Caixa de entrada", + "CONVERSATION_LANGUAGE": "Linguagem da conversa", + "PHONE_NUMBER": "Número de telefone", + "STATUS": "Situação", + "BROWSER_LANGUAGE": "Idioma do navegador", + "MAIL_SUBJECT": "Assunto do e-mail", + "COUNTRY_NAME": "País", + "REFERER_LINK": "Link de referência", + "ASSIGNEE_NAME": "Atribuído", + "TEAM_NAME": "Equipa", + "PRIORITY": "Prioridade", + "LABELS": "Etiquetas" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/bulkActions.json b/app/javascript/dashboard/i18n/locale/pt/bulkActions.json new file mode 100644 index 0000000..dc587fc --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} conversas selecionadas", + "AGENT_SELECT_LABEL": "Escolher agente", + "ASSIGN_CONFIRMATION_LABEL": "Tem a certeza que pretende atribuir {conversationCount} {conversationLabel} a", + "UNASSIGN_CONFIRMATION_LABEL": "Tem a certeza que pretende remover a atribuição de {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Voltar", + "ASSIGN_LABEL": "Atribuir", + "YES": "Sim", + "SEARCH_INPUT_PLACEHOLDER": "Procurar", + "ASSIGN_AGENT_TOOLTIP": "Atribuir agente", + "ASSIGN_TEAM_TOOLTIP": "Atribuir equipa", + "ASSIGN_SUCCESFUL": "Conversas atribuídas com sucesso.", + "ASSIGN_FAILED": "Falha ao atribuir conversas. Por favor, tente novamente.", + "RESOLVE_SUCCESFUL": "Conversas resolvidas com sucesso.", + "RESOLVE_FAILED": "Falha ao resolver conversas. Por favor, tente novamente.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "As conversas visíveis nesta página estão apenas selecionadas.", + "AGENT_LIST_LOADING": "A carregar agentes", + "UPDATE": { + "CHANGE_STATUS": "Alterar estado", + "SNOOZE_UNTIL": "Adiar", + "UPDATE_SUCCESFUL": "Estado da conversa atualizado com sucesso.", + "UPDATE_FAILED": "Falha ao atualizar conversas. Por favor, tente novamente." + }, + "LABELS": { + "ASSIGN_LABELS": "Atribuir etiquetas", + "NO_LABELS_FOUND": "Nenhuma etiqueta encontrada", + "ASSIGN_SELECTED_LABELS": "Atribuir etiquetas selecionadas", + "ASSIGN_SUCCESFUL": "Etiquetas atribuídas com sucesso.", + "ASSIGN_FAILED": "Falha ao atribuir etiquetas. Por favor, tente novamente." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Escolher equipa", + "NONE": "Nenhuma", + "NO_TEAMS_AVAILABLE": "Não há equipas nesta conta.", + "ASSIGN_SELECTED_TEAMS": "Atribuir equipa selecionada.", + "ASSIGN_SUCCESFUL": "Equipas atribuídas.", + "ASSIGN_FAILED": "Falha ao atribuir equipa. Tente novamente." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/campaign.json b/app/javascript/dashboard/i18n/locale/pt/campaign.json new file mode 100644 index 0000000..6a007e9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Live chat campaigns", + "NEW_CAMPAIGN": "Create campaign", + "CARD": { + "STATUS": { + "ENABLED": "Ativado", + "DISABLED": "Inativo" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Enviado por", + "BOT": "Bot", + "FROM": "de", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "No live chat campaigns are available", + "SUBTITLE": "Connect with your customers using proactive messages. Click 'Create campaign' to get started." + }, + "CREATE": { + "TITLE": "Create a live chat campaign", + "CANCEL_BUTTON_TEXT": "Cancelar", + "CREATE_BUTTON_TEXT": "Criar", + "FORM": { + "TITLE": { + "LABEL": "Título", + "PLACEHOLDER": "Por favor, insira o título da campanha", + "ERROR": "Título obrigatório" + }, + "MESSAGE": { + "LABEL": "Messagem", + "PLACEHOLDER": "Por favor, insira a mensagem da campanha", + "ERROR": "A mensagem é obrigatória" + }, + "INBOX": { + "LABEL": "Selecionar caixa de entrada", + "PLACEHOLDER": "Selecionar caixa de entrada", + "ERROR": "Caixa de entrada obrigatória" + }, + "SENT_BY": { + "LABEL": "Enviado por", + "PLACEHOLDER": "Please select sender", + "ERROR": "O remetente é obrigatório" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Por favor, insira o URL", + "ERROR": "Por favor, insira um URL válido" + }, + "TIME_ON_PAGE": { + "LABEL": "Tempo na página (segundos)", + "PLACEHOLDER": "Por favor, insira a hora", + "ERROR": "O tempo na página é obrigatório" + }, + "OTHER_PREFERENCES": { + "TITLE": "Other preferences", + "ENABLED": "Ativar a campanha", + "TRIGGER_ONLY_BUSINESS_HOURS": "Ativar apenas durante o horário de trabalho" + }, + "BUTTONS": { + "CREATE": "Criar", + "CANCEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Live chat campaign created successfully", + "ERROR_MESSAGE": "Ocorreu um erro. Por favor, tente novamente." + } + } + }, + "EDIT": { + "TITLE": "Edit live chat campaign", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Live chat campaign updated successfully", + "ERROR_MESSAGE": "Ocorreu um erro. Por favor, tente novamente." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "SMS campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No SMS campaigns are available", + "SUBTITLE": "Launch an SMS campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Concluída", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create SMS campaign", + "CANCEL_BUTTON_TEXT": "Cancelar", + "CREATE_BUTTON_TEXT": "Criar", + "FORM": { + "TITLE": { + "LABEL": "Título", + "PLACEHOLDER": "Por favor, insira o título da campanha", + "ERROR": "Título obrigatório" + }, + "MESSAGE": { + "LABEL": "Messagem", + "PLACEHOLDER": "Por favor, insira a mensagem da campanha", + "ERROR": "A mensagem é obrigatória" + }, + "INBOX": { + "LABEL": "Selecionar caixa de entrada", + "PLACEHOLDER": "Selecionar caixa de entrada", + "ERROR": "Caixa de entrada obrigatória" + }, + "AUDIENCE": { + "LABEL": "Público-alvo", + "PLACEHOLDER": "Escolher etiquetas dos clientes", + "ERROR": "Público-alvo obrigatório" + }, + "SCHEDULED_AT": { + "LABEL": "Horário agendado", + "PLACEHOLDER": "Por favor, selecione a hora", + "ERROR": "Horário de agendamento obrigatório" + }, + "BUTTONS": { + "CREATE": "Criar", + "CANCEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "SMS campaign created successfully", + "ERROR_MESSAGE": "Ocorreu um erro. Por favor, tente novamente." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "WhatsApp campaigns", + "NEW_CAMPAIGN": "Create campaign", + "EMPTY_STATE": { + "TITLE": "No WhatsApp campaigns are available", + "SUBTITLE": "Launch a WhatsApp campaign to reach your customers directly. Send offers or make announcements with ease. Click 'Create campaign' to get started." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Concluída", + "SCHEDULED": "Scheduled" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Sent from", + "ON": "on" + } + }, + "CREATE": { + "TITLE": "Create WhatsApp campaign", + "CANCEL_BUTTON_TEXT": "Cancelar", + "CREATE_BUTTON_TEXT": "Criar", + "FORM": { + "TITLE": { + "LABEL": "Título", + "PLACEHOLDER": "Por favor, insira o título da campanha", + "ERROR": "Título obrigatório" + }, + "INBOX": { + "LABEL": "Selecionar caixa de entrada", + "PLACEHOLDER": "Selecionar caixa de entrada", + "ERROR": "Caixa de entrada obrigatória" + }, + "TEMPLATE": { + "LABEL": "WhatsApp Template", + "PLACEHOLDER": "Select a template", + "INFO": "Select a template to use for this campaign.", + "ERROR": "Template is required", + "PREVIEW_TITLE": "Processo {templateName}", + "LANGUAGE": "Idioma", + "CATEGORY": "Categoria", + "VARIABLES_LABEL": "Variáveis", + "VARIABLE_PLACEHOLDER": "Enter value for {variable}" + }, + "AUDIENCE": { + "LABEL": "Público-alvo", + "PLACEHOLDER": "Escolher etiquetas dos clientes", + "ERROR": "Público-alvo obrigatório" + }, + "SCHEDULED_AT": { + "LABEL": "Horário agendado", + "PLACEHOLDER": "Por favor, selecione a hora", + "ERROR": "Horário de agendamento obrigatório" + }, + "BUTTONS": { + "CREATE": "Criar", + "CANCEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "WhatsApp campaign created successfully", + "ERROR_MESSAGE": "Ocorreu um erro. Por favor, tente novamente." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Tem a certeza que pretende excluir?", + "DESCRIPTION": "The delete action is permanent and cannot be reversed.", + "CONFIRM": "Excluir", + "API": { + "SUCCESS_MESSAGE": "Campanha excluída com sucesso", + "ERROR_MESSAGE": "Ocorreu um erro. Por favor, tente novamente." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/pt/cannedMgmt.json new file mode 100644 index 0000000..78f63bc --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Respostas prontas", + "LEARN_MORE": "Saber mais sobre respostas prontas", + "DESCRIPTION": "Respostas prontas são modelos de resposta pré-escritos que o ajudam a responder rapidamente a uma conversa. Os agentes podem inserir o caractere '/' seguido do código curto para inserir uma resposta pronta durante uma conversa. ", + "HEADER_BTN_TXT": "Adicionar resposta pronta", + "LOADING": "A obter respostas prontas...", + "SEARCH_404": "Não há itens correspondentes a esta consulta.", + "LIST": { + "404": "Não há respostas prontas disponíveis nesta conta.", + "TITLE": "Gerir respostas prontas", + "DESC": "Respostas prontas são modelos de resposta pré-definidos que podem ser usados para responder mais rapidamente a conversas.", + "TABLE_HEADER": { + "SHORT_CODE": "Código curto", + "CONTENT": "Conteúdo", + "ACTIONS": "Ações" + } + }, + "ADD": { + "TITLE": "Adicionar resposta pronta", + "DESC": "Respostas prontas são modelos de resposta pré-definidos que podem ser usados para responder mais rapidamente a conversas.", + "CANCEL_BUTTON_TEXT": "Cancelar", + "FORM": { + "SHORT_CODE": { + "LABEL": "Código curto", + "PLACEHOLDER": "Por favor, insira um código curto.", + "ERROR": "O código curto é obrigatório." + }, + "CONTENT": { + "LABEL": "Mensagem", + "PLACEHOLDER": "Por favor, escreva a mensagem que pretende guardar como um modelo para usar mais tarde.", + "ERROR": "Mensagem é um campo obrigatório." + }, + "SUBMIT": "Submeter" + }, + "API": { + "SUCCESS_MESSAGE": "Resposta pronta adicionada com sucesso.", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot. Por favor, tente novamente." + } + }, + "EDIT": { + "TITLE": "Editar resposta pronta", + "CANCEL_BUTTON_TEXT": "Cancelar", + "FORM": { + "SHORT_CODE": { + "LABEL": "Código curto", + "PLACEHOLDER": "Por favor, insira um código curto.", + "ERROR": "Código curto é obrigatório." + }, + "CONTENT": { + "LABEL": "Mensagem", + "PLACEHOLDER": "Por favor, escreva a mensagem que pretende guardar como um modelo para usar mais tarde.", + "ERROR": "A mensagem é obrigatória." + }, + "SUBMIT": "Submeter" + }, + "BUTTON_TEXT": "Editar", + "API": { + "SUCCESS_MESSAGE": "Resposta pronta atualizada com sucesso.", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot. Por favor, tente novamente." + } + }, + "DELETE": { + "BUTTON_TEXT": "Excluir", + "API": { + "SUCCESS_MESSAGE": "Resposta pronta excluída com sucesso.", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot. Por favor, tente novamente." + }, + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Tem a certeza que pretende excluir a resposta pronta ", + "YES": "Sim, excluir ", + "NO": "Não, manter " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/chatlist.json b/app/javascript/dashboard/i18n/locale/pt/chatlist.json new file mode 100644 index 0000000..ae730b3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "A carregar conversas", + "LOAD_MORE_CONVERSATIONS": "A carregar mais conversas", + "EOF": "Todas as conversas carregadas 🎉", + "LIST": { + "404": "Não há conversas ativas neste grupo." + }, + "FAILED_TO_SEND": "Failed to send", + "TAB_HEADING": "Conversas", + "MENTION_HEADING": "Menções", + "UNATTENDED_HEADING": "Por responder", + "SEARCH": { + "INPUT": "Pesquisar pessoas, conversas, respostas guardadas .." + }, + "FILTER_ALL": "Todas", + "ASSIGNEE_TYPE_TABS": { + "me": "Minhas", + "unassigned": "Não atribuídas", + "all": "Todas" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Abertas" + }, + "resolved": { + "TEXT": "Resolvido" + }, + "pending": { + "TEXT": "Pendente" + }, + "snoozed": { + "TEXT": "Adiado" + }, + "all": { + "TEXT": "Todas" + } + }, + "VIEW_FILTER": "Visualizar", + "SORT_TOOLTIP_LABEL": "Ordenar conversas", + "CHAT_SORT": { + "STATUS": "Situação", + "ORDER_BY": "Ordenar por" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Criado", + "OLDEST": "Criada em:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Última atividade:", + "ACTIVE": "Última atividade" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Última Atividade: Mais antigas primeiro" + }, + "last_activity_at_desc": { + "TEXT": "Última Atividade: Mais recentes primeiro" + }, + "created_at_desc": { + "TEXT": "Criado em: Mais recentes primeiro" + }, + "created_at_asc": { + "TEXT": "Criado em: Mais antigas primeiro" + }, + "priority_desc": { + "TEXT": "Prioridade: Mais alta primeiro" + }, + "priority_asc": { + "TEXT": "Prioridade: Mais baixa primeiro" + }, + "waiting_since_asc": { + "TEXT": "Resposta pendente: Mais longa primeiro" + }, + "waiting_since_desc": { + "TEXT": "Resposta pendente: Mais curta primeiro" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Mensagem de imagem" + }, + "audio": { + "CONTENT": "Mensagem de áudio" + }, + "video": { + "CONTENT": "Mensagem de vídeo" + }, + "file": { + "CONTENT": "Carregar anexo" + }, + "location": { + "CONTENT": "Local:" + }, + "ig_reel": { + "CONTENT": "Instagram Reel" + }, + "fallback": { + "CONTENT": "partilhou um URL" + }, + "contact": { + "CONTENT": "Shared contact" + }, + "embed": { + "CONTENT": "Embedded content" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Ordenar conversa", + "DROPDOWN_TITLE": "Ordenar por", + "ITEMS": { + "LATEST": { + "NAME": "Última atividade em", + "LABEL": "Última atividade" + }, + "CREATED_AT": { + "NAME": "Criada em", + "LABEL": "Criada em" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Última resposta do utilizador em", + "LABEL": "Última mensagem" + } + } + }, + "RECEIVED_VIA_EMAIL": "Recebido por e-mail", + "VIEW_TWEET_IN_TWITTER": "Ver mensagem no Twitter", + "REPLY_TO_TWEET": "Responder a esta mensagem", + "LINK_TO_STORY": "Ir para story do instagram", + "SENT": "Enviado com sucesso", + "READ": "Lido com sucesso", + "DELIVERED": "Entregue com sucesso", + "NO_MESSAGES": "Sem mensagens", + "NO_CONTENT": "Sem conteúdo disponível", + "HIDE_QUOTED_TEXT": "Ocultar texto citado", + "SHOW_QUOTED_TEXT": "Mostrar texto citado", + "MESSAGE_READ": "Lida", + "SENDING": "Sending" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/companies.json b/app/javascript/dashboard/i18n/locale/pt/companies.json new file mode 100644 index 0000000..24d8d55 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Companies", + "SORT_BY": { + "LABEL": "Ordenar por", + "OPTIONS": { + "NAME": "Nome:", + "DOMAIN": "Domínio", + "CREATED_AT": "Criada em", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "SEARCH_PLACEHOLDER": "Search companies...", + "LOADING": "Loading companies...", + "UNNAMED": "Unnamed Company", + "CONTACTS_COUNT": "{n} contact | {n} contacts", + "EMPTY_STATE": { + "TITLE": "No companies found" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} – {endItem} of {totalItems} company | Showing {startItem} – {endItem} of {totalItems} companies" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/components.json b/app/javascript/dashboard/i18n/locale/pt/components.json new file mode 100644 index 0000000..8559d05 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} items", + "CURRENT_PAGE_INFO": "{currentPage} de {totalPages} páginas" + }, + "COMBOBOX": { + "PLACEHOLDER": "Select an option...", + "EMPTY_SEARCH_RESULTS": "No items found for the search term `{searchTerm}`", + "EMPTY_STATE": "Nenhum resultado encontrado.", + "SEARCH_PLACEHOLDER": "Search...", + "MORE": "+{count} mais" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Search...", + "EMPTY_STATE": "Nenhum resultado encontrado.", + "SEARCHING": "A pesquisar..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Cancelar", + "CONFIRM": "Confirmar" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Search country", + "ERROR": "Phone number should be empty or in E.164 format", + "DIAL_CODE_ERROR": "Por favor, selecione um código de marcação da lista" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Autor não disponível" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Breadcrumb" + }, + "SWITCH": { + "TOGGLE": "Toggle switch" + }, + "LABEL": { + "TAG_BUTTON": "tag" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Saber mais", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutos", + "HOURS": "Horas", + "DAYS": "Dias", + "PLACEHOLDER": "Introduza a duração" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Em Breve!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/contact.json b/app/javascript/dashboard/i18n/locale/pt/contact.json new file mode 100644 index 0000000..3da11e7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Indisponível", + "EMAIL_ADDRESS": "Endereço de e-mail", + "PHONE_NUMBER": "Número de telefone", + "IDENTIFIER": "Identificador", + "COPY_SUCCESSFUL": "Copiado para área de transferência com sucesso", + "COMPANY": "Empresa", + "LOCATION": "Localização", + "BROWSER_LANGUAGE": "Idioma do navegador", + "CONVERSATION_TITLE": "Detalhes da conversa", + "VIEW_PROFILE": "Ver perfil", + "BROWSER": "Navegador", + "OS": "Sistema Operativo", + "INITIATED_FROM": "Iniciado de", + "INITIATED_AT": "Iniciado em", + "IP_ADDRESS": "Endereço IP", + "CREATED_AT_LABEL": "Criado", + "NEW_MESSAGE": "Nova mensagem", + "CALL": "Chamada", + "CALL_INITIATED": "Calling the contact…", + "CALL_FAILED": "Unable to start the call. Please try again.", + "VOICE_INBOX_PICKER": { + "TITLE": "Choose a voice inbox" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "Não há conversas anteriores associadas a este contacto.", + "TITLE": "Conversas anteriores" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Etiquetas de contacto", + "ERROR": "Não foi possível atualizar as etiquetas" + }, + "CONVERSATION": { + "TITLE": "Etiquetas da conversa", + "ADD_BUTTON": "Adicionar etiquetas" + }, + "LABEL_SELECT": { + "TITLE": "Adicionar etiquetas", + "PLACEHOLDER": "Procurar etiquetas", + "NO_RESULT": "Nenhuma etiqueta encontrada", + "CREATE_LABEL": "Criar nova etiqueta" + } + }, + "MERGE_CONTACT": "Unir contacto", + "CONTACT_ACTIONS": "Ações de contacto", + "MUTE_CONTACT": "Bloquear contacto", + "UNMUTE_CONTACT": "Desbloquear contacto", + "MUTED_SUCCESS": "Este contacto está bloqueado. Não será notificado de nenhuma conversa futura.", + "UNMUTED_SUCCESS": "Este contacto foi desbloqueado.", + "SEND_TRANSCRIPT": "Enviar transcrição", + "EDIT_LABEL": "Editar", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Atributos personalizados", + "CONTACT_LABELS": "Etiquetas de contacto", + "PREVIOUS_CONVERSATIONS": "Conversas anteriores", + "NO_RECORDS_FOUND": "Nenhum atributo encontrado" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Editar contacto", + "TITLE": "Editar contacto", + "DESC": "Editar detalhes do contacto" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Excluir contacto", + "TITLE": "Excluir contacto", + "DESC": "Apagar detalhes do contacto", + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Tem certeza que pretende excluir ", + "YES": "Sim, excluir", + "NO": "Não, manter" + }, + "API": { + "SUCCESS_MESSAGE": "Contacto excluído com sucesso", + "ERROR_MESSAGE": "Não foi possível excluir o contacto. Por favor, tente mais tarde." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Submeter", + "CANCEL": "Cancelar", + "AVATAR": { + "LABEL": "Avatar do contacto" + }, + "NAME": { + "PLACEHOLDER": "Insira o nome completo do contacto", + "LABEL": "Nome completo" + }, + "BIO": { + "PLACEHOLDER": "Insira a biografia do contacto", + "LABEL": "Biografia" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Insira o endereço de e-mail do contacto", + "LABEL": "Endereço de e-mail", + "DUPLICATE": "O e-mail inserido já está a ser utilizado por outro contacto.", + "ERROR": "Por favor, insira um endereço de e-mail válido." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Insira o número de telefone do contacto", + "LABEL": "Número de telefone", + "HELP": "O número de telefone deve ter o formato E.164, por exemplo: +1415555555 [+][código do país][código de área] [número de telefone local]", + "ERROR": "O número de telefone deve estar vazio ou no formato E.164", + "DIAL_CODE_ERROR": "Por favor, selecione um código de marcação da lista", + "DUPLICATE": "Este número já está a ser usado por outro contacto." + }, + "LOCATION": { + "PLACEHOLDER": "Insira a localização do contacto", + "LABEL": "Local" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Insira o nome da empresa", + "LABEL": "Nome da empresa" + }, + "COUNTRY": { + "PLACEHOLDER": "Insira o nome do país", + "LABEL": "Nome do país", + "SELECT_PLACEHOLDER": "Selecionar", + "REMOVE": "Excluir", + "SELECT_COUNTRY": "Selecione o país" + }, + "CITY": { + "PLACEHOLDER": "Escreva o nome da cidade", + "LABEL": "Cidade" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Insira o nome de utilizador do Facebook", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Insira o nome de utilizador do Twitter", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Insira o nome de utilizador do LinkedIn", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Digite o utilizador do Github", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Avatar de contacto removido com sucesso", + "ERROR_MESSAGE": "Não foi possível remover o avatar do contacto. Por favor, tente novamente mais tarde." + } + }, + "SUCCESS_MESSAGE": "Contacto guardado com sucesso", + "ERROR_MESSAGE": "Ocorreu um erro, por favor, tente novamente" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Iniciar conversa", + "TITLE": "Nova conversa", + "DESC": "Começar uma conversa através do envio de uma mensagem.", + "NO_INBOX": "Não foi possível encontrar uma caixa de entrada para iniciar uma conversa com este contacto.", + "FORM": { + "TO": { + "LABEL": "Para" + }, + "INBOX": { + "LABEL": "Via caixa de entrada", + "PLACEHOLDER": "Selecionar caixa de entrada", + "ERROR": "Selecione uma caixa de entrada" + }, + "SUBJECT": { + "LABEL": "Assunto", + "PLACEHOLDER": "Assunto", + "ERROR": "O assunto não pode estar vazio" + }, + "MESSAGE": { + "LABEL": "Mensagem", + "PLACEHOLDER": "Escreva aqui a sua mensagem", + "ERROR": "A mensagem não pode estar vazia" + }, + "ATTACHMENTS": { + "SELECT": "Selecionar ficheiros", + "HELP_TEXT": "Arraste e solte ficheiros aqui ou escolha ficheiros para anexar" + }, + "SUBMIT": "Enviar mensagem", + "CANCEL": "Cancelar", + "SUCCESS_MESSAGE": "Mensagem enviada!", + "GO_TO_CONVERSATION": "Visualizar", + "ERROR_MESSAGE": "Não foi possível enviar! Tente novamente" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Perfis das redes sociais" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Adicionar atributo personalizado", + "COPY_SUCCESSFUL": "Copiado para área de transferência com sucesso", + "SHOW_MORE": "Mostrar todos os atributos", + "SHOW_LESS": "Mostrar menos atributos", + "ACTIONS": { + "COPY": "Copiar atributo", + "DELETE": "Apagar atributo", + "EDIT": "Editar atributo" + }, + "ADD": { + "TITLE": "Criar atributo personalizado", + "DESC": "Adicionar informação personalizada a este contacto." + }, + "FORM": { + "CREATE": "Adicionar atributo", + "CANCEL": "Cancelar", + "NAME": { + "LABEL": "Nome do atributo personalizado", + "PLACEHOLDER": "Por exemplo: ID shopify", + "ERROR": "Nome do atributo personalizado inválido" + }, + "VALUE": { + "LABEL": "Valor do atributo", + "PLACEHOLDER": "Por exemplo: 11901 " + }, + "ADD": { + "TITLE": "Criar novo atributo ", + "SUCCESS": "Atributo adicionado com sucesso", + "ERROR": "Não foi possível adicionar o atributo. Por favor, tente mais tarde" + }, + "UPDATE": { + "SUCCESS": "Atributo atualizado com sucesso", + "ERROR": "Não foi possível atualizar o atributo. Por favor, tente mais tarde" + }, + "DELETE": { + "SUCCESS": "Atributo apagado com sucesso", + "ERROR": "Não foi possível apagar o atributo. Por favor, tente mais tarde" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Adicionar atributos", + "PLACEHOLDER": "Pesquisar atributos", + "NO_RESULT": "Nenhum atributo encontrado" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Selecione o valor", + "SEARCH_INPUT_PLACEHOLDER": "Pesquisar valor", + "NO_RESULT": "Nenhum resultado encontrado" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "É obrigatório um valor válido", + "INVALID_URL": "URL inválido", + "INVALID_INPUT": "Entrada inválida" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Unir contactos", + "DESCRIPTION": "Unir contactos para combinar dois perfis num, incluindo todos os atributos e conversas. Em caso de conflito, os atributos do contacto principal terão prioridade.", + "PRIMARY": { + "TITLE": "Contacto principal", + "HELP_LABEL": "Para ser apagado" + }, + "PARENT": { + "TITLE": "Contacto para juntar", + "PLACEHOLDER": "Pesquisar por um contacto", + "HELP_LABEL": "Para ser mantido" + }, + "SUMMARY": { + "TITLE": "Sumário", + "DELETE_WARNING": "Contacto de {primaryContactName} será apagado.", + "ATTRIBUTE_WARNING": "Detalhes do contacto do {primaryContactName} serão copiados para {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Something went wrong. Please try again later." + }, + "FORM": { + "SUBMIT": " Unir contactos", + "CANCEL": "Cancelar", + "CHILD_CONTACT": { + "ERROR": "Escolher um contacto filho para juntar" + }, + "SUCCESS_MESSAGE": "Contacto unido com sucesso", + "ERROR_MESSAGE": "Não foi possível unir os contactos, por favor, tente novamente!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Contactos", + "SEARCH_TITLE": "Search contacts", + "ACTIVE_TITLE": "Contactos ativos", + "SEARCH_PLACEHOLDER": "Search...", + "MESSAGE_BUTTON": "Messagem", + "SEND_MESSAGE": "Enviar mensagem", + "BLOCK_CONTACT": "Block contact", + "UNBLOCK_CONTACT": "Unblock contact", + "BREADCRUMB": { + "CONTACTS": "Contactos" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Add contact", + "EXPORT_CONTACT": "Export contacts", + "IMPORT_CONTACT": "Import contacts", + "SAVE_CONTACT": "Save contact", + "EMAIL_ADDRESS_DUPLICATE": "O e-mail inserido já está a ser utilizado por outro contacto.", + "PHONE_NUMBER_DUPLICATE": "Este número já está a ser usado por outro contacto.", + "SUCCESS_MESSAGE": "Contacto guardado com sucesso", + "ERROR_MESSAGE": "Unable to save contact. Please try again later." + }, + "BLOCK_SUCCESS_MESSAGE": "This contact is blocked successfully", + "BLOCK_ERROR_MESSAGE": "Unable to block contact. Please try again later.", + "UNBLOCK_SUCCESS_MESSAGE": "Este contacto foi desbloqueado", + "UNBLOCK_ERROR_MESSAGE": "Unable to unblock contact. Please try again later.", + "IMPORT_CONTACT": { + "TITLE": "Import contacts", + "DESCRIPTION": "Importar contactos através de um ficheiro CSV.", + "DOWNLOAD_LABEL": "Descarregar uma amostra CSV.", + "LABEL": "Ficheiro CSV:", + "CHOOSE_FILE": "Choose file", + "CHANGE": "Trocar", + "CANCEL": "Cancelar", + "IMPORT": "Importar", + "SUCCESS_MESSAGE": "Será notificado via e-mail quando a importação estiver completa.", + "ERROR_MESSAGE": "Ocorreu um erro, por favor, tente novamente" + }, + "EXPORT_CONTACT": { + "TITLE": "Export contacts", + "DESCRIPTION": "Quickly export a csv file with comprehensive details of your contacts", + "CONFIRM": "Exportar", + "SUCCESS_MESSAGE": "Exportação em progresso. Será notificado via e-mail quando o ficheiro de exportação estiver pronto para descarregar.", + "ERROR_MESSAGE": "Ocorreu um erro, por favor, tente novamente" + }, + "SORT_BY": { + "LABEL": "Ordenar por", + "OPTIONS": { + "NAME": "Nome:", + "EMAIL": "E-mail", + "PHONE_NUMBER": "Número de telefone", + "COMPANY": "Empresa", + "COUNTRY": "País", + "CITY": "Cidade", + "LAST_ACTIVITY": "Última atividade", + "CREATED_AT": "Criada em" + } + }, + "ORDER": { + "LABEL": "Ordering", + "OPTIONS": { + "ASCENDING": "Ascending", + "DESCENDING": "Descending" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Pretende guardar este filtro?", + "CONFIRM": "Guardar filtro", + "LABEL": "Nome:", + "PLACEHOLDER": "Enter the name of the filter", + "ERROR": "Enter a valid name", + "SUCCESS_MESSAGE": "Filter saved successfully", + "ERROR_MESSAGE": "Unable to save filter. Please try again later." + }, + "DELETE_SEGMENT": { + "TITLE": "Confirmar exclusão", + "DESCRIPTION": "Are you sure you want to delete this filter?", + "CONFIRM": "Sim, excluir", + "CANCEL": "Não, cancelar", + "SUCCESS_MESSAGE": "Filter deleted successfully", + "ERROR_MESSAGE": "Unable to delete filter. Please try again later." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Showing {startItem} - {endItem} of {totalItems} contacts" + }, + "FILTER": { + "NAME": "Nome:", + "EMAIL": "E-mail", + "PHONE_NUMBER": "Número de telefone", + "IDENTIFIER": "Identificador", + "COUNTRY": "País", + "CITY": "Cidade", + "CREATED_AT": "Criada em", + "LAST_ACTIVITY": "Última atividade", + "REFERER_LINK": "Link de referência", + "BLOCKED": "Bloqueado", + "BLOCKED_TRUE": "Verdadeiro", + "BLOCKED_FALSE": "Falso", + "BUTTONS": { + "CLEAR_FILTERS": "Limpar filtros", + "UPDATE_SEGMENT": "Update segment", + "APPLY_FILTERS": "Aplicar filtros", + "ADD_FILTER": "Adicionar filtro" + }, + "TITLE": "Filtrar contactos", + "EDIT_SEGMENT": "Editar segmento", + "SEGMENT": { + "LABEL": "Segment name", + "INPUT_PLACEHOLDER": "Enter the name of the segment" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} more filters", + "CLEAR_FILTERS": "Limpar filtros" + } + }, + "CARD": { + "OF": "of", + "VIEW_DETAILS": "Mostrar detalhes", + "EDIT_DETAILS_FORM": { + "TITLE": "Editar detalhes do contacto", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Enter the first name" + }, + "LAST_NAME": { + "PLACEHOLDER": "Enter the last name" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address", + "DUPLICATE": "O e-mail inserido já está a ser utilizado por outro contacto." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number", + "DUPLICATE": "Este número já está a ser usado por outro contacto." + }, + "CITY": { + "PLACEHOLDER": "Escreva o nome da cidade" + }, + "COUNTRY": { + "PLACEHOLDER": "Select country" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Insira o nome da empresa" + } + }, + "UPDATE_BUTTON": "Update contact", + "SUCCESS_MESSAGE": "Contact updated successfully", + "ERROR_MESSAGE": "Unable to update contact. Please try again later." + }, + "SOCIAL_MEDIA": { + "TITLE": "Edit social links", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Add Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Add Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Add Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Add TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Add LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Add Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "Esta ação é permanente e irreversível.", + "BUTTON": "Apagar agora" + } + }, + "DETAILS": { + "CREATED_AT": "Created {date}", + "LAST_ACTIVITY": "Last active {date}", + "DELETE_CONTACT_DESCRIPTION": "Permanently delete this contact. This action is irreversible", + "DELETE_CONTACT": "Excluir contacto", + "DELETE_DIALOG": { + "TITLE": "Confirmar exclusão", + "DESCRIPTION": "Tem a certeza de que quer apagar este contacto?", + "CONFIRM": "Sim, excluir", + "API": { + "SUCCESS_MESSAGE": "Contacto excluído com sucesso", + "ERROR_MESSAGE": "Não foi possível excluir o contacto. Por favor, tente mais tarde." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Could not upload avatar. Please try again later.", + "SUCCESS_MESSAGE": "Avatar uploaded successfully" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatar removido com sucesso", + "ERROR_MESSAGE": "Could not delete avatar. Please try again later." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Attributes", + "HISTORY": "History", + "NOTES": "Notas", + "MERGE": "Merge" + }, + "HISTORY": { + "EMPTY_STATE": "Não há conversas anteriores associadas a este contacto" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Search for attributes", + "UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes", + "EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.", + "YES": "Sim", + "NO": "Não", + "TRIGGER": { + "SELECT": "Selecione o valor", + "INPUT": "Inserir valor" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Invalid number", + "REQUIRED": "É obrigatório um valor válido", + "INVALID_INPUT": "Invalid input", + "INVALID_URL": "URL inválido", + "INVALID_DATE": "Invalid date" + }, + "NO_ATTRIBUTES": "Nenhum atributo encontrado", + "API": { + "SUCCESS_MESSAGE": "Atributo atualizado com sucesso", + "DELETE_SUCCESS_MESSAGE": "Atributo apagado com sucesso", + "UPDATE_ERROR": "Não foi possível atualizar o atributo. Por favor, tente mais tarde", + "DELETE_ERROR": "Não foi possível apagar o atributo. Por favor, tente mais tarde" + } + }, + "MERGE": { + "TITLE": "Unir contacto", + "DESCRIPTION": "Combine two profiles into one, including all attributes and conversations. In case of conflict, the primary contact’s attributes will take precedence.", + "PRIMARY": "Contacto principal", + "PRIMARY_HELP_LABEL": "To be saved", + "PRIMARY_REQUIRED_ERROR": "Please select a contact to merge with before proceeding", + "PARENT": "To be merged", + "PARENT_HELP_LABEL": "Para ser apagado", + "EMPTY_STATE": "No contacts found", + "PLACEHOLDER": "Search for primary contact", + "SEARCH_PLACEHOLDER": "Pesquisar por um contacto", + "SEARCH_ERROR_MESSAGE": "Could not search for contacts. Please try again later.", + "SUCCESS_MESSAGE": "Contacto unido com sucesso", + "ERROR_MESSAGE": "Não foi possível unir os contactos, por favor, tente novamente!", + "IS_SEARCHING": "A pesquisar...", + "BUTTONS": { + "CANCEL": "Cancelar", + "CONFIRM": "Unir contacto" + } + }, + "NOTES": { + "PLACEHOLDER": "Adicionar nota", + "WROTE": "escreveu", + "YOU": "Você", + "SAVE": "Salvar nota", + "ADD_NOTE": "Add contact note", + "EXPAND": "Expandir", + "COLLAPSE": "Recolher", + "NO_NOTES": "Sem notas, pode adicionar notas na página de detalhes do contacto.", + "EMPTY_STATE": "Não existem notas associadas a este contacto. Pode adicionar uma nota escrevendo na caixa acima.", + "CONVERSATION_EMPTY_STATE": "There are no notes yet. Use the Add note button to create one." + } + }, + "EMPTY_STATE": { + "TITLE": "Nenhum contacto encontrado nesta conta", + "SUBTITLE": "Para adicionar novos contatos, clique no botão abaixo", + "BUTTON_LABEL": "Adicionar contacto", + "SEARCH_EMPTY_STATE_TITLE": "Nenhum contacto corresponde à sua pesquisa 🔍", + "LIST_EMPTY_STATE_TITLE": "No contacts available in this view 📋", + "ACTIVE_EMPTY_STATE_TITLE": "Neste momento não há contactos ativos 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Atribuir etiquetas", + "ASSIGN_LABELS_SUCCESS": "Etiquetas atribuídas com sucesso.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selected", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Selecionar todas ({count})", + "DELETE_CONTACTS": "Excluir", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Excluir contacto" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "We couldn’t complete the search. Please try again." + }, + "FORM": { + "GO_TO_CONVERSATION": "Ver", + "SUCCESS_MESSAGE": "The message was sent successfully!", + "ERROR_MESSAGE": "An error occurred while creating the conversation. Please try again later.", + "NO_INBOX_ALERT": "There are no available inboxes to start a conversation with this contact.", + "CONTACT_SELECTOR": { + "LABEL": "Para:", + "TAG_INPUT_PLACEHOLDER": "Search for a contact with name, email or phone number", + "CONTACT_CREATING": "Creating contact..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Show inboxes" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Assunto :", + "SUBJECT_PLACEHOLDER": "Enter your email subject here", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_LABEL": "Bcc:", + "BCC_PLACEHOLDER": "Search for a contact with their email address", + "BCC_BUTTON": "Bcc" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Escreva aqui a sua mensagem..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "WhatsApp template: {templateName}", + "VARIABLES": "Variáveis", + "BACK": "Voltar", + "SEND_MESSAGE": "Enviar mensagem" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Select template", + "SEARCH_PLACEHOLDER": "Search templates", + "EMPTY_STATE": "No templates found", + "TEMPLATE_PARSER": { + "BACK": "Voltar", + "SEND_MESSAGE": "Enviar mensagem" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Discard", + "SEND": "Send ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/contactFilters.json b/app/javascript/dashboard/i18n/locale/pt/contactFilters.json new file mode 100644 index 0000000..ca6a363 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filtrar contactos", + "SUBTITLE": "Adicione filtros, abaixo, e clique em 'Submeter' para filtrar contactos.", + "EDIT_CUSTOM_SEGMENT": "Editar segmento", + "CUSTOM_VIEWS_SUBTITLE": "Adicione ou remova filtros e atualize o seu segmento.", + "ADD_NEW_FILTER": "Adicionar filtro", + "CLEAR_ALL_FILTERS": "Limpar todos os filtros", + "FILTER_DELETE_ERROR": "Deve ter, pelo menos, um filtro para guardar", + "SUBMIT_BUTTON_LABEL": "Submeter", + "UPDATE_BUTTON_LABEL": "Atualizar segmento", + "CANCEL_BUTTON_LABEL": "Cancelar", + "CLEAR_BUTTON_LABEL": "Limpar filtros", + "EMPTY_VALUE_ERROR": "Valor obrigatório", + "SEGMENT_LABEL": "Nome do segmento", + "SEGMENT_QUERY_LABEL": "Consulta de segmento", + "TOOLTIP_LABEL": "Filtrar contactos", + "QUERY_DROPDOWN_LABELS": { + "AND": "E", + "OR": "OU" + }, + "OPERATOR_LABELS": { + "equal_to": "Igual a", + "not_equal_to": "Não é igual a", + "contains": "Contém", + "does_not_contain": "Não contém", + "is_present": "Está presente", + "is_not_present": "Não está presente", + "is_greater_than": "É maior do que", + "is_lesser_than": "É menor do que", + "days_before": "É x dias antes" + }, + "ERRORS": { + "VALUE_REQUIRED": "Valor obrigatório" + }, + "ATTRIBUTES": { + "NAME": "Nome", + "EMAIL": "E-mail", + "PHONE_NUMBER": "Número de telefone", + "IDENTIFIER": "Identificador", + "CITY": "Cidade", + "COUNTRY": "País", + "CUSTOM_ATTRIBUTE_LIST": "Lista", + "CUSTOM_ATTRIBUTE_TEXT": "Texto", + "CUSTOM_ATTRIBUTE_NUMBER": "Número", + "CUSTOM_ATTRIBUTE_LINK": "Endereço", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Caixa de seleção", + "CREATED_AT": "Criado em", + "LAST_ACTIVITY": "Última atividade", + "REFERER_LINK": "Link de referência", + "BLOCKED": "Bloqueado", + "LABELS": "Etiquetas" + }, + "GROUPS": { + "STANDARD_FILTERS": "Filtros padrão", + "ADDITIONAL_FILTERS": "Filtros adicionais", + "CUSTOM_ATTRIBUTES": "Atributos personalizados" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/contentTemplates.json b/app/javascript/dashboard/i18n/locale/pt/contentTemplates.json new file mode 100644 index 0000000..0875e68 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Twilio Templates", + "SUBTITLE": "Select the Twilio template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Buscar templates", + "NO_TEMPLATES_FOUND": "Nenhum template encontrado para", + "NO_CONTENT": "Sem conteúdo", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Categoria", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No Twilio templates available. Click refresh to sync templates from Twilio.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Idioma", + "TEMPLATE_BODY": "Corpo do Template", + "CATEGORY": "Categoria" + }, + "TYPES": { + "MEDIA": "Media", + "QUICK_REPLY": "Quick Reply", + "CALL_TO_ACTION": "Call to Action", + "TEXT": "Texto" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variáveis", + "LANGUAGE": "Idioma", + "CATEGORY": "Categoria", + "VARIABLE_PLACEHOLDER": "Digite o valor {variable}", + "GO_BACK_LABEL": "Voltar", + "SEND_MESSAGE_LABEL": "Enviar mensagem", + "FORM_ERROR_MESSAGE": "Preencha todas as variáveis antes de enviar", + "MEDIA_HEADER_LABEL": "{type} Header", + "MEDIA_URL_LABEL": "Enter full media URL", + "MEDIA_URL_PLACEHOLDER": "https://example.com/image.jpg" + }, + "FORM": { + "BACK_BUTTON": "Voltar", + "SEND_MESSAGE_BUTTON": "Enviar mensagem" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/conversation.json b/app/javascript/dashboard/i18n/locale/pt/conversation.json new file mode 100644 index 0000000..2846cfe --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Por favor, selecione uma conversa no painel da esquerda", + "CSAT_REPLY_MESSAGE": "Por favor, avalie a conversa", + "404": "Desculpe, não encontrámos a conversa. Por favor, tente novamente", + "SWITCH_VIEW_LAYOUT": "Alternar o layout", + "DASHBOARD_APP_TAB_MESSAGES": "Mensagens", + "UNVERIFIED_SESSION": "A identidade deste utilizador não foi verificada", + "NO_MESSAGE_1": "Não há mensagens de clientes na sua caixa de entrada.", + "NO_MESSAGE_2": " para enviar uma mensagem para a sua página!", + "NO_INBOX_1": "Ainda não adicionou nenhuma caixa de entrada.", + "NO_INBOX_2": " para começar", + "NO_INBOX_AGENT": "Não faz parte de nenhuma caixa de entrada. Por favor, contacte o administrador", + "SEARCH_MESSAGES": "Procurar mensagens em conversas", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", + "EMPTY_STATE": { + "CMD_BAR": "para abrir o menu de comandos", + "KEYBOARD_SHORTCUTS": "para ver atalhos de teclado" + }, + "SEARCH": { + "TITLE": "Procurar mensagens", + "RESULT_TITLE": "Resultados da pesquisa", + "LOADING_MESSAGE": "A preparar os dados...", + "PLACEHOLDER": "Insira qualquer texto para procurar mensagens", + "NO_MATCHING_RESULTS": "Nenhum resultado encontrado." + }, + "UNREAD_MESSAGES": "Mensagens por ler", + "UNREAD_MESSAGE": "Mensagens por ler", + "CLICK_HERE": "Clique aqui", + "LOADING_INBOXES": "A carregar caixas de entrada", + "LOADING_CONVERSATIONS": "A carregar conversas", + "CANNOT_REPLY": "Não pode responder porque", + "24_HOURS_WINDOW": "Mensagens bloqueadas durante 24 horas", + "48_HOURS_WINDOW": "Mensagens bloqueadas durante 48 horas", + "API_HOURS_WINDOW": "Só pode responder a esta conversa dentro de {hours} horas", + "NOT_ASSIGNED_TO_YOU": "Esta conversa não está atribuída a si. Gostaria de atribuir esta conversa a si mesmo?", + "ASSIGN_TO_ME": "Atribuir a mim", + "BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.", + "BOT_HANDOFF_ACTION": "Mark open and assign to you", + "BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open", + "BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you", + "BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.", + "TWILIO_WHATSAPP_CAN_REPLY": "Só pode responder utilizando uma mensagem modelo, porque", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "Mensagens bloqueadas durante 24 horas", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "Esta conta do Instagram foi migrada para a nova caixa de entrada do canal Instagram. Todas as novas mensagens aparecerão lá. Já não poderá enviar mensagens a partir desta conversa.", + "REPLYING_TO": "Está a responder a:", + "REMOVE_SELECTION": "Remover seleção", + "DOWNLOAD": "Descarregar", + "UNKNOWN_FILE_TYPE": "Ficheiro desconhecido", + "SAVE_CONTACT": "Save Contact", + "NO_CONTENT": "No content to display", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} has shared a contact", + "LOCATION": "{sender} has shared a location", + "FILE": "{sender} has shared a file", + "MEETING": "{sender} iniciou uma reunião" + }, + "UPLOADING_ATTACHMENTS": "A carregar anexos...", + "REPLIED_TO_STORY": "Respondeu à sua história", + "UNSUPPORTED_MESSAGE": "This message is unsupported. You can view this message on the Facebook / Instagram app.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "Esta mensagem não é suportada. Pode ver esta mensagem na app Facebook Messenger.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "Esta mensagem não é suportada. Pode ver esta mensagem na app do Instagram.", + "SUCCESS_DELETE_MESSAGE": "Mensagem apagada com sucesso", + "FAIL_DELETE_MESSSAGE": "Não foi possível apagar a mensagem! Por favor, tente novamente", + "NO_RESPONSE": "Sem resposta", + "RESPONSE": "Response", + "RATING_TITLE": "Avaliar", + "FEEDBACK_TITLE": "Comentários", + "REPLY_MESSAGE_NOT_FOUND": "Mensagem indisponível", + "CARD": { + "SHOW_LABELS": "Mostrar etiquetas", + "HIDE_LABELS": "Ocultar etiquetas" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NO_ANSWER": "No answer", + "MISSED_CALL": "Missed call", + "CALL_ENDED": "Call ended", + "NOT_ANSWERED_YET": "Not answered yet", + "THEY_ANSWERED": "They answered", + "YOU_ANSWERED": "You answered" + }, + "HEADER": { + "RESOLVE_ACTION": "Resolver", + "REOPEN_ACTION": "Reabrir", + "OPEN_ACTION": "Abertas", + "MORE_ACTIONS": "Mais ações", + "OPEN": "Mais", + "CLOSE": "Fechar", + "DETAILS": "Detalhes", + "SNOOZED_UNTIL": "Suspender até", + "SNOOZED_UNTIL_TOMORROW": "Adiada até amanhã", + "SNOOZED_UNTIL_NEXT_WEEK": "Adiada até a próxima semana", + "SNOOZED_UNTIL_NEXT_REPLY": "Adiada até à próxima resposta", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "missed", + "DUE": "due" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Marcar como pendente", + "SNOOZE_UNTIL": "Adiar", + "SNOOZE": { + "TITLE": "Suspender até", + "NEXT_REPLY": "Próxima resposta", + "TOMORROW": "Amanhã", + "NEXT_WEEK": "Próxima semana" + } + }, + "MENTION": { + "AGENTS": "Agentes", + "TEAMS": "Equipas" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Suspender até", + "APPLY": "Adiar", + "CANCEL": "Cancelar" + }, + "PRIORITY": { + "TITLE": "Prioridade", + "OPTIONS": { + "NONE": "Nenhuma", + "URGENT": "Urgente", + "HIGH": "Elevada", + "MEDIUM": "Média", + "LOW": "Baixa" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "Nenhuma", + "INPUT_PLACEHOLDER": "Selecione a prioridade", + "NO_RESULTS": "Nenhum resultado encontrado", + "SUCCESSFUL": "Alterar a prioridade da conversa com o id {conversationId} para {priority}", + "FAILED": "Não foi possível alterar a prioridade, por favor, tente novamente." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Apagar conversa #{conversationId}", + "DESCRIPTION": "Tem a certeza de que quer apagar esta conversa?", + "CONFIRM": "Excluir" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Marcar como pendente", + "RESOLVED": "Marcar como resolvida", + "MARK_AS_UNREAD": "Marcar como não lida", + "MARK_AS_READ": "Marcar como lida", + "REOPEN": "Reabrir conversa", + "SNOOZE": { + "TITLE": "Adiar", + "NEXT_REPLY": "Até à próxima resposta", + "TOMORROW": "Até amanhã", + "NEXT_WEEK": "Até à próxima semana" + }, + "ASSIGN_AGENT": "Atribuir agente", + "ASSIGN_LABEL": "Atribuir etiqueta", + "AGENTS_LOADING": "A carregar agentes...", + "ASSIGN_TEAM": "Atribuir equipa", + "DELETE": "Apagar conversa", + "OPEN_IN_NEW_TAB": "Open in new tab", + "COPY_LINK": "Copy conversation link", + "COPY_LINK_SUCCESS": "Conversation link copied to clipboard", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Conversa com ID {conversationId} atribuída a \"{agentName}\"", + "FAILED": "Não foi possível atribuir agente. Por favor, tente novamente." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}", + "FAILED": "Não foi possível atribuir etiqueta. Por favor, tente novamente." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Equipa \"{team}\" atribuída a conversa de ID {conversationId}", + "FAILED": "Não foi possível atribuir equipa. Por favor, tente novamente." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Assinatura da mensagem", + "ENABLE_SIGN_TOOLTIP": "Ativar assinatura", + "DISABLE_SIGN_TOOLTIP": "Desativar assinatura", + "MSG_INPUT": "Shift + Enter para nova linha. Comece com '/' para selecionar uma resposta pronta.", + "PRIVATE_MSG_INPUT": "Shift + Enter para nova linha. Esta mensagem apenas será visível para agentes", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "A assinatura da mensagem não está configurada. Por favor, configure-a nas configurações do perfil.", + "CLICK_HERE": "Clique aqui para atualizar", + "WHATSAPP_TEMPLATES": "Template do WhatsApp" + }, + "REPLYBOX": { + "REPLY": "Responder", + "PRIVATE_NOTE": "Nota Privada", + "SEND": "Enviar", + "CREATE": "Adicionar nota", + "INSERT_READ_MORE": "Ler mais", + "DISMISS_REPLY": "Descartar resposta", + "REPLYING_TO": "Em resposta a:", + "TIP_EMOJI_ICON": "Mostrar selecionador de emojis", + "TIP_ATTACH_ICON": "Anexar ficheiros", + "TIP_AUDIORECORDER_ICON": "Gravar áudio", + "TIP_AUDIORECORDER_PERMISSION": "Permitir acesso ao áudio", + "TIP_AUDIORECORDER_ERROR": "Não foi possível abrir o áudio", + "DRAG_DROP": "Arrastar e soltar aqui para anexar", + "START_AUDIO_RECORDING": "Iniciar gravação de áudio", + "STOP_AUDIO_RECORDING": "Parar gravação de áudio", + "": "", + "EMAIL_HEAD": { + "TO": "PARA", + "ADD_BCC": "Adicionar Bcc", + "CC": { + "LABEL": "Cc", + "PLACEHOLDER": "E-mails separados por vírgulas", + "ERROR": "Por favor, insira endereços de e-mail válidos" + }, + "BCC": { + "LABEL": "Bcc", + "PLACEHOLDER": "E-mails separados por vírgulas", + "ERROR": "Por favor, insira endereços de e-mail válidos" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Variáveis indefinidas", + "MESSAGE": "Tem {undefinedVariablesCount} variáveis indefinidas na sua mensagem: {undefinedVariables}. Pretende enviar a mensagem mesmo assim?", + "CONFIRM": { + "YES": "Enviar", + "CANCEL": "Cancelar" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Include quoted email thread", + "DISABLE_TOOLTIP": "Don't include quoted email thread", + "REMOVE_PREVIEW": "Remove quoted email thread", + "COLLAPSE": "Collapse preview", + "EXPAND": "Expand preview" + } + }, + "VISIBLE_TO_AGENTS": "Nota Privada: Apenas visível para si e para a sua equipa", + "CHANGE_STATUS": "Estado da conversa alterado", + "CHANGE_STATUS_FAILED": "A mudança de estado da conversa falhou", + "CHANGE_AGENT": "Responsável da conversa alterado", + "CHANGE_AGENT_FAILED": "Falha na alteração da atribuição", + "ASSIGN_LABEL_SUCCESFUL": "Etiqueta atribuída com sucesso", + "ASSIGN_LABEL_FAILED": "Falha na atribuição de etiqueta", + "CHANGE_TEAM": "Equipa da conversa alterada", + "SUCCESS_DELETE_CONVERSATION": "Conversa apagada", + "FAIL_DELETE_CONVERSATION": "Não foi possível apagar a conversa! Tente novamente", + "FILE_SIZE_LIMIT": "O ficheiro excede o tamanho limite para anexos de {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB", + "MESSAGE_ERROR": "Não foi possível enviar esta mensagem, por favor, tente novamente mais tarde", + "SENT_BY": "Enviado por:", + "BOT": "Bot", + "SEND_FAILED": "Não foi possível enviar a mensagem! Tente novamente", + "TRY_AGAIN": "Tentar novamente", + "ASSIGNMENT": { + "SELECT_AGENT": "Escolher agente", + "REMOVE": "Excluir", + "ASSIGN": "Atribuir" + }, + "CONTEXT_MENU": { + "COPY": "Copiar", + "REPLY_TO": "Responder a esta mensagem", + "DELETE": "Excluir", + "CREATE_A_CANNED_RESPONSE": "Adicionar às respostas prontas", + "TRANSLATE": "Traduzir", + "COPY_PERMALINK": "Copiar link para a mensagem", + "LINK_COPIED": "URL da mensagem copiado para a área de transferência", + "DELETE_CONFIRMATION": { + "TITLE": "Tem a certeza que pretende apagar esta mensagem?", + "MESSAGE": "Esta ação é irreversível", + "DELETE": "Excluir", + "CANCEL": "Cancelar" + } + }, + "SIDEBAR": { + "CONTACT": "Contacto", + "COPILOT": "Copilot" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Incoming call", + "OUTGOING_CALL": "Outgoing call", + "CALL_IN_PROGRESS": "Call in progress", + "NOT_ANSWERED_YET": "Not answered yet", + "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", + "REJECT_CALL": "Reject", + "JOIN_CALL": "Join call", + "END_CALL": "End call" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Enviar transcrição da conversa", + "DESC": "Envia uma cópia da transcrição da conversa para o endereço de e-mail especificado", + "SUBMIT": "Submeter", + "CANCEL": "Cancelar", + "SEND_EMAIL_SUCCESS": "A transcrição da conversa foi enviada com sucesso", + "SEND_EMAIL_ERROR": "Ocorreu um erro, por favor, tente novamente", + "FORM": { + "SEND_TO_CONTACT": "Enviar a transcrição ao cliente", + "SEND_TO_AGENT": "Enviar a transcrição para o agente atribuído", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Enviar a transcrição para outro endereço de e-mail", + "EMAIL": { + "PLACEHOLDER": "Insira um endereço de e-mail", + "ERROR": "Por favor, insira um endereço de e-mail válido" + } + } + }, + "ONBOARDING": { + "TITLE": "Olá 👋. Bem-vindo ao {installationName}!", + "DESCRIPTION": "Obrigado por se registar. Queremos que aproveite ao máximo o sistema {installationName}. Aqui estão algumas coisas que pode fazer no {installationName} para tornar a sua experiência ainda mais agradável.", + "GREETING_MORNING": "👋 Bom dia, {name}. Bem-vindo ao {installationName}.", + "GREETING_AFTERNOON": "👋 Boa tarde, {name}. Bem-vindo ao {installationName}.", + "GREETING_EVENING": "👋 Boa noite, {name}. Bem-vindo ao {installationName}.", + "READ_LATEST_UPDATES": "Ler as últimas atualizações", + "ALL_CONVERSATION": { + "TITLE": "Todas as suas conversas num único lugar", + "DESCRIPTION": "Ver todas as conversas dos seus clientes num único painel. Pode filtrar as conversas pelo canal de entrada, etiquetas e estado.", + "NEW_LINK": "Clique aqui para criar uma caixa de entrada" + }, + "TEAM_MEMBERS": { + "TITLE": "Convidar os membros da sua equipa", + "DESCRIPTION": "Já que se prepara para começar a conversar com o seu cliente, convide também os seus colegas para o ajudar. Pode adicionar colegas de equipa acrescentando os seus endereços de e-mail à lista de agentes.", + "NEW_LINK": "Clique aqui para convidar um membro para a equipa" + }, + "LABELS": { + "TITLE": "Organizar conversas com etiquetas", + "DESCRIPTION": "As etiquetas permitem-lhe categorizar facilmente as suas conversas. Crie etiquetas como #suporte, #faturacao, etc., para que as possa utilizar, mais tarde, numa conversa.", + "NEW_LINK": "Clique aqui para criar etiquetas" + }, + "CANNED_RESPONSES": { + "TITLE": "Criar respostas prontas", + "DESCRIPTION": "Os modelos de resposta rápida pré-escritos ajudam-no a responder rapidamente a uma conversa. Os agentes podem inserir o caractere '/' seguido do código curto para inserir uma resposta.", + "NEW_LINK": "Clique aqui para criar uma resposta pronta" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Agente atribuído", + "SELF_ASSIGN": "Atribuir a mim", + "TEAM_LABEL": "Equipa atribuída", + "SELECT": { + "PLACEHOLDER": "Nenhuma" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Detalhes do contacto", + "CONVERSATION_ACTIONS": "Ações de conversa", + "CONVERSATION_LABELS": "Etiquetas da conversa", + "CONVERSATION_INFO": "Informação da conversa", + "CONTACT_NOTES": "Notas do contacto", + "CONTACT_ATTRIBUTES": "Atributos do contacto", + "PREVIOUS_CONVERSATION": "Conversas anteriores", + "MACROS": "Macros", + "LINEAR_ISSUES": "Casos Linear Associados", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "Pendente", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Criar atributo", + "NO_RECORDS_FOUND": "Nenhum atributo encontrado", + "UPDATE": { + "SUCCESS": "Atributo atualizado com sucesso", + "ERROR": "Não foi possível atualizar o atributo. Por favor, tente mais tarde" + }, + "ADD": { + "TITLE": "Adicionar", + "SUCCESS": "Atributo adicionado com sucesso", + "ERROR": "Não foi possível adicionar o atributo. Por favor, tente mais tarde" + }, + "DELETE": { + "SUCCESS": "Atributo apagado com sucesso", + "ERROR": "Não foi possível apagar o atributo. Por favor, tente mais tarde" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Adicionar atributos", + "PLACEHOLDER": "Pesquisar atributos", + "NO_RESULT": "Nenhum atributo encontrado" + } + }, + "EMAIL_HEADER": { + "FROM": "De", + "TO": "Para", + "BCC": "Bcc", + "CC": "Cc", + "SUBJECT": "Assunto", + "EXPAND": "Expand email" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "A participar", + "SIDEBAR_TITLE": "Participantes da conversa", + "NO_RECORDS_FOUND": "Nenhum resultado encontrado", + "ADD_PARTICIPANTS": "Selecionar participantes", + "REMANING_PARTICIPANTS_TEXT": "+{count} outros", + "REMANING_PARTICIPANT_TEXT": "+{count} outro", + "TOTAL_PARTICIPANTS_TEXT": "{count} pessoas estão a participar.", + "TOTAL_PARTICIPANT_TEXT": "{count} pessoa está a participar.", + "NO_PARTICIPANTS_TEXT": "Ninguém está a participar!", + "WATCH_CONVERSATION": "Junte-se à conversa", + "YOU_ARE_WATCHING": "Está a participar", + "API": { + "ERROR_MESSAGE": "Não foi possível atualizar, por favor, tente novamente!", + "SUCCESS_MESSAGE": "Participantes atualizados!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "Ver conteúdo traduzido", + "DESC": "Pode visualizar o conteúdo traduzido em cada linguagem.", + "ORIGINAL_CONTENT": "Conteúdo original", + "TRANSLATED_CONTENT": "Conteúdo traduzido", + "NO_TRANSLATIONS_AVAILABLE": "Nenhuma tradução está disponível para este conteúdo" + }, + "TYPING": { + "ONE": "{user} is typing", + "TWO": "{user} and {secondUser} are typing", + "MULTIPLE": "{user} and {count} others are typing" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Try these prompts" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Unable to download attachment. Please try again" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/csatMgmt.json b/app/javascript/dashboard/i18n/locale/pt/csatMgmt.json new file mode 100644 index 0000000..25e1bbc --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Avalie a sua conversa", + "PLACEHOLDER": "Conte-nos mais...", + "RATINGS": { + "POOR": "😞 Desapontado", + "FAIR": "😑 Justo", + "AVERAGE": "😐 Média", + "GOOD": "😀 Bom", + "EXCELLENT": "😍 Excelente" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/customRole.json b/app/javascript/dashboard/i18n/locale/pt/customRole.json new file mode 100644 index 0000000..e8dbf53 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Funções personalizadas", + "LEARN_MORE": "Aprenda mais sobre funções personalizadas", + "DESCRIPTION": "Funções personalizadas são funções criadas pelo proprietário ou administrador da conta. Essas funções podem ser atribuídas a agentes para definir seu acesso e permissões dentro da conta. Funções personalizadas podem ser criadas com permissões e níveis de acesso específicos para atender aos requisitos da organização.", + "HEADER_BTN_TXT": "Adicionar função personalizada", + "LOADING": "Buscando funções personalizadas...", + "SEARCH_404": "Não há itens correspondentes a esta consulta.", + "PAYWALL": { + "TITLE": "Atualize para criar funções personalizadas", + "AVAILABLE_ON": "O recurso de função personalizada está disponível apenas nos planos \"Business\" e \"Enterprise\".", + "UPGRADE_PROMPT": "Faça upgrade do seu plano para obter acesso a recursos avançados, como gestão de equipas, automações, atributos personalizados e muito mais.", + "UPGRADE_NOW": "Fazer upgrade agora", + "CANCEL_ANYTIME": "Pode alterar ou cancelar o plano a qualquer momento" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "O recurso de função personalizada está disponível apenas nos planos pagos.", + "UPGRADE_PROMPT": "Faça upgrade para um plano pago para obter recursos avançados, como logs de auditoria, capacidade de agentes e muito mais.", + "ASK_ADMIN": "Por favor, entre em contato com o administrador para atualização." + }, + "LIST": { + "404": "There are no custom roles available in this account.", + "TITLE": "Gerir funções personalizadas", + "DESC": "Funções personalizadas são funções criadas pelo proprietário ou administrador da conta. Essas funções podem ser atribuídas a agentes para definir seu acesso e permissões dentro da conta. Funções personalizadas podem ser criadas com permissões e níveis de acesso específicos para atender aos requisitos da organização.", + "TABLE_HEADER": { + "NAME": "Nome:", + "DESCRIPTION": "Descrição", + "PERMISSIONS": "Permissions", + "ACTIONS": "Ações" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Manage all conversations", + "CONVERSATION_UNASSIGNED_MANAGE": "Manage unassigned conversations and those assigned to them", + "CONVERSATION_PARTICIPATING_MANAGE": "Manage participating conversations and those assigned to them", + "CONTACT_MANAGE": "Manage contacts", + "REPORT_MANAGE": "Manage reports", + "KNOWLEDGE_BASE_MANAGE": "Manage knowledge base" + }, + "FORM": { + "NAME": { + "LABEL": "Nome:", + "PLACEHOLDER": "Please enter a name.", + "ERROR": "Nome é obrigatório." + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "Please enter a description.", + "ERROR": "Descrição obrigatória." + }, + "PERMISSIONS": { + "LABEL": "Permissões", + "ERROR": "Permissão requerida." + }, + "CANCEL_BUTTON_TEXT": "Cancelar", + "API": { + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot. Por favor, tente novamente." + } + }, + "ADD": { + "TITLE": "Adicionar função personalizada", + "DESC": " Funções personalizadas permitem criar funções com permissões e níveis de acesso específicos para atender aos requisitos da organização.", + "SUBMIT": "Submeter", + "API": { + "SUCCESS_MESSAGE": "Função personalizada adicionada com sucesso." + } + }, + "EDIT": { + "BUTTON_TEXT": "Editar", + "TITLE": "Editar função personalizada", + "DESC": " Funções personalizadas permitem criar funções com permissões e níveis de acesso específicos para atender aos requisitos da organização.", + "SUBMIT": "Atualização", + "API": { + "SUCCESS_MESSAGE": "Função personalizada atualizada com sucesso." + } + }, + "DELETE": { + "BUTTON_TEXT": "Excluir", + "API": { + "SUCCESS_MESSAGE": "Função personalizada excluída com sucesso.", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot. Por favor, tente novamente." + }, + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Tem certeza que deseja excluir agente ", + "YES": "Sim, excluir ", + "NO": "Não, manter " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/datePicker.json b/app/javascript/dashboard/i18n/locale/pt/datePicker.json new file mode 100644 index 0000000..f193922 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Confirmar", + "CLEAR_BUTTON": "Limpar", + "DATE_RANGE_INPUT": { + "START": "Data inicial", + "END": "Data final" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "Intervalo de datas", + "LAST_7_DAYS": "Últimos 7 Dias", + "LAST_30_DAYS": "Últimos 30 Dias", + "LAST_3_MONTHS": "Últimos 3 meses", + "LAST_6_MONTHS": "Últimos 6 meses", + "LAST_YEAR": "Último ano", + "CUSTOM_RANGE": "Intervalo de tempo personalizado" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/emoji.json b/app/javascript/dashboard/i18n/locale/pt/emoji.json new file mode 100644 index 0000000..58578b6 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Pesquisar emojis", + "NOT_FOUND": "Nenhum emoji corresponde à sua pesquisa", + "REMOVE": "Excluir" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/general.json b/app/javascript/dashboard/i18n/locale/pt/general.json new file mode 100644 index 0000000..e75cad8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "A mostrar {firstIndex}-{lastIndex} de {totalCount} itens", + "PHONE_INPUT": { + "PLACEHOLDER": "Procurar", + "EMPTY_STATE": "Nenhum resultado encontrado" + }, + "CLOSE": "Fechar", + "BETA": "Beta", + "BETA_DESCRIPTION": "This feature is in beta and may change as we improve it." + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/generalSettings.json b/app/javascript/dashboard/i18n/locale/pt/generalSettings.json new file mode 100644 index 0000000..b7b27c1 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "Excedeu o limite de conversas. O plano Hacker permite apenas 500 conversas.", + "INBOXES": "Excedeu o limite de caixas de entrada. O plano Hacker só suporta chat ao vivo no site. Caixas de entrada adicionais como email, WhatsApp, etc. requerem um plano pago.", + "AGENTS": "You have exceeded the agent limit. Your plan only allows {allowedAgents} agents.", + "NON_ADMIN": "Por favor, contacte o seu administrador para atualizar o plano e continuar a usar todas as funcionalidades." + }, + "TITLE": "Configurações da conta", + "SUBMIT": "Atualizar configurações", + "BACK": "Voltar", + "DISMISS": "Descartar", + "UPDATE": { + "ERROR": "Não foi possível atualizar as configurações, por favor, tente novamente!", + "SUCCESS": "Configurações de conta atualizadas com sucesso" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Apagar a sua Conta", + "NOTE": "Após apagar a sua conta, todos os seus dados serão apagados.", + "BUTTON_TEXT": "Apagar a Sua Conta", + "CONFIRM": { + "TITLE": "Apagar Conta", + "MESSAGE": "Apagar a sua conta é irreversível. Introduza o nome da sua conta abaixo para confirmar que pretende apagá-la permanentemente.", + "BUTTON_TEXT": "Excluir", + "DISMISS": "Cancelar", + "PLACE_HOLDER": "Por favor, escreva {accountName} para confirmar" + }, + "SUCCESS": "Conta selecionada para apagar", + "FAILURE": "Não foi possível apagar a conta, tente novamente!", + "SCHEDULED_DELETION": { + "TITLE": "Eliminação da conta agendada", + "MESSAGE_MANUAL": "Eliminação da conta agendada para {deletionDate}. Isto foi solicitado por um administrador. Pode cancelar a eliminação antes desta data.", + "MESSAGE_INACTIVITY": "Eliminação da conta está agendada para {deletionDate} devido à sua inatividade. Pode cancelar a eliminação antes desta data.", + "CLEAR_BUTTON": "Cancelar agendamento da eliminação" + } + }, + "FORM": { + "ERROR": "Por favor, corrigir erros de formulário", + "GENERAL_SECTION": { + "TITLE": "Configurações gerais", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "ID da conta", + "NOTE": "Este ID é necessário para integrações via API" + }, + "AUTO_RESOLVE": { + "TITLE": "Auto-resolver conversas", + "NOTE": "Esta configuração permite-lhe resolver automaticamente a conversa após um determinado período de inatividade.", + "DURATION": { + "LABEL": "Duração da inatividade", + "HELP": "Período de inatividade após o qual a conversa é automaticamente resolvida", + "PLACEHOLDER": "30", + "ERROR": "A duração de auto-resolução deve ser entre 10 minutos e 999 dias", + "API": { + "SUCCESS": "Definições de auto-resolução atualizadas", + "ERROR": "Falha ao atualizar as definições de auto-resolução" + } + }, + "MESSAGE": { + "LABEL": "Mensagem personalizada de auto-resolução", + "PLACEHOLDER": "A conversa foi marcada como resolvida pelo sistema devido a 15 dias de inatividade", + "HELP": "Mensagem enviada ao cliente após a conversa ser automaticamente resolvida" + }, + "PREFERENCES": "Preferências", + "LABEL": { + "LABEL": "Adicionar etiqueta após auto-resolução", + "PLACEHOLDER": "Selecionar uma etiqueta" + }, + "IGNORE_WAITING": { + "LABEL": "Ignorar conversas à espera de resposta do agente" + }, + "UPDATE_BUTTON": "Salvar alterações" + }, + "NAME": { + "LABEL": "Nome da conta", + "PLACEHOLDER": "Nome da sua conta", + "ERROR": "Por favor, insira um nome de conta válido" + }, + "LANGUAGE": { + "LABEL": "Linguagem do site", + "PLACEHOLDER": "Nome da sua conta", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "E-mail recebido do domínio", + "PLACEHOLDER": "O domínio onde irá receber os e-mails", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "E-mail de suporte", + "PLACEHOLDER": "E-mail de suporte da sua empresa", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Excluir conversas não atendidas", + "HELP": "Quando ativado, o sistema irá ignorar a resolução de conversas que ainda estão à espera de resposta de um agente." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcrever mensagens de áudio", + "NOTE": "Transcreva automaticamente mensagens de áudio nas conversas. Gere uma transcrição de texto sempre que uma mensagem de áudio for enviada ou recebida e apresente-a junto da mensagem.", + "API": { + "SUCCESS": "Definição de transcrição de áudio atualizada com sucesso", + "ERROR": "Falha ao atualizar a definição de transcrição de áudio" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Duração de inatividade para resolução", + "HELP": "Duração após a qual a conversa deve ser automaticamente resolvida se não houver atividade", + "PLACEHOLDER": "30", + "ERROR": "A duração de auto-resolução deve ser entre 10 minutos e 999 dias", + "API": { + "SUCCESS": "Definições de auto-resolução atualizadas", + "ERROR": "Falha ao atualizar as definições de auto-resolução" + }, + "UPDATE_BUTTON": "Atualização", + "MESSAGE_LABEL": "Mensagem personalizada de resolução", + "MESSAGE_PLACEHOLDER": "A conversa foi marcada como resolvida pelo sistema devido a 15 dias de inatividade", + "MESSAGE_HELP": "Esta mensagem é enviada ao cliente quando uma conversa é automaticamente resolvida pelo sistema devido à inatividade." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "A sua conta tem a opção de continuar as conversas por e-mail ativa.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "Já pode receber e-mails no domínio que escolheu." + } + }, + "UPDATE_CHATWOOT": "Está disponível uma nova atualização {latestChatwootVersion} para o ChatWoot. Por favor, atualize a sua versão.", + "LEARN_MORE": "Saber mais", + "PAYMENT_PENDING": "O seu pagamento está pendente. Por favor, atualize as suas informações de pagamento para continuar a usar o Chatwoot", + "UPGRADE": "Atualize para continuar a usar o Chatwoot", + "LIMITS_UPGRADE": "A sua conta excedeu os limites de utilização. Por favor, faça um upgrade ao seu plano para continuar a utilizar o Chatwoot", + "OPEN_BILLING": "Abrir faturação" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Pressione Enter para escolher", + "ENTER_TO_REMOVE": "Pressione Enter para eliminar", + "NO_OPTIONS": "List is empty", + "SELECT_ONE": "Selecionar um", + "SELECT": "Selecionar" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Notificações", + "MARK_ALL_DONE": "Marcar todos como resolvidos", + "DELETE_TITLE": "Excluído", + "UNREAD_NOTIFICATION": { + "TITLE": "Notificações não lidas", + "ALL_NOTIFICATIONS": "Ver todas as notificações", + "LOADING_UNREAD_MESSAGE": "A carregar notificações não lidas...", + "EMPTY_MESSAGE": "Não há notificações não lidas" + }, + "LIST": { + "LOADING_MESSAGE": "A carregar notificações...", + "404": "Sem notificações", + "TABLE_HEADER": [ + "Nome", + "Número de telefone", + "Conversas", + "Último contacto" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "Nova conversa", + "conversation_assignment": "Conversa atribuída", + "assigned_conversation_new_message": "Nova mensagem", + "participating_conversation_new_message": "Nova mensagem", + "conversation_mention": "Mencionar", + "sla_missed_first_response": "SLA perdido", + "sla_missed_next_response": "SLA perdido", + "sla_missed_resolution": "SLA perdido" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Ausente", + "RECONNECTING": "A reconectar...", + "RECONNECT_SUCCESS": "Reconectado" + }, + "BUTTON": { + "REFRESH": "Atualizar" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Pesquisar ou passar para", + "SECTIONS": { + "GENERAL": "Geral", + "REPORTS": "Relatórios", + "CONVERSATION": "Conversa", + "BULK_ACTIONS": "Ações em massa", + "CHANGE_ASSIGNEE": "Alterar responsável", + "CHANGE_PRIORITY": "Alterar prioridade", + "CHANGE_TEAM": "Alterar equipa", + "SNOOZE_CONVERSATION": "Adiar conversa", + "ADD_LABEL": "Adicionar etiqueta à conversa", + "REMOVE_LABEL": "Remover etiqueta da conversa", + "SETTINGS": "Configurações", + "AI_ASSIST": "Assistente IA", + "APPEARANCE": "Aparência", + "SNOOZE_NOTIFICATION": "Suspender notificação" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Ir para o painel de conversação", + "GO_TO_CONTACTS_DASHBOARD": "Ir para o painel de contactos", + "GO_TO_REPORTS_OVERVIEW": "Ir para a visão geral de relatórios", + "GO_TO_CONVERSATION_REPORTS": "Ir para relatórios de conversa", + "GO_TO_AGENT_REPORTS": "Ir para relatórios de agentes", + "GO_TO_LABEL_REPORTS": "Ir para relatórios de etiquetas", + "GO_TO_INBOX_REPORTS": "Ir para relatórios da caixa de entrada", + "GO_TO_TEAM_REPORTS": "Ir para relatórios da equipa", + "GO_TO_SETTINGS_AGENTS": "Ir para configurações do agente", + "GO_TO_SETTINGS_TEAMS": "Ir para configurações da equipa", + "GO_TO_SETTINGS_INBOXES": "Ir para configurações da caixa de entrada", + "GO_TO_SETTINGS_LABELS": "Ir para configurações de etiquetas", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Ir para configurações de resposta pronta", + "GO_TO_SETTINGS_APPLICATIONS": "Ir para configurações da aplicação", + "GO_TO_SETTINGS_ACCOUNT": "Ir para configurações da conta", + "GO_TO_SETTINGS_PROFILE": "Ir para configurações do perfil", + "GO_TO_NOTIFICATIONS": "Ir para notificações", + "ADD_LABELS_TO_CONVERSATION": "Adicionar etiqueta à conversa", + "ASSIGN_AN_AGENT": "Atribuir um agente", + "AI_ASSIST": "Assistente IA", + "ASSIGN_PRIORITY": "Atribuir prioridade", + "ASSIGN_A_TEAM": "Atribuir uma equipa", + "MUTE_CONVERSATION": "Silenciar conversa", + "UNMUTE_CONVERSATION": "Reativar conversa", + "REMOVE_LABEL_FROM_CONVERSATION": "Remover etiqueta da conversa", + "REOPEN_CONVERSATION": "Reabrir conversa", + "RESOLVE_CONVERSATION": "Resolver conversa", + "SEND_TRANSCRIPT": "Enviar transcrição por e-mail", + "SNOOZE_CONVERSATION": "Adiar conversa", + "UNTIL_NEXT_REPLY": "Até à próxima resposta", + "UNTIL_NEXT_WEEK": "Até à próxima semana", + "UNTIL_TOMORROW": "Até amanhã", + "UNTIL_NEXT_MONTH": "Até ao mês seguinte", + "AN_HOUR_FROM_NOW": "Até daqui a uma hora", + "UNTIL_CUSTOM_TIME": "Personalizar...", + "CHANGE_APPEARANCE": "Alterar aparência", + "LIGHT_MODE": "Claro", + "DARK_MODE": "Escuro", + "SYSTEM_MODE": "Sistema", + "SNOOZE_NOTIFICATION": "Suspender notificação" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "A carregar app do dashboard..." + }, + "COMMON": { + "OR": "Ou", + "CLICK_HERE": "clique aqui" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/helpCenter.json b/app/javascript/dashboard/i18n/locale/pt/helpCenter.json new file mode 100644 index 0000000..1413196 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Centro de suporte", + "NEW_PAGE": { + "DESCRIPTION": "Create self-service help center portals for your customers. Help them find answers quickly, without waiting. Streamline inquiries, boost agent efficiency, and elevate customer support.", + "CREATE_PORTAL_BUTTON": "Criar portal" + }, + "HEADER": { + "FILTER": "Filtrar por", + "SORT": "Ordenar por", + "LOCALE": "Linguagem", + "SETTINGS_BUTTON": "Configurações", + "NEW_BUTTON": "Novo artigo", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Publicado", + "DRAFT": "Rascunho", + "ARCHIVED": "Arquivado" + }, + "TITLES": { + "ALL_ARTICLES": "Todos os artigos", + "MINE": "Meus artigos", + "DRAFT": "Rascunhos de artigos", + "ARCHIVED": "Artigos arquivados" + }, + "LOCALE_SELECT": { + "TITLE": "Selecionar linguagem", + "PLACEHOLDER": "Selecionar linguagem", + "NO_RESULT": "Nenhuma linguagem encontrada", + "SEARCH_PLACEHOLDER": "Procurar linguagem" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "Todos os artigos", + "PUBLISH_BUTTON": "Publicar", + "MOVE_TO_ARCHIVE_BUTTON": "Mover para arquivo", + "PREVIEW": "Pré-visualizar", + "ADD_TRANSLATION": "Adicionar tradução", + "OPEN_SIDEBAR": "Abrir barra lateral", + "CLOSE_SIDEBAR": "Fechar barra lateral", + "SAVING": "A guardar...", + "SAVED": "Guardado" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Carregar imagem", + "UPLOADING": "A carregar...", + "SUCCESS": "Imagem carregada com sucesso", + "ERROR": "Erro ao carregar imagem", + "UN_AUTHORIZED_ERROR": "You are not authorized to upload images", + "ERROR_FILE_SIZE": "O tamanho da imagem deve ser inferior a {size}MB", + "ERROR_FILE_FORMAT": "O formato da imagem deve ser jpg, jpeg ou png", + "ERROR_FILE_DIMENSIONS": "As dimensões da imagem devem ser menores que 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Configurações de artigo", + "FORM": { + "CATEGORY": { + "LABEL": "Categoria", + "TITLE": "Selecionar categoria", + "PLACEHOLDER": "Selecionar categoria", + "NO_RESULT": "Nenhuma categoria encontrada", + "SEARCH_PLACEHOLDER": "Pesquisar categoria" + }, + "AUTHOR": { + "LABEL": "Autor", + "TITLE": "Selecionar autor", + "PLACEHOLDER": "Selecionar autor", + "NO_RESULT": "Nenhum autor encontrado", + "SEARCH_PLACEHOLDER": "Procurar autor" + }, + "META_TITLE": { + "LABEL": "Título meta", + "PLACEHOLDER": "Adicionar título meta" + }, + "META_DESCRIPTION": { + "LABEL": "Descrição meta", + "PLACEHOLDER": "Adicione a sua descrição meta para melhorar os resultados de SEO..." + }, + "META_TAGS": { + "LABEL": "Tags meta", + "PLACEHOLDER": "Adicione tags meta separadas por vírgula..." + } + }, + "BUTTONS": { + "ARCHIVE": "Arquivar artigo", + "DELETE": "Apagar artigo" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Sem categoria", + "SEARCH_RESULTS": "Procurar resultados para {query}", + "EMPTY_TEXT": "Pesquisar artigos para inserir em respostas.", + "SEARCH_LOADER": "A pesquisar...", + "INSERT_ARTICLE": "Inserir", + "NO_RESULT": "Nenhum artigo encontrado", + "COPY_LINK": "Copiar link do artigo para a área de transferência", + "OPEN_LINK": "Abrir artigo numa nova aba", + "PREVIEW_LINK": "Pré-visualizar artigo" + }, + "PORTAL": { + "HEADER": "Portais", + "DEFAULT": "Padrão", + "NEW_BUTTON": "Novo portal", + "ACTIVE_BADGE": "Ativa", + "CHOOSE_LOCALE_LABEL": "Selecionar linguagem", + "LOADING_MESSAGE": "A carregar portais...", + "ARTICLES_LABEL": "Artigos", + "NO_PORTALS_MESSAGE": "Não há portais disponíveis", + "ADD_NEW_LOCALE": "Adicionar nova linguagem", + "POPOVER": { + "TITLE": "Portais", + "PORTAL_SETTINGS": "Configurações do portal", + "SUBTITLE": "Tem vários portais e pode ter diferentes linguagens para cada portal.", + "CANCEL_BUTTON_LABEL": "Cancelar", + "CHOOSE_LOCALE_BUTTON": "Selecionar linguagem" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "Artigos", + "ADD": "Adicionar linguagem", + "VISIT": "Abrir site", + "SETTINGS": "Configurações", + "DELETE": "Excluir" + }, + "PORTAL_CONFIG": { + "TITLE": "Configurações do portal", + "ITEMS": { + "NAME": "Nome", + "DOMAIN": "Domínio personalizado", + "SLUG": "Slug", + "TITLE": "Título do portal", + "THEME": "Cor do tema", + "SUB_TEXT": "Sub texto do portal" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Linguagens disponíveis", + "TABLE": { + "NAME": "Nome do local", + "CODE": "Código do local", + "ARTICLE_COUNT": "Número de artigos", + "CATEGORIES": "Número de categorias", + "SWAP": "Trocar", + "DELETE": "Excluir", + "DEFAULT_LOCALE": "Padrão" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Apagar portal", + "MESSAGE": "Tem a certeza que pretende apagar este portal", + "YES": "Sim, apagar portal", + "NO": "Não, manter portal", + "API": { + "DELETE_SUCCESS": "Portal apagado com sucesso", + "DELETE_ERROR": "Erro ao apagar portal" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "CNAME instructions sent successfully", + "ERROR_MESSAGE": "Error while sending CNAME instructions" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Editar portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Informação básica" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Personalização do portal" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categorias" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locais" + } + }, + "CATEGORIES": { + "TITLE": "Categorias em", + "NEW_CATEGORY": "Nova categoria", + "TABLE": { + "NAME": "Nome", + "DESCRIPTION": "Descrição", + "LOCALE": "Local", + "ARTICLE_COUNT": "Número de artigos", + "ACTION_BUTTON": { + "EDIT": "Editar categoria", + "DELETE": "Apagar categoria" + }, + "EMPTY_TEXT": "Nenhuma categoria encontrada" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Atualizar configurações básicas" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Informações do centro de ajuda", + "BODY": "Informações básicas sobre o portal" + }, + "CUSTOMIZATION": { + "TITLE": "Personalização do centro de ajuda", + "BODY": "Personalizar portal" + }, + "FINISH": { + "TITLE": "Pronto! 🎉", + "BODY": "Está tudo pronto!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Voltar", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Criar portal", + "TITLE": "Informações do centro de ajuda", + "CREATE_BASIC_SETTING_BUTTON": "Criar configurações básicas do portal" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Personalização do portal", + "TITLE": "Personalização do centro de ajuda", + "UPDATE_PORTAL_BUTTON": "Atualizar definições do portal" + }, + "FINISH_PAGE": { + "TITLE": "Está tudo pronto! 🎉", + "MESSAGE": "Agora já pode ver o portal criado na sua página de todos os portais.", + "FINISH": "Ir para a página de todos os portais" + } + }, + "LOGO": { + "LABEL": "Logo", + "UPLOAD_BUTTON": "Carregar logo", + "HELP_TEXT": "Este logo será exibido no cabeçalho do portal.", + "IMAGE_UPLOAD_SUCCESS": "Logo carregado com sucesso", + "IMAGE_UPLOAD_ERROR": "Logo apagado com sucesso", + "IMAGE_DELETE_ERROR": "Erro ao apagar logo" + }, + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Nome do portal", + "HELP_TEXT": "O nome será usado internamente no portal público.", + "ERROR": "Nome obrigatório" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug do portal para URLs", + "ERROR": "Slug é obrigatório" + }, + "DOMAIN": { + "LABEL": "Domínio personalizado", + "PLACEHOLDER": "Domínio personalizado do portal", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals. Eg: {exampleURL}", + "ERROR": "Insira um URL de domínio válido" + }, + "HOME_PAGE_LINK": { + "LABEL": "Link da Página Inicial", + "PLACEHOLDER": "Link da página inicial do portal", + "HELP_TEXT": "The link used to return from the portal to the home page. Eg: {exampleURL}", + "ERROR": "Insira um URL de página inicial válido" + }, + "THEME_COLOR": { + "LABEL": "Cor do tema do portal", + "HELP_TEXT": "Esta cor será mostrada como a cor do tema do portal." + }, + "PAGE_TITLE": { + "LABEL": "Título da página", + "PLACEHOLDER": "Título da página do portal", + "HELP_TEXT": "O título da página será usado no portal público.", + "ERROR": "Título da página obrigatório" + }, + "HEADER_TEXT": { + "LABEL": "Texto do cabeçalho", + "PLACEHOLDER": "Texto do cabeçalho do portal", + "HELP_TEXT": "O texto do cabeçalho do portal será usado no portal visível ao público.", + "ERROR": "Texto do cabeçalho do portal obrigatório" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal criado com sucesso.", + "ERROR_MESSAGE_FOR_BASIC": "Não foi possível criar o portal. Por favor, tente novamente.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal atualizado com sucesso.", + "ERROR_MESSAGE_FOR_UPDATE": "Não foi possível atualizar o portal. Por favor, tente novamente." + } + }, + "ADD_LOCALE": { + "TITLE": "Adicionar um novo local", + "SUB_TITLE": "Isto adiciona um novo local à sua lista de traduções disponíveis.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Local", + "PLACEHOLDER": "Selecione um local", + "ERROR": "Local obrigatório" + }, + "BUTTONS": { + "CREATE": "Criar local", + "CANCEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Local adicionado com sucesso", + "ERROR_MESSAGE": "Não foi possível adicionar o local. Por favor, tente novamente." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Local padrão atualizado com sucesso", + "ERROR_MESSAGE": "Não foi possível atualizar o local padrão. Por favor, tente novamente." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Local removido do portal com sucesso", + "ERROR_MESSAGE": "Não foi possível remover o local do portal. Por favor, tente novamente." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "A carregar artigos...", + "404": "Nenhum artigo corresponde à sua pesquisa 🔍", + "NO_ARTICLES": "Não há artigos disponíveis", + "HEADERS": { + "TITLE": "Título", + "CATEGORY": "Categoria", + "READ_COUNT": "Visualizações", + "STATUS": "Estado", + "LAST_EDITED": "Última edição" + }, + "COLUMNS": { + "BY": "por", + "AUTHOR_NOT_AVAILABLE": "Autor não disponível" + } + }, + "EDIT_ARTICLE": { + "LOADING": "A carregar artigo...", + "TITLE_PLACEHOLDER": "Título do artigo aqui", + "CONTENT_PLACEHOLDER": "Escreva o seu artigo aqui", + "API": { + "ERROR": "Erro ao guardar artigo" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Erro ao publicar artigo", + "SUCCESS": "Artigo publicado com sucesso" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Erro ao arquivar artigo", + "SUCCESS": "Artigo arquivado com sucesso" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Error while drafting article", + "SUCCESS": "Article drafted successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Tem a certeza que pretende excluir o artigo?", + "YES": "Sim, excluir", + "NO": "Não, manter" + } + }, + "API": { + "SUCCESS_MESSAGE": "Artigo excluído com sucesso", + "ERROR_MESSAGE": "Erro ao excluir artigo" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Adicione o título do artigo e o conteúdo em seguida, posteriomente as configurações apenas serão editáveis por si" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Pesquisar artigos" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Criar categoria", + "SUB_TITLE": "A categoria será usada no portal público para categorizar artigos.", + "PORTAL": "Portal", + "LOCALE": "Local", + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Nome da categoria", + "HELP_TEXT": "O ícone e o nome da categoria serão usados no portal público para categorizar artigos.", + "ERROR": "Nome obrigatório" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Categoria slug para URLs", + "HELP_TEXT": "app.chatwoot.com/hc/meu-portal/en-US/categorias/meu-slug", + "ERROR": "Slug obrigatória" + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "Breve descrição da categoria.", + "ERROR": "Descrição obrigatória" + }, + "BUTTONS": { + "CREATE": "Criar categoria", + "CANCEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Categoria criada com sucesso", + "ERROR_MESSAGE": "Não é possível criar a categoria" + } + }, + "EDIT": { + "TITLE": "Editar uma categoria", + "SUB_TITLE": "Editar uma categoria atualizará a categoria no portal público.", + "PORTAL": "Portal", + "LOCALE": "Local", + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Nome da categoria", + "HELP_TEXT": "O ícone e o nome da categoria serão usados no portal público para categorizar artigos.", + "ERROR": "Nome obrigatório" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Categoria slug para URLs", + "HELP_TEXT": "app.chatwoot.com/hc/meu-portal/en-US/categorias/meu-slug", + "ERROR": "Slug é obrigatório" + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "Breve descrição da categoria.", + "ERROR": "Descrição é obrigatória" + }, + "BUTTONS": { + "CREATE": "Atualizar categoria", + "CANCEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Categoria atualizada com sucesso", + "ERROR_MESSAGE": "Não foi possível atualizar a categoria" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Categoria apagada com sucesso", + "ERROR_MESSAGE": "Não é possível apagar a categoria" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Pesquisar artigos", + "PLACEHOLDER": "Pesquisar artigos", + "NO_RESULT": "Nenhum artigo encontrado", + "SEARCHING": "A pesquisar...", + "SEARCH_BUTTON": "Procurar", + "INSERT_ARTICLE": "Inserir link", + "IFRAME_ERROR": "O URL está vazio ou é inválido. Não é possível exibir o conteúdo.", + "OPEN_ARTICLE_SEARCH": "Inserir artigo do centro de ajuda", + "SUCCESS_ARTICLE_INSERTED": "Artigo inserido com sucesso", + "PREVIEW_LINK": "Pré-visualizar artigo", + "CANCEL": "Fechar", + "BACK": "Voltar", + "BACK_RESULTS": "Voltar aos resultados" + }, + "UPGRADE_PAGE": { + "TITLE": "Centro de suporte", + "DESCRIPTION": "Crie portais self-service de fácil utilização. Ajude os seus utilizadores a aceder aos artigos e obter suporte 24/7. Atualize a sua subscrição para habilitar este recurso.", + "SELF_HOSTED_DESCRIPTION": "Crie portais self-service de fácil utilização. Ajude os seus utilizadores a aceder aos artigos e obter suporte 24/7. Entre em contacto com o administrador para ativar este recurso.", + "BUTTON": { + "LEARN_MORE": "Saiba mais", + "UPGRADE": "Atualizar" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Múltiplos portais", + "DESCRIPTION": "Crie vários portais de ajuda centralizada para diferentes produtos usando a mesma conta." + }, + "LOCALES": { + "TITLE": "Suporte total para linguagens", + "DESCRIPTION": "Localize o portal na sua linguagem. Suportamos todas as linguagens e permitimos traduções para todos os artigos." + }, + "SEO": { + "TITLE": "Design SEO-friendly", + "DESCRIPTION": "Personalize as suas meta tags para melhorar a visibilidade nos motores de busca com as nossas páginas SEO-friendly." + }, + "API": { + "TITLE": "Suporte completo da API", + "DESCRIPTION": "Use o portal como um CMS com frameworks de front-end externos usando as nossas APIs." + } + } + }, + "LOADING": "A carregar...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "{count} view | {count} views", + "DROPDOWN_MENU": { + "PUBLISH": "Publicar", + "DRAFT": "Rascunho", + "ARCHIVE": "Archive", + "DELETE": "Excluir" + }, + "STATUS": { + "DRAFT": "Rascunho", + "PUBLISHED": "Publicado", + "ARCHIVED": "Arquivado" + }, + "CATEGORY": { + "UNCATEGORISED": "Uncategorised" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "All articles", + "MINE": "Minhas", + "DRAFT": "Rascunho", + "PUBLISHED": "Publicado", + "ARCHIVED": "Arquivado" + }, + "CATEGORY": { + "ALL": "All categories" + }, + "LOCALE": { + "ALL": "All locales" + }, + "NEW_ARTICLE": "New article" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Write an article", + "SUBTITLE": "Write a rich article, let’s get started!", + "BUTTON_LABEL": "New article" + }, + "MINE": { + "TITLE": "You haven't written any articles here", + "SUBTITLE": "All articles written by you show up here for quick access." + }, + "DRAFT": { + "TITLE": "There are no articles in drafts", + "SUBTITLE": "Draft articles will appear here" + }, + "PUBLISHED": { + "TITLE": "There are no published articles", + "SUBTITLE": "Published articles will appear here" + }, + "ARCHIVED": { + "TITLE": "There are no articles in the archive", + "SUBTITLE": "Archived articles don't show up on the portal, you can use it to mark deprecated or outdated pages" + }, + "CATEGORY": { + "TITLE": "There are no articles in this category", + "SUBTITLE": "Articles in this category will appear here" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "Nova categoria", + "EDIT_CATEGORY": "Editar categoria", + "CATEGORIES_COUNT": "{n} category | {n} categories", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categories ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} articles) | {categoryName} ({categoryCount} article)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "Nenhuma categoria encontrada", + "SUBTITLE": "Categories will appear here. You can add a category by clicking the 'New Category' button." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Categoria criada com sucesso", + "ERROR_MESSAGE": "Não é possível criar a categoria" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Categoria atualizada com sucesso", + "ERROR_MESSAGE": "Não foi possível atualizar a categoria" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Categoria apagada com sucesso", + "ERROR_MESSAGE": "Não é possível apagar a categoria" + } + }, + "HEADER": { + "CREATE": "Criar categoria", + "EDIT": "Editar categoria", + "DESCRIPTION": "Editar uma categoria atualizará a categoria no portal público.", + "PORTAL": "Portal", + "LOCALE": "Local" + }, + "FORM": { + "NAME": { + "LABEL": "Nome:", + "PLACEHOLDER": "Nome da categoria", + "ERROR": "Nome é obrigatório" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Categoria slug para URLs", + "ERROR": "Slug obrigatória", + "HELP_TEXT": "app.chatwoot.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "Breve descrição da categoria.", + "ERROR": "Descrição é obrigatória" + } + }, + "BUTTONS": { + "CREATE": "Criar", + "EDIT": "Atualização", + "CANCEL": "Cancelar" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "No locales available | {n} locale | {n} locales", + "NEW_LOCALE_BUTTON_TEXT": "New locale", + "LOCALE_CARD": { + "ARTICLES_COUNT": "{count} article | {count} articles", + "CATEGORIES_COUNT": "{count} category | {count} categories", + "DEFAULT": "Padrão", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Make default", + "DELETE": "Excluir" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Adicionar nova linguagem", + "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", + "COMBOBOX": { + "PLACEHOLDER": "Selecionar linguagem..." + }, + "API": { + "SUCCESS_MESSAGE": "Local adicionado com sucesso", + "ERROR_MESSAGE": "Não foi possível adicionar o local. Por favor, tente novamente." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "A guardar...", + "SAVED": "Guardado" + }, + "PREVIEW": "Pré-visualizar", + "PUBLISH": "Publicar", + "DRAFT": "Rascunho", + "ARCHIVE": "Archive", + "BACK_TO_ARTICLES": "Back to articles" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "More properties", + "UNCATEGORIZED": "Sem categoria", + "EDITOR_PLACEHOLDER": "Write something..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Article properties", + "META_DESCRIPTION": "Descrição meta", + "META_DESCRIPTION_PLACEHOLDER": "Add meta description", + "META_TITLE": "Título meta", + "META_TITLE_PLACEHOLDER": "Add meta title", + "META_TAGS": "Tags meta", + "META_TAGS_PLACEHOLDER": "Add meta tags" + }, + "API": { + "ERROR": "Erro ao guardar artigo" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "New portal", + "PORTALS": "Portais", + "CREATE_PORTAL": "Create and manage multiple portals", + "ARTICLES": "Artigos", + "DOMAIN": "domínio", + "PORTAL_NAME": "Nome do portal" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Create new portal", + "DESCRIPTION": "Give your portal a name and create a user-friendly URL slug. You can modify both later in the settings.", + "CONFIRM_BUTTON_LABEL": "Criar", + "NAME": { + "LABEL": "Nome:", + "PLACEHOLDER": "User Guide | Chatwoot", + "MESSAGE": "Choose an name for your portal.", + "ERROR": "Nome é obrigatório" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Slug obrigatória", + "FORMAT_ERROR": "Por favor, introduza um slug válido, por exemplo: guia-do-utilizador" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logo", + "IMAGE_UPLOAD_ERROR": "Não foi possível carregar a imagem! Tente novamente", + "IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save changes to save the logo", + "IMAGE_DELETE_SUCCESS": "Logo apagado com sucesso", + "IMAGE_DELETE_ERROR": "Unable to delete logo", + "IMAGE_UPLOAD_SIZE_ERROR": "O tamanho da imagem deve ser inferior a {size}MB" + }, + "NAME": { + "LABEL": "Nome:", + "PLACEHOLDER": "Nome do portal", + "ERROR": "Nome é obrigatório" + }, + "HEADER_TEXT": { + "LABEL": "Header text", + "PLACEHOLDER": "Texto do cabeçalho do portal" + }, + "PAGE_TITLE": { + "LABEL": "Page title", + "PLACEHOLDER": "Título da página do portal" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home page link", + "PLACEHOLDER": "Link da página inicial do portal", + "ERROR": "Enter a valid URL. The Home page link must start with 'http://' or 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Live chat widget", + "PLACEHOLDER": "Select live chat widget", + "HELP_TEXT": "Select a live chat widget that will appear on your help center", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Brand color" + }, + "SAVE_CHANGES": "Save changes" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Domínio personalizado", + "LABEL": "Domínio personalizado:", + "DESCRIPTION": "You can host your portal on a custom domain. For instance, if your website is yourdomain.com and you want your portal available at docs.yourdomain.com, simply enter that in this field.", + "STATUS_DESCRIPTION": "Your custom portal will start working as soon as it is verified.", + "PLACEHOLDER": "Domínio personalizado do portal", + "EDIT_BUTTON": "Editar", + "ADD_BUTTON": "Add custom domain", + "STATUS": { + "LIVE": "Disponível", + "PENDING": "Awaiting verification", + "ERROR": "Verification failed" + }, + "DIALOG": { + "ADD_HEADER": "Add custom domain", + "EDIT_HEADER": "Edit custom domain", + "ADD_CONFIRM_BUTTON_LABEL": "Add domain", + "EDIT_CONFIRM_BUTTON_LABEL": "Update domain", + "LABEL": "Domínio personalizado", + "PLACEHOLDER": "Domínio personalizado do portal", + "ERROR": "Custom domain is required", + "FORMAT_ERROR": "Please enter a valid domain URL e.g. docs.yourdomain.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "DNS configuration", + "DESCRIPTION": "Log in to the account you have with your DNS provider, and add a CNAME record for subdomain pointing to chatwoot.help", + "COPY": "Successfully copied CNAME", + "SEND_INSTRUCTIONS": { + "HEADER": "Send instructions", + "DESCRIPTION": "If you would prefer to have someone from your development team to handle this step, you can enter email address below, and we will send them the required instructions.", + "PLACEHOLDER": "Enter their email", + "ERROR": "Enter a valid email address", + "SEND_BUTTON": "Enviar" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Delete {portalName}", + "HEADER": "Apagar portal", + "DESCRIPTION": "Permanently delete this portal. This action is irreversible", + "DIALOG": { + "HEADER": "Sure you want to delete {portalName}?", + "DESCRIPTION": "This is a permanent action that cannot be reversed.", + "CONFIRM_BUTTON_LABEL": "Excluir" + } + }, + "EDIT_CONFIGURATION": "Edit configuration" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal criado com sucesso", + "ERROR_MESSAGE": "Unable to create portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal atualizado com sucesso", + "ERROR_MESSAGE": "Unable to update portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "A carregar...", + "UPLOAD": "Upload & Process", + "CANCEL": "Cancelar", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Failed to upload PDF. Please try again." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "A gerar...", + "CONFIRM_DELETE": "Tem a certeza que pretende apagar o {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Concluída", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Drag and drop your PDF file here, or click to select", + "SELECT_FILE": "Select PDF File", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Please select a valid PDF file", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Loading generated content..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/inbox.json b/app/javascript/dashboard/i18n/locale/pt/inbox.json new file mode 100644 index 0000000..1c9a590 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "My Inbox", + "DISPLAY_DROPDOWN": "Mostrar", + "LOADING": "A obter notificações", + "404": "Não há notificações ativas neste grupo.", + "NO_NOTIFICATIONS": "Sem notificações", + "NOTE": "Notificações de todas as caixas subscritas", + "NO_MESSAGES_AVAILABLE": "Oops! Não foi possível importar mensagens", + "SNOOZED_UNTIL": "Suspender até", + "SNOOZED_UNTIL_TOMORROW": "Adiado até amanhã", + "SNOOZED_UNTIL_NEXT_WEEK": "Adiada até a próxima semana" + }, + "ACTION_HEADER": { + "SNOOZE": "Suspender notificação", + "DELETE": "Apagar notificação", + "BACK": "Voltar" + }, + "TYPES": { + "CONVERSATION_MENTION": "Foi mencionado numa conversa", + "CONVERSATION_CREATION": "Nova conversa criada", + "CONVERSATION_ASSIGNMENT": "Foi-lhe atribuída uma conversa", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Nova mensagem numa conversa que lhe está atribuída", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Nova mensagem numa conversa em que participa", + "SLA_MISSED_FIRST_RESPONSE": "SLA da primeira resposta não atingido na conversa", + "SLA_MISSED_NEXT_RESPONSE": "SLA da próxima resposta não atingido na conversa", + "SLA_MISSED_RESOLUTION": "SLA de resolução não atingido na conversa" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Mentioned", + "CONVERSATION_ASSIGNMENT": "Assigned to you", + "CONVERSATION_CREATION": "New Conversation", + "SLA_MISSED_FIRST_RESPONSE": "SLA breach", + "SLA_MISSED_NEXT_RESPONSE": "SLA breach", + "SLA_MISSED_RESOLUTION": "SLA breach", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Nova mensagem", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Nova mensagem", + "SNOOZED_UNTIL": "Snoozed for {time}", + "SNOOZED_ENDS": "Snooze ended" + }, + "NO_CONTENT": "Sem conteúdo disponível", + "MENU_ITEM": { + "MARK_AS_READ": "Marcar como lida", + "MARK_AS_UNREAD": "Marcar como não lida", + "SNOOZE": "Adiar", + "DELETE": "Excluir", + "MARK_ALL_READ": "Marcar todas como lidas", + "DELETE_ALL": "Excluir tudo", + "DELETE_ALL_READ": "Excluir todas as lidas" + }, + "DISPLAY_MENU": { + "SORT": "Ordenar", + "DISPLAY": "Mostrar :", + "SORT_OPTIONS": { + "NEWEST": "Recentes", + "OLDEST": "Antigas", + "PRIORITY": "Prioridade" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Adiado", + "READ": "Lida", + "LABELS": "Etiquetas", + "CONVERSATION_ID": "ID da conversa" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notificação marcada como lida", + "MARK_AS_UNREAD": "Notificação marcada como não lida", + "SNOOZE": "Notificação adiada", + "DELETE": "Notificação excluída", + "MARK_ALL_READ": "Todas as notificações marcadas como lidas", + "DELETE_ALL": "Todas as notificações foram excluídas", + "DELETE_ALL_READ": "Todas as notificações lidas foram excluídas" + }, + "REAUTHORIZE": { + "TITLE": "Reauthorization Required", + "DESCRIPTION": "Your WhatsApp connection has expired. Please reconnect to continue receiving and sending messages.", + "BUTTON_TEXT": "Reconnect WhatsApp", + "LOADING_FACEBOOK": "Loading Facebook SDK...", + "SUCCESS": "WhatsApp reconnected successfully", + "ERROR": "Failed to reconnect WhatsApp. Please try again.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID is not configured. Please contact your administrator.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID is not configured. Please contact your administrator.", + "CONFIGURATION_ERROR": "Configuration error occurred during reauthorization.", + "FACEBOOK_LOAD_ERROR": "Failed to load Facebook SDK. Please try again.", + "TROUBLESHOOTING": { + "TITLE": "Troubleshooting", + "POPUP_BLOCKED": "Ensure pop-ups are allowed for this site", + "COOKIES": "Third-party cookies must be enabled", + "ADMIN_ACCESS": "You need admin access to the WhatsApp Business Account" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json new file mode 100644 index 0000000..e31d85e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Caixas de Entrada", + "DESCRIPTION": "A channel is the mode of communication your customer chooses to interact with you. An inbox is where you manage interactions for a specific channel. It can include communications from various sources such as email, live chat, and social media.", + "LEARN_MORE": "Learn more about inboxes", + "RECONNECTION_REQUIRED": "A sua caixa de entrada está desconectada. Não serão recebidas novas mensagens até nova autorização.", + "CLICK_TO_RECONNECT": "Clique aqui para reconectar.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Your WhatsApp Business registration isn’t complete. Please check your display name status in Meta Business Manager before reconnecting.", + "COMPLETE_REGISTRATION": "Complete Registration", + "LIST": { + "404": "Não há caixas de entrada anexadas a esta conta." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Escolher canal", + "BODY": "Escolha o provedor que pretende integrar com o Chatwoot." + }, + "INBOX": { + "TITLE": "Criar caixa de entrada", + "BODY": "Autenticar a sua conta e criar uma caixa de entrada." + }, + "AGENT": { + "TITLE": "Adicionar agentes", + "BODY": "Adicionar agentes à caixa de entrada criada." + }, + "FINISH": { + "TITLE": "Pronto!", + "BODY": "Está tudo preparado para começar!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Nome da caixa de entrada", + "PLACEHOLDER": "Insira o nome da caixa de entrada (ex. Informatico.pt)", + "ERROR": "Por favor, insira um nome de caixa de entrada válido" + }, + "WEBSITE_NAME": { + "LABEL": "Nome do site", + "PLACEHOLDER": "Insira o nome do seu site (ex. Acme Inc)" + }, + "FB": { + "HELP": "PS. ao fazer login, só teremos acesso às mensagens da sua página. As suas mensagens privadas nunca poderão ser acedidas pelo Chatwoot.", + "CHOOSE_PAGE": "Escolher página", + "CHOOSE_PLACEHOLDER": "Selecionar uma página da lista", + "INBOX_NAME": "Nome da caixa de entrada", + "ADD_NAME": "Adicione um nome à sua caixa de entrada", + "PICK_NAME": "Selecione um nome para a sua caixa de entrada", + "PICK_A_VALUE": "Escolha um valor", + "CREATE_INBOX": "Criar caixa de entrada" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continuar com o Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Ligue o seu perfil do Instagram", + "HELP": "Para adicionar o seu perfil do Instagram como canal, precisa autenticar o seu perfil clicando em 'Continuar com o Instagram' ", + "ERROR_MESSAGE": "Ocorreu um erro ao ligar ao Instagram, por favor tente novamente", + "ERROR_AUTH": "Ocorreu um erro ao ligar ao Instagram, por favor tente novamente", + "NEW_INBOX_SUGGESTION": "Esta conta do Instagram estava anteriormente ligada a uma caixa de entrada diferente e foi agora migrada para aqui. Todas as novas mensagens aparecerão aqui. A caixa de entrada antiga já não poderá enviar ou receber mensagens para esta conta.", + "DUPLICATE_INBOX_BANNER": "Esta conta do Instagram foi migrada para a nova caixa de entrada do canal Instagram. Já não poderá enviar/receber mensagens do Instagram a partir desta caixa de entrada." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continue with TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Connect your TikTok Profile", + "HELP": "To add your TikTok profile as a channel, you need to authenticate your TikTok Profile by clicking on 'Continue with TikTok' ", + "ERROR_MESSAGE": "There was an error connecting to TikTok, please try again", + "ERROR_AUTH": "There was an error connecting to TikTok, please try again" + }, + "TWITTER": { + "HELP": "Para adicionar o seu perfil do Twitter como um canal, precisa de autenticar o seu perfil do Twitter clicando em 'Entrar com o Twitter' ", + "ERROR_MESSAGE": "Houve um erro de ligação com o Twitter, por favor, tente novamente", + "TWEETS": { + "ENABLE": "Criar conversas a partir dos tweets mencionados" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Canal do site", + "DESC": "Crie um canal para o seu site e comece a oferecer suporte aos seus clientes através do nosso widget do site.", + "LOADING_MESSAGE": "A criar canal de suporte ao site", + "CHANNEL_AVATAR": { + "LABEL": "Avatar do canal" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "URL do Webhook", + "PLACEHOLDER": "Introduza o seu URL do Webhook", + "ERROR": "Por favor, insira um URL válido" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Domínio do site", + "PLACEHOLDER": "Insira o domínio do seu site (ex. acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Título de boas-vindas", + "PLACEHOLDER": "Olá!" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Slogan de boas-vindas", + "PLACEHOLDER": "Nós simplificamos a sua conexão com os clientes. Pergunte-nos qualquer coisa ou partilhe um comentário." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Mensagem de boas-vindas do canal", + "PLACEHOLDER": "Acme Inc normalmente responde em algumas horas." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Ativar mensagem de boas-vindas do canal", + "HELP_TEXT": "Enviar automaticamente uma mensagem de saudação quando uma nova conversa for criada.", + "ENABLED": "Ativado", + "DISABLED": "Inativo" + }, + "REPLY_TIME": { + "TITLE": "Definir tempo de resposta", + "IN_A_FEW_MINUTES": "Em poucos minutos", + "IN_A_FEW_HOURS": "Em poucas horas", + "IN_A_DAY": "Dentro de um dia", + "HELP_TEXT": "Este tempo de resposta será mostrado no widget de chat" + }, + "WIDGET_COLOR": { + "LABEL": "Cor do widget", + "PLACEHOLDER": "Atualizar a cor do widget " + }, + "SUBMIT_BUTTON": "Criar caixa de entrada", + "API": { + "ERROR_MESSAGE": "Não foi possível criar um canal de website. Por favor, tente novamente." + } + }, + "TWILIO": { + "TITLE": "Canal SMS/WhatsApp da Twilio", + "DESC": "Integre o Twilio e comece a oferecer suporte aos seus clientes por SMS ou WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "SID da conta", + "PLACEHOLDER": "Por favor, insira a sua conta Twilio SID", + "ERROR": "Este campo é obrigatório" + }, + "API_KEY": { + "USE_API_KEY": "Use a autenticação de chave de API", + "LABEL": "Chave da API SID", + "PLACEHOLDER": "Por favor, insira a sua chave da API SID", + "ERROR": "Este campo é obrigatório" + }, + "API_KEY_SECRET": { + "LABEL": "Chave secreta da API", + "PLACEHOLDER": "Por favor, insira a sua chave secreta da API", + "ERROR": "Este campo é obrigatório" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "Serviço de mensagens SID", + "PLACEHOLDER": "Por favor, insira o SID do seu serviço de mensagens da Twilio", + "ERROR": "Este campo é obrigatório", + "USE_MESSAGING_SERVICE": "Use um serviço de mensagens da Twilio" + }, + "CHANNEL_TYPE": { + "LABEL": "Tipo de canal", + "ERROR": "Por favor, selecione o tipo de canal" + }, + "AUTH_TOKEN": { + "LABEL": "Token de autenticação", + "PLACEHOLDER": "Por favor, insira o seu token de autenticação Twilio", + "ERROR": "Este campo é obrigatório" + }, + "CHANNEL_NAME": { + "LABEL": "Nome da caixa de entrada", + "PLACEHOLDER": "Por favor, insira um nome para a caixa de entrada", + "ERROR": "Este campo é obrigatório" + }, + "PHONE_NUMBER": { + "LABEL": "Número de telefone", + "PLACEHOLDER": "Por favor, insira o número de telefone a partir do qual a mensagem será enviada.", + "ERROR": "Por favor, forneça um número de telefone válido, que comece com o sinal de '+' e que não contenha quaisquer espaços." + }, + "API_CALLBACK": { + "TITLE": "Link de retorno de ligação", + "SUBTITLE": "Tem de configurar, aqui, o link de retorno de mensagem no Twilio, através de um URL." + }, + "SUBMIT_BUTTON": "Criar canal Twilio", + "API": { + "ERROR_MESSAGE": "Não foi possível autenticar as credenciais Twilio, por favor, tente novamente" + } + }, + "SMS": { + "TITLE": "Canal SMS", + "DESC": "Comece a apoiar os seus clientes via SMS.", + "PROVIDERS": { + "LABEL": "API Provider", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandwidth" + }, + "API": { + "ERROR_MESSAGE": "Não foi possível guardar o canal de SMS" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "ID da conta", + "PLACEHOLDER": "Por favor, insira o ID da sua conta Bandwidth", + "ERROR": "Este campo é obrigatório" + }, + "API_KEY": { + "LABEL": "Chave da API", + "PLACEHOLDER": "Por favor, insira a chave da API da sua Bandwidth", + "ERROR": "Este campo é obrigatório" + }, + "API_SECRET": { + "LABEL": "API Secret", + "PLACEHOLDER": "Por favor, insira a API Secret da sua Bandwidth", + "ERROR": "Este campo é obrigatório" + }, + "APPLICATION_ID": { + "LABEL": "ID da aplicação", + "PLACEHOLDER": "Por favor, insira o ID da aplicação da sua Bandwidth", + "ERROR": "Este campo é obrigatório" + }, + "INBOX_NAME": { + "LABEL": "Nome da caixa de entrada", + "PLACEHOLDER": "Por favor, insira um nome para a caixa de entrada", + "ERROR": "Este campo é obrigatório" + }, + "PHONE_NUMBER": { + "LABEL": "Número de telefone", + "PLACEHOLDER": "Por favor, insira o número de telefone a partir do qual a mensagem será enviada.", + "ERROR": "Por favor, forneça um número de telefone válido que comece com o sinal de '+' e que não contenha quaisquer espaços." + }, + "SUBMIT_BUTTON": "Criar canal Bandwidth", + "API": { + "ERROR_MESSAGE": "Não foi possível autenticar as credenciais Bandwidth, por favor, tente novamente" + }, + "API_CALLBACK": { + "TITLE": "URL de retorno da chamada", + "SUBTITLE": "Tem de configurar o URL de retorno de mensagem na Bandwidth, com o URL mencionado aqui." + } + } + }, + "WHATSAPP": { + "TITLE": "Canal de WhatsApp", + "DESC": "Comece a apoiar os seus clientes via WhatsApp.", + "PROVIDERS": { + "LABEL": "API Provider", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD_DESC": "Quick setup through Meta", + "TWILIO_DESC": "Connect via Twilio credentials", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Select your API provider", + "DESCRIPTION": "Choose your WhatsApp provider. You can connect directly through Meta which requires no setup, or connect through Twilio using your account credentials." + }, + "INBOX_NAME": { + "LABEL": "Nome da caixa de entrada", + "PLACEHOLDER": "Por favor, insira um nome para a caixa de entrada", + "ERROR": "Este campo é obrigatório" + }, + "PHONE_NUMBER": { + "LABEL": "Número de telefone", + "PLACEHOLDER": "Por favor, insira o número de telefone a partir do qual a mensagem será enviada.", + "ERROR": "Por favor, forneça um número de telefone válido que comece com o sinal de '+' e que não contenha quaisquer espaços." + }, + "PHONE_NUMBER_ID": { + "LABEL": "ID do número de telefone", + "PLACEHOLDER": "Por favor, insira o ID do número de telefone obtido do painel do desenvolvedor do Facebook.", + "ERROR": "Por favor, insira um valor válido." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "ID da conta Business", + "PLACEHOLDER": "Por favor, insira o ID da conta Business obtido do painel do desenvolvedor do Facebook.", + "ERROR": "Por favor, insira um valor válido." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook de verificação de token", + "PLACEHOLDER": "Insira um token de verificação que pretende configurar para os webhooks do Facebook.", + "ERROR": "Por favor, insira um valor válido." + }, + "API_KEY": { + "LABEL": "Chave da API", + "SUBTITLE": "Configure a chave API do WhatsApp.", + "PLACEHOLDER": "Chave da API", + "ERROR": "Por favor, insira um valor válido." + }, + "API_CALLBACK": { + "TITLE": "URL de retorno da chamada", + "SUBTITLE": "Deve configurar a URL do webhook e o token de verificação no portal do desenvolvedor do Facebook com os valores apresentados abaixo.", + "WEBHOOK_URL": "URL do webhook", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook de verificação do token" + }, + "SUBMIT_BUTTON": "Criar Canal do WhatsApp", + "EMBEDDED_SIGNUP": { + "TITLE": "Quick setup with Meta", + "DESC": "Use the WhatsApp Embedded Signup flow to quickly connect new numbers. You will be redirected to Meta to log into your WhatsApp Business account. Having admin access will help make the setup smooth and easy.", + "BENEFITS": { + "TITLE": "Benefits of Embedded Signup:", + "EASY_SETUP": "No manual configuration required", + "SECURE_AUTH": "Secure OAuth based authentication", + "AUTO_CONFIG": "Automatic webhook and phone number configuration" + }, + "LEARN_MORE": { + "TEXT": "To learn more about integrated signup, pricing, and limitations, visit {link}.", + "LINK_TEXT": "this link" + }, + "SUBMIT_BUTTON": "Connect with WhatsApp Business", + "AUTH_PROCESSING": "Authenticating with Meta", + "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", + "PROCESSING": "Setting up your WhatsApp Business Account", + "LOADING_SDK": "Loading Facebook SDK...", + "CANCELLED": "WhatsApp Signup was cancelled", + "SUCCESS_TITLE": "WhatsApp Business Account Connected!", + "WAITING_FOR_AUTH": "Waiting for authentication...", + "INVALID_BUSINESS_DATA": "Invalid business data received from Facebook. Please try again.", + "SIGNUP_ERROR": "Signup error occurred", + "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", + "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", + "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", + "MANUAL_LINK_TEXT": "manual setup flow" + }, + "API": { + "ERROR_MESSAGE": "Não foi possível gravar o canal do WhatsApp" + } + }, + "VOICE": { + "TITLE": "Canal de Voz", + "DESC": "Integre o Twilio e comece a oferecer suporte aos seus clientes via chamadas telefónicas.", + "PHONE_NUMBER": { + "LABEL": "Número de telefone", + "PLACEHOLDER": "Escreva o seu número de telefone (por exemplo, +1234567890)", + "ERROR": "Por favor, forneça um número de telefone válido no formato +E.164 (por exemplo, +1234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "SID da conta", + "PLACEHOLDER": "Insira o SID da sua Conta Twilio", + "REQUIRED": "O SID da conta é obrigatório" + }, + "AUTH_TOKEN": { + "LABEL": "Token de autenticação", + "PLACEHOLDER": "Escreva o seu Token de Autenticação Twilio", + "REQUIRED": "O Token de Autenticação é obrigatório" + }, + "API_KEY_SID": { + "LABEL": "Chave da API SID", + "PLACEHOLDER": "Insira a chave SID da API Twilio", + "REQUIRED": "A chave SID da API é obrigatória" + }, + "API_KEY_SECRET": { + "LABEL": "Chave secreta da API", + "PLACEHOLDER": "Insira a chave secreta da API Twilio", + "REQUIRED": "A chave secreta da API é obrigatória" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "Twilio Voice URL", + "TWILIO_VOICE_URL_SUBTITLE": "Configure this URL as the Voice URL on your Twilio phone number and TwiML App.", + "TWILIO_STATUS_URL_TITLE": "Twilio Status Callback URL", + "TWILIO_STATUS_URL_SUBTITLE": "Configure this URL as the Status Callback URL on your Twilio phone number." + }, + "SUBMIT_BUTTON": "Criar canal de Voz", + "API": { + "ERROR_MESSAGE": "Não foi possível criar o canal de voz" + } + }, + "API_CHANNEL": { + "TITLE": "Canal da API", + "DESC": "Integrar com o canal API para dar apoio aos seus clientes.", + "CHANNEL_NAME": { + "LABEL": "Nome do canal", + "PLACEHOLDER": "Por favor, insira um nome para o canal", + "ERROR": "Este campo é obrigatório" + }, + "WEBHOOK_URL": { + "LABEL": "URL do Webhook", + "SUBTITLE": "Configurar o URL onde pretende receber mensagens de retorno.", + "PLACEHOLDER": "URL do webhook" + }, + "SUBMIT_BUTTON": "Criar canal API", + "API": { + "ERROR_MESSAGE": "Não foi possível guardar o canal API" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "Canal de e-mail", + "DESC": "Integre a sua caixa de entrada de e-mail.", + "CHANNEL_NAME": { + "LABEL": "Nome do canal", + "PLACEHOLDER": "Por favor, insira um nome para o canal", + "ERROR": "Este campo é obrigatório" + }, + "EMAIL": { + "LABEL": "E-mail", + "SUBTITLE": "E-mail para o qual os seus clientes enviam os tickets de suporte", + "PLACEHOLDER": "E-mail" + }, + "SUBMIT_BUTTON": "Criar canal de e-mail", + "API": { + "ERROR_MESSAGE": "Não foi possível guardar o canal de e-mail" + }, + "FINISH_MESSAGE": "Comece a encaminhar as suas mensagens de e-mail para o seguinte endereço.", + "FINISH_MESSAGE_NO_FORWARDING": "Your email inbox has been created successfully! You need to configure SMTP and IMAP credentials to send and receive emails. Without these settings, no emails will be processed.", + "FORWARDING_ADDRESS_LABEL": "Forward emails to this address:", + "CONFIGURE_SMTP_IMAP_LINK": "Clique aqui", + "CONFIGURE_SMTP_IMAP_TEXT": " to configure IMAP and SMTP settings" + }, + "LINE_CHANNEL": { + "TITLE": "Canal LINE", + "DESC": "Integre com o canal LINE e comece a apoiar os seus clientes.", + "CHANNEL_NAME": { + "LABEL": "Nome do canal", + "PLACEHOLDER": "Por favor, insira um nome para o canal", + "ERROR": "Este campo é obrigatório" + }, + "LINE_CHANNEL_ID": { + "LABEL": "ID do canal LINE", + "PLACEHOLDER": "ID do canal LINE" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "Secret do canal LINE", + "PLACEHOLDER": "Secret do canal LINE" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "Token do canal LINE", + "PLACEHOLDER": "Token do canal LINE" + }, + "SUBMIT_BUTTON": "Criar canal LINE", + "API": { + "ERROR_MESSAGE": "Não foi possível guardar o canal LINE" + }, + "API_CALLBACK": { + "TITLE": "URL de retorno da chamada", + "SUBTITLE": "Tem que configurar o URL do webhook na aplicação LINE com o URL mencionado aqui." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Canal Telegram", + "DESC": "Integre com o canal Telegram e comece a apoiar os seus clientes.", + "BOT_TOKEN": { + "LABEL": "Token do bot", + "SUBTITLE": "Configure o token do bot que obteve do Telegram BotFather.", + "PLACEHOLDER": "Token do bot" + }, + "SUBMIT_BUTTON": "Criar canal Telegram", + "API": { + "ERROR_MESSAGE": "Não foi possível guardar o canal Telegram" + } + }, + "AUTH": { + "TITLE": "Escolher um canal", + "DESC": "O Chatwoot suporta widgets de live-chat, Facebook Messenger, perfis do Twitter, WhatsApp, E-mails, etc., como canais. Se pretende criar um canal personalizado, pode fazê-lo usando o canal API. Para começar, escolha um dos canais abaixo.", + "TITLE_NEXT": "Complete the setup", + "TITLE_FINISH": "Pronto!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Website", + "DESCRIPTION": "Create a live-chat widget" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Connect your Facebook page" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Support your customers on WhatsApp" + }, + "EMAIL": { + "TITLE": "E-mail", + "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrate SMS channel with Twilio or bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Make a custom channel using our API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure Telegram channel using Bot token" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integrate your Line channel" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Connect your instagram account" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Connect your TikTok account" + }, + "VOICE": { + "TITLE": "Voz", + "DESCRIPTION": "Integrate with Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Agentes", + "DESC": "Aqui você pode adicionar agentes para gerenciar a sua caixa de entrada recém-criada. Apenas esses agentes selecionados terão acesso à sua caixa de entrada. Agentes que não fazem parte desta caixa de entrada não serão capazes de ver ou responder a mensagens nesta caixa de entrada quando eles acessarem.Webhooks
Webhooks são chamadas HTTP que podem ser definidas para cada conta. São acionados por eventos como a criação de mensagens no Chatwoot. Pode criar mais de um webhook para esta conta.
Para criar um webhook, clique no botão Adicionar novo webhook. Também pode remover qualquer webhook existente, clicando no botão 'Excluir'.
Apps de dashboard
Apps de dashboard permitem que as organizações incorporem uma aplicação dentro do dashboard do Chatwoot para fornecer o contexto aos agentes de suporte ao cliente. Este recurso permite-lhe criar uma aplicação independente e incorporá-la dentro do dashboard para fornecer informações de utilizador, os seus pedidos ou o seu histórico de pagamentos.
Quando a sua aplicação é incorporada usando o dashboard do Chatwoot, a sua aplicação irá obter o contexto da conversa e do contato como um evento de janela. Implemente um listener para o evento de mensagem na sua página para receber o contexto.
Para adicionar uma nova app ao dashboard, clique no botão 'Adicionar nova app ao dashboard'.
", + "DESCRIPTION": "Apps de dashboard permitem que as organizações incorporem um aplicação dentro do dashboard do Chatwoot para fornecer o contexto aos agentes de suporte ao cliente. Este recurso permite-lhe criar uma aplicação independente e incorporá-la dentro do dashboard para fornecer informações de utilizador, os seus pedidos ou o seu histórico de pagamentos.", + "LEARN_MORE": "Saber mais sobre apps de dashboard", + "LIST": { + "404": "Não há apps de dashboard configuradas nesta conta.", + "LOADING": "A obter apps de dashboard...", + "TABLE_HEADER": { + "NAME": "Nome:", + "ENDPOINT": "Endpoint" + }, + "EDIT_TOOLTIP": "Editar app", + "DELETE_TOOLTIP": "Apagar app" + }, + "FORM": { + "TITLE_LABEL": "Nome", + "TITLE_PLACEHOLDER": "Digite um nome para a sua app de dashboard", + "TITLE_ERROR": "É necessário um nome para a app de dashboard", + "URL_LABEL": "Endpoint", + "URL_PLACEHOLDER": "Insira o URL do endpoint ao qual a sua app está agregada", + "URL_ERROR": "É necessário um URL válido" + }, + "CREATE": { + "HEADER": "Adicionar nova app de dashboard", + "FORM_SUBMIT": "Submeter", + "FORM_CANCEL": "Cancelar", + "API_SUCCESS": "App de dashboard configurada com sucesso", + "API_ERROR": "Não foi possível criar a app. Por favor, tente novamente mais tarde" + }, + "UPDATE": { + "HEADER": "Editar app de dashboard", + "FORM_SUBMIT": "Atualizar", + "FORM_CANCEL": "Cancelar", + "API_SUCCESS": "App de dashboard atualizada com sucesso", + "API_ERROR": "Não foi possível atualizar as configurações da app. Por favor, tente novamente mais tarde" + }, + "DELETE": { + "CONFIRM_YES": "Sim, excluir", + "CONFIRM_NO": "Não, manter", + "TITLE": "Confirmar exclusão", + "MESSAGE": "Tem a certeza que pretende excluir a app - {appName}?", + "API_SUCCESS": "App de dashboard excluída com sucesso", + "API_ERROR": "Não foi possível excluir a app. Por favor, tente novamente mais tarde" + } + }, + "LINEAR": { + "ADD_OR_LINK_BUTTON": "Criar/Vincular problema linear", + "LOADING": "A procurar problemas lineares...", + "LOADING_ERROR": "Houve um erro ao procurar problemas lineares, por favor, tente novamente", + "CREATE": "Criar", + "LINK": { + "SEARCH": "Pesquisar problemas", + "SELECT": "Selecionar problema", + "TITLE": "Endereço", + "EMPTY_LIST": "Nenhum problema linear encontrado", + "LOADING": "A carregar", + "ERROR": "Houve um erro ao procurar problemas lineares, por favor, tente novamente", + "LINK_SUCCESS": "Problema vinculado com sucesso", + "LINK_ERROR": "Houve um erro ao vincular o problema, por favor, tente novamente", + "LINK_TITLE": "Conversation (#{conversationId}) with {name}" + }, + "ADD_OR_LINK": { + "TITLE": "Criar/Vincular problema linear", + "DESCRIPTION": "Crie problemas lineares das conversas, ou vincule os existentes para um rastreamento sem interrupções.", + "FORM": { + "TITLE": { + "LABEL": "Título", + "PLACEHOLDER": "Inserir título", + "REQUIRED_ERROR": "Título obrigatório" + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "Inserir descrição" + }, + "TEAM": { + "LABEL": "Equipa", + "PLACEHOLDER": "Selecionar equipa", + "SEARCH": "Procurar equipa", + "REQUIRED_ERROR": "Equipa obrigatória" + }, + "ASSIGNEE": { + "LABEL": "Atribuído", + "PLACEHOLDER": "Selecionar responsável", + "SEARCH": "Procurar responsável" + }, + "PRIORITY": { + "LABEL": "Prioridade", + "PLACEHOLDER": "Selecionar prioridade", + "SEARCH": "Procurar prioridade" + }, + "LABEL": { + "LABEL": "Etiqueta", + "PLACEHOLDER": "Selecionar etiqueta", + "SEARCH": "Procurar etiqueta" + }, + "STATUS": { + "LABEL": "Estado", + "PLACEHOLDER": "Selecionar estado", + "SEARCH": "Procurar estado" + }, + "PROJECT": { + "LABEL": "Projeto", + "PLACEHOLDER": "Selecionar projeto", + "SEARCH": "Procurar projeto" + } + }, + "CREATE": "Criar", + "CANCEL": "Cancelar", + "CREATE_SUCCESS": "Problema criado com sucesso", + "CREATE_ERROR": "Houve um erro ao criar o problema, por favor, tente novamente", + "LOADING_TEAM_ERROR": "Houve um erro ao obter as equipas, por favor, tente novamente", + "LOADING_TEAM_ENTITIES_ERROR": "Houve um erro ao obter as entidades das equipas, por favor, tente novamente" + }, + "ISSUE": { + "STATUS": "Estado", + "PRIORITY": "Prioridade", + "ASSIGNEE": "Atribuído", + "LABELS": "Etiquetas", + "CREATED_AT": "Created at {createdAt}" + }, + "UNLINK": { + "TITLE": "Desvincular", + "SUCCESS": "Problema desvinculado com sucesso", + "ERROR": "Houve um erro ao desvincular o problema, por favor, tente novamente" + }, + "NO_LINKED_ISSUES": "Sem casos associados", + "DELETE": { + "TITLE": "Are you sure you want to delete the integration?", + "MESSAGE": "Are you sure you want to delete the integration?", + "CONFIRM": "Sim, excluir", + "CANCEL": "Cancelar" + }, + "CTA": { + "TITLE": "Ligar ao Linear", + "AGENT_DESCRIPTION": "O espaço de trabalho linear não está ligado. Solicite ao administrador que ligue um espaço de trabalho para usar esta integração.", + "DESCRIPTION": "O workspace Linear não está ligado. Clique no botão abaixo para ligar o seu workspace para utilizar esta integração.", + "BUTTON_TEXT": "Ligar workspace Linear" + } + }, + "NOTION": { + "DELETE": { + "TITLE": "Tem a certeza que pretende apagar a integração Notion?", + "MESSAGE": "Apagar esta integração removerá o acesso ao seu workspace Notion e encerrará todas as funcionalidades relacionadas.", + "CONFIRM": "Sim, excluir", + "CANCEL": "Cancelar" + } + } + }, + "CAPTAIN": { + "NAME": "Captain", + "HEADER_KNOW_MORE": "Know more", + "ASSISTANT_SWITCHER": { + "ASSISTANTS": "Assistants", + "SWITCH_ASSISTANT": "Switch between assistants", + "NEW_ASSISTANT": "Create Assistant", + "EMPTY_LIST": "No assistants found, please create one to get started" + }, + "COPILOT": { + "TITLE": "Copilot", + "TRY_THESE_PROMPTS": "Try these prompts", + "PANEL_TITLE": "Comece com o Copilot", + "KICK_OFF_MESSAGE": "Precisa de um resumo rápido, quer consultar conversas anteriores ou redigir uma resposta melhor? O Copilot está aqui para acelerar o processo.", + "SEND_MESSAGE": "Enviar mensagem...", + "EMPTY_MESSAGE": "Ocorreu um erro ao gerar a resposta. Por favor, tente novamente.", + "LOADER": "Captain is thinking", + "YOU": "Você", + "USE": "Use this", + "RESET": "Reset", + "SHOW_STEPS": "Mostrar passos", + "SELECT_ASSISTANT": "Select Assistant", + "PROMPTS": { + "SUMMARIZE": { + "LABEL": "Resumir esta conversa", + "CONTENT": "Resuma os pontos-chave discutidos entre o cliente e o agente de suporte, incluindo as preocupações do cliente, as questões e as soluções ou respostas dadas pelo agente de suporte" + }, + "SUGGEST": { + "LABEL": "Sugerir uma resposta", + "CONTENT": "Analise a questão do cliente e redija uma resposta que aborde eficazmente as suas preocupações ou perguntas. Certifique-se de que a resposta é clara, concisa e fornece informações úteis." + }, + "RATE": { + "LABEL": "Avalie esta conversa", + "CONTENT": "Reveja a conversa para ver o quanto foram satisfeitas as necessidades do cliente. Compartilhe uma classificação até 5 com base no tom, clareza e eficácia." + }, + "HIGH_PRIORITY": { + "LABEL": "Conversas de alta prioridade", + "CONTENT": "Dê-me um resumo de todas as conversas abertas de alta prioridade. Inclua o ID da conversa, nome do cliente (se disponível), conteúdo da última mensagem e agente atribuído. Agrupe por estado, se relevante." + }, + "LIST_CONTACTS": { + "LABEL": "Listar contactos", + "CONTENT": "Mostre-me a lista dos 10 principais contactos. Inclua nome, email ou número de telefone (se disponível), última vez visto, etiquetas (se houver)." + } + } + }, + "PLAYGROUND": { + "USER": "Você", + "ASSISTANT": "Assistant", + "MESSAGE_PLACEHOLDER": "Escreva a sua mensagem...", + "HEADER": "Playground", + "DESCRIPTION": "Use este playground para enviar mensagens para o seu assistente e verificar se ele responde com precisão, rápido e no tom esperado.", + "CREDIT_NOTE": "As mensagens aqui enviadas vão contar para os créditos do seu Captain." + }, + "PAYWALL": { + "TITLE": "Upgrade to use Captain AI", + "AVAILABLE_ON": "Captain is not available on the free plan.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "UPGRADE_NOW": "Fazer upgrade agora", + "CANCEL_ANYTIME": "Pode alterar ou cancelar o plano a qualquer momento" + }, + "ENTERPRISE_PAYWALL": { + "UPGRADE_PROMPT": "Upgrade your plan to get access to our assistants, copilot and more.", + "ASK_ADMIN": "Por favor, entre em contato com o administrador para atualização." + }, + "BANNER": { + "RESPONSES": "You've used over 80% of your response limit. To continue using Captain AI, please upgrade.", + "DOCUMENTS": "Document limit reached. Upgrade to continue using Captain AI." + }, + "FORM": { + "CANCEL": "Cancelar", + "CREATE": "Criar", + "EDIT": "Atualização" + }, + "ASSISTANTS": { + "HEADER": "Assistants", + "NO_ASSISTANTS_AVAILABLE": "Não há agentes disponíveis na sua conta.", + "ADD_NEW": "Create a new assistant", + "DELETE": { + "TITLE": "Are you sure to delete the assistant?", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "CONFIRM": "Sim, excluir", + "SUCCESS_MESSAGE": "The assistant has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the assistant, please try again." + }, + "FORM_DESCRIPTION": "Fill out the details below to name your assistant, describe its purpose, and specify the product it will support.", + "CREATE": { + "TITLE": "Create an assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully created", + "ERROR_MESSAGE": "There was an error creating the assistant, please try again." + }, + "FORM": { + "UPDATE": "Atualização", + "SECTIONS": { + "BASIC_INFO": "Informação básica", + "SYSTEM_MESSAGES": "Mensagens do Sistema", + "INSTRUCTIONS": "Instruções", + "FEATURES": "Características", + "TOOLS": "Ferramentas " + }, + "NAME": { + "LABEL": "Nome:", + "PLACEHOLDER": "Escreva o nome do assistente", + "ERROR": "O nome é obrigatório" + }, + "TEMPERATURE": { + "LABEL": "Temperatura da Resposta", + "DESCRIPTION": "Ajuste o quão criativo ou restritivo as respostas do assistente devem ser. Valores mais baixos produzem respostas mais focadas e deterministas, enquanto valores mais altos permitem resultados mais criativos e variados." + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "Escreva a descrição do assistente", + "ERROR": "A descrição é obrigatória" + }, + "PRODUCT_NAME": { + "LABEL": "Product Name", + "PLACEHOLDER": "Escreva o nome do produto", + "ERROR": "O nome do produto é obrigatório" + }, + "WELCOME_MESSAGE": { + "LABEL": "Mensagem de Boas-vindas", + "PLACEHOLDER": "Escreva a mensagem de boas-vindas" + }, + "HANDOFF_MESSAGE": { + "LABEL": "Mensagem de despedida", + "PLACEHOLDER": "Escreva a mensagem de despedida" + }, + "RESOLUTION_MESSAGE": { + "LABEL": "Mensagem de resolução", + "PLACEHOLDER": "Escreva a mensagem de resolução" + }, + "INSTRUCTIONS": { + "LABEL": "Instruções", + "PLACEHOLDER": "Escreva as instruções para o assistente" + }, + "FEATURES": { + "TITLE": "Características", + "ALLOW_CONVERSATION_FAQS": "Generate FAQs from resolved conversations", + "ALLOW_MEMORIES": "Capture key details as memories from customer interactions.", + "ALLOW_CITATIONS": "Include source citations in responses" + } + }, + "EDIT": { + "TITLE": "Update the assistant", + "SUCCESS_MESSAGE": "The assistant has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the assistant, please try again.", + "NOT_FOUND": "Não foi possível encontrar o assistente. Por favor, tente novamente." + }, + "SETTINGS": { + "HEADER": "Configurações", + "BASIC_SETTINGS": { + "TITLE": "Basic settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "SYSTEM_SETTINGS": { + "TITLE": "System settings", + "DESCRIPTION": "Customize what the assistant says when ending a conversation or transferring to a human." + }, + "CONTROL_ITEMS": { + "TITLE": "The Fun Stuff", + "DESCRIPTION": "Add more control to the assistant. (a bit more visual like a story : Query guardrail → scenarios → output) Nudges user to actually utilise these.", + "OPTIONS": { + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic." + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?" + } + } + }, + "DELETE": { + "TITLE": "Delete Assistant", + "DESCRIPTION": "This action is permanent. Deleting this assistant will remove it from all connected inboxes and permanently erase all generated knowledge.", + "BUTTON_TEXT": "Delete {assistantName}" + } + }, + "OPTIONS": { + "EDIT_ASSISTANT": "Edit Assistant", + "DELETE_ASSISTANT": "Delete Assistant", + "VIEW_CONNECTED_INBOXES": "View connected inboxes" + }, + "EMPTY_STATE": { + "TITLE": "No assistants available", + "SUBTITLE": "Create an assistant to provide quick and accurate responses to your users. It can learn from your help articles and past conversations.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Assistant", + "NOTE": "Captain Assistant engages directly with customers, learns from your help docs and past conversations, and delivers instant, accurate responses. It handles the initial queries, providing quick resolutions before transferring to an agent when needed." + } + }, + "GUARDRAILS": { + "TITLE": "Guardrails", + "DESCRIPTION": "Keeps things on track—only the kinds of questions you want your assistant to answer, nothing off-limits or off-topic.", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Selecionar todas ({count})", + "UNSELECT_ALL": "Desmarcar todas ({count})", + "BULK_DELETE_BUTTON": "Excluir" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example guardrails", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another guardrail..." + }, + "NEW": { + "TITLE": "Add a guardrail", + "CREATE": "Criar", + "CANCEL": "Cancelar", + "PLACEHOLDER": "Type in another guardrail...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No guardrails found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No guardrails found for this search.", + "API": { + "ADD": { + "SUCCESS": "Guardrails added successfully", + "ERROR": "There was an error adding guardrails, please try again." + }, + "UPDATE": { + "SUCCESS": "Guardrails updated successfully", + "ERROR": "There was an error updating guardrails, please try again." + }, + "DELETE": { + "SUCCESS": "Guardrails deleted successfully", + "ERROR": "There was an error deleting guardrails, please try again." + } + } + }, + "RESPONSE_GUIDELINES": { + "TITLE": "Response Guidelines", + "DESCRIPTION": "The vibe and structure of your assistant’s replies—clear and friendly? Short and snappy? Detailed and formal?", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Selecionar todas ({count})", + "UNSELECT_ALL": "Desmarcar todas ({count})", + "BULK_DELETE_BUTTON": "Excluir" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example response guidelines", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "SAVE": "Add and save (↵)", + "PLACEHOLDER": "Type in another response guideline..." + }, + "NEW": { + "TITLE": "Add a response guideline", + "CREATE": "Criar", + "CANCEL": "Cancelar", + "PLACEHOLDER": "Type in another response guideline...", + "TEST_ALL": "Test all" + } + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No response guidelines found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No response guidelines found for this search.", + "API": { + "ADD": { + "SUCCESS": "Response Guidelines added successfully", + "ERROR": "There was an error adding response guidelines, please try again." + }, + "UPDATE": { + "SUCCESS": "Response Guidelines updated successfully", + "ERROR": "There was an error updating response guidelines, please try again." + }, + "DELETE": { + "SUCCESS": "Response Guidelines deleted successfully", + "ERROR": "There was an error deleting response guidelines, please try again." + } + } + }, + "SCENARIOS": { + "TITLE": "Scenarios", + "DESCRIPTION": "Give your assistant some context—like “what to do when a user is stuck,” or “how to act during a refund request.”", + "BULK_ACTION": { + "SELECTED": "{count} item selected | {count} items selected", + "SELECT_ALL": "Selecionar todas ({count})", + "UNSELECT_ALL": "Desmarcar todas ({count})", + "BULK_DELETE_BUTTON": "Excluir" + }, + "ADD": { + "SUGGESTED": { + "TITLE": "Example scenarios", + "ADD": "Add all", + "ADD_SINGLE": "Add this", + "TOOLS_USED": "Tools used :" + }, + "NEW": { + "CREATE": "Add a scenario", + "TITLE": "Create a scenario", + "FORM": { + "TITLE": { + "LABEL": "Título", + "PLACEHOLDER": "Enter a name for the scenario", + "ERROR": "Scenario name is required" + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "Describe how and where this scenario will be used", + "ERROR": "Scenario description is required" + }, + "INSTRUCTION": { + "LABEL": "How to handle", + "PLACEHOLDER": "Describe how and where this scenario will be handled", + "ERROR": "Scenario content is required" + }, + "CREATE": "Criar", + "CANCEL": "Cancelar" + } + } + }, + "UPDATE": { + "CANCEL": "Cancelar", + "UPDATE": "Update changes" + }, + "LIST": { + "SEARCH_PLACEHOLDER": "Search..." + }, + "EMPTY_MESSAGE": "No scenarios found. Create or add examples to begin.", + "SEARCH_EMPTY_MESSAGE": "No scenarios found for this search.", + "API": { + "ADD": { + "SUCCESS": "Scenarios added successfully", + "ERROR": "There was an error adding scenarios, please try again." + }, + "UPDATE": { + "SUCCESS": "Scenarios updated successfully", + "ERROR": "There was an error updating scenarios, please try again." + }, + "DELETE": { + "SUCCESS": "Scenarios deleted successfully", + "ERROR": "There was an error deleting scenarios, please try again." + } + } + } + }, + "DOCUMENTS": { + "HEADER": "Documents", + "ADD_NEW": "Create a new document", + "RELATED_RESPONSES": { + "TITLE": "Related FAQs", + "DESCRIPTION": "These FAQs are generated directly from the document." + }, + "FORM_DESCRIPTION": "Enter the URL of the document to add it as a knowledge source and choose the assistant to associate it with.", + "CREATE": { + "TITLE": "Add a document", + "SUCCESS_MESSAGE": "The document has been successfully created", + "ERROR_MESSAGE": "There was an error creating the document, please try again." + }, + "FORM": { + "TYPE": { + "LABEL": "Document Type", + "URL": "URL", + "PDF": "PDF File" + }, + "URL": { + "LABEL": "URL", + "PLACEHOLDER": "Enter the URL of the document", + "ERROR": "Please provide a valid URL for the document" + }, + "PDF_FILE": { + "LABEL": "PDF File", + "CHOOSE_FILE": "Choose PDF file", + "ERROR": "Please select a PDF file", + "HELP_TEXT": "Maximum file size: 10MB", + "INVALID_TYPE": "Please select a valid PDF file", + "TOO_LARGE": "File size exceeds 10MB limit" + }, + "NAME": { + "LABEL": "Document Name (Optional)", + "PLACEHOLDER": "Enter a name for the document" + } + }, + "DELETE": { + "TITLE": "Are you sure to delete the document?", + "DESCRIPTION": "This action is permanent. Deleting this document will permanently erase all generated knowledge.", + "CONFIRM": "Sim, excluir", + "SUCCESS_MESSAGE": "The document has been successfully deleted", + "ERROR_MESSAGE": "There was an error deleting the document, please try again." + }, + "OPTIONS": { + "VIEW_RELATED_RESPONSES": "View Related Responses", + "DELETE_DOCUMENT": "Delete Document" + }, + "EMPTY_STATE": { + "TITLE": "No documents available", + "SUBTITLE": "Documents are used by your assistant to generate FAQs. You can import documents to provide context for your assistant.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain Document", + "NOTE": "A document in Captain serves as a knowledge resource for the assistant. By connecting your help center or guides, Captain can analyze the content and provide accurate responses for customer inquiries." + } + } + }, + "CUSTOM_TOOLS": { + "HEADER": "Ferramentas", + "ADD_NEW": "Create a new tool", + "EMPTY_STATE": { + "TITLE": "No custom tools available", + "SUBTITLE": "Create custom tools to connect your assistant with external APIs and services, enabling it to fetch data and perform actions on your behalf.", + "FEATURE_SPOTLIGHT": { + "TITLE": "Custom Tools", + "NOTE": "Custom tools allow your assistant to interact with external APIs and services. Create tools to fetch data, perform actions, or integrate with your existing systems to enhance your assistant's capabilities." + } + }, + "FORM_DESCRIPTION": "Configure your custom tool to connect with external APIs", + "OPTIONS": { + "EDIT_TOOL": "Edit tool", + "DELETE_TOOL": "Delete tool" + }, + "CREATE": { + "TITLE": "Create Custom Tool", + "SUCCESS_MESSAGE": "Custom tool created successfully", + "ERROR_MESSAGE": "Failed to create custom tool" + }, + "EDIT": { + "TITLE": "Edit Custom Tool", + "SUCCESS_MESSAGE": "Custom tool updated successfully", + "ERROR_MESSAGE": "Failed to update custom tool" + }, + "DELETE": { + "TITLE": "Delete Custom Tool", + "DESCRIPTION": "Are you sure you want to delete this custom tool? This action cannot be undone.", + "CONFIRM": "Sim, excluir", + "SUCCESS_MESSAGE": "Custom tool deleted successfully", + "ERROR_MESSAGE": "Failed to delete custom tool" + }, + "FORM": { + "TITLE": { + "LABEL": "Tool Name", + "PLACEHOLDER": "Order Lookup", + "ERROR": "Tool name is required" + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "Looks up order details by order ID" + }, + "HTTP_METHOD": { + "LABEL": "Method" + }, + "ENDPOINT_URL": { + "LABEL": "Endpoint URL", + "PLACEHOLDER": "https://api.example.com/orders/{'{{'} order_id {'}}'}", + "ERROR": "Valid URL is required" + }, + "AUTH_TYPE": { + "LABEL": "Authentication Type" + }, + "AUTH_TYPES": { + "NONE": "Nenhuma", + "BEARER": "Bearer Token", + "BASIC": "Basic Auth", + "API_KEY": "Chave da API" + }, + "AUTH_CONFIG": { + "BEARER_TOKEN": "Bearer Token", + "BEARER_TOKEN_PLACEHOLDER": "Enter your bearer token", + "USERNAME": "Username", + "USERNAME_PLACEHOLDER": "Enter username", + "PASSWORD": "Palavra-passe", + "PASSWORD_PLACEHOLDER": "Enter password", + "API_KEY": "Header Name", + "API_KEY_PLACEHOLDER": "X-API-Key", + "API_VALUE": "Header Value", + "API_VALUE_PLACEHOLDER": "Enter API key value" + }, + "PARAMETERS": { + "LABEL": "Parameters", + "HELP_TEXT": "Define the parameters that will be extracted from user queries" + }, + "ADD_PARAMETER": "Add Parameter", + "PARAM_NAME": { + "PLACEHOLDER": "Parameter name (e.g., order_id)" + }, + "PARAM_TYPE": { + "PLACEHOLDER": "Tipo" + }, + "PARAM_TYPES": { + "STRING": "String", + "NUMBER": "Número", + "BOOLEAN": "Boolean", + "ARRAY": "Array", + "OBJECT": "Object" + }, + "PARAM_DESCRIPTION": { + "PLACEHOLDER": "Description of the parameter" + }, + "PARAM_REQUIRED": { + "LABEL": "Obrigatório" + }, + "REQUEST_TEMPLATE": { + "LABEL": "Request Body Template (Optional)", + "PLACEHOLDER": "{'{'}\n \"order_id\": \"{'{{'} order_id {'}}'}\"\n{'}'}" + }, + "RESPONSE_TEMPLATE": { + "LABEL": "Response Template (Optional)", + "PLACEHOLDER": "Order {'{{'} order_id {'}}'} status: {'{{'} status {'}}'}" + }, + "ERRORS": { + "PARAM_NAME_REQUIRED": "Parameter name is required" + } + } + }, + "RESPONSES": { + "HEADER": "FAQs", + "PENDING_FAQS": "Pending FAQs", + "ADD_NEW": "Create new FAQ", + "DOCUMENTABLE": { + "CONVERSATION": "Conversation #{id}" + }, + "SELECTED": "{count} selected", + "SELECT_ALL": "Selecionar todas ({count})", + "UNSELECT_ALL": "Desmarcar todas ({count})", + "SEARCH_PLACEHOLDER": "Search FAQs...", + "BULK_APPROVE_BUTTON": "Approve", + "BULK_DELETE_BUTTON": "Excluir", + "BULK_APPROVE": { + "SUCCESS_MESSAGE": "FAQs approved successfully", + "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + }, + "BULK_DELETE": { + "TITLE": "Delete FAQs?", + "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", + "CONFIRM": "Yes, delete all", + "SUCCESS_MESSAGE": "FAQs deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + }, + "DELETE": { + "TITLE": "Are you sure to delete the FAQ?", + "DESCRIPTION": "", + "CONFIRM": "Sim, excluir", + "SUCCESS_MESSAGE": "FAQ deleted successfully", + "ERROR_MESSAGE": "There was an error deleting the FAQ, please try again." + }, + "FILTER": { + "ASSISTANT": "Assistant: {selected}", + "STATUS": "Status: {selected}", + "ALL_ASSISTANTS": "Todas" + }, + "STATUS": { + "TITLE": "Situação", + "PENDING": "Pendente", + "APPROVED": "Approved", + "ALL": "Todas" + }, + "PENDING_BANNER": { + "TITLE": "Captain has found some FAQs your customers were looking for.", + "ACTION": "Click here to review" + }, + "FORM_DESCRIPTION": "Add a question and its corresponding answer to the knowledge base and select the assistant it should be associated with.", + "CREATE": { + "TITLE": "Add an FAQ", + "SUCCESS_MESSAGE": "The response has been added successfully.", + "ERROR_MESSAGE": "An error occurred while adding the response. Please try again." + }, + "FORM": { + "QUESTION": { + "LABEL": "Question", + "PLACEHOLDER": "Enter the question here", + "ERROR": "Please provide a valid question." + }, + "ANSWER": { + "LABEL": "Answer", + "PLACEHOLDER": "Enter the answer here", + "ERROR": "Please provide a valid answer." + } + }, + "EDIT": { + "TITLE": "Update the FAQ", + "SUCCESS_MESSAGE": "The FAQ has been successfully updated", + "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", + "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + }, + "OPTIONS": { + "APPROVE": "Approve", + "EDIT_RESPONSE": "Editar", + "DELETE_RESPONSE": "Excluir" + }, + "EMPTY_STATE": { + "TITLE": "No FAQs Found", + "NO_PENDING_TITLE": "There are no more pending FAQs to review", + "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually.", + "CLEAR_SEARCH": "Clear active filters", + "FEATURE_SPOTLIGHT": { + "TITLE": "Captain FAQ", + "NOTE": "Captain FAQs detects common customer questions—whether missing from your knowledge base or frequently asked—and generates relevant FAQs to improve support. You can review each suggestion and decide whether to approve or reject it." + } + } + }, + "INBOXES": { + "HEADER": "Connected Inboxes", + "ADD_NEW": "Connect a new inbox", + "OPTIONS": { + "DISCONNECT": "Desconectar" + }, + "DELETE": { + "TITLE": "Are you sure to disconnect the inbox?", + "DESCRIPTION": "", + "CONFIRM": "Sim, excluir", + "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", + "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + }, + "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "CREATE": { + "TITLE": "Connect an Inbox", + "SUCCESS_MESSAGE": "The inbox was successfully connected.", + "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + }, + "FORM": { + "INBOX": { + "LABEL": "Caixa de entrada", + "PLACEHOLDER": "Choose the inbox to deploy the assistant.", + "ERROR": "An inbox selection is required." + } + }, + "EMPTY_STATE": { + "TITLE": "No Connected Inboxes", + "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/pt/labelsMgmt.json new file mode 100644 index 0000000..3a7df36 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/labelsMgmt.json @@ -0,0 +1,85 @@ +{ + "LABEL_MGMT": { + "HEADER": "Etiquetas", + "HEADER_BTN_TXT": "Adicionar etiqueta", + "LOADING": "A procurar etiquetas", + "DESCRIPTION": "As etiquetas ajudam-no a categorizar e priorizar conversas e leads. Pode atribuir uma etiqueta a uma conversa ou entrar em contacto usando o painel lateral.", + "LEARN_MORE": "Saber mais sobre etiquetas", + "SEARCH_404": "Não existem itens correspondentes à sua pesquisa", + "LIST": { + "404": "Não há etiquetas disponíveis nesta conta.", + "TITLE": "Gerir etiquetas", + "DESC": "As etiquetas permitem agrupar conversas.", + "TABLE_HEADER": { + "NAME": "Nome:", + "DESCRIPTION": "Descrição", + "COLOR": "Cor" + } + }, + "FORM": { + "NAME": { + "LABEL": "Nome da etiqueta", + "PLACEHOLDER": "Nome da etiqueta", + "REQUIRED_ERROR": "Nome da etiqueta obrigatório", + "MINIMUM_LENGTH_ERROR": "A etiqueta deve ter, no mínimo, 2 caracteres", + "VALID_ERROR": "Apenas são permitidas letras, números, hífen e underscores" + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "Descrição da etiqueta" + }, + "COLOR": { + "LABEL": "Cor" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Mostrar etiqueta na barra lateral" + }, + "EDIT": "Editar", + "CREATE": "Criar", + "DELETE": "Excluir", + "CANCEL": "Cancelar" + }, + "SUGGESTIONS": { + "TOOLTIP": { + "SINGLE_SUGGESTION": "Adicionar etiqueta à conversa", + "MULTIPLE_SUGGESTION": "Selecionar esta etiqueta", + "DESELECT": "Desmarcar etiqueta", + "DISMISS": "Descartar sugestão" + }, + "POWERED_BY": "Chatwoot IA", + "DISMISS": "Descartar", + "ADD_SELECTED_LABELS": "Adicionar etiquetas selecionadas", + "ADD_SELECTED_LABEL": "Adicionar etiqueta selecionada", + "ADD_ALL_LABELS": "Adicionar todas as etiquetas", + "SUGGESTED_LABELS": "Etiquetas sugeridas" + }, + "ADD": { + "TITLE": "Adicionar etiqueta", + "DESC": "As etiquetas permitem agrupar conversas.", + "API": { + "SUCCESS_MESSAGE": "Etiqueta adicionada com sucesso", + "ERROR_MESSAGE": "Ocorreu um erro, por favor, tente novamente" + } + }, + "EDIT": { + "TITLE": "Editar etiqueta", + "API": { + "SUCCESS_MESSAGE": "Etiqueta atualizada com sucesso", + "ERROR_MESSAGE": "Ocorreu um erro, por favor, tente novamente" + } + }, + "DELETE": { + "BUTTON_TEXT": "Excluir", + "API": { + "SUCCESS_MESSAGE": "Etiqueta excluída com sucesso", + "ERROR_MESSAGE": "Ocorreu um erro, por favor, tente novamente" + }, + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Tem a certeza que pretende excluir ", + "YES": "Sim, excluir ", + "NO": "Não, manter " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/login.json b/app/javascript/dashboard/i18n/locale/pt/login.json new file mode 100644 index 0000000..4149ff5 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/login.json @@ -0,0 +1,41 @@ +{ + "LOGIN": { + "TITLE": "Entrar no Chatwoot", + "EMAIL": { + "LABEL": "E-mail", + "PLACEHOLDER": "Empresa{'@'}suaempresa.com.br", + "ERROR": "Por favor, insira um endereço de e-mail válido" + }, + "PASSWORD": { + "LABEL": "Palavra-passe", + "PLACEHOLDER": "Palavra-passe" + }, + "API": { + "SUCCESS_MESSAGE": "Login bem-sucedido", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot. Por favor, tente novamente.", + "UNAUTH": "E-mail ou palavra-passe incorretos. Por favor, tente novamente." + }, + "OAUTH": { + "GOOGLE_LOGIN": "Iniciar sessão com o Google", + "BUSINESS_ACCOUNTS_ONLY": "Por favor, use o endereço de e-mail da empresa para iniciar sessão", + "NO_ACCOUNT_FOUND": "Não conseguimos encontrar uma conta com o seu endereço de e-mail." + }, + "FORGOT_PASSWORD": "Esqueceu-se da sua palavra-passe?", + "CREATE_NEW_ACCOUNT": "Criar nova conta", + "SUBMIT": "Iniciar sessão", + "SAML": { + "LABEL": "Login via SSO", + "TITLE": "Initiate Single Sign-on (SSO)", + "SUBTITLE": "Enter your work email to access your organization", + "BACK_TO_LOGIN": "Login via Password", + "WORK_EMAIL": { + "LABEL": "Work Email", + "PLACEHOLDER": "Enter your work email" + }, + "SUBMIT": "Continue with SSO", + "API": { + "ERROR_MESSAGE": "SSO authentication failed. Please check your credentials and try again." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/macros.json b/app/javascript/dashboard/i18n/locale/pt/macros.json new file mode 100644 index 0000000..95c132f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/macros.json @@ -0,0 +1,111 @@ +{ + "MACROS": { + "HEADER": "Macros", + "DESCRIPTION": "Uma macro é um conjunto de ações guardadas que ajudam os agentes de apoio ao cliente a completarem tarefas facilmente. Os agentes podem definir um conjunto de ações, como adicionar uma etiqueta a uma conversa, enviar uma transcrição de e-mail, atualizar um atributo personalizado, etc., e, posteriormente, executarem essas ações com um único clique.", + "LEARN_MORE": "Saber mais sobre macros", + "HEADER_BTN_TXT": "Adicionar nova macro", + "HEADER_BTN_TXT_SAVE": "Guardar macro", + "LOADING": "A procurar macros", + "ERROR": "Ocorreu um erro! Por favor, tente novamente", + "ORDER_INFO": "As macros serão executadas pela ordem em que adicionar as suas ações. Pode reorganizá-las arrastando-as pelo identificador ao lado de cada nó.", + "ADD": { + "FORM": { + "NAME": { + "LABEL": "Nome da macro", + "PLACEHOLDER": "Insira um nome para a macro", + "ERROR": "O nome é obrigatório para criar uma macro" + }, + "ACTIONS": { + "LABEL": "Ações" + } + }, + "API": { + "SUCCESS_MESSAGE": "Macro adicionada com sucesso", + "ERROR_MESSAGE": "Não foi possível criar a macro. Por favor, tente novamente mais tarde" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nome:", + "CREATED BY": "Criada por", + "LAST_UPDATED_BY": "Ultima atualização por", + "VISIBILITY": "Visibilidade" + }, + "404": "Nenhuma macro encontrada" + }, + "DELETE": { + "TOOLTIP": "Apagar macro", + "CONFIRM": { + "MESSAGE": "Tem a certeza que pretende excluir ", + "YES": "Sim, excluir", + "NO": "Não, manter" + }, + "API": { + "SUCCESS_MESSAGE": "Macro excluída com sucesso", + "ERROR_MESSAGE": "Ocorreu um erro ao excluir a macro. Por favor, tente novamente mais tarde" + } + }, + "EDIT": { + "TOOLTIP": "Editar macro", + "API": { + "SUCCESS_MESSAGE": "Macro atualizada com sucesso", + "ERROR_MESSAGE": "Não foi possível atualizar a macro. Por favor, tente novamente mais tarde" + } + }, + "EDITOR": { + "START_FLOW": "Início do fluxo", + "END_FLOW": "Fim do fluxo", + "LOADING": "A obter macro", + "ADD_BTN_TOOLTIP": "Adicionar nova ação", + "DELETE_BTN_TOOLTIP": "Excluir ação", + "VISIBILITY": { + "LABEL": "Visibilidade da macro", + "GLOBAL": { + "LABEL": "Pública", + "DESCRIPTION": "Esta macro está disponível publicamente para todos os agentes nesta conta." + }, + "PERSONAL": { + "LABEL": "Privada", + "DESCRIPTION": "Esta macro será para sua utilização exclusiva e não estará disponível para outras pessoas." + } + } + }, + "EXECUTE": { + "BUTTON_TOOLTIP": "Executar", + "PREVIEW": "Pré-visualizar macro", + "EXECUTED_SUCCESSFULLY": "Macro executada com sucesso" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "Chave do atributo necessária", + "FILTER_OPERATOR_REQUIRED": "Operador do filtro necessário", + "VALUE_REQUIRED": "Valor obrigatório", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "O valor deve ser entre 1 e 998", + "ACTION_PARAMETERS_REQUIRED": "Parâmetros de ação obrigatórios", + "ATLEAST_ONE_CONDITION_REQUIRED": "Pelo menos uma condição é obrigatória", + "ATLEAST_ONE_ACTION_REQUIRED": "Pelo menos uma ação é obrigatória" + }, + "ACTIONS": { + "ASSIGN_TEAM": "Atribuir equipa", + "ASSIGN_AGENT": "Atribuir um agente", + "ADD_LABEL": "Adicionar um rótulo", + "REMOVE_LABEL": "Remover um rótulo", + "REMOVE_ASSIGNED_TEAM": "Remover equipa atribuída", + "SEND_EMAIL_TRANSCRIPT": "Enviar uma transcrição por e-mail", + "MUTE_CONVERSATION": "Silenciar Conversa", + "SNOOZE_CONVERSATION": "Adiar conversa", + "RESOLVE_CONVERSATION": "Resolver conversa", + "SEND_ATTACHMENT": "Enviar anexo", + "SEND_MESSAGE": "Enviar uma Mensagem", + "CHANGE_PRIORITY": "Alterar prioridade", + "ADD_PRIVATE_NOTE": "Adicionar uma Nota Privada", + "SEND_WEBHOOK_EVENT": "Enviar evento webhook" + }, + "PRIORITY_TYPES": { + "NONE": "Nenhuma", + "LOW": "Baixa", + "MEDIUM": "Média", + "HIGH": "Elevada", + "URGENT": "Urgente" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/mfa.json b/app/javascript/dashboard/i18n/locale/pt/mfa.json new file mode 100644 index 0000000..2fb38bc --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/mfa.json @@ -0,0 +1,106 @@ +{ + "MFA_SETTINGS": { + "TITLE": "Two-Factor Authentication", + "SUBTITLE": "Secure your account with TOTP-based authentication", + "DESCRIPTION": "Add an extra layer of security to your account using a time-based one-time password (TOTP)", + "STATUS_TITLE": "Authentication Status", + "STATUS_DESCRIPTION": "Manage your two-factor authentication settings and backup recovery codes", + "ENABLED": "Ativado", + "DISABLED": "Inativo", + "STATUS_ENABLED": "Two-factor authentication is active", + "STATUS_ENABLED_DESC": "Your account is protected with an additional layer of security", + "ENABLE_BUTTON": "Enable Two-Factor Authentication", + "ENHANCE_SECURITY": "Enhance Your Account Security", + "ENHANCE_SECURITY_DESC": "Two-factor authentication adds an extra layer of security by requiring a verification code from your authenticator app in addition to your password.", + "SETUP": { + "STEP_NUMBER_1": "1", + "STEP_NUMBER_2": "2", + "STEP1_TITLE": "Scan QR Code with Your Authenticator App", + "STEP1_DESCRIPTION": "Use Google Authenticator, Authy, or any TOTP-compatible app", + "LOADING_QR": "A carregar...", + "MANUAL_ENTRY": "Can't scan? Enter code manually", + "SECRET_KEY": "Secret Key", + "COPY": "Copiar", + "ENTER_CODE": "Enter the 6-digit code from your authenticator app", + "ENTER_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify & Continue", + "CANCEL": "Cancelar", + "ERROR_STARTING": "MFA not enabled. Please contact administrator.", + "INVALID_CODE": "Invalid verification code", + "SECRET_COPIED": "Secret key copied to clipboard", + "SUCCESS": "Two-factor authentication has been enabled successfully" + }, + "BACKUP": { + "TITLE": "Save Your Backup Codes", + "DESCRIPTION": "Keep these codes safe. Each can be used once if you lose access to your authenticator", + "IMPORTANT": "Important:", + "IMPORTANT_NOTE": " Save these codes in a secure location. You won't be able to see them again.", + "DOWNLOAD": "Descarregar", + "COPY_ALL": "Copy All", + "CONFIRM": "I have saved my backup codes in a secure location and understand that I won't be able to see them again", + "COMPLETE_SETUP": "Complete Setup", + "CODES_COPIED": "Backup codes copied to clipboard" + }, + "MANAGEMENT": { + "BACKUP_CODES": "Backup Codes", + "BACKUP_CODES_DESC": "Generate new codes if you've lost or used your existing ones", + "REGENERATE": "Regenerate Backup Codes", + "DISABLE_MFA": "Disable 2FA", + "DISABLE_MFA_DESC": "Remove two-factor authentication from your account", + "DISABLE_BUTTON": "Disable Two-Factor Authentication" + }, + "DISABLE": { + "TITLE": "Disable Two-Factor Authentication", + "DESCRIPTION": "You'll need to enter your password and a verification code to disable two-factor authentication.", + "PASSWORD": "Palavra-passe", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Disable 2FA", + "CANCEL": "Cancelar", + "SUCCESS": "Two-factor authentication has been disabled", + "ERROR": "Failed to disable MFA. Please check your credentials." + }, + "REGENERATE": { + "TITLE": "Regenerate Backup Codes", + "DESCRIPTION": "This will invalidate your existing backup codes and generate new ones. Enter your verification code to continue.", + "OTP_CODE": "Verification Code", + "OTP_CODE_PLACEHOLDER": "000000", + "CONFIRM": "Generate New Codes", + "CANCEL": "Cancelar", + "NEW_CODES_TITLE": "New Backup Codes Generated", + "NEW_CODES_DESC": "Your old backup codes have been invalidated. Save these new codes in a secure location.", + "CODES_IMPORTANT": "Important:", + "CODES_IMPORTANT_NOTE": " Each code can only be used once. Save them before closing this window.", + "DOWNLOAD_CODES": "Download Codes", + "COPY_ALL_CODES": "Copy All Codes", + "CODES_SAVED": "I've Saved My Codes", + "SUCCESS": "New backup codes have been generated", + "ERROR": "Failed to regenerate backup codes" + } + }, + "MFA_VERIFICATION": { + "TITLE": "Two-Factor Authentication", + "DESCRIPTION": "Enter your verification code to continue", + "AUTHENTICATOR_APP": "Authenticator App", + "BACKUP_CODE": "Backup Code", + "ENTER_OTP_CODE": "Enter 6-digit code from your authenticator app", + "ENTER_BACKUP_CODE": "Enter one of your backup codes", + "BACKUP_CODE_PLACEHOLDER": "000000", + "VERIFY_BUTTON": "Verify", + "TRY_ANOTHER_METHOD": "Try another verification method", + "CANCEL_LOGIN": "Cancel and return to login", + "HELP_TEXT": "Having trouble signing in?", + "LEARN_MORE": "Learn more about 2FA", + "HELP_MODAL": { + "TITLE": "Two-Factor Authentication Help", + "AUTHENTICATOR_TITLE": "Using an Authenticator App", + "AUTHENTICATOR_DESC": "Open your authenticator app (Google Authenticator, Authy, etc.) and enter the 6-digit code shown for your account.", + "BACKUP_TITLE": "Using a Backup Code", + "BACKUP_DESC": "If you don't have access to your authenticator app, you can use one of the backup codes you saved when setting up 2FA. Each code can only be used once.", + "CONTACT_TITLE": "Need More Help?", + "CONTACT_DESC_CLOUD": "If you've lost access to both your authenticator app and backup codes, please reach out to Chatwoot support for assistance.", + "CONTACT_DESC_SELF_HOSTED": "If you've lost access to both your authenticator app and backup codes, please contact your administrator for assistance." + }, + "VERIFICATION_FAILED": "Verification failed. Please try again." + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/report.json b/app/javascript/dashboard/i18n/locale/pt/report.json new file mode 100644 index 0000000..43b97d4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/report.json @@ -0,0 +1,582 @@ +{ + "REPORT": { + "HEADER": "Conversas", + "LOADING_CHART": "A carregar dados...", + "NO_ENOUGH_DATA": "Não recebemos pontos de dados suficientes para gerar o relatório. Por favor, tente novamente mais tarde.", + "DOWNLOAD_AGENT_REPORTS": "Descarregar relatórios de agentes", + "DATA_FETCHING_FAILED": "Não foi possível obter dados. Por favor, tente mais tarde.", + "SUMMARY_FETCHING_FAILED": "Não foi possível obter o resumo. Por favor, tente mais tarde.", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversas", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Mensagens recebidas", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Mensagens enviadas", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Primeiro tempo de resposta", + "DESC": "( Média )", + "INFO_TEXT": "Número total de conversas utilizadas para cálculo:", + "TOOLTIP_TEXT": "O tempo da primeira resposta é {metricValue} (com base em {conversationCount} conversas)" + }, + "RESOLUTION_TIME": { + "NAME": "Tempo de resolução", + "DESC": "( Média )", + "INFO_TEXT": "Número total de conversas utilizadas para cálculo:", + "TOOLTIP_TEXT": "O tempo da primeira resposta é {metricValue} (com base em {conversationCount} conversas)" + }, + "RESOLUTION_COUNT": { + "NAME": "Contagem de resolução", + "DESC": "( Total )" + }, + "BOT_RESOLUTION_COUNT": { + "NAME": "Contagem de resolução", + "DESC": "( Total )" + }, + "BOT_HANDOFF_COUNT": { + "NAME": "Contagem de transferências", + "DESC": "( Total )" + }, + "REPLY_TIME": { + "NAME": "Tempo de espera do cliente", + "TOOLTIP_TEXT": "O tempo de espera é {metricValue} (com base em {conversationCount} conversas)", + "DESC": "" + } + }, + "DATE_RANGE_OPTIONS": { + "LAST_7_DAYS": "Últimos 7 Dias", + "LAST_14_DAYS": "Últimos 14 Dias", + "LAST_30_DAYS": "Últimos 30 Dias", + "THIS_MONTH": "This month", + "LAST_MONTH": "Last month", + "LAST_3_MONTHS": "Últimos 3 meses", + "LAST_6_MONTHS": "Últimos 6 meses", + "LAST_YEAR": "Último ano", + "CUSTOM_DATE_RANGE": "Intervalo de tempo personalizado" + }, + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Confirmar", + "PLACEHOLDER": "Selecionar intervalo de tempo" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Agrupar por", + "DURATION_FILTER_LABEL": "Duração", + "GROUPING_OPTIONS": { + "DAY": "Dia", + "WEEK": "Semana", + "MONTH": "Mês", + "YEAR": "Ano" + }, + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Dia" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Dia" + }, + { + "id": 2, + "groupBy": "Semana" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Dia" + }, + { + "id": 2, + "groupBy": "Semana" + }, + { + "id": 3, + "groupBy": "Mês" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 2, + "groupBy": "Semana" + }, + { + "id": 3, + "groupBy": "Mês" + }, + { + "id": 4, + "groupBy": "Ano" + } + ], + "BUSINESS_HOURS": "Horário comercial", + "FILTER_ACTIONS": { + "CLEAR_FILTER": "Limpar filtros", + "EMPTY_LIST": "Nenhum resultado encontrado" + }, + "PAGINATION": { + "RESULTS": "Showing {start} to {end} of {total} results", + "PER_PAGE_TEMPLATE": "{size} / page" + } + }, + "AGENT_REPORTS": { + "HEADER": "Visão geral de agentes", + "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "LOADING_CHART": "A carregar dados...", + "NO_ENOUGH_DATA": "Não recebemos pontos de dados suficientes para gerar o relatório. Por favor, tente novamente mais tarde.", + "DOWNLOAD_AGENT_REPORTS": "Descarregar relatórios de agentes", + "FILTER_DROPDOWN_LABEL": "Selecionar agente", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversas", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Mensagens recebidas", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Mensagens de saída", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Primeiro tempo de resposta", + "DESC": "( Média )", + "INFO_TEXT": "Número total de conversas utilizadas para cálculo:", + "TOOLTIP_TEXT": "O tempo da primeira resposta é {metricValue} (com base em {conversationCount} conversas)" + }, + "RESOLUTION_TIME": { + "NAME": "Tempo de resolução", + "DESC": "( Média )", + "INFO_TEXT": "Número total de conversas utilizadas para cálculo:", + "TOOLTIP_TEXT": "O tempo da primeira resposta é {metricValue} (com base em {conversationCount} conversas)" + }, + "RESOLUTION_COUNT": { + "NAME": "Contagem de resolução", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Últimos 7 Dias" + }, + { + "id": 1, + "name": "Últimos 30 Dias" + }, + { + "id": 2, + "name": "Últimos 3 meses" + }, + { + "id": 3, + "name": "Últimos 6 meses" + }, + { + "id": 4, + "name": "Último ano" + }, + { + "id": 5, + "name": "Intervalo de tempo personalizado" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Confirmar", + "PLACEHOLDER": "Selecionar intervalo de tempo" + } + }, + "LABEL_REPORTS": { + "HEADER": "Visão geral de etiquetas", + "DESCRIPTION": "Rastreie o desempenho com métricas-chave, incluindo conversas, tempos de resposta, tempos de resolução e casos resolvidos. Clique num nome de rótulo para informações detalhadas.", + "LOADING_CHART": "A carregar dados...", + "NO_ENOUGH_DATA": "Não recebemos pontos de dados suficientes para gerar o relatório. Por favor, tente novamente mais tarde.", + "DOWNLOAD_LABEL_REPORTS": "Descarregar relatórios de etiquetas", + "FILTER_DROPDOWN_LABEL": "Selecionar etiqueta", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversas", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Mensagens recebidas", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Mensagens de saída", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Primeiro tempo de resposta", + "DESC": "( Média )", + "INFO_TEXT": "Número total de conversas utilizadas para cálculo:", + "TOOLTIP_TEXT": "O tempo da primeira resposta é {metricValue} (com base em {conversationCount} conversas)" + }, + "RESOLUTION_TIME": { + "NAME": "Tempo de resolução", + "DESC": "( Média )", + "INFO_TEXT": "Número total de conversas utilizadas para cálculo:", + "TOOLTIP_TEXT": "O tempo da primeira resposta é {metricValue} (com base em {conversationCount} conversas)" + }, + "RESOLUTION_COUNT": { + "NAME": "Contagem de resolução", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Últimos 7 Dias" + }, + { + "id": 1, + "name": "Últimos 30 Dias" + }, + { + "id": 2, + "name": "Últimos 3 meses" + }, + { + "id": 3, + "name": "Últimos 6 meses" + }, + { + "id": 4, + "name": "Último ano" + }, + { + "id": 5, + "name": "Intervalo de tempo personalizado" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Confirmar", + "PLACEHOLDER": "Selecionar intervalo de tempo" + } + }, + "INBOX_REPORTS": { + "HEADER": "Visão geral da caixa de entrada", + "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "LOADING_CHART": "A carregar dados...", + "NO_ENOUGH_DATA": "Não recebemos pontos de dados suficientes para gerar o relatório. Por favor, tente novamente mais tarde.", + "DOWNLOAD_INBOX_REPORTS": "Descarregar relatórios de caixa de entrada", + "FILTER_DROPDOWN_LABEL": "Escolher caixa de entrada", + "ALL_INBOXES": "All Inboxes", + "SEARCH_INBOX": "Search Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversas", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Mensagens recebidas", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Mensagens de saída", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Primeiro tempo de resposta", + "DESC": "( Média )", + "INFO_TEXT": "Número total de conversas utilizadas para cálculo:", + "TOOLTIP_TEXT": "O tempo da primeira resposta é {metricValue} (com base em {conversationCount} conversas)" + }, + "RESOLUTION_TIME": { + "NAME": "Tempo de resolução", + "DESC": "( Média )", + "INFO_TEXT": "Número total de conversas utilizadas para cálculo:", + "TOOLTIP_TEXT": "O tempo da primeira resposta é {metricValue} (com base em {conversationCount} conversas)" + }, + "RESOLUTION_COUNT": { + "NAME": "Contagem de resolução", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Últimos 7 Dias" + }, + { + "id": 1, + "name": "Últimos 30 Dias" + }, + { + "id": 2, + "name": "Últimos 3 meses" + }, + { + "id": 3, + "name": "Últimos 6 meses" + }, + { + "id": 4, + "name": "Último ano" + }, + { + "id": 5, + "name": "Intervalo de tempo personalizado" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Confirmar", + "PLACEHOLDER": "Selecionar intervalo de tempo" + } + }, + "TEAM_REPORTS": { + "HEADER": "Visão geral da equipa", + "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "LOADING_CHART": "A carregar dados...", + "NO_ENOUGH_DATA": "Não recebemos pontos de dados suficientes para gerar o relatório. Por favor, tente novamente mais tarde.", + "DOWNLOAD_TEAM_REPORTS": "Descarregar relatórios de equipa", + "FILTER_DROPDOWN_LABEL": "Selecionar equipa", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversas", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Mensagens recebidas", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Mensagens de saída", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "Primeiro tempo de resposta", + "DESC": "( Média )", + "INFO_TEXT": "Número total de conversas utilizadas para cálculo:", + "TOOLTIP_TEXT": "O tempo da primeira resposta é {metricValue} (com base em {conversationCount} conversas)" + }, + "RESOLUTION_TIME": { + "NAME": "Tempo de resolução", + "DESC": "( Média )", + "INFO_TEXT": "Número total de conversas utilizadas para cálculo:", + "TOOLTIP_TEXT": "O tempo da primeira resposta é {metricValue} (com base em {conversationCount} conversas)" + }, + "RESOLUTION_COUNT": { + "NAME": "Contagem de resolução", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Últimos 7 Dias" + }, + { + "id": 1, + "name": "Últimos 30 Dias" + }, + { + "id": 2, + "name": "Últimos 3 meses" + }, + { + "id": 3, + "name": "Últimos 6 meses" + }, + { + "id": 4, + "name": "Último ano" + }, + { + "id": 5, + "name": "Intervalo de tempo personalizado" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Confirmar", + "PLACEHOLDER": "Selecionar intervalo de tempo" + } + }, + "CSAT_REPORTS": { + "HEADER": "Relatórios CSAT", + "NO_RECORDS": "Não há respostas de questionários CSAT disponíveis.", + "DOWNLOAD": "Descarregar relatórios CSAT", + "DOWNLOAD_FAILED": "Falha ao descarregar os relatórios CSAT", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Escolher agentes" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Contacto", + "AGENT_NAME": "Agente atribuído", + "RATING": "Classificação", + "FEEDBACK_TEXT": "Comentário de feedback" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Total de respostas", + "TOOLTIP": "Número total de respostas recolhidas" + }, + "SATISFACTION_SCORE": { + "LABEL": "Pontuação de satisfação", + "TOOLTIP": "Número total de respostas positivas / Número total de respostas * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Taxa de resposta", + "TOOLTIP": "Número total de respostas / Número total de mensagens de questionários CSAT enviadas * 100" + } + } + }, + "BOT_REPORTS": { + "HEADER": "Relatórios de bot", + "METRIC": { + "TOTAL_CONVERSATIONS": { + "LABEL": "N.º de conversas", + "TOOLTIP": "Número total de conversas tratadas pelo bot" + }, + "TOTAL_RESPONSES": { + "LABEL": "Total de respostas", + "TOOLTIP": "Número total de respostas enviadas pelo bot" + }, + "RESOLUTION_RATE": { + "LABEL": "Taxa de resolução", + "TOOLTIP": "Número total de conversas resolvidas pelo bot / Número total de conversas tratadas pelo bot * 100" + }, + "HANDOFF_RATE": { + "LABEL": "Taxa de transferência", + "TOOLTIP": "Número total de conversas transferidas para agentes / Número total de conversas tratadas pelo bot * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Visão geral", + "LIVE": "Disponível", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Conversas abertas", + "LOADING_MESSAGE": "A carregar métricas de conversa...", + "OPEN": "Abertas", + "UNATTENDED": "Por responder", + "UNASSIGNED": "Não atribuída", + "PENDING": "Pendente" + }, + "CONVERSATION_HEATMAP": { + "HEADER": "Tráfego de conversa", + "NO_CONVERSATIONS": "Não existem conversas", + "CONVERSATION": "{count} conversa", + "CONVERSATIONS": "{count} conversas", + "DOWNLOAD_REPORT": "Descarregar relatório" + }, + "RESOLUTION_HEATMAP": { + "HEADER": "Resolutions", + "NO_CONVERSATIONS": "Não existem conversas", + "CONVERSATION": "{count} conversa", + "CONVERSATIONS": "{count} conversas", + "DOWNLOAD_REPORT": "Descarregar relatório" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Conversas por agentes", + "LOADING_MESSAGE": "A gerar métricas dos agentes...", + "NO_AGENTS": "Não existem conversas por agentes", + "TABLE_HEADER": { + "AGENT": "Agente", + "OPEN": "Abertas", + "UNATTENDED": "Por responder", + "STATUS": "Estado" + } + }, + "TEAM_CONVERSATIONS": { + "ALL_TEAMS": "All Teams", + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "TEAM": "Equipa", + "OPEN": "Abertas", + "UNATTENDED": "Por responder", + "STATUS": "Situação" + } + }, + "AGENT_STATUS": { + "HEADER": "Estado do agente", + "ONLINE": "Disponível", + "BUSY": "Ocupado", + "OFFLINE": "Ausente" + } + }, + "DAYS_OF_WEEK": { + "SUNDAY": "Domingo", + "MONDAY": "Segunda-feira", + "TUESDAY": "Terça-feira", + "WEDNESDAY": "Quarta-feira", + "THURSDAY": "Quinta-feira", + "FRIDAY": "Sexta-feira", + "SATURDAY": "Sábado" + }, + "SLA_REPORTS": { + "HEADER": "Relatórios SLA", + "NO_RECORDS": "Conversas com SLA aplicadas não estão disponíveis.", + "LOADING": "A carregar dados SLA...", + "DOWNLOAD_SLA_REPORTS": "Descarregar relatórios SLA", + "DOWNLOAD_FAILED": "Falha ao efetuar download dos relatórios SLA", + "DROPDOWN": { + "ADD_FIlTER": "Adicionar filtro", + "CLEAR_ALL": "Limpar tudo", + "CLEAR_FILTER": "Limpar filtros", + "EMPTY_LIST": "Nenhum resultado encontrado", + "NO_FILTER": "Sem filtros disponíveis", + "SEARCH": "Procurar filtros", + "INPUT_PLACEHOLDER": { + "SLA": "Nome SLA", + "AGENTS": "Nome do agente", + "INBOXES": "Nome da caixa de entrada", + "LABELS": "Nome da etiqueta", + "TEAMS": "Nome da equipa" + }, + "SLA": "Política SLA", + "INBOXES": "Caixa de entrada", + "AGENTS": "Agente", + "LABELS": "Etiqueta", + "TEAMS": "Equipa" + }, + "WITH": "com", + "METRICS": { + "HIT_RATE": { + "LABEL": "Taxa de sucesso", + "TOOLTIP": "Percentagem de SLA criadas foi completada com sucesso" + }, + "NO_OF_MISSES": { + "LABEL": "Número de perdas", + "TOOLTIP": "Total de SLA perdidas num determinado período" + }, + "NO_OF_CONVERSATIONS": { + "LABEL": "Número de conversas", + "TOOLTIP": "Número total de conversas com SLA" + } + }, + "TABLE": { + "HEADER": { + "POLICY": "Política", + "CONVERSATION": "Conversa", + "AGENT": "Agente" + }, + "VIEW_DETAILS": "Ver detalhes" + } + }, + "SUMMARY_REPORTS": { + "INBOX": "Caixa de entrada", + "AGENT": "Agente", + "TEAM": "Equipa", + "LABEL": "Etiqueta", + "AVG_RESOLUTION_TIME": "Avg. Resolution Time", + "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", + "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "RESOLUTION_COUNT": "Contagem de resolução", + "CONVERSATIONS": "Num de conversas" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/resetPassword.json b/app/javascript/dashboard/i18n/locale/pt/resetPassword.json new file mode 100644 index 0000000..a842a07 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/resetPassword.json @@ -0,0 +1,17 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Redefinir palavra-passe", + "DESCRIPTION": "Escreva o endereço de e-mail que usa para aceder ao Wiseteam para obter as instruções de redefinição da palavra-passe.", + "GO_BACK_TO_LOGIN": "Se pretende voltar à página de acesso,", + "EMAIL": { + "LABEL": "E-mail", + "PLACEHOLDER": "Por favor, digite o seu e-mail.", + "ERROR": "Por favor, digite um e-mail válido." + }, + "API": { + "SUCCESS_MESSAGE": "O link para redefinir a palavra-passe foi enviado para o seu e-mail.", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot. Por favor, tente novamente." + }, + "SUBMIT": "Submeter" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/search.json b/app/javascript/dashboard/i18n/locale/pt/search.json new file mode 100644 index 0000000..cf2a44d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/search.json @@ -0,0 +1,68 @@ +{ + "SEARCH": { + "TABS": { + "ALL": "All results", + "CONTACTS": "Contactos", + "CONVERSATIONS": "Conversas", + "MESSAGES": "Mensagens", + "ARTICLES": "Articles" + }, + "SECTION": { + "CONTACTS": "Contactos", + "CONVERSATIONS": "Conversas", + "MESSAGES": "Mensagens", + "ARTICLES": "Articles" + }, + "VIEW_MORE": "View more", + "LOAD_MORE": "Load more", + "SEARCHING_DATA": "A pesquisar", + "LOADING_DATA": "A carregar", + "EMPTY_STATE": "Não foi encontrado {item} para a consulta '{query}'", + "EMPTY_STATE_FULL": "Nenhum resultado encontrado para a consulta '{query}'", + "PLACEHOLDER_KEYBINDING": "/para focar", + "INPUT_PLACEHOLDER": "Digite 3 ou mais caracteres para pesquisar", + "RECENT_SEARCHES": "Recent searches", + "CLEAR_ALL": "Limpar tudo", + "MOST_RECENT": "Most recent", + "EMPTY_STATE_DEFAULT": "Procurar por ID da conversa, email, número de telefone, mensagens para obter melhores resultados. ", + "BOT_LABEL": "Bot", + "READ_MORE": "Ler mais", + "READ_LESS": "Read less", + "WROTE": "escreveu:", + "FROM": "De", + "EMAIL": "E-mail", + "EMAIL_SUBJECT": "Assunto", + "PRIVATE": "Private note", + "TRANSCRIPT": "Transcript", + "CREATED_AT": "created {time}", + "UPDATED_AT": "updated {time}", + "SORT_BY": { + "RELEVANCE": "Relevance" + }, + "DATE_RANGE": { + "LAST_7_DAYS": "Últimos 7 Dias", + "LAST_30_DAYS": "Últimos 30 Dias", + "LAST_60_DAYS": "Últimos 60 Dias", + "LAST_90_DAYS": "Últimos 90 Dias", + "CUSTOM_RANGE": "Custom range:", + "CREATED_BETWEEN": "Created between", + "AND": "and", + "APPLY": "Confirmar", + "BEFORE_DATE": "Before {date}", + "AFTER_DATE": "After {date}", + "TIME_RANGE": "Filter by time", + "CLEAR_FILTER": "Limpar filtros" + }, + "FILTERS": { + "FILTER_MESSAGE": "Filter messages by:", + "FROM": "Remetente", + "IN": "Caixa de entrada", + "AGENTS": "Agentes", + "CONTACTS": "Contactos", + "INBOXES": "Caixas de Entrada", + "NO_AGENTS": "Nenhum agente encontrado", + "NO_CONTACTS": "Start by searching to see results", + "NO_INBOXES": "No inboxes found" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/setNewPassword.json b/app/javascript/dashboard/i18n/locale/pt/setNewPassword.json new file mode 100644 index 0000000..bb27519 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Definir nova senha", + "PASSWORD": { + "LABEL": "Palavra-passe", + "PLACEHOLDER": "Palavra-passe", + "ERROR": "A senha é muito curta." + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirmar senha", + "PLACEHOLDER": "Confirmar senha", + "ERROR": "As senhas não coincidem." + }, + "API": { + "SUCCESS_MESSAGE": "Senha alterada com sucesso.", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot. Por favor, tente novamente." + }, + "CAPTCHA": { + "ERROR": "A verificação expirou. Por favor, resolva o captcha novamente." + }, + "SUBMIT": "submeter" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/settings.json b/app/javascript/dashboard/i18n/locale/pt/settings.json new file mode 100644 index 0000000..561e954 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/settings.json @@ -0,0 +1,796 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Configurações do perfil", + "TITLE": "Configurações do perfil", + "BTN_TEXT": "Atualizar o perfil", + "DELETE_AVATAR": "Apagar Avatar", + "AVATAR_DELETE_SUCCESS": "Avatar foi apagado com sucesso", + "AVATAR_DELETE_FAILED": "Ocorreu um erro a apagar o avatar. Por favor, tente novamente", + "UPDATE_SUCCESS": "O seu perfil foi atualizado com sucesso", + "PASSWORD_UPDATE_SUCCESS": "Sua senha foi alterada com sucesso", + "AFTER_EMAIL_CHANGED": "Seu perfil foi atualizado com sucesso, faça o login novamente pois suas credenciais foram alteradas", + "FORM": { + "PICTURE": "Imagem de perfil", + "AVATAR": "Imagem do perfil", + "ERROR": "Por favor, corrigir erros de formulário", + "REMOVE_IMAGE": "Excluir", + "UPLOAD_IMAGE": "Upload de imagem", + "UPDATE_IMAGE": "Atualizar imagem", + "PROFILE_SECTION": { + "TITLE": "Perfil", + "NOTE": "Seu endereço de e-mail é sua identidade e é usado para entrar." + }, + "SEND_MESSAGE": { + "TITLE": "Tecla de atalho para enviar mensagens", + "NOTE": "É possível selecionar uma tecla de atalho (Enter ou Cmd/Ctrl+Enter) com base na sua preferência de escrita.", + "UPDATE_SUCCESS": "As suas configurações foram atualizadas com sucesso", + "CARD": { + "ENTER_KEY": { + "HEADING": "Enter (↵)", + "CONTENT": "Enviar mensagens pressionando a tecla Enter em vez de clicar no botão enviar." + }, + "CMD_ENTER_KEY": { + "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", + "CONTENT": "Enviar mensagens com as teclas Cmd/Ctrl + Enter em vez de clicar no botão enviar." + } + } + }, + "INTERFACE_SECTION": { + "TITLE": "Interface", + "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "FONT_SIZE": { + "TITLE": "Font size", + "NOTE": "Adjust the text size across the dashboard based on your preference.", + "UPDATE_SUCCESS": "Your font settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "OPTIONS": { + "SMALLER": "Smaller", + "SMALL": "Small", + "DEFAULT": "Padrão", + "LARGE": "Large", + "LARGER": "Larger", + "EXTRA_LARGE": "Extra Large" + } + }, + "LANGUAGE": { + "TITLE": "Preferred Language", + "NOTE": "Choose the language you want to use.", + "UPDATE_SUCCESS": "Your Language settings have been updated successfully", + "UPDATE_ERROR": "There is an error while updating the language settings, please try again", + "USE_ACCOUNT_DEFAULT": "Use account default" + } + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Assinatura de mensagem pessoal", + "NOTE": "Crie uma assinatura de mensagem única para aparecer no final de todas as mensagens que enviar de qualquer caixa de entrada. Pode incluir uma imagem embutida, que será suportada nos canais de live-chat, e-mail e caixas de entrada API.", + "BTN_TEXT": "Salvar assinatura da mensagem", + "API_ERROR": "Não foi possível salvar a assinatura! Tente novamente", + "API_SUCCESS": "Assinatura salva com sucesso", + "IMAGE_UPLOAD_ERROR": "Não foi possível carregar a imagem! Tente novamente", + "IMAGE_UPLOAD_SUCCESS": "Imagem adicionada. Clique em salvar para salvar a assinatura", + "IMAGE_UPLOAD_SIZE_ERROR": "O tamanho da imagem deve ser inferior a {size}MB" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Assinatura da mensagem", + "ERROR": "Assinatura da mensagem não pode estar vazia", + "PLACEHOLDER": "Escreva aqui a sua assinatura de mensagem pessoal." + }, + "PASSWORD_SECTION": { + "TITLE": "Palavra-passe", + "NOTE": "Atualizar sua senha irá redefinir seus logins em vários dispositivos.", + "BTN_TEXT": "Alterar password" + }, + "SECURITY_SECTION": { + "TITLE": "Security", + "NOTE": "Manage additional security features for your account.", + "MFA_BUTTON": "Manage Two-Factor Authentication" + }, + "ACCESS_TOKEN": { + "TITLE": "Token de acesso", + "NOTE": "Este token pode ser usado se você estiver construindo uma integração baseada em API", + "COPY": "Copiar", + "RESET": "Reset", + "CONFIRM_RESET": "Tem a certeza?", + "CONFIRM_HINT": "Clique novamente para confirmar", + "RESET_SUCCESS": "O token de acesso voltou a ser gerado", + "RESET_ERROR": "Não foi possível voltar a gerar o token de acesso, por favor tente novamente" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Alerts", + "NOTE": "Enable audio alerts in dashboard for new messages and conversations.", + "PLAY": "Play sound", + "ALERT_TYPES": { + "NONE": "Nenhuma", + "MINE": "Atribuída", + "ALL": "Todas", + "ASSIGNED": "My assigned conversations", + "UNASSIGNED": "Unassigned conversations", + "NOTME": "Open conversations assigned to others" + }, + "ALERT_COMBINATIONS": { + "NONE": "You haven't selected any options, you won't receive any audio alerts.", + "ASSIGNED": "You'll receive alerts for conversations assigned to you.", + "UNASSIGNED": "You'll receive alerts for any unassigned conversations.", + "NOTME": "You'll receive alerts for conversations assigned to others.", + "ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.", + "ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.", + "NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.", + "ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations." + }, + "ALERT_TYPE": { + "TITLE": "Eventos de alerta para conversas", + "NONE": "Nenhuma", + "ASSIGNED": "Conversas atribuídas", + "ALL_CONVERSATIONS": "Todas as conversas" + }, + "DEFAULT_TONE": { + "TITLE": "Tom do alerta:" + }, + "CONDITIONS": { + "TITLE": "Condições de alerta:", + "CONDITION_ONE": "Enviar alertas de áudio apenas quando a janela do navegador não estiver ativa", + "CONDITION_TWO": "Enviar alertas a cada 30 segundos até que todas as conversas atribuídas sejam lidas" + }, + "SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.", + "READ_MORE": "Ler mais" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "Notificações por e-mail", + "NOTE": "Atualize suas preferências de notificação por e-mail aqui", + "CONVERSATION_ASSIGNMENT": "Enviar notificações por email quando uma conversa é atribuída a mim", + "CONVERSATION_CREATION": "Enviar notificações por email quando uma nova conversa é criada", + "CONVERSATION_MENTION": "Enviar notificações por email quando for mencionado numa conversa", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Enviar mensagem de email quando criada uma mensagem ou atribuída uma conversa", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Enviar notificações por email quando uma nova mensagem é criada numa conversa em que está a participar", + "SLA_MISSED_FIRST_RESPONSE": "Enviar notificações por e-mail quando uma conversa perder a primeira resposta SLA", + "SLA_MISSED_NEXT_RESPONSE": "Enviar notificações por email quando uma conversa falhar a SLA de primeira resposta", + "SLA_MISSED_RESOLUTION": "Enviar notificações por email quando uma conversa falhar a SLA de resolução" + }, + "NOTIFICATIONS": { + "TITLE": "Preferências de notificação", + "TYPE_TITLE": "Tipo de notificação", + "EMAIL": "e-mail", + "PUSH": "Notificações Push", + "TYPES": { + "CONVERSATION_CREATED": "Nova conversa criada", + "CONVERSATION_ASSIGNED": "Foi-lhe atribuída uma conversa", + "CONVERSATION_MENTION": "Foi mencionado numa conversa", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Foi criada uma nova mensagem numa conversa que lhe está atribuída", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Foi criada uma nova mensagem numa conversa em que está a participar", + "SLA_MISSED_FIRST_RESPONSE": "Uma conversa perdeu a primeira resposta SLA", + "SLA_MISSED_NEXT_RESPONSE": "Uma conversa perdeu a a próxima resposta SLA", + "SLA_MISSED_RESOLUTION": "Uma conversa falhou a SLA de resolução" + }, + "BROWSER_PERMISSION": "Ative as notificações Push do seu navegador para que as possa receber" + }, + "API": { + "UPDATE_SUCCESS": "As suas preferências de notificação foram atualizadas com sucesso", + "UPDATE_ERROR": "Ocorreu um erro ao atualizar as suas preferências, por favor, tente de novo" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Notificações Push", + "NOTE": "Atualize aqui as suas preferências de notificação Push", + "CONVERSATION_ASSIGNMENT": "Enviar uma notificação Push quando uma conversa me for atribuída", + "CONVERSATION_CREATION": "Enviar uma notificação Push quando uma conversa é criada", + "CONVERSATION_MENTION": "Enviar uma notificação Push quando for mencionado numa conversa", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Enviar uma notificação Push quando uma mensagem é criada numa conversa atribuída", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Enviar notificações push quando uma nova mensagem é criada numa conversa em que está a participar", + "HAS_ENABLED_PUSH": "Ativou notificações Push neste navegador.", + "REQUEST_PUSH": "Ativar notificações Push", + "SLA_MISSED_FIRST_RESPONSE": "Enviar uma notificação Push quando uma conversa falhar a SLA de primeira resposta", + "SLA_MISSED_NEXT_RESPONSE": "Enviar uma notificação Push quando uma conversa falhar a SLA de resposta seguinte", + "SLA_MISSED_RESOLUTION": "Enviar uma notificação Push quando uma conversa falhar a SLA de resolução" + }, + "PROFILE_IMAGE": { + "LABEL": "Imagem do perfil" + }, + "NAME": { + "LABEL": "O seu nome completo", + "ERROR": "Por favor, digite um nome completo válido", + "PLACEHOLDER": "Por favor, digite o seu nome completo" + }, + "DISPLAY_NAME": { + "LABEL": "Mostrar nome", + "ERROR": "Por favor, digite uma alcunha válida", + "PLACEHOLDER": "Por favor, escolha uma alcunha que será mostrada nas conversas" + }, + "AVAILABILITY": { + "LABEL": "Disponibilidade", + "STATUS": { + "ONLINE": "Disponível", + "BUSY": "Ocupado", + "OFFLINE": "Ausente" + }, + "SET_AVAILABILITY_SUCCESS": "Disponibilidade foi definida com sucesso", + "SET_AVAILABILITY_ERROR": "Não foi possível definir a disponibilidade, por favor tente novamente", + "IMPERSONATING_ERROR": "Não é possível alterar a disponibilidade enquanto está em modo de representação de um utilizador" + }, + "EMAIL": { + "LABEL": "Seu endereço de e-mail", + "ERROR": "Por favor, insira um endereço de e-mail válido", + "PLACEHOLDER": "Por favor, insira seu endereço de e-mail, que será exibido em conversas" + }, + "CURRENT_PASSWORD": { + "LABEL": "Password atual", + "ERROR": "Por favor, digite a password atual", + "PLACEHOLDER": "Por favor, digite a password atual" + }, + "PASSWORD": { + "LABEL": "Nova senha", + "ERROR": "Por favor, digite uma senha de comprimento 6 ou mais", + "PLACEHOLDER": "Por favor, digite uma nova senha" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Confirme a nova senha", + "ERROR": "Confirme a senha deve corresponder à senha", + "PLACEHOLDER": "Por favor, digite novamente a sua senha nova" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Trocar", + "CHANGE_ACCOUNTS": "Switch account", + "SWITCH_ACCOUNT": "Switch account", + "CONTACT_SUPPORT": "Contact support", + "SELECTOR_SUBTITLE": "Escolha uma conta da lista a seguir", + "PROFILE_SETTINGS": "Profile settings", + "YEAR_IN_REVIEW": "Year in Review", + "KEYBOARD_SHORTCUTS": "Keyboard shortcuts", + "APPEARANCE": "Change appearance", + "SUPER_ADMIN_CONSOLE": "SuperAdmin console", + "DOCS": "Read documentation", + "CHANGELOG": "Changelog", + "LOGOUT": "Log out" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "dias de teste restantes.", + "TRAIL_BUTTON": "Comprar agora", + "DELETED_USER": "Utilizador Excluído", + "EMAIL_VERIFICATION_PENDING": "Parece que o seu endereço de e-mail ainda não foi verificado. Por favor, confira a sua caixa de entrada e siga as instruções para concluir a verificação.", + "RESEND_VERIFICATION_MAIL": "Reenviar e-mail de verificação", + "EMAIL_VERIFICATION_SENT": "O e-mail de verificação foi enviado. Por favor, confira a sua caixa de entrada.", + "ACCOUNT_SUSPENDED": { + "TITLE": "Conta Suspensa", + "MESSAGE": "A sua conta está suspensa. Entre em contato com a equipa de suporte para obter mais informações." + }, + "NO_ACCOUNTS": { + "TITLE": "No account found", + "MESSAGE_CLOUD": "You are not part of any accounts right now. If you think this is a mistake, please reach out to our support team.", + "MESSAGE_SELF_HOSTED": "You are not part of any accounts right now. Please reach out to your administrator.", + "LOGOUT": "Log out" + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Copiar", + "CODEPEN": "Abrir em CodePen", + "COPY_SUCCESSFUL": "Código copiado com sucesso para área de transferência" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Mostrar mais", + "SHOW_LESS": "Mostrar menos" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "BAIXAR", + "UPLOADING": "A carregar...", + "INSTAGRAM_STORY_UNAVAILABLE": "Esta história já não está disponível." + }, + "LOCATION_BUBBLE": { + "SEE_ON_MAP": "Veja no mapa" + }, + "FORM_BUBBLE": { + "SUBMIT": "submeter" + }, + "MEDIA": { + "IMAGE_UNAVAILABLE": "This image is no longer available.", + "LOADING_FAILED": "Loading failed" + } + }, + "CONFIRM_EMAIL": "A verificar...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Adicionar caixa de entrada" + } + }, + "SIDEBAR": { + "NO_ITEMS": "No items", + "CURRENTLY_VIEWING_ACCOUNT": "Atualmente visualizando:", + "SWITCH": "Alternar", + "INBOX_VIEW": "Visualização da Caixa de entrada", + "CONVERSATIONS": "Conversas", + "INBOX": "My Inbox", + "ALL_CONVERSATIONS": "Todas as conversas", + "MENTIONED_CONVERSATIONS": "Menções", + "PARTICIPATING_CONVERSATIONS": "Participando", + "UNATTENDED_CONVERSATIONS": "Por responder", + "REPORTS": "relatórios", + "SETTINGS": "Configurações", + "CONTACTS": "Contactos", + "ACTIVE": "Ativa", + "COMPANIES": "Companies", + "ALL_COMPANIES": "All Companies", + "CAPTAIN": "Captain", + "CAPTAIN_ASSISTANTS": "Assistants", + "CAPTAIN_DOCUMENTS": "Documents", + "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_TOOLS": "Ferramentas", + "CAPTAIN_SCENARIOS": "Scenarios", + "CAPTAIN_PLAYGROUND": "Playground", + "CAPTAIN_INBOXES": "Caixas de Entrada", + "CAPTAIN_SETTINGS": "Configurações", + "HOME": "Principal", + "AGENTS": "Agentes", + "AGENT_BOTS": "Bots", + "AUDIT_LOGS": "Logs de auditoria", + "INBOXES": "Caixas de Entrada", + "NOTIFICATIONS": "Notificaçoes", + "CANNED_RESPONSES": "Respostas Prontas", + "INTEGRATIONS": "Integrações", + "PROFILE_SETTINGS": "Configurações do perfil", + "ACCOUNT_SETTINGS": "Configurações da conta", + "APPLICATIONS": "Aplicações", + "LABELS": "Etiquetas", + "CUSTOM_ATTRIBUTES": "Atributos personalizados", + "AUTOMATION": "Automatização", + "MACROS": "Macros", + "TEAMS": "Equipas", + "BILLING": "Cobrança", + "CUSTOM_VIEWS_FOLDER": "Pastas", + "CUSTOM_VIEWS_SEGMENTS": "Segmentos", + "ALL_CONTACTS": "Todos os contatos", + "TAGGED_WITH": "Etiquetada com", + "NEW_LABEL": "Nova etiqueta", + "NEW_TEAM": "Nova equipa", + "NEW_INBOX": "Nova caixa de entrada", + "REPORTS_CONVERSATION": "Conversas", + "CSAT": "CSAT", + "LIVE_CHAT": "Live Chat", + "SMS": "SMS", + "WHATSAPP": "WhatsApp", + "CAMPAIGNS": "Campanhas", + "ONGOING": "Em curso", + "ONE_OFF": "Pontual", + "REPORTS_SLA": "SLA", + "REPORTS_BOT": "Bot", + "REPORTS_AGENT": "Agentes", + "REPORTS_LABEL": "Etiquetas", + "REPORTS_INBOX": "Caixa de Entrada", + "REPORTS_TEAM": "Equipa", + "AGENT_ASSIGNMENT": "Agent Assignment", + "SET_AVAILABILITY_TITLE": "Defina-se como", + "SET_YOUR_AVAILABILITY": "Definir disponibilidade", + "SLA": "SLA", + "CUSTOM_ROLES": "Funções personalizadas", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Visão geral", + "REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages", + "HELP_CENTER": { + "TITLE": "Centro de Suporte", + "ARTICLES": "Articles", + "CATEGORIES": "Categorias", + "LOCALES": "Locais", + "SETTINGS": "Configurações" + }, + "CHANNELS": "Channels", + "SET_AUTO_OFFLINE": { + "TEXT": "Marcar offline automaticamente", + "INFO_TEXT": "Deixar o sistema alterar automaticamente o seu estado para offline quando não estiver a usar a app ou o painel.", + "INFO_SHORT": "Automatically mark offline when you aren't using the app." + }, + "DOCS": "Ler documentos", + "SECURITY": "Security" + }, + "BILLING_SETTINGS": { + "TITLE": "Cobrança", + "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "CURRENT_PLAN": { + "TITLE": "Plano atual", + "PLAN_NOTE": "Atualmente tem o **{plan}* subscrito com **{quantity}** licenças", + "SEAT_COUNT": "Number of seats", + "RENEWS_ON": "Renews on" + }, + "VIEW_PRICING": "View Pricing", + "MANAGE_SUBSCRIPTION": { + "TITLE": "Administrar o seu serviço", + "DESCRIPTION": "Visualize as suas faturas anteriores, edite os seus dados de pagamento, ou cancele o seu serviço.", + "BUTTON_TXT": "Ir para a área de faturação" + }, + "CAPTAIN": { + "TITLE": "Captain", + "DESCRIPTION": "Manage usage and credits for Captain AI.", + "BUTTON_TXT": "Buy more credits", + "DOCUMENTS": "Documents", + "RESPONSES": "Responses", + "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more.", + "REFRESH_CREDITS": "Atualizar" + }, + "CHAT_WITH_US": { + "TITLE": "Precisa de ajuda?", + "DESCRIPTION": "Está com dificuldade em efetuar o seu pagamento? Estamos aqui para ajudar.", + "BUTTON_TXT": "Fale connosco" + }, + "NO_BILLING_USER": "Os seus dados de pagamento estão a ser configurados. Atualize a página e tente novamente.", + "TOPUP": { + "BUY_CREDITS": "Buy more credits", + "MODAL_TITLE": "Buy AI Credits", + "MODAL_DESCRIPTION": "Purchase additional credits for Captain AI.", + "CREDITS": "CREDITS", + "ONE_TIME": "one-time", + "POPULAR": "Most Popular", + "NOTE_TITLE": "Observação:", + "NOTE_DESCRIPTION": "Credits are added immediately and expire in 6 months. An active subscription is required to use credits. Purchased credits are consumed after your monthly plan credits.", + "CANCEL": "Cancelar", + "PURCHASE": "Purchase Credits", + "LOADING": "Loading options...", + "FETCH_ERROR": "Failed to load credit options. Please try again.", + "PURCHASE_ERROR": "Failed to process purchase. Please try again.", + "PURCHASE_SUCCESS": "Successfully added {credits} credits to your account", + "CONFIRM": { + "TITLE": "Confirm Purchase", + "DESCRIPTION": "You are about to purchase {credits} credits for {amount}.", + "INSTANT_DEDUCTION_NOTE": "Your saved card will be charged immediately upon confirmation.", + "GO_BACK": "Voltar", + "CONFIRM_PURCHASE": "Confirm Purchase" + } + } + }, + "SECURITY_SETTINGS": { + "TITLE": "Security", + "DESCRIPTION": "Manage your account security settings.", + "LINK_TEXT": "Learn more about SAML SSO", + "SAML_DISABLED_MESSAGE": "SAML SSO is currently disabled. Please contact your administrator to enable this feature.", + "SAML": { + "TITLE": "SAML SSO", + "NOTE": "Configure SAML single sign-on for your account. Users will authenticate through your identity provider instead of using email/password.", + "ACS_URL": { + "LABEL": "ACS URL", + "TOOLTIP": "Assertion Consumer Service URL - Configure this URL in your IdP as the destination for SAML responses" + }, + "SSO_URL": { + "LABEL": "SSO URL", + "HELP": "The URL where SAML authentication requests will be sent", + "PLACEHOLDER": "https://your-idp.com/saml/sso" + }, + "CERTIFICATE": { + "LABEL": "Signing certificate in PEM format", + "HELP": "The public certificate from your identity provider used to verify SAML responses", + "PLACEHOLDER": "-----BEGIN CERTIFICATE-----\nMIIC..." + }, + "FINGERPRINT": { + "LABEL": "Fingerprint", + "TOOLTIP": "SHA-1 fingerprint of the certificate - Use this to verify the certificate in your IdP configuration" + }, + "COPY_SUCCESS": "Código copiado com sucesso para área de transferência", + "SP_ENTITY_ID": { + "LABEL": "SP Entity ID", + "HELP": "Unique identifier for this application as a service provider (auto-generated).", + "TOOLTIP": "Unique identifier for Chatwoot as the Service Provider - Configure this in your IdP settings" + }, + "IDP_ENTITY_ID": { + "LABEL": "Identity Provider Entity ID", + "HELP": "Unique identifier for your identity provider (usually found in IdP configuration)", + "PLACEHOLDER": "https://your-idp.com/saml" + }, + "UPDATE_BUTTON": "Update SAML Settings", + "API": { + "SUCCESS": "SAML settings updated successfully", + "ERROR": "Failed to update SAML settings", + "ERROR_LOADING": "Failed to load SAML settings", + "DISABLED": "SAML settings disabled successfully" + }, + "VALIDATION": { + "REQUIRED_FIELDS": "SSO URL, Identity Provider Entity ID, and Certificate are required fields", + "SSO_URL_ERROR": "Please enter a valid SSO URL", + "CERTIFICATE_ERROR": "Certificate is required", + "IDP_ENTITY_ID_ERROR": "Identity Provider Entity ID is required" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade to an Enterprise plan to access SAML single sign-on and other advanced security features.", + "ASK_ADMIN": "Por favor, entre em contato com o administrador para atualização." + }, + "PAYWALL": { + "TITLE": "Upgrade to enable SAML SSO", + "AVAILABLE_ON": "The SAML SSO feature is only available in the Enterprise plans.", + "UPGRADE_PROMPT": "Upgrade your plan to get access to SAML single sign-on and other advanced features.", + "UPGRADE_NOW": "Fazer upgrade agora", + "CANCEL_ANYTIME": "Pode alterar ou cancelar o plano a qualquer momento" + }, + "ATTRIBUTE_MAPPING": { + "TITLE": "SAML Attribute Setup", + "DESCRIPTION": "The following attribute mappings must be configured in your identity provider" + }, + "INFO_SECTION": { + "TITLE": "Service Provider Information", + "TOOLTIP": "Copy these values and configure them in your Identity Provider to establish the SAML connection" + } + } + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Não conseguimos encontrar nenhuma conta do Chatwoot. Por favor, crie uma nova conta para continuar.", + "NEW_ACCOUNT": "Nova conta", + "SELECTOR_SUBTITLE": "Criar uma nova conta", + "API": { + "SUCCESS_MESSAGE": "Conta criada com sucesso", + "EXIST_MESSAGE": "Esta conta já existe", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot, por favor tente novamente mais tarde" + }, + "FORM": { + "NAME": { + "LABEL": "Nome da empresa", + "PLACEHOLDER": "Wayne Enterprises" + }, + "SUBMIT": "submeter", + "CANCEL": "Cancelar" + } + }, + "KEYBOARD_SHORTCUTS": { + "TOGGLE_MODAL": "Ver todos os atalhos", + "TITLE": { + "OPEN_CONVERSATION": "Abrir conversa", + "RESOLVE_AND_NEXT": "Resolver e passar para a próxima", + "NAVIGATE_DROPDOWN": "Navegar pelos itens a seguir", + "RESOLVE_CONVERSATION": "Resolver conversa", + "GO_TO_CONVERSATION_DASHBOARD": "Ir para o painel de conversação", + "ADD_ATTACHMENT": "Adicionar anexo", + "GO_TO_CONTACTS_DASHBOARD": "Ir para o painel de contatos", + "TOGGLE_SIDEBAR": "Ativar/Desativar barra lateral", + "GO_TO_REPORTS_SIDEBAR": "Ir para barra lateral de Relatórios", + "MOVE_TO_NEXT_TAB": "Mover para próximo separador da lista de conversas", + "GO_TO_SETTINGS": "Ir para as configurações", + "SWITCH_TO_PRIVATE_NOTE": "Alterar para nota privada", + "SWITCH_TO_REPLY": "Mudar para resposta", + "TOGGLE_SNOOZE_DROPDOWN": "Ativar/desativar suspensos" + } + }, + "ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent assignment", + "DESCRIPTION": "Define policies to effectively manage workload and route conversations based on the needs of inboxes and agents. Learn more here" + }, + "ASSIGNMENT_POLICY": { + "TITLE": "Assignment policy", + "DESCRIPTION": "Manage how conversations get assigned in inboxes.", + "FEATURES": [ + "Assign by conversations evenly or by available capacity", + "Add fair distribution rules to avoid overloading any agent", + "Add inboxes to a policy - one policy per inbox" + ] + }, + "AGENT_CAPACITY_POLICY": { + "TITLE": "Agent capacity policy", + "DESCRIPTION": "Manage workload for agents.", + "FEATURES": [ + "Define maximum conversations per inbox", + "Create exceptions based on labels and time", + "Add agents to a policy - one policy per agent" + ] + } + }, + "AGENT_ASSIGNMENT_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Assignment policy", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "ORDER": "Order", + "PRIORITY": "Prioridade", + "ACTIVE": "Ativa", + "INACTIVE": "Inactive", + "POPOVER": "Added inboxes", + "EDIT": "Editar" + }, + "NO_RECORDS_FOUND": "No assignment policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create assignment policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Assignment policy created successfully", + "ERROR_MESSAGE": "Failed to create assignment policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit assignment policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_INBOX_DIALOG": { + "TITLE": "Add inbox", + "DESCRIPTION": "{inboxName} inbox is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Assignment policy updated successfully", + "ERROR_MESSAGE": "Failed to update assignment policy" + }, + "INBOX_API": { + "ADD": { + "SUCCESS_MESSAGE": "Inbox added to policy successfully", + "ERROR_MESSAGE": "Failed to add inbox to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Inbox removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove inbox from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Descrição:", + "PLACEHOLDER": "Inserir descrição" + }, + "STATUS": { + "LABEL": "Estado:", + "PLACEHOLDER": "Selecionar estado", + "ACTIVE": "Policy is active", + "INACTIVE": "Policy is inactive" + }, + "ASSIGNMENT_ORDER": { + "LABEL": "Assignment order", + "ROUND_ROBIN": { + "LABEL": "Round robin", + "DESCRIPTION": "Assign conversations evenly among agents." + }, + "BALANCED": { + "LABEL": "Balanced", + "DESCRIPTION": "Assign conversations based on available capacity." + } + }, + "ASSIGNMENT_PRIORITY": { + "LABEL": "Assignment priority", + "EARLIEST_CREATED": { + "LABEL": "Earliest created", + "DESCRIPTION": "The conversation that was created first gets assigned first." + }, + "LONGEST_WAITING": { + "LABEL": "Longest waiting", + "DESCRIPTION": "The conversation waiting the longest gets assigned first." + } + }, + "FAIR_DISTRIBUTION": { + "LABEL": "Fair distribution policy", + "DESCRIPTION": "Set the maximum number of conversations that can be assigned per agent within a time window to avoid overloading any one agent. This required field defaults to 100 conversations per hour.", + "INPUT_MAX": "Assign max", + "DURATION": "Conversations per agent in every" + }, + "INBOXES": { + "LABEL": "Added inboxes", + "DESCRIPTION": "Add inboxes for which this policy will be applicable.", + "ADD_BUTTON": "Add inbox", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select inboxes to add", + "ADD_BUTTON": "Adicionar" + }, + "EMPTY_STATE": "No inboxes added to this policy, add an inbox to get started", + "API": { + "SUCCESS_MESSAGE": "Inbox successfully added to policy", + "ERROR_MESSAGE": "Failed to add inbox to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Assignment policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete assignment policy" + } + }, + "AGENT_CAPACITY_POLICY": { + "INDEX": { + "HEADER": { + "TITLE": "Agent capacity", + "CREATE_POLICY": "New policy" + }, + "CARD": { + "POPOVER": "Added agents", + "EDIT": "Editar" + }, + "NO_RECORDS_FOUND": "No agent capacity policies found" + }, + "CREATE": { + "HEADER": { + "TITLE": "Create agent capacity policy" + }, + "CREATE_BUTTON": "Create policy", + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy created successfully", + "ERROR_MESSAGE": "Failed to create agent capacity policy" + } + }, + "EDIT": { + "HEADER": { + "TITLE": "Edit agent capacity policy" + }, + "EDIT_BUTTON": "Update policy", + "CONFIRM_ADD_AGENT_DIALOG": { + "TITLE": "Add agent", + "DESCRIPTION": "{agentName} is already linked to another policy. Are you sure you want to link it to this policy? It will be unlinked from the other policy.", + "CONFIRM_BUTTON_LABEL": "Continue", + "CANCEL_BUTTON_LABEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Agent capacity policy updated successfully", + "ERROR_MESSAGE": "Failed to update agent capacity policy" + }, + "AGENT_API": { + "ADD": { + "SUCCESS_MESSAGE": "Agent added to policy successfully", + "ERROR_MESSAGE": "Failed to add agent to policy" + }, + "REMOVE": { + "SUCCESS_MESSAGE": "Agent removed from policy successfully", + "ERROR_MESSAGE": "Failed to remove agent from policy" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Policy name:", + "PLACEHOLDER": "Enter policy name" + }, + "DESCRIPTION": { + "LABEL": "Descrição:", + "PLACEHOLDER": "Inserir descrição" + }, + "INBOX_CAPACITY_LIMIT": { + "LABEL": "Inbox capacity limits", + "ADD_BUTTON": "Add inbox", + "FIELD": { + "SELECT_INBOX": "Select inbox", + "MAX_CONVERSATIONS": "Max conversations", + "SET_LIMIT": "Set limit" + }, + "EMPTY_STATE": "No inbox limit set" + }, + "EXCLUSION_RULES": { + "LABEL": "Exclusion rules", + "DESCRIPTION": "Conversations that satisfy the following conditions would not count towards agent capacity", + "TAGS": { + "LABEL": "Exclude conversations tagged with specific labels", + "ADD_TAG": "add tag", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select tags to add" + }, + "EMPTY_STATE": "No tags added to this policy." + }, + "DURATION": { + "LABEL": "Exclude conversations older than a specified duration", + "PLACEHOLDER": "Set time" + } + }, + "USERS": { + "LABEL": "Assigned agents", + "DESCRIPTION": "Add agents for which this policy will be applicable.", + "ADD_BUTTON": "Add agent", + "DROPDOWN": { + "SEARCH_PLACEHOLDER": "Search and select agents to add", + "ADD_BUTTON": "Adicionar" + }, + "EMPTY_STATE": "No agents added", + "API": { + "SUCCESS_MESSAGE": "Agent successfully added to policy", + "ERROR_MESSAGE": "Failed to add agent to policy" + } + } + }, + "DELETE_POLICY": { + "SUCCESS_MESSAGE": "Agent capacity policy deleted successfully", + "ERROR_MESSAGE": "Failed to delete agent capacity policy" + } + }, + "DELETE_POLICY": { + "TITLE": "Delete policy", + "DESCRIPTION": "Are you sure you want to delete this policy? This action cannot be undone.", + "CONFIRM_BUTTON_LABEL": "Excluir", + "CANCEL_BUTTON_LABEL": "Cancelar" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/signup.json b/app/javascript/dashboard/i18n/locale/pt/signup.json new file mode 100644 index 0000000..14aaa88 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/signup.json @@ -0,0 +1,49 @@ +{ + "REGISTER": { + "TRY_WOOT": "Criar uma conta", + "TITLE": "Cadastrar", + "TESTIMONIAL_HEADER": "Tudo que precisa é um passo para avançar", + "TESTIMONIAL_CONTENT": "Está a um passo de fidelizar os seus clientes, mantê-los e encontrar novos.", + "TERMS_ACCEPT": "Ao criar uma conta, concorda com os nossos Termos & Condições e Política de privacidade", + "OAUTH": { + "GOOGLE_SIGNUP": "Inscrever-se com conta Google" + }, + "COMPANY_NAME": { + "LABEL": "Nome da empresa", + "PLACEHOLDER": "Enter your company name. eg: Wayne Enterprises", + "ERROR": "Company name is too short" + }, + "FULL_NAME": { + "LABEL": "Nome completo", + "PLACEHOLDER": "Digite o seu nome completo, por exemplo: António Almeida", + "ERROR": "O nome completo é muito pequeno" + }, + "EMAIL": { + "LABEL": "E-mail de trabalho", + "PLACEHOLDER": "Enter your work email address. E.g., bruce{'@'}wayne{'.'}enterprises", + "ERROR": "Please enter a valid work email address" + }, + "PASSWORD": { + "LABEL": "Palavra-passe", + "PLACEHOLDER": "Palavra-passe", + "ERROR": "A senha é muito curta", + "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character", + "REQUIREMENTS_LENGTH": "At least 6 characters long", + "REQUIREMENTS_UPPERCASE": "At least one uppercase letter", + "REQUIREMENTS_LOWERCASE": "At least one lowercase letter", + "REQUIREMENTS_NUMBER": "At least one number", + "REQUIREMENTS_SPECIAL": "At least one special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirmar senha", + "PLACEHOLDER": "Confirmar senha", + "ERROR": "As senhas não coincidem." + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successful", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot, por favor tente novamente mais tarde" + }, + "SUBMIT": "Criar conta", + "HAVE_AN_ACCOUNT": "Já tem uma conta?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/sla.json b/app/javascript/dashboard/i18n/locale/pt/sla.json new file mode 100644 index 0000000..dfd5631 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/sla.json @@ -0,0 +1,108 @@ +{ + "SLA": { + "HEADER": "Service Level Agreements", + "ADD_ACTION": "Adicionar SLA", + "ADD_ACTION_LONG": "Criar uma nova Política de SLA", + "DESCRIPTION": "Service Level Agreements (SLA) são contratos que definem expectativas claras entre a sua equipa e os clientes. Estabelecem normas para tempos de resposta e de resolução, criando um quadro de responsabilização e garantindo uma experiência coerente e de qualidade.", + "LEARN_MORE": "Saiba mais sobre SLA", + "LOADING": "A carregar SLAs", + "PAYWALL": { + "TITLE": "Upgrade para criar SLAs", + "AVAILABLE_ON": "O recurso SLA apenas está disponível nos planos Business e Enterprise.", + "UPGRADE_PROMPT": "Faça upgrade do seu plano para obter acesso a recursos avançados, como gestão de equipas, automações, atributos personalizados e muito mais.", + "UPGRADE_NOW": "Fazer upgrade agora", + "CANCEL_ANYTIME": "Pode alterar ou cancelar o plano a qualquer momento" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "O recurso SLA apenas está disponível nos planos pagos.", + "UPGRADE_PROMPT": "Faça upgrade para um plano pago para obter recursos avançados, como logs de auditoria, capacidade de agentes e muito mais.", + "ASK_ADMIN": "Por favor, entre em contato com o administrador para atualização." + }, + "LIST": { + "404": "Não há SLAs disponíveis nesta conta.", + "EMPTY": { + "TITLE_1": "Empresa P0", + "DESC_1": "Questões levantadas pelos clientes empresariais que requerem atenção imediata.", + "TITLE_2": "Empresa P1", + "DESC_2": "Questões levantadas pelos clientes empresariais, que têm de ser rapidamente reconhecidas." + }, + "BUSINESS_HOURS_ON": "Horário comercial ativado", + "BUSINESS_HOURS_OFF": "Horário comercial desativado", + "RESPONSE_TYPES": { + "FRT": "Limite de tempo da primeira resposta", + "NRT": "Limite de tempo da próxima resposta", + "RT": "Limite de tempo de resolução", + "SHORT_HAND": { + "FRT": "FRT", + "NRT": "NRT", + "RT": "RT" + } + } + }, + "FORM": { + "NAME": { + "LABEL": "Nome SLA", + "PLACEHOLDER": "Nome SLA", + "REQUIRED_ERROR": "Necessário nome de SLA", + "MINIMUM_LENGTH_ERROR": "O tamanho mínimo obrigatório é 2", + "VALID_ERROR": "Apenas são permitidos Alfabetos, Números, Hífen e Underscores" + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "SLA para clientes premium" + }, + "FIRST_RESPONSE_TIME": { + "LABEL": "Primeiro tempo de resposta", + "PLACEHOLDER": "5" + }, + "NEXT_RESPONSE_TIME": { + "LABEL": "Próximo tempo de resposta", + "PLACEHOLDER": "5" + }, + "RESOLUTION_TIME": { + "LABEL": "Tempo de resolução", + "PLACEHOLDER": "60" + }, + "BUSINESS_HOURS": { + "LABEL": "Horário comercial", + "PLACEHOLDER": "Apenas durante o horário de trabalho" + }, + "THRESHOLD_TIME": { + "INVALID_FORMAT_ERROR": "Limite deve ser um número e maior que zero" + }, + "EDIT": "Alterar", + "CREATE": "Criar", + "DELETE": "excluir", + "CANCEL": "cancelar" + }, + "ADD": { + "TITLE": "Adicionar SLA", + "DESC": "Acordos para um ótimo serviço!", + "API": { + "SUCCESS_MESSAGE": "SLA adicionado", + "ERROR_MESSAGE": "Ocorreu um erro, por favor tente novamente" + } + }, + "DELETE": { + "TITLE": "Apagar SLA", + "API": { + "SUCCESS_MESSAGE": "SLA apagado", + "ERROR_MESSAGE": "Ocorreu um erro, por favor tente novamente" + }, + "CONFIRM": { + "TITLE": "Confirmar Exclusão", + "MESSAGE": "Tem a certeza que quer apagar ", + "YES": "Sim, excluir ", + "NO": "Não, Manter " + } + }, + "EVENTS": { + "TITLE": "SLA Perdidas", + "FRT": "Primeiro tempo de resposta", + "NRT": "Tempo para a próxima resposta", + "RT": "Tempo de resolução", + "SHOW_MORE": "{count} mais", + "HIDE": "Ocultar {count} linhas" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/teamsSettings.json b/app/javascript/dashboard/i18n/locale/pt/teamsSettings.json new file mode 100644 index 0000000..b50283c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/teamsSettings.json @@ -0,0 +1,121 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Criar nova equipa", + "HEADER": "Equipas", + "LOADING": "Fetching teams", + "DESCRIPTION": "Teams allow you to organize agents into groups based on their responsibilities. An agent can belong to multiple teams. When working collaboratively, you can assign conversations to specific teams.", + "LEARN_MORE": "Learn more about teams", + "LIST": { + "404": "Não há equipas configuradas para esta conta.", + "EDIT_TEAM": "Editar equipa", + "NONE": "Nenhuma" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Criar uma nova equipa", + "DESC": "Adicione um título e uma descrição a sua nova equipa." + }, + "AGENTS": { + "BUTTON_TEXT": "Adicionar agentes à equipa", + "TITLE": "Adicionar agentes à equipa - {teamName}", + "DESC": "Adicione Agentes à sua nova equipa. Isso é importante para que os Agentes consigam colaborar em conversas e para que sejam notificados sobre novos eventos." + }, + "WIZARD_CREATE": { + "TITLE": "Criar", + "BODY": "Crie uma nova equipa de agentes." + }, + "WIZARD_ADD_AGENTS": { + "TITLE": "Adicionar agentes", + "BODY": "Adicionar agentes à equipa." + }, + "WIZARD_FINISH": { + "TITLE": "Terminar", + "BODY": "Está tudo preparado para começar!" + } + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Editar os detalhes da sua equipa", + "DESC": "Editar o título e a descrição da sua equipa.", + "BUTTON_TEXT": "Atualizar a equipa" + }, + "AGENTS": { + "BUTTON_TEXT": "Atualizar agentes da equipa", + "TITLE": "Adicionar agentes à equipa - {teamName}", + "DESC": "Adicionar agentes à sua nova equipa. Todos os agentes adicionados serão notificados quando uma conversa for atribuída a esta equipa." + }, + "EDIT_WIZARD_DETAILS": { + "TITLE": "Detalhes da equipa", + "ROUTE": "configuracoes_editar_equipa", + "BODY": "Alterar nome, descrição e outros detalhes." + }, + "EDIT_WIZARD_AGENTS": { + "TITLE": "Editar agentes", + "ROUTE": "configuracoes_equipa-editar_menbros", + "BODY": "Editar os Agentes da sua equipa." + }, + "EDIT_WIZARD_FINISH": { + "TITLE": "Terminar", + "ROUTE": "terminar_configuracao_equipas", + "BODY": "Está tudo preparado para começar!" + } + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Não foi possível guardar os detalhes da equipa. Tente novamente." + }, + "AGENTS": { + "AGENT": "AGENTE", + "EMAIL": "E-mail:", + "BUTTON_TEXT": "Adicionar agentes", + "ADD_AGENTS": "Acrescentando Agentes à sua equipa...", + "SELECT": "escolher", + "SELECT_ALL": "escolher todos os agentes", + "SELECTED_COUNT": "{selected} de {total} agentes escolhidos." + }, + "ADD": { + "TITLE": "Adicionar agentes à equipa - {teamName}", + "DESC": "Acrescente agentes à sua recém-criada equipa. É importante para que os Agentes consigam colaborar em conversas e para que sejam notificados sobre novos eventos.", + "SELECT": "escolher", + "SELECT_ALL": "escolher todos os agentes", + "SELECTED_COUNT": "{selected} de {total} agentes escolhidos.", + "BUTTON_TEXT": "Adicionar agentes", + "AGENT_VALIDATION_ERROR": "Selecione ao menos um agente." + }, + "FINISH": { + "TITLE": "A sua equipa está pronta!", + "MESSAGE": "Agora, já podem trabalhar em equipa nas novas conversas. Feliz apoio ", + "BUTTON_TEXT": "Finalizar" + }, + "DELETE": { + "BUTTON_TEXT": "excluir", + "API": { + "SUCCESS_MESSAGE": "Equipa apagada com sucesso.", + "ERROR_MESSAGE": "Não foi possível apagar a equipa. Tente novamente." + }, + "CONFIRM": { + "TITLE": "Are you sure you want to delete the team?", + "PLACE_HOLDER": "Por favor, digite {teamName} para confirmar", + "MESSAGE": "Ao apagar a equipa irá remover a atribuição de novas conversas a essa equipa.", + "YES": "excluir ", + "NO": "cancelar" + } + }, + "SETTINGS": "Confirgurações", + "FORM": { + "UPDATE": "Atualizar a equipa", + "CREATE": "Criar uma equipa", + "NAME": { + "LABEL": "Nome da equipa", + "PLACEHOLDER": "Exemplo: Comercial, Assistência, Administrativo" + }, + "DESCRIPTION": { + "LABEL": "Descrição da equipa", + "PLACEHOLDER": "Breve descrição sobre a equipa." + }, + "AUTO_ASSIGN": { + "LABEL": "Permitir a atribuição automática para esta equipa." + }, + "SUBMIT_CREATE": "Criar uma equipa" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/webhooks.json b/app/javascript/dashboard/i18n/locale/pt/webhooks.json new file mode 100644 index 0000000..ae9c708 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Configurações do Webhook" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/pt/whatsappTemplates.json new file mode 100644 index 0000000..ae68788 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/whatsappTemplates.json @@ -0,0 +1,47 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Template do WhatsApp", + "SUBTITLE": "Selecione o template do whatsapp que você deseja enviar", + "TEMPLATE_SELECTED_SUBTITLE": "Configure template: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Buscar templates", + "NO_TEMPLATES_FOUND": "Nenhum template encontrado para", + "HEADER": "Header", + "BODY": "Body", + "FOOTER": "Footer", + "BUTTONS": "Buttons", + "CATEGORY": "Categoria", + "MEDIA_CONTENT": "Media Content", + "MEDIA_CONTENT_FALLBACK": "media content", + "NO_TEMPLATES_AVAILABLE": "No WhatsApp templates available. Click refresh to sync templates from WhatsApp.", + "REFRESH_BUTTON": "Refresh templates", + "REFRESH_SUCCESS": "Templates refresh initiated. It may take a couple of minutes to update.", + "REFRESH_ERROR": "Failed to refresh templates. Please try again.", + "LABELS": { + "LANGUAGE": "Idioma", + "TEMPLATE_BODY": "Corpo do Template", + "CATEGORY": "Categoria" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variáveis", + "LANGUAGE": "Idioma", + "CATEGORY": "Categoria", + "VARIABLE_PLACEHOLDER": "Digite o valor {variable}", + "GO_BACK_LABEL": "Voltar", + "SEND_MESSAGE_LABEL": "Enviar mensagem", + "FORM_ERROR_MESSAGE": "Preencha todas as variáveis antes de enviar", + "MEDIA_HEADER_LABEL": "{type} Header", + "OTP_CODE": "Enter 4-8 digit OTP", + "EXPIRY_MINUTES": "Enter expiry minutes", + "BUTTON_PARAMETERS": "Button Parameters", + "BUTTON_LABEL": "Button {index}", + "COUPON_CODE": "Enter coupon code (max 15 chars)", + "MEDIA_URL_LABEL": "Enter {type} URL", + "DOCUMENT_NAME_PLACEHOLDER": "Enter document filename (e.g., Invoice_2025.pdf)", + "BUTTON_PARAMETER": "Enter button parameter" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt/yearInReview.json b/app/javascript/dashboard/i18n/locale/pt/yearInReview.json new file mode 100644 index 0000000..c80fb3f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt/yearInReview.json @@ -0,0 +1,64 @@ +{ + "YEAR_IN_REVIEW": { + "TITLE": "Year in Review", + "LOADING": "Loading your year in review...", + "ERROR": "Failed to load year in review", + "CLOSE": "Fechar", + "CONVERSATIONS": { + "TITLE": "You have handled", + "SUBTITLE": "Conversas", + "FALLBACK": "This year wasn't about the numbers. It was about showing up.", + "COMPARISON": { + "0_50": "You showed up, and that's how every good inbox begins.", + "50_100": "You kept the replies flowing and the conversations alive.", + "100_500": "You handled serious volume and kept everything on track.", + "500_2000": "You kept things moving while the volume kept climbing.", + "2000_10000": "You ran high traffic through your inbox without breaking a sweat.", + "10000_PLUS": "That's a full city of customers knocking on your door. You made it look effortless." + } + }, + "BUSIEST_DAY": { + "TITLE": "Your busiest day was", + "MESSAGE": "{count} conversations that day.", + "COMPARISON": { + "0_5": "A warm-up lap that barely woke the inbox.", + "5_10": "Enough action to justify a second cup of coffee.", + "10_25": "Things got busy and the inbox stayed on its toes.", + "25_50": "A proper rush that barely broke a sweat.", + "50_100": "Controlled chaos, handled like a normal Tuesday.", + "100_500": "Absolute dumpster fire, somehow still shipping replies.", + "500_PLUS": "The inbox lost all chill and never slowed down." + } + }, + "PERSONALITY": { + "TITLE": "Your support personality is", + "MESSAGES": { + "SWIFT_HELPER": "You replied in {time} on average. Faster than most notifications.", + "QUICK_RESPONDER": "You replied in {time} on average. The inbox barely waited.", + "STEADY_SUPPORT": "You replied in {time} on average. Calm pace, solid replies.", + "THOUGHTFUL_ADVISOR": "You replied in {time} on average. Took the time to get it right." + } + }, + "THANK_YOU": { + "TITLE": "Congratulations on surviving the inbox of {year}.", + "MESSAGE": "Thank you for your incredible dedication to supporting customers throughout this year. Your hard work has made a real difference, and we're grateful to have you on this journey. Here's to making {nextYear} even better together!" + }, + "SHARE_MODAL": { + "TITLE": "Share Your Year in Review", + "PREPARING": "Preparing your image...", + "DOWNLOAD": "Descarregar", + "SHARE_TITLE": "My {year} Year in Review", + "SHARE_TEXT": "Check out my {year} Year in Review with Chatwoot!", + "BRANDING": "Made with Chatwoot" + }, + "BANNER": { + "TITLE": "Your {year} Year in Review is here", + "BUTTON": "See your impact" + }, + "NAVIGATION": { + "PREVIOUS": "Previous", + "NEXT": "Next", + "SHARE": "Share conversation" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/advancedFilters.json b/app/javascript/dashboard/i18n/locale/pt_BR/advancedFilters.json new file mode 100644 index 0000000..7958f4c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/advancedFilters.json @@ -0,0 +1,119 @@ +{ + "FILTER": { + "TITLE": "Filtrar conversas", + "SUBTITLE": "Adicione seus filtros abaixo e clique em 'Aplicar filtros' para reduzir a desordem na conversa.", + "EDIT_CUSTOM_FILTER": "Editar Pasta", + "CUSTOM_VIEWS_SUBTITLE": "Adicione ou remova filtros e atualize sua pasta.", + "ADD_NEW_FILTER": "Adicionar filtro", + "FILTER_DELETE_ERROR": "Ops! Parece que não podemos salvar nada! Por favor, adicione pelo menos um filtro para salvá-lo.", + "SUBMIT_BUTTON_LABEL": "Aplicar filtros", + "UPDATE_BUTTON_LABEL": "Atualizar pasta", + "CANCEL_BUTTON_LABEL": "Cancelar", + "CLEAR_BUTTON_LABEL": "Limpar filtros", + "FOLDER_LABEL": "Nome da pasta", + "FOLDER_QUERY_LABEL": "Consulta de Pasta", + "EMPTY_VALUE_ERROR": "Valor obrigatório.", + "TOOLTIP_LABEL": "Filtrar conversas", + "QUERY_DROPDOWN_LABELS": { + "AND": "E", + "OR": "OU" + }, + "INPUT_PLACEHOLDER": "Inserir valor", + "OPERATOR_LABELS": { + "equal_to": "Igual a", + "not_equal_to": "Diferente", + "does_not_contain": "Não contém", + "is_present": "Está presente", + "is_not_present": "Não está presente", + "is_greater_than": "É maior que", + "is_less_than": "É menor que", + "days_before": "É X dias antes", + "starts_with": "Começa com", + "equalTo": "Igual a", + "notEqualTo": "Diferente", + "contains": "Contém", + "doesNotContain": "Não contém", + "isPresent": "Está presente", + "isNotPresent": "Não está presente", + "isGreaterThan": "É maior que", + "isLessThan": "É menor que", + "daysBefore": "É X dias antes", + "startsWith": "Começa com" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "Verdadeiro", + "FALSE": "Falso" + }, + "ATTRIBUTES": { + "STATUS": "Status", + "ASSIGNEE_NAME": "Agente atribuído", + "INBOX_NAME": "Caixa de Entrada", + "TEAM_NAME": "Nome do Time", + "CONVERSATION_IDENTIFIER": "Identificador da conversa", + "CAMPAIGN_NAME": "Nome da campanha", + "LABELS": "Etiquetas", + "BROWSER_LANGUAGE": "Idioma do navegador", + "PRIORITY": "Prioridade", + "COUNTRY_NAME": "Nome do País", + "REFERER_LINK": "Link de origem", + "CUSTOM_ATTRIBUTE_LIST": "Lista", + "CUSTOM_ATTRIBUTE_TEXT": "Texto", + "CUSTOM_ATTRIBUTE_NUMBER": "Número", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Criado em", + "LAST_ACTIVITY": "Última atividade" + }, + "ERRORS": { + "VALUE_REQUIRED": "Valor obrigatório", + "ATTRIBUTE_KEY_REQUIRED": "A chave do atributo é necessária", + "FILTER_OPERATOR_REQUIRED": "Operador do filtro é necessário", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "O valor deve ser entre 1 e 998" + }, + "GROUPS": { + "STANDARD_FILTERS": "Filtros padrão", + "ADDITIONAL_FILTERS": "Filtros adicionais", + "CUSTOM_ATTRIBUTES": "Atributos personalizados" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Você quer salvar este filtro?", + "LABEL": "Nomear este filtro", + "PLACEHOLDER": "Nomeie seu filtro para referenciá-lo posteriormente.", + "ERROR_MESSAGE": "O nome é obrigatório.", + "SAVE_BUTTON": "Salvar filtro", + "CANCEL_BUTTON": "Cancelar", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Pasta criada com sucesso.", + "ERROR_MESSAGE": "Erro ao criar pasta." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segmento criado com sucesso.", + "ERROR_MESSAGE": "Erro ao criar segmento." + } + }, + "EDIT": { + "EDIT_BUTTON": "Alterar Pasta" + }, + "DELETE": { + "DELETE_BUTTON": "Excluir filtro", + "MODAL": { + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Tem certeza que deseja excluir o filtro?", + "YES": "Sim, excluir", + "NO": "Não, mantenha-o" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Pasta excluída com sucesso.", + "ERROR_MESSAGE": "Erro ao excluir pasta." + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segmento apagado com sucesso.", + "ERROR_MESSAGE": "Erro ao excluir segmento." + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/agentBots.json b/app/javascript/dashboard/i18n/locale/pt_BR/agentBots.json new file mode 100644 index 0000000..6292cee --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/agentBots.json @@ -0,0 +1,103 @@ +{ + "AGENT_BOTS": { + "HEADER": "Robôs", + "LOADING_EDITOR": "Carregando Editor...", + "DESCRIPTION": "Robôs agentes são como os membros mais fabulosos de seu time. Eles podem lidar com as pequenas coisas, assim você pode focar nas coisas que importam. Dê uma chance a eles. Você pode gerenciar seus robôs a partir desta página ou criar novos usando o botão 'Criar Robô'.", + "LEARN_MORE": "Aprenda sobre os robôs agentes", + "GLOBAL_BOT": "Robô do sistema", + "GLOBAL_BOT_BADGE": "Sistema", + "AVATAR": { + "SUCCESS_DELETE": "Avatar do robô excluído com sucesso", + "ERROR_DELETE": "Erro ao excluir o avatar do robô, tente novamente" + }, + "BOT_CONFIGURATION": { + "TITLE": "Selecione um robô de agente", + "DESC": "Atribua um Agente Robô à sua caixa de entrada. Eles podem lidar com as conversas iniciais e transferi-las para um agente humano quando necessário.", + "SUBMIT": "Atualizar", + "DISCONNECT": "Desconectar Robô", + "SUCCESS_MESSAGE": "Agente de bot atualizado com sucesso.", + "DISCONNECTED_SUCCESS_MESSAGE": "Bot desconectado com sucesso.", + "ERROR_MESSAGE": "Não foi possível atualizar o agente robô. Por favor, tente novamente mais tarde.", + "DISCONNECTED_ERROR_MESSAGE": "Não foi possível desconectar o agente robô. Por favor, tente novamente mais tarde.", + "SELECT_PLACEHOLDER": "Selecionar Robô" + }, + "ADD": { + "TITLE": "Criar Robô", + "CANCEL_BUTTON_TEXT": "Cancelar", + "API": { + "SUCCESS_MESSAGE": "Bot adicionado com sucesso.", + "ERROR_MESSAGE": "Não foi possível adicionar o agente robô! Por favor, tente novamente mais tarde." + } + }, + "LIST": { + "404": "Nenhum robô encontrado. Você pode criar um robô clicando no botão 'Criar Robô'.", + "LOADING": "Buscando robôs...", + "TABLE_HEADER": { + "DETAILS": "Detalhe do Robô", + "URL": "URL do Webhook" + } + }, + "DELETE": { + "BUTTON_TEXT": "Excluir", + "TITLE": "Deletar robô", + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Tem certeza que deseja excluir {name}?", + "YES": "Sim, excluir", + "NO": "Não, Mantenha" + }, + "API": { + "SUCCESS_MESSAGE": "Bot excluído com sucesso.", + "ERROR_MESSAGE": "Não foi possível excluir o robô. Por favor, tente novamente." + } + }, + "EDIT": { + "BUTTON_TEXT": "Alterar", + "TITLE": "Alterar Robô", + "API": { + "SUCCESS_MESSAGE": "Robô atualizado com sucesso.", + "ERROR_MESSAGE": "Não foi possível atualizar o robô. Por favor, tente novamente mais tarde." + } + }, + "ACCESS_TOKEN": { + "TITLE": "Token de acesso", + "DESCRIPTION": "Copie o token de acesso e salve-o de forma segura", + "COPY_SUCCESSFUL": "Token de acesso copiado para área de transferência", + "RESET_SUCCESS": "Token de acesso gerado novamente com sucesso", + "RESET_ERROR": "Não foi possível regerar o token de acesso. Por favor, tente novamente" + }, + "FORM": { + "AVATAR": { + "LABEL": "Avatar do robô" + }, + "NAME": { + "LABEL": "Nome do Robô", + "PLACEHOLDER": "Insira o nome do robô", + "REQUIRED": "O nome do Robô é obrigatório" + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "O que esse robô faz?" + }, + "WEBHOOK_URL": { + "LABEL": "URL do Webhook", + "PLACEHOLDER": "https://exemplo.com.br/webhook", + "REQUIRED": "URL Webhook é necessária" + }, + "ERRORS": { + "NAME": "O nome do Robô é obrigatório", + "URL": "URL Webhook é necessária", + "VALID_URL": "Digite uma URL válida começando com http:// ou https://" + }, + "CANCEL": "Cancelar", + "CREATE": "Criar um Robô", + "UPDATE": "Atualizar o Robô" + }, + "WEBHOOK": { + "DESCRIPTION": "Configure um robô de Webhook para integrar com seus serviços personalizados. O robô receberá e processará eventos de conversas e pode respondê-los." + }, + "TYPES": { + "WEBHOOK": "Webhook robô" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/agentMgmt.json b/app/javascript/dashboard/i18n/locale/pt_BR/agentMgmt.json new file mode 100644 index 0000000..87c112c --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/agentMgmt.json @@ -0,0 +1,124 @@ +{ + "AGENT_MGMT": { + "HEADER": "Agentes", + "HEADER_BTN_TXT": "Adicionar Agente", + "LOADING": "Buscando lista de agente", + "DESCRIPTION": "Um agente é um membro de seu time de atendimento ao cliente que pode visualizar e responder às mensagens de usuários. A lista abaixo mostra todos os agentes de sua conta.", + "LEARN_MORE": "Saiba mais sobre as funções do usuário", + "AGENT_TYPES": { + "ADMINISTRATOR": "Administrador", + "AGENT": "Agente" + }, + "LIST": { + "404": "Não existem agentes associados a esta conta", + "TITLE": "Gerenciar agentes de seu time", + "DESC": "Você pode adicionar e/ou remover agentes de um time.", + "NAME": "Nome", + "EMAIL": "E-mail", + "STATUS": "Status", + "ACTIONS": "Ações", + "VERIFIED": "Verificado", + "VERIFICATION_PENDING": "Verificação Pendente", + "AVAILABLE_CUSTOM_ROLE": "Permissões de função personalizada disponíveis" + }, + "ADD": { + "TITLE": "Adicionar agente a seu time", + "DESC": "Você pode adicionar pessoas que poderão acompanhar o suporte de suas caixas de entrada.", + "CANCEL_BUTTON_TEXT": "Cancelar", + "FORM": { + "NAME": { + "LABEL": "Nome do Agente", + "PLACEHOLDER": "Por favor, insira o nome do agente" + }, + "AGENT_TYPE": { + "LABEL": "Função", + "PLACEHOLDER": "Selecione uma função", + "ERROR": "É necessária uma função" + }, + "EMAIL": { + "LABEL": "Endereço de e-mail", + "PLACEHOLDER": "Por favor, insira um endereço de e-mail do agente" + }, + "SUBMIT": "Adicionar agente" + }, + "API": { + "SUCCESS_MESSAGE": "Agente adicionado com sucesso", + "EXIST_MESSAGE": "O E-mail do informado já está uso, por favor tente outro endereço de e-mail", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot, por favor tente novamente mais tarde" + } + }, + "DELETE": { + "BUTTON_TEXT": "Excluir", + "API": { + "SUCCESS_MESSAGE": "Agente excluído com sucesso", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot, por favor tente novamente mais tarde" + }, + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Você tem certeza que deseja excluir ", + "YES": "Sim, excluir ", + "NO": "Não, Mantenha " + } + }, + "EDIT": { + "TITLE": "Editar Agente", + "FORM": { + "NAME": { + "LABEL": "Nome do Agente", + "PLACEHOLDER": "Por favor, insira um nome do agente" + }, + "AGENT_TYPE": { + "LABEL": "Função", + "PLACEHOLDER": "Selecione uma função", + "ERROR": "É necessária uma função" + }, + "EMAIL": { + "LABEL": "Endereço de email", + "PLACEHOLDER": "Por favor, insira um endereço de e-mail do agente" + }, + "AGENT_AVAILABILITY": { + "LABEL": "Disponibilidade", + "PLACEHOLDER": "Por favor, selecione a disponibilidade do agente", + "ERROR": "A disponibilidade é necessária" + }, + "SUBMIT": "Editar agente" + }, + "BUTTON_TEXT": "Alterar", + "CANCEL_BUTTON_TEXT": "Cancelar", + "API": { + "SUCCESS_MESSAGE": "Agente atualizado com sucesso", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot, por favor tente novamente mais tarde" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Redefinir a senha", + "ADMIN_SUCCESS_MESSAGE": "Um e-mail com instruções de redefinição de senha foi enviado para o agente", + "SUCCESS_MESSAGE": "Senha do agente redefinida com sucesso", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot, por favor tente novamente mais tarde" + } + }, + "SEARCH": { + "NO_RESULTS": "Nenhum resultado encontrado." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "Nenhum", + "TITLE": { + "AGENT": "Selecionar agente", + "TEAM": "Selecionar time" + }, + "LIST": { + "NONE": "Nenhum" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "Nenhum agente encontrado", + "TEAM": "Nenhum time encontrado" + }, + "PLACEHOLDER": { + "AGENT": "Pesquisar agentes", + "TEAM": "Pesquisar times", + "INPUT": "Pesquisar por agentes" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/pt_BR/attributesMgmt.json new file mode 100644 index 0000000..71530e6 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/attributesMgmt.json @@ -0,0 +1,138 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Atributos Personalizados", + "HEADER_BTN_TXT": "Criar atributo personalizado", + "LOADING": "Buscando atributos personalizados", + "DESCRIPTION": "Um atributo personalizado controla detalhes adicionais sobre seus contatos ou conversas — como o plano de assinatura ou a data de sua primeira compra. Você pode adicionar diferentes tipos de atributos personalizados, como texto, listas ou números, para capturar as informações específicas que você precisa.", + "LEARN_MORE": "Saiba mais sobre atributos personalizados", + "ATTRIBUTE_MODELS": { + "CONVERSATION": "Conversas", + "CONTACT": "Contato" + }, + "ATTRIBUTE_TYPES": { + "TEXT": "Texto", + "NUMBER": "Número", + "LINK": "Link", + "DATE": "Data", + "LIST": "Lista", + "CHECKBOX": "Caixa de seleção" + }, + "ADD": { + "TITLE": "Adicionar atributo personalizado", + "SUBMIT": "Criar", + "CANCEL_BUTTON_TEXT": "Cancelar", + "FORM": { + "NAME": { + "LABEL": "Nome para exibição", + "PLACEHOLDER": "Digite um nome de exibição de atributo personalizado", + "ERROR": "O nome é obrigatório" + }, + "DESC": { + "LABEL": "Descrição", + "PLACEHOLDER": "Inserir descrição do atributo personalizado", + "ERROR": "Descrição obrigatória" + }, + "MODEL": { + "LABEL": "Aplica-se a", + "PLACEHOLDER": "Por favor, selecione um", + "ERROR": "O modelo é necessário" + }, + "TYPE": { + "LABEL": "Tipo", + "PLACEHOLDER": "Selecione um tipo", + "ERROR": "O tipo é obrigatório", + "LIST": { + "LABEL": "Listar valores", + "PLACEHOLDER": "Por favor, digite o valor e pressione Enter", + "ERROR": "Deve ter pelo menos um valor" + } + }, + "KEY": { + "LABEL": "Chave", + "PLACEHOLDER": "Digite a chave de atributo personalizada", + "ERROR": "A chave é obrigatória", + "IN_VALID": "Chave inválida" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Por favor, insira o padrão de expressão regular para atributo personalizado. (Opcional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Por favor, insira uma dica para o padrão de expressão regular. (Opcional)" + }, + "ENABLE_REGEX": { + "LABEL": "Habilitar validação do regex" + } + }, + "API": { + "SUCCESS_MESSAGE": "Atributo personalizado adicionado com sucesso!", + "ERROR_MESSAGE": "Não foi possível criar um atributo personalizado. Por favor, tente novamente mais tarde." + } + }, + "DELETE": { + "BUTTON_TEXT": "Excluir", + "API": { + "SUCCESS_MESSAGE": "Atributo personalizado excluído com sucesso.", + "ERROR_MESSAGE": "Não foi possível excluir o atributo personalizado. Tente novamente." + }, + "CONFIRM": { + "TITLE": "Tem certeza que deseja excluir - {attributeName}", + "PLACE_HOLDER": "Digite {attributeName} para confirmar", + "MESSAGE": "Excluindo removerá o atributo personalizado", + "YES": "Excluir ", + "NO": "Cancelar" + } + }, + "EDIT": { + "TITLE": "Editar atributo personalizado", + "UPDATE_BUTTON_TEXT": "Atualizar", + "TYPE": { + "LIST": { + "LABEL": "Listar valores", + "PLACEHOLDER": "Por favor, insira valores e pressione Enter" + } + }, + "API": { + "SUCCESS_MESSAGE": "Atributo personalizado atualizado com sucesso", + "ERROR_MESSAGE": "Houve um erro ao atualizar atributo personalizado, por favor, tente novamente" + } + }, + "TABS": { + "HEADER": "Atributos Personalizados", + "CONVERSATION": "Conversas", + "CONTACT": "Contato" + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nome", + "DESCRIPTION": "Descrição", + "TYPE": "Tipo", + "KEY": "Chave" + }, + "BUTTONS": { + "EDIT": "Alterar", + "DELETE": "Excluir" + }, + "EMPTY_RESULT": { + "404": "Não há atributos personalizados criados", + "NOT_FOUND": "Não há atributos personalizados configurados" + }, + "REGEX_PATTERN": { + "LABEL": "Regex Pattern", + "PLACEHOLDER": "Por favor, insira o padrão de expressão regular para atributo personalizado. (Opcional)" + }, + "REGEX_CUE": { + "LABEL": "Regex Cue", + "PLACEHOLDER": "Por favor, insira uma dica para o padrão de expressão regular. (Opcional)" + }, + "ENABLE_REGEX": { + "LABEL": "Habilitar validação da expressão regular" + } + }, + "BADGES": { + "PRE_CHAT": "Pré-chat", + "RESOLUTION": "Resolução" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/auditLogs.json b/app/javascript/dashboard/i18n/locale/pt_BR/auditLogs.json new file mode 100644 index 0000000..51996b6 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/auditLogs.json @@ -0,0 +1,77 @@ +{ + "AUDIT_LOGS": { + "HEADER": "Auditoria", + "HEADER_BTN_TXT": "Adicionar Logs de Auditoria", + "LOADING": "Buscando Logs de Auditoria", + "DESCRIPTION": "Logs de Auditoria mantêm um registro de atividades em sua conta, permitindo que você acompanhe e auditore sua conta, time ou serviços.", + "LEARN_MORE": "Saiba mais sobre os logs de auditoria", + "SEARCH_404": "Não existem itens correspondentes a esta consulta", + "SIDEBAR_TXT": "Logs de Auditoria
Os Logs de Auditoria são rastros para eventos e ações em um Sistema Chatwoot.
", + "LIST": { + "404": "Não há Logs de Auditoria disponíveis nesta conta.", + "TITLE": "Gerenciar Logs de Auditoria", + "DESC": "Logs de auditoria são rastros para eventos e ações em um Sistema de Chatwoot.", + "TABLE_HEADER": { + "ACTIVITY": "Usuário", + "TIME": "Ação", + "IP_ADDRESS": "Endereço IP" + } + }, + "API": { + "SUCCESS_MESSAGE": "AuditLogs recuperados com sucesso", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot, por favor tente novamente mais tarde" + }, + "DEFAULT_USER": "Sistema", + "AUTOMATION_RULE": { + "ADD": "{agentName} nova regra de automação criada (#{id})", + "EDIT": "{agentName} atualizou regra de automação (#{id})", + "DELETE": "{agentName} excluiu uma regra de automação (#{id})" + }, + "ACCOUNT_USER": { + "ADD": "{agentName} Convidou {invitee} para sua conta como {role}", + "EDIT": { + "SELF": "{agentName} Alterou seu {attributes} para {values}", + "OTHER": "{agentName} Alterou {attributes} de {user} para {values}", + "DELETED": "{agentName} alterou {attributes} de um usuário excluído para {values}" + } + }, + "INBOX": { + "ADD": "{agentName} criou uma caixa de entrada (#{id})", + "EDIT": "{agentName} atualizou uma caixa de entrada (#{id})", + "DELETE": "{agentName} excluiu uma caixa de entrada (#{id})" + }, + "WEBHOOK": { + "ADD": "{agentName} criou um webhook (##{id})", + "EDIT": "{agentName} atualizou um webhook (#{id})", + "DELETE": "{agentName} excluiu um webhook (#{id})" + }, + "USER_ACTION": { + "SIGN_IN": "{agentName} Se conectou", + "SIGN_OUT": "{agentName} Se desconectou" + }, + "TEAM": { + "ADD": "{agentName} criou um time (#{id})", + "EDIT": "{agentName} atualizou um time (#{id})", + "DELETE": "{agentName} excluiu um time (#{id})" + }, + "MACRO": { + "ADD": "{agentName} criou uma nova macro (#{id})", + "EDIT": "{agentName} atualizou uma macro (#{id})", + "DELETE": "{agentName} excluiu uma macro (#{id})" + }, + "INBOX_MEMBER": { + "ADD": "{agentName} adicionou {user} à caixa de entrada (#{inbox_id})", + "REMOVE": "{agentName} removeu {user} da caixa de entrada (#{inbox_id})" + }, + "TEAM_MEMBER": { + "ADD": "{agentName} adicionou {user} ao time (#{team_id})", + "REMOVE": "{agentName} removeu {user} do time (#{team_id})" + }, + "ACCOUNT": { + "EDIT": "O {agentName} atualizou a configuração da conta (#{id})" + }, + "CONVERSATION": { + "DELETE": "{agentName} excluiu a conversa #{id}" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/automation.json b/app/javascript/dashboard/i18n/locale/pt_BR/automation.json new file mode 100644 index 0000000..f7fd358 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/automation.json @@ -0,0 +1,184 @@ +{ + "AUTOMATION": { + "HEADER": "Automação", + "DESCRIPTION": "A automação pode substituir e simplificar processos existentes que requerem esforço manual, como a adição de etiquetas e a atribuição de conversas ao agente mais adequado. Isso permite que o time se concentre em seus pontos fortes e reduza o tempo gasto em tarefas rotineiras.", + "LEARN_MORE": "Aprenda mais sobre automação", + "HEADER_BTN_TXT": "Adicionar regra de automação", + "LOADING": "Buscando regras de automação", + "ADD": { + "TITLE": "Adicionar regra de automação", + "SUBMIT": "Criar", + "CANCEL_BUTTON_TEXT": "Cancelar", + "FORM": { + "NAME": { + "LABEL": "Nome da Regra", + "PLACEHOLDER": "Inserir nome da regra", + "ERROR": "O nome é obrigatório" + }, + "DESC": { + "LABEL": "Descrição", + "PLACEHOLDER": "Inserir descrição de regra", + "ERROR": "Descrição obrigatória" + }, + "EVENT": { + "LABEL": "Evento", + "PLACEHOLDER": "Por favor, selecione um", + "ERROR": "O campo evento é obrigatório" + }, + "CONDITIONS": { + "LABEL": "Condições" + }, + "ACTIONS": { + "LABEL": "Ações" + } + }, + "CONDITION_BUTTON_LABEL": "Adicionar condição", + "ACTION_BUTTON_LABEL": "Adicionar ação", + "API": { + "SUCCESS_MESSAGE": "Regra de automação adicionada com sucesso", + "ERROR_MESSAGE": "Não foi possível criar uma regra de automação, por favor, tente novamente mais tarde" + } + }, + "LIST": { + "TABLE_HEADER": { + "NAME": "Nome", + "DESCRIPTION": "Descrição", + "ACTIVE": "Ativo", + "CREATED_ON": "Criado em" + }, + "404": "Nenhuma regra de automação encontrada" + }, + "DELETE": { + "TITLE": "Excluir regra de automação", + "SUBMIT": "Excluir", + "CANCEL_BUTTON_TEXT": "Cancelar", + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Você tem certeza que deseja excluir? ", + "YES": "Sim, excluir ", + "NO": "Não, Mantenha " + }, + "API": { + "SUCCESS_MESSAGE": "Regra de automação excluída com sucesso", + "ERROR_MESSAGE": "Não foi possível excluir uma regra de automação, por favor, tente novamente mais tarde" + } + }, + "EDIT": { + "TITLE": "Editar regra de automação", + "SUBMIT": "Atualizar", + "CANCEL_BUTTON_TEXT": "Cancelar", + "API": { + "SUCCESS_MESSAGE": "Regra de automação atualizada com sucesso", + "ERROR_MESSAGE": "Não foi possível atualizar a regra de automação, por favor, tente novamente mais tarde" + } + }, + "CLONE": { + "TOOLTIP": "Duplicar", + "API": { + "SUCCESS_MESSAGE": "Automação duplicada com sucesso", + "ERROR_MESSAGE": "Não foi possível duplicar regra de automação, por favor, tente novamente mais tarde" + } + }, + "FORM": { + "EDIT": "Alterar", + "CREATE": "Criar", + "DELETE": "Excluir", + "CANCEL": "Cancelar", + "RESET_MESSAGE": "Alterar o evento irá redefinir as condições e eventos que você adicionou abaixo" + }, + "CONDITION": { + "DELETE_MESSAGE": "Você precisa ter pelo menos uma condição para salvar", + "CONTACT_CUSTOM_ATTR_LABEL": "Atributos personalizados do contato", + "CONVERSATION_CUSTOM_ATTR_LABEL": "Atributos personalizados da conversa" + }, + "ACTION": { + "DELETE_MESSAGE": "Você precisa ter pelo menos uma ação para salvar", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Escreva sua mensagem aqui", + "TEAM_DROPDOWN_PLACEHOLDER": "Selecione times", + "EMAIL_INPUT_PLACEHOLDER": "Insira o e-mail", + "URL_INPUT_PLACEHOLDER": "Insira a URL" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Ativar regra de automação", + "DEACTIVATION_TITLE": "Desativar regra de automação", + "ACTIVATION_DESCRIPTION": "Esta ação ativará a regra de automação '{automationName}'. Tem certeza que deseja continuar?", + "DEACTIVATION_DESCRIPTION": "Esta ação irá desativar a regra de automação '{automationName}'. Tem certeza que deseja continuar?", + "ACTIVATION_SUCCESFUL": "Regra de automação ativada com sucesso", + "DEACTIVATION_SUCCESFUL": "Regra de automação desativada com sucesso", + "ACTIVATION_ERROR": "Não foi possível ativar a automação, por favor tente novamente mais tarde", + "DEACTIVATION_ERROR": "Não foi possível desativar a automação, por favor, tente novamente mais tarde", + "CONFIRMATION_LABEL": "Sim", + "CANCEL_LABEL": "Não" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Não foi possível enviar o anexo, por favor, tente novamente", + "LABEL_IDLE": "Enviar Anexo", + "LABEL_UPLOADING": "Enviando...", + "LABEL_UPLOADED": "Upload feito com sucesso", + "LABEL_UPLOAD_FAILED": "Faha no envio" + }, + "ERRORS": { + "ATTRIBUTE_KEY_REQUIRED": "A chave do atributo é necessária", + "FILTER_OPERATOR_REQUIRED": "Operador do filtro é necessário", + "VALUE_REQUIRED": "Valor obrigatório", + "VALUE_MUST_BE_BETWEEN_1_AND_998": "O valor deve ser entre 1 e 998", + "ACTION_PARAMETERS_REQUIRED": "Os parâmetros de ação são necessários", + "ATLEAST_ONE_CONDITION_REQUIRED": "Pelo menos uma condição é necessária", + "ATLEAST_ONE_ACTION_REQUIRED": "Pelo menos uma ação é necessária" + }, + "NONE_OPTION": "Nenhuma", + "EVENTS": { + "CONVERSATION_CREATED": "Conversa Criada", + "CONVERSATION_UPDATED": "Conversa Atualizada", + "MESSAGE_CREATED": "Mensagem Criada", + "CONVERSATION_RESOLVED": "Conversa Resolvida", + "CONVERSATION_OPENED": "Conversa Aberta" + }, + "ACTIONS": { + "ASSIGN_AGENT": "Atribuir ao Agente", + "ASSIGN_TEAM": "Atribuir um Time", + "ADD_LABEL": "Adicionar uma Etiqueta", + "REMOVE_LABEL": "Remover uma Etiqueta", + "SEND_EMAIL_TO_TEAM": "Enviar um e-mail para o Time", + "SEND_EMAIL_TRANSCRIPT": "Enviar uma transcrição por e-mail", + "MUTE_CONVERSATION": "Silenciar Conversa", + "SNOOZE_CONVERSATION": "Adiar Conversa", + "RESOLVE_CONVERSATION": "Resolver Conversa", + "SEND_WEBHOOK_EVENT": "Enviar evento de Webhook", + "SEND_ATTACHMENT": "Enviar Anexo", + "SEND_MESSAGE": "Enviar Mensagem", + "ADD_PRIVATE_NOTE": "Adicionar uma Nota Privada", + "CHANGE_PRIORITY": "Alterar Prioridade", + "ADD_SLA": "Adicionar SLA", + "OPEN_CONVERSATION": "Abrir conversa" + }, + "MESSAGE_TYPES": { + "INCOMING": "Mensagem Recebida", + "OUTGOING": "Mensagem de Saída" + }, + "PRIORITY_TYPES": { + "NONE": "Nenhuma", + "LOW": "Baixa", + "MEDIUM": "Média", + "HIGH": "Alta", + "URGENT": "Urgente" + }, + "ATTRIBUTES": { + "MESSAGE_TYPE": "Tipo da Mensagem", + "MESSAGE_CONTAINS": "A mensagem contém", + "EMAIL": "E-mail", + "INBOX": "Caixa de Entrada", + "CONVERSATION_LANGUAGE": "Idioma da conversa", + "PHONE_NUMBER": "Número de Telefone", + "STATUS": "Status", + "BROWSER_LANGUAGE": "Idioma do navegador", + "MAIL_SUBJECT": "Assunto do e-mail", + "COUNTRY_NAME": "País/região", + "REFERER_LINK": "Link de origem", + "ASSIGNEE_NAME": "Agente atribuído", + "TEAM_NAME": "Time", + "PRIORITY": "Prioridade", + "LABELS": "Etiquetas" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/bulkActions.json b/app/javascript/dashboard/i18n/locale/pt_BR/bulkActions.json new file mode 100644 index 0000000..2f17d25 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/bulkActions.json @@ -0,0 +1,41 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "{conversationCount} conversas selecionadas", + "AGENT_SELECT_LABEL": "Selecionar agente", + "ASSIGN_CONFIRMATION_LABEL": "Você tem certeza que quer atribuir {conversationCount} {conversationLabel} para", + "UNASSIGN_CONFIRMATION_LABEL": "Você tem certeza que quer remover a atribuição de {conversationCount} {conversationLabel}?", + "GO_BACK_LABEL": "Voltar atrás", + "ASSIGN_LABEL": "Atribua", + "YES": "Sim", + "SEARCH_INPUT_PLACEHOLDER": "Pesquisar", + "ASSIGN_AGENT_TOOLTIP": "Atribuir Agente", + "ASSIGN_TEAM_TOOLTIP": "Atribuir time", + "ASSIGN_SUCCESFUL": "Conversas atribuídas com sucesso.", + "ASSIGN_FAILED": "Falha ao atribuir conversas. Por favor, tente novamente.", + "RESOLVE_SUCCESFUL": "Conversas resolvidas com sucesso.", + "RESOLVE_FAILED": "Falha ao resolver conversas. Por favor, tente novamente.", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversas visíveis nesta página só estão selecionadas.", + "AGENT_LIST_LOADING": "Carregando agentes", + "UPDATE": { + "CHANGE_STATUS": "Alterar status", + "SNOOZE_UNTIL": "Adiar", + "UPDATE_SUCCESFUL": "Status da conversa atualizado com sucesso.", + "UPDATE_FAILED": "Falha ao atualizar conversas. Por favor, tente novamente." + }, + "LABELS": { + "ASSIGN_LABELS": "Atribuir rótulo", + "NO_LABELS_FOUND": "Nenhuma etiqueta encontrada", + "ASSIGN_SELECTED_LABELS": "Atribuir etiquetas selecionadas", + "ASSIGN_SUCCESFUL": "Rótulos atribuídos com sucesso.", + "ASSIGN_FAILED": "Falha ao atribuir etiquetas. Por favor, tente novamente." + }, + "TEAMS": { + "TEAM_SELECT_LABEL": "Selecionar time", + "NONE": "Nenhum", + "NO_TEAMS_AVAILABLE": "Ainda não há times adicionados a esta conta.", + "ASSIGN_SELECTED_TEAMS": "Atribuir time selecionado.", + "ASSIGN_SUCCESFUL": "Times atribuídos com sucesso.", + "ASSIGN_FAILED": "Falha ao atribuir time. Por favor, tente novamente." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/campaign.json b/app/javascript/dashboard/i18n/locale/pt_BR/campaign.json new file mode 100644 index 0000000..c1637a4 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/campaign.json @@ -0,0 +1,214 @@ +{ + "CAMPAIGN": { + "LIVE_CHAT": { + "HEADER_TITLE": "Campanhas de chat ao vivo", + "NEW_CAMPAIGN": "Criar campanha", + "CARD": { + "STATUS": { + "ENABLED": "Ativado", + "DISABLED": "Desativado" + }, + "CAMPAIGN_DETAILS": { + "SENT_BY": "Enviado por", + "BOT": "Robôs", + "FROM": "De", + "URL": "URL:" + } + }, + "EMPTY_STATE": { + "TITLE": "Não há campanhas de chat ao vivo disponíveis", + "SUBTITLE": "Conecte-se com seus clientes usando mensagens proativas. Clique em 'Criar campanha' para começar." + }, + "CREATE": { + "TITLE": "Criar uma campanha de chat ao vivo", + "CANCEL_BUTTON_TEXT": "Cancelar", + "CREATE_BUTTON_TEXT": "Criar", + "FORM": { + "TITLE": { + "LABEL": "Título", + "PLACEHOLDER": "Por favor, digite o título da campanha", + "ERROR": "Título é obrigatório" + }, + "MESSAGE": { + "LABEL": "Mensagem", + "PLACEHOLDER": "Por favor, insira a mensagem da campanha", + "ERROR": "A mensagem é obrigatória" + }, + "INBOX": { + "LABEL": "Selecionar caixa de entrada", + "PLACEHOLDER": "Selecionar caixa de entrada", + "ERROR": "Caixa de entrada obrigatória" + }, + "SENT_BY": { + "LABEL": "Enviado por", + "PLACEHOLDER": "Por favor, selecione o remetente", + "ERROR": "Remetente é obrigatório" + }, + "END_POINT": { + "LABEL": "URL:", + "PLACEHOLDER": "Por favor, insira a URL", + "ERROR": "Por favor, insira uma URL válida" + }, + "TIME_ON_PAGE": { + "LABEL": "Tempo na página (segundos)", + "PLACEHOLDER": "Por favor insira a hora", + "ERROR": "Tempo na página é necessário" + }, + "OTHER_PREFERENCES": { + "TITLE": "Outras preferências", + "ENABLED": "Ativar campanha", + "TRIGGER_ONLY_BUSINESS_HOURS": "Ativar somente durante o horário comercial" + }, + "BUTTONS": { + "CREATE": "Criar", + "CANCEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Campanha do chat ao vivo criada com sucesso", + "ERROR_MESSAGE": "Houve um erro. Por favor, tente novamente." + } + } + }, + "EDIT": { + "TITLE": "Editar campanha de chat ao vivo", + "FORM": { + "API": { + "SUCCESS_MESSAGE": "Campanha do chat ao vivo atualizada com sucesso", + "ERROR_MESSAGE": "Houve um erro. Por favor, tente novamente." + } + } + } + }, + "SMS": { + "HEADER_TITLE": "Campanhas SMS", + "NEW_CAMPAIGN": "Criar campanha", + "EMPTY_STATE": { + "TITLE": "Não há campanhas SMS disponíveis", + "SUBTITLE": "Lance uma campanha de SMS para chegar diretamente aos seus clientes. Envie ofertas ou faça anúncios com facilidade. Clique em 'Criar campanha' para começar." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Concluído", + "SCHEDULED": "Agendada" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Enviado de", + "ON": "ativado" + } + }, + "CREATE": { + "TITLE": "Criar uma campanha de SMS", + "CANCEL_BUTTON_TEXT": "Cancelar", + "CREATE_BUTTON_TEXT": "Criar", + "FORM": { + "TITLE": { + "LABEL": "Título", + "PLACEHOLDER": "Por favor, digite o título da campanha", + "ERROR": "Título é obrigatório" + }, + "MESSAGE": { + "LABEL": "Mensagem", + "PLACEHOLDER": "Por favor, insira a mensagem da campanha", + "ERROR": "A mensagem é obrigatória" + }, + "INBOX": { + "LABEL": "Selecionar caixa de entrada", + "PLACEHOLDER": "Selecionar caixa de entrada", + "ERROR": "Caixa de entrada obrigatória" + }, + "AUDIENCE": { + "LABEL": "Público", + "PLACEHOLDER": "Selecionar etiquetas dos clientes", + "ERROR": "Público é necessário" + }, + "SCHEDULED_AT": { + "LABEL": "Horário agendado", + "PLACEHOLDER": "Por favor insira a hora", + "ERROR": "Horário agendado é necessário" + }, + "BUTTONS": { + "CREATE": "Criar", + "CANCEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Campanha SMS criada com sucesso", + "ERROR_MESSAGE": "Houve um erro. Por favor, tente novamente." + } + } + } + }, + "WHATSAPP": { + "HEADER_TITLE": "Campanhas do WhatsApp", + "NEW_CAMPAIGN": "Criar campanha", + "EMPTY_STATE": { + "TITLE": "Nenhuma campanha do WhatsApp está disponível", + "SUBTITLE": "Inicie uma campanha do WhatsApp para atingir seus clientes diretamente. Envie ofertas ou faça anúncios facilmente. Clique em \"Criar campanha\" para começar." + }, + "CARD": { + "STATUS": { + "COMPLETED": "Concluído", + "SCHEDULED": "Agendada" + }, + "CAMPAIGN_DETAILS": { + "SENT_FROM": "Enviado de", + "ON": "ativado" + } + }, + "CREATE": { + "TITLE": "Criar campanha do WhatsApp", + "CANCEL_BUTTON_TEXT": "Cancelar", + "CREATE_BUTTON_TEXT": "Criar", + "FORM": { + "TITLE": { + "LABEL": "Título", + "PLACEHOLDER": "Por favor, digite o título da campanha", + "ERROR": "Título é obrigatório" + }, + "INBOX": { + "LABEL": "Selecione uma caixa de entrada", + "PLACEHOLDER": "Selecione uma caixa de entrada", + "ERROR": "Caixa de entrada obrigatória" + }, + "TEMPLATE": { + "LABEL": "Modelo do WhatsApp", + "PLACEHOLDER": "Selecione um modelo", + "INFO": "Selecione um modelo para usar para esta campanha.", + "ERROR": "Modelo é obrigatório", + "PREVIEW_TITLE": "Processar {templateName}", + "LANGUAGE": "Idioma", + "CATEGORY": "Categorias", + "VARIABLES_LABEL": "Variáveis", + "VARIABLE_PLACEHOLDER": "Digite um valor para {variable}" + }, + "AUDIENCE": { + "LABEL": "Público", + "PLACEHOLDER": "Selecionar etiquetas dos clientes", + "ERROR": "Público é necessário" + }, + "SCHEDULED_AT": { + "LABEL": "Horário agendado", + "PLACEHOLDER": "Por favor insira a hora", + "ERROR": "Horário agendado é necessário" + }, + "BUTTONS": { + "CREATE": "Criar", + "CANCEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Campanha do WhatsApp criada com sucesso", + "ERROR_MESSAGE": "Houve um erro. Por favor, tente novamente." + } + } + } + }, + "CONFIRM_DELETE": { + "TITLE": "Você tem certeza que deseja excluir?", + "DESCRIPTION": "A ação de exclusão é permanente e não pode ser revertida.", + "CONFIRM": "Excluir", + "API": { + "SUCCESS_MESSAGE": "Campanha excluída com sucesso", + "ERROR_MESSAGE": "Houve um erro. Por favor, tente novamente." + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/pt_BR/cannedMgmt.json new file mode 100644 index 0000000..0f73cfd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/cannedMgmt.json @@ -0,0 +1,77 @@ +{ + "CANNED_MGMT": { + "HEADER": "Respostas Prontas", + "LEARN_MORE": "Saiba mais sobre respostas prontas", + "DESCRIPTION": "Respostas prontas são modelos de resposta pré-escritas que te ajudam a responder rapidamente a uma conversa. Os agentes podem digitar o caractere ' /' seguido pelo atalho para inserir uma resposta pronta durante uma conversa. ", + "HEADER_BTN_TXT": "Adicionar resposta pronta", + "LOADING": "Buscando respostas prontas...", + "SEARCH_404": "Não há itens correspondentes a esta consulta.", + "LIST": { + "404": "Não há respostas prontas disponíveis nesta conta.", + "TITLE": "Gerenciar Respostas Prontas", + "DESC": "Respostas Prontas são modelos de resposta predefinidas que podem ser usados para enviar respostas rapidamente durante conversas.", + "TABLE_HEADER": { + "SHORT_CODE": "Atalho", + "CONTENT": "Conteúdo", + "ACTIONS": "Ações" + } + }, + "ADD": { + "TITLE": "Adicionar resposta pronta", + "DESC": "Respostas Prontas são modelos de resposta predefinidas que podem ser usados para enviar respostas rapidamente durante conversas.", + "CANCEL_BUTTON_TEXT": "Cancelar", + "FORM": { + "SHORT_CODE": { + "LABEL": "Atalho", + "PLACEHOLDER": "Por favor, insira um atalho.", + "ERROR": "O atalho é obrigatório." + }, + "CONTENT": { + "LABEL": "Mensagem", + "PLACEHOLDER": "Por favor, escreva a mensagem que deseja salvar como um modelo para usar posteriormente.", + "ERROR": "A mensagem é obrigatória." + }, + "SUBMIT": "Enviar" + }, + "API": { + "SUCCESS_MESSAGE": "Resposta pronta adicionada com sucesso.", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot. Por favor, tente novamente." + } + }, + "EDIT": { + "TITLE": "Editar resposta pronta", + "CANCEL_BUTTON_TEXT": "Cancelar", + "FORM": { + "SHORT_CODE": { + "LABEL": "Atalho", + "PLACEHOLDER": "Por favor, insira um atalho.", + "ERROR": "O atalho é obrigatório." + }, + "CONTENT": { + "LABEL": "Mensagem", + "PLACEHOLDER": "Por favor, escreva a mensagem que deseja salvar como um modelo para usar posteriormente.", + "ERROR": "A mensagem é obrigatória." + }, + "SUBMIT": "Enviar" + }, + "BUTTON_TEXT": "Alterar", + "API": { + "SUCCESS_MESSAGE": "Resposta pronta atualizada com sucesso.", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot. Por favor, tente novamente." + } + }, + "DELETE": { + "BUTTON_TEXT": "Excluir", + "API": { + "SUCCESS_MESSAGE": "Resposta pronta excluída com sucesso.", + "ERROR_MESSAGE": "Não foi possível conectar ao servidor Woot. Por favor, tente novamente." + }, + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Você tem certeza que deseja excluir ", + "YES": "Sim, excluir ", + "NO": "Não, manter " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/chatlist.json b/app/javascript/dashboard/i18n/locale/pt_BR/chatlist.json new file mode 100644 index 0000000..30364e3 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/chatlist.json @@ -0,0 +1,142 @@ +{ + "CHAT_LIST": { + "LOADING": "Buscando conversas", + "LOAD_MORE_CONVERSATIONS": "Carregar mais conversas", + "EOF": "Todas as conversas carregadas 🎉", + "LIST": { + "404": "Não há conversas ativas neste grupo." + }, + "FAILED_TO_SEND": "Falha ao enviar", + "TAB_HEADING": "Conversas", + "MENTION_HEADING": "Menções", + "UNATTENDED_HEADING": "Não Atendidas", + "SEARCH": { + "INPUT": "Pesquisar pessoas, conversas, respostas salvas .." + }, + "FILTER_ALL": "Todos", + "ASSIGNEE_TYPE_TABS": { + "me": "Minhas", + "unassigned": "Não atribuídas", + "all": "Todos" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Abertas" + }, + "resolved": { + "TEXT": "Resolvidas" + }, + "pending": { + "TEXT": "Pendentes" + }, + "snoozed": { + "TEXT": "Adiadas" + }, + "all": { + "TEXT": "Todas" + } + }, + "VIEW_FILTER": "Visualizar", + "SORT_TOOLTIP_LABEL": "Ordenar conversas", + "CHAT_SORT": { + "STATUS": "Status", + "ORDER_BY": "Ordenar por" + }, + "CHAT_TIME_STAMP": { + "CREATED": { + "LATEST": "Criado", + "OLDEST": "Criado em:" + }, + "LAST_ACTIVITY": { + "NOT_ACTIVE": "Última atividade:", + "ACTIVE": "Última atividade" + } + }, + "SORT_ORDER_ITEMS": { + "last_activity_at_asc": { + "TEXT": "Última atividade: Mais antigas primeiro" + }, + "last_activity_at_desc": { + "TEXT": "Última atividade: Recentes primeiro" + }, + "created_at_desc": { + "TEXT": "Criado em: Recentes primeiro" + }, + "created_at_asc": { + "TEXT": "Criado em: Antigos primeiro" + }, + "priority_desc": { + "TEXT": "Prioridade: Altas primeiro" + }, + "priority_asc": { + "TEXT": "Prioridade: Baixas primeiro" + }, + "waiting_since_asc": { + "TEXT": "Resposta pendente: Longas primeiro" + }, + "waiting_since_desc": { + "TEXT": "Resposta pendente: Curtas primeiro" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Mensagem de imagem" + }, + "audio": { + "CONTENT": "Mensagem de áudio" + }, + "video": { + "CONTENT": "Mensagem de vídeo" + }, + "file": { + "CONTENT": "Arquivo anexo" + }, + "location": { + "CONTENT": "Localização" + }, + "ig_reel": { + "CONTENT": "Reels do Instagram" + }, + "fallback": { + "CONTENT": "compartilhou uma URL" + }, + "contact": { + "CONTENT": "Contato compartilhado" + }, + "embed": { + "CONTENT": "Conteúdo incorporado" + } + }, + "CHAT_SORT_BY_FILTER": { + "TITLE": "Ordenar conversas", + "DROPDOWN_TITLE": "Ordenar por", + "ITEMS": { + "LATEST": { + "NAME": "Última atividade em", + "LABEL": "Última atividade" + }, + "CREATED_AT": { + "NAME": "Criado em", + "LABEL": "Criado em" + }, + "LAST_USER_MESSAGE_AT": { + "NAME": "Última mensagem de usuário em", + "LABEL": "Última mensagem" + } + } + }, + "RECEIVED_VIA_EMAIL": "Recebido por e-mail", + "VIEW_TWEET_IN_TWITTER": "Ver tweet no Twitter", + "REPLY_TO_TWEET": "Responder a este tweet", + "LINK_TO_STORY": "Vá para o Story do Instagram", + "SENT": "Enviado com sucesso", + "READ": "Lido com sucesso", + "DELIVERED": "Entregue com sucesso", + "NO_MESSAGES": "Nova Mensagem", + "NO_CONTENT": "Nenhum conteúdo disponível", + "HIDE_QUOTED_TEXT": "Ocultar Texto Citado", + "SHOW_QUOTED_TEXT": "Mostrar Texto Citado", + "MESSAGE_READ": "Lida", + "SENDING": "Enviando" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/companies.json b/app/javascript/dashboard/i18n/locale/pt_BR/companies.json new file mode 100644 index 0000000..56f6856 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/companies.json @@ -0,0 +1,33 @@ +{ + "COMPANIES": { + "HEADER": "Empresas", + "SORT_BY": { + "LABEL": "Classificar por", + "OPTIONS": { + "NAME": "Nome", + "DOMAIN": "Domínio", + "CREATED_AT": "Criado em", + "CONTACTS_COUNT": "Contacts count" + } + }, + "ORDER": { + "LABEL": "Order", + "OPTIONS": { + "ASCENDING": "Crescente", + "DESCENDING": "Decrescente" + } + }, + "SEARCH_PLACEHOLDER": "Buscar empresas...", + "LOADING": "Carregando empresas...", + "UNNAMED": "Empresa sem nome", + "CONTACTS_COUNT": "{n} contato | {n} contatos", + "EMPTY_STATE": { + "TITLE": "Nenhuma empresa encontrada" + } + }, + "COMPANIES_LAYOUT": { + "PAGINATION_FOOTER": { + "SHOWING": "Mostrando {startItem} – {endItem} de {totalItems} empresa | Mostrando {startItem} – {endItem} de {totalItems} empresas" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/components.json b/app/javascript/dashboard/i18n/locale/pt_BR/components.json new file mode 100644 index 0000000..748b9ea --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/components.json @@ -0,0 +1,56 @@ +{ + "PAGINATION_FOOTER": { + "SHOWING": "Exibindo {startItem} - {endItem} de {totalItems} itens", + "CURRENT_PAGE_INFO": "{currentPage} de {totalPages} páginas" + }, + "COMBOBOX": { + "PLACEHOLDER": "Selecione uma opção...", + "EMPTY_SEARCH_RESULTS": "Nenhum item encontrado para o termo de pesquisa `{searchTerm}`", + "EMPTY_STATE": "Nenhum resultado encontrado.", + "SEARCH_PLACEHOLDER": "Pesquisar...", + "MORE": "+{count} mais" + }, + "DROPDOWN_MENU": { + "SEARCH_PLACEHOLDER": "Pesquisar...", + "EMPTY_STATE": "Nenhum resultado encontrado.", + "SEARCHING": "Procurando..." + }, + "DIALOG": { + "BUTTONS": { + "CANCEL": "Cancelar", + "CONFIRM": "Confirmar" + } + }, + "PHONE_INPUT": { + "SEARCH_PLACEHOLDER": "Selecione o país", + "ERROR": "O número de telefone deve estar vazio ou no formato E.164", + "DIAL_CODE_ERROR": "Por favor, selecione um código de discagem da lista" + }, + "THUMBNAIL": { + "AUTHOR": { + "NOT_AVAILABLE": "Autor indisponível" + } + }, + "BREADCRUMB": { + "ARIA_LABEL": "Mapa" + }, + "SWITCH": { + "TOGGLE": "Alternar botão" + }, + "LABEL": { + "TAG_BUTTON": "etiqueta" + }, + "FEATURE_SPOTLIGHT": { + "LEARN_MORE": "Saiba mais", + "WATCH_VIDEO": "Watch video" + }, + "DURATION_INPUT": { + "MINUTES": "Minutos", + "HOURS": "Horas", + "DAYS": "Dias", + "PLACEHOLDER": "Insira a duração" + }, + "CHANNEL_SELECTOR": { + "COMING_SOON": "Em breve!" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/contact.json b/app/javascript/dashboard/i18n/locale/pt_BR/contact.json new file mode 100644 index 0000000..57ac2ec --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/contact.json @@ -0,0 +1,655 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Indisponível", + "EMAIL_ADDRESS": "Endereço de e-mail", + "PHONE_NUMBER": "Número de telefone", + "IDENTIFIER": "Identificador", + "COPY_SUCCESSFUL": "Copiado para área de transferência com sucesso", + "COMPANY": "Empresa", + "LOCATION": "Localização", + "BROWSER_LANGUAGE": "Idioma do navegador", + "CONVERSATION_TITLE": "Detalhes da conversa", + "VIEW_PROFILE": "Visualizar Perfil", + "BROWSER": "Navegador", + "OS": "Sistema Operacional", + "INITIATED_FROM": "A partir de", + "INITIATED_AT": "Iniciado em", + "IP_ADDRESS": "Endereço IP", + "CREATED_AT_LABEL": "Criado", + "NEW_MESSAGE": "Nova Mensagem", + "CALL": "Chamada", + "CALL_INITIATED": "Efetuando chamada…", + "CALL_FAILED": "Não foi possível iniciar a chamada. Tente novamente.", + "VOICE_INBOX_PICKER": { + "TITLE": "Escolha uma caixa de entrada de voz" + }, + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "Não há conversas anteriores associadas a este contato.", + "TITLE": "Conversas anteriores" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Etiquetas de contato", + "ERROR": "Falha ao atualizar etiquetas" + }, + "CONVERSATION": { + "TITLE": "Etiquetas da conversa", + "ADD_BUTTON": "Adicionar etiquetas" + }, + "LABEL_SELECT": { + "TITLE": "Adicionar etiquetas", + "PLACEHOLDER": "Pesquisar etiquetas", + "NO_RESULT": "Nenhuma etiqueta encontrada", + "CREATE_LABEL": "Criar etiqueta" + } + }, + "MERGE_CONTACT": "Mesclar contatos", + "CONTACT_ACTIONS": "Ações de contatos", + "MUTE_CONTACT": "Bloquear Contato", + "UNMUTE_CONTACT": "Desbloquear Contato", + "MUTED_SUCCESS": "Este contato foi bloqueado com sucesso. Você não será notificado por nenhuma conversação futura.", + "UNMUTED_SUCCESS": "Este contato foi desbloqueado com sucesso.", + "SEND_TRANSCRIPT": "Enviar Transcrição", + "EDIT_LABEL": "Alterar", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Atributos Personalizados", + "CONTACT_LABELS": "Etiquetas de contato", + "PREVIOUS_CONVERSATIONS": "Conversas anteriores", + "NO_RECORDS_FOUND": "Nenhum atributo encontrado" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Editar Contato", + "TITLE": "Editar contato", + "DESC": "Alterar detalhes do contato" + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Excluir Contato", + "TITLE": "Excluir contato", + "DESC": "Excluir detalhes do contato", + "CONFIRM": { + "TITLE": "Confirmar Exclusão", + "MESSAGE": "Você tem certeza que deseja excluir ", + "YES": "Sim, Excluir", + "NO": "Não, Mantenha" + }, + "API": { + "SUCCESS_MESSAGE": "Contato excluído com sucesso", + "ERROR_MESSAGE": "Não foi possível excluir o contato. Por favor, tente novamente mais tarde." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Enviar", + "CANCEL": "Cancelar", + "AVATAR": { + "LABEL": "Avatar do Contato" + }, + "NAME": { + "PLACEHOLDER": "Insira o nome completo do contato", + "LABEL": "Nome Completo" + }, + "BIO": { + "PLACEHOLDER": "Insira a descrição do contato", + "LABEL": "Descrição" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Insira o endereço de e-mail do contato", + "LABEL": "Endereço de e-mail", + "DUPLICATE": "Esse endereço de e-mail já está sendo usado para outro contato.", + "ERROR": "Por favor, insira um endereço de e-mail válido." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Adicione o número de telefone do contato", + "LABEL": "Número de Telefone", + "HELP": "O número de telefone deve ser do formato E.164, por exemplo: +5511000000000 [+][código do país][código de área][número de telefone local].", + "ERROR": "O número de telefone deve estar vazio ou no formato E.164", + "DIAL_CODE_ERROR": "Por favor, selecione um código de discagem da lista", + "DUPLICATE": "Este número de telefone está em uso para outro contato." + }, + "LOCATION": { + "PLACEHOLDER": "Insira a localização do contato", + "LABEL": "Localização" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Digite o nome da empresa", + "LABEL": "Nome da empresa" + }, + "COUNTRY": { + "PLACEHOLDER": "Digite o nome do país ", + "LABEL": "Nome do País", + "SELECT_PLACEHOLDER": "Selecionar", + "REMOVE": "Remover", + "SELECT_COUNTRY": "Selecione o país" + }, + "CITY": { + "PLACEHOLDER": "Digite o nome da cidade", + "LABEL": "Nome da cidade" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Digite o nome de usuário do Facebook", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Digite o nome de usuário Twitter", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Digite o nome de usuário do LinkedIn", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Digite o nome de usuário do Github", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Avatar do contato excluído com sucesso", + "ERROR_MESSAGE": "Não foi possível excluir o avatar do contato. Por favor, tente novamente mais tarde." + } + }, + "SUCCESS_MESSAGE": "Contato salvo com sucesso", + "ERROR_MESSAGE": "Ocorreu um erro, por favor tente novamente" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Iniciar conversa", + "TITLE": "Nova conversa", + "DESC": "Iniciar uma nova conversa enviando uma nova mensagem.", + "NO_INBOX": "Não foi possível encontrar uma caixa de entrada para iniciar uma nova conversa com este contato.", + "FORM": { + "TO": { + "LABEL": "Para" + }, + "INBOX": { + "LABEL": "Caixa de Entrada", + "PLACEHOLDER": "Escolher a caixa de entrada de origem", + "ERROR": "Selecione uma caixa de entrada" + }, + "SUBJECT": { + "LABEL": "Assunto", + "PLACEHOLDER": "Assunto", + "ERROR": "O assunto não pode estar vazio" + }, + "MESSAGE": { + "LABEL": "Messagem", + "PLACEHOLDER": "Escreva sua mensagem aqui", + "ERROR": "A mensagem não pode estar vazia" + }, + "ATTACHMENTS": { + "SELECT": "Selecionar arquivos", + "HELP_TEXT": "Arraste e solte arquivos aqui ou selecione arquivos para anexar" + }, + "SUBMIT": "Enviar mensagem", + "CANCEL": "Cancelar", + "SUCCESS_MESSAGE": "Mensagem enviada!", + "GO_TO_CONVERSATION": "Visualizar", + "ERROR_MESSAGE": "Não foi possível enviar! Tente novamente" + } + }, + "CONTACTS_PAGE": { + "LIST": { + "TABLE_HEADER": { + "SOCIAL_PROFILES": "Social Profiles" + } + } + }, + "CUSTOM_ATTRIBUTES": { + "BUTTON": "Criar atributo personalizado", + "COPY_SUCCESSFUL": "Copiado para área de transferência com sucesso", + "SHOW_MORE": "Mostrar todos os atributos", + "SHOW_LESS": "Mostrar menos atributos", + "ACTIONS": { + "COPY": "Copiar atributo", + "DELETE": "Excluir atributo", + "EDIT": "Alterar atributo" + }, + "ADD": { + "TITLE": "Criar atributo personalizado", + "DESC": "Adicionar informações personalizadas a este contato." + }, + "FORM": { + "CREATE": "Adicionar atributo", + "CANCEL": "Cancelar", + "NAME": { + "LABEL": "Nome do Atributo Personalizado", + "PLACEHOLDER": "Por exemplo: ID shopify", + "ERROR": "Nome de atributo personalizado inválido" + }, + "VALUE": { + "LABEL": "Valor do atributo", + "PLACEHOLDER": "Ex: 11901 " + }, + "ADD": { + "TITLE": "Criar novo atributo ", + "SUCCESS": "Atributo adicionado com sucesso", + "ERROR": "Não foi possível adicionar o atributo. Por favor, tente mais tarde" + }, + "UPDATE": { + "SUCCESS": "Atributo atualizado com sucesso", + "ERROR": "Não foi possível atualizar o atributo. Por favor, tente mais tarde" + }, + "DELETE": { + "SUCCESS": "Atributo excluído com sucesso", + "ERROR": "Não foi possível excluir o atributo. Por favor, tente mais tarde" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Adicionar atributos", + "PLACEHOLDER": "Pesquisar atributos", + "NO_RESULT": "Nenhum atributo encontrado" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Selecione o valor", + "SEARCH_INPUT_PLACEHOLDER": "Pesquisar valor", + "NO_RESULT": "Nenhum resultado encontrado" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Um valor válido é obrigatório", + "INVALID_URL": "URL inválida", + "INVALID_INPUT": "Campo inválido" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Mesclar contatos", + "DESCRIPTION": "Mescle contatos para combinar dois perfis em um, incluindo todos os atributos e conversas. Em caso de conflito, os atributos do contato principal terão prioridade.", + "PRIMARY": { + "TITLE": "Contato principal", + "HELP_LABEL": "Para ser excluído" + }, + "PARENT": { + "TITLE": "Contato para mesclar", + "PLACEHOLDER": "Pesquisar um contato", + "HELP_LABEL": "Para ser mantido" + }, + "SUMMARY": { + "TITLE": "Sumário", + "DELETE_WARNING": "Contato de {primaryContactName} será excluído.", + "ATTRIBUTE_WARNING": "Detalhes de contato de {primaryContactName} serão copiados para {parentContactName}." + }, + "SEARCH": { + "ERROR_MESSAGE": "Algo deu errado. Por favor, tente novamente mais tarde." + }, + "FORM": { + "SUBMIT": " Mesclar contatos", + "CANCEL": "Cancelar", + "CHILD_CONTACT": { + "ERROR": "Selecione um contato filho para mesclar" + }, + "SUCCESS_MESSAGE": "Contato mesclado com sucesso", + "ERROR_MESSAGE": "Não foi possível mesclar contatos, tente novamente!" + }, + "DROPDOWN_ITEM": { + "ID": "(ID: {identifier})" + } + }, + "CONTACTS_LAYOUT": { + "HEADER": { + "TITLE": "Contatos", + "SEARCH_TITLE": "Pesquisar contatos", + "ACTIVE_TITLE": "Contatos ativos", + "SEARCH_PLACEHOLDER": "Pesquisar...", + "MESSAGE_BUTTON": "Enviar Mensagem", + "SEND_MESSAGE": "Enviar mensagem", + "BLOCK_CONTACT": "Bloquear contato", + "UNBLOCK_CONTACT": "Desbloquear contato", + "BREADCRUMB": { + "CONTACTS": "Contatos" + }, + "ACTIONS": { + "CONTACT_CREATION": { + "ADD_CONTACT": "Adicionar contato", + "EXPORT_CONTACT": "Exportar contatos", + "IMPORT_CONTACT": "Importar contatos", + "SAVE_CONTACT": "Salvar contato", + "EMAIL_ADDRESS_DUPLICATE": "Esse endereço de e-mail já está sendo usado para outro contato.", + "PHONE_NUMBER_DUPLICATE": "Este número de telefone está em uso para outro contato.", + "SUCCESS_MESSAGE": "Contato salvo com sucesso", + "ERROR_MESSAGE": "Não foi possível atualizar o contato. Por favor, tente mais tarde." + }, + "BLOCK_SUCCESS_MESSAGE": "Este contato foi bloqueado com sucesso", + "BLOCK_ERROR_MESSAGE": "Não foi possível bloquear o contato. Tente novamente mais tarde.", + "UNBLOCK_SUCCESS_MESSAGE": "Este contato foi desbloqueado com sucesso", + "UNBLOCK_ERROR_MESSAGE": "Não foi possível desbloquear o contato. Tente novamente mais tarde.", + "IMPORT_CONTACT": { + "TITLE": "Importar contatos", + "DESCRIPTION": "Importar contatos através de um arquivo CSV.", + "DOWNLOAD_LABEL": "Baixar um exemplo de csv.", + "LABEL": "Arquivo CSV:", + "CHOOSE_FILE": "Escolher arquivo", + "CHANGE": "Trocar", + "CANCEL": "Cancelar", + "IMPORT": "Importar", + "SUCCESS_MESSAGE": "Você será notificado por e-mail quando a importação estiver concluída.", + "ERROR_MESSAGE": "Ocorreu um erro, por favor tente novamente" + }, + "EXPORT_CONTACT": { + "TITLE": "Exportar contatos", + "DESCRIPTION": "Exporte rapidamente um arquivo CSV com detalhes completos dos seus contatos", + "CONFIRM": "Exportar", + "SUCCESS_MESSAGE": "Exportando. Você será notificado por e-mail quando o arquivo estiver pronto para ser baixado.", + "ERROR_MESSAGE": "Ocorreu um erro, por favor tente novamente" + }, + "SORT_BY": { + "LABEL": "Classificar por", + "OPTIONS": { + "NAME": "Nome", + "EMAIL": "e-mail", + "PHONE_NUMBER": "Número de telefone", + "COMPANY": "Empresa", + "COUNTRY": "País/região", + "CITY": "Cidade", + "LAST_ACTIVITY": "Última atividade", + "CREATED_AT": "Criado em" + } + }, + "ORDER": { + "LABEL": "Ordenação", + "OPTIONS": { + "ASCENDING": "Crescente", + "DESCENDING": "Decrescente" + } + }, + "FILTERS": { + "CREATE_SEGMENT": { + "TITLE": "Você quer salvar este filtro?", + "CONFIRM": "Salvar filtro", + "LABEL": "Nome", + "PLACEHOLDER": "Informe o nome para esse filtro", + "ERROR": "Informe um nome válido", + "SUCCESS_MESSAGE": "Filtro salvo com sucesso", + "ERROR_MESSAGE": "Não foi possível salvar o filtro. Por favor, tente mais tarde." + }, + "DELETE_SEGMENT": { + "TITLE": "Confirmar exclusão", + "DESCRIPTION": "Tem certeza de que deseja excluir este filtro?", + "CONFIRM": "Sim, Excluir", + "CANCEL": "Não, Cancelar", + "SUCCESS_MESSAGE": "Filtro excluído com sucesso", + "ERROR_MESSAGE": "Não foi possível excluir o filtro. Por favor, tente mais tarde." + } + } + } + }, + "PAGINATION_FOOTER": { + "SHOWING": "Exibindo {startItem} - {endItem} de {totalItems} contatos" + }, + "FILTER": { + "NAME": "Nome", + "EMAIL": "e-mail", + "PHONE_NUMBER": "Número de telefone", + "IDENTIFIER": "Identificador", + "COUNTRY": "País/região", + "CITY": "Cidade", + "CREATED_AT": "Criado em", + "LAST_ACTIVITY": "Última atividade", + "REFERER_LINK": "Link de origem", + "BLOCKED": "Bloqueado", + "BLOCKED_TRUE": "Verdadeiro", + "BLOCKED_FALSE": "Falso", + "BUTTONS": { + "CLEAR_FILTERS": "Limpar filtros", + "UPDATE_SEGMENT": "Atualizar segmento", + "APPLY_FILTERS": "Aplicar filtros", + "ADD_FILTER": "Adicionar filtro" + }, + "TITLE": "Filtrar contatos", + "EDIT_SEGMENT": "Alterar segmento", + "SEGMENT": { + "LABEL": "Nome do segmento", + "INPUT_PLACEHOLDER": "Digite o nome do segmento" + }, + "ACTIVE_FILTERS": { + "MORE_FILTERS": "+ {count} mais filtros", + "CLEAR_FILTERS": "Limpar filtros" + } + }, + "CARD": { + "OF": "de", + "VIEW_DETAILS": "Ver detalhes", + "EDIT_DETAILS_FORM": { + "TITLE": "Alterar detalhes do contato", + "FORM": { + "FIRST_NAME": { + "PLACEHOLDER": "Digite o primeiro nome" + }, + "LAST_NAME": { + "PLACEHOLDER": "Digite o sobrenome" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Digite o endereço de e-mail", + "DUPLICATE": "Esse endereço de e-mail já está sendo usado para outro contato." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Digite o número de telefone", + "DUPLICATE": "Este número de telefone está em uso para outro contato." + }, + "CITY": { + "PLACEHOLDER": "Digite o nome da cidade" + }, + "COUNTRY": { + "PLACEHOLDER": "Selecione o país" + }, + "BIO": { + "PLACEHOLDER": "Digite uma biografia" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Digite o nome da empresa" + } + }, + "UPDATE_BUTTON": "Atualizar contato", + "SUCCESS_MESSAGE": "Contato atualizado com sucesso", + "ERROR_MESSAGE": "Não foi possível atualizar o contato. Por favor, tente mais tarde." + }, + "SOCIAL_MEDIA": { + "TITLE": "Editar redes sociais", + "FORM": { + "FACEBOOK": { + "PLACEHOLDER": "Adicionar Facebook" + }, + "GITHUB": { + "PLACEHOLDER": "Adicionar Github" + }, + "INSTAGRAM": { + "PLACEHOLDER": "Adicionar Instagram" + }, + "TIKTOK": { + "PLACEHOLDER": "Adicionar TikTok" + }, + "LINKEDIN": { + "PLACEHOLDER": "Adicionar LinkedIn" + }, + "TWITTER": { + "PLACEHOLDER": "Adicionar Twitter" + } + } + }, + "DELETE_CONTACT": { + "MESSAGE": "Esta ação é permanente e irreversível.", + "BUTTON": "Excluir agora" + } + }, + "DETAILS": { + "CREATED_AT": "Criado {date}", + "LAST_ACTIVITY": "Última atividade {date}", + "DELETE_CONTACT_DESCRIPTION": "Excluir permanentemente este contato. Esta ação é irreversível", + "DELETE_CONTACT": "Excluir contato", + "DELETE_DIALOG": { + "TITLE": "Confirmar exclusão", + "DESCRIPTION": "Tem certeza de que deseja excluir este contato?", + "CONFIRM": "Sim, excluir", + "API": { + "SUCCESS_MESSAGE": "Contato excluído com sucesso", + "ERROR_MESSAGE": "Não foi possível excluir o contato. Por favor, tente novamente mais tarde." + } + }, + "AVATAR": { + "UPLOAD": { + "ERROR_MESSAGE": "Não foi possível enviar o avatar. Por favor, tente novamente mais tarde.", + "SUCCESS_MESSAGE": "Avatar enviado com sucesso" + }, + "DELETE": { + "SUCCESS_MESSAGE": "Avatar excluído com sucesso", + "ERROR_MESSAGE": "Não foi possível excluir o avatar. Por favor, tente novamente mais tarde." + } + } + }, + "SIDEBAR": { + "TABS": { + "ATTRIBUTES": "Atributos", + "HISTORY": "Histórico", + "NOTES": "Notas", + "MERGE": "Mesclar" + }, + "HISTORY": { + "EMPTY_STATE": "Não há conversas anteriores associadas a este contato" + }, + "ATTRIBUTES": { + "SEARCH_PLACEHOLDER": "Pesquisar atributos", + "UNUSED_ATTRIBUTES": "{count} atributos utilizados | {count} atributos não utilizados", + "EMPTY_STATE": "Não há atributos personalizados de contatos disponíveis nesta conta. Você pode criar um atributo personalizado nas configurações.", + "YES": "Sim", + "NO": "Não", + "TRIGGER": { + "SELECT": "Selecione o valor", + "INPUT": "Inserir valor" + }, + "VALIDATIONS": { + "INVALID_NUMBER": "Número inválido", + "REQUIRED": "Um valor válido é obrigatório", + "INVALID_INPUT": "Campo inválido", + "INVALID_URL": "URL inválida", + "INVALID_DATE": "Data inválida" + }, + "NO_ATTRIBUTES": "Nenhum atributo encontrado", + "API": { + "SUCCESS_MESSAGE": "Atributo atualizado com sucesso", + "DELETE_SUCCESS_MESSAGE": "Atributo excluído com sucesso", + "UPDATE_ERROR": "Não foi possível atualizar o atributo. Por favor, tente mais tarde", + "DELETE_ERROR": "Não foi possível excluir o atributo. Por favor, tente mais tarde" + } + }, + "MERGE": { + "TITLE": "Mesclar contatos", + "DESCRIPTION": "Mescle contatos para combinar dois perfis em um, incluindo todos os atributos e conversas. Em caso de conflito, os atributos do contato principal terão prioridade.", + "PRIMARY": "Contato principal", + "PRIMARY_HELP_LABEL": "A ser salvo", + "PRIMARY_REQUIRED_ERROR": "Por favor, selecione um contato para mesclar com este antes de prosseguir", + "PARENT": "Para ser mesclado", + "PARENT_HELP_LABEL": "Para ser excluído", + "EMPTY_STATE": "Nenhum contato encontrado", + "PLACEHOLDER": "Pesquisar contato principal", + "SEARCH_PLACEHOLDER": "Pesquisar um contato", + "SEARCH_ERROR_MESSAGE": "Não foi possível pesquisar pelo contato. Por favor, tente mais tarde.", + "SUCCESS_MESSAGE": "Contato mesclado com sucesso", + "ERROR_MESSAGE": "Não foi possível mesclar contatos, tente novamente!", + "IS_SEARCHING": "Pesquisando...", + "BUTTONS": { + "CANCEL": "Cancelar", + "CONFIRM": "Mesclar contatos" + } + }, + "NOTES": { + "PLACEHOLDER": "Adicionar uma nota", + "WROTE": "escreveu", + "YOU": "Você", + "SAVE": "Salvar nota", + "ADD_NOTE": "Adicionar nota de contato", + "EXPAND": "Expandir", + "COLLAPSE": "Recolher", + "NO_NOTES": "Sem notas, você pode adicionar notas a partir da página de detalhes do contato.", + "EMPTY_STATE": "Não existem notas associadas a este contato. Você pode adicionar uma nota digitando na caixa acima.", + "CONVERSATION_EMPTY_STATE": "Ainda não há notas. Use o botão Adicionar nota para criar uma." + } + }, + "EMPTY_STATE": { + "TITLE": "Nenhum contato encontrado nesta conta", + "SUBTITLE": "Comece a adicionar novos contatos clicando no botão abaixo", + "BUTTON_LABEL": "Adicionar contato", + "SEARCH_EMPTY_STATE_TITLE": "Nenhum contato corresponde à sua pesquisa 🔍", + "LIST_EMPTY_STATE_TITLE": "Não há contatos disponíveis nesta visualização 📋", + "ACTIVE_EMPTY_STATE_TITLE": "Nenhum contato está ativo no momento 🌙" + } + }, + "CONTACTS_BULK_ACTIONS": { + "ASSIGN_LABELS": "Atribuir rótulo", + "ASSIGN_LABELS_SUCCESS": "Rótulos atribuídos com sucesso.", + "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "DESCRIPTION": "Select the labels you want to add to the selected contacts.", + "NO_LABELS_FOUND": "No labels available yet.", + "SELECTED_COUNT": "{count} selecionado", + "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Selecionar todos ({count})", + "DELETE_CONTACTS": "Excluir", + "DELETE_SUCCESS": "Contacts deleted successfully.", + "DELETE_FAILED": "Failed to delete contacts.", + "DELETE_DIALOG": { + "TITLE": "Delete selected contacts", + "SINGULAR_TITLE": "Delete selected contact", + "DESCRIPTION": "This will permanently delete {count} selected contacts. This action cannot be undone.", + "SINGULAR_DESCRIPTION": "This will permanently delete the selected contact. This action cannot be undone.", + "CONFIRM_MULTIPLE": "Delete contacts", + "CONFIRM_SINGLE": "Excluir contato" + } + }, + "COMPOSE_NEW_CONVERSATION": { + "CONTACT_SEARCH": { + "ERROR_MESSAGE": "Não foi possível completar a pesquisa. Por favor, tente novamente." + }, + "FORM": { + "GO_TO_CONVERSATION": "Visualizar", + "SUCCESS_MESSAGE": "Mensagem enviada com sucesso!", + "ERROR_MESSAGE": "Ocorreu um erro ao criar a conversa. Tente novamente mais tarde.", + "NO_INBOX_ALERT": "Não há caixas de entrada disponíveis para iniciar uma conversa com este contato.", + "CONTACT_SELECTOR": { + "LABEL": "Para:", + "TAG_INPUT_PLACEHOLDER": "Pesquisar um contato com o nome, e-mail ou número de telefone", + "CONTACT_CREATING": "Criando contato..." + }, + "INBOX_SELECTOR": { + "LABEL": "Via:", + "BUTTON": "Mostrar Caixas de Entrada" + }, + "EMAIL_OPTIONS": { + "SUBJECT_LABEL": "Assunto:", + "SUBJECT_PLACEHOLDER": "Digite o assunto do seu e-mail aqui", + "CC_LABEL": "Cc:", + "CC_PLACEHOLDER": "Pesquisar por um contato com seu endereço de e-mail", + "BCC_LABEL": "CCO:", + "BCC_PLACEHOLDER": "Pesquisar por um contato com seu endereço de e-mail", + "BCC_BUTTON": "CCO" + }, + "MESSAGE_EDITOR": { + "PLACEHOLDER": "Escreva sua mensagem aqui..." + }, + "WHATSAPP_OPTIONS": { + "LABEL": "Selecione o modelo", + "SEARCH_PLACEHOLDER": "Pesquisar modelos", + "EMPTY_STATE": "Nenhum modelo encontrado", + "TEMPLATE_PARSER": { + "TEMPLATE_NAME": "Modelo do WhatsApp: {templateName}", + "VARIABLES": "Variáveis", + "BACK": "Voltar atrás", + "SEND_MESSAGE": "Enviar mensagem" + } + }, + "TWILIO_OPTIONS": { + "LABEL": "Selecione o modelo", + "SEARCH_PLACEHOLDER": "Pesquisar modelos", + "EMPTY_STATE": "Nenhum modelo encontrado", + "TEMPLATE_PARSER": { + "BACK": "Voltar", + "SEND_MESSAGE": "Enviar mensagem" + } + }, + "ACTION_BUTTONS": { + "DISCARD": "Descartar", + "SEND": "Enviar ({keyCode})" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/contactFilters.json b/app/javascript/dashboard/i18n/locale/pt_BR/contactFilters.json new file mode 100644 index 0000000..37ad946 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/contactFilters.json @@ -0,0 +1,60 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filtrar Contatos", + "SUBTITLE": "Adicione filtros abaixo e clique em 'Enviar' para filtrar conversas.", + "EDIT_CUSTOM_SEGMENT": "Alterar segmento", + "CUSTOM_VIEWS_SUBTITLE": "Adicione ou remova filtros e atualize seu segmento.", + "ADD_NEW_FILTER": "Adicionar filtro", + "CLEAR_ALL_FILTERS": "Limpar Filtros", + "FILTER_DELETE_ERROR": "Você deve ter pelo menos um filtro para salvar", + "SUBMIT_BUTTON_LABEL": "Enviar", + "UPDATE_BUTTON_LABEL": "Atualizar segmento", + "CANCEL_BUTTON_LABEL": "Cancelar", + "CLEAR_BUTTON_LABEL": "Limpar Filtros", + "EMPTY_VALUE_ERROR": "Valor obrigatório", + "SEGMENT_LABEL": "Nome do segmento", + "SEGMENT_QUERY_LABEL": "Consulta de Segmento", + "TOOLTIP_LABEL": "Filtrar contatos", + "QUERY_DROPDOWN_LABELS": { + "AND": "OU", + "OR": "ou" + }, + "OPERATOR_LABELS": { + "equal_to": "Igual a", + "not_equal_to": "Não igual a", + "contains": "Contém", + "does_not_contain": "Não contém", + "is_present": "Está presente", + "is_not_present": "Não está presente", + "is_greater_than": "É maior que", + "is_lesser_than": "É menor que", + "days_before": "É x dias antes" + }, + "ERRORS": { + "VALUE_REQUIRED": "Valor obrigatório" + }, + "ATTRIBUTES": { + "NAME": "Nome", + "EMAIL": "E-mail", + "PHONE_NUMBER": "Número de telefone", + "IDENTIFIER": "Identificador", + "CITY": "Cidade", + "COUNTRY": "País/região", + "CUSTOM_ATTRIBUTE_LIST": "Lista", + "CUSTOM_ATTRIBUTE_TEXT": "Texto", + "CUSTOM_ATTRIBUTE_NUMBER": "Número", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Criado em", + "LAST_ACTIVITY": "Última atividade", + "REFERER_LINK": "Link de origem", + "BLOCKED": "Bloqueado", + "LABELS": "Etiquetas" + }, + "GROUPS": { + "STANDARD_FILTERS": "Filtros Padrão", + "ADDITIONAL_FILTERS": "Filtros adicionais", + "CUSTOM_ATTRIBUTES": "Atributos Personalizados" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/contentTemplates.json b/app/javascript/dashboard/i18n/locale/pt_BR/contentTemplates.json new file mode 100644 index 0000000..478fb16 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/contentTemplates.json @@ -0,0 +1,52 @@ +{ + "CONTENT_TEMPLATES": { + "MODAL": { + "TITLE": "Modelos Twilio", + "SUBTITLE": "Selecione um modelo Twilio que você deseja enviar", + "TEMPLATE_SELECTED_SUBTITLE": "Configurar modelo: {templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Pesquisar modelos", + "NO_TEMPLATES_FOUND": "Não há modelos encontrados para", + "NO_CONTENT": "Sem conteúdo", + "HEADER": "Cabeçalho", + "BODY": "Corpo", + "FOOTER": "Rodapé", + "BUTTONS": "Botões", + "CATEGORY": "Categoria", + "MEDIA_CONTENT": "Conteúdo de Mídia", + "MEDIA_CONTENT_FALLBACK": "conteúdo de mídia", + "NO_TEMPLATES_AVAILABLE": "Não há modelos Twilio disponíveis. Clique em Atualizar para sincronizar os modelos do Twilio.", + "REFRESH_BUTTON": "Atualizar modelos", + "REFRESH_SUCCESS": "Atualização de modelos iniciada. Pode levar alguns minutos para atualizar.", + "REFRESH_ERROR": "Falha ao atualizar os modelos. Por favor, tente novamente.", + "LABELS": { + "LANGUAGE": "Idioma", + "TEMPLATE_BODY": "Conteúdo do Modelo", + "CATEGORY": "Categoria" + }, + "TYPES": { + "MEDIA": "Mídia", + "QUICK_REPLY": "Resposta Rápida", + "CALL_TO_ACTION": "Chamada para Ação", + "TEXT": "Texto" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variáveis", + "LANGUAGE": "Idioma", + "CATEGORY": "Categoria", + "VARIABLE_PLACEHOLDER": "Insira o valor para {variable}", + "GO_BACK_LABEL": "Voltar", + "SEND_MESSAGE_LABEL": "Enviar Mensagem", + "FORM_ERROR_MESSAGE": "Por favor, preencha todas as variáveis antes de enviar", + "MEDIA_HEADER_LABEL": "Cabeçalho {type}", + "MEDIA_URL_LABEL": "Digite a URL completa da mídia", + "MEDIA_URL_PLACEHOLDER": "https://exemplo.com.br/imagem.jpg" + }, + "FORM": { + "BACK_BUTTON": "Anterior", + "SEND_MESSAGE_BUTTON": "Enviar Mensagem" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json b/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json new file mode 100644 index 0000000..75382b8 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json @@ -0,0 +1,439 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Por favor, selecione uma conversa no painel da esquerda", + "CSAT_REPLY_MESSAGE": "Por favor, classifique a conversa", + "404": "Desculpe, não conseguimos encontrar a conversa. Por favor, tente novamente", + "SWITCH_VIEW_LAYOUT": "Alternar o layout", + "DASHBOARD_APP_TAB_MESSAGES": "Mensagens", + "UNVERIFIED_SESSION": "A identidade deste usuário não foi verificada", + "NO_MESSAGE_1": "Oh oh! Parece que não há mensagens de clientes na sua caixa de entrada.", + "NO_MESSAGE_2": " para enviar uma mensagem para sua página!", + "NO_INBOX_1": "Hola! Parece que você não adicionou nenhuma caixa de entrada ainda.", + "NO_INBOX_2": " para começar", + "NO_INBOX_AGENT": "Uh Oh! Parece que você não faz parte de nenhuma caixa de entrada. Por favor, contate seu administrador", + "SEARCH_MESSAGES": "Pesquisar por mensagens nas conversas", + "VIEW_ORIGINAL": "Ver original", + "VIEW_TRANSLATED": "Ver traduzido", + "EMPTY_STATE": { + "CMD_BAR": "para abrir o menu de comando", + "KEYBOARD_SHORTCUTS": "para ver os atalhos de teclado" + }, + "SEARCH": { + "TITLE": "Pesquisar mensagens", + "RESULT_TITLE": "Resultados da Pesquisa", + "LOADING_MESSAGE": "Preparando dados...", + "PLACEHOLDER": "Digite qualquer texto para pesquisar mensagens", + "NO_MATCHING_RESULTS": "Nenhum resultado encontrado." + }, + "UNREAD_MESSAGES": "Mensagens não lidas", + "UNREAD_MESSAGE": "Mensagem não lida", + "CLICK_HERE": "Clique aqui", + "LOADING_INBOXES": "Carregando caixas de entrada", + "LOADING_CONVERSATIONS": "Carregando conversas", + "CANNOT_REPLY": "Você não pode responder porque", + "24_HOURS_WINDOW": "Restrições de janela de mensagem de 24 horas", + "48_HOURS_WINDOW": "Restrição de janela de mensagem de 48 horas", + "API_HOURS_WINDOW": "Você só pode responder a esta conversa em {hours} horas", + "NOT_ASSIGNED_TO_YOU": "Esta conversa não está atribuída a você. Gostaria de atribuir esta conversa a você mesmo?", + "ASSIGN_TO_ME": "Atribuir a mim", + "BOT_HANDOFF_MESSAGE": "Você está respondendo a uma conversa que é atualmente tratada por um assistente ou um robô.", + "BOT_HANDOFF_ACTION": "Marcar como aberta e atribuir a você", + "BOT_HANDOFF_REOPEN_ACTION": "Marcar conversa como aberta", + "BOT_HANDOFF_SUCCESS": "Uma conversa foi atribuída a você", + "BOT_HANDOFF_ERROR": "Falha ao resolver conversas. Por favor, tente novamente.", + "TWILIO_WHATSAPP_CAN_REPLY": "Você só pode responder a esta conversa usando um modelo de mensagem devido a", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "Restrições de janela de mensagem de 24 horas", + "OLD_INSTAGRAM_INBOX_REPLY_BANNER": "Esta conta do Instagram foi migrada para a nova caixa de entrada do canal do Instagram. Todas as novas mensagens serão mostradas lá. Você não poderá mais enviar mensagens desta conversa.", + "REPLYING_TO": "Você está respondendo a:", + "REMOVE_SELECTION": "Remover seleção", + "DOWNLOAD": "Baixar", + "UNKNOWN_FILE_TYPE": "Arquivo desconhecido", + "SAVE_CONTACT": "Salvar contato", + "NO_CONTENT": "Nenhum conteúdo a ser exibido", + "SHARED_ATTACHMENT": { + "CONTACT": "{sender} compartilhou um contato", + "LOCATION": "{sender} compartilhou uma localização", + "FILE": "{sender} compartilhou um arquivo", + "MEETING": "{sender} começou a reunião" + }, + "UPLOADING_ATTACHMENTS": "Enviando anexos...", + "REPLIED_TO_STORY": "Respondido ao seu story", + "UNSUPPORTED_MESSAGE": "Esta mensagem não é suportada. Você pode ver esta mensagem no aplicativo Facebook Messenger.", + "UNSUPPORTED_MESSAGE_FACEBOOK": "Esta mensagem não é suportada. Você pode ver esta mensagem no aplicativo Facebook Messenger.", + "UNSUPPORTED_MESSAGE_INSTAGRAM": "Esta mensagem não é suportada. Você pode ver esta mensagem no aplicativo do Instagram.", + "SUCCESS_DELETE_MESSAGE": "Mensagem excluída com sucesso", + "FAIL_DELETE_MESSSAGE": "Não foi possível excluir a mensagem! Tente novamente", + "NO_RESPONSE": "Sem resposta", + "RESPONSE": "Resposta", + "RATING_TITLE": "Classificação", + "FEEDBACK_TITLE": "Feedback", + "REPLY_MESSAGE_NOT_FOUND": "Mensagem não disponível", + "CARD": { + "SHOW_LABELS": "Mostrar etiquetas", + "HIDE_LABELS": "Ocultar as etiquetas" + }, + "VOICE_CALL": { + "INCOMING_CALL": "Chamada recebida", + "OUTGOING_CALL": "Chamada realizada", + "CALL_IN_PROGRESS": "Chamada em andamento", + "NO_ANSWER": "Sem resposta", + "MISSED_CALL": "Chamada perdida", + "CALL_ENDED": "Chamada encerrada", + "NOT_ANSWERED_YET": "Ainda não respondido", + "THEY_ANSWERED": "Eles responderam", + "YOU_ANSWERED": "Você respondeu" + }, + "HEADER": { + "RESOLVE_ACTION": "Resolver", + "REOPEN_ACTION": "Reabrir", + "OPEN_ACTION": "Abrir", + "MORE_ACTIONS": "Mais ações", + "OPEN": "Mais", + "CLOSE": "Fechar", + "DETAILS": "detalhes", + "SNOOZED_UNTIL": "Adiar até", + "SNOOZED_UNTIL_TOMORROW": "Adiado até amanhã", + "SNOOZED_UNTIL_NEXT_WEEK": "Adiada até a próxima semana", + "SNOOZED_UNTIL_NEXT_REPLY": "Adiado até a próxima resposta", + "SLA_STATUS": { + "FRT": "FRT {status}", + "NRT": "NRT {status}", + "RT": "RT {status}", + "MISSED": "perdidas", + "DUE": "venceu" + } + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Deixar pendente", + "SNOOZE_UNTIL": "Adiar", + "SNOOZE": { + "TITLE": "Suspender até", + "NEXT_REPLY": "Próxima resposta", + "TOMORROW": "Amanhã", + "NEXT_WEEK": "Próxima semana" + } + }, + "MENTION": { + "AGENTS": "Agentes", + "TEAMS": "Times" + }, + "CUSTOM_SNOOZE": { + "TITLE": "Adiar até", + "APPLY": "Adiar", + "CANCEL": "Cancelar" + }, + "PRIORITY": { + "TITLE": "Prioridade", + "OPTIONS": { + "NONE": "Nenhuma", + "URGENT": "Urgente", + "HIGH": "Alta", + "MEDIUM": "Média", + "LOW": "Baixa" + }, + "CHANGE_PRIORITY": { + "SELECT_PLACEHOLDER": "Nenhuma", + "INPUT_PLACEHOLDER": "Selecionar prioridade", + "NO_RESULTS": "Nenhum resultado encontrado", + "SUCCESSFUL": "Alterada a prioridade do ID da conversa {conversationId} para {priority}", + "FAILED": "Não foi possível alterar a prioridade. Por favor, tente novamente." + } + }, + "DELETE_CONVERSATION": { + "TITLE": "Excluir conversa #{conversationId}", + "DESCRIPTION": "Tem certeza que deseja excluir esta conversa?", + "CONFIRM": "Excluir" + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Deixar pendente", + "RESOLVED": "Marcar como resolvida", + "MARK_AS_UNREAD": "Marcar como não lida", + "MARK_AS_READ": "Marcar como lida", + "REOPEN": "Reabrir conversa", + "SNOOZE": { + "TITLE": "Adiar", + "NEXT_REPLY": "Até a próxima resposta", + "TOMORROW": "Até amanhã", + "NEXT_WEEK": "Até a próxima semana" + }, + "ASSIGN_AGENT": "Atribuir Agente", + "ASSIGN_LABEL": "Atribuir etiqueta", + "AGENTS_LOADING": "Carregando agentes...", + "ASSIGN_TEAM": "Atribuir time", + "DELETE": "Excluir conversa", + "OPEN_IN_NEW_TAB": "Abrir em nova aba", + "COPY_LINK": "Copiar link da conversa", + "COPY_LINK_SUCCESS": "Link da conversa copiado", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "ID da conversa {conversationId} atribuído para \"{agentName}\"", + "FAILED": "Não foi possível atribuir agente. Por favor, tente novamente." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Etiqueta #{labelName} atribuída para a conversa {conversationId}", + "FAILED": "Não foi possível atribuir etiqueta. Por favor, tente novamente." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Time {team} atribuído para o id de conversa {conversationId}", + "FAILED": "Não foi possível atribuir time. Por favor, tente novamente." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Assinatura de mensagem", + "ENABLE_SIGN_TOOLTIP": "Ativar assinatura", + "DISABLE_SIGN_TOOLTIP": "Desativar assinatura", + "MSG_INPUT": "Shift + enter para nova linha. Digite '/' para selecionar uma Resposta Pronta.", + "PRIVATE_MSG_INPUT": "A mensagem será visível apenas para agentes", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "A assinatura da mensagem não está configurada. Por favor, configure-a nas configurações do perfil.", + "CLICK_HERE": "Clique aqui para atualizar", + "WHATSAPP_TEMPLATES": "Templates do Whatsapp" + }, + "REPLYBOX": { + "REPLY": "Responder", + "PRIVATE_NOTE": "Mensagem Privada", + "SEND": "Enviar", + "CREATE": "Enviar", + "INSERT_READ_MORE": "Saiba mais", + "DISMISS_REPLY": "Dispensar resposta", + "REPLYING_TO": "Respondendo a:", + "TIP_EMOJI_ICON": "Mostrar seletor de emoji", + "TIP_ATTACH_ICON": "Anexar arquivos", + "TIP_AUDIORECORDER_ICON": "Gravar áudio", + "TIP_AUDIORECORDER_PERMISSION": "Permitir acesso ao áudio", + "TIP_AUDIORECORDER_ERROR": "Não foi possível abrir o áudio", + "DRAG_DROP": "Arraste e solte aqui para anexar", + "START_AUDIO_RECORDING": "Iniciar gravação de áudio", + "STOP_AUDIO_RECORDING": "Parar gravação de áudio", + "": "", + "EMAIL_HEAD": { + "TO": "Para", + "ADD_BCC": "Adicionar cco", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "E-mails separados por vírgulas", + "ERROR": "Por favor, insira endereços de e-mail válidos" + }, + "BCC": { + "LABEL": "Cco", + "PLACEHOLDER": "E-mails separados por vírgulas", + "ERROR": "Por favor, insira endereços de e-mail válidos" + } + }, + "UNDEFINED_VARIABLES": { + "TITLE": "Variáveis não definidas", + "MESSAGE": "Você tem {undefinedVariablesCount} variáveis não definidas em sua mensagem: {undefinedVariables}. Gostaria de enviar a mensagem mesmo assim?", + "CONFIRM": { + "YES": "Enviar", + "CANCEL": "Cancelar" + } + }, + "QUOTED_REPLY": { + "ENABLE_TOOLTIP": "Incluir o encadeamento de e-mails citado", + "DISABLE_TOOLTIP": "Não incluir o encadeamento de e-mails citado", + "REMOVE_PREVIEW": "Remover o encadeamento de e-mails citado", + "COLLAPSE": "Recolher a prévia", + "EXPAND": "Expandir a prévia" + } + }, + "VISIBLE_TO_AGENTS": "Mensagem Privada: Apenas visível para você e seu time", + "CHANGE_STATUS": "Estado da conversa mudou", + "CHANGE_STATUS_FAILED": "Mudança de status da conversa falhou", + "CHANGE_AGENT": "Novo agente atribuído", + "CHANGE_AGENT_FAILED": "Falha ao atribuir outro agente", + "ASSIGN_LABEL_SUCCESFUL": "Etiqueta atribuída com sucesso", + "ASSIGN_LABEL_FAILED": "Falha ao atribuir etiqueta", + "CHANGE_TEAM": "Status da conversa mudou", + "SUCCESS_DELETE_CONVERSATION": "Conversa excluída com sucesso", + "FAIL_DELETE_CONVERSATION": "Não foi possível excluir a conversa! Tente novamente", + "FILE_SIZE_LIMIT": "O arquivo excede os {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB do limite para anexos", + "MESSAGE_ERROR": "Não foi possível enviar esta mensagem, por favor, tente novamente mais tarde", + "SENT_BY": "Enviado por:", + "BOT": "Robôs", + "SEND_FAILED": "Não foi possível enviar a mensagem! Tente novamente", + "TRY_AGAIN": "tentar novamente", + "ASSIGNMENT": { + "SELECT_AGENT": "selecionar Agente", + "REMOVE": "Excluir", + "ASSIGN": "Atribuir" + }, + "CONTEXT_MENU": { + "COPY": "Copiar", + "REPLY_TO": "Responder mensagem", + "DELETE": "Excluir", + "CREATE_A_CANNED_RESPONSE": "Adicionar às respostas prontas", + "TRANSLATE": "Traduzir", + "COPY_PERMALINK": "Copiar link para a mensagem", + "LINK_COPIED": "URL da mensagem copiada para a área de transferência", + "DELETE_CONFIRMATION": { + "TITLE": "Você tem certeza que deseja excluir esta mensagem?", + "MESSAGE": "Você não pode desfazer essa ação", + "DELETE": "Excluir", + "CANCEL": "Cancelar" + } + }, + "SIDEBAR": { + "CONTACT": "Contatos", + "COPILOT": "Copiloto" + }, + "VOICE_WIDGET": { + "INCOMING_CALL": "Chamada recebida", + "OUTGOING_CALL": "Chamada realizada", + "CALL_IN_PROGRESS": "Chamada em andamento", + "NOT_ANSWERED_YET": "Ainda não respondido", + "HANDLED_IN_ANOTHER_TAB": "Sendo atendida em outra aba", + "REJECT_CALL": "Recusar", + "JOIN_CALL": "Entrar na chamada", + "END_CALL": "Encerrar chamada" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Enviar transcrição de conversa", + "DESC": "Enviar uma cópia da transcrição da conversa para o endereço de e-mail especificado", + "SUBMIT": "Enviar", + "CANCEL": "Cancelar", + "SEND_EMAIL_SUCCESS": "A transcrição do chat foi enviada com sucesso", + "SEND_EMAIL_ERROR": "Ocorreu um erro, por favor tente novamente", + "FORM": { + "SEND_TO_CONTACT": "Envie a transcrição para o cliente", + "SEND_TO_AGENT": "Envie a transcrição para o agente designado", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Enviar a transcrição para outro endereço de e-mail", + "EMAIL": { + "PLACEHOLDER": "Digite um endereço de e-mail", + "ERROR": "Por favor, insira um endereço de e-mail válido" + } + } + }, + "ONBOARDING": { + "TITLE": "Olá, 👋. Bem-vindo ao {installationName}!", + "DESCRIPTION": "Obrigado por se inscrever. Queremos que você aproveite o máximo de {installationName}. Aqui estão algumas coisas que você consegue fazer em {installationName} para que tenha uma experiência agradável.", + "GREETING_MORNING": "👋 Bom dia, {name}. Bem-vindo a {installationName}.", + "GREETING_AFTERNOON": "👋 Boa tarde, {name}. Bem-vindo a {installationName}.", + "GREETING_EVENING": "👋 Boa noite, {name}. Bem-vindo a {installationName}.", + "READ_LATEST_UPDATES": "Leia as últimas atualizações", + "ALL_CONVERSATION": { + "TITLE": "Todas as suas conversas em um só lugar", + "DESCRIPTION": "Veja todas as conversas dos seus clientes em um único painel. Você pode filtrar as conversas pelo canal de entrada, rótulo e status.", + "NEW_LINK": "Clique aqui para criar uma caixa de entrada" + }, + "TEAM_MEMBERS": { + "TITLE": "Convidar membros de seu time", + "DESCRIPTION": "Já que você está se preparando para conversar com seu cliente, traga seus colegas para ajudá-lo. Você pode convidar seus colegas adicionando os endereços de e-mail deles na lista de agentes.", + "NEW_LINK": "Clique aqui para convidar um membro do time" + }, + "LABELS": { + "TITLE": "Organizar conversas com etiquetas", + "DESCRIPTION": "Etiquetas fornecem uma forma mais fácil de organizar a sua conversa. Criar algumas etiquetas como #solicitação-suporte, #fatura-assunto etc., assim você poderá futuramente utiliza-las em uma conversa posteriormente.", + "NEW_LINK": "Clique aqui para criar etiquetas" + }, + "CANNED_RESPONSES": { + "TITLE": "Criar respostas prontas", + "DESCRIPTION": "Os modelos de respostas prontas ajudam você a responder rapidamente a uma conversa. Os agentes podem digitar o caractere '/' seguido pelo atalho para inserir uma resposta.", + "NEW_LINK": "Clique aqui para criar uma resposta pronta" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Agente atribuído", + "SELF_ASSIGN": "Atribuir a mim", + "TEAM_LABEL": "Time atribuído", + "SELECT": { + "PLACEHOLDER": "Nenhuma" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Detalhes do contato", + "CONVERSATION_ACTIONS": "Ações da conversa", + "CONVERSATION_LABELS": "Etiquetas da conversa", + "CONVERSATION_INFO": "Informação da conversa", + "CONTACT_NOTES": "Notas do contato", + "CONTACT_ATTRIBUTES": "Atributos do contato", + "PREVIOUS_CONVERSATION": "Conversas anteriores", + "MACROS": "Macros", + "LINEAR_ISSUES": "Problemas do Linear vinculados", + "SHOPIFY_ORDERS": "Shopify Orders" + }, + "SHOPIFY": { + "ORDER_ID": "Order #{id}", + "ERROR": "Error loading orders", + "NO_SHOPIFY_ORDERS": "No orders found", + "FINANCIAL_STATUS": { + "PENDING": "Pendentes", + "AUTHORIZED": "Authorized", + "PARTIALLY_PAID": "Partially Paid", + "PAID": "Paid", + "PARTIALLY_REFUNDED": "Partially Refunded", + "REFUNDED": "Refunded", + "VOIDED": "Voided" + }, + "FULFILLMENT_STATUS": { + "FULFILLED": "Fulfilled", + "PARTIALLY_FULFILLED": "Partially Fulfilled", + "UNFULFILLED": "Unfulfilled" + } + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Criar atributo", + "NO_RECORDS_FOUND": "Nenhum atributo encontrado", + "UPDATE": { + "SUCCESS": "Atributo atualizado com sucesso", + "ERROR": "Não foi possível atualizar o atributo. Por favor, tente mais tarde" + }, + "ADD": { + "TITLE": "Adicionar", + "SUCCESS": "Atributo adicionado com sucesso", + "ERROR": "Não foi possível adicionar o atributo. Por favor, tente mais tarde" + }, + "DELETE": { + "SUCCESS": "Atributo excluído com sucesso", + "ERROR": "Não foi possível excluir o atributo. Por favor, tente mais tarde" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Adicionar atributos", + "PLACEHOLDER": "Procurar atributos", + "NO_RESULT": "Nenhum atributo encontrado" + } + }, + "EMAIL_HEADER": { + "FROM": "De", + "TO": "Para", + "BCC": "CCO", + "CC": "Cc", + "SUBJECT": "Assunto", + "EXPAND": "Expandir e-mail" + }, + "CONVERSATION_PARTICIPANTS": { + "SIDEBAR_MENU_TITLE": "Participantes", + "SIDEBAR_TITLE": "Participantes da conversa", + "NO_RECORDS_FOUND": "Nenhum resultado encontrado", + "ADD_PARTICIPANTS": "Selecionar participantes", + "REMANING_PARTICIPANTS_TEXT": "+{count} participantes", + "REMANING_PARTICIPANT_TEXT": "+{count} participante", + "TOTAL_PARTICIPANTS_TEXT": "{count} pessoas estão participando.", + "TOTAL_PARTICIPANT_TEXT": "{count} pessoa está participando.", + "NO_PARTICIPANTS_TEXT": "Ninguém está participando!", + "WATCH_CONVERSATION": "Participar da conversa", + "YOU_ARE_WATCHING": "Você está participando", + "API": { + "ERROR_MESSAGE": "Não foi possível atualizar, tente novamente!", + "SUCCESS_MESSAGE": "Participantes atualizados!" + } + }, + "TRANSLATE_MODAL": { + "TITLE": "Ver conteúdo traduzido", + "DESC": "Você pode visualizar o conteúdo traduzido em cada idioma.", + "ORIGINAL_CONTENT": "Conteúdo original", + "TRANSLATED_CONTENT": "Conteúdo traduzido", + "NO_TRANSLATIONS_AVAILABLE": "Nenhuma tradução está disponível para este conteúdo" + }, + "TYPING": { + "ONE": "{user} está digitando", + "TWO": "{user} e {secondUser} estão digitando", + "MULTIPLE": "{user} e {count} outros estão digitando" + }, + "COPILOT": { + "TRY_THESE_PROMPTS": "Experimente estes comandos" + }, + "GALLERY_VIEW": { + "ERROR_DOWNLOADING": "Não foi possível baixar o anexo. Por favor, tente novamente" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/csatMgmt.json b/app/javascript/dashboard/i18n/locale/pt_BR/csatMgmt.json new file mode 100644 index 0000000..2f6ebb9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/csatMgmt.json @@ -0,0 +1,13 @@ +{ + "CSAT": { + "TITLE": "Avalie sua conversa", + "PLACEHOLDER": "Conte-nos mais...", + "RATINGS": { + "POOR": "😞Ruim", + "FAIR": "😑 Neutro", + "AVERAGE": "😐 Mediano", + "GOOD": "😛 Bom", + "EXCELLENT": "😍 Excelente" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/customRole.json b/app/javascript/dashboard/i18n/locale/pt_BR/customRole.json new file mode 100644 index 0000000..9632739 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/customRole.json @@ -0,0 +1,91 @@ +{ + "CUSTOM_ROLE": { + "HEADER": "Funções Personalizadas", + "LEARN_MORE": "Aprenda mais sobre funções personalizadas", + "DESCRIPTION": "Funções personalizadas são funções criadas pelo proprietário ou administrador da conta. Essas funções podem ser atribuídas a agentes para definir seu acesso e permissões dentro da conta. Funções personalizadas podem ser criadas com permissões e níveis de acesso específicos para atender aos requisitos da organização.", + "HEADER_BTN_TXT": "Adicionar função personalizada", + "LOADING": "Buscando funções personalizadas...", + "SEARCH_404": "Não há itens correspondentes a esta consulta.", + "PAYWALL": { + "TITLE": "Atualize para criar funções personalizadas", + "AVAILABLE_ON": "O recurso de função personalizada está disponível apenas nos planos \"Business\" e \"Enterprise\".", + "UPGRADE_PROMPT": "Atualize seu plano para obter acesso a recursos avançados como gerenciamento de time, automações, atributos personalizados e muito mais.", + "UPGRADE_NOW": "Atualizar agora", + "CANCEL_ANYTIME": "Você pode alterar ou cancelar seu plano a qualquer momento" + }, + "ENTERPRISE_PAYWALL": { + "AVAILABLE_ON": "O recurso de função personalizada está disponível apenas nos planos pagos.", + "UPGRADE_PROMPT": "Atualize para um plano pago para acessar recursos avançados como logs de auditoria, capacidade do agente e muito mais.", + "ASK_ADMIN": "Entre em contato com seu administrador para fazer a atualização." + }, + "LIST": { + "404": "Não há funções personalizadas disponíveis nesta conta.", + "TITLE": "Gerenciar funções personalizadas", + "DESC": "Funções personalizadas são funções criadas pelo proprietário ou administrador da conta. Essas funções podem ser atribuídas a agentes para definir seu acesso e permissões dentro da conta. Funções personalizadas podem ser criadas com permissões e níveis de acesso específicos para atender aos requisitos da organização.", + "TABLE_HEADER": { + "NAME": "Nome", + "DESCRIPTION": "Descrição", + "PERMISSIONS": "Permissões", + "ACTIONS": "Ações" + } + }, + "PERMISSIONS": { + "CONVERSATION_MANAGE": "Gerenciar todas conversas", + "CONVERSATION_UNASSIGNED_MANAGE": "Gerenciar conversas não atribuídas e aquelas atribuídas a elas", + "CONVERSATION_PARTICIPATING_MANAGE": "Gerenciar conversas que participa e aquelas atribuídas a elas", + "CONTACT_MANAGE": "Gerenciar contatos", + "REPORT_MANAGE": "Gerenciar relatórios", + "KNOWLEDGE_BASE_MANAGE": "Gerenciar base de conhecimento" + }, + "FORM": { + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Por favor, insira um nome.", + "ERROR": "O nome é obrigatório." + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "Por favor, insira uma descrição.", + "ERROR": "A descrição é obrigatória." + }, + "PERMISSIONS": { + "LABEL": "Permissões", + "ERROR": "Permissões são necessárias." + }, + "CANCEL_BUTTON_TEXT": "Cancelar", + "API": { + "ERROR_MESSAGE": "Não foi possível desconectar o agente robô. Por favor, tente novamente mais tarde." + } + }, + "ADD": { + "TITLE": "Adicionar função personalizada", + "DESC": " Funções personalizadas permitem criar funções com permissões e níveis de acesso específicos para atender aos requisitos da organização.", + "SUBMIT": "Enviar", + "API": { + "SUCCESS_MESSAGE": "Função personalizada adicionada com sucesso." + } + }, + "EDIT": { + "BUTTON_TEXT": "Alterar", + "TITLE": "Editar função personalizada", + "DESC": " Funções personalizadas permitem criar funções com permissões e níveis de acesso específicos para atender aos requisitos da organização.", + "SUBMIT": "Atualizar", + "API": { + "SUCCESS_MESSAGE": "Função personalizada atualizada com sucesso." + } + }, + "DELETE": { + "BUTTON_TEXT": "Excluir", + "API": { + "SUCCESS_MESSAGE": "Função personalizada excluída com sucesso.", + "ERROR_MESSAGE": "Não foi possível desconectar o agente robô. Por favor, tente novamente mais tarde." + }, + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Você tem certeza que deseja excluir ", + "YES": "Sim, excluir ", + "NO": "Não, manter " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/datePicker.json b/app/javascript/dashboard/i18n/locale/pt_BR/datePicker.json new file mode 100644 index 0000000..1cda53e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/datePicker.json @@ -0,0 +1,19 @@ +{ + "DATE_PICKER": { + "APPLY_BUTTON": "Aplicar", + "CLEAR_BUTTON": "Limpar", + "DATE_RANGE_INPUT": { + "START": "Data de início", + "END": "Data final" + }, + "DATE_RANGE_OPTIONS": { + "TITLE": "Intervalo de data", + "LAST_7_DAYS": "Últimos 7 dias", + "LAST_30_DAYS": "Últimos 30 dias", + "LAST_3_MONTHS": "Últimos 3 meses", + "LAST_6_MONTHS": "Últimos 6 meses", + "LAST_YEAR": "Ano passado", + "CUSTOM_RANGE": "Intervalo de tempo personalizado" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/emoji.json b/app/javascript/dashboard/i18n/locale/pt_BR/emoji.json new file mode 100644 index 0000000..58578b6 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/emoji.json @@ -0,0 +1,7 @@ +{ + "EMOJI": { + "PLACEHOLDER": "Pesquisar emojis", + "NOT_FOUND": "Nenhum emoji corresponde à sua pesquisa", + "REMOVE": "Excluir" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/general.json b/app/javascript/dashboard/i18n/locale/pt_BR/general.json new file mode 100644 index 0000000..c62e1ae --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/general.json @@ -0,0 +1,12 @@ +{ + "GENERAL": { + "SHOWING_RESULTS": "Mostrando {firstIndex}—{lastIndex} de {totalCount} itens", + "PHONE_INPUT": { + "PLACEHOLDER": "Pesquisar", + "EMPTY_STATE": "Nenhum resultado encontrado" + }, + "CLOSE": "Fechar", + "BETA": "Beta", + "BETA_DESCRIPTION": "Este recurso está em fase BETA e deve sofre alterações assim que Nós melhorarmos ele." + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/generalSettings.json b/app/javascript/dashboard/i18n/locale/pt_BR/generalSettings.json new file mode 100644 index 0000000..28bdffd --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/generalSettings.json @@ -0,0 +1,251 @@ +{ + "GENERAL_SETTINGS": { + "LIMIT_MESSAGES": { + "CONVERSATION": "Você excedeu o limite de conversas. O plano Hacker permite apenas 500 conversas.", + "INBOXES": "Você excedeu o limite da caixa de entrada. O plano Hacker só suporta chat ao vivo do site. Caixas adicionais como e-mail, WhatsApp etc. requerem um plano pago.", + "AGENTS": "Você excedeu o limite do agente. Seu plano permite apenas {allowedAgents} agentes.", + "NON_ADMIN": "Entre em contato com o administrador para atualizar o plano e continuar usando todos os recursos." + }, + "TITLE": "Conta", + "SUBMIT": "Atualizar configurações", + "BACK": "Anterior", + "DISMISS": "Recusar", + "UPDATE": { + "ERROR": "Não foi possível atualizar as configurações, tente novamente!", + "SUCCESS": "Configurações de conta atualizadas com sucesso" + }, + "ACCOUNT_DELETE_SECTION": { + "TITLE": "Excluir sua Conta", + "NOTE": "Após excluir sua conta, todos os seus dados serão excluídos.", + "BUTTON_TEXT": "Excluir sua conta", + "CONFIRM": { + "TITLE": "Excluir Conta", + "MESSAGE": "Excluir sua conta é irreversível. Digite o nome de sua conta abaixo para confirmar que você deseja excluí-la permanentemente.", + "BUTTON_TEXT": "Excluir", + "DISMISS": "Cancelar", + "PLACE_HOLDER": "Digite {accountName} para confirmar" + }, + "SUCCESS": "Conta marcada para exclusão", + "FAILURE": "Não foi possível excluir a conta, tente novamente!", + "SCHEDULED_DELETION": { + "TITLE": "Conta agendada para exclusão", + "MESSAGE_MANUAL": "Esta conta está programada para exclusão em {deletionDate}. Isto foi solicitado por um administrador. Você pode cancelar a exclusão antes desta data.", + "MESSAGE_INACTIVITY": "Esta conta está programada para exclusão em {deletionDate} devido à inatividade da conta. Você pode cancelar a exclusão antes desta data.", + "CLEAR_BUTTON": "Cancelar Exclusão Programada" + } + }, + "FORM": { + "ERROR": "Por favor, corrigir erros de formulário", + "GENERAL_SECTION": { + "TITLE": "Configurações gerais", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "ID da Conta", + "NOTE": "Este ID é necessário se você está construindo uma integração baseada em API" + }, + "AUTO_RESOLVE": { + "TITLE": "Resolver conversas automaticamente", + "NOTE": "Essa configuração permitirá que você resolva automaticamente a conversa após um determinado período de inatividade.", + "DURATION": { + "LABEL": "Duração da inatividade", + "HELP": "Período de tempo de inatividade após o qual a conversa é resolvida automaticamente", + "PLACEHOLDER": "30", + "ERROR": "O tempo decorrido para resolução automática deve ser entre 10 minutos e 999 dias", + "API": { + "SUCCESS": "Configurações de resolução automática atualizadas com sucesso", + "ERROR": "Falha ao atualizar as configurações de resolução automática" + } + }, + "MESSAGE": { + "LABEL": "Mensagem personalizada de resolução automática", + "PLACEHOLDER": "A conversa foi marcada como resolvida pelo sistema por ter 15 dias de inatividade", + "HELP": "Mensagem enviada ao cliente após a resolução automática da conversa" + }, + "PREFERENCES": "Preferências", + "LABEL": { + "LABEL": "Adicionar etiqueta após resolução automática", + "PLACEHOLDER": "Selecione a etiqueta" + }, + "IGNORE_WAITING": { + "LABEL": "Pular conversas aguardando a resposta do agente" + }, + "UPDATE_BUTTON": "Salvar Alterações" + }, + "NAME": { + "LABEL": "Nome da Conta", + "PLACEHOLDER": "Nome da sua conta", + "ERROR": "Por favor, insira um nome de conta válido" + }, + "LANGUAGE": { + "LABEL": "Idioma do site", + "PLACEHOLDER": "Nome da sua conta", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Domínio de recebimento de e-mails", + "PLACEHOLDER": "O domínio onde você receberá os e-mails", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "E-mail de Suporte", + "PLACEHOLDER": "E-mail de suporte da sua empresa", + "ERROR": "" + }, + "AUTO_RESOLVE_IGNORE_WAITING": { + "LABEL": "Excluir conversas não atendidas", + "HELP": "Se ativado, o sistema não resolverá conversas que estiverem aguardando a resposta de um atendente." + }, + "AUDIO_TRANSCRIPTION": { + "TITLE": "Transcrever Mensagens de Áudio", + "NOTE": "Transcreve automaticamente mensagens de áudio nas conversas. Gera uma transcrição de texto sempre que uma mensagem de áudio é enviada ou recebida, e a exibe junto da mensagem.", + "API": { + "SUCCESS": "Configuração de transcrição de áudio atualizada com sucesso", + "ERROR": "Falha ao atualizar configuração de transcrição de áudio" + } + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Tempo de inatividade para resolução", + "HELP": "Tempo de inatividade após o qual a conversa deve ser encerrada automaticamente", + "PLACEHOLDER": "30", + "ERROR": "O tempo decorrido para resolução automática deve ser entre 10 minutos e 999 dias", + "API": { + "SUCCESS": "Configurações de resolução automática atualizadas com sucesso", + "ERROR": "Falha ao atualizar as configurações de resolução automática" + }, + "UPDATE_BUTTON": "Atualizar", + "MESSAGE_LABEL": "Mensagem de resolução personalizada", + "MESSAGE_PLACEHOLDER": "A conversa foi marcada como resolvida pelo sistema por ter 15 dias de inatividade", + "MESSAGE_HELP": "Esta mensagem é enviada ao cliente quando uma conversa é resolvida automaticamente pelo sistema devido à inatividade." + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "A continuidade das conversas com e-mails está ativada para sua conta.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "Você pode receber e-mails em seu domínio personalizado agora." + } + }, + "UPDATE_CHATWOOT": "Uma atualização {latestChatwootVersion} para o Chatwoot está disponível. Por favor, atualize sua instância.", + "LEARN_MORE": "Saiba mais", + "PAYMENT_PENDING": "Seu pagamento está pendente. Por favor, atualize suas informações de pagamento para continuar usando o Chatwoot", + "UPGRADE": "Atualize para continuar usando o Chatwoot", + "LIMITS_UPGRADE": "Sua conta excedeu os limites de uso. Por favor, faça um upgrade do seu plano para continuar usando o Chatwoot", + "OPEN_BILLING": "Abrir faturamento" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Digite enter para selecionar", + "ENTER_TO_REMOVE": "Digite enter para remover", + "NO_OPTIONS": "Lista vazia", + "SELECT_ONE": "Selecione um", + "SELECT": "Selecionar" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Notificações", + "MARK_ALL_DONE": "Marcar Tudo Feito", + "DELETE_TITLE": "Excluído", + "UNREAD_NOTIFICATION": { + "TITLE": "Notificações não lidas", + "ALL_NOTIFICATIONS": "Visualizar todas as notificações", + "LOADING_UNREAD_MESSAGE": "Carregando notificações não lidas...", + "EMPTY_MESSAGE": "Você não tem notificações não lidas" + }, + "LIST": { + "LOADING_MESSAGE": "Carregando notificações...", + "404": "Sem Notificações", + "TABLE_HEADER": [ + "Nome", + "Número de Telefone", + "Conversas", + "Último Contactado" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "Nova conversa", + "conversation_assignment": "Conversa Atribuída", + "assigned_conversation_new_message": "Nova Mensagem", + "participating_conversation_new_message": "Nova Mensagem", + "conversation_mention": "Menção", + "sla_missed_first_response": "SLA não alcançado", + "sla_missed_next_response": "SLA não alcançado", + "sla_missed_resolution": "SLA não alcançado" + } + }, + "NETWORK": { + "NOTIFICATION": { + "OFFLINE": "Desconectado", + "RECONNECTING": "Reconectando...", + "RECONNECT_SUCCESS": "Reconectado" + }, + "BUTTON": { + "REFRESH": "Atualizar" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Pesquisar ou pular para", + "SECTIONS": { + "GENERAL": "Geral", + "REPORTS": "Relatórios", + "CONVERSATION": "Conversas", + "BULK_ACTIONS": "Ações em massa", + "CHANGE_ASSIGNEE": "Atribuir novo agente", + "CHANGE_PRIORITY": "Alterar Prioridade", + "CHANGE_TEAM": "Alterar o Time", + "SNOOZE_CONVERSATION": "Adiar Conversa", + "ADD_LABEL": "Adicionar etiqueta à conversa", + "REMOVE_LABEL": "Remover etiqueta da conversa", + "SETTINGS": "Configurações", + "AI_ASSIST": "Assistente IA", + "APPEARANCE": "Tema", + "SNOOZE_NOTIFICATION": "Adiar Notificação" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Ir para Painel de Conversação", + "GO_TO_CONTACTS_DASHBOARD": "Ir para Painel de Contatos", + "GO_TO_REPORTS_OVERVIEW": "Ir para Resumo de Relatórios", + "GO_TO_CONVERSATION_REPORTS": "Ir para Relatórios das Conversas", + "GO_TO_AGENT_REPORTS": "Ir para Relatórios do Agente", + "GO_TO_LABEL_REPORTS": "Ir para Relatórios de Etiquetas", + "GO_TO_INBOX_REPORTS": "Ir para Relatórios da Caixa de Entrada", + "GO_TO_TEAM_REPORTS": "Ir para Relatórios de Time", + "GO_TO_SETTINGS_AGENTS": "Ir para Configurações de Agente", + "GO_TO_SETTINGS_TEAMS": "Ir para as Configurações de Time", + "GO_TO_SETTINGS_INBOXES": "Ir para as Configurações da Caixa de Entrada", + "GO_TO_SETTINGS_LABELS": "Ir para as Configurações de Etiqueta", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Ir para as Configurações de Respostas Prontas", + "GO_TO_SETTINGS_APPLICATIONS": "Vá para Configurações do Aplicativo", + "GO_TO_SETTINGS_ACCOUNT": "Ir para as Configurações da Conta", + "GO_TO_SETTINGS_PROFILE": "Ir para as Configurações do Perfil", + "GO_TO_NOTIFICATIONS": "Ir para Notificações", + "ADD_LABELS_TO_CONVERSATION": "Adicionar etiqueta à conversa", + "ASSIGN_AN_AGENT": "Atribuir um agente", + "AI_ASSIST": "Assistente IA", + "ASSIGN_PRIORITY": "Atribuir prioridade", + "ASSIGN_A_TEAM": "Atribuir um time", + "MUTE_CONVERSATION": "Silenciar conversa", + "UNMUTE_CONVERSATION": "Reativar conversa", + "REMOVE_LABEL_FROM_CONVERSATION": "Remover etiqueta da conversa", + "REOPEN_CONVERSATION": "Reabrir conversa", + "RESOLVE_CONVERSATION": "Resolver conversa", + "SEND_TRANSCRIPT": "Enviar uma transcrição por e-mail", + "SNOOZE_CONVERSATION": "Adiar Conversa", + "UNTIL_NEXT_REPLY": "Até a próxima resposta", + "UNTIL_NEXT_WEEK": "Até a próxima semana", + "UNTIL_TOMORROW": "Até amanhã", + "UNTIL_NEXT_MONTH": "Até o próximo mês", + "AN_HOUR_FROM_NOW": "Até daqui a uma hora", + "UNTIL_CUSTOM_TIME": "Personalizar...", + "CHANGE_APPEARANCE": "Alterar Tema", + "LIGHT_MODE": "Claro", + "DARK_MODE": "Escuro", + "SYSTEM_MODE": "Sistema", + "SNOOZE_NOTIFICATION": "Adiar Notificação" + } + }, + "DASHBOARD_APPS": { + "LOADING_MESSAGE": "Carregando Aplicativo..." + }, + "COMMON": { + "OR": "Ou", + "CLICK_HERE": "clique aqui" + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/helpCenter.json b/app/javascript/dashboard/i18n/locale/pt_BR/helpCenter.json new file mode 100644 index 0000000..02896fc --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/helpCenter.json @@ -0,0 +1,865 @@ +{ + "HELP_CENTER": { + "TITLE": "Centro de Ajuda", + "NEW_PAGE": { + "DESCRIPTION": "Crie portais centrais de ajuda de auto-serviço para seus clientes. Ajude-os a encontrar respostas rapidamente, sem esperar. Agilize dúvidas, aumente a eficiência dos agentes e eleve o suporte ao cliente.", + "CREATE_PORTAL_BUTTON": "Criar portal" + }, + "HEADER": { + "FILTER": "Filtrar por", + "SORT": "Classificar por", + "LOCALE": "Localidade", + "SETTINGS_BUTTON": "Configurações", + "NEW_BUTTON": "Novo artigo", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Publicado", + "DRAFT": "Rascunho", + "ARCHIVED": "Arquivado" + }, + "TITLES": { + "ALL_ARTICLES": "Todos os artigos", + "MINE": "Meus Artigos", + "DRAFT": "Artigos em rascunho", + "ARCHIVED": "Artigos arquivados" + }, + "LOCALE_SELECT": { + "TITLE": "Selecionar local", + "PLACEHOLDER": "Selecionar local", + "NO_RESULT": "Nenhum local encontrado", + "SEARCH_PLACEHOLDER": "Pesquisar idioma" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "Todos os artigos", + "PUBLISH_BUTTON": "Publicar", + "MOVE_TO_ARCHIVE_BUTTON": "Mover para arquivado", + "PREVIEW": "Pré-visualizar", + "ADD_TRANSLATION": "Adicionar tradução", + "OPEN_SIDEBAR": "Abrir barra lateral", + "CLOSE_SIDEBAR": "Fechar barra lateral", + "SAVING": "Salvando...", + "SAVED": "Salvo" + }, + "ARTICLE_EDITOR": { + "IMAGE_UPLOAD": { + "TITLE": "Upload de imagem", + "UPLOADING": "Enviando...", + "SUCCESS": "Imagem enviada com sucesso", + "ERROR": "Erro ao fazer upload da imagem", + "UN_AUTHORIZED_ERROR": "Você não está autorizado a enviar imagens", + "ERROR_FILE_SIZE": "O tamanho da imagem deve ser menor que {size}MB", + "ERROR_FILE_FORMAT": "O formato da imagem deve ser jpg, jpeg ou png", + "ERROR_FILE_DIMENSIONS": "Dimensões da imagem devem ser menores que 2000 x 2000" + } + }, + "ARTICLE_SETTINGS": { + "TITLE": "Configurações de Artigo", + "FORM": { + "CATEGORY": { + "LABEL": "Categoria", + "TITLE": "Selecionar categoria", + "PLACEHOLDER": "Selecionar categoria", + "NO_RESULT": "Nenhuma categoria encontrada", + "SEARCH_PLACEHOLDER": "Pesquisar categoria" + }, + "AUTHOR": { + "LABEL": "Autor", + "TITLE": "Selecionar autor", + "PLACEHOLDER": "Selecionar autor", + "NO_RESULT": "Nenhum autor encontrado", + "SEARCH_PLACEHOLDER": "Pesquisar autor" + }, + "META_TITLE": { + "LABEL": "Meta title", + "PLACEHOLDER": "Adicionar um meta title" + }, + "META_DESCRIPTION": { + "LABEL": "Meta description", + "PLACEHOLDER": "Adicione suas meta descriptions para melhorar os resultados de SEO..." + }, + "META_TAGS": { + "LABEL": "Meta tags", + "PLACEHOLDER": "Adicione meta tags separadas por virgula..." + } + }, + "BUTTONS": { + "ARCHIVE": "Arquivar artigo", + "DELETE": "Excluir artigo" + } + }, + "ARTICLE_SEARCH_RESULT": { + "UNCATEGORIZED": "Não categorizado", + "SEARCH_RESULTS": "Resultados da pesquisa para {query}", + "EMPTY_TEXT": "Procurar artigos para inserir em respostas.", + "SEARCH_LOADER": "Procurando...", + "INSERT_ARTICLE": "Inserir", + "NO_RESULT": "Nenhum artigo encontrado", + "COPY_LINK": "Copiar link do artigo para área de transferência", + "OPEN_LINK": "Abrir artigo em nova aba", + "PREVIEW_LINK": "Visualizar artigo" + }, + "PORTAL": { + "HEADER": "Portais", + "DEFAULT": "Padrão", + "NEW_BUTTON": "Novo portal", + "ACTIVE_BADGE": "ativo", + "CHOOSE_LOCALE_LABEL": "Escolha uma localidade", + "LOADING_MESSAGE": "Carregando portais...", + "ARTICLES_LABEL": "artigos", + "NO_PORTALS_MESSAGE": "Não há portais disponíveis", + "ADD_NEW_LOCALE": "Adicionar uma nova localidade", + "POPOVER": { + "TITLE": "Portais", + "PORTAL_SETTINGS": "Configurações do Portal", + "SUBTITLE": "Você tem vários portais e pode ter diferentes localidades para cada portal.", + "CANCEL_BUTTON_LABEL": "Cancelar", + "CHOOSE_LOCALE_BUTTON": "Escolher localidade" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "artigos", + "ADD": "Adicionar localidade", + "VISIT": "Visitar site", + "SETTINGS": "Configurações", + "DELETE": "Excluir" + }, + "PORTAL_CONFIG": { + "TITLE": "Configurações do Portal", + "ITEMS": { + "NAME": "Nome", + "DOMAIN": "Domínio personalizado", + "SLUG": "Slug", + "TITLE": "Título do portal", + "THEME": "Cor do tema", + "SUB_TEXT": "Sub texto do Portal" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Localidades disponíveis", + "TABLE": { + "NAME": "Nome da localidade", + "CODE": "Código local", + "ARTICLE_COUNT": "No. de artigos", + "CATEGORIES": "No. de categorias", + "SWAP": "Trocar", + "DELETE": "Excluir", + "DEFAULT_LOCALE": "Padrão" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Excluir portal", + "MESSAGE": "Tem certeza de que deseja excluir este portal?", + "YES": "Sim, excluir portal", + "NO": "Não, mantenha o portal", + "API": { + "DELETE_SUCCESS": "Portal excluído com sucesso", + "DELETE_ERROR": "Erro enquanto excluía o portal" + } + }, + "SEND_CNAME_INSTRUCTIONS": { + "API": { + "SUCCESS_MESSAGE": "Instruções do CNAME enviadas com sucesso", + "ERROR_MESSAGE": "Erro ao enviar as instruções CNAME" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Alterar portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Informação Básica" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Personalização do Portal" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categorias" + }, + "LOCALE_SETTINGS": { + "TITLE": "Localidades" + } + }, + "CATEGORIES": { + "TITLE": "Categorias em", + "NEW_CATEGORY": "Nova categoria", + "TABLE": { + "NAME": "Nome", + "DESCRIPTION": "Descrição", + "LOCALE": "Localidade", + "ARTICLE_COUNT": "No. de artigos", + "ACTION_BUTTON": { + "EDIT": "Alterar categoria", + "DELETE": "Excluir categoria" + }, + "EMPTY_TEXT": "Nenhuma categoria encontrada" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Atualizar configurações básicas" + } + }, + "ADD": { + "CREATE_FLOW": { + "BASIC": { + "TITLE": "Informações da central de ajuda", + "BODY": "Informações básicas sobre o portal" + }, + "CUSTOMIZATION": { + "TITLE": "Personalização da central de ajuda", + "BODY": "Personalizar portal" + }, + "FINISH": { + "TITLE": "Pronto! 🎉", + "BODY": "Está tudo pronto!" + } + }, + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Anterior", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Criar portal", + "TITLE": "Informações da central de ajuda", + "CREATE_BASIC_SETTING_BUTTON": "Criar configurações básicas do portal" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Personalização do Portal", + "TITLE": "Personalização da central de ajuda", + "UPDATE_PORTAL_BUTTON": "Atualizar configurações do portal" + }, + "FINISH_PAGE": { + "TITLE": "Muito bem!🎉 Está tudo pronto!", + "MESSAGE": "Agora você pode ver este portal criado na página de todos os portais.", + "FINISH": "Ir para a página de todos os portais" + } + }, + "LOGO": { + "LABEL": "Logotipo", + "UPLOAD_BUTTON": "Carregar logotipo", + "HELP_TEXT": "Este logotipo será exibido no cabeçalho do portal.", + "IMAGE_UPLOAD_SUCCESS": "Logo enviada com sucesso", + "IMAGE_UPLOAD_ERROR": "Logo deletada com sucesso", + "IMAGE_DELETE_ERROR": "Ocorreu um erro ao excluir logo" + }, + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Nome do portal", + "HELP_TEXT": "O nome será usado no portal voltado ao público internamente.", + "ERROR": "O nome é obrigatório" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug do Portal para URLs", + "ERROR": "Slug é obrigatório" + }, + "DOMAIN": { + "LABEL": "Domínio personalizado", + "PLACEHOLDER": "Domínio personalizado do portal", + "HELP_TEXT": "Adicione somente se você quiser usar um domínio personalizado para seus portais. Por exemplo: https://example. com", + "ERROR": "Insira uma URL de domínio válida" + }, + "HOME_PAGE_LINK": { + "LABEL": "Link da Página Inicial", + "PLACEHOLDER": "Link da página inicial do portal", + "HELP_TEXT": "O link usado para retornar do portal para a página inicial. Ex: https://example.com", + "ERROR": "Digite uma URL de página inicial válida" + }, + "THEME_COLOR": { + "LABEL": "Cor do tema do portal", + "HELP_TEXT": "Esta cor será exibida como a cor do tema para o portal." + }, + "PAGE_TITLE": { + "LABEL": "Título da Página", + "PLACEHOLDER": "Título da página do portal", + "HELP_TEXT": "O título da página será usado no portal voltado para público.", + "ERROR": "Título da página é obrigatório" + }, + "HEADER_TEXT": { + "LABEL": "Texto do Cabeçalho", + "PLACEHOLDER": "Texto do cabeçalho do portal", + "HELP_TEXT": "O texto do cabeçalho do Portal será usado no portal voltado para o público.", + "ERROR": "O texto do cabeçalho do Portal é obrigatório" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal criado com sucesso.", + "ERROR_MESSAGE_FOR_BASIC": "Não foi possível criar o portal. Tente novamente.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal atualizado com sucesso.", + "ERROR_MESSAGE_FOR_UPDATE": "Não foi possível atualizar o portal. Tente novamente." + } + }, + "ADD_LOCALE": { + "TITLE": "Adicionar uma nova localidade", + "SUB_TITLE": "Isso adiciona uma nova localidade à sua lista de tradução disponível.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Localidade", + "PLACEHOLDER": "Escolha uma localidade", + "ERROR": "Localidade é necessária" + }, + "BUTTONS": { + "CREATE": "Criar localidade", + "CANCEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Localidade adicionada com sucesso", + "ERROR_MESSAGE": "Não foi possível adicionar a localidade. Tente novamente." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Localização padrão atualizada com sucesso", + "ERROR_MESSAGE": "Não é possível atualizar a localidade padrão. Tente novamente." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Localização removida do portal com sucesso", + "ERROR_MESSAGE": "Não é possível remover a localidade do portal. Tente novamente." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Carregando artigos...", + "404": "Nenhum artigo corresponde à sua pesquisa 🔍", + "NO_ARTICLES": "Não há artigos disponíveis", + "HEADERS": { + "TITLE": "Título", + "CATEGORY": "Categoria", + "READ_COUNT": "Visualizações", + "STATUS": "Status", + "LAST_EDITED": "Última edição" + }, + "COLUMNS": { + "BY": "por", + "AUTHOR_NOT_AVAILABLE": "Autor indisponível" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Carregando artigo...", + "TITLE_PLACEHOLDER": "O título do artigo vai aqui", + "CONTENT_PLACEHOLDER": "Escreva o seu artigo aqui", + "API": { + "ERROR": "Erro ao salvar artigo" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Erro ao publicar o artigo", + "SUCCESS": "Artigo publicado com sucesso" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Erro durante o arquivamento do artigo", + "SUCCESS": "Artigo arquivado com sucesso" + } + }, + "DRAFT_ARTICLE": { + "API": { + "ERROR": "Ocorreu um erro enquanto redigia o artigo", + "SUCCESS": "Artigo redigido com sucesso" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Tem certeza que deseja excluir o artigo?", + "YES": "Sim, excluir", + "NO": "Não, mantenha" + } + }, + "API": { + "SUCCESS_MESSAGE": "Artigo excluído com sucesso", + "ERROR_MESSAGE": "Erro enquanto excluía o artigo" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Por favor, adicione o cabeçalho e o conteúdo do artigo, só então você pode atualizar as configurações" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Buscar artigos" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Criar uma categoria", + "SUB_TITLE": "A categoria será utilizada no portal voltado ao público para categorizar os artigos.", + "PORTAL": "Portal", + "LOCALE": "Localidade", + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Nome da categoria", + "HELP_TEXT": "O nome da categoria e o ícone serão usados no portal público para categorizar os artigos.", + "ERROR": "O nome é obrigatório" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Categoria de slug para URLs", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug é obrigatório" + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "Forneça uma breve descrição sobre a categoria.", + "ERROR": "Descrição obrigatória" + }, + "BUTTONS": { + "CREATE": "Criar categoria", + "CANCEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Categoria criada com sucesso", + "ERROR_MESSAGE": "Não é possível criar categoria" + } + }, + "EDIT": { + "TITLE": "Alterar uma categoria", + "SUB_TITLE": "Alterar uma categoria atualizará a categoria no portal voltado ao público.", + "PORTAL": "Portal", + "LOCALE": "Localidade", + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Nome da categoria", + "HELP_TEXT": "O nome da categoria e o ícone serão usados no portal público para categorizar os artigos.", + "ERROR": "O nome é obrigatório" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Categoria de slug para URLs", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug é obrigatório" + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "Forneça uma breve descrição sobre a categoria.", + "ERROR": "Descrição obrigatória" + }, + "BUTTONS": { + "CREATE": "Atualizar categoria", + "CANCEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Categoria atualizada com sucesso", + "ERROR_MESSAGE": "Não é possível atualizar categoria" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Categoria excluída com sucesso", + "ERROR_MESSAGE": "Não é possível excluir a categoria" + } + } + }, + "ARTICLE_SEARCH": { + "TITLE": "Pesquisar artigos", + "PLACEHOLDER": "Pesquisar artigos", + "NO_RESULT": "Nenhum artigo encontrado", + "SEARCHING": "Procurando...", + "SEARCH_BUTTON": "Pesquisar", + "INSERT_ARTICLE": "Inserir link", + "IFRAME_ERROR": "A URL está vazia ou é inválida. Não é possível exibir conteúdo.", + "OPEN_ARTICLE_SEARCH": "Inserir artigo na Central de Ajuda", + "SUCCESS_ARTICLE_INSERTED": "Artigo publicado com sucesso", + "PREVIEW_LINK": "Visualizar artigo", + "CANCEL": "Fechar", + "BACK": "Anterior", + "BACK_RESULTS": "Voltar aos resultados" + }, + "UPGRADE_PAGE": { + "TITLE": "Centro de Ajuda", + "DESCRIPTION": "Crie portais de autoatendimento amigáveis ao usuário. Ajude seus usuários a acessar os artigos e obter suporte 24/7. Atualize sua assinatura para habilitar essa função.", + "SELF_HOSTED_DESCRIPTION": "Crie portais de autoatendimento amigáveis ao usuário. Ajude seus usuários a acessar os artigos e obter suporte 24/7. Por favor, contate seu administrador para habilitar essa função.", + "BUTTON": { + "LEARN_MORE": "Saiba mais", + "UPGRADE": "Atualize" + }, + "FEATURES": { + "PORTALS": { + "TITLE": "Múltiplos portais", + "DESCRIPTION": "Crie múltiplos portais de central de ajuda para diferentes produtos usando a mesma conta." + }, + "LOCALES": { + "TITLE": "Suporte completo para localidades", + "DESCRIPTION": "Localize o portal no seu idioma. Nós damos suporte a todas as localidades e permitimos traduções para todos os artigos." + }, + "SEO": { + "TITLE": "Design otimizado para SEO", + "DESCRIPTION": "Personalize suas meta tags para melhorar sua visibilidade nos motores de busca com nossas páginas otimizadas para SEO." + }, + "API": { + "TITLE": "Suporte completo para API", + "DESCRIPTION": "Use o portal como um CMS sem interface gráfica com frameworks front-end de terceiros usando nossas APIs." + } + } + }, + "LOADING": "Carregando...", + "ARTICLES_PAGE": { + "ARTICLE_CARD": { + "CARD": { + "VIEWS": "Visualização {count} de {count} visualizações", + "DROPDOWN_MENU": { + "PUBLISH": "Publicar", + "DRAFT": "Rascunho", + "ARCHIVE": "Arquivar", + "DELETE": "Excluir" + }, + "STATUS": { + "DRAFT": "Rascunho", + "PUBLISHED": "Publicado", + "ARCHIVED": "Arquivado" + }, + "CATEGORY": { + "UNCATEGORISED": "Sem categoria" + } + } + }, + "ARTICLES_HEADER": { + "TABS": { + "ALL": "Todos os artigos", + "MINE": "Minhas", + "DRAFT": "Rascunho", + "PUBLISHED": "Publicado", + "ARCHIVED": "Arquivado" + }, + "CATEGORY": { + "ALL": "Todas as categorias" + }, + "LOCALE": { + "ALL": "Todos os Idioma" + }, + "NEW_ARTICLE": "Novo artigo" + }, + "EMPTY_STATE": { + "ALL": { + "TITLE": "Escreva um artigo", + "SUBTITLE": "Escreva um artigo rico, vamos começar!", + "BUTTON_LABEL": "Novo artigo" + }, + "MINE": { + "TITLE": "Você não escreveu nenhum artigo aqui", + "SUBTITLE": "Todos os artigos escritos por você aparecem aqui para acesso rápido." + }, + "DRAFT": { + "TITLE": "Não há artigos nos rascunhos", + "SUBTITLE": "Artigos do rascunho aparecerão aqui" + }, + "PUBLISHED": { + "TITLE": "Não há artigos publicados", + "SUBTITLE": "Artigos publicados aparecerão aqui" + }, + "ARCHIVED": { + "TITLE": "Não há artigos no arquivo", + "SUBTITLE": "Artigos arquivados não aparecem no portal, você pode usá-lo para marcar páginas obsoletas ou desatualizadas" + }, + "CATEGORY": { + "TITLE": "Não há artigos nesta categoria", + "SUBTITLE": "Os artigos nesta categoria aparecerão aqui" + } + } + }, + "CATEGORY_PAGE": { + "CATEGORY_HEADER": { + "NEW_CATEGORY": "Nova categoria", + "EDIT_CATEGORY": "Alterar categoria", + "CATEGORIES_COUNT": "categoria {n} | {n} categorias", + "BREADCRUMB": { + "CATEGORY_LOCALE": "Categorias ({localeCode})", + "ACTIVE_CATEGORY": "{categoryName} ({categoryCount} artigos) | {categoryName} ({categoryCount} artigo)" + } + }, + "CATEGORY_EMPTY_STATE": { + "TITLE": "Nenhuma categoria encontrada", + "SUBTITLE": "Categorias aparecerão aqui. Você pode adicionar uma categoria clicando no botão 'Nova Categoria'." + }, + "CATEGORY_CARD": { + "ARTICLES_COUNT": "artigo {count} | {count} artigos" + }, + "CATEGORY_DIALOG": { + "CREATE": { + "API": { + "SUCCESS_MESSAGE": "Categoria criada com sucesso", + "ERROR_MESSAGE": "Não é possível criar categoria" + } + }, + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Categoria atualizada com sucesso", + "ERROR_MESSAGE": "Não é possível atualizar categoria" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Categoria excluída com sucesso", + "ERROR_MESSAGE": "Não é possível excluir a categoria" + } + }, + "HEADER": { + "CREATE": "Criar categoria", + "EDIT": "Alterar categoria", + "DESCRIPTION": "Alterar uma categoria atualizará a categoria no portal voltado ao público.", + "PORTAL": "Portal", + "LOCALE": "Localidade" + }, + "FORM": { + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Nome da categoria", + "ERROR": "O nome é obrigatório" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Categoria de slug para URLs", + "ERROR": "Slug é obrigatório", + "HELP_TEXT": "app.dominio.com/hc/{portalSlug}/{localeCode}/categories/{categorySlug}" + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "Forneça uma breve descrição sobre a categoria.", + "ERROR": "Descrição obrigatória" + } + }, + "BUTTONS": { + "CREATE": "Criar", + "EDIT": "Atualizar", + "CANCEL": "Cancelar" + } + } + }, + "LOCALES_PAGE": { + "LOCALES_COUNT": "Localizações não disponíveis | {n} local | {n} localidades", + "NEW_LOCALE_BUTTON_TEXT": "Nova localização", + "LOCALE_CARD": { + "ARTICLES_COUNT": "artigo {count} | {count} artigos", + "CATEGORIES_COUNT": "categoria {count} | {count} categorias", + "DEFAULT": "Padrão", + "DROPDOWN_MENU": { + "MAKE_DEFAULT": "Tornar padrão", + "DELETE": "Excluir" + } + }, + "ADD_LOCALE_DIALOG": { + "TITLE": "Adicionar uma nova localidade", + "DESCRIPTION": "Selecione o idioma em que este artigo será escrito. Isto será adicionado à sua lista de traduções, e você pode adicionar mais tarde.", + "COMBOBOX": { + "PLACEHOLDER": "Selecionar local..." + }, + "API": { + "SUCCESS_MESSAGE": "Localidade adicionada com sucesso", + "ERROR_MESSAGE": "Não foi possível adicionar a localidade. Tente novamente." + } + } + }, + "EDIT_ARTICLE_PAGE": { + "HEADER": { + "STATUS": { + "SAVING": "Salvando...", + "SAVED": "Salvo" + }, + "PREVIEW": "Pré-visualizar", + "PUBLISH": "Publicar", + "DRAFT": "Rascunho", + "ARCHIVE": "Arquivar", + "BACK_TO_ARTICLES": "Voltar aos artigos" + }, + "EDIT_ARTICLE": { + "MORE_PROPERTIES": "Mais propriedades", + "UNCATEGORIZED": "Não categorizado", + "EDITOR_PLACEHOLDER": "Escreva algo..." + }, + "ARTICLE_PROPERTIES": { + "ARTICLE_PROPERTIES": "Propriedades do artigo", + "META_DESCRIPTION": "Meta descrição", + "META_DESCRIPTION_PLACEHOLDER": "Adicionar meta descrição", + "META_TITLE": "Meta title", + "META_TITLE_PLACEHOLDER": "Adicionar meta título", + "META_TAGS": "Meta tags", + "META_TAGS_PLACEHOLDER": "Adicionar meta tags" + }, + "API": { + "ERROR": "Erro ao salvar artigo" + } + }, + "PORTAL_SWITCHER": { + "NEW_PORTAL": "Novo portal", + "PORTALS": "Portais", + "CREATE_PORTAL": "Crie e gerencie vários portais", + "ARTICLES": "artigos", + "DOMAIN": "domínio", + "PORTAL_NAME": "Nome do portal" + }, + "CREATE_PORTAL_DIALOG": { + "TITLE": "Criar novo portal", + "DESCRIPTION": "Dê um nome ao seu portal e crie uma URL fácil de usar. Você pode modificar as duas configurações posteriormente.", + "CONFIRM_BUTTON_LABEL": "Criar", + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Guia do Usuário | Chatwoot", + "MESSAGE": "Escolha um nome para o seu portal.", + "ERROR": "O nome é obrigatório" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "user-guide", + "ERROR": "Slug é obrigatório", + "FORMAT_ERROR": "Por favor, insira um slug válido, por exemplo: guia do usuário" + } + }, + "PORTAL_SETTINGS": { + "FORM": { + "AVATAR": { + "LABEL": "Logotipo", + "IMAGE_UPLOAD_ERROR": "Não foi possível fazer o upload da imagem! Tente novamente", + "IMAGE_UPLOAD_SUCCESS": "Imagem adicionada com sucesso. Por favor, clique em salvar as alterações para salvar o logotipo", + "IMAGE_DELETE_SUCCESS": "Logo deletada com sucesso", + "IMAGE_DELETE_ERROR": "Não foi possível excluir o logotipo", + "IMAGE_UPLOAD_SIZE_ERROR": "O tamanho da imagem deve ser menor que {size}MB" + }, + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Nome do portal", + "ERROR": "O nome é obrigatório" + }, + "HEADER_TEXT": { + "LABEL": "Texto do Cabeçalho", + "PLACEHOLDER": "Texto do cabeçalho do portal" + }, + "PAGE_TITLE": { + "LABEL": "Título da Página", + "PLACEHOLDER": "Título da página do portal" + }, + "HOME_PAGE_LINK": { + "LABEL": "Link da Página Inicial", + "PLACEHOLDER": "Link da página inicial do portal", + "ERROR": "Digite uma URL válida. O link da página inicial deve começar com 'http://' ou 'https://'." + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug do portal" + }, + "LIVE_CHAT_WIDGET": { + "LABEL": "Widget de chat ao vivo", + "PLACEHOLDER": "Selecionar widget de chat ao vivo", + "HELP_TEXT": "Selecione um widget de chat ao vivo que aparecerá no centro de ajuda", + "NONE_OPTION": "No widget" + }, + "BRAND_COLOR": { + "LABEL": "Cor da Marca" + }, + "SAVE_CHANGES": "Salvar Alterações" + }, + "CONFIGURATION_FORM": { + "CUSTOM_DOMAIN": { + "HEADER": "Domínio personalizado", + "LABEL": "Domínio personalizado:", + "DESCRIPTION": "Você pode hospedar seu portal em um domínio personalizado. Por exemplo, se seu site for meudominio.com e você quer o seu portal disponível em docs.meudominio.com, basta digitar isso neste campo.", + "STATUS_DESCRIPTION": "Seu portal personalizado começará a funcionar assim que for verificado.", + "PLACEHOLDER": "Domínio personalizado do portal", + "EDIT_BUTTON": "Alterar", + "ADD_BUTTON": "Adicionar domínio personalizado", + "STATUS": { + "LIVE": "Em tempo real", + "PENDING": "Aguardando verificação", + "ERROR": "Verificação falhou" + }, + "DIALOG": { + "ADD_HEADER": "Adicionar domínio personalizado", + "EDIT_HEADER": "Editar domínio personalizado", + "ADD_CONFIRM_BUTTON_LABEL": "Adicionar domínio", + "EDIT_CONFIRM_BUTTON_LABEL": "Atualizar domínio", + "LABEL": "Domínio personalizado", + "PLACEHOLDER": "Domínio personalizado do portal", + "ERROR": "Domínio personalizado é obrigatório", + "FORMAT_ERROR": "Por favor, insira um domínio de URL válido, ex.: docs.seudominio.com" + }, + "DNS_CONFIGURATION_DIALOG": { + "HEADER": "Configuração de DNS", + "DESCRIPTION": "Faça o login na conta que você tem com seu provedor DNS e adicione um registro CNAME para subdomínio apontando para chatwoot.help", + "COPY": "CNAME copiado com sucesso", + "SEND_INSTRUCTIONS": { + "HEADER": "Enviar instruções", + "DESCRIPTION": "Se você preferir que alguém da sua equipe de desenvolvimento lide com essa etapa, você pode digitar o endereço de e-mail abaixo e nós enviaremos as instruções necessárias.", + "PLACEHOLDER": "Insira o e-mail dele", + "ERROR": "Insira um endereço de e-mail válido", + "SEND_BUTTON": "Enviar" + } + } + }, + "DELETE_PORTAL": { + "BUTTON": "Excluir {portalName}", + "HEADER": "Excluir portal", + "DESCRIPTION": "Excluir permanentemente este portal. Esta ação é irreversível", + "DIALOG": { + "HEADER": "Tem certeza que deseja excluir {portalName}?", + "DESCRIPTION": "Esta é uma ação permanente que não pode ser revertida.", + "CONFIRM_BUTTON_LABEL": "Excluir" + } + }, + "EDIT_CONFIGURATION": "Alterar configuração" + }, + "API": { + "CREATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal criado com sucesso", + "ERROR_MESSAGE": "Não foi possível criar o portal" + }, + "UPDATE_PORTAL": { + "SUCCESS_MESSAGE": "Portal atualizado com sucesso", + "ERROR_MESSAGE": "Não foi possível atualizar o portal" + } + } + }, + "PDF_UPLOAD": { + "TITLE": "Upload PDF Document", + "DESCRIPTION": "Upload a PDF document to automatically generate FAQs using AI", + "DRAG_DROP_TEXT": "Arraste e solte seu arquivo PDF aqui, clique para selecionar", + "SELECT_FILE": "Select PDF File", + "ADDITIONAL_CONTEXT_LABEL": "Additional Context (Optional)", + "ADDITIONAL_CONTEXT_PLACEHOLDER": "Provide any additional context or instructions for FAQ generation...", + "UPLOADING": "Enviando...", + "UPLOAD": "Upload & Process", + "CANCEL": "Cancelar", + "ERROR_INVALID_TYPE": "Please select a valid PDF file", + "ERROR_FILE_TOO_LARGE": "File size must be less than 512MB", + "ERROR_UPLOAD_FAILED": "Falha ao carregar o arquivo PDF. Por favor, tente novamente." + }, + "PDF_DOCUMENTS": { + "TITLE": "PDF Documents", + "DESCRIPTION": "Manage uploaded PDF documents and generate FAQs from them", + "UPLOAD_PDF": "Upload PDF", + "UPLOAD_FIRST_PDF": "Upload your first PDF", + "UPLOADED_BY": "Uploaded by", + "GENERATE_FAQS": "Generate FAQs", + "GENERATING": "Gerando...", + "CONFIRM_DELETE": "Tem certeza que deseja excluir {filename}?", + "EMPTY_STATE": { + "TITLE": "No PDF documents yet", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQs using AI" + }, + "STATUS": { + "UPLOADED": "Ready", + "PROCESSING": "Processing", + "PROCESSED": "Concluído", + "FAILED": "Failed" + } + }, + "CONTENT_GENERATION": { + "TITLE": "Content Generation", + "DESCRIPTION": "Upload PDF documents to automatically generate FAQ content using AI", + "UPLOAD_TITLE": "Upload PDF Document", + "DRAG_DROP": "Arraste e solte seu arquivo PDF aqui, clique para selecionar", + "SELECT_FILE": "Selecionar Arquivo PDF", + "UPLOADING": "Processing document...", + "UPLOAD_SUCCESS": "Document processed successfully!", + "UPLOAD_ERROR": "Failed to upload document. Please try again.", + "INVALID_FILE_TYPE": "Por favor, selecione um arquivo PDF válido", + "FILE_TOO_LARGE": "File size must be less than 512MB", + "GENERATED_CONTENT": "Generated FAQ Content", + "PUBLISH_SELECTED": "Publish Selected", + "PUBLISHING": "Publishing...", + "FROM_DOCUMENT": "From document", + "NO_CONTENT": "No generated content available. Upload a PDF document to get started.", + "LOADING": "Carregando conteúdo gerado..." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/inbox.json b/app/javascript/dashboard/i18n/locale/pt_BR/inbox.json new file mode 100644 index 0000000..dc0ba78 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/inbox.json @@ -0,0 +1,95 @@ +{ + "INBOX": { + "LIST": { + "TITLE": "Caixa de Entrada", + "DISPLAY_DROPDOWN": "Exibir", + "LOADING": "Carregando notificações", + "404": "Não há conversas ativas neste grupo.", + "NO_NOTIFICATIONS": "Nenhuma notificação", + "NOTE": "Notificações de todas as caixas inscritas", + "NO_MESSAGES_AVAILABLE": "Ops! Não é possível obter mensagens", + "SNOOZED_UNTIL": "Adiar até", + "SNOOZED_UNTIL_TOMORROW": "Adiado até amanhã", + "SNOOZED_UNTIL_NEXT_WEEK": "Adiada até a próxima semana" + }, + "ACTION_HEADER": { + "SNOOZE": "Adiar notificação", + "DELETE": "Excluir notificação", + "BACK": "Anterior" + }, + "TYPES": { + "CONVERSATION_MENTION": "Você foi mencionado em uma conversa", + "CONVERSATION_CREATION": "Nova conversa criada", + "CONVERSATION_ASSIGNMENT": "Uma conversa foi atribuída a você", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Nova mensagem em uma conversa atribuída", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Nova mensagem em uma conversa na qual você participa", + "SLA_MISSED_FIRST_RESPONSE": "Primeira resposta da meta de SLA perdida na conversa", + "SLA_MISSED_NEXT_RESPONSE": "Próxima resposta da meta de SLA perdida na conversa", + "SLA_MISSED_RESOLUTION": "A resolução da meta de SLA foi perdida na conversa" + }, + "TYPES_NEXT": { + "CONVERSATION_MENTION": "Mencionado", + "CONVERSATION_ASSIGNMENT": "Atribuídas a você", + "CONVERSATION_CREATION": "Nova conversa", + "SLA_MISSED_FIRST_RESPONSE": "Quebra SLA", + "SLA_MISSED_NEXT_RESPONSE": "Quebra SLA", + "SLA_MISSED_RESOLUTION": "Quebra SLA", + "PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Nova Mensagem", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Nova Mensagem", + "SNOOZED_UNTIL": "Adiado para {time}", + "SNOOZED_ENDS": "Adiamento encerrado" + }, + "NO_CONTENT": "Nenhum conteúdo disponível", + "MENU_ITEM": { + "MARK_AS_READ": "Marcar como lida", + "MARK_AS_UNREAD": "Marcar como não lida", + "SNOOZE": "Adiar", + "DELETE": "Excluir", + "MARK_ALL_READ": "Marcar todas como lidas", + "DELETE_ALL": "Excluir todas", + "DELETE_ALL_READ": "Excluir todas as lidas" + }, + "DISPLAY_MENU": { + "SORT": "Ordenar", + "DISPLAY": "Exibir:", + "SORT_OPTIONS": { + "NEWEST": "Recentes", + "OLDEST": "Antigas", + "PRIORITY": "Prioridade" + }, + "DISPLAY_OPTIONS": { + "SNOOZED": "Adiadas", + "READ": "Lida", + "LABELS": "Etiquetas", + "CONVERSATION_ID": "ID da conversa" + } + }, + "ALERTS": { + "MARK_AS_READ": "Notificação marcada como lida", + "MARK_AS_UNREAD": "Notificação marcada como não lida", + "SNOOZE": "Notificação adiada", + "DELETE": "Notificação excluída", + "MARK_ALL_READ": "Todas as notificações marcadas como lidas", + "DELETE_ALL": "Todas as notificações excluídas", + "DELETE_ALL_READ": "Todas as notificações lidas foram excluídas" + }, + "REAUTHORIZE": { + "TITLE": "Reautenticação necessária", + "DESCRIPTION": "Sua conexão com o WhatsApp expirou. Por favor, reconecte para continuar recebendo e enviando mensagens.", + "BUTTON_TEXT": "Reconectar WhatsApp", + "LOADING_FACEBOOK": "Carregando SDK do Facebook...", + "SUCCESS": "WhatsApp reconectado com sucesso", + "ERROR": "Falha ao reconectar o WhatsApp. Por favor, tente novamente.", + "WHATSAPP_APP_ID_MISSING": "WhatsApp App ID não está configurado. Por favor, contate seu administrador.", + "WHATSAPP_CONFIG_ID_MISSING": "WhatsApp Configuration ID não está configurado. Por favor, contate seu administrador.", + "CONFIGURATION_ERROR": "Ocorreu um erro de configuração ao reautenticar.", + "FACEBOOK_LOAD_ERROR": "Falha para carregar o SDK do Facebook. Por favor, tente novamente.", + "TROUBLESHOOTING": { + "TITLE": "Solucionar problemas", + "POPUP_BLOCKED": "Certifique-se de que os pop-ups são permitidos para este site", + "COOKIES": "_Cookies_ de terceiros devem estar habilitados", + "ADMIN_ACCESS": "Você precisa de acesso de administrador na conta do WhatsApp Business" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json new file mode 100644 index 0000000..20ccdce --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json @@ -0,0 +1,1057 @@ +{ + "INBOX_MGMT": { + "HEADER": "Caixas de Entrada", + "DESCRIPTION": "Um canal é o modo de comunicação que seu cliente escolhe para interagir com você. Uma caixa de entrada é onde você gerencia interações para um canal específico. Pode incluir comunicações de várias fontes, como e-mail, chat ao vivo e mídia social.", + "LEARN_MORE": "Saiba mais sobre as caixas de entrada", + "RECONNECTION_REQUIRED": "Sua caixa de entrada está desconectada. Você não receberá novas mensagens até reautorizar.", + "CLICK_TO_RECONNECT": "Clique aqui para reconectar.", + "WHATSAPP_REGISTRATION_INCOMPLETE": "Seu registro no WhatsApp Business não foi concluído. Verifique o status do seu nome de exibição no Meta Business Manager antes de reconectar.", + "COMPLETE_REGISTRATION": "Concluir registro", + "LIST": { + "404": "Não há caixas de entrada anexadas a esta conta." + }, + "CREATE_FLOW": { + "CHANNEL": { + "TITLE": "Escolha o Canal", + "BODY": "Escolha o provedor que você deseja integrar com o Chatwoot." + }, + "INBOX": { + "TITLE": "Criar Caixa de Entrada", + "BODY": "Autenticar sua conta e criar uma caixa de entrada." + }, + "AGENT": { + "TITLE": "Adicionar Agentes", + "BODY": "Adicionar agentes à caixa de entrada criada." + }, + "FINISH": { + "TITLE": "Então!", + "BODY": "Está tudo pronto para começar!" + } + }, + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Nome da Caixa de Entrada", + "PLACEHOLDER": "Digite o nome da caixa de entrada (ex: Acme Inc)", + "ERROR": "Por favor, insira um nome completo válido" + }, + "WEBSITE_NAME": { + "LABEL": "Nome do site", + "PLACEHOLDER": "Informe o nome do seu site (por exemplo: Acme Inc)" + }, + "FB": { + "HELP": "Obs: ao fazer login, apenas temos acesso às mensagens da sua página. Suas mensagens privadas nunca podem ser acessadas pelo Chatwoot.", + "CHOOSE_PAGE": "Escolher Página", + "CHOOSE_PLACEHOLDER": "Selecione uma página da lista", + "INBOX_NAME": "Nome da Caixa de Entrada", + "ADD_NAME": "Adicione um nome para sua caixa de entrada", + "PICK_NAME": "Escolha um nome para sua caixa de entrada", + "PICK_A_VALUE": "Escolha um valor", + "CREATE_INBOX": "Criar Caixa de Entrada" + }, + "INSTAGRAM": { + "CONTINUE_WITH_INSTAGRAM": "Continuar com o Instagram", + "CONNECT_YOUR_INSTAGRAM_PROFILE": "Conecte seu perfil do Instagram", + "HELP": "Para adicionar seu perfil do Instagram como um canal, você precisa autenticar seu perfil do Instagram clicando em 'Continuar com o Instagram' ", + "ERROR_MESSAGE": "Houve um erro ao conectar ao Instagram, por favor, tente novamente", + "ERROR_AUTH": "Houve um erro ao conectar ao Instagram, por favor, tente novamente", + "NEW_INBOX_SUGGESTION": "Esta conta do Instagram estava conectada a uma caixa de entrada diferente e agora foi migrada para aqui. Todas as novas mensagens aparecerão aqui. A caixa de entrada antiga não poderá mais enviar ou receber mensagens para esta conta.", + "DUPLICATE_INBOX_BANNER": "Esta conta do Instagram foi migrada para a nova caixa de entrada de canal do Instagram. Você não poderá mais enviar/receber mensagens do Instagram desta caixa de entrada." + }, + "TIKTOK": { + "CONTINUE_WITH_TIKTOK": "Continuar com TikTok", + "CONNECT_YOUR_TIKTOK_PROFILE": "Conecte seu perfil do TikTok", + "HELP": "Para adicionar seu perfil do TikTok como um canal, é necessário autenticar seu perfil clicando em 'Continuar com TikTok'. ", + "ERROR_MESSAGE": "Ocorreu um erro ao conectar com o TikTok. Tente novamente", + "ERROR_AUTH": "Ocorreu um erro ao conectar com o TikTok. Tente novamente" + }, + "TWITTER": { + "HELP": "Para adicionar seu perfil do Twitter como um canal, você precisa autenticar seu perfil do Twitter clicando em 'Entrar com o Twitter' ", + "ERROR_MESSAGE": "Houve um erro ao conectar com o Twitter, por favor, tente novamente", + "TWEETS": { + "ENABLE": "Criar conversas a partir dos Tweets mencionados" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Canal do website", + "DESC": "Crie um canal para seu site e comece a oferecer suporte a seus clientes através do nosso widget do site.", + "LOADING_MESSAGE": "Criando canal de suporte ao site", + "CHANNEL_AVATAR": { + "LABEL": "Imagem do Canal" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "URL do webhook", + "PLACEHOLDER": "Insira o URL do seu webhook", + "ERROR": "Por favor, insira uma URL válida" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Domínio do website", + "PLACEHOLDER": "Informe o domínio do seu site (por exemplo: acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Seja bem-vindo", + "PLACEHOLDER": "Olá !" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Bem-vindo, saudação", + "PLACEHOLDER": "Nós tornamos simples a conexão conosco. Pergunte qualquer assunto ou compartilhe seus comentários." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Mensagem de saudação do canal", + "PLACEHOLDER": "Acme Inc normalmente responde em algumas horas." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Ativar saudação do canal", + "HELP_TEXT": "Enviar automaticamente uma mensagem de saudação quando uma nova conversa é criada.", + "ENABLED": "Ativado", + "DISABLED": "Desativado" + }, + "REPLY_TIME": { + "TITLE": "Definir o Tempo de Resposta", + "IN_A_FEW_MINUTES": "Em alguns minutos", + "IN_A_FEW_HOURS": "Em algumas horas", + "IN_A_DAY": "Em um dia", + "HELP_TEXT": "Este tempo de resposta será exibido no widget do chat" + }, + "WIDGET_COLOR": { + "LABEL": "Cor do Widget", + "PLACEHOLDER": "Atualize a cor do widget" + }, + "SUBMIT_BUTTON": "Criar caixa de entrada", + "API": { + "ERROR_MESSAGE": "Não conseguimos criar um canal de site, por favor, tente novamente" + } + }, + "TWILIO": { + "TITLE": "Canal Twilio SMS/WhatsApp", + "DESC": "Integre o Twilio e comece a oferecer suporte a seus clientes por SMS ou WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "SID da Conta", + "PLACEHOLDER": "Por favor, insira o SID sua conta no Twilio", + "ERROR": "Este campo é obrigatório" + }, + "API_KEY": { + "USE_API_KEY": "Usar autenticação de chave API", + "LABEL": "Chave da API SID", + "PLACEHOLDER": "Por favor, insira sua chave de API SID", + "ERROR": "Este campo é obrigatório" + }, + "API_KEY_SECRET": { + "LABEL": "Segredo da Chave API", + "PLACEHOLDER": "Por favor, use sua API Key Secret", + "ERROR": "Este campo é obrigatório" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "SID do Serviço de Mensagens", + "PLACEHOLDER": "Por favor, informe seu SID do Serviço de Mensagens do Twilio", + "ERROR": "Este campo é obrigatório", + "USE_MESSAGING_SERVICE": "Usar um Serviço de Mensagens do Twilio" + }, + "CHANNEL_TYPE": { + "LABEL": "Tipo de canal", + "ERROR": "Por favor, selecione seu tipo de canal" + }, + "AUTH_TOKEN": { + "LABEL": "Token de autenticação", + "PLACEHOLDER": "Por favor, digite seu Token de Autenticação do Twilio", + "ERROR": "Este campo é obrigatório" + }, + "CHANNEL_NAME": { + "LABEL": "Nome da Caixa de Entrada", + "PLACEHOLDER": "Por favor, digite um nome para caixa de entrada", + "ERROR": "Este campo é obrigatório" + }, + "PHONE_NUMBER": { + "LABEL": "Número de Telefone", + "PLACEHOLDER": "Por favor, insira o número de telefone do qual a mensagem será enviada.", + "ERROR": "Por favor, forneça um número de telefone válido que comece com o símbolo \"+\" e não contenha espaços." + }, + "API_CALLBACK": { + "TITLE": "URL de Callback", + "SUBTITLE": "Você precisa configurar a URL de Callback de mensagem no Twilio com a URL mencionada aqui." + }, + "SUBMIT_BUTTON": "Criar canal Twilio", + "API": { + "ERROR_MESSAGE": "Não fomos capazes de autenticar as credenciais Twilio, por favor, tente novamente" + } + }, + "SMS": { + "TITLE": "Canal SMS", + "DESC": "Comece a oferecer suporte a seus clientes por SMS.", + "PROVIDERS": { + "LABEL": "Provedor de API", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandwidth" + }, + "API": { + "ERROR_MESSAGE": "Não foi possível salvar o canal SMS" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "ID da Conta", + "PLACEHOLDER": "Por favor, insira o ID de sua conta no Bandwidth", + "ERROR": "Este campo é obrigatório" + }, + "API_KEY": { + "LABEL": "Chave API", + "PLACEHOLDER": "Insira sua chave API Bandwidth", + "ERROR": "Este campo é obrigatório" + }, + "API_SECRET": { + "LABEL": "Chave secreta API", + "PLACEHOLDER": "Insira sua API Secret do Bandwidth", + "ERROR": "Este campo é obrigatório" + }, + "APPLICATION_ID": { + "LABEL": "ID da aplicação", + "PLACEHOLDER": "Por favor, insira o ID de sua conta no Bandwidth", + "ERROR": "Este campo é obrigatório" + }, + "INBOX_NAME": { + "LABEL": "Nome da Caixa de Entrada", + "PLACEHOLDER": "Por favor, digite um nome para caixa de entrada", + "ERROR": "Este campo é obrigatório" + }, + "PHONE_NUMBER": { + "LABEL": "Número de telefone", + "PLACEHOLDER": "Por favor, insira o número de telefone do qual a mensagem será enviada.", + "ERROR": "Por favor, forneça um número de telefone válido que comece com o símbolo \"+\" e não contenha espaços." + }, + "SUBMIT_BUTTON": "Criar canal Bandwidth", + "API": { + "ERROR_MESSAGE": "Não pudemos autenticar as credenciais de Bandwidth, por favor, tente novamente" + }, + "API_CALLBACK": { + "TITLE": "URL de Callback", + "SUBTITLE": "Você precisa configurar a URL de callback de mensagem no Bandwidth com a URL mencionada aqui." + } + } + }, + "WHATSAPP": { + "TITLE": "Canal do WhatsApp", + "DESC": "Comece a oferecer suporte a seus clientes pelo WhatsApp.", + "PROVIDERS": { + "LABEL": "Provedor de API", + "WHATSAPP_EMBEDDED": "WhatsApp Business", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "Cloud do WhatsApp", + "WHATSAPP_CLOUD_DESC": "Configuração rápida via Meta", + "TWILIO_DESC": "Conectar através de credenciais Twilio", + "360_DIALOG": "360Dialog" + }, + "SELECT_PROVIDER": { + "TITLE": "Selecione seu provedor de API", + "DESCRIPTION": "Escolha seu provedor do WhatsApp. Você pode se conectar diretamente através de metade, que não requer nenhuma configuração ou se conectar pelo Twilio usando as credenciais da sua conta." + }, + "INBOX_NAME": { + "LABEL": "Nome da Caixa de Entrada", + "PLACEHOLDER": "Por favor, digite um nome para caixa de entrada", + "ERROR": "Este campo é obrigatório" + }, + "PHONE_NUMBER": { + "LABEL": "Número de telefone", + "PLACEHOLDER": "Por favor, insira o número de telefone do qual a mensagem será enviada.", + "ERROR": "Por favor, forneça um número de telefone válido que comece com o símbolo \"+\" e não contém quaisquer espaços." + }, + "PHONE_NUMBER_ID": { + "LABEL": "ID do número de telefone", + "PLACEHOLDER": "Por favor, insira o ID do número de telefone obtido do painel do desenvolvedor do Facebook.", + "ERROR": "Por favor, insira um valor válido." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "ID da conta do WhatsApp Business", + "PLACEHOLDER": "Por favor, insira o ID da conta do WhatsApp Business obtido do painel do desenvolvedor do Facebook.", + "ERROR": "Por favor, insira um valor válido." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Token de verificação do Webhook", + "PLACEHOLDER": "Insira um token de verificação que você deseja configurar para webhooks do Facebook.", + "ERROR": "Por favor, insira um valor válido." + }, + "API_KEY": { + "LABEL": "Chave da API", + "SUBTITLE": "Configure a chave API do WhatsApp.", + "PLACEHOLDER": "Chave da API", + "ERROR": "Por favor, insira um valor válido." + }, + "API_CALLBACK": { + "TITLE": "URL de callback", + "SUBTITLE": "Você deve configurar a URL do webhook e o token de verificação no portal do desenvolvedor do Facebook com os valores mostrados abaixo.", + "WEBHOOK_URL": "URL do Webhook", + "WEBHOOK_VERIFICATION_TOKEN": "Token de verificação Webhook" + }, + "SUBMIT_BUTTON": "Criar canal do WhatsApp", + "EMBEDDED_SIGNUP": { + "TITLE": "Configuração rápida com Meta", + "DESC": "Use o fluxo de inscrição incorporada do WhatsApp para conectar rapidamente novos números. Você será redirecionado para a Meta para entrar na sua conta do WhatsApp Business. Ter acesso de administrador ajudará a tornar a configuração simples e fácil.", + "BENEFITS": { + "TITLE": "Benefícios da inscrição incorporada:", + "EASY_SETUP": "Nenhuma configuração manual é necessária", + "SECURE_AUTH": "Autenticação segura baseada em OAuth", + "AUTO_CONFIG": "Configuração automática de webhook e número de telefone" + }, + "LEARN_MORE": { + "TEXT": "Para saber mais sobre a inscrição integrada, preços e limitações, visite {link}.", + "LINK_TEXT": "este link" + }, + "SUBMIT_BUTTON": "Conecte-se com WhatsApp Business", + "AUTH_PROCESSING": "Autenticando com Meta", + "WAITING_FOR_BUSINESS_INFO": "Por favor, complete a configuração do negócio na janela da Meta...", + "PROCESSING": "Configurando sua conta do WhatsApp Business", + "LOADING_SDK": "Carregando SDK do Facebook...", + "CANCELLED": "A inscrição no WhatsApp foi cancelada", + "SUCCESS_TITLE": "Conta do WhatsApp Business conectada!", + "WAITING_FOR_AUTH": "Aguardando autenticação...", + "INVALID_BUSINESS_DATA": "Dados de negócio inválidos recebidos do Facebook. Por favor, tente novamente.", + "SIGNUP_ERROR": "Ocorreu um erro no cadastro", + "AUTH_NOT_COMPLETED": "Autenticação não concluída. Por favor, reinicie o processo.", + "SUCCESS_FALLBACK": "A conta do WhatsApp Business foi configurada com sucesso", + "MANUAL_FALLBACK": "Se o seu número já estiver conectado à Plataforma WhatsApp Business (API) ou se você for um provedor de tecnologia integrando o seu próprio número, use o fluxo de {link}", + "MANUAL_LINK_TEXT": "fluxo de configuração manual" + }, + "API": { + "ERROR_MESSAGE": "Não foi possível salvar o canal do WhatsApp" + } + }, + "VOICE": { + "TITLE": "Canal de Voz", + "DESC": "Integre o Twilio Voice e comece a oferecer suporte a seus clientes através de chamadas telefônicas.", + "PHONE_NUMBER": { + "LABEL": "Número de Telefone", + "PLACEHOLDER": "Digite seu número de telefone (por exemplo, +551234567890)", + "ERROR": "Por favor, forneça um número de telefone válido no formato E.164 (por exemplo, +551234567890)" + }, + "TWILIO": { + "ACCOUNT_SID": { + "LABEL": "SID da Conta", + "PLACEHOLDER": "Insira o SID da sua Conta Twilio", + "REQUIRED": "O SID da conta é necessário" + }, + "AUTH_TOKEN": { + "LABEL": "Token de autenticação", + "PLACEHOLDER": "Por favor, digite seu Token de Autenticação do Twilio", + "REQUIRED": "Um Token de autenticação é necessário" + }, + "API_KEY_SID": { + "LABEL": "Chave da API SID", + "PLACEHOLDER": "Insira sua chave de API do Twilio SID", + "REQUIRED": "API Key SID é obrigatório" + }, + "API_KEY_SECRET": { + "LABEL": "Segredo da Chave API", + "PLACEHOLDER": "Digite o segredo da sua chave de API do Twilio", + "REQUIRED": "Segredo da chave da API é obrigatório" + } + }, + "CONFIGURATION": { + "TWILIO_VOICE_URL_TITLE": "URL do Twilio Voice", + "TWILIO_VOICE_URL_SUBTITLE": "Configure este URL como a Voice URL no seu número de telefone da Twilio e no aplicativo TwiML.", + "TWILIO_STATUS_URL_TITLE": "Status Callback URL da Twilio", + "TWILIO_STATUS_URL_SUBTITLE": "Configure este URL como a Status Callback URL no seu número de telefone da Twilio." + }, + "SUBMIT_BUTTON": "Criar Canal de Voz", + "API": { + "ERROR_MESSAGE": "Não conseguimos criar o canal de voz" + } + }, + "API_CHANNEL": { + "TITLE": "Canal da API", + "DESC": "Integre com canal API e comece a ajudar seus clientes.", + "CHANNEL_NAME": { + "LABEL": "Nome do Canal", + "PLACEHOLDER": "Por favor, insira um nome de canal", + "ERROR": "Este campo é obrigatório" + }, + "WEBHOOK_URL": { + "LABEL": "URL do Webhook", + "SUBTITLE": "Configure a URL onde você deseja receber callbacks em eventos.", + "PLACEHOLDER": "URL do Webhook" + }, + "SUBMIT_BUTTON": "Criar canal de API", + "API": { + "ERROR_MESSAGE": "Não foi possível salvar o canal de API" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "Canal de e-mail", + "DESC": "Integre sua caixa de entrada de e-mail.", + "CHANNEL_NAME": { + "LABEL": "Nome do Canal", + "PLACEHOLDER": "Por favor, insira um nome de canal", + "ERROR": "Este campo é obrigatório" + }, + "EMAIL": { + "LABEL": "e-mail", + "SUBTITLE": "E-mail para onde os seus clientes lhe enviam tickets de suporte", + "PLACEHOLDER": "e-mail" + }, + "SUBMIT_BUTTON": "Criar canal de e-mail", + "API": { + "ERROR_MESSAGE": "Não foi possível salvar o canal de e-mail" + }, + "FINISH_MESSAGE": "Comece a encaminhar seus e-mails para o seguinte endereço de e-mail.", + "FINISH_MESSAGE_NO_FORWARDING": "Sua caixa de entrada de e-mail foi criada com sucesso! É necessário configurar as credenciais de SMTP e IMAP para enviar e receber e-mails. Sem essas configurações, nenhum e-mail será processado.", + "FORWARDING_ADDRESS_LABEL": "Encaminhe os e-mails para este endereço:", + "CONFIGURE_SMTP_IMAP_LINK": "Clique aqui", + "CONFIGURE_SMTP_IMAP_TEXT": " para configurar IMAP e SMTP" + }, + "LINE_CHANNEL": { + "TITLE": "Canal LINE", + "DESC": "Integre com o canal LINE e comece a apoiar seus clientes.", + "CHANNEL_NAME": { + "LABEL": "Nome do Canal", + "PLACEHOLDER": "Por favor, insira um nome de canal", + "ERROR": "Este campo é obrigatório" + }, + "LINE_CHANNEL_ID": { + "LABEL": "ID do canal LINE", + "PLACEHOLDER": "ID do canal LINE" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "Canal de LINHA secreto", + "PLACEHOLDER": "Canal de LINHA secreto" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "ID do canal Token", + "PLACEHOLDER": "ID do canal Token" + }, + "SUBMIT_BUTTON": "Criar Canal", + "API": { + "ERROR_MESSAGE": "Não foi possível salvar o canal da LINHA" + }, + "API_CALLBACK": { + "TITLE": "URL de retorno", + "SUBTITLE": "Você precisa configurar a URL do webhook no aplicativo LINE com a URL mencionada aqui." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Canal do Telegram", + "DESC": "Integre com o canal do Telegram e comece a apoiar seus clientes.", + "BOT_TOKEN": { + "LABEL": "Bot Token", + "SUBTITLE": "Configure o token do bot que obteve do Telegram BotFather.", + "PLACEHOLDER": "Bot Token" + }, + "SUBMIT_BUTTON": "Criar canal do Telegram", + "API": { + "ERROR_MESSAGE": "Não foi possível salvar o canal de e-mail" + } + }, + "AUTH": { + "TITLE": "Escolha um canal", + "DESC": "O Chatwoot suporta widgets de chats ao vivo, Facebook Messenger, perfis do Twitter, WhatsApp, E-mails, etc., como canais. Se você quiser criar um canal personalizado, você pode criá-lo usando o canal API. Para começar, escolha um dos canais abaixo.", + "TITLE_NEXT": "Concluir a configuração", + "TITLE_FINISH": "Então!", + "CHANNEL": { + "WEBSITE": { + "TITLE": "Site", + "DESCRIPTION": "Criar um widget de chat ao vivo" + }, + "FACEBOOK": { + "TITLE": "Facebook", + "DESCRIPTION": "Conectar sua página do Facebook" + }, + "WHATSAPP": { + "TITLE": "WhatsApp", + "DESCRIPTION": "Atenda seus clientes no WhatsApp" + }, + "EMAIL": { + "TITLE": "e-mail", + "DESCRIPTION": "Conectar com Gmail, Outlook ou outros provedores" + }, + "SMS": { + "TITLE": "SMS", + "DESCRIPTION": "Integrar o canal SMS com Twilio ou Bandwidth" + }, + "API": { + "TITLE": "API", + "DESCRIPTION": "Crie um canal personalizado usando nossa API" + }, + "TELEGRAM": { + "TITLE": "Telegram", + "DESCRIPTION": "Configure o canal do Telegram usando o token do bot" + }, + "LINE": { + "TITLE": "Line", + "DESCRIPTION": "Integre seu canal do LINE" + }, + "INSTAGRAM": { + "TITLE": "Instagram", + "DESCRIPTION": "Conecte sua conta do Instagram" + }, + "TIKTOK": { + "TITLE": "TikTok", + "DESCRIPTION": "Conecte sua conta do TikTok" + }, + "VOICE": { + "TITLE": "Voz", + "DESCRIPTION": "Integre com o Twilio Voice" + } + } + }, + "AGENTS": { + "TITLE": "Agentes", + "DESC": "Aqui você pode adicionar agentes para gerenciar sua caixa de entrada recém-criada. Somente esses agentes selecionados terão acesso à sua caixa de entrada. Os agentes que não fazem parte desta caixa de entrada não poderão ver ou responder a mensagens nessa caixa de entrada quando fizerem login.+ + + {{ '---' }} +
++ {{ truncatedContent }} +
++ {{ $t('SEARCH.EMPTY_STATE', { item: titleCase, query }) }} +
++ {{ t('SEARCH.EMPTY_STATE_FULL', { query }) }} +
+
+
+ {{ t('SEARCH.EMPTY_STATE_DEFAULT') }} +
++ {{ $t('INBOX_MGMT.WIDGET_BUILDER.BODY.USER_MESSAGE') }} +
++ {{ $t('INBOX_MGMT.WIDGET_BUILDER.BODY.AGENT_MESSAGE') }} +
+
+
+ {{ $t('CONVERSATION_PARTICIPANTS.NO_PARTICIPANTS_TEXT') }} +
++ {{ $t('CONVERSATION_PARTICIPANTS.YOU_ARE_WATCHING') }} +
++ {{ $t('MACROS.LIST.404') }} +
++ {{ $t(`MACROS.ACTIONS.${action.actionName}`) }} +
+{{ action.actionValue }}
++ {{ additionalAttributes.description }} +
++ {{ t('CONTACTS_LAYOUT.SIDEBAR.NOTES.CONVERSATION_EMPTY_STATE') }} +
+ ++ {{ emptyStateMessage }} +
+ ++ {{ + isOnChatwootCloud + ? $t('HELP_CENTER.UPGRADE_PAGE.DESCRIPTION') + : $t('HELP_CENTER.UPGRADE_PAGE.SELF_HOSTED_DESCRIPTION') + }} +
++ {{ feature.description }} +
++ {{ $t('INBOX.LIST.NO_NOTIFICATIONS') }} +
+|
+
+
+ + {{ + `#${ + notificationItem.primary_actor + ? notificationItem.primary_actor.id + : $t(`NOTIFICATIONS_PAGE.DELETE_TITLE`) + }` + }} ++ + |
+ + + {{ + $t( + `NOTIFICATIONS_PAGE.TYPE_LABEL.${notificationItem.notification_type}` + ) + }} + + | +
+ |
+ + + | ++ + | +
+ {{ noRecordsMessage }} +
++ {{ markedForDeletionMessage }} +
+
+
| + {{ thHeader }} + | + + +||
|---|---|---|
|
+
+
+
+
+ {{ bot.name }}
+
+ {{ $t('AGENT_BOTS.GLOBAL_BOT_BADGE') }}
+
+
+
+ {{ bot.description }}
+
+
+ |
+ + {{ bot.outgoing_url || bot.bot_config?.webhook_url }} + | +
+
+
+ |
+
|
+
+
+
+
+ {{ agent.name }}
+
+ {{ agent.email }}
+
+ |
+
+ + + {{ getAgentRoleName(agent) }} + + + + | ++ + {{ $t('AGENT_MGMT.LIST.VERIFIED') }} + + + {{ $t('AGENT_MGMT.LIST.VERIFICATION_PENDING') }} + + | +
+
+
+ |
+
| + {{ tableHeader }} + | + + +||||
|---|---|---|---|---|
| + {{ attribute.attribute_display_name }} + | ++ {{ attribute.attribute_description }} + | ++ {{ + $t( + `ATTRIBUTES_MGMT.ATTRIBUTE_TYPES.${attribute.attribute_display_type?.toUpperCase()}` + ) + }} + | ++ {{ attribute.attribute_key }} + | +
+
+
+ |
+
+ {{ $t('ATTRIBUTES_MGMT.LIST.EMPTY_RESULT.404') }} +
++ {{ $t('AUDIT_LOGS.LIST.404') }} +
+| + {{ thHeader }} + | + + +||
|---|---|---|
| + {{ generateLogText(auditLogItem) }} + | ++ {{ + messageTimestamp( + auditLogItem.created_at, + 'MMM dd, yyyy hh:mm a' + ) + }} + | ++ {{ auditLogItem.remote_address }} + | +
| + {{ thHeader }} + | + + +
|---|
+ {{ description }} +
++ {{ $t('CANNED_MGMT.LIST.404') }} +
+|
+
+ {{ thHeader }}
+
+ |
+
+
+ ||
|---|---|---|
| + {{ cannedItem.short_code }} + | ++ {{ getPlainText(cannedItem.content) }} + | +
+ |
+
{{ description }}
+{{ modelDescription }}
+{{ description }}
++ {{ $t(`${featurePrefix}.${i18nKey}.UPGRADE_PROMPT`) }} + + {{ $t(`${featurePrefix}.ENTERPRISE_PAYWALL.ASK_ADMIN`) }} + +
+ +
+
+
| + + {{ thHeader }} + + | + + +
|---|
+ {{ $t('INBOX_MGMT.ADD.WHATSAPP.API_CALLBACK.WEBHOOK_URL') }} +
++ {{ + $t( + 'INBOX_MGMT.ADD.WHATSAPP.API_CALLBACK.WEBHOOK_VERIFICATION_TOKEN' + ) + }} +
++ {{ $t('INBOX_MGMT.FINISH.WHATSAPP_QR_INSTRUCTION') }} +
++ {{ $t('INBOX_MGMT.FINISH.MESSENGER_QR_INSTRUCTION') }} +
++ {{ $t('INBOX_MGMT.FINISH.TELEGRAM_QR_INSTRUCTION') }} +
+ +|
+
+
+
+
+
+
+
+
+ {{ inbox.name }}
+
+
+ |
+
+
+
+
+ |
+
+ {{ $t('INBOX_MGMT.HELP_CENTER.SUB_TEXT') }} +
+
+
+ + {{ replaceInstallationName($t('INBOX_MGMT.ADD.FB.HELP')) }} +
++ {{ $t('INBOX_MGMT.ADD.INSTAGRAM.HELP') }} +
++ {{ $t('INBOX_MGMT.ADD.TIKTOK.HELP') }} +
+{{ $t('INBOX_MGMT.ADD.TWITTER.HELP') }}
++ {{ $t('INBOX_MGMT.ADD.WHATSAPP.SELECT_PROVIDER.DESCRIPTION') }} +
++ {{ $t('INBOX_MGMT.ADD.WHATSAPP.EMBEDDED_SIGNUP.DESC') }} +
++ {{ message }} +
+ ++ {{ $t('INBOX_MGMT.ADD.EMAIL_CHANNEL.FORWARDING_ADDRESS_LABEL') }} +
+
+
+ {{ t('INBOX_MGMT.ACCOUNT_HEALTH.DESCRIPTION') }} +
+{{ t('INBOX_MGMT.ACCOUNT_HEALTH.NO_DATA') }}
++ {{ $t('INBOX_MGMT.AUTO_ASSIGNMENT.MAX_ASSIGNMENT_LIMIT_SUB_TEXT') }} +
+ ++ {{ $t('INBOX_MGMT.SETTINGS_POPUP.FORWARD_EMAIL_NOT_CONFIGURED') }} +
++ {{ + $t( + 'INBOX_MGMT.SETTINGS_POPUP.WHATSAPP_EMBEDDED_SIGNUP_DESCRIPTION' + ) + }} +
+
+ {{ $t('INBOX_MGMT.CSAT.MESSAGE_PREVIEW.LABEL') }}
+
+ {{ + isAnyWhatsAppChannel + ? $t('INBOX_MGMT.CSAT.WHATSAPP_NOTE') + : $t('INBOX_MGMT.CSAT.NOTE') + }} +
++ {{ $t('INTEGRATION_SETTINGS.DASHBOARD_APPS.LIST.404') }} +
+| + {{ thHeader }} + | + + +
|---|
+ {{ replaceInstallationName(integrationDescription) }} +
++ {{ replaceInstallationName(description) }} +
+| + {{ hookHeader }} + | ++ {{ $t('INTEGRATION_APPS.LIST.INBOX') }} + | + + +|
|---|---|---|
| + {{ property }} + | ++ {{ inboxName(hook) }} + | +
+ |
+
+ {{ + $t('INTEGRATION_APPS.NO_HOOK_CONFIGURED', { + integrationId: integration.id, + }) + }} +
++ {{ $t('INTEGRATION_SETTINGS.SHOPIFY.ERROR') }} +
++ {{ replaceInstallationName(integration.description) }} +
++ {{ + $t('INTEGRATION_SETTINGS.SLACK.SELECT_CHANNEL.ATTENTION_REQUIRED') + }} +
+| + {{ thHeader }} + | + + +
|---|
| + {{ thHeader }} + | + + +|||
|---|---|---|---|
| + + {{ label.title }} + + | +{{ label.description }} | +
+
+
+ {{ label.color }}
+
+ |
+
+
+
+ |
+
| + {{ thHeader }} + | + + +
|---|
+ {{ $t('MACROS.EDITOR.VISIBILITY.LABEL') }} +
++ {{ $t('MACROS.EDITOR.VISIBILITY.GLOBAL.LABEL') }} +
++ {{ $t('MACROS.EDITOR.VISIBILITY.GLOBAL.DESCRIPTION') }} +
++ {{ $t('MACROS.EDITOR.VISIBILITY.PERSONAL.LABEL') }} +
++ {{ $t('MACROS.EDITOR.VISIBILITY.PERSONAL.DESCRIPTION') }} +
++ {{ $t('MACROS.ORDER_INFO') }} +
++ {{ description }} +
++ {{ $t('MFA_SETTINGS.MANAGEMENT.BACKUP_CODES_DESC') }} +
++ {{ $t('MFA_SETTINGS.MANAGEMENT.DISABLE_MFA_DESC') }} +
++ {{ $t('MFA_SETTINGS.SUBTITLE') }} +
++ {{ $t('MFA_SETTINGS.DESCRIPTION') }} +
++ {{ $t('MFA_SETTINGS.SETUP.STEP1_DESCRIPTION') }} +
++ {{ $t('MFA_SETTINGS.BACKUP.DESCRIPTION') }} +
++ {{ $t('MFA_SETTINGS.BACKUP.IMPORTANT') }} + {{ $t('MFA_SETTINGS.BACKUP.IMPORTANT_NOTE') }} +
++ {{ $t('MFA_SETTINGS.ENHANCE_SECURITY_DESC') }} +
++ {{ $t('MFA_SETTINGS.STATUS_ENABLED_DESC') }} +
++ {{ description }} +
++ {{ description }} +
+| + {{ header.column.columnDef.header }} + | +||||
|---|---|---|---|---|
|
+ |
+
+
+
+ {{ $t(getRatingData(row.rating).translationKey) }}
+
+
+ |
+
+
+ {{ $t('CSAT_REPORTS.NO_FEEDBACK') }}
+
+
+
+ |
+
+ |
+
+
+
+
+ |
+
|
+ |
+ ||||
+ {{ $t('AGENT_REPORTS.FILTER_DROPDOWN_LABEL') }} +
++ {{ props.option.name }} +
++ {{ $t('LABEL_REPORTS.FILTER_DROPDOWN_LABEL') }} +
++ + {{ $t('INBOX_REPORTS.FILTER_DROPDOWN_LABEL') }} + + + {{ $t('TEAM_REPORTS.FILTER_DROPDOWN_LABEL') }} + + + {{ $t('FORMS.MULTISELECT.SELECT_ONE') }} + +
++ {{ $t('REPORT.DURATION_FILTER_LABEL') }} +
++ {{ $t('REPORT.CUSTOM_DATE_RANGE.PLACEHOLDER') }} +
++ {{ $t('REPORT.GROUP_BY_FILTER_DROPDOWN_LABEL') }} +
++ {{ headerDescription }} +
++ {{ metric }} +
++ {{ metric }} +
++ {{ t('SECURITY_SETTINGS.SAML.ATTRIBUTE_MAPPING.DESCRIPTION') }} +
+ +emailfirst_namelast_name+ {{ $t('SLA.LIST.404') }} +
+|
+
+
+
+ |
+ + {{ $t('TEAMS_SETTINGS.AGENTS.AGENT') }} + | ++ {{ $t('TEAMS_SETTINGS.AGENTS.EMAIL') }} + | +
|
+
+ handleSelectAgent(agent.id)"
+ />
+
+ |
+
+
+
+ + {{ agent.name }} ++ |
+ + {{ agent.email || '---' }} + | +
+ {{ + $t('TEAMS_SETTINGS.AGENTS.SELECTED_COUNT', { + selected: selectedAgents.length, + total: agentList.length, + }) + }} +
++ {{ $t('TEAMS_SETTINGS.LIST.404') }} +
+ +|
+ {{ team.name }}
+ {{ team.description }} + |
+
+
+ |
+
+ {{ limitExceededMessage }} +
++ {{ t('GENERAL_SETTINGS.LIMIT_MESSAGES.NON_ADMIN') }} +
+CodeBold
+ {{ t('PORTAL.IFRAME_ERROR') }}
+
+ {{ logisticsName }}: {{ trackingNumber }}
+
+ {{ latestLog }} +
+{{ latestTime }}
+Chatwoot is an opensource tool. Chatwoot
' + ); + }); + it('should format correctly', () => { + const message = + 'Chatwoot is an opensource tool. https://www.chatwoot.com'; + expect(new MessageFormatter(message).formattedMessage).toMatch( + 'Chatwoot is an opensource tool. https://www.chatwoot.com
' + ); + }); + it('should not convert template variables to links when linkify is disabled', () => { + const message = 'Hey {{customer.name}}, check https://chatwoot.com'; + const formatter = new MessageFormatter(message, false, false, false); + expect(formatter.formattedMessage).toMatch( + 'Hey {{customer.name}}, check https://chatwoot.com
' + ); + }); + }); + + describe('parses heading to strong', () => { + it('should format correctly', () => { + const message = '### opensource \n ## tool'; + expect(new MessageFormatter(message).formattedMessage).toMatch( + `Chatwoot is an opensource tool. 
Chatwoot is an opensource tool. 
Chatwoot is an opensource tool. 
@chatwootapp is an opensource tool thanks @longnonexistenttwitterusername
' + ); + }); + + it('should add links to #tags', () => { + const message = '#chatwootapp is an opensource tool'; + expect( + new MessageFormatter(message, true, false).formattedMessage + ).toMatch( + '#chatwootapp is an opensource tool
' + ); + }); + }); + + describe('private notes', () => { + it('should return the same string if not tags or @mentions', () => { + const message = 'Chatwoot is an opensource tool'; + expect(new MessageFormatter(message).formattedMessage).toMatch(message); + }); + + it('should add links to @mentions', () => { + const message = + '@chatwootapp is an opensource tool thanks @longnonexistenttwitterusername'; + expect( + new MessageFormatter(message, false, true).formattedMessage + ).toMatch(message); + }); + + it('should add links to #tags', () => { + const message = '#chatwootapp is an opensource tool'; + expect( + new MessageFormatter(message, false, true).formattedMessage + ).toMatch(message); + }); + }); + + describe('plain text content', () => { + it('returns the plain text without HTML', () => { + const message = + 'Chatwoot is an opensource tool. https://www.chatwoot.com'; + expect(new MessageFormatter(message).plainText).toMatch( + 'Chatwoot is an opensource tool. https://www.chatwoot.com' + ); + }); + }); + + describe('#sanitize', () => { + it('sanitizes markup and removes all unnecessary elements', () => { + const message = + '[xssLink](javascript:alert(document.cookie))\n[normalLink](https://google.com)**I am a bold text paragraph**'; + expect(new MessageFormatter(message).formattedMessage).toMatch( + `[xssLink](javascript:alert(document.cookie))
+normalLinkI am a bold text paragraph
+ {{ 'Chat with the source' }} + + {{ responseSourceName }} + + {{ 'and evaluate it’s efficiency.' }} +
++ {{ messageContent }} +
++ {{ reviewContent }} +
+
+ {{ $t('COMMON.OR') }}
+
+
tags for paragraph breaks, but Telegram doesn't support
+ html_with_breaks = html.gsub(%r{
\s*}, "\n\n") + + # Remove opening and closing
tags
+ html_with_breaks = html_with_breaks.gsub(%r{?p>}, '')
+
+ # Sanitize to only allowed tags
+ stripped_html = Rails::HTML5::SafeListSanitizer.new.sanitize(html_with_breaks, tags: %w[b strong i em u ins s strike del a code pre blockquote],
+ attributes: %w[href])
+
+ # Convert Hi <%= @resource.name %>, <%= account_user.inviter.name %>, with <%= account_user.account.name %>, has invited you to try out <%= global_config['BRAND_NAME'] || 'Chatwoot' %>. You can login to your <%= global_config['BRAND_NAME'] || 'Chatwoot' %> account through the link below:
+ Welcome to <%= global_config['BRAND_NAME'] || 'Chatwoot' %>! We have a suite of powerful tools ready for you to explore. Before that we quickly need to verify your email address to know it's really you.
+ Please take a moment and click the link below and activate your account. <%= link_to 'Confirm my account', frontend_url('auth/confirmation', confirmation_token: @token) %> <%= link_to 'Login to my account', frontend_url('auth/sign_in') %> <%= link_to 'Confirm my account', frontend_url('auth/password/edit', reset_password_token: @resource.send(:set_reset_password_token)) %> <%= link_to 'Confirm my account', frontend_url('auth/confirmation', confirmation_token: @token) %> Hello <%= @resource.email %>! We're contacting you to notify you that your password has been changed. Hello <%= @resource.email %>! Someone has requested a link to change your password. You can do this through the link below. <%= link_to 'Change my password', frontend_url('auth/password/edit', reset_password_token: @token) %> If you didn't request this, please ignore this email. Your password won't change until you access the link above and create a new one. Hello <%= @resource.email %>! Your account has been locked due to an excessive number of unsuccessful sign in attempts. Click the link below to unlock your account: <%= link_to 'Unlock my account', unlock_url(@resource, unlock_token: @token) %> Hello, This is a notification to inform you that an account has been permanently deleted from your Chatwoot instance.
+ Chatwoot Installation: {{ meta.instance_url }}
+ Deleted Users ({{ meta.deleted_user_count }}):
+ Deleted Users: None
+ This email serves as a record for compliance purposes. Thank you, Hello there, We've noticed that your Chatwoot account {{ meta.account_name }} has been inactive for some time. Because of this, it's scheduled for deletion on {{ meta.deletion_date }}. How do I keep my account? Log in to your Chatwoot account before {{ meta.deletion_date }}. From your account settings, you can cancel the deletion and continue using your account. What happens if I don't cancel? Unless you cancel the account deletion before {{ meta.deletion_date }}, your account and all associated data — including conversations, contacts, reports, and settings — will be permanently deleted. Why are we doing this? To keep things secure and efficient, we regularly remove inactive accounts so our systems remain optimized for active teams. If you have any questions, feel free to reach us at hello@chatwoot.com. — The Chatwoot Team Hello there, An account administrator has requested deletion of the Chatwoot account {{ meta.account_name }}. The account is scheduled for deletion on {{ meta.deletion_date }}. What happens next? If you change your mind before the deletion date, you can cancel this request by visiting your account settings. — The Chatwoot Team Hello there, The automation rule {{meta['rule_name']}} has been disabled becuase it has invalid conditions. This typically happens when you delete any custom attributes which are still being used in automation rules.
+Click here to update the conditions.
+ Hi Your contact export file is ready to download.
+Click here to download the export file.
+ Hello, Your contact import has been completed. Please check the contacts tab to view the imported contacts. Number of records imported: {{meta['imported_contacts']}} Number of records failed: {{meta['failed_contacts']}}
+ Click here to view the imported contacts.
+
+ Click here to view failed records.
+ Hello, Your contact import has failed. It appears that the CSV file you uploaded may not be valid. We kindly request that you review the file and ensure it complies with the required format. Hello, Your email inbox has been disconnected due to configuration errors. Please update it to continue receiving messages.
+Click here to re-connect.
+ Hello, Your Facebook Inbox Access has expired. Please reconnect Facebook Page to continue receiving messages.
+Click here to re-connect.
+ Hello, Your Instagram Inbox Access has expired. Please reconnect Instagram to continue receiving messages.
+Click here to re-connect.
+ Hello, Your Whatsapp Access has expired. Please reconnect Whatsapp to continue receiving messages.
+Click here to re-connect.
+ Hello there, Your Dialogflow integration was disconnected because of permission issues. To resolve this, please delete the integration from the admin dashboard and reconnect it using new credentials. Hello, Your Slack integration has expired. To continue receiving messages on Slack, please delete the integration and connect your workspace again.
+Click here to re-connect.
+ Hi {{user.available_name}}, You have received a new message in your assigned conversation.
+Click here to get cracking.
+ Hi {{user.available_name}}, Time to save the world. A new conversation has been assigned to you
+Click here to get cracking.
+ Hi {{user.available_name}}
+ A new conversation (#{{conversation.display_id}}) has been created in {{ inbox.name }}.
+ {{ conversation.contact_name }} wrote:
+ Hi {{user.available_name}}, You've been mentioned in a conversation. {{message.sender_display_name}} wrote: Previous messages:
+ View Message
+ Hi {{user.available_name}}, You have received a new message in a conversation you are participating. Click here to get cracking. Hi {{user.available_name}},
+ Conversation #{{conversation.display_id}} in {{ inbox.name }}
+ has missed the SLA for first response under policy {{ sla_policy.name }}.
+
+Please address immediately.
+ Hi {{user.available_name}},
+ Conversation #{{conversation.display_id}} in {{ inbox.name }}
+ has missed the SLA for next response under policy {{ sla_policy.name }}..
+
+Please address immediately.
+ Hi {{user.available_name}},
+ Conversation #{{conversation.display_id}} in {{ inbox.name }}
+ has missed the SLA for resolution time under policy {{ sla_policy.name }}.
+
+Please address immediately.
+ Attachments: <%= attachment.file.filename.to_s %>
+ <% if @inbox.timezone.present? %>
+ <%= message.created_at.in_time_zone(@inbox.timezone).strftime('%b %d, %I:%M %p %Z') %>
+ <% else %>
+ <%= message.created_at.strftime('%b %d, %I:%M %p %Z') %>
+ <% end %>
+ Attachments: <%= attachment.file.filename.to_s %> Hi <%= @contact.name %>, You have new messages on your conversation. Click here to rate the conversation.
+ <% if message.content.present? %>
+
+ <% if message.content %>
+ <%= ChatwootMarkdownRenderer.new(message.content).render_message %>
+ <% end %>
+ <% if message.attachments.present? %>
+ Attachments:
tags to newlines for Telegram
+ stripped_html.gsub(%r{
}, "\n")
+ end
+
+ def message_request(chat_id, text, reply_markup = nil, reply_to_message_id = nil, business_connection_id: nil)
+ # text is already converted to HTML by MessageContentPresenter
+ business_body = {}
+ business_body[:business_connection_id] = business_connection_id if business_connection_id
+
+ HTTParty.post("#{telegram_api_url}/sendMessage",
+ body: {
+ chat_id: chat_id,
+ text: text,
+ reply_markup: reply_markup,
+ parse_mode: 'HTML',
+ reply_to_message_id: reply_to_message_id
+ }.merge(business_body))
+ end
+end
diff --git a/app/models/channel/tiktok.rb b/app/models/channel/tiktok.rb
new file mode 100644
index 0000000..8a6876a
--- /dev/null
+++ b/app/models/channel/tiktok.rb
@@ -0,0 +1,45 @@
+# == Schema Information
+#
+# Table name: channel_tiktok
+#
+# id :bigint not null, primary key
+# access_token :string not null
+# expires_at :datetime not null
+# refresh_token :string not null
+# refresh_token_expires_at :datetime not null
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :integer not null
+# business_id :string not null
+#
+# Indexes
+#
+# index_channel_tiktok_on_business_id (business_id) UNIQUE
+#
+class Channel::Tiktok < ApplicationRecord
+ include Channelable
+ include Reauthorizable
+ self.table_name = 'channel_tiktok'
+
+ # TODO: Remove guard once encryption keys become mandatory (target 3-4 releases out).
+ if Chatwoot.encryption_configured?
+ encrypts :access_token
+ encrypts :refresh_token
+ end
+
+ AUTHORIZATION_ERROR_THRESHOLD = 1
+
+ validates :business_id, uniqueness: true, presence: true
+ validates :access_token, presence: true
+ validates :refresh_token, presence: true
+ validates :expires_at, presence: true
+ validates :refresh_token_expires_at, presence: true
+
+ def name
+ 'Tiktok'
+ end
+
+ def validated_access_token
+ Tiktok::TokenService.new(channel: self).access_token
+ end
+end
diff --git a/app/models/channel/twilio_sms.rb b/app/models/channel/twilio_sms.rb
new file mode 100644
index 0000000..2f9130c
--- /dev/null
+++ b/app/models/channel/twilio_sms.rb
@@ -0,0 +1,78 @@
+# == Schema Information
+#
+# Table name: channel_twilio_sms
+#
+# id :bigint not null, primary key
+# account_sid :string not null
+# api_key_sid :string
+# auth_token :string not null
+# content_templates :jsonb
+# content_templates_last_updated :datetime
+# medium :integer default("sms")
+# messaging_service_sid :string
+# phone_number :string
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :integer not null
+#
+# Indexes
+#
+# index_channel_twilio_sms_on_account_sid_and_phone_number (account_sid,phone_number) UNIQUE
+# index_channel_twilio_sms_on_messaging_service_sid (messaging_service_sid) UNIQUE
+# index_channel_twilio_sms_on_phone_number (phone_number) UNIQUE
+#
+
+class Channel::TwilioSms < ApplicationRecord
+ include Channelable
+ include Rails.application.routes.url_helpers
+
+ self.table_name = 'channel_twilio_sms'
+
+ # TODO: Remove guard once encryption keys become mandatory (target 3-4 releases out).
+ encrypts :auth_token if Chatwoot.encryption_configured?
+
+ validates :account_sid, presence: true
+ # The same parameter is used to store api_key_secret if api_key authentication is opted
+ validates :auth_token, presence: true
+
+ EDITABLE_ATTRS = [
+ :account_sid,
+ :auth_token
+ ].freeze
+
+ # Must have _one_ of messaging_service_sid _or_ phone_number, and messaging_service_sid is preferred
+ validates :messaging_service_sid, uniqueness: true, presence: true, unless: :phone_number?
+ validates :phone_number, absence: true, if: :messaging_service_sid?
+ validates :phone_number, uniqueness: true, allow_nil: true
+
+ enum medium: { sms: 0, whatsapp: 1 }
+
+ def name
+ medium == 'sms' ? 'Twilio SMS' : 'Whatsapp'
+ end
+
+ def send_message(to:, body:, media_url: nil)
+ params = send_message_from.merge(to: to, body: body)
+ params[:media_url] = media_url if media_url.present?
+ params[:status_callback] = twilio_delivery_status_index_url
+ client.messages.create(**params)
+ end
+
+ private
+
+ def client
+ if api_key_sid.present?
+ Twilio::REST::Client.new(api_key_sid, auth_token, account_sid)
+ else
+ Twilio::REST::Client.new(account_sid, auth_token)
+ end
+ end
+
+ def send_message_from
+ if messaging_service_sid?
+ { messaging_service_sid: messaging_service_sid }
+ else
+ { from: phone_number }
+ end
+ end
+end
diff --git a/app/models/channel/twitter_profile.rb b/app/models/channel/twitter_profile.rb
new file mode 100644
index 0000000..4ec167c
--- /dev/null
+++ b/app/models/channel/twitter_profile.rb
@@ -0,0 +1,68 @@
+# == Schema Information
+#
+# Table name: channel_twitter_profiles
+#
+# id :bigint not null, primary key
+# tweets_enabled :boolean default(TRUE)
+# twitter_access_token :string not null
+# twitter_access_token_secret :string not null
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :integer not null
+# profile_id :string not null
+#
+# Indexes
+#
+# index_channel_twitter_profiles_on_account_id_and_profile_id (account_id,profile_id) UNIQUE
+#
+
+class Channel::TwitterProfile < ApplicationRecord
+ include Channelable
+
+ # TODO: Remove guard once encryption keys become mandatory (target 3-4 releases out).
+ if Chatwoot.encryption_configured?
+ encrypts :twitter_access_token
+ encrypts :twitter_access_token_secret
+ end
+
+ self.table_name = 'channel_twitter_profiles'
+
+ validates :profile_id, uniqueness: { scope: :account_id }
+
+ before_destroy :unsubscribe
+
+ EDITABLE_ATTRS = [:tweets_enabled].freeze
+
+ def name
+ 'Twitter'
+ end
+
+ def create_contact_inbox(profile_id, name, additional_attributes)
+ ::ContactInboxWithContactBuilder.new({
+ source_id: profile_id,
+ inbox: inbox,
+ contact_attributes: { name: name, additional_attributes: additional_attributes }
+ }).perform
+ end
+
+ def twitter_client
+ Twitty::Facade.new do |config|
+ config.consumer_key = ENV.fetch('TWITTER_CONSUMER_KEY', nil)
+ config.consumer_secret = ENV.fetch('TWITTER_CONSUMER_SECRET', nil)
+ config.access_token = twitter_access_token
+ config.access_token_secret = twitter_access_token_secret
+ config.base_url = 'https://api.twitter.com'
+ config.environment = ENV.fetch('TWITTER_ENVIRONMENT', '')
+ end
+ end
+
+ private
+
+ def unsubscribe
+ ### Fix unsubscription with new endpoint
+ unsubscribe_response = twitter_client.remove_subscription(user_id: profile_id)
+ Rails.logger.info "TWITTER_UNSUBSCRIBE: #{unsubscribe_response.body}"
+ rescue StandardError => e
+ Rails.logger.error e
+ end
+end
diff --git a/app/models/channel/web_widget.rb b/app/models/channel/web_widget.rb
new file mode 100644
index 0000000..d4e9989
--- /dev/null
+++ b/app/models/channel/web_widget.rb
@@ -0,0 +1,108 @@
+# == Schema Information
+#
+# Table name: channel_web_widgets
+#
+# id :integer not null, primary key
+# allowed_domains :text default("")
+# continuity_via_email :boolean default(TRUE), not null
+# feature_flags :integer default(7), not null
+# hmac_mandatory :boolean default(FALSE)
+# hmac_token :string
+# pre_chat_form_enabled :boolean default(FALSE)
+# pre_chat_form_options :jsonb
+# reply_time :integer default("in_a_few_minutes")
+# website_token :string
+# website_url :string
+# welcome_tagline :string
+# welcome_title :string
+# widget_color :string default("#1f93ff")
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :integer
+#
+# Indexes
+#
+# index_channel_web_widgets_on_hmac_token (hmac_token) UNIQUE
+# index_channel_web_widgets_on_website_token (website_token) UNIQUE
+#
+
+class Channel::WebWidget < ApplicationRecord
+ include Channelable
+ include FlagShihTzu
+
+ self.table_name = 'channel_web_widgets'
+ EDITABLE_ATTRS = [:website_url, :widget_color, :welcome_title, :welcome_tagline, :reply_time, :pre_chat_form_enabled,
+ :continuity_via_email, :hmac_mandatory, :allowed_domains,
+ { pre_chat_form_options: [:pre_chat_message, :require_email,
+ { pre_chat_fields:
+ [:field_type, :label, :placeholder, :name, :enabled, :type, :enabled, :required,
+ :locale, { values: [] }, :regex_pattern, :regex_cue] }] },
+ { selected_feature_flags: [] }].freeze
+
+ before_validation :validate_pre_chat_options
+ validates :website_url, presence: true
+ validates :widget_color, presence: true
+ has_many :portals, foreign_key: 'channel_web_widget_id', dependent: :nullify, inverse_of: :channel_web_widget
+
+ has_secure_token :website_token
+ has_secure_token :hmac_token
+
+ has_flags 1 => :attachments,
+ 2 => :emoji_picker,
+ 3 => :end_conversation,
+ 4 => :use_inbox_avatar_for_bot,
+ :column => 'feature_flags',
+ :check_for_column => false
+
+ enum reply_time: { in_a_few_minutes: 0, in_a_few_hours: 1, in_a_day: 2 }
+
+ def name
+ 'Website'
+ end
+
+ def web_widget_script
+ "
+
+ "
+ end
+
+ def validate_pre_chat_options
+ return if pre_chat_form_options.with_indifferent_access['pre_chat_fields'].present?
+
+ self.pre_chat_form_options = {
+ pre_chat_message: 'Share your queries or comments here.',
+ pre_chat_fields: [
+ {
+ 'field_type': 'standard', 'label': 'Email Id', 'name': 'emailAddress', 'type': 'email', 'required': true, 'enabled': false
+ },
+ {
+ 'field_type': 'standard', 'label': 'Full name', 'name': 'fullName', 'type': 'text', 'required': false, 'enabled': false
+ },
+ {
+ 'field_type': 'standard', 'label': 'Phone number', 'name': 'phoneNumber', 'type': 'text', 'required': false, 'enabled': false
+ }
+ ]
+ }
+ end
+
+ def create_contact_inbox(additional_attributes = {})
+ ::ContactInboxWithContactBuilder.new({
+ inbox: inbox,
+ contact_attributes: { additional_attributes: additional_attributes }
+ }).perform
+ end
+end
diff --git a/app/models/channel/whatsapp.rb b/app/models/channel/whatsapp.rb
new file mode 100644
index 0000000..5905c54
--- /dev/null
+++ b/app/models/channel/whatsapp.rb
@@ -0,0 +1,96 @@
+# == Schema Information
+#
+# Table name: channel_whatsapp
+#
+# id :bigint not null, primary key
+# message_templates :jsonb
+# message_templates_last_updated :datetime
+# phone_number :string not null
+# provider :string default("default")
+# provider_config :jsonb
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :integer not null
+#
+# Indexes
+#
+# index_channel_whatsapp_on_phone_number (phone_number) UNIQUE
+#
+
+class Channel::Whatsapp < ApplicationRecord
+ include Channelable
+ include Reauthorizable
+
+ self.table_name = 'channel_whatsapp'
+ EDITABLE_ATTRS = [:phone_number, :provider, { provider_config: {} }].freeze
+
+ # default at the moment is 360dialog lets change later.
+ PROVIDERS = %w[default whatsapp_cloud].freeze
+ before_validation :ensure_webhook_verify_token
+
+ validates :provider, inclusion: { in: PROVIDERS }
+ validates :phone_number, presence: true, uniqueness: true
+ validate :validate_provider_config
+
+ after_create :sync_templates
+ before_destroy :teardown_webhooks
+ after_commit :setup_webhooks, on: :create, if: :should_auto_setup_webhooks?
+
+ def name
+ 'Whatsapp'
+ end
+
+ def provider_service
+ if provider == 'whatsapp_cloud'
+ Whatsapp::Providers::WhatsappCloudService.new(whatsapp_channel: self)
+ else
+ Whatsapp::Providers::Whatsapp360DialogService.new(whatsapp_channel: self)
+ end
+ end
+
+ def mark_message_templates_updated
+ # rubocop:disable Rails/SkipsModelValidations
+ update_column(:message_templates_last_updated, Time.zone.now)
+ # rubocop:enable Rails/SkipsModelValidations
+ end
+
+ delegate :send_message, to: :provider_service
+ delegate :send_template, to: :provider_service
+ delegate :sync_templates, to: :provider_service
+ delegate :media_url, to: :provider_service
+ delegate :api_headers, to: :provider_service
+
+ def setup_webhooks
+ perform_webhook_setup
+ rescue StandardError => e
+ Rails.logger.error "[WHATSAPP] Webhook setup failed: #{e.message}"
+ prompt_reauthorization!
+ end
+
+ private
+
+ def ensure_webhook_verify_token
+ provider_config['webhook_verify_token'] ||= SecureRandom.hex(16) if provider == 'whatsapp_cloud'
+ end
+
+ def validate_provider_config
+ errors.add(:provider_config, 'Invalid Credentials') unless provider_service.validate_provider_config?
+ end
+
+ def perform_webhook_setup
+ business_account_id = provider_config['business_account_id']
+ api_key = provider_config['api_key']
+
+ Whatsapp::WebhookSetupService.new(self, business_account_id, api_key).perform
+ end
+
+ def teardown_webhooks
+ Whatsapp::WebhookTeardownService.new(self).perform
+ end
+
+ def should_auto_setup_webhooks?
+ # Only auto-setup webhooks for whatsapp_cloud provider with manual setup
+ # Embedded signup calls setup_webhooks explicitly in EmbeddedSignupService
+ provider == 'whatsapp_cloud' && provider_config['source'] != 'embedded_signup'
+ end
+end
diff --git a/app/models/concerns/.keep b/app/models/concerns/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/app/models/concerns/access_tokenable.rb b/app/models/concerns/access_tokenable.rb
new file mode 100644
index 0000000..0bb8daa
--- /dev/null
+++ b/app/models/concerns/access_tokenable.rb
@@ -0,0 +1,11 @@
+module AccessTokenable
+ extend ActiveSupport::Concern
+ included do
+ has_one :access_token, as: :owner, dependent: :destroy_async
+ after_create :create_access_token
+ end
+
+ def create_access_token
+ AccessToken.create!(owner: self)
+ end
+end
diff --git a/app/models/concerns/account_cache_revalidator.rb b/app/models/concerns/account_cache_revalidator.rb
new file mode 100644
index 0000000..b5ff5a4
--- /dev/null
+++ b/app/models/concerns/account_cache_revalidator.rb
@@ -0,0 +1,11 @@
+module AccountCacheRevalidator
+ extend ActiveSupport::Concern
+
+ included do
+ after_commit :update_account_cache, on: [:create, :update, :destroy]
+ end
+
+ def update_account_cache
+ account.update_cache_key(self.class.name.underscore)
+ end
+end
diff --git a/app/models/concerns/activity_message_handler.rb b/app/models/concerns/activity_message_handler.rb
new file mode 100644
index 0000000..c25aba4
--- /dev/null
+++ b/app/models/concerns/activity_message_handler.rb
@@ -0,0 +1,130 @@
+module ActivityMessageHandler
+ extend ActiveSupport::Concern
+
+ include PriorityActivityMessageHandler
+ include LabelActivityMessageHandler
+ include SlaActivityMessageHandler
+ include TeamActivityMessageHandler
+
+ private
+
+ def create_activity
+ user_name = determine_user_name
+
+ handle_status_change(user_name)
+ handle_priority_change(user_name)
+ handle_label_change(user_name)
+ handle_sla_policy_change(user_name)
+ end
+
+ def determine_user_name
+ Current.user&.name
+ end
+
+ def handle_status_change(user_name)
+ return unless saved_change_to_status?
+
+ status_change_activity(user_name)
+ end
+
+ def handle_priority_change(user_name)
+ return unless saved_change_to_priority?
+
+ priority_change_activity(user_name)
+ end
+
+ def handle_label_change(user_name)
+ return unless saved_change_to_label_list?
+
+ create_label_change(activity_message_owner(user_name))
+ end
+
+ def handle_sla_policy_change(user_name)
+ return unless saved_change_to_sla_policy_id?
+
+ sla_change_type = determine_sla_change_type
+ create_sla_change_activity(sla_change_type, activity_message_owner(user_name))
+ end
+
+ def status_change_activity(user_name)
+ content = if Current.executed_by.present?
+ automation_status_change_activity_content
+ else
+ user_status_change_activity_content(user_name)
+ end
+
+ ::Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
+ end
+
+ def auto_resolve_message_key(minutes)
+ if minutes >= 1440 && (minutes % 1440).zero?
+ { key: 'auto_resolved_days', count: minutes / 1440 }
+ elsif minutes >= 60 && (minutes % 60).zero?
+ { key: 'auto_resolved_hours', count: minutes / 60 }
+ else
+ { key: 'auto_resolved_minutes', count: minutes }
+ end
+ end
+
+ def user_status_change_activity_content(user_name)
+ if user_name
+ I18n.t("conversations.activity.status.#{status}", user_name: user_name)
+ elsif Current.contact.present? && resolved?
+ I18n.t('conversations.activity.status.contact_resolved', contact_name: Current.contact.name.capitalize)
+ elsif resolved?
+ message_data = auto_resolve_message_key(auto_resolve_after || 0)
+ I18n.t("conversations.activity.status.#{message_data[:key]}", count: message_data[:count])
+ end
+ end
+
+ def automation_status_change_activity_content
+ if Current.executed_by.instance_of?(AutomationRule)
+ I18n.t("conversations.activity.status.#{status}", user_name: I18n.t('automation.system_name'))
+ elsif Current.executed_by.instance_of?(Contact)
+ Current.executed_by = nil
+ I18n.t('conversations.activity.status.system_auto_open')
+ end
+ end
+
+ def activity_message_params(content)
+ { account_id: account_id, inbox_id: inbox_id, message_type: :activity, content: content }
+ end
+
+ def create_muted_message
+ create_mute_change_activity('muted')
+ end
+
+ def create_unmuted_message
+ create_mute_change_activity('unmuted')
+ end
+
+ def create_mute_change_activity(change_type)
+ return unless Current.user
+
+ content = I18n.t("conversations.activity.#{change_type}", user_name: Current.user.name)
+ ::Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
+ end
+
+ def generate_assignee_change_activity_content(user_name)
+ params = { assignee_name: assignee&.name || '', user_name: user_name }
+ key = assignee_id ? 'assigned' : 'removed'
+ key = 'self_assigned' if self_assign? assignee_id
+ I18n.t("conversations.activity.assignee.#{key}", **params)
+ end
+
+ def create_assignee_change_activity(user_name)
+ user_name = activity_message_owner(user_name)
+
+ return unless user_name
+
+ content = generate_assignee_change_activity_content(user_name)
+ ::Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
+ end
+
+ def activity_message_owner(user_name)
+ user_name = I18n.t('automation.system_name') if !user_name && Current.executed_by.present?
+ user_name
+ end
+end
+
+ActivityMessageHandler.prepend_mod_with('ActivityMessageHandler')
diff --git a/app/models/concerns/assignment_handler.rb b/app/models/concerns/assignment_handler.rb
new file mode 100644
index 0000000..a9f529f
--- /dev/null
+++ b/app/models/concerns/assignment_handler.rb
@@ -0,0 +1,55 @@
+module AssignmentHandler
+ extend ActiveSupport::Concern
+ include Events::Types
+
+ included do
+ before_save :ensure_assignee_is_from_team
+ after_commit :notify_assignment_change, :process_assignment_changes
+ end
+
+ private
+
+ def ensure_assignee_is_from_team
+ return unless team_id_changed?
+
+ validate_current_assignee_team
+ self.assignee ||= find_assignee_from_team
+ end
+
+ def validate_current_assignee_team
+ self.assignee_id = nil if team&.members&.exclude?(assignee)
+ end
+
+ def find_assignee_from_team
+ return if team&.allow_auto_assign.blank?
+
+ team_members_with_capacity = inbox.member_ids_with_assignment_capacity & team.members.ids
+ ::AutoAssignment::AgentAssignmentService.new(conversation: self, allowed_agent_ids: team_members_with_capacity).find_assignee
+ end
+
+ def notify_assignment_change
+ {
+ ASSIGNEE_CHANGED => -> { saved_change_to_assignee_id? },
+ TEAM_CHANGED => -> { saved_change_to_team_id? }
+ }.each do |event, condition|
+ condition.call && dispatcher_dispatch(event, previous_changes)
+ end
+ end
+
+ def process_assignment_changes
+ process_assignment_activities
+ end
+
+ def process_assignment_activities
+ user_name = Current.user.name if Current.user.present?
+ if saved_change_to_team_id?
+ create_team_change_activity(user_name)
+ elsif saved_change_to_assignee_id?
+ create_assignee_change_activity(user_name)
+ end
+ end
+
+ def self_assign?(assignee_id)
+ assignee_id.present? && Current.user&.id == assignee_id
+ end
+end
diff --git a/app/models/concerns/auto_assignment_handler.rb b/app/models/concerns/auto_assignment_handler.rb
new file mode 100644
index 0000000..a119820
--- /dev/null
+++ b/app/models/concerns/auto_assignment_handler.rb
@@ -0,0 +1,32 @@
+module AutoAssignmentHandler
+ extend ActiveSupport::Concern
+ include Events::Types
+
+ included do
+ after_save :run_auto_assignment
+ end
+
+ private
+
+ def run_auto_assignment
+ # Round robin kicks in on conversation create & update
+ # run it only when conversation status changes to open
+ return unless conversation_status_changed_to_open?
+ return unless should_run_auto_assignment?
+
+ if inbox.auto_assignment_v2_enabled?
+ # Use new assignment system
+ AutoAssignment::AssignmentJob.perform_later(inbox_id: inbox.id)
+ else
+ # Use legacy assignment system
+ AutoAssignment::AgentAssignmentService.new(conversation: self, allowed_agent_ids: inbox.member_ids_with_assignment_capacity).perform
+ end
+ end
+
+ def should_run_auto_assignment?
+ return false unless inbox.enable_auto_assignment?
+
+ # run only if assignee is blank or doesn't have access to inbox
+ assignee.blank? || inbox.members.exclude?(assignee)
+ end
+end
diff --git a/app/models/concerns/availability_statusable.rb b/app/models/concerns/availability_statusable.rb
new file mode 100644
index 0000000..9cfe6bf
--- /dev/null
+++ b/app/models/concerns/availability_statusable.rb
@@ -0,0 +1,30 @@
+module AvailabilityStatusable
+ extend ActiveSupport::Concern
+
+ def online_presence?
+ obj_id = is_a?(Contact) ? id : user_id
+ ::OnlineStatusTracker.get_presence(account_id, self.class.name, obj_id)
+ end
+
+ def availability_status
+ if is_a? Contact
+ contact_availability_status
+ else
+ user_availability_status
+ end
+ end
+
+ private
+
+ def contact_availability_status
+ online_presence? ? 'online' : 'offline'
+ end
+
+ def user_availability_status
+ # we are not considering presence in this case. Just returns the availability
+ return availability unless auto_offline
+
+ # availability as a fallback in case the status is not present in redis
+ online_presence? ? (::OnlineStatusTracker.get_status(account_id, user_id) || availability) : 'offline'
+ end
+end
diff --git a/app/models/concerns/avatarable.rb b/app/models/concerns/avatarable.rb
new file mode 100644
index 0000000..94ca550
--- /dev/null
+++ b/app/models/concerns/avatarable.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+module Avatarable
+ extend ActiveSupport::Concern
+ include Rails.application.routes.url_helpers
+
+ included do
+ has_one_attached :avatar
+ validate :acceptable_avatar, if: -> { avatar.changed? }
+ after_save :fetch_avatar_from_gravatar
+ end
+
+ def avatar_url
+ return url_for(avatar.representation(resize_to_fill: [250, nil])) if avatar.attached? && avatar.representable?
+
+ ''
+ end
+
+ def fetch_avatar_from_gravatar
+ return unless saved_changes.key?(:email)
+ return if email.blank?
+
+ # Incase avatar_url is supplied, we don't want to fetch avatar from gravatar
+ # So we will wait for it to be processed
+ Avatar::AvatarFromGravatarJob.set(wait: 30.seconds).perform_later(self, email)
+ end
+
+ def acceptable_avatar
+ return unless avatar.attached?
+
+ errors.add(:avatar, 'is too big') if avatar.byte_size > 15.megabytes
+
+ acceptable_types = ['image/jpeg', 'image/png', 'image/gif'].freeze
+ errors.add(:avatar, 'filetype not supported') unless acceptable_types.include?(avatar.content_type)
+ end
+end
diff --git a/app/models/concerns/cache_keys.rb b/app/models/concerns/cache_keys.rb
new file mode 100644
index 0000000..3ad9bba
--- /dev/null
+++ b/app/models/concerns/cache_keys.rb
@@ -0,0 +1,46 @@
+module CacheKeys
+ extend ActiveSupport::Concern
+
+ include CacheKeysHelper
+ include Events::Types
+
+ CACHE_KEYS_EXPIRY = 72.hours
+
+ included do
+ class_attribute :cacheable_models
+ self.cacheable_models = [Label, Inbox, Team]
+ end
+
+ def cache_keys
+ keys = {}
+ self.class.cacheable_models.each do |model|
+ keys[model.name.underscore.to_sym] = fetch_value_for_key(id, model.name.underscore)
+ end
+
+ keys
+ end
+
+ def update_cache_key(key)
+ update_cache_key_for_account(id, key)
+ dispatch_cache_update_event
+ end
+
+ def reset_cache_keys
+ self.class.cacheable_models.each do |model|
+ update_cache_key_for_account(id, model.name.underscore)
+ end
+
+ dispatch_cache_update_event
+ end
+
+ private
+
+ def update_cache_key_for_account(account_id, key)
+ prefixed_cache_key = get_prefixed_cache_key(account_id, key)
+ Redis::Alfred.setex(prefixed_cache_key, Time.now.utc.to_i, CACHE_KEYS_EXPIRY)
+ end
+
+ def dispatch_cache_update_event
+ Rails.configuration.dispatcher.dispatch(ACCOUNT_CACHE_INVALIDATED, Time.zone.now, cache_keys: cache_keys, account: self)
+ end
+end
diff --git a/app/models/concerns/captain_featurable.rb b/app/models/concerns/captain_featurable.rb
new file mode 100644
index 0000000..af73fde
--- /dev/null
+++ b/app/models/concerns/captain_featurable.rb
@@ -0,0 +1,62 @@
+# frozen_string_literal: true
+
+module CaptainFeaturable
+ extend ActiveSupport::Concern
+
+ included do
+ validate :validate_captain_models
+
+ # Dynamically define accessor methods for each captain feature
+ Llm::Models.feature_keys.each do |feature_key|
+ # Define enabled? methods (e.g., captain_editor_enabled?)
+ define_method("captain_#{feature_key}_enabled?") do
+ captain_features_with_defaults[feature_key]
+ end
+
+ # Define model accessor methods (e.g., captain_editor_model)
+ define_method("captain_#{feature_key}_model") do
+ captain_models_with_defaults[feature_key]
+ end
+ end
+ end
+
+ def captain_preferences
+ {
+ models: captain_models_with_defaults,
+ features: captain_features_with_defaults
+ }.with_indifferent_access
+ end
+
+ private
+
+ def captain_models_with_defaults
+ stored_models = captain_models || {}
+ Llm::Models.feature_keys.each_with_object({}) do |feature_key, result|
+ stored_value = stored_models[feature_key]
+ result[feature_key] = if stored_value.present? && Llm::Models.valid_model_for?(feature_key, stored_value)
+ stored_value
+ else
+ Llm::Models.default_model_for(feature_key)
+ end
+ end
+ end
+
+ def captain_features_with_defaults
+ stored_features = captain_features || {}
+ Llm::Models.feature_keys.index_with do |feature_key|
+ stored_features[feature_key] == true
+ end
+ end
+
+ def validate_captain_models
+ return if captain_models.blank?
+
+ captain_models.each do |feature_key, model_name|
+ next if model_name.blank?
+ next if Llm::Models.valid_model_for?(feature_key, model_name)
+
+ allowed_models = Llm::Models.models_for(feature_key)
+ errors.add(:captain_models, "'#{model_name}' is not a valid model for #{feature_key}. Allowed: #{allowed_models.join(', ')}")
+ end
+ end
+end
diff --git a/app/models/concerns/channelable.rb b/app/models/concerns/channelable.rb
new file mode 100644
index 0000000..e3e9eba
--- /dev/null
+++ b/app/models/concerns/channelable.rb
@@ -0,0 +1,13 @@
+module Channelable
+ extend ActiveSupport::Concern
+ included do
+ validates :account_id, presence: true
+ belongs_to :account
+ has_one :inbox, as: :channel, dependent: :destroy_async, touch: true
+ after_update :create_audit_log_entry
+ end
+
+ def create_audit_log_entry; end
+end
+
+Channelable.prepend_mod_with('Channelable')
diff --git a/app/models/concerns/content_attribute_validator.rb b/app/models/concerns/content_attribute_validator.rb
new file mode 100644
index 0000000..bad93c9
--- /dev/null
+++ b/app/models/concerns/content_attribute_validator.rb
@@ -0,0 +1,52 @@
+class ContentAttributeValidator < ActiveModel::Validator
+ ALLOWED_SELECT_ITEM_KEYS = [:title, :value].freeze
+ ALLOWED_CARD_ITEM_KEYS = [:title, :description, :media_url, :actions].freeze
+ ALLOWED_CARD_ITEM_ACTION_KEYS = [:text, :type, :payload, :uri].freeze
+ ALLOWED_FORM_ITEM_KEYS = [:type, :placeholder, :label, :name, :options, :default, :required, :pattern, :title, :pattern_error].freeze
+ ALLOWED_ARTICLE_KEYS = [:title, :description, :link].freeze
+
+ def validate(record)
+ case record.content_type
+ when 'input_select'
+ validate_items!(record)
+ validate_item_attributes!(record, ALLOWED_SELECT_ITEM_KEYS)
+ when 'cards'
+ validate_items!(record)
+ validate_item_attributes!(record, ALLOWED_CARD_ITEM_KEYS)
+ validate_item_actions!(record)
+ when 'form'
+ validate_items!(record)
+ validate_item_attributes!(record, ALLOWED_FORM_ITEM_KEYS)
+ when 'article'
+ validate_items!(record)
+ validate_item_attributes!(record, ALLOWED_ARTICLE_KEYS)
+ end
+ end
+
+ private
+
+ def validate_items!(record)
+ record.errors.add(:content_attributes, 'At least one item is required.') if record.items.blank?
+ record.errors.add(:content_attributes, 'Items should be a hash.') if record.items.reject { |item| item.is_a?(Hash) }.present?
+ end
+
+ def validate_item_attributes!(record, valid_keys)
+ item_keys = record.items.collect(&:keys).flatten.filter_map(&:to_sym)
+ invalid_keys = item_keys - valid_keys
+ record.errors.add(:content_attributes, "contains invalid keys for items : #{invalid_keys}") if invalid_keys.present?
+ end
+
+ def validate_item_actions!(record)
+ if record.items.select { |item| item[:actions].blank? }.present?
+ record.errors.add(:content_attributes, 'contains items missing actions') && return
+ end
+
+ validate_item_action_attributes!(record)
+ end
+
+ def validate_item_action_attributes!(record)
+ item_action_keys = record.items.collect { |item| item[:actions].collect(&:keys) }
+ invalid_keys = item_action_keys.flatten.compact.map(&:to_sym) - ALLOWED_CARD_ITEM_ACTION_KEYS
+ record.errors.add(:content_attributes, "contains invalid keys for actions: #{invalid_keys}") if invalid_keys.present?
+ end
+end
diff --git a/app/models/concerns/conversation_mute_helpers.rb b/app/models/concerns/conversation_mute_helpers.rb
new file mode 100644
index 0000000..ebc0542
--- /dev/null
+++ b/app/models/concerns/conversation_mute_helpers.rb
@@ -0,0 +1,22 @@
+module ConversationMuteHelpers
+ extend ActiveSupport::Concern
+
+ def mute!
+ return unless contact
+
+ resolved!
+ contact.update(blocked: true)
+ create_muted_message
+ end
+
+ def unmute!
+ return unless contact
+
+ contact.update(blocked: false)
+ create_unmuted_message
+ end
+
+ def muted?
+ contact&.blocked? || false
+ end
+end
diff --git a/app/models/concerns/featurable.rb b/app/models/concerns/featurable.rb
new file mode 100644
index 0000000..daa0b4b
--- /dev/null
+++ b/app/models/concerns/featurable.rb
@@ -0,0 +1,71 @@
+module Featurable
+ extend ActiveSupport::Concern
+
+ QUERY_MODE = {
+ flag_query_mode: :bit_operator,
+ check_for_column: false
+ }.freeze
+
+ FEATURE_LIST = YAML.safe_load(Rails.root.join('config/features.yml').read).freeze
+
+ FEATURES = FEATURE_LIST.each_with_object({}) do |feature, result|
+ result[result.keys.size + 1] = "feature_#{feature['name']}".to_sym
+ end
+
+ included do
+ include FlagShihTzu
+ has_flags FEATURES.merge(column: 'feature_flags').merge(QUERY_MODE)
+
+ before_create :enable_default_features
+ end
+
+ def enable_features(*names)
+ names.each do |name|
+ send("feature_#{name}=", true)
+ end
+ end
+
+ def enable_features!(*names)
+ enable_features(*names)
+ save
+ end
+
+ def disable_features(*names)
+ names.each do |name|
+ send("feature_#{name}=", false)
+ end
+ end
+
+ def disable_features!(*names)
+ disable_features(*names)
+ save
+ end
+
+ def feature_enabled?(name)
+ send("feature_#{name}?")
+ end
+
+ def all_features
+ FEATURE_LIST.pluck('name').index_with do |feature_name|
+ feature_enabled?(feature_name)
+ end
+ end
+
+ def enabled_features
+ all_features.select { |_feature, enabled| enabled == true }
+ end
+
+ def disabled_features
+ all_features.select { |_feature, enabled| enabled == false }
+ end
+
+ private
+
+ def enable_default_features
+ config = InstallationConfig.find_by(name: 'ACCOUNT_LEVEL_FEATURE_DEFAULTS')
+ return true if config.blank?
+
+ features_to_enabled = config.value.select { |f| f[:enabled] }.pluck(:name)
+ enable_features(*features_to_enabled)
+ end
+end
diff --git a/app/models/concerns/inbox_agent_availability.rb b/app/models/concerns/inbox_agent_availability.rb
new file mode 100644
index 0000000..289da7d
--- /dev/null
+++ b/app/models/concerns/inbox_agent_availability.rb
@@ -0,0 +1,28 @@
+module InboxAgentAvailability
+ extend ActiveSupport::Concern
+
+ def available_agents
+ online_agent_ids = fetch_online_agent_ids
+ return inbox_members.none if online_agent_ids.empty?
+
+ inbox_members
+ .joins(:user)
+ .where(users: { id: online_agent_ids })
+ .includes(:user)
+ end
+
+ def member_ids_with_assignment_capacity
+ member_ids
+ end
+
+ private
+
+ def fetch_online_agent_ids
+ OnlineStatusTracker.get_available_users(account_id)
+ .select { |_key, value| value.eql?('online') }
+ .keys
+ .map(&:to_i)
+ end
+end
+
+InboxAgentAvailability.prepend_mod_with('InboxAgentAvailability')
diff --git a/app/models/concerns/json_schema_validator.rb b/app/models/concerns/json_schema_validator.rb
new file mode 100644
index 0000000..a015da7
--- /dev/null
+++ b/app/models/concerns/json_schema_validator.rb
@@ -0,0 +1,95 @@
+# This file defines a custom validator class `JsonSchemaValidator` for validating a JSON object against a schema.
+# To use this validator, define a schema as a Ruby hash and include it in the validation options when validating a model.
+# The schema should define the expected structure and types of the JSON object, as well as any validation rules.
+# Here's an example schema:
+#
+# schema = {
+# 'type' => 'object',
+# 'properties' => {
+# 'name' => { 'type' => 'string' },
+# 'age' => { 'type' => 'integer' },
+# 'is_active' => { 'type' => 'boolean' },
+# 'tags' => { 'type' => 'array' },
+# 'address' => {
+# 'type' => 'object',
+# 'properties' => {
+# 'street' => { 'type' => 'string' },
+# 'city' => { 'type' => 'string' }
+# },
+# 'required' => ['street', 'city']
+# }
+# },
+# 'required': ['name', 'age']
+# }.to_json.freeze
+#
+# To validate a model using this schema, include the `JsonSchemaValidator` in the model's validations and pass the schema
+# as an option:
+#
+# class MyModel < ApplicationRecord
+# validates_with JsonSchemaValidator, schema: schema
+# end
+
+class JsonSchemaValidator < ActiveModel::Validator
+ def validate(record)
+ # Get the attribute resolver function from options or use a default one
+ attribute_resolver = options[:attribute_resolver] || ->(rec) { rec.additional_attributes }
+
+ # Resolve the JSON data to be validated
+ json_data = attribute_resolver.call(record)
+
+ # Get the schema to be used for validation
+ schema = options[:schema]
+
+ # Create a JSONSchemer instance using the schema
+ schemer = JSONSchemer.schema(schema)
+
+ # Validate the JSON data against the schema
+ validation_errors = schemer.validate(json_data)
+
+ # Add validation errors to the record with a formatted statement
+ validation_errors.each do |error|
+ format_and_append_error(error, record)
+ end
+ end
+
+ private
+
+ def format_and_append_error(error, record)
+ return handle_required(error, record) if error['type'] == 'required'
+ return handle_minimum(error, record) if error['type'] == 'minimum'
+ return handle_maximum(error, record) if error['type'] == 'maximum'
+
+ type = error['type'] == 'object' ? 'hash' : error['type']
+
+ handle_type(error, record, type)
+ end
+
+ def handle_required(error, record)
+ missing_values = error['details']['missing_keys']
+ missing_values.each do |missing|
+ record.errors.add(missing, 'is required')
+ end
+ end
+
+ def handle_type(error, record, expected_type)
+ data = get_name_from_data_pointer(error)
+ record.errors.add(data, "must be of type #{expected_type}")
+ end
+
+ def handle_minimum(error, record)
+ data = get_name_from_data_pointer(error)
+ record.errors.add(data, "must be greater than or equal to #{error['schema']['minimum']}")
+ end
+
+ def handle_maximum(error, record)
+ data = get_name_from_data_pointer(error)
+ record.errors.add(data, "must be less than or equal to #{error['schema']['maximum']}")
+ end
+
+ def get_name_from_data_pointer(error)
+ data = error['data_pointer']
+
+ # if data starts with a "/" remove it
+ data[1..] if data[0] == '/'
+ end
+end
diff --git a/app/models/concerns/label_activity_message_handler.rb b/app/models/concerns/label_activity_message_handler.rb
new file mode 100644
index 0000000..d5097e0
--- /dev/null
+++ b/app/models/concerns/label_activity_message_handler.rb
@@ -0,0 +1,20 @@
+module LabelActivityMessageHandler
+ extend ActiveSupport::Concern
+
+ private
+
+ def create_label_added(user_name, labels = [])
+ create_label_change_activity('added', user_name, labels)
+ end
+
+ def create_label_removed(user_name, labels = [])
+ create_label_change_activity('removed', user_name, labels)
+ end
+
+ def create_label_change_activity(change_type, user_name, labels = [])
+ return unless labels.size.positive?
+
+ content = I18n.t("conversations.activity.labels.#{change_type}", user_name: user_name, labels: labels.join(', '))
+ ::Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
+ end
+end
diff --git a/app/models/concerns/labelable.rb b/app/models/concerns/labelable.rb
new file mode 100644
index 0000000..bf87789
--- /dev/null
+++ b/app/models/concerns/labelable.rb
@@ -0,0 +1,19 @@
+module Labelable
+ extend ActiveSupport::Concern
+
+ included do
+ acts_as_taggable_on :labels
+ end
+
+ def update_labels(labels = nil)
+ update!(label_list: labels)
+ end
+
+ def add_labels(new_labels = nil)
+ return if new_labels.blank?
+
+ new_labels = Array(new_labels) # Make sure new_labels is an array
+ combined_labels = labels + new_labels
+ update!(label_list: combined_labels)
+ end
+end
diff --git a/app/models/concerns/liquidable.rb b/app/models/concerns/liquidable.rb
new file mode 100644
index 0000000..8a90f5f
--- /dev/null
+++ b/app/models/concerns/liquidable.rb
@@ -0,0 +1,96 @@
+module Liquidable
+ extend ActiveSupport::Concern
+
+ included do
+ before_create :process_liquid_in_content
+ before_create :process_liquid_in_template_params
+ end
+
+ private
+
+ def message_drops
+ {
+ 'contact' => ContactDrop.new(conversation.contact),
+ 'agent' => UserDrop.new(sender),
+ 'conversation' => ConversationDrop.new(conversation),
+ 'inbox' => InboxDrop.new(inbox),
+ 'account' => AccountDrop.new(conversation.account)
+ }
+ end
+
+ def liquid_processable_message?
+ content.present? && (message_type == 'outgoing' || message_type == 'template')
+ end
+
+ def process_liquid_in_content
+ return unless liquid_processable_message?
+
+ template = Liquid::Template.parse(modified_liquid_content)
+ self.content = template.render(message_drops)
+ rescue Liquid::Error
+ # If there is an error in the liquid syntax, we don't want to process it
+ end
+
+ def modified_liquid_content
+ # This regex is used to match the code blocks in the content
+ # We don't want to process liquid in code blocks
+ content.gsub(/`(.*?)`/m, '{% raw %}`\\1`{% endraw %}')
+ end
+
+ def process_liquid_in_template_params
+ return unless template_params_present? && liquid_processable_template_params?
+
+ processed_params = process_liquid_in_hash(template_params_data['processed_params'])
+
+ # Update the additional_attributes with processed template_params
+ self.additional_attributes = additional_attributes.merge(
+ 'template_params' => template_params_data.merge('processed_params' => processed_params)
+ )
+ rescue Liquid::Error
+ # If there is an error in the liquid syntax, we don't want to process it
+ end
+
+ def template_params_present?
+ additional_attributes&.dig('template_params', 'processed_params').present?
+ end
+
+ def liquid_processable_template_params?
+ message_type == 'outgoing' || message_type == 'template'
+ end
+
+ def template_params_data
+ additional_attributes['template_params']
+ end
+
+ def process_liquid_in_hash(hash)
+ return hash unless hash.is_a?(Hash)
+
+ hash.transform_values { |value| process_liquid_value(value) }
+ end
+
+ def process_liquid_value(value)
+ case value
+ when String
+ process_liquid_string(value)
+ when Hash
+ process_liquid_in_hash(value)
+ when Array
+ process_liquid_array(value)
+ else
+ value
+ end
+ end
+
+ def process_liquid_array(array)
+ array.map { |item| process_liquid_value(item) }
+ end
+
+ def process_liquid_string(string)
+ return string if string.blank?
+
+ template = Liquid::Template.parse(string)
+ template.render(message_drops)
+ rescue Liquid::Error
+ string
+ end
+end
diff --git a/app/models/concerns/llm_formattable.rb b/app/models/concerns/llm_formattable.rb
new file mode 100644
index 0000000..0cdc767
--- /dev/null
+++ b/app/models/concerns/llm_formattable.rb
@@ -0,0 +1,7 @@
+module LlmFormattable
+ extend ActiveSupport::Concern
+
+ def to_llm_text(config = {})
+ LlmFormatter::LlmTextFormatterService.new(self).format(config)
+ end
+end
diff --git a/app/models/concerns/message_filter_helpers.rb b/app/models/concerns/message_filter_helpers.rb
new file mode 100644
index 0000000..38124f3
--- /dev/null
+++ b/app/models/concerns/message_filter_helpers.rb
@@ -0,0 +1,31 @@
+module MessageFilterHelpers
+ extend ActiveSupport::Concern
+
+ def reportable?
+ incoming? || outgoing?
+ end
+
+ def webhook_sendable?
+ incoming? || outgoing? || template?
+ end
+
+ def slack_hook_sendable?
+ incoming? || outgoing? || template?
+ end
+
+ def notifiable?
+ incoming? || outgoing?
+ end
+
+ def conversation_transcriptable?
+ incoming? || outgoing?
+ end
+
+ def email_reply_summarizable?
+ incoming? || outgoing? || input_csat?
+ end
+
+ def instagram_story_mention?
+ inbox.instagram? && try(:content_attributes)[:image_type] == 'story_mention'
+ end
+end
diff --git a/app/models/concerns/out_of_offisable.rb b/app/models/concerns/out_of_offisable.rb
new file mode 100644
index 0000000..f1753a5
--- /dev/null
+++ b/app/models/concerns/out_of_offisable.rb
@@ -0,0 +1,53 @@
+# frozen_string_literal: true
+
+module OutOfOffisable
+ extend ActiveSupport::Concern
+
+ OFFISABLE_ATTRS = %w[day_of_week closed_all_day open_hour open_minutes close_hour close_minutes open_all_day].freeze
+
+ included do
+ has_many :working_hours, dependent: :destroy_async
+ after_create :create_default_working_hours
+ end
+
+ def out_of_office?
+ working_hours_enabled? && working_hours.today.closed_now?
+ end
+
+ def working_now?
+ !out_of_office?
+ end
+
+ def weekly_schedule
+ working_hours.order(day_of_week: :asc).select(*OFFISABLE_ATTRS).as_json(except: :id)
+ end
+
+ # accepts an array of hashes similiar to the format of weekly_schedule
+ # [
+ # { "day_of_week"=>1,
+ # "closed_all_day"=>false,
+ # "open_hour"=>9,
+ # "open_minutes"=>0,
+ # "close_hour"=>17,
+ # "close_minutes"=>0,
+ # "open_all_day=>false" },...]
+ def update_working_hours(params)
+ ActiveRecord::Base.transaction do
+ params.each do |working_hour|
+ working_hours.find_by(day_of_week: working_hour['day_of_week']).update(working_hour.slice(*OFFISABLE_ATTRS))
+ end
+ end
+ end
+
+ private
+
+ def create_default_working_hours
+ working_hours.create!(day_of_week: 0, closed_all_day: true, open_all_day: false)
+ working_hours.create!(day_of_week: 1, open_hour: 9, open_minutes: 0, close_hour: 17, close_minutes: 0, open_all_day: false)
+ working_hours.create!(day_of_week: 2, open_hour: 9, open_minutes: 0, close_hour: 17, close_minutes: 0, open_all_day: false)
+ working_hours.create!(day_of_week: 3, open_hour: 9, open_minutes: 0, close_hour: 17, close_minutes: 0, open_all_day: false)
+ working_hours.create!(day_of_week: 4, open_hour: 9, open_minutes: 0, close_hour: 17, close_minutes: 0, open_all_day: false)
+ working_hours.create!(day_of_week: 5, open_hour: 9, open_minutes: 0, close_hour: 17, close_minutes: 0, open_all_day: false)
+ working_hours.create!(day_of_week: 6, closed_all_day: true, open_all_day: false)
+ end
+end
diff --git a/app/models/concerns/priority_activity_message_handler.rb b/app/models/concerns/priority_activity_message_handler.rb
new file mode 100644
index 0000000..391173a
--- /dev/null
+++ b/app/models/concerns/priority_activity_message_handler.rb
@@ -0,0 +1,33 @@
+module PriorityActivityMessageHandler
+ extend ActiveSupport::Concern
+
+ private
+
+ def priority_change_activity(user_name)
+ old_priority, new_priority = previous_changes.values_at('priority')[0]
+ return unless priority_change?(old_priority, new_priority)
+
+ user = Current.executed_by.instance_of?(AutomationRule) ? I18n.t('automation.system_name') : user_name
+ content = build_priority_change_content(user, old_priority, new_priority)
+
+ ::Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
+ end
+
+ def priority_change?(old_priority, new_priority)
+ old_priority.present? || new_priority.present?
+ end
+
+ def build_priority_change_content(user_name, old_priority = nil, new_priority = nil)
+ change_type = get_priority_change_type(old_priority, new_priority)
+
+ I18n.t("conversations.activity.priority.#{change_type}", user_name: user_name, new_priority: new_priority, old_priority: old_priority)
+ end
+
+ def get_priority_change_type(old_priority, new_priority)
+ case [old_priority.present?, new_priority.present?]
+ when [true, true] then 'updated'
+ when [false, true] then 'added'
+ when [true, false] then 'removed'
+ end
+ end
+end
diff --git a/app/models/concerns/pubsubable.rb b/app/models/concerns/pubsubable.rb
new file mode 100644
index 0000000..bbdef51
--- /dev/null
+++ b/app/models/concerns/pubsubable.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+module Pubsubable
+ extend ActiveSupport::Concern
+
+ included do
+ # Used by the actionCable/PubSub Service we use for real time communications
+ has_secure_token :pubsub_token
+ before_save :rotate_pubsub_token
+ end
+
+ def rotate_pubsub_token
+ # ATM we are only rotating the token if the user is changing their password
+ return unless is_a?(User)
+
+ # Using the class method to avoid the extra Save
+ # TODO: Should we do this on signin ?
+ self.pubsub_token = self.class.generate_unique_secure_token if will_save_change_to_encrypted_password?
+ end
+
+ def pubsub_token
+ # backfills tokens for existing records
+ regenerate_pubsub_token if self[:pubsub_token].blank? && persisted?
+ self[:pubsub_token]
+ end
+end
diff --git a/app/models/concerns/push_data_helper.rb b/app/models/concerns/push_data_helper.rb
new file mode 100644
index 0000000..47a1e4e
--- /dev/null
+++ b/app/models/concerns/push_data_helper.rb
@@ -0,0 +1,15 @@
+module PushDataHelper
+ extend ActiveSupport::Concern
+
+ def push_event_data
+ Conversations::EventDataPresenter.new(self).push_data
+ end
+
+ def lock_event_data
+ Conversations::EventDataPresenter.new(self).lock_data
+ end
+
+ def webhook_data
+ Conversations::EventDataPresenter.new(self).push_data
+ end
+end
diff --git a/app/models/concerns/reauthorizable.rb b/app/models/concerns/reauthorizable.rb
new file mode 100644
index 0000000..7a09f64
--- /dev/null
+++ b/app/models/concerns/reauthorizable.rb
@@ -0,0 +1,97 @@
+# This concern is primarily targeted for business models dependent on external services
+# The auth tokens we obtained on their behalf could expire or becomes invalid.
+# We would be aware of it until we make the API call to the service and it throws error
+
+# Example:
+# when a user changes his/her password, the auth token they provided to chatwoot becomes invalid
+
+# This module helps to capture the errors into a counter and when threshold is passed would mark
+# the object to be reauthorized. We will also send an email to the owners alerting them of the error.
+
+# In the UI, we will check for the reauthorization_required? status and prompt the reauthorization flow
+
+module Reauthorizable
+ extend ActiveSupport::Concern
+
+ AUTHORIZATION_ERROR_THRESHOLD = 2
+
+ # model attribute
+ def reauthorization_required?
+ ::Redis::Alfred.get(reauthorization_required_key).present?
+ end
+
+ # model attribute
+ def authorization_error_count
+ ::Redis::Alfred.get(authorization_error_count_key).to_i
+ end
+
+ # action to be performed when we receive authorization errors
+ # Implement in your exception handling logic for authorization errors
+ def authorization_error!
+ ::Redis::Alfred.incr(authorization_error_count_key)
+ # we are giving precendence to the authorization error threshhold defined in the class
+ # so that channels can override the default value
+ prompt_reauthorization! if authorization_error_count >= self.class::AUTHORIZATION_ERROR_THRESHOLD
+ end
+
+ # Performed automatically if error threshold is breached
+ # could used to manually prompt reauthorization if auth scope changes
+ def prompt_reauthorization!
+ ::Redis::Alfred.set(reauthorization_required_key, true)
+
+ reauthorization_handlers[self.class.name]&.call(self)
+
+ invalidate_inbox_cache unless instance_of?(::AutomationRule)
+ end
+
+ def process_integration_hook_reauthorization_emails
+ if slack?
+ AdministratorNotifications::IntegrationsNotificationMailer.with(account: account).slack_disconnect.deliver_later
+ elsif dialogflow?
+ AdministratorNotifications::IntegrationsNotificationMailer.with(account: account).dialogflow_disconnect.deliver_later
+ end
+ end
+
+ def send_channel_reauthorization_email(disconnect_type)
+ AdministratorNotifications::ChannelNotificationsMailer.with(account: account).public_send(disconnect_type, inbox).deliver_later
+ end
+
+ def handle_automation_rule_reauthorization
+ update!(active: false)
+ AdministratorNotifications::AccountNotificationMailer.with(account: account).automation_rule_disabled(self).deliver_later
+ end
+
+ # call this after you successfully Reauthorized the object in UI
+ def reauthorized!
+ ::Redis::Alfred.delete(authorization_error_count_key)
+ ::Redis::Alfred.delete(reauthorization_required_key)
+
+ invalidate_inbox_cache unless instance_of?(::AutomationRule)
+ end
+
+ private
+
+ def reauthorization_handlers
+ {
+ 'Integrations::Hook' => ->(obj) { obj.process_integration_hook_reauthorization_emails },
+ 'Channel::FacebookPage' => ->(obj) { obj.send_channel_reauthorization_email(:facebook_disconnect) },
+ 'Channel::Instagram' => ->(obj) { obj.send_channel_reauthorization_email(:instagram_disconnect) },
+ 'Channel::Tiktok' => ->(obj) { obj.send_channel_reauthorization_email(:tiktok_disconnect) },
+ 'Channel::Whatsapp' => ->(obj) { obj.send_channel_reauthorization_email(:whatsapp_disconnect) },
+ 'Channel::Email' => ->(obj) { obj.send_channel_reauthorization_email(:email_disconnect) },
+ 'AutomationRule' => ->(obj) { obj.handle_automation_rule_reauthorization }
+ }
+ end
+
+ def invalidate_inbox_cache
+ inbox.update_account_cache if inbox.present?
+ end
+
+ def authorization_error_count_key
+ format(::Redis::Alfred::AUTHORIZATION_ERROR_COUNT, obj_type: self.class.table_name.singularize, obj_id: id)
+ end
+
+ def reauthorization_required_key
+ format(::Redis::Alfred::REAUTHORIZATION_REQUIRED, obj_type: self.class.table_name.singularize, obj_id: id)
+ end
+end
diff --git a/app/models/concerns/reportable.rb b/app/models/concerns/reportable.rb
new file mode 100644
index 0000000..23ff69f
--- /dev/null
+++ b/app/models/concerns/reportable.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+module Reportable
+ extend ActiveSupport::Concern
+
+ included do
+ has_many :reporting_events, dependent: :destroy
+ end
+end
diff --git a/app/models/concerns/sla_activity_message_handler.rb b/app/models/concerns/sla_activity_message_handler.rb
new file mode 100644
index 0000000..9460316
--- /dev/null
+++ b/app/models/concerns/sla_activity_message_handler.rb
@@ -0,0 +1,31 @@
+module SlaActivityMessageHandler
+ extend ActiveSupport::Concern
+
+ private
+
+ def create_sla_change_activity(change_type, user_name)
+ content = case change_type
+ when 'added'
+ I18n.t('conversations.activity.sla.added', user_name: user_name, sla_name: sla_policy_name)
+ when 'removed'
+ I18n.t('conversations.activity.sla.removed', user_name: user_name, sla_name: sla_policy_name)
+ when 'updated'
+ I18n.t('conversations.activity.sla.updated', user_name: user_name, sla_name: sla_policy_name)
+ end
+ ::Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
+ end
+
+ def sla_policy_name
+ SlaPolicy.find_by(id: sla_policy_id)&.name || ''
+ end
+
+ def determine_sla_change_type
+ sla_policy_id_before, sla_policy_id_after = previous_changes[:sla_policy_id]
+
+ if sla_policy_id_before.nil? && sla_policy_id_after.present?
+ 'added'
+ elsif sla_policy_id_before.present? && sla_policy_id_after.nil?
+ 'removed'
+ end
+ end
+end
diff --git a/app/models/concerns/sort_handler.rb b/app/models/concerns/sort_handler.rb
new file mode 100644
index 0000000..00eb737
--- /dev/null
+++ b/app/models/concerns/sort_handler.rb
@@ -0,0 +1,37 @@
+module SortHandler
+ extend ActiveSupport::Concern
+
+ class_methods do
+ def sort_on_last_activity_at(sort_direction = :desc)
+ order(last_activity_at: sort_direction)
+ end
+
+ def sort_on_created_at(sort_direction = :asc)
+ order(created_at: sort_direction)
+ end
+
+ def sort_on_priority(sort_direction = :desc)
+ order(generate_sql_query("priority #{sort_direction.to_s.upcase} NULLS LAST, last_activity_at DESC"))
+ end
+
+ def sort_on_waiting_since(sort_direction = :asc)
+ order(generate_sql_query("waiting_since #{sort_direction.to_s.upcase} NULLS LAST, created_at ASC"))
+ end
+
+ def last_messaged_conversations
+ Message.except(:order).select(
+ 'DISTINCT ON (conversation_id) conversation_id, id, created_at, message_type'
+ ).order('conversation_id, created_at DESC')
+ end
+
+ def sort_on_last_user_message_at
+ order('grouped_conversations.message_type', 'grouped_conversations.created_at ASC')
+ end
+
+ private
+
+ def generate_sql_query(query)
+ Arel::Nodes::SqlLiteral.new(sanitize_sql_for_order(query))
+ end
+ end
+end
diff --git a/app/models/concerns/sso_authenticatable.rb b/app/models/concerns/sso_authenticatable.rb
new file mode 100644
index 0000000..98b50f3
--- /dev/null
+++ b/app/models/concerns/sso_authenticatable.rb
@@ -0,0 +1,32 @@
+module SsoAuthenticatable
+ extend ActiveSupport::Concern
+
+ def generate_sso_auth_token
+ token = SecureRandom.hex(32)
+ ::Redis::Alfred.setex(sso_token_key(token), true, 5.minutes)
+ token
+ end
+
+ def invalidate_sso_auth_token(token)
+ ::Redis::Alfred.delete(sso_token_key(token))
+ end
+
+ def valid_sso_auth_token?(token)
+ ::Redis::Alfred.get(sso_token_key(token)).present?
+ end
+
+ def generate_sso_link
+ encoded_email = ERB::Util.url_encode(email)
+ "#{ENV.fetch('FRONTEND_URL', nil)}/app/login?email=#{encoded_email}&sso_auth_token=#{generate_sso_auth_token}"
+ end
+
+ def generate_sso_link_with_impersonation
+ "#{generate_sso_link}&impersonation=true"
+ end
+
+ private
+
+ def sso_token_key(token)
+ format(::Redis::RedisKeys::USER_SSO_AUTH_TOKEN, user_id: id, token: token)
+ end
+end
diff --git a/app/models/concerns/team_activity_message_handler.rb b/app/models/concerns/team_activity_message_handler.rb
new file mode 100644
index 0000000..aba5237
--- /dev/null
+++ b/app/models/concerns/team_activity_message_handler.rb
@@ -0,0 +1,29 @@
+module TeamActivityMessageHandler
+ extend ActiveSupport::Concern
+
+ private
+
+ def create_team_change_activity(user_name)
+ user_name = activity_message_owner(user_name)
+ return unless user_name
+
+ key = generate_team_change_activity_key
+ params = { assignee_name: assignee&.name, team_name: team&.name, user_name: user_name }
+ params[:team_name] = generate_team_name_for_activity if key == 'removed'
+ content = I18n.t("conversations.activity.team.#{key}", **params)
+
+ ::Conversations::ActivityMessageJob.perform_later(self, activity_message_params(content)) if content
+ end
+
+ def generate_team_change_activity_key
+ team = Team.find_by(id: team_id)
+ key = team.present? ? 'assigned' : 'removed'
+ key += '_with_assignee' if key == 'assigned' && saved_change_to_assignee_id? && assignee
+ key
+ end
+
+ def generate_team_name_for_activity
+ previous_team_id = previous_changes[:team_id][0]
+ Team.find_by(id: previous_team_id)&.name if previous_team_id.present?
+ end
+end
diff --git a/app/models/concerns/user_attribute_helpers.rb b/app/models/concerns/user_attribute_helpers.rb
new file mode 100644
index 0000000..442d166
--- /dev/null
+++ b/app/models/concerns/user_attribute_helpers.rb
@@ -0,0 +1,53 @@
+module UserAttributeHelpers
+ extend ActiveSupport::Concern
+
+ def available_name
+ self[:display_name].presence || name
+ end
+
+ def availability_status
+ current_account_user&.availability_status
+ end
+
+ def auto_offline
+ current_account_user&.auto_offline
+ end
+
+ def inviter
+ current_account_user&.inviter
+ end
+
+ def active_account_user
+ account_users.order(Arel.sql('active_at DESC NULLS LAST'))&.first
+ end
+
+ def current_account_user
+ # We want to avoid subsequent queries in case where the association is preloaded.
+ # using where here will trigger n+1 queries.
+ account_users.find { |ac_usr| ac_usr.account_id == Current.account.id } if Current.account
+ end
+
+ def account
+ current_account_user&.account
+ end
+
+ def administrator?
+ current_account_user&.administrator?
+ end
+
+ def agent?
+ current_account_user&.agent?
+ end
+
+ def role
+ current_account_user&.role
+ end
+
+ # Used internally for Chatwoot in Chatwoot
+ def hmac_identifier
+ hmac_key = GlobalConfig.get('CHATWOOT_INBOX_HMAC_KEY')['CHATWOOT_INBOX_HMAC_KEY']
+ return OpenSSL::HMAC.hexdigest('sha256', hmac_key, email) if hmac_key.present?
+
+ ''
+ end
+end
diff --git a/app/models/contact.rb b/app/models/contact.rb
new file mode 100644
index 0000000..5889b49
--- /dev/null
+++ b/app/models/contact.rb
@@ -0,0 +1,253 @@
+# rubocop:disable Layout/LineLength
+
+# == Schema Information
+#
+# Table name: contacts
+#
+# id :integer not null, primary key
+# additional_attributes :jsonb
+# blocked :boolean default(FALSE), not null
+# contact_type :integer default("visitor")
+# country_code :string default("")
+# custom_attributes :jsonb
+# email :string
+# identifier :string
+# last_activity_at :datetime
+# last_name :string default("")
+# location :string default("")
+# middle_name :string default("")
+# name :string default("")
+# phone_number :string
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :integer not null
+# company_id :bigint
+#
+# Indexes
+#
+# index_contacts_on_account_id (account_id)
+# index_contacts_on_account_id_and_contact_type (account_id,contact_type)
+# index_contacts_on_account_id_and_last_activity_at (account_id,last_activity_at DESC NULLS LAST)
+# index_contacts_on_blocked (blocked)
+# index_contacts_on_company_id (company_id)
+# index_contacts_on_lower_email_account_id (lower((email)::text), account_id)
+# index_contacts_on_name_email_phone_number_identifier (name,email,phone_number,identifier) USING gin
+# index_contacts_on_nonempty_fields (account_id,email,phone_number,identifier) WHERE (((email)::text <> ''::text) OR ((phone_number)::text <> ''::text) OR ((identifier)::text <> ''::text))
+# index_contacts_on_phone_number_and_account_id (phone_number,account_id)
+# index_resolved_contact_account_id (account_id) WHERE (((email)::text <> ''::text) OR ((phone_number)::text <> ''::text) OR ((identifier)::text <> ''::text))
+# uniq_email_per_account_contact (email,account_id) UNIQUE
+# uniq_identifier_per_account_contact (identifier,account_id) UNIQUE
+#
+
+# rubocop:enable Layout/LineLength
+
+class Contact < ApplicationRecord
+ include Avatarable
+ include AvailabilityStatusable
+ include Labelable
+ include LlmFormattable
+
+ validates :account_id, presence: true
+ validates :email, allow_blank: true, uniqueness: { scope: [:account_id], case_sensitive: false },
+ format: { with: Devise.email_regexp, message: I18n.t('errors.contacts.email.invalid') }
+ validates :identifier, allow_blank: true, uniqueness: { scope: [:account_id] }
+ validates :phone_number,
+ allow_blank: true, uniqueness: { scope: [:account_id] },
+ format: { with: /\+[1-9]\d{1,14}\z/, message: I18n.t('errors.contacts.phone_number.invalid') }
+
+ belongs_to :account
+ has_many :conversations, dependent: :destroy_async
+ has_many :contact_inboxes, dependent: :destroy_async
+ has_many :csat_survey_responses, dependent: :destroy_async
+ has_many :inboxes, through: :contact_inboxes
+ has_many :messages, as: :sender, dependent: :destroy_async
+ has_many :notes, dependent: :destroy_async
+ before_validation :prepare_contact_attributes
+ after_create_commit :dispatch_create_event, :ip_lookup
+ after_update_commit :dispatch_update_event
+ after_destroy_commit :dispatch_destroy_event
+ before_save :sync_contact_attributes
+
+ enum contact_type: { visitor: 0, lead: 1, customer: 2 }
+
+ scope :order_on_last_activity_at, lambda { |direction|
+ order(
+ Arel::Nodes::SqlLiteral.new(
+ sanitize_sql_for_order("\"contacts\".\"last_activity_at\" #{direction}
+ NULLS LAST")
+ )
+ )
+ }
+ scope :order_on_created_at, lambda { |direction|
+ order(
+ Arel::Nodes::SqlLiteral.new(
+ sanitize_sql_for_order("\"contacts\".\"created_at\" #{direction}
+ NULLS LAST")
+ )
+ )
+ }
+ scope :order_on_company_name, lambda { |direction|
+ order(
+ Arel::Nodes::SqlLiteral.new(
+ sanitize_sql_for_order(
+ "\"contacts\".\"additional_attributes\"->>'company_name' #{direction}
+ NULLS LAST"
+ )
+ )
+ )
+ }
+ scope :order_on_city, lambda { |direction|
+ order(
+ Arel::Nodes::SqlLiteral.new(
+ sanitize_sql_for_order(
+ "\"contacts\".\"additional_attributes\"->>'city' #{direction}
+ NULLS LAST"
+ )
+ )
+ )
+ }
+ scope :order_on_country_name, lambda { |direction|
+ order(
+ Arel::Nodes::SqlLiteral.new(
+ sanitize_sql_for_order(
+ "\"contacts\".\"additional_attributes\"->>'country' #{direction}
+ NULLS LAST"
+ )
+ )
+ )
+ }
+
+ scope :order_on_name, lambda { |direction|
+ order(
+ Arel::Nodes::SqlLiteral.new(
+ sanitize_sql_for_order(
+ "CASE
+ WHEN \"contacts\".\"name\" ~~* '^+\d*' THEN 'z'
+ WHEN \"contacts\".\"name\" ~~* '^\b*' THEN 'z'
+ ELSE LOWER(\"contacts\".\"name\")
+ END #{direction}"
+ )
+ )
+ )
+ }
+
+ # Find contacts that:
+ # 1. Have no identification (email, phone_number, and identifier are NULL or empty string)
+ # 2. Have no conversations
+ # 3. Are older than the specified time period
+ scope :stale_without_conversations, lambda { |time_period|
+ where('contacts.email IS NULL OR contacts.email = ?', '')
+ .where('contacts.phone_number IS NULL OR contacts.phone_number = ?', '')
+ .where('contacts.identifier IS NULL OR contacts.identifier = ?', '')
+ .where('contacts.created_at < ?', time_period)
+ .where.missing(:conversations)
+ }
+
+ def get_source_id(inbox_id)
+ contact_inboxes.find_by!(inbox_id: inbox_id).source_id
+ end
+
+ def push_event_data
+ {
+ additional_attributes: additional_attributes,
+ custom_attributes: custom_attributes || {},
+ email: email,
+ id: id,
+ identifier: identifier,
+ name: name,
+ phone_number: phone_number,
+ thumbnail: avatar_url,
+ blocked: blocked,
+ type: 'contact'
+ }
+ end
+
+ def webhook_data
+ {
+ account: account.webhook_data,
+ additional_attributes: additional_attributes,
+ avatar: avatar_url,
+ custom_attributes: custom_attributes,
+ email: email,
+ id: id,
+ identifier: identifier,
+ name: name,
+ phone_number: phone_number,
+ thumbnail: avatar_url,
+ blocked: blocked
+ }
+ end
+
+ def self.resolved_contacts(use_crm_v2: false)
+ return where(contact_type: 'lead') if use_crm_v2
+
+ where("contacts.email <> '' OR contacts.phone_number <> '' OR contacts.identifier <> ''")
+ end
+
+ def discard_invalid_attrs
+ phone_number_format
+ email_format
+ end
+
+ def self.from_email(email)
+ find_by(email: email&.downcase)
+ end
+
+ private
+
+ def ip_lookup
+ return unless account.feature_enabled?('ip_lookup')
+
+ ContactIpLookupJob.perform_later(self)
+ end
+
+ def phone_number_format
+ return if phone_number.blank?
+
+ self.phone_number = phone_number_was unless phone_number.match?(/\+[1-9]\d{1,14}\z/)
+ end
+
+ def email_format
+ return if email.blank?
+
+ self.email = email_was unless email.match(Devise.email_regexp)
+ end
+
+ def prepare_contact_attributes
+ prepare_email_attribute
+ prepare_jsonb_attributes
+ end
+
+ def prepare_email_attribute
+ # So that the db unique constraint won't throw error when email is ''
+ self.email = email.present? ? email.downcase : nil
+ end
+
+ def prepare_jsonb_attributes
+ self.additional_attributes = {} if additional_attributes.blank?
+ self.custom_attributes = {} if custom_attributes.blank?
+ end
+
+ def sync_contact_attributes
+ ::Contacts::SyncAttributes.new(self).perform
+ end
+
+ def dispatch_create_event
+ Rails.configuration.dispatcher.dispatch(CONTACT_CREATED, Time.zone.now, contact: self)
+ end
+
+ def dispatch_update_event
+ Rails.configuration.dispatcher.dispatch(CONTACT_UPDATED, Time.zone.now, contact: self, changed_attributes: previous_changes)
+ end
+
+ def dispatch_destroy_event
+ # Pass serialized data instead of ActiveRecord object to avoid DeserializationError
+ # when the async EventDispatcherJob runs after the contact has been deleted
+ Rails.configuration.dispatcher.dispatch(
+ CONTACT_DELETED,
+ Time.zone.now,
+ contact_data: push_event_data.merge(account_id: account_id)
+ )
+ end
+end
+Contact.include_mod_with('Concerns::Contact')
diff --git a/app/models/contact_inbox.rb b/app/models/contact_inbox.rb
new file mode 100644
index 0000000..893ab87
--- /dev/null
+++ b/app/models/contact_inbox.rb
@@ -0,0 +1,79 @@
+# == Schema Information
+#
+# Table name: contact_inboxes
+#
+# id :bigint not null, primary key
+# hmac_verified :boolean default(FALSE)
+# pubsub_token :string
+# created_at :datetime not null
+# updated_at :datetime not null
+# contact_id :bigint
+# inbox_id :bigint
+# source_id :text not null
+#
+# Indexes
+#
+# index_contact_inboxes_on_contact_id (contact_id)
+# index_contact_inboxes_on_inbox_id (inbox_id)
+# index_contact_inboxes_on_inbox_id_and_source_id (inbox_id,source_id) UNIQUE
+# index_contact_inboxes_on_pubsub_token (pubsub_token) UNIQUE
+# index_contact_inboxes_on_source_id (source_id)
+#
+
+class ContactInbox < ApplicationRecord
+ include Pubsubable
+ include RegexHelper
+ validates :inbox_id, presence: true
+ validates :contact_id, presence: true
+ validates :source_id, presence: true
+ validate :valid_source_id_format?
+
+ belongs_to :contact
+ belongs_to :inbox
+
+ has_many :conversations, dependent: :destroy_async
+
+ # contact_inboxes that are not associated with any conversation
+ scope :stale_without_conversations, lambda { |time_period|
+ left_joins(:conversations)
+ .where('contact_inboxes.created_at < ?', time_period)
+ .where(conversations: { contact_id: nil })
+ }
+
+ def webhook_data
+ {
+ id: id,
+ contact: contact.try(:webhook_data),
+ inbox: inbox.webhook_data,
+ account: inbox.account.webhook_data,
+ current_conversation: current_conversation.try(:webhook_data),
+ source_id: source_id
+ }
+ end
+
+ def current_conversation
+ conversations.last
+ end
+
+ private
+
+ def validate_twilio_source_id
+ # https://www.twilio.com/docs/glossary/what-e164#regex-matching-for-e164
+ if inbox.channel.medium == 'sms' && !TWILIO_CHANNEL_SMS_REGEX.match?(source_id)
+ errors.add(:source_id, "invalid source id for twilio sms inbox. valid Regex #{TWILIO_CHANNEL_SMS_REGEX}")
+ elsif inbox.channel.medium == 'whatsapp' && !TWILIO_CHANNEL_WHATSAPP_REGEX.match?(source_id)
+ errors.add(:source_id, "invalid source id for twilio whatsapp inbox. valid Regex #{TWILIO_CHANNEL_WHATSAPP_REGEX}")
+ end
+ end
+
+ def validate_whatsapp_source_id
+ return if WHATSAPP_CHANNEL_REGEX.match?(source_id)
+
+ errors.add(:source_id, "invalid source id for whatsapp inbox. valid Regex #{WHATSAPP_CHANNEL_REGEX}")
+ end
+
+ def valid_source_id_format?
+ validate_twilio_source_id if inbox.channel_type == 'Channel::TwilioSms'
+ validate_whatsapp_source_id if inbox.channel_type == 'Channel::Whatsapp'
+ end
+end
diff --git a/app/models/conversation.rb b/app/models/conversation.rb
new file mode 100644
index 0000000..ac09854
--- /dev/null
+++ b/app/models/conversation.rb
@@ -0,0 +1,343 @@
+# == Schema Information
+#
+# Table name: conversations
+#
+# id :integer not null, primary key
+# additional_attributes :jsonb
+# agent_last_seen_at :datetime
+# assignee_last_seen_at :datetime
+# cached_label_list :text
+# contact_last_seen_at :datetime
+# custom_attributes :jsonb
+# first_reply_created_at :datetime
+# identifier :string
+# last_activity_at :datetime not null
+# priority :integer
+# snoozed_until :datetime
+# status :integer default("open"), not null
+# uuid :uuid not null
+# waiting_since :datetime
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :integer not null
+# assignee_agent_bot_id :bigint
+# assignee_id :integer
+# campaign_id :bigint
+# contact_id :bigint
+# contact_inbox_id :bigint
+# display_id :integer not null
+# inbox_id :integer not null
+# sla_policy_id :bigint
+# team_id :bigint
+#
+# Indexes
+#
+# conv_acid_inbid_stat_asgnid_idx (account_id,inbox_id,status,assignee_id)
+# index_conversations_on_account_id (account_id)
+# index_conversations_on_account_id_and_display_id (account_id,display_id) UNIQUE
+# index_conversations_on_assignee_id_and_account_id (assignee_id,account_id)
+# index_conversations_on_campaign_id (campaign_id)
+# index_conversations_on_contact_id (contact_id)
+# index_conversations_on_contact_inbox_id (contact_inbox_id)
+# index_conversations_on_first_reply_created_at (first_reply_created_at)
+# index_conversations_on_id_and_account_id (account_id,id)
+# index_conversations_on_identifier_and_account_id (identifier,account_id)
+# index_conversations_on_inbox_id (inbox_id)
+# index_conversations_on_priority (priority)
+# index_conversations_on_status_and_account_id (status,account_id)
+# index_conversations_on_status_and_priority (status,priority)
+# index_conversations_on_team_id (team_id)
+# index_conversations_on_uuid (uuid) UNIQUE
+# index_conversations_on_waiting_since (waiting_since)
+#
+
+class Conversation < ApplicationRecord
+ include Labelable
+ include LlmFormattable
+ include AssignmentHandler
+ include AutoAssignmentHandler
+ include ActivityMessageHandler
+ include UrlHelper
+ include SortHandler
+ include PushDataHelper
+ include ConversationMuteHelpers
+
+ validates :account_id, presence: true
+ validates :inbox_id, presence: true
+ validates :contact_id, presence: true
+ before_validation :validate_additional_attributes
+ before_validation :reset_agent_bot_when_assignee_present
+ validates :additional_attributes, jsonb_attributes_length: true
+ validates :custom_attributes, jsonb_attributes_length: true
+ validates :uuid, uniqueness: true
+ validate :validate_referer_url
+
+ enum status: { open: 0, resolved: 1, pending: 2, snoozed: 3 }
+ enum priority: { low: 0, medium: 1, high: 2, urgent: 3 }
+
+ scope :unassigned, -> { where(assignee_id: nil) }
+ scope :assigned, -> { where.not(assignee_id: nil) }
+ scope :assigned_to, ->(agent) { where(assignee_id: agent.id) }
+ scope :unattended, -> { where(first_reply_created_at: nil).or(where.not(waiting_since: nil)) }
+ scope :resolvable_not_waiting, lambda { |auto_resolve_after|
+ return none if auto_resolve_after.to_i.zero?
+
+ open.where('last_activity_at < ? AND waiting_since IS NULL', Time.now.utc - auto_resolve_after.minutes)
+ }
+ scope :resolvable_all, lambda { |auto_resolve_after|
+ return none if auto_resolve_after.to_i.zero?
+
+ open.where('last_activity_at < ?', Time.now.utc - auto_resolve_after.minutes)
+ }
+
+ scope :last_user_message_at, lambda {
+ joins(
+ "INNER JOIN (#{last_messaged_conversations.to_sql}) AS grouped_conversations
+ ON grouped_conversations.conversation_id = conversations.id"
+ ).sort_on_last_user_message_at
+ }
+
+ belongs_to :account
+ belongs_to :inbox
+ belongs_to :assignee, class_name: 'User', optional: true, inverse_of: :assigned_conversations
+ belongs_to :assignee_agent_bot, class_name: 'AgentBot', optional: true
+ belongs_to :contact
+ belongs_to :contact_inbox
+ belongs_to :team, optional: true
+ belongs_to :campaign, optional: true
+
+ has_many :mentions, dependent: :destroy_async
+ has_many :messages, dependent: :destroy_async, autosave: true
+ has_one :csat_survey_response, dependent: :destroy_async
+ has_many :conversation_participants, dependent: :destroy_async
+ has_many :notifications, as: :primary_actor, dependent: :destroy_async
+ has_many :attachments, through: :messages
+ has_many :reporting_events, dependent: :destroy_async
+
+ before_save :ensure_snooze_until_reset
+ before_create :determine_conversation_status
+ before_create :ensure_waiting_since
+
+ after_update_commit :execute_after_update_commit_callbacks
+ after_create_commit :notify_conversation_creation
+ after_create_commit :load_attributes_created_by_db_triggers
+
+ delegate :auto_resolve_after, to: :account
+
+ def can_reply?
+ Conversations::MessageWindowService.new(self).can_reply?
+ end
+
+ def language
+ additional_attributes&.dig('conversation_language')
+ end
+
+ # Be aware: The precision of created_at and last_activity_at may differ from Ruby's Time precision.
+ # Our DB column (see schema) stores timestamps with second-level precision (no microseconds), so
+ # if you assign a Ruby Time with microseconds, the DB will truncate it. This may cause subtle differences
+ # if you compare or copy these values in Ruby, also in our specs
+ # So in specs rely on to be_with(1.second) instead of to eq()
+ # TODO: Migrate to use a timestamp with microsecond precision
+ def last_activity_at
+ self[:last_activity_at] || created_at
+ end
+
+ def last_incoming_message
+ messages&.incoming&.last
+ end
+
+ def toggle_status
+ # FIXME: implement state machine with aasm
+ self.status = open? ? :resolved : :open
+ self.status = :open if pending? || snoozed?
+ save
+ end
+
+ def toggle_priority(priority = nil)
+ self.priority = priority.presence
+ save
+ end
+
+ def bot_handoff!
+ open!
+ dispatcher_dispatch(CONVERSATION_BOT_HANDOFF)
+ end
+
+ def unread_messages
+ agent_last_seen_at.present? ? messages.created_since(agent_last_seen_at) : messages
+ end
+
+ def unread_incoming_messages
+ unread_messages.where(account_id: account_id).incoming.last(10)
+ end
+
+ def cached_label_list_array
+ (cached_label_list || '').split(',').map(&:strip)
+ end
+
+ def notifiable_assignee_change?
+ return false unless saved_change_to_assignee_id?
+ return false if assignee_id.blank?
+ return false if self_assign?(assignee_id)
+
+ true
+ end
+
+ # Virtual attribute till we switch completely to polymorphic assignee
+ def assignee_type
+ return 'AgentBot' if assignee_agent_bot_id.present?
+ return 'User' if assignee_id.present?
+
+ nil
+ end
+
+ def assigned_entity
+ assignee_agent_bot || assignee
+ end
+
+ def tweet?
+ inbox.inbox_type == 'Twitter' && additional_attributes['type'] == 'tweet'
+ end
+
+ def recent_messages
+ messages.chat.last(5)
+ end
+
+ def csat_survey_link
+ "#{ENV.fetch('FRONTEND_URL', nil)}/survey/responses/#{uuid}"
+ end
+
+ def dispatch_conversation_updated_event(previous_changes = nil)
+ dispatcher_dispatch(CONVERSATION_UPDATED, previous_changes)
+ end
+
+ private
+
+ def execute_after_update_commit_callbacks
+ handle_resolved_status_change
+ notify_status_change
+ create_activity
+ notify_conversation_updation
+ end
+
+ def handle_resolved_status_change
+ # When conversation is resolved, clear waiting_since using update_column to avoid callbacks
+ return unless saved_change_to_status? && status == 'resolved'
+
+ # rubocop:disable Rails/SkipsModelValidations
+ update_column(:waiting_since, nil)
+ # rubocop:enable Rails/SkipsModelValidations
+ end
+
+ def ensure_snooze_until_reset
+ self.snoozed_until = nil unless snoozed?
+ end
+
+ def ensure_waiting_since
+ self.waiting_since = created_at
+ end
+
+ def validate_additional_attributes
+ self.additional_attributes = {} unless additional_attributes.is_a?(Hash)
+ end
+
+ def reset_agent_bot_when_assignee_present
+ return if assignee_id.blank?
+
+ self.assignee_agent_bot_id = nil
+ end
+
+ def determine_conversation_status
+ self.status = :resolved and return if contact.blocked?
+
+ return handle_campaign_status if campaign.present?
+
+ # TODO: make this an inbox config instead of assuming bot conversations should start as pending
+ self.status = :pending if inbox.active_bot?
+ end
+
+ def handle_campaign_status
+ # If campaign has no sender (bot-initiated) and inbox has active bot, let bot handle it
+ self.status = :pending if campaign.sender_id.nil? && inbox.active_bot?
+ end
+
+ def notify_conversation_creation
+ dispatcher_dispatch(CONVERSATION_CREATED)
+ end
+
+ def notify_conversation_updation
+ return unless previous_changes.keys.present? && allowed_keys?
+
+ dispatch_conversation_updated_event(previous_changes)
+ end
+
+ def list_of_keys
+ %w[team_id assignee_id assignee_agent_bot_id status snoozed_until custom_attributes label_list waiting_since
+ first_reply_created_at priority]
+ end
+
+ def allowed_keys?
+ (
+ previous_changes.keys.intersect?(list_of_keys) ||
+ (previous_changes['additional_attributes'].present? && previous_changes['additional_attributes'][1].keys.intersect?(%w[conversation_language]))
+ )
+ end
+
+ def load_attributes_created_by_db_triggers
+ # Display id is set via a trigger in the database
+ # So we need to specifically fetch it after the record is created
+ # We can't use reload because it will clear the previous changes, which we need for the dispatcher
+ obj_from_db = self.class.find(id)
+ self[:display_id] = obj_from_db[:display_id]
+ self[:uuid] = obj_from_db[:uuid]
+ end
+
+ def notify_status_change
+ {
+ CONVERSATION_OPENED => -> { saved_change_to_status? && open? },
+ CONVERSATION_RESOLVED => -> { saved_change_to_status? && resolved? },
+ CONVERSATION_STATUS_CHANGED => -> { saved_change_to_status? },
+ CONVERSATION_READ => -> { saved_change_to_contact_last_seen_at? },
+ CONVERSATION_CONTACT_CHANGED => -> { saved_change_to_contact_id? }
+ }.each do |event, condition|
+ condition.call && dispatcher_dispatch(event, status_change)
+ end
+ end
+
+ def dispatcher_dispatch(event_name, changed_attributes = nil)
+ Rails.configuration.dispatcher.dispatch(event_name, Time.zone.now, conversation: self, notifiable_assignee_change: notifiable_assignee_change?,
+ changed_attributes: changed_attributes,
+ performed_by: Current.executed_by)
+ end
+
+ def conversation_status_changed_to_open?
+ return false unless open?
+ # saved_change_to_status? method only works in case of update
+ return true if previous_changes.key?(:id) || saved_change_to_status?
+ end
+
+ def create_label_change(user_name)
+ return unless user_name
+
+ previous_labels, current_labels = previous_changes[:label_list]
+ return unless (previous_labels.is_a? Array) && (current_labels.is_a? Array)
+
+ create_label_added(user_name, current_labels - previous_labels)
+ create_label_removed(user_name, previous_labels - current_labels)
+ end
+
+ def validate_referer_url
+ return unless additional_attributes['referer']
+
+ self['additional_attributes']['referer'] = nil unless url_valid?(additional_attributes['referer'])
+ end
+
+ # creating db triggers
+ trigger.before(:insert).for_each(:row) do
+ "NEW.display_id := nextval('conv_dpid_seq_' || NEW.account_id);"
+ end
+end
+
+Conversation.include_mod_with('Audit::Conversation')
+Conversation.include_mod_with('Concerns::Conversation')
+Conversation.prepend_mod_with('Conversation')
diff --git a/app/models/conversation_participant.rb b/app/models/conversation_participant.rb
new file mode 100644
index 0000000..830eb7b
--- /dev/null
+++ b/app/models/conversation_participant.rb
@@ -0,0 +1,41 @@
+# == Schema Information
+#
+# Table name: conversation_participants
+#
+# id :bigint not null, primary key
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :bigint not null
+# conversation_id :bigint not null
+# user_id :bigint not null
+#
+# Indexes
+#
+# index_conversation_participants_on_account_id (account_id)
+# index_conversation_participants_on_conversation_id (conversation_id)
+# index_conversation_participants_on_user_id (user_id)
+# index_conversation_participants_on_user_id_and_conversation_id (user_id,conversation_id) UNIQUE
+#
+class ConversationParticipant < ApplicationRecord
+ validates :account_id, presence: true
+ validates :conversation_id, presence: true
+ validates :user_id, presence: true
+ validates :user_id, uniqueness: { scope: [:conversation_id] }
+ validate :ensure_inbox_access
+
+ belongs_to :account
+ belongs_to :conversation
+ belongs_to :user
+
+ before_validation :ensure_account_id
+
+ private
+
+ def ensure_account_id
+ self.account_id = conversation&.account_id
+ end
+
+ def ensure_inbox_access
+ errors.add(:user, 'must have inbox access') if conversation && conversation.inbox.assignable_agents.exclude?(user)
+ end
+end
diff --git a/app/models/csat_survey_response.rb b/app/models/csat_survey_response.rb
new file mode 100644
index 0000000..804dfd4
--- /dev/null
+++ b/app/models/csat_survey_response.rb
@@ -0,0 +1,43 @@
+# == Schema Information
+#
+# Table name: csat_survey_responses
+#
+# id :bigint not null, primary key
+# feedback_message :text
+# rating :integer not null
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :bigint not null
+# assigned_agent_id :bigint
+# contact_id :bigint not null
+# conversation_id :bigint not null
+# message_id :bigint not null
+#
+# Indexes
+#
+# index_csat_survey_responses_on_account_id (account_id)
+# index_csat_survey_responses_on_assigned_agent_id (assigned_agent_id)
+# index_csat_survey_responses_on_contact_id (contact_id)
+# index_csat_survey_responses_on_conversation_id (conversation_id)
+# index_csat_survey_responses_on_message_id (message_id) UNIQUE
+#
+class CsatSurveyResponse < ApplicationRecord
+ belongs_to :account
+ belongs_to :conversation
+ belongs_to :contact
+ belongs_to :message
+ belongs_to :assigned_agent, class_name: 'User', optional: true, inverse_of: :csat_survey_responses
+ belongs_to :review_notes_updated_by, class_name: 'User', optional: true
+
+ validates :rating, presence: true, inclusion: { in: [1, 2, 3, 4, 5] }
+ validates :account_id, presence: true
+ validates :contact_id, presence: true
+ validates :conversation_id, presence: true
+
+ scope :filter_by_created_at, ->(range) { where(created_at: range) if range.present? }
+ scope :filter_by_assigned_agent_id, ->(user_ids) { where(assigned_agent_id: user_ids) if user_ids.present? }
+ scope :filter_by_inbox_id, ->(inbox_id) { joins(:conversation).where(conversations: { inbox_id: inbox_id }) if inbox_id.present? }
+ scope :filter_by_team_id, ->(team_id) { joins(:conversation).where(conversations: { team_id: team_id }) if team_id.present? }
+ # filter by rating value
+ scope :filter_by_rating, ->(rating) { where(rating: rating) if rating.present? }
+end
diff --git a/app/models/custom_attribute_definition.rb b/app/models/custom_attribute_definition.rb
new file mode 100644
index 0000000..4154da3
--- /dev/null
+++ b/app/models/custom_attribute_definition.rb
@@ -0,0 +1,73 @@
+# == Schema Information
+#
+# Table name: custom_attribute_definitions
+#
+# id :bigint not null, primary key
+# attribute_description :text
+# attribute_display_name :string
+# attribute_display_type :integer default("text")
+# attribute_key :string
+# attribute_model :integer default("conversation_attribute")
+# attribute_values :jsonb
+# default_value :integer
+# regex_cue :string
+# regex_pattern :string
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :bigint
+#
+# Indexes
+#
+# attribute_key_model_index (attribute_key,attribute_model,account_id) UNIQUE
+# index_custom_attribute_definitions_on_account_id (account_id)
+#
+class CustomAttributeDefinition < ApplicationRecord
+ STANDARD_ATTRIBUTES = {
+ :conversation => %w[status priority assignee_id inbox_id team_id display_id campaign_id labels browser_language country_code referer created_at
+ last_activity_at],
+ :contact => %w[name email phone_number identifier country_code city created_at last_activity_at referer blocked]
+ }.freeze
+
+ scope :with_attribute_model, ->(attribute_model) { attribute_model.presence && where(attribute_model: attribute_model) }
+ validates :attribute_display_name, presence: true
+
+ validates :attribute_key,
+ presence: true,
+ uniqueness: { scope: [:account_id, :attribute_model] }
+
+ validates :attribute_display_type, presence: true
+ validates :attribute_model, presence: true
+ validate :attribute_must_not_conflict, on: :create
+
+ enum attribute_model: { conversation_attribute: 0, contact_attribute: 1 }
+ enum attribute_display_type: { text: 0, number: 1, currency: 2, percent: 3, link: 4, date: 5, list: 6, checkbox: 7 }
+
+ belongs_to :account
+ after_update :update_widget_pre_chat_custom_fields
+ after_destroy :sync_widget_pre_chat_custom_fields
+ after_destroy :cleanup_conversation_required_attributes
+
+ private
+
+ def sync_widget_pre_chat_custom_fields
+ ::Inboxes::SyncWidgetPreChatCustomFieldsJob.perform_later(account, attribute_key)
+ end
+
+ def update_widget_pre_chat_custom_fields
+ ::Inboxes::UpdateWidgetPreChatCustomFieldsJob.perform_later(account, self)
+ end
+
+ def cleanup_conversation_required_attributes
+ return unless conversation_attribute? && account.conversation_required_attributes&.include?(attribute_key)
+
+ account.conversation_required_attributes = account.conversation_required_attributes - [attribute_key]
+ account.save!
+ end
+
+ def attribute_must_not_conflict
+ model_keys = attribute_model.to_sym == :conversation_attribute ? :conversation : :contact
+ return unless attribute_key.in?(STANDARD_ATTRIBUTES[model_keys])
+
+ errors.add(:attribute_key, I18n.t('errors.custom_attribute_definition.key_conflict'))
+ end
+end
diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb
new file mode 100644
index 0000000..6d64c04
--- /dev/null
+++ b/app/models/custom_filter.rb
@@ -0,0 +1,31 @@
+# == Schema Information
+#
+# Table name: custom_filters
+#
+# id :bigint not null, primary key
+# filter_type :integer default("conversation"), not null
+# name :string not null
+# query :jsonb not null
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :bigint not null
+# user_id :bigint not null
+#
+# Indexes
+#
+# index_custom_filters_on_account_id (account_id)
+# index_custom_filters_on_user_id (user_id)
+#
+class CustomFilter < ApplicationRecord
+ belongs_to :user
+ belongs_to :account
+
+ enum filter_type: { conversation: 0, contact: 1, report: 2 }
+ validate :validate_number_of_filters
+
+ def validate_number_of_filters
+ return true if account.custom_filters.where(user_id: user_id).size < Limits::MAX_CUSTOM_FILTERS_PER_USER
+
+ errors.add :account_id, I18n.t('errors.custom_filters.number_of_records')
+ end
+end
diff --git a/app/models/dashboard_app.rb b/app/models/dashboard_app.rb
new file mode 100644
index 0000000..e8a7edd
--- /dev/null
+++ b/app/models/dashboard_app.rb
@@ -0,0 +1,47 @@
+# == Schema Information
+#
+# Table name: dashboard_apps
+#
+# id :bigint not null, primary key
+# content :jsonb
+# title :string not null
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :bigint not null
+# user_id :bigint
+#
+# Indexes
+#
+# index_dashboard_apps_on_account_id (account_id)
+# index_dashboard_apps_on_user_id (user_id)
+#
+class DashboardApp < ApplicationRecord
+ belongs_to :user
+ belongs_to :account
+ validate :validate_content
+
+ private
+
+ def validate_content
+ has_invalid_data = self[:content].blank? || !self[:content].is_a?(Array)
+ self[:content] = [] if has_invalid_data
+
+ content_schema = {
+ 'type' => 'array',
+ 'items' => {
+ 'type' => 'object',
+ 'required' => %w[url type],
+ 'properties' => {
+ 'type' => { 'enum': ['frame'] },
+ 'url' => { '$ref' => '#/definitions/saneUrl' }
+ }
+ },
+ 'definitions' => {
+ 'saneUrl' => { 'format' => 'uri', 'pattern' => '^https?://' }
+ },
+ 'additionalProperties' => false,
+ 'minItems' => 1
+ }
+ errors.add(:content, ': Invalid data') unless JSONSchemer.schema(content_schema.to_json).valid?(self[:content])
+ end
+end
diff --git a/app/models/data_import.rb b/app/models/data_import.rb
new file mode 100644
index 0000000..a44650a
--- /dev/null
+++ b/app/models/data_import.rb
@@ -0,0 +1,35 @@
+# == Schema Information
+#
+# Table name: data_imports
+#
+# id :bigint not null, primary key
+# data_type :string not null
+# processed_records :integer
+# processing_errors :text
+# status :integer default("pending"), not null
+# total_records :integer
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :bigint not null
+#
+# Indexes
+#
+# index_data_imports_on_account_id (account_id)
+#
+class DataImport < ApplicationRecord
+ belongs_to :account
+ validates :data_type, inclusion: { in: ['contacts'], message: I18n.t('errors.data_import.data_type.invalid') }
+ enum status: { pending: 0, processing: 1, completed: 2, failed: 3 }
+
+ has_one_attached :import_file
+ has_one_attached :failed_records
+
+ after_create_commit :process_data_import
+
+ private
+
+ def process_data_import
+ # we wait for the file to be uploaded to the cloud
+ DataImportJob.set(wait: 1.minute).perform_later(self)
+ end
+end
diff --git a/app/models/email_template.rb b/app/models/email_template.rb
new file mode 100644
index 0000000..57db7a9
--- /dev/null
+++ b/app/models/email_template.rb
@@ -0,0 +1,28 @@
+# == Schema Information
+#
+# Table name: email_templates
+#
+# id :bigint not null, primary key
+# body :text not null
+# locale :integer default("en"), not null
+# name :string not null
+# template_type :integer default("content")
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :integer
+#
+# Indexes
+#
+# index_email_templates_on_name_and_account_id (name,account_id) UNIQUE
+#
+class EmailTemplate < ApplicationRecord
+ enum :locale, LANGUAGES_CONFIG.map { |key, val| [val[:iso_639_1_code], key] }.to_h, prefix: true
+ enum :template_type, { layout: 0, content: 1 }
+ belongs_to :account, optional: true
+
+ validates :name, uniqueness: { scope: :account }
+
+ def self.resolver(options = {})
+ ::EmailTemplates::DbResolverService.using self, options
+ end
+end
diff --git a/app/models/folder.rb b/app/models/folder.rb
new file mode 100644
index 0000000..315d1f3
--- /dev/null
+++ b/app/models/folder.rb
@@ -0,0 +1,20 @@
+# == Schema Information
+#
+# Table name: folders
+#
+# id :bigint not null, primary key
+# name :string
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :integer not null
+# category_id :integer not null
+#
+class Folder < ApplicationRecord
+ belongs_to :account
+ belongs_to :category
+ has_many :articles, dependent: :nullify
+
+ validates :account_id, presence: true
+ validates :category_id, presence: true
+ validates :name, presence: true
+end
diff --git a/app/models/inbox.rb b/app/models/inbox.rb
new file mode 100644
index 0000000..0a26462
--- /dev/null
+++ b/app/models/inbox.rb
@@ -0,0 +1,251 @@
+# frozen_string_literal: true
+
+# == Schema Information
+#
+# Table name: inboxes
+#
+# id :integer not null, primary key
+# allow_messages_after_resolved :boolean default(TRUE)
+# auto_assignment_config :jsonb
+# business_name :string
+# channel_type :string
+# csat_config :jsonb not null
+# csat_survey_enabled :boolean default(FALSE)
+# email_address :string
+# enable_auto_assignment :boolean default(TRUE)
+# enable_email_collect :boolean default(TRUE)
+# greeting_enabled :boolean default(FALSE)
+# greeting_message :string
+# lock_to_single_conversation :boolean default(FALSE), not null
+# name :string not null
+# out_of_office_message :string
+# sender_name_type :integer default("friendly"), not null
+# timezone :string default("UTC")
+# working_hours_enabled :boolean default(FALSE)
+# created_at :datetime not null
+# updated_at :datetime not null
+# account_id :integer not null
+# channel_id :integer not null
+# portal_id :bigint
+#
+# Indexes
+#
+# index_inboxes_on_account_id (account_id)
+# index_inboxes_on_channel_id_and_channel_type (channel_id,channel_type)
+# index_inboxes_on_portal_id (portal_id)
+#
+# Foreign Keys
+#
+# fk_rails_... (portal_id => portals.id)
+#
+
+class Inbox < ApplicationRecord
+ include Reportable
+ include Avatarable
+ include OutOfOffisable
+ include AccountCacheRevalidator
+ include InboxAgentAvailability
+
+ # Not allowing characters:
+ validates :name, presence: true
+ validates :account_id, presence: true
+ validates :timezone, inclusion: { in: TZInfo::Timezone.all_identifiers }
+ validates :out_of_office_message, length: { maximum: Limits::OUT_OF_OFFICE_MESSAGE_MAX_LENGTH }
+ validates :greeting_message, length: { maximum: Limits::GREETING_MESSAGE_MAX_LENGTH }
+ validate :ensure_valid_max_assignment_limit
+
+ belongs_to :account
+ belongs_to :portal, optional: true
+
+ belongs_to :channel, polymorphic: true, dependent: :destroy
+
+ has_many :campaigns, dependent: :destroy_async
+ has_many :contact_inboxes, dependent: :destroy_async
+ has_many :contacts, through: :contact_inboxes
+
+ has_many :inbox_members, dependent: :destroy_async
+ has_many :members, through: :inbox_members, source: :user
+ has_many :conversations, dependent: :destroy_async
+ has_many :messages, dependent: :destroy_async
+
+ has_one :inbox_assignment_policy, dependent: :destroy
+ has_one :assignment_policy, through: :inbox_assignment_policy
+ has_one :agent_bot_inbox, dependent: :destroy_async
+ has_one :agent_bot, through: :agent_bot_inbox
+ has_many :webhooks, dependent: :destroy_async
+ has_many :hooks, dependent: :destroy_async, class_name: 'Integrations::Hook'
+
+ enum sender_name_type: { friendly: 0, professional: 1 }
+
+ after_destroy :delete_round_robin_agents
+
+ after_create_commit :dispatch_create_event
+ after_update_commit :dispatch_update_event
+
+ scope :order_by_name, -> { order('lower(name) ASC') }
+
+ # Adds multiple members to the inbox
+ # @param user_ids [Array')
+ out(:children)
+ out('')
+ end
+
+ def method_missing(method_name, node = nil, *args, **kwargs, &)
+ return super unless node.is_a?(CommonMarker::Node)
+
+ out(:children)
+ cr unless %i[text softbreak linebreak].include?(node.type)
+ end
+
+ def respond_to_missing?(_method_name, _include_private = false)
+ true
+ end
+end
diff --git a/app/services/messages/markdown_renderers/instagram_renderer.rb b/app/services/messages/markdown_renderers/instagram_renderer.rb
new file mode 100644
index 0000000..4ceb6f3
--- /dev/null
+++ b/app/services/messages/markdown_renderers/instagram_renderer.rb
@@ -0,0 +1,52 @@
+class Messages::MarkdownRenderers::InstagramRenderer < Messages::MarkdownRenderers::BaseMarkdownRenderer
+ def initialize
+ super
+ @list_item_number = 0
+ end
+
+ def strong(_node)
+ out('*', :children, '*')
+ end
+
+ def emph(_node)
+ out('_', :children, '_')
+ end
+
+ def code(node)
+ out(node.string_content)
+ end
+
+ def link(node)
+ out(node.url)
+ end
+
+ def list(node)
+ @list_type = node.list_type
+ @list_item_number = @list_type == :ordered_list ? node.list_start : 0
+ out(:children)
+ cr
+ end
+
+ def list_item(_node)
+ if @list_type == :ordered_list
+ out("#{@list_item_number}. ", :children)
+ @list_item_number += 1
+ else
+ out('- ', :children)
+ end
+ cr
+ end
+
+ def blockquote(_node)
+ out(:children)
+ cr
+ end
+
+ def code_block(node)
+ out(node.string_content)
+ end
+
+ def softbreak(_node)
+ out("\n")
+ end
+end
diff --git a/app/services/messages/markdown_renderers/line_renderer.rb b/app/services/messages/markdown_renderers/line_renderer.rb
new file mode 100644
index 0000000..f47c211
--- /dev/null
+++ b/app/services/messages/markdown_renderers/line_renderer.rb
@@ -0,0 +1,36 @@
+class Messages::MarkdownRenderers::LineRenderer < Messages::MarkdownRenderers::BaseMarkdownRenderer
+ def strong(_node)
+ out(' *', :children, '* ')
+ end
+
+ def emph(_node)
+ out(' _', :children, '_ ')
+ end
+
+ def code(node)
+ out(' `', node.string_content, '` ')
+ end
+
+ def link(node)
+ out(node.url)
+ end
+
+ def list(_node)
+ out(:children)
+ cr
+ end
+
+ def list_item(_node)
+ out(:children)
+ cr
+ end
+
+ def code_block(node)
+ out(' ```', "\n", node.string_content, '``` ', "\n")
+ end
+
+ def blockquote(_node)
+ out(:children)
+ cr
+ end
+end
diff --git a/app/services/messages/markdown_renderers/plain_text_renderer.rb b/app/services/messages/markdown_renderers/plain_text_renderer.rb
new file mode 100644
index 0000000..403d3a2
--- /dev/null
+++ b/app/services/messages/markdown_renderers/plain_text_renderer.rb
@@ -0,0 +1,62 @@
+class Messages::MarkdownRenderers::PlainTextRenderer < Messages::MarkdownRenderers::BaseMarkdownRenderer
+ def initialize
+ super
+ @list_item_number = 0
+ end
+
+ def link(node)
+ out(:children)
+ out(' ', node.url) if node.url.present?
+ end
+
+ def strong(_node)
+ out(:children)
+ end
+
+ def emph(_node)
+ out(:children)
+ end
+
+ def code(node)
+ out(node.string_content)
+ end
+
+ def list(node)
+ @list_type = node.list_type
+ @list_item_number = @list_type == :ordered_list ? node.list_start : 0
+ out(:children)
+ cr
+ end
+
+ def list_item(_node)
+ if @list_type == :ordered_list
+ out("#{@list_item_number}. ", :children)
+ @list_item_number += 1
+ else
+ out('- ', :children)
+ end
+ cr
+ end
+
+ def blockquote(_node)
+ out(:children)
+ cr
+ end
+
+ def code_block(node)
+ out(node.string_content, "\n")
+ end
+
+ def header(_node)
+ out(:children)
+ cr
+ end
+
+ def thematic_break(_node)
+ out("\n")
+ end
+
+ def softbreak(_node)
+ out("\n")
+ end
+end
diff --git a/app/services/messages/markdown_renderers/telegram_renderer.rb b/app/services/messages/markdown_renderers/telegram_renderer.rb
new file mode 100644
index 0000000..5252b57
--- /dev/null
+++ b/app/services/messages/markdown_renderers/telegram_renderer.rb
@@ -0,0 +1,60 @@
+class Messages::MarkdownRenderers::TelegramRenderer < Messages::MarkdownRenderers::BaseMarkdownRenderer
+ def initialize
+ super
+ @list_item_number = 0
+ end
+
+ def strong(_node)
+ out('', :children, '')
+ end
+
+ def emph(_node)
+ out('', :children, '')
+ end
+
+ def code(node)
+ out('', node.string_content, '')
+ end
+
+ def link(node)
+ out('', :children, '')
+ end
+
+ def strikethrough(_node)
+ out('', :children, '')
+ end
+
+ def blockquote(_node)
+ out('', :children, '
')
+ end
+
+ def code_block(node)
+ out('', node.string_content, '
')
+ end
+
+ def list(node)
+ @list_type = node.list_type
+ @list_item_number = @list_type == :ordered_list ? node.list_start : 0
+ out(:children)
+ cr
+ end
+
+ def list_item(_node)
+ if @list_type == :ordered_list
+ out("#{@list_item_number}. ", :children)
+ @list_item_number += 1
+ else
+ out('• ', :children)
+ end
+ cr
+ end
+
+ def header(_node)
+ out('', :children, '')
+ cr
+ end
+
+ def softbreak(_node)
+ out("\n")
+ end
+end
diff --git a/app/services/messages/markdown_renderers/whats_app_renderer.rb b/app/services/messages/markdown_renderers/whats_app_renderer.rb
new file mode 100644
index 0000000..8f98218
--- /dev/null
+++ b/app/services/messages/markdown_renderers/whats_app_renderer.rb
@@ -0,0 +1,40 @@
+class Messages::MarkdownRenderers::WhatsAppRenderer < Messages::MarkdownRenderers::BaseMarkdownRenderer
+ def strong(_node)
+ out('*', :children, '*')
+ end
+
+ def emph(_node)
+ out('_', :children, '_')
+ end
+
+ def code(node)
+ out('`', node.string_content, '`')
+ end
+
+ def link(node)
+ out(node.url)
+ end
+
+ def list(_node)
+ out(:children)
+ cr
+ end
+
+ def list_item(_node)
+ out('- ', :children)
+ cr
+ end
+
+ def blockquote(_node)
+ out('> ', :children)
+ cr
+ end
+
+ def code_block(node)
+ out(node.string_content)
+ end
+
+ def softbreak(_node)
+ out("\n")
+ end
+end
diff --git a/app/services/messages/mention_service.rb b/app/services/messages/mention_service.rb
new file mode 100644
index 0000000..43bc17f
--- /dev/null
+++ b/app/services/messages/mention_service.rb
@@ -0,0 +1,68 @@
+class Messages::MentionService
+ pattr_initialize [:message!]
+
+ def perform
+ return unless valid_mention_message?(message)
+
+ validated_mentioned_ids = filter_mentioned_ids_by_inbox
+ return if validated_mentioned_ids.blank?
+
+ Conversations::UserMentionJob.perform_later(validated_mentioned_ids, message.conversation.id, message.account.id)
+ generate_notifications_for_mentions(validated_mentioned_ids)
+ add_mentioned_users_as_participants(validated_mentioned_ids)
+ end
+
+ private
+
+ def valid_mention_message?(message)
+ message.private? && message.content.present? && mentioned_ids.present?
+ end
+
+ def mentioned_ids
+ user_mentions = message.content.scan(%r{\(mention://user/(\d+)/(.+?)\)}).map(&:first)
+ team_mentions = message.content.scan(%r{\(mention://team/(\d+)/(.+?)\)}).map(&:first)
+
+ expanded_user_ids = expand_team_mentions_to_users(team_mentions)
+
+ (user_mentions + expanded_user_ids).uniq
+ end
+
+ def expand_team_mentions_to_users(team_ids)
+ return [] if team_ids.blank?
+
+ message.inbox.account.teams
+ .joins(:team_members)
+ .where(id: team_ids)
+ .pluck('team_members.user_id')
+ .map(&:to_s)
+ end
+
+ def valid_mentionable_user_ids
+ @valid_mentionable_user_ids ||= begin
+ inbox = message.inbox
+ inbox.account.administrators.pluck(:id) + inbox.members.pluck(:id)
+ end
+ end
+
+ def filter_mentioned_ids_by_inbox
+ mentioned_ids & valid_mentionable_user_ids.map(&:to_s)
+ end
+
+ def generate_notifications_for_mentions(validated_mentioned_ids)
+ validated_mentioned_ids.each do |user_id|
+ NotificationBuilder.new(
+ notification_type: 'conversation_mention',
+ user: User.find(user_id),
+ account: message.account,
+ primary_actor: message.conversation,
+ secondary_actor: message
+ ).perform
+ end
+ end
+
+ def add_mentioned_users_as_participants(validated_mentioned_ids)
+ validated_mentioned_ids.each do |user_id|
+ message.conversation.conversation_participants.find_or_create_by(user_id: user_id)
+ end
+ end
+end
diff --git a/app/services/messages/new_message_notification_service.rb b/app/services/messages/new_message_notification_service.rb
new file mode 100644
index 0000000..49f36a0
--- /dev/null
+++ b/app/services/messages/new_message_notification_service.rb
@@ -0,0 +1,51 @@
+class Messages::NewMessageNotificationService
+ pattr_initialize [:message!]
+
+ def perform
+ return unless message.notifiable?
+
+ notify_conversation_assignee
+ notify_participating_users
+ end
+
+ private
+
+ delegate :conversation, :sender, :account, to: :message
+
+ def notify_conversation_assignee
+ return if conversation.assignee.blank?
+ return if already_notified?(conversation.assignee)
+ return if conversation.assignee == sender
+
+ NotificationBuilder.new(
+ notification_type: 'assigned_conversation_new_message',
+ user: conversation.assignee,
+ account: account,
+ primary_actor: message.conversation,
+ secondary_actor: message
+ ).perform
+ end
+
+ def notify_participating_users
+ participating_users = conversation.conversation_participants.map(&:user)
+ participating_users -= [sender] if sender.is_a?(User)
+
+ participating_users.uniq.each do |participant|
+ next if already_notified?(participant)
+
+ NotificationBuilder.new(
+ notification_type: 'participating_conversation_new_message',
+ user: participant,
+ account: account,
+ primary_actor: message.conversation,
+ secondary_actor: message
+ ).perform
+ end
+ end
+
+ # The user could already have been notified via a mention or via assignment
+ # So we don't need to notify them again
+ def already_notified?(user)
+ conversation.notifications.exists?(user: user, secondary_actor: message)
+ end
+end
diff --git a/app/services/messages/send_email_notification_service.rb b/app/services/messages/send_email_notification_service.rb
new file mode 100644
index 0000000..25a77b0
--- /dev/null
+++ b/app/services/messages/send_email_notification_service.rb
@@ -0,0 +1,38 @@
+class Messages::SendEmailNotificationService
+ pattr_initialize [:message!]
+
+ def perform
+ return unless should_send_email_notification?
+
+ conversation = message.conversation
+ conversation_mail_key = format(::Redis::Alfred::CONVERSATION_MAILER_KEY, conversation_id: conversation.id)
+
+ # Atomically set redis key to prevent duplicate email workers. Keep the key alive longer than
+ # the worker delay (1 hour) so slow queues don't enqueue duplicate jobs, but let it expire if
+ # the worker never manages to clean up.
+ return unless Redis::Alfred.set(conversation_mail_key, message.id, nx: true, ex: 1.hour.to_i)
+
+ ConversationReplyEmailJob.set(wait: 2.minutes).perform_later(conversation.id, message.id)
+ end
+
+ private
+
+ def should_send_email_notification?
+ return false unless message.email_notifiable_message?
+ return false if message.conversation.contact.email.blank?
+
+ email_reply_enabled?
+ end
+
+ def email_reply_enabled?
+ inbox = message.inbox
+ case inbox.channel.class.to_s
+ when 'Channel::WebWidget'
+ inbox.channel.continuity_via_email
+ when 'Channel::Api'
+ inbox.account.feature_enabled?('email_continuity_on_api_channel')
+ else
+ false
+ end
+ end
+end
diff --git a/app/services/messages/status_update_service.rb b/app/services/messages/status_update_service.rb
new file mode 100644
index 0000000..4868a20
--- /dev/null
+++ b/app/services/messages/status_update_service.rb
@@ -0,0 +1,34 @@
+class Messages::StatusUpdateService
+ attr_reader :message, :status, :external_error
+
+ def initialize(message, status, external_error = nil)
+ @message = message
+ @status = status
+ @external_error = external_error
+ end
+
+ def perform
+ return false unless valid_status_transition?
+
+ update_message_status
+ end
+
+ private
+
+ def update_message_status
+ # Update status and set external_error only when failed
+ message.update!(
+ status: status,
+ external_error: (status == 'failed' ? external_error : nil)
+ )
+ end
+
+ def valid_status_transition?
+ return false unless Message.statuses.key?(status)
+
+ # Don't allow changing from 'read' to 'delivered'
+ return false if message.read? && status == 'delivered'
+
+ true
+ end
+end
diff --git a/app/services/mfa/authentication_service.rb b/app/services/mfa/authentication_service.rb
new file mode 100644
index 0000000..caad66c
--- /dev/null
+++ b/app/services/mfa/authentication_service.rb
@@ -0,0 +1,23 @@
+class Mfa::AuthenticationService
+ pattr_initialize [:user!, :otp_code, :backup_code]
+
+ def authenticate
+ return false unless user
+
+ return authenticate_with_otp if otp_code.present?
+ return authenticate_with_backup_code if backup_code.present?
+
+ false
+ end
+
+ private
+
+ def authenticate_with_otp
+ user.validate_and_consume_otp!(otp_code)
+ end
+
+ def authenticate_with_backup_code
+ mfa_service = Mfa::ManagementService.new(user: user)
+ mfa_service.validate_backup_code!(backup_code)
+ end
+end
diff --git a/app/services/mfa/management_service.rb b/app/services/mfa/management_service.rb
new file mode 100644
index 0000000..d4c01ec
--- /dev/null
+++ b/app/services/mfa/management_service.rb
@@ -0,0 +1,88 @@
+class Mfa::ManagementService
+ pattr_initialize [:user!]
+
+ def enable_two_factor!
+ user.otp_secret = User.generate_otp_secret
+ user.save!
+ end
+
+ def disable_two_factor!
+ user.otp_secret = nil
+ user.otp_required_for_login = false
+ user.otp_backup_codes = nil
+ user.save!
+ end
+
+ def verify_and_activate!
+ ActiveRecord::Base.transaction do
+ user.update!(otp_required_for_login: true)
+ backup_codes_generated? ? nil : generate_backup_codes!
+ end
+ end
+
+ def two_factor_provisioning_uri
+ return nil if user.otp_secret.blank?
+
+ issuer = 'Chatwoot'
+ label = user.email
+ user.otp_provisioning_uri(label, issuer: issuer)
+ end
+
+ def generate_backup_codes!
+ codes = Array.new(10) { SecureRandom.hex(4).upcase }
+ user.otp_backup_codes = codes
+ user.save!
+ codes
+ end
+
+ def validate_backup_code!(code)
+ return false unless valid_backup_code_input?(code)
+
+ codes = user.otp_backup_codes
+ found_index = find_matching_code_index(codes, code)
+
+ return false if found_index.nil?
+
+ mark_code_as_used(codes, found_index)
+ end
+
+ private
+
+ def valid_backup_code_input?(code)
+ user.otp_backup_codes.present? && code.present?
+ end
+
+ def find_matching_code_index(codes, code)
+ found_index = nil
+
+ # Constant-time comparison to prevent timing attacks
+ codes.each_with_index do |stored_code, idx|
+ is_match = ActiveSupport::SecurityUtils.secure_compare(stored_code, code)
+ is_unused = stored_code != 'XXXXXXXX'
+ found_index = idx if is_match && is_unused
+ end
+
+ found_index
+ end
+
+ def mark_code_as_used(codes, index)
+ codes[index] = 'XXXXXXXX'
+ user.otp_backup_codes = codes
+ user.save!
+ true
+ end
+
+ public
+
+ def backup_codes_generated?
+ user.otp_backup_codes.present?
+ end
+
+ def mfa_enabled?
+ user.otp_required_for_login?
+ end
+
+ def two_factor_setup_pending?
+ user.otp_secret.present? && !user.otp_required_for_login?
+ end
+end
diff --git a/app/services/mfa/token_service.rb b/app/services/mfa/token_service.rb
new file mode 100644
index 0000000..a7994b6
--- /dev/null
+++ b/app/services/mfa/token_service.rb
@@ -0,0 +1,28 @@
+class Mfa::TokenService < BaseTokenService
+ pattr_initialize [:user, :token]
+
+ MFA_TOKEN_EXPIRY = 5.minutes
+
+ def generate_token
+ @payload = build_payload
+ super
+ end
+
+ def verify_token
+ decoded = decode_token
+ return nil if decoded.blank?
+
+ User.find(decoded[:user_id])
+ rescue ActiveRecord::RecordNotFound
+ nil
+ end
+
+ private
+
+ def build_payload
+ {
+ user_id: user.id,
+ exp: MFA_TOKEN_EXPIRY.from_now.to_i
+ }
+ end
+end
diff --git a/app/services/microsoft/refresh_oauth_token_service.rb b/app/services/microsoft/refresh_oauth_token_service.rb
new file mode 100644
index 0000000..f3b0be9
--- /dev/null
+++ b/app/services/microsoft/refresh_oauth_token_service.rb
@@ -0,0 +1,9 @@
+# Refer: https://learn.microsoft.com/en-us/entra/identity-platform/configurable-token-lifetimes
+class Microsoft::RefreshOauthTokenService < BaseRefreshOauthTokenService
+ private
+
+ # Builds the OAuth strategy for Microsoft Graph
+ def build_oauth_strategy
+ ::MicrosoftGraphAuth.new(nil, GlobalConfigService.load('AZURE_APP_ID', ''), GlobalConfigService.load('AZURE_APP_SECRET', ''))
+ end
+end
diff --git a/app/services/notification/email_notification_service.rb b/app/services/notification/email_notification_service.rb
new file mode 100644
index 0000000..fbec8b8
--- /dev/null
+++ b/app/services/notification/email_notification_service.rb
@@ -0,0 +1,25 @@
+class Notification::EmailNotificationService
+ pattr_initialize [:notification!]
+
+ def perform
+ # don't send emails if user read the push notification already
+ return if notification.read_at.present?
+ # don't send emails if user is not confirmed
+ return if notification.user.confirmed_at.nil?
+ return unless user_subscribed_to_notification?
+
+ # TODO : Clean up whatever happening over here
+ # Segregate the mailers properly
+ AgentNotifications::ConversationNotificationsMailer.with(account: notification.account).public_send(notification
+ .notification_type.to_s, notification.primary_actor, notification.user, notification.secondary_actor).deliver_later
+ end
+
+ private
+
+ def user_subscribed_to_notification?
+ notification_setting = notification.user.notification_settings.find_by(account_id: notification.account.id)
+ return true if notification_setting.public_send("email_#{notification.notification_type}?")
+
+ false
+ end
+end
diff --git a/app/services/notification/fcm_service.rb b/app/services/notification/fcm_service.rb
new file mode 100644
index 0000000..fc0ed6b
--- /dev/null
+++ b/app/services/notification/fcm_service.rb
@@ -0,0 +1,40 @@
+class Notification::FcmService
+ SCOPES = ['https://www.googleapis.com/auth/firebase.messaging'].freeze
+
+ def initialize(project_id, credentials)
+ @project_id = project_id
+ @credentials = credentials
+ @token_info = nil
+ end
+
+ def fcm_client
+ FCM.new(current_token, credentials_path, @project_id)
+ end
+
+ private
+
+ def current_token
+ @token_info = generate_token if @token_info.nil? || token_expired?
+ @token_info[:token]
+ end
+
+ def token_expired?
+ Time.zone.now >= @token_info[:expires_at]
+ end
+
+ def generate_token
+ authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
+ json_key_io: credentials_path,
+ scope: SCOPES
+ )
+ token = authorizer.fetch_access_token!
+ {
+ token: token['access_token'],
+ expires_at: Time.zone.now + token['expires_in'].to_i
+ }
+ end
+
+ def credentials_path
+ StringIO.new(@credentials)
+ end
+end
diff --git a/app/services/notification/push_notification_service.rb b/app/services/notification/push_notification_service.rb
new file mode 100644
index 0000000..125ad91
--- /dev/null
+++ b/app/services/notification/push_notification_service.rb
@@ -0,0 +1,172 @@
+class Notification::PushNotificationService
+ include Rails.application.routes.url_helpers
+
+ pattr_initialize [:notification!]
+
+ def perform
+ return unless user_subscribed_to_notification?
+
+ notification_subscriptions.each do |subscription|
+ send_browser_push(subscription)
+ send_fcm_push(subscription)
+ send_push_via_chatwoot_hub(subscription)
+ end
+ end
+
+ private
+
+ delegate :user, to: :notification
+ delegate :notification_subscriptions, to: :user
+ delegate :notification_settings, to: :user
+
+ def user_subscribed_to_notification?
+ notification_setting = notification_settings.find_by(account_id: notification.account.id)
+ return true if notification_setting.public_send("push_#{notification.notification_type}?")
+
+ false
+ end
+
+ def conversation
+ @conversation ||= notification.conversation
+ end
+
+ def push_message
+ {
+ title: notification.push_message_title,
+ tag: "#{notification.notification_type}_#{conversation.display_id}_#{notification.id}",
+ url: push_url
+ }
+ end
+
+ def push_url
+ app_account_conversation_url(account_id: conversation.account_id, id: conversation.display_id)
+ end
+
+ def can_send_browser_push?(subscription)
+ VapidService.public_key && subscription.browser_push?
+ end
+
+ def browser_push_payload(subscription)
+ {
+ message: JSON.generate(push_message),
+ endpoint: subscription.subscription_attributes['endpoint'],
+ p256dh: subscription.subscription_attributes['p256dh'],
+ auth: subscription.subscription_attributes['auth'],
+ vapid: {
+ subject: push_url,
+ public_key: VapidService.public_key,
+ private_key: VapidService.private_key
+ },
+ ssl_timeout: 5,
+ open_timeout: 5,
+ read_timeout: 5
+ }
+ end
+
+ def send_browser_push(subscription)
+ return unless can_send_browser_push?(subscription)
+
+ WebPush.payload_send(**browser_push_payload(subscription))
+ Rails.logger.info("Browser push sent to #{user.email} with title #{push_message[:title]}")
+ rescue StandardError => e
+ handle_browser_push_error(e, subscription)
+ end
+
+ def handle_browser_push_error(error, subscription)
+ case error
+ when WebPush::ExpiredSubscription, WebPush::InvalidSubscription, WebPush::Unauthorized
+ Rails.logger.info "WebPush subscription expired: #{error.message}"
+ subscription.destroy!
+ when WebPush::TooManyRequests
+ Rails.logger.warn "WebPush rate limited for #{user.email} on account #{notification.account.id}: #{error.message}"
+ when Errno::ECONNRESET, Net::OpenTimeout, Net::ReadTimeout
+ Rails.logger.error "WebPush operation error: #{error.message}"
+ else
+ ChatwootExceptionTracker.new(error, account: notification.account).capture_exception
+ true
+ end
+ end
+
+ def send_fcm_push(subscription)
+ return unless firebase_credentials_present?
+ return unless subscription.fcm?
+
+ fcm_service = Notification::FcmService.new(
+ GlobalConfigService.load('FIREBASE_PROJECT_ID', nil), GlobalConfigService.load('FIREBASE_CREDENTIALS', nil)
+ )
+ fcm = fcm_service.fcm_client
+ response = fcm.send_v1(fcm_options(subscription))
+ remove_subscription_if_error(subscription, response)
+ end
+
+ def send_push_via_chatwoot_hub(subscription)
+ return if firebase_credentials_present?
+ return unless chatwoot_hub_enabled?
+ return unless subscription.fcm?
+
+ ChatwootHub.send_push(fcm_options(subscription))
+ end
+
+ def firebase_credentials_present?
+ GlobalConfigService.load('FIREBASE_PROJECT_ID', nil) && GlobalConfigService.load('FIREBASE_CREDENTIALS', nil)
+ end
+
+ def chatwoot_hub_enabled?
+ ActiveModel::Type::Boolean.new.cast(ENV.fetch('ENABLE_PUSH_RELAY_SERVER', true))
+ end
+
+ def remove_subscription_if_error(subscription, response)
+ if JSON.parse(response[:body])['results']&.first&.keys&.include?('error')
+ subscription.destroy!
+ else
+ Rails.logger.info("FCM push sent to #{user.email} with title #{push_message[:title]}")
+ end
+ end
+
+ def fcm_options(subscription)
+ {
+ 'token': subscription.subscription_attributes['push_token'],
+ 'data': fcm_data,
+ 'notification': fcm_notification,
+ 'android': fcm_android_options,
+ 'apns': fcm_apns_options,
+ 'fcm_options': {
+ analytics_label: 'Label'
+ }
+ }
+ end
+
+ def fcm_data
+ {
+ payload: {
+ data: {
+ notification: notification.fcm_push_data
+ }
+ }.to_json
+ }
+ end
+
+ def fcm_notification
+ {
+ title: notification.push_message_title,
+ body: notification.push_message_body
+ }
+ end
+
+ def fcm_android_options
+ {
+ priority: 'high'
+ }
+ end
+
+ def fcm_apns_options
+ {
+ payload: {
+ aps: {
+ sound: 'default',
+ category: Time.zone.now.to_i.to_s
+ }
+ }
+ }
+ end
+end
diff --git a/app/services/search_service.rb b/app/services/search_service.rb
new file mode 100644
index 0000000..d6a0453
--- /dev/null
+++ b/app/services/search_service.rb
@@ -0,0 +1,208 @@
+class SearchService
+ pattr_initialize [:current_user!, :current_account!, :params!, :search_type!]
+
+ def account_user
+ @account_user ||= current_account.account_users.find_by(user: current_user)
+ end
+
+ def perform
+ case search_type
+ when 'Message'
+ { messages: filter_messages }
+ when 'Conversation'
+ { conversations: filter_conversations }
+ when 'Contact'
+ { contacts: filter_contacts }
+ when 'Article'
+ { articles: filter_articles }
+ else
+ { contacts: filter_contacts, messages: filter_messages, conversations: filter_conversations, articles: filter_articles }
+ end
+ end
+
+ private
+
+ def accessable_inbox_ids
+ @accessable_inbox_ids ||= @current_user.assigned_inboxes.pluck(:id)
+ end
+
+ def search_query
+ @search_query ||= params[:q].to_s.strip
+ end
+
+ def filter_conversations
+ conversations_query = current_account.conversations.where(inbox_id: accessable_inbox_ids)
+ .joins('INNER JOIN contacts ON conversations.contact_id = contacts.id')
+ .where("cast(conversations.display_id as text) ILIKE :search OR contacts.name ILIKE :search OR contacts.email
+ ILIKE :search OR contacts.phone_number ILIKE :search OR contacts.identifier ILIKE :search", search: "%#{search_query}%")
+
+ if current_account.feature_enabled?('advanced_search')
+ conversations_query = apply_time_filter(conversations_query,
+ 'conversations.last_activity_at')
+ end
+
+ @conversations = conversations_query.order('conversations.created_at DESC')
+ .page(params[:page])
+ .per(15)
+ end
+
+ def filter_messages
+ @messages = if use_gin_search
+ filter_messages_with_gin
+ elsif should_run_advanced_search?
+ advanced_search_with_fallback
+ else
+ filter_messages_with_like
+ end
+ end
+
+ def advanced_search_with_fallback
+ advanced_search
+ rescue Faraday::ConnectionFailed, Searchkick::Error, Elasticsearch::Transport::Transport::Error => e
+ Rails.logger.warn("Elasticsearch unavailable, falling back to SQL search: #{e.message}")
+ use_gin_search ? filter_messages_with_gin : filter_messages_with_like
+ end
+
+ def should_run_advanced_search?
+ ChatwootApp.advanced_search_allowed? && current_account.feature_enabled?('advanced_search')
+ end
+
+ def advanced_search; end
+
+ def filter_messages_with_gin
+ base_query = message_base_query
+ base_query = apply_message_filters(base_query)
+
+ if search_query.present?
+ # Use the @@ operator with to_tsquery for better GIN index utilization
+ # Convert search query to tsquery format with prefix matching
+
+ # Use this if we wanna match splitting the words
+ # split_query = search_query.split.map { |term| "#{term} | #{term}:*" }.join(' & ')
+
+ # This will do entire sentence matching using phrase distance operator
+ tsquery = search_query.split.join(' <-> ')
+
+ # Apply the text search using the GIN index
+ base_query.where('content @@ to_tsquery(?)', tsquery)
+ .reorder('created_at DESC')
+ .page(params[:page])
+ .per(15)
+ else
+ base_query.reorder('created_at DESC')
+ .page(params[:page])
+ .per(15)
+ end
+ end
+
+ def filter_messages_with_like
+ base_query = message_base_query
+ base_query = apply_message_filters(base_query)
+ base_query.where('messages.content ILIKE :search', search: "%#{search_query}%")
+ .reorder('created_at DESC')
+ .page(params[:page])
+ .per(15)
+ end
+
+ def message_base_query
+ query = current_account.messages.where('created_at >= ?', 3.months.ago)
+ query = query.where(inbox_id: accessable_inbox_ids) unless should_skip_inbox_filtering?
+ query
+ end
+
+ def apply_message_filters(query)
+ return query unless current_account.feature_enabled?('advanced_search')
+
+ query = apply_time_filter(query, 'messages.created_at')
+ query = apply_sender_filter(query)
+ apply_inbox_id_filter(query)
+ end
+
+ def apply_sender_filter(query)
+ sender_type, sender_id = parse_from_param(params[:from])
+ return query unless sender_type && sender_id
+
+ query.where(sender_type: sender_type, sender_id: sender_id)
+ end
+
+ def parse_from_param(from_param)
+ return [nil, nil] unless from_param&.match?(/\A(contact|agent):\d+\z/)
+
+ type, id = from_param.split(':')
+ sender_type = type == 'agent' ? 'User' : 'Contact'
+ [sender_type, id.to_i]
+ end
+
+ def apply_inbox_id_filter(query)
+ return query if params[:inbox_id].blank?
+
+ inbox_id = params[:inbox_id].to_i
+ return query if inbox_id.zero?
+ return query unless validate_inbox_access(inbox_id)
+
+ query.where(inbox_id: inbox_id)
+ end
+
+ def validate_inbox_access(inbox_id)
+ return true if should_skip_inbox_filtering?
+
+ accessable_inbox_ids.include?(inbox_id)
+ end
+
+ def should_skip_inbox_filtering?
+ account_user.administrator? || user_has_access_to_all_inboxes?
+ end
+
+ def user_has_access_to_all_inboxes?
+ accessable_inbox_ids.sort == current_account.inboxes.pluck(:id).sort
+ end
+
+ def use_gin_search
+ current_account.feature_enabled?('search_with_gin')
+ end
+
+ def filter_contacts
+ contacts_query = current_account.contacts.where(
+ "name ILIKE :search OR email ILIKE :search OR phone_number
+ ILIKE :search OR identifier ILIKE :search", search: "%#{search_query}%"
+ )
+
+ contacts_query = apply_time_filter(contacts_query, 'last_activity_at') if current_account.feature_enabled?('advanced_search')
+
+ @contacts = contacts_query.resolved_contacts(
+ use_crm_v2: current_account.feature_enabled?('crm_v2')
+ ).order_on_last_activity_at('desc').page(params[:page]).per(15)
+ end
+
+ def filter_articles
+ articles_query = current_account.articles.text_search(search_query)
+ articles_query = apply_time_filter(articles_query, 'updated_at') if current_account.feature_enabled?('advanced_search')
+
+ @articles = articles_query.page(params[:page]).per(15)
+ end
+
+ def apply_time_filter(query, column_name)
+ return query if params[:since].blank? && params[:until].blank?
+
+ query = query.where("#{column_name} >= ?", cap_since_time(params[:since])) if params[:since].present?
+ query = query.where("#{column_name} <= ?", cap_until_time(params[:until])) if params[:until].present?
+ query
+ end
+
+ def cap_since_time(since_param)
+ max_lookback = 90.days.ago
+ requested_time = Time.zone.at(since_param.to_i)
+
+ # Silently cap to max_lookback if requested time is too far back
+ [requested_time, max_lookback].max
+ end
+
+ def cap_until_time(until_param)
+ max_future = 90.days.from_now
+ requested_time = Time.zone.at(until_param.to_i)
+
+ [requested_time, max_future].min
+ end
+end
+
+SearchService.prepend_mod_with('SearchService')
diff --git a/app/services/sms/delivery_status_service.rb b/app/services/sms/delivery_status_service.rb
new file mode 100644
index 0000000..dd071e2
--- /dev/null
+++ b/app/services/sms/delivery_status_service.rb
@@ -0,0 +1,52 @@
+class Sms::DeliveryStatusService
+ pattr_initialize [:inbox!, :params!]
+
+ def perform
+ return unless supported_status?
+
+ process_status if message.present?
+ end
+
+ private
+
+ def process_status
+ @message.status = status
+ @message.external_error = external_error if error_occurred?
+ @message.save!
+ end
+
+ def supported_status?
+ %w[message-delivered message-failed].include?(params[:type])
+ end
+
+ # Relevant documentation:
+ # https://dev.bandwidth.com/docs/mfa/webhooks/international/message-delivered
+ # https://dev.bandwidth.com/docs/mfa/webhooks/international/message-failed
+ def status
+ type_mapping = {
+ 'message-delivered' => 'delivered',
+ 'message-failed' => 'failed'
+ }
+
+ type_mapping[params[:type]]
+ end
+
+ def external_error
+ return nil unless error_occurred?
+
+ error_message = params[:description]
+ error_code = params[:errorCode]
+
+ "#{error_code} - #{error_message}"
+ end
+
+ def error_occurred?
+ params[:errorCode] && params[:type] == 'message-failed'
+ end
+
+ def message
+ return unless params[:message][:id]
+
+ @message ||= inbox.messages.find_by(source_id: params[:message][:id])
+ end
+end
diff --git a/app/services/sms/incoming_message_service.rb b/app/services/sms/incoming_message_service.rb
new file mode 100644
index 0000000..1a39d79
--- /dev/null
+++ b/app/services/sms/incoming_message_service.rb
@@ -0,0 +1,102 @@
+class Sms::IncomingMessageService
+ include ::FileTypeHelper
+
+ pattr_initialize [:inbox!, :params!]
+
+ def perform
+ set_contact
+ set_conversation
+ @message = @conversation.messages.create!(
+ content: params[:text],
+ account_id: @inbox.account_id,
+ inbox_id: @inbox.id,
+ message_type: :incoming,
+ sender: @contact,
+ source_id: params[:id]
+ )
+ attach_files
+ @message.save!
+ end
+
+ private
+
+ def account
+ @account ||= @inbox.account
+ end
+
+ def channel
+ @channel ||= @inbox.channel
+ end
+
+ def phone_number
+ params[:from]
+ end
+
+ def formatted_phone_number
+ TelephoneNumber.parse(phone_number).international_number
+ end
+
+ def set_contact
+ contact_inbox = ::ContactInboxWithContactBuilder.new(
+ source_id: params[:from],
+ inbox: @inbox,
+ contact_attributes: contact_attributes
+ ).perform
+
+ @contact_inbox = contact_inbox
+ @contact = contact_inbox.contact
+ end
+
+ def conversation_params
+ {
+ account_id: @inbox.account_id,
+ inbox_id: @inbox.id,
+ contact_id: @contact.id,
+ contact_inbox_id: @contact_inbox.id
+ }
+ end
+
+ def set_conversation
+ # if lock to single conversation is disabled, we will create a new conversation if previous conversation is resolved
+ @conversation = if @inbox.lock_to_single_conversation
+ @contact_inbox.conversations.last
+ else
+ @contact_inbox.conversations.where
+ .not(status: :resolved).last
+ end
+ return if @conversation
+
+ @conversation = ::Conversation.create!(conversation_params)
+ end
+
+ def contact_attributes
+ {
+ name: formatted_phone_number,
+ phone_number: phone_number
+ }
+ end
+
+ def attach_files
+ return if params[:media].blank?
+
+ params[:media].each do |media_url|
+ # we don't need to process this files since chatwoot doesn't support it
+ next if media_url.end_with?('.smil', '.xml')
+
+ attachment_file = Down.download(
+ media_url,
+ http_basic_authentication: [channel.provider_config['api_key'], channel.provider_config['api_secret']]
+ )
+
+ @message.attachments.new(
+ account_id: @message.account_id,
+ file_type: file_type(attachment_file.content_type),
+ file: {
+ io: attachment_file,
+ filename: attachment_file.original_filename,
+ content_type: attachment_file.content_type
+ }
+ )
+ end
+ end
+end
diff --git a/app/services/sms/oneoff_sms_campaign_service.rb b/app/services/sms/oneoff_sms_campaign_service.rb
new file mode 100644
index 0000000..b27ef9a
--- /dev/null
+++ b/app/services/sms/oneoff_sms_campaign_service.rb
@@ -0,0 +1,35 @@
+class Sms::OneoffSmsCampaignService
+ pattr_initialize [:campaign!]
+
+ def perform
+ raise "Invalid campaign #{campaign.id}" if campaign.inbox.inbox_type != 'Sms' || !campaign.one_off?
+ raise 'Completed Campaign' if campaign.completed?
+
+ # marks campaign completed so that other jobs won't pick it up
+ campaign.completed!
+
+ audience_label_ids = campaign.audience.select { |audience| audience['type'] == 'Label' }.pluck('id')
+ audience_labels = campaign.account.labels.where(id: audience_label_ids).pluck(:title)
+ process_audience(audience_labels)
+ end
+
+ private
+
+ delegate :inbox, to: :campaign
+ delegate :channel, to: :inbox
+
+ def process_audience(audience_labels)
+ campaign.account.contacts.tagged_with(audience_labels, any: true).each do |contact|
+ next if contact.phone_number.blank?
+
+ content = Liquid::CampaignTemplateService.new(campaign: campaign, contact: contact).call(campaign.message)
+ send_message(to: contact.phone_number, content: content)
+ end
+ end
+
+ def send_message(to:, content:)
+ channel.send_text_message(to, content)
+ rescue StandardError => e
+ Rails.logger.error("[SMS Campaign #{campaign.id}] Failed to send to #{to}: #{e.message}")
+ end
+end
diff --git a/app/services/sms/send_on_sms_service.rb b/app/services/sms/send_on_sms_service.rb
new file mode 100644
index 0000000..ccfede2
--- /dev/null
+++ b/app/services/sms/send_on_sms_service.rb
@@ -0,0 +1,16 @@
+class Sms::SendOnSmsService < Base::SendOnChannelService
+ private
+
+ def channel_class
+ Channel::Sms
+ end
+
+ def perform_reply
+ send_on_sms
+ end
+
+ def send_on_sms
+ message_id = channel.send_message(message.conversation.contact_inbox.source_id, message)
+ message.update!(source_id: message_id) if message_id.present?
+ end
+end
diff --git a/app/services/telegram/incoming_message_service.rb b/app/services/telegram/incoming_message_service.rb
new file mode 100644
index 0000000..897db29
--- /dev/null
+++ b/app/services/telegram/incoming_message_service.rb
@@ -0,0 +1,226 @@
+# Find the various telegram payload samples here: https://core.telegram.org/bots/webhooks#testing-your-bot-with-updates
+# https://core.telegram.org/bots/api#available-types
+
+class Telegram::IncomingMessageService
+ include ::FileTypeHelper
+ include ::Telegram::ParamHelpers
+ pattr_initialize [:inbox!, :params!]
+
+ def perform
+ # chatwoot doesn't support group conversations at the moment
+ transform_business_message!
+ return unless private_message?
+
+ set_contact
+ update_contact_avatar
+ set_conversation
+ # TODO: Since the recent Telegram Business update, we need to explicitly mark messages as read using an additional request.
+ # Otherwise, the client will see their messages as unread.
+ # Chatwoot defines a 'read' status in its enum but does not currently update this status for Telegram conversations.
+ # We have two options:
+ # 1. Send the read request to Telegram here, immediately when the message is created.
+ # 2. Properly update the read status in the Chatwoot UI and trigger the Telegram request when the agent actually reads the message.
+ # See: https://core.telegram.org/bots/api#readbusinessmessage
+ @message = @conversation.messages.build(
+ content: telegram_params_message_content,
+ account_id: @inbox.account_id,
+ inbox_id: @inbox.id,
+ message_type: message_type,
+ sender: message_sender,
+ content_attributes: telegram_params_content_attributes,
+ source_id: telegram_params_message_id.to_s
+ )
+
+ process_message_attachments if message_params?
+ @message.save!
+ end
+
+ private
+
+ def set_contact
+ contact_inbox = ::ContactInboxWithContactBuilder.new(
+ source_id: telegram_params_from_id,
+ inbox: inbox,
+ contact_attributes: contact_attributes
+ ).perform
+
+ # TODO: Should we update contact_attributes when the user changes their first or last name?
+ # In business chats, when our Telegram bot initiates the conversation,
+ # the message does not include a language code.
+ # This is critical for AI assistants and translation plugins.
+
+ @contact_inbox = contact_inbox
+ @contact = contact_inbox.contact
+ end
+
+ def process_message_attachments
+ attach_location
+ attach_files
+ attach_contact
+ end
+
+ def update_contact_avatar
+ return if @contact.avatar.attached?
+
+ avatar_url = inbox.channel.get_telegram_profile_image(telegram_params_from_id)
+ ::Avatar::AvatarFromUrlJob.perform_later(@contact, avatar_url) if avatar_url
+ end
+
+ def conversation_params
+ {
+ account_id: @inbox.account_id,
+ inbox_id: @inbox.id,
+ contact_id: @contact.id,
+ contact_inbox_id: @contact_inbox.id,
+ additional_attributes: conversation_additional_attributes
+ }
+ end
+
+ def set_conversation
+ # if lock to single conversation is disabled, we will create a new conversation if previous conversation is resolved
+ @conversation = if @inbox.lock_to_single_conversation
+ @contact_inbox.conversations.last
+ else
+ @contact_inbox.conversations
+ .where.not(status: :resolved).last
+ end
+ return if @conversation
+
+ @conversation = ::Conversation.create!(conversation_params)
+ end
+
+ def contact_attributes
+ {
+ name: "#{telegram_params_first_name} #{telegram_params_last_name}",
+ additional_attributes: additional_attributes
+ }
+ end
+
+ def additional_attributes
+ {
+ # TODO: Remove this once we show the social_telegram_user_name in the UI instead of the username
+ username: telegram_params_username,
+ language_code: telegram_params_language_code,
+ social_telegram_user_id: telegram_params_from_id,
+ social_telegram_user_name: telegram_params_username
+ }
+ end
+
+ def conversation_additional_attributes
+ {
+ chat_id: telegram_params_chat_id,
+ business_connection_id: telegram_params_business_connection_id
+ }
+ end
+
+ def message_type
+ business_message_outgoing? ? :outgoing : :incoming
+ end
+
+ def message_sender
+ business_message_outgoing? ? nil : @contact
+ end
+
+ def file_content_type
+ return :image if image_message?
+ return :audio if audio_message?
+ return :video if video_message?
+
+ file_type(params[:message][:document][:mime_type])
+ end
+
+ def image_message?
+ params[:message][:photo].present? || params.dig(:message, :sticker, :thumb).present?
+ end
+
+ def audio_message?
+ params[:message][:voice].present? || params[:message][:audio].present?
+ end
+
+ def video_message?
+ params[:message][:video].present? || params[:message][:video_note].present?
+ end
+
+ def attach_files
+ return unless file
+
+ file_download_path = inbox.channel.get_telegram_file_path(file[:file_id])
+ if file_download_path.blank?
+ Rails.logger.info "Telegram file download path is blank for #{file[:file_id]} : inbox_id: #{inbox.id}"
+ return
+ end
+
+ attachment_file = Down.download(
+ inbox.channel.get_telegram_file_path(file[:file_id])
+ )
+
+ @message.attachments.new(
+ account_id: @message.account_id,
+ file_type: file_content_type,
+ file: {
+ io: attachment_file,
+ filename: attachment_file.original_filename,
+ content_type: attachment_file.content_type
+ }
+ )
+ end
+
+ def attach_location
+ return unless location
+
+ @message.attachments.new(
+ account_id: @message.account_id,
+ file_type: :location,
+ fallback_title: location_fallback_title,
+ coordinates_lat: location['latitude'],
+ coordinates_long: location['longitude']
+ )
+ end
+
+ def attach_contact
+ return unless contact_card
+
+ @message.attachments.new(
+ account_id: @message.account_id,
+ file_type: :contact,
+ fallback_title: contact_card['phone_number'].to_s,
+ meta: {
+ first_name: contact_card['first_name'],
+ last_name: contact_card['last_name']
+ }
+ )
+ end
+
+ def file
+ @file ||= visual_media_params || params[:message][:voice].presence || params[:message][:audio].presence || params[:message][:document].presence
+ end
+
+ def location_fallback_title
+ return '' if venue.blank?
+
+ venue[:title] || ''
+ end
+
+ def venue
+ @venue ||= params.dig(:message, :venue).presence
+ end
+
+ def location
+ @location ||= params.dig(:message, :location).presence
+ end
+
+ def contact_card
+ @contact_card ||= params.dig(:message, :contact).presence
+ end
+
+ def visual_media_params
+ params[:message][:photo].presence&.last ||
+ params.dig(:message, :sticker, :thumb).presence ||
+ params[:message][:video].presence ||
+ params[:message][:video_note].presence
+ end
+
+ def transform_business_message!
+ params[:message] = params[:business_message] if params[:business_message] && !params[:message]
+ end
+end
diff --git a/app/services/telegram/param_helpers.rb b/app/services/telegram/param_helpers.rb
new file mode 100644
index 0000000..7bbec92
--- /dev/null
+++ b/app/services/telegram/param_helpers.rb
@@ -0,0 +1,104 @@
+module Telegram::ParamHelpers
+ # ensures that message is from a private chat and not a group chat
+ def private_message?
+ return true if callback_query_params?
+
+ params.dig(:message, :chat, :type) == 'private'
+ end
+
+ def telegram_params_content_attributes
+ reply_to = params.dig(:message, :reply_to_message, :message_id)
+ return { 'in_reply_to_external_id' => reply_to } if reply_to
+
+ {}
+ end
+
+ def business_message?
+ telegram_params_business_connection_id.present?
+ end
+
+ # In business bot mode we will receive messages from our telegram.
+ # This is our messages posted via telegram client.
+ # Such messages should be outgoing (from us to client)
+ def business_message_outgoing?
+ business_message? && telegram_params_base_object[:chat][:id] != telegram_params_base_object[:from][:id]
+ end
+
+ def message_params?
+ params[:message].present?
+ end
+
+ def callback_query_params?
+ params[:callback_query].present?
+ end
+
+ def telegram_params_base_object
+ if callback_query_params?
+ params[:callback_query]
+ else
+ params[:message]
+ end
+ end
+
+ def contact_params
+ if business_message_outgoing?
+ telegram_params_base_object[:chat]
+ else
+ telegram_params_base_object[:from]
+ end
+ end
+
+ def telegram_params_from_id
+ return telegram_params_base_object[:chat][:id] if business_message?
+
+ telegram_params_base_object[:from][:id]
+ end
+
+ def telegram_params_first_name
+ contact_params[:first_name]
+ end
+
+ def telegram_params_last_name
+ contact_params[:last_name]
+ end
+
+ def telegram_params_username
+ contact_params[:username]
+ end
+
+ def telegram_params_language_code
+ contact_params[:language_code]
+ end
+
+ def telegram_params_chat_id
+ if callback_query_params?
+ params[:callback_query][:message][:chat][:id]
+ else
+ telegram_params_base_object[:chat][:id]
+ end
+ end
+
+ def telegram_params_business_connection_id
+ if callback_query_params?
+ params[:callback_query][:message][:business_connection_id]
+ else
+ telegram_params_base_object[:business_connection_id]
+ end
+ end
+
+ def telegram_params_message_content
+ if callback_query_params?
+ params[:callback_query][:data]
+ else
+ params[:message][:text].presence || params[:message][:caption]
+ end
+ end
+
+ def telegram_params_message_id
+ if callback_query_params?
+ params[:callback_query][:id]
+ else
+ params[:message][:message_id]
+ end
+ end
+end
diff --git a/app/services/telegram/send_attachments_service.rb b/app/services/telegram/send_attachments_service.rb
new file mode 100644
index 0000000..5ba8fd4
--- /dev/null
+++ b/app/services/telegram/send_attachments_service.rb
@@ -0,0 +1,155 @@
+# Telegram Attachment APIs: ref: https://core.telegram.org/bots/api#inputfile
+
+# Media attachments like photos, videos can be clubbed together and sent as a media group
+# Audio can be clubbed together and send as a media group, but can't be mixed with other types
+# Documents are sent individually
+
+# We are using `HTTP URL` to send media attachments, telegram will directly download the media from the URL and send it to the user.
+# But for documents, we need to send the file as a multipart request. as telegram only support pdf and zip for the download from the URL option.
+
+# ref: `In sendDocument, sending by URL will currently only work for GIF, PDF and ZIP files.`
+# ref: `https://core.telegram.org/bots/api#senddocument`
+# ref: `https://core.telegram.org/bots/api#sendmediaGroup
+
+# The service will terminate if any of the attachment requests fail when the message has multiple attachments
+# We will create multiple messages in telegram if the message has multiple attachments (if its documents or mixed media).
+class Telegram::SendAttachmentsService
+ pattr_initialize [:message!]
+
+ def perform
+ attachment_message_id = nil
+
+ group_attachments_by_type.each do |type, attachments|
+ attachment_message_id = process_attachments_by_type(type, attachments)
+ break if attachment_message_id.nil?
+ end
+
+ attachment_message_id
+ end
+
+ private
+
+ def process_attachments_by_type(type, attachments)
+ response = send_attachments(type, attachments)
+ return extract_attachment_message_id(response) if handle_response(response)
+
+ nil
+ end
+
+ def send_attachments(type, attachments)
+ if [:media, :audio].include?(type)
+ media_group_request(channel.chat_id(message), attachments, channel.reply_to_message_id(message))
+ else
+ send_individual_attachments(attachments)
+ end
+ end
+
+ def group_attachments_by_type
+ attachments_by_type = { media: [], audio: [], document: [] }
+
+ message.attachments.each do |attachment|
+ type = attachment_type(attachment[:file_type])
+ attachment_data = { type: type, media: attachment.download_url, attachment: attachment }
+ case type
+ when 'document'
+ attachments_by_type[:document] << attachment_data
+ when 'audio'
+ attachments_by_type[:audio] << attachment_data
+ when 'photo', 'video'
+ attachments_by_type[:media] << attachment_data
+ end
+ end
+
+ attachments_by_type.reject { |_, v| v.empty? }
+ end
+
+ def attachment_type(file_type)
+ { 'audio' => 'audio', 'image' => 'photo', 'file' => 'document', 'video' => 'video' }[file_type] || 'document'
+ end
+
+ def media_group_request(chat_id, attachments, reply_to_message_id)
+ HTTParty.post("#{channel.telegram_api_url}/sendMediaGroup",
+ body: {
+ chat_id: chat_id,
+ **business_connection_body,
+ media: attachments.map { |hash| hash.except(:attachment) }.to_json,
+ reply_to_message_id: reply_to_message_id
+ })
+ end
+
+ def send_individual_attachments(attachments)
+ response = nil
+ attachments.map do |attachment|
+ response = document_request(channel.chat_id(message), attachment, channel.reply_to_message_id(message))
+ break unless handle_response(response)
+ end
+ response
+ end
+
+ def document_request(chat_id, attachment, reply_to_message_id)
+ temp_file_path = save_attachment_to_tempfile(attachment[:attachment])
+ response = send_file(chat_id, temp_file_path, reply_to_message_id)
+ File.delete(temp_file_path)
+ response
+ end
+
+ # Telegram picks up the file name from original field name, so we need to save the file with the original name.
+ # Hence not using Tempfile here.
+ def save_attachment_to_tempfile(attachment)
+ temp_dir = Rails.root.join('tmp/uploads', "telegram-#{attachment.message_id}")
+ FileUtils.mkdir_p(temp_dir)
+ temp_file_path = File.join(temp_dir, attachment.file.filename.to_s)
+
+ File.open(temp_file_path, 'wb') do |file|
+ attachment.file.blob.open do |blob_file|
+ IO.copy_stream(blob_file, file)
+ end
+ end
+
+ temp_file_path
+ end
+
+ def send_file(chat_id, file_path, reply_to_message_id)
+ File.open(file_path, 'rb') do |file|
+ HTTParty.post("#{channel.telegram_api_url}/sendDocument",
+ body: {
+ chat_id: chat_id,
+ **business_connection_body,
+ document: file,
+ reply_to_message_id: reply_to_message_id
+ },
+ multipart: true)
+ end
+ end
+
+ def handle_response(response)
+ return true if response.success?
+
+ Rails.logger.error "Message Id: #{message.id} - Error sending attachment to telegram: #{response.parsed_response}"
+ channel.process_error(message, response)
+ false
+ end
+
+ def extract_attachment_message_id(response)
+ return unless response.success?
+
+ result = response.parsed_response['result']
+ # response will be an array if the request for media group
+ # response will be a hash if the request for document
+ result.is_a?(Array) ? result.first['message_id'] : result['message_id']
+ end
+
+ def channel
+ @channel ||= message.inbox.channel
+ end
+
+ def business_connection_id
+ @business_connection_id ||= channel.business_connection_id(message)
+ end
+
+ def business_connection_body
+ body = {}
+ body[:business_connection_id] = business_connection_id if business_connection_id
+ body
+ end
+end
diff --git a/app/services/telegram/send_on_telegram_service.rb b/app/services/telegram/send_on_telegram_service.rb
new file mode 100644
index 0000000..c4b27bc
--- /dev/null
+++ b/app/services/telegram/send_on_telegram_service.rb
@@ -0,0 +1,22 @@
+class Telegram::SendOnTelegramService < Base::SendOnChannelService
+ private
+
+ def channel_class
+ Channel::Telegram
+ end
+
+ def perform_reply
+ ## send reply to telegram message api
+ # https://core.telegram.org/bots/api#sendmessage
+ message_id = channel.send_message_on_telegram(message)
+ message.update!(source_id: message_id) if message_id.present?
+ end
+
+ def inbox
+ @inbox ||= message.inbox
+ end
+
+ def channel
+ @channel ||= inbox.channel
+ end
+end
diff --git a/app/services/telegram/update_message_service.rb b/app/services/telegram/update_message_service.rb
new file mode 100644
index 0000000..109d73f
--- /dev/null
+++ b/app/services/telegram/update_message_service.rb
@@ -0,0 +1,44 @@
+# Find the various telegram payload samples here: https://core.telegram.org/bots/webhooks#testing-your-bot-with-updates
+# https://core.telegram.org/bots/api#available-types
+
+class Telegram::UpdateMessageService
+ pattr_initialize [:inbox!, :params!]
+
+ def perform
+ transform_business_message!
+ find_contact_inbox
+ find_conversation
+ find_message
+ update_message
+ rescue StandardError => e
+ Rails.logger.error "Error while processing telegram message update #{e.message}"
+ end
+
+ private
+
+ def find_contact_inbox
+ @contact_inbox = inbox.contact_inboxes.find_by!(source_id: params[:edited_message][:chat][:id])
+ end
+
+ def find_conversation
+ @conversation = @contact_inbox.conversations.last
+ end
+
+ def find_message
+ @message = @conversation.messages.find_by(source_id: params[:edited_message][:message_id])
+ end
+
+ def update_message
+ edited_message = params[:edited_message]
+
+ if edited_message[:text].present?
+ @message.update!(content: edited_message[:text])
+ elsif edited_message[:caption].present?
+ @message.update!(content: edited_message[:caption])
+ end
+ end
+
+ def transform_business_message!
+ params[:edited_message] = params[:edited_business_message] if params[:edited_business_message].present?
+ end
+end
diff --git a/app/services/tiktok/auth_client.rb b/app/services/tiktok/auth_client.rb
new file mode 100644
index 0000000..d152d03
--- /dev/null
+++ b/app/services/tiktok/auth_client.rb
@@ -0,0 +1,145 @@
+class Tiktok::AuthClient
+ REQUIRED_SCOPES = %w[user.info.basic user.info.username user.info.stats user.info.profile user.account.type user.insights message.list.read
+ message.list.send message.list.manage].freeze
+
+ class << self
+ def authorize_url(state: nil)
+ tiktok_client = ::OAuth2::Client.new(
+ client_id,
+ client_secret,
+ {
+ site: 'https://www.tiktok.com',
+ authorize_url: '/v2/auth/authorize',
+ auth_scheme: :basic_auth
+ }
+ )
+
+ tiktok_client.authorize_url(
+ {
+ response_type: 'code',
+ client_key: client_id,
+ redirect_uri: redirect_uri,
+ scope: REQUIRED_SCOPES.join(','),
+ state: state
+ }
+ )
+ end
+
+ # https://business-api.tiktok.com/portal/docs?id=1832184159540418
+ def obtain_short_term_access_token(auth_code) # rubocop:disable Metrics/MethodLength
+ endpoint = 'https://business-api.tiktok.com/open_api/v1.3/tt_user/oauth2/token/'
+ headers = { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
+ body = {
+ client_id: client_id,
+ client_secret: client_secret,
+ grant_type: 'authorization_code',
+ auth_code: auth_code,
+ redirect_uri: redirect_uri
+ }
+
+ response = HTTParty.post(
+ endpoint,
+ body: body.to_json,
+ headers: headers
+ )
+
+ json = process_json_response(response, 'Failed to obtain TikTok short-term access token')
+
+ {
+ business_id: json['data']['open_id'],
+ scope: json['data']['scope'],
+ access_token: json['data']['access_token'],
+ refresh_token: json['data']['refresh_token'],
+ expires_at: Time.current + json['data']['expires_in'].seconds,
+ refresh_token_expires_at: Time.current + json['data']['refresh_token_expires_in'].seconds
+ }.with_indifferent_access
+ end
+
+ def renew_short_term_access_token(refresh_token) # rubocop:disable Metrics/MethodLength
+ endpoint = 'https://business-api.tiktok.com/open_api/v1.3/tt_user/oauth2/refresh_token/'
+ headers = { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
+ body = {
+ client_id: client_id,
+ client_secret: client_secret,
+ grant_type: 'refresh_token',
+ refresh_token: refresh_token
+ }
+
+ response = HTTParty.post(
+ endpoint,
+ body: body.to_json,
+ headers: headers
+ )
+
+ json = process_json_response(response, 'Failed to renew TikTok short-term access token')
+
+ {
+ access_token: json['data']['access_token'],
+ refresh_token: json['data']['refresh_token'],
+ expires_at: Time.current + json['data']['expires_in'].seconds,
+ refresh_token_expires_at: Time.current + json['data']['refresh_token_expires_in'].seconds
+ }.with_indifferent_access
+ end
+
+ def webhook_callback
+ endpoint = 'https://business-api.tiktok.com/open_api/v1.3/business/webhook/list/'
+ headers = { Accept: 'application/json' }
+ params = {
+ app_id: client_id,
+ secret: client_secret,
+ event_type: 'DIRECT_MESSAGE'
+ }
+ response = HTTParty.get(endpoint, query: params, headers: headers)
+
+ process_json_response(response, 'Failed to fetch TikTok webhook callback')
+ end
+
+ def update_webhook_callback
+ endpoint = 'https://business-api.tiktok.com/open_api/v1.3/business/webhook/update/'
+ headers = { Accept: 'application/json', 'Content-Type': 'application/json' }
+ body = {
+ app_id: client_id,
+ secret: client_secret,
+ event_type: 'DIRECT_MESSAGE',
+ callback_url: webhook_url
+ }
+ response = HTTParty.post(endpoint, body: body.to_json, headers: headers)
+
+ process_json_response(response, 'Failed to update TikTok webhook callback')
+ end
+
+ private
+
+ def client_id
+ GlobalConfigService.load('TIKTOK_APP_ID', nil)
+ end
+
+ def client_secret
+ GlobalConfigService.load('TIKTOK_APP_SECRET', nil)
+ end
+
+ def process_json_response(response, error_prefix)
+ unless response.success?
+ Rails.logger.error "#{error_prefix}. Status: #{response.code}, Body: #{response.body}"
+ raise "#{response.code}: #{response.body}"
+ end
+
+ res = JSON.parse(response.body)
+ raise "#{res['code']}: #{res['message']}" if res['code'] != 0
+
+ res
+ end
+
+ def redirect_uri
+ "#{base_url}/tiktok/callback"
+ end
+
+ def webhook_url
+ "#{base_url}/webhooks/tiktok"
+ end
+
+ def base_url
+ ENV.fetch('FRONTEND_URL', 'http://localhost:3000')
+ end
+ end
+end
diff --git a/app/services/tiktok/client.rb b/app/services/tiktok/client.rb
new file mode 100644
index 0000000..90fd6ce
--- /dev/null
+++ b/app/services/tiktok/client.rb
@@ -0,0 +1,100 @@
+class Tiktok::Client
+ # Always use Tiktok::TokenService to get a valid access token
+ pattr_initialize [:business_id!, :access_token!]
+
+ def business_account_details
+ endpoint = 'https://business-api.tiktok.com/open_api/v1.3/business/get/'
+ headers = { 'Access-Token': access_token }
+ params = { business_id: business_id, fields: %w[username display_name profile_image].to_s }
+ response = HTTParty.get(endpoint, query: params, headers: headers)
+
+ json = process_json_response(response, 'Failed to fetch TikTok user details')
+ {
+ username: json['data']['username'],
+ display_name: json['data']['display_name'],
+ profile_image: json['data']['profile_image']
+ }.with_indifferent_access
+ end
+
+ def file_download_url(conversation_id, message_id, media_id, media_type = 'IMAGE')
+ endpoint = 'https://business-api.tiktok.com/open_api/v1.3/business/message/media/download/'
+ headers = { 'Access-Token': access_token, 'Content-Type': 'application/json', Accept: 'application/json' }
+ body = { business_id: business_id,
+ conversation_id: conversation_id,
+ message_id: message_id,
+ media_id: media_id,
+ media_type: media_type }
+
+ response = HTTParty.post(endpoint, body: body.to_json, headers: headers)
+ json = process_json_response(response, 'Failed to fetch TikTok media download URL')
+
+ json['data']['download_url']
+ end
+
+ def send_text_message(conversation_id, text, referenced_message_id: nil)
+ send_message(conversation_id, 'TEXT', text, referenced_message_id: referenced_message_id)
+ end
+
+ def send_media_message(conversation_id, attachment, referenced_message_id: nil)
+ # As of now, only IMAGE media type is supported
+ media_id = upload_media(attachment.file, 'IMAGE')
+ send_message(conversation_id, 'IMAGE', media_id, referenced_message_id: referenced_message_id)
+ end
+
+ private
+
+ def send_message(conversation_id, type, payload, referenced_message_id: nil)
+ # https://business-api.tiktok.com/portal/docs?id=1832184403754242
+ endpoint ='https://business-api.tiktok.com/open_api/v1.3/business/message/send/'
+ headers = { 'Access-Token': access_token, 'Content-Type': 'application/json' }
+ body = {
+ business_id: business_id,
+ recipient_type: 'CONVERSATION',
+ recipient: conversation_id
+ }
+
+ body[:referenced_message_info] = { referenced_message_id: referenced_message_id } if referenced_message_id.present?
+
+ if type == 'IMAGE'
+ body[:message_type] = 'IMAGE'
+ body[:image] = { media_id: payload }
+ else
+ body[:message_type] = 'TEXT'
+ body[:text] = { body: payload }
+ end
+
+ response = HTTParty.post(endpoint, body: body.to_json, headers: headers)
+ json = process_json_response(response, 'Failed to send TikTok message')
+
+ json['data']['message']['message_id']
+ end
+
+ def upload_media(file, media_type = 'IMAGE')
+ endpoint = 'https://business-api.tiktok.com/open_api/v1.3/business/message/media/upload/'
+ headers = { 'Access-Token': access_token, 'Content-Type': 'multipart/form-data' }
+
+ file.open do |temp_file|
+ body = {
+ business_id: business_id,
+ media_type: media_type,
+ file: temp_file
+ }
+
+ response = HTTParty.post(endpoint, body: body, headers: headers)
+ json = process_json_response(response, 'Failed to upload TikTok media')
+ json['data']['media_id']
+ end
+ end
+
+ def process_json_response(response, error_prefix)
+ unless response.success?
+ Rails.logger.error "#{error_prefix}. Status: #{response.code}, Body: #{response.body}"
+ raise "#{response.code}: #{response.body}"
+ end
+
+ res = JSON.parse(response.body)
+ raise "#{res['code']}: #{res['message']}" if res['code'] != 0
+
+ res
+ end
+end
diff --git a/app/services/tiktok/message_service.rb b/app/services/tiktok/message_service.rb
new file mode 100644
index 0000000..c33f172
--- /dev/null
+++ b/app/services/tiktok/message_service.rb
@@ -0,0 +1,174 @@
+class Tiktok::MessageService
+ include Tiktok::MessagingHelpers
+
+ pattr_initialize [:channel!, :content!]
+
+ def perform
+ if outgoing_message?
+ # Skip processing echo messages
+ message = find_message(tt_conversation_id, tt_message_id)
+ return if message.present?
+ end
+
+ create_message
+ end
+
+ private
+
+ def contact_inbox
+ @contact_inbox ||= create_contact_inbox(channel, tt_conversation_id, incoming_message? ? from : to, incoming_message? ? from_id : to_id)
+ end
+
+ def contact
+ contact_inbox.contact
+ end
+
+ def conversation
+ @conversation ||= contact_inbox.conversations.first || create_conversation(channel, contact_inbox, tt_conversation_id)
+ end
+
+ def create_message
+ message = conversation.messages.build(
+ content: message_content,
+ account_id: channel.inbox.account_id,
+ inbox_id: channel.inbox.id,
+ message_type: incoming_message? ? :incoming : :outgoing,
+ content_attributes: message_content_attributes,
+ source_id: tt_message_id,
+ created_at: tt_message_time,
+ updated_at: tt_message_time
+ )
+
+ message.sender = contact_inbox.contact if incoming_message?
+ message.status = :delivered if outgoing_message?
+
+ create_message_attachments(message)
+ message.save!
+ end
+
+ def message_content
+ return unless text_message?
+
+ tt_text_body
+ end
+
+ def create_message_attachments(message)
+ create_image_message_attachment(message) if image_message?
+ create_share_post_message_attachment(message) if share_post_message?
+ end
+
+ def create_image_message_attachment(message)
+ return unless image_message?
+
+ attachment_file = fetch_attachment(channel, tt_conversation_id, tt_message_id, tt_image_media_id)
+
+ message.attachments.new(
+ account_id: message.account_id,
+ file_type: :image,
+ file: {
+ io: attachment_file,
+ filename: attachment_file.original_filename,
+ content_type: attachment_file.content_type
+ }
+ )
+ end
+
+ def create_share_post_message_attachment(message)
+ return unless share_post_message?
+
+ message.attachments.new(
+ account_id: message.account_id,
+ file_type: :embed,
+ external_url: tt_share_post_embed_url
+ )
+ end
+
+ def supported_message?
+ text_message? || image_message? || share_post_message?
+ end
+
+ def message_content_attributes
+ attributes = {}
+ attributes[:in_reply_to_external_id] = tt_referenced_message_id if tt_referenced_message_id
+ attributes[:is_unsupported] = true unless supported_message?
+ attributes
+ end
+
+ def text_message?
+ tt_message_type == 'text'
+ end
+
+ def image_message?
+ tt_message_type == 'image'
+ end
+
+ def sticker_message?
+ tt_message_type == 'sticker'
+ end
+
+ def share_post_message?
+ tt_message_type == 'share_post'
+ end
+
+ def tt_text_body
+ return unless text_message?
+
+ content[:text][:body]
+ end
+
+ def tt_image_media_id
+ return unless image_message?
+
+ content[:image][:media_id]
+ end
+
+ def tt_share_post_embed_url
+ return unless share_post_message?
+
+ content[:share_post][:embed_url]
+ end
+
+ def tt_referenced_message_id
+ content[:referenced_message_info]&.[](:referenced_message_id)
+ end
+
+ def tt_message_type
+ content[:type]
+ end
+
+ def tt_message_id
+ content[:message_id]
+ end
+
+ def tt_message_time
+ Time.zone.at(content[:timestamp] / 1000).utc
+ end
+
+ def tt_conversation_id
+ content[:conversation_id]
+ end
+
+ def from
+ content[:from]
+ end
+
+ def from_id
+ content[:from_user][:id]
+ end
+
+ def to
+ content[:to]
+ end
+
+ def to_id
+ content[:to_user][:id]
+ end
+
+ def incoming_message?
+ channel.business_id == to_id
+ end
+
+ def outgoing_message?
+ !incoming_message?
+ end
+end
diff --git a/app/services/tiktok/messaging_helpers.rb b/app/services/tiktok/messaging_helpers.rb
new file mode 100644
index 0000000..b4295c7
--- /dev/null
+++ b/app/services/tiktok/messaging_helpers.rb
@@ -0,0 +1,68 @@
+module Tiktok::MessagingHelpers
+ private
+
+ def create_contact_inbox(channel, tt_conversation_id, from, from_id)
+ ::ContactInboxWithContactBuilder.new(
+ source_id: tt_conversation_id,
+ inbox: channel.inbox,
+ contact_attributes: contact_attributes(from, from_id)
+ ).perform
+ end
+
+ def contact_attributes(from, from_id)
+ {
+ name: from,
+ additional_attributes: contact_additional_attributes(from, from_id)
+ }
+ end
+
+ def contact_additional_attributes(from, from_id)
+ {
+ # TODO: Remove this once we show the social_tiktok_user_name in the UI instead of the username
+ username: from,
+ social_tiktok_user_id: from_id,
+ social_tiktok_user_name: from
+ }
+ end
+
+ def find_conversation(channel, tt_conversation_id)
+ channel.inbox.contact_inboxes.find_by(source_id: tt_conversation_id).conversations.first
+ end
+
+ def create_conversation(channel, contact_inbox, tt_conversation_id)
+ ::Conversation.create!(conversation_params(channel, contact_inbox, tt_conversation_id))
+ end
+
+ def conversation_params(channel, contact_inbox, tt_conversation_id)
+ {
+ account_id: channel.inbox.account_id,
+ inbox_id: channel.inbox.id,
+ contact_id: contact_inbox.contact.id,
+ contact_inbox_id: contact_inbox.id,
+ additional_attributes: conversation_additional_attributes(tt_conversation_id)
+ }
+ end
+
+ def conversation_additional_attributes(tt_conversation_id)
+ {
+ conversation_id: tt_conversation_id
+ }
+ end
+
+ def find_message(tt_conversation_id, tt_message_id)
+ message = Message.find_by(source_id: tt_message_id)
+ message_conversation_id = message&.conversation&.[](:additional_attributes)&.[]('conversation_id')
+ return if message_conversation_id != tt_conversation_id
+
+ message
+ end
+
+ def fetch_attachment(channel, tt_conversation_id, tt_message_id, tt_image_media_id)
+ file_download_url = tiktok_client(channel).file_download_url(tt_conversation_id, tt_message_id, tt_image_media_id)
+ Down.download(file_download_url)
+ end
+
+ def tiktok_client(channel)
+ Tiktok::Client.new(business_id: channel.business_id, access_token: channel.validated_access_token)
+ end
+end
diff --git a/app/services/tiktok/read_status_service.rb b/app/services/tiktok/read_status_service.rb
new file mode 100644
index 0000000..e09c6e8
--- /dev/null
+++ b/app/services/tiktok/read_status_service.rb
@@ -0,0 +1,36 @@
+class Tiktok::ReadStatusService
+ include Tiktok::MessagingHelpers
+
+ pattr_initialize [:channel!, :content!]
+
+ def perform
+ return if channel.blank? || content.blank? || outbound_event?
+
+ ::Conversations::UpdateMessageStatusJob.perform_later(conversation.id, last_read_timestamp) if conversation.present?
+ end
+
+ def conversation
+ @conversation ||= find_conversation(channel, tt_conversation_id)
+ end
+
+ def tt_conversation_id
+ content[:conversation_id]
+ end
+
+ def last_read_timestamp
+ tt = content[:read][:last_read_timestamp]
+ Time.zone.at(tt.to_i / 1000).utc
+ end
+
+ def business_id
+ channel.business_id
+ end
+
+ def from_user_id
+ content[:from_user][:id]
+ end
+
+ def outbound_event?
+ business_id.to_s == from_user_id.to_s
+ end
+end
diff --git a/app/services/tiktok/send_on_tiktok_service.rb b/app/services/tiktok/send_on_tiktok_service.rb
new file mode 100644
index 0000000..d7db5f3
--- /dev/null
+++ b/app/services/tiktok/send_on_tiktok_service.rb
@@ -0,0 +1,47 @@
+class Tiktok::SendOnTiktokService < Base::SendOnChannelService
+ private
+
+ def channel_class
+ Channel::Tiktok
+ end
+
+ def perform_reply
+ validate_message_support!
+ message_id = send_message
+
+ message.update!(source_id: message_id)
+ Messages::StatusUpdateService.new(message, 'delivered').perform
+ rescue StandardError => e
+ Rails.logger.error "Failed to send Tiktok message: #{e.message}"
+ Messages::StatusUpdateService.new(message, 'failed', e.message).perform
+ end
+
+ def validate_message_support!
+ return unless message.attachments.any?
+ raise 'Sending attachments with text is not supported on TikTok.' if message.outgoing_content.present?
+ raise 'Sending multiple attachments in a single TikTok message is not supported.' unless message.attachments.one?
+ end
+
+ def send_message
+ tt_conversation_id = message.conversation[:additional_attributes]['conversation_id']
+ tt_referenced_message_id = message.content_attributes['in_reply_to_external_id']
+
+ if message.attachments.any?
+ tiktok_client.send_media_message(tt_conversation_id, message.attachments.first, referenced_message_id: tt_referenced_message_id)
+ else
+ tiktok_client.send_text_message(tt_conversation_id, message.outgoing_content, referenced_message_id: tt_referenced_message_id)
+ end
+ end
+
+ def tiktok_client
+ @tiktok_client ||= Tiktok::Client.new(business_id: channel.business_id, access_token: channel.validated_access_token)
+ end
+
+ def inbox
+ @inbox ||= message.inbox
+ end
+
+ def channel
+ @channel ||= inbox.channel
+ end
+end
diff --git a/app/services/tiktok/token_service.rb b/app/services/tiktok/token_service.rb
new file mode 100644
index 0000000..7a017dd
--- /dev/null
+++ b/app/services/tiktok/token_service.rb
@@ -0,0 +1,77 @@
+# Service to handle TikTok channel access token refresh logic
+# TikTok access tokens are valid for 1 day and can be refreshed to extend validity
+class Tiktok::TokenService
+ pattr_initialize [:channel!]
+
+ # Returns a valid access token, refreshing it if necessary and eligible
+ def access_token
+ return current_access_token if token_valid?
+
+ return refresh_access_token if refresh_token_valid?
+
+ channel.prompt_reauthorization! unless channel.reauthorization_required?
+ return current_access_token
+ end
+
+ private
+
+ def current_access_token
+ channel.access_token
+ end
+
+ def expires_at
+ channel.expires_at
+ end
+
+ def refresh_token
+ channel.refresh_token
+ end
+
+ def refresh_token_expires_at
+ channel.refresh_token_expires_at
+ end
+
+ # Checks if the current token is still valid (not expired)
+ def token_valid?
+ 5.minutes.from_now < expires_at
+ end
+
+ def refresh_token_valid?
+ Time.current < refresh_token_expires_at
+ end
+
+ # Makes an API request to refresh the access token
+ # @return [String] Refreshed access token
+ def refresh_access_token
+ lock_manager = Redis::LockManager.new
+ begin
+ # Could not acquire lock, another process is likely refreshing the token
+ # return the current token as it should still be valid for the next 30 minutes
+ return current_access_token unless lock_manager.lock(lock_key, 30.seconds)
+
+ result = attempt_refresh_token
+ new_token = result[:access_token]
+
+ channel.update!(
+ access_token: new_token,
+ refresh_token: result[:refresh_token],
+ expires_at: result[:expires_at],
+ refresh_token_expires_at: result[:refresh_token_expires_at]
+ )
+
+ lock_manager.unlock(lock_key)
+ new_token
+ rescue StandardError => e
+ lock_manager.unlock(lock_key)
+ raise e
+ end
+ end
+
+ def lock_key
+ format(::Redis::Alfred::TIKTOK_REFRESH_TOKEN_MUTEX, channel_id: channel.id)
+ end
+
+ def attempt_refresh_token
+ Tiktok::AuthClient.renew_short_term_access_token(refresh_token)
+ end
+end
diff --git a/app/services/twilio/csat_template_api_client.rb b/app/services/twilio/csat_template_api_client.rb
new file mode 100644
index 0000000..e5e9b1b
--- /dev/null
+++ b/app/services/twilio/csat_template_api_client.rb
@@ -0,0 +1,68 @@
+class Twilio::CsatTemplateApiClient
+ def initialize(twilio_channel)
+ @twilio_channel = twilio_channel
+ end
+
+ def create_template(request_body)
+ HTTParty.post(
+ "#{api_base_path}/v1/Content",
+ headers: api_headers,
+ body: request_body.to_json
+ )
+ end
+
+ def submit_for_approval(approval_url, template_name, category)
+ request_body = {
+ name: template_name,
+ category: category
+ }
+
+ HTTParty.post(
+ approval_url,
+ headers: api_headers,
+ body: request_body.to_json
+ )
+ end
+
+ def delete_template(content_sid)
+ HTTParty.delete(
+ "#{api_base_path}/v1/Content/#{content_sid}",
+ headers: api_headers
+ )
+ end
+
+ def fetch_template(content_sid)
+ HTTParty.get(
+ "#{api_base_path}/v1/Content/#{content_sid}",
+ headers: api_headers
+ )
+ end
+
+ def fetch_approval_status(content_sid)
+ HTTParty.get(
+ "#{api_base_path}/v1/Content/#{content_sid}/ApprovalRequests",
+ headers: api_headers
+ )
+ end
+
+ private
+
+ def api_headers
+ {
+ 'Authorization' => "Basic #{encoded_credentials}",
+ 'Content-Type' => 'application/json'
+ }
+ end
+
+ def encoded_credentials
+ if @twilio_channel.api_key_sid.present?
+ Base64.strict_encode64("#{@twilio_channel.api_key_sid}:#{@twilio_channel.auth_token}")
+ else
+ Base64.strict_encode64("#{@twilio_channel.account_sid}:#{@twilio_channel.auth_token}")
+ end
+ end
+
+ def api_base_path
+ 'https://content.twilio.com'
+ end
+end
diff --git a/app/services/twilio/csat_template_service.rb b/app/services/twilio/csat_template_service.rb
new file mode 100644
index 0000000..70be01a
--- /dev/null
+++ b/app/services/twilio/csat_template_service.rb
@@ -0,0 +1,204 @@
+class Twilio::CsatTemplateService
+ DEFAULT_BUTTON_TEXT = 'Please rate us'.freeze
+ DEFAULT_LANGUAGE = 'en'.freeze
+ TEMPLATE_CATEGORY = 'UTILITY'.freeze
+ TEMPLATE_STATUS_PENDING = 'PENDING'.freeze
+ TEMPLATE_CONTENT_TYPE = 'twilio/call-to-action'.freeze
+
+ def initialize(twilio_channel)
+ @twilio_channel = twilio_channel
+ @api_client = Twilio::CsatTemplateApiClient.new(twilio_channel)
+ end
+
+ def create_template(template_config)
+ base_name = template_config[:template_name]
+ template_name = generate_template_name(base_name)
+ template_config_with_name = template_config.merge(template_name: template_name)
+
+ request_body = build_template_request_body(template_config_with_name)
+
+ # Step 1: Create template
+ response = @api_client.create_template(request_body)
+
+ return process_template_creation_response(response, template_config_with_name) unless response.success? && response['sid']
+
+ # Step 2: Submit for WhatsApp approval using the approval_create URL
+ approval_url = response.dig('links', 'approval_create')
+
+ if approval_url.present?
+ approval_response = submit_for_whatsapp_approval(approval_url, template_config_with_name[:template_name])
+ process_approval_response(approval_response, response, template_config_with_name)
+ else
+ Rails.logger.warn 'No approval_create URL provided in template creation response'
+ # Fallback if no approval URL provided
+ process_template_creation_response(response, template_config_with_name)
+ end
+ end
+
+ def delete_template(_template_name = nil, content_sid = nil)
+ content_sid ||= current_template_sid_from_config
+ return { success: false, error: 'No template to delete' } unless content_sid
+
+ response = @api_client.delete_template(content_sid)
+ { success: response.success?, response_body: response.body }
+ end
+
+ def get_template_status(content_sid)
+ return { success: false, error: 'No content SID provided' } unless content_sid
+
+ template_response = fetch_template_details(content_sid)
+ return template_response unless template_response[:success]
+
+ approval_response = fetch_approval_status(content_sid)
+ build_template_status_response(content_sid, template_response[:data], approval_response)
+ rescue StandardError => e
+ Rails.logger.error "Error fetching Twilio template status: #{e.message}"
+ { success: false, error: e.message }
+ end
+
+ private
+
+ def fetch_template_details(content_sid)
+ response = @api_client.fetch_template(content_sid)
+
+ if response.success?
+ { success: true, data: response }
+ else
+ Rails.logger.error "Failed to get template details: #{response.code} - #{response.body}"
+ { success: false, error: 'Template not found' }
+ end
+ end
+
+ def fetch_approval_status(content_sid)
+ @api_client.fetch_approval_status(content_sid)
+ end
+
+ def build_template_status_response(content_sid, template_response, approval_response)
+ if approval_response.success? && approval_response['whatsapp']
+ build_approved_template_response(content_sid, template_response, approval_response['whatsapp'])
+ else
+ build_pending_template_response(content_sid, template_response)
+ end
+ end
+
+ def build_approved_template_response(content_sid, template_response, whatsapp_data)
+ {
+ success: true,
+ template: {
+ content_sid: content_sid,
+ friendly_name: whatsapp_data['name'] || template_response['friendly_name'],
+ status: whatsapp_data['status'] || 'pending',
+ language: template_response['language'] || 'en'
+ }
+ }
+ end
+
+ def build_pending_template_response(content_sid, template_response)
+ {
+ success: true,
+ template: {
+ content_sid: content_sid,
+ friendly_name: template_response['friendly_name'],
+ status: 'pending',
+ language: template_response['language'] || 'en'
+ }
+ }
+ end
+
+ def generate_template_name(base_name)
+ current_template_name = current_template_name_from_config
+ CsatTemplateNameService.generate_next_template_name(base_name, @twilio_channel.inbox.id, current_template_name)
+ end
+
+ def current_template_name_from_config
+ @twilio_channel.inbox.csat_config&.dig('template', 'friendly_name')
+ end
+
+ def current_template_sid_from_config
+ @twilio_channel.inbox.csat_config&.dig('template', 'content_sid')
+ end
+
+ def template_exists_in_config?
+ content_sid = current_template_sid_from_config
+ friendly_name = current_template_name_from_config
+
+ content_sid.present? && friendly_name.present?
+ end
+
+ def build_template_request_body(template_config)
+ {
+ friendly_name: template_config[:template_name],
+ language: template_config[:language] || DEFAULT_LANGUAGE,
+ variables: {
+ '1' => '12345' # Example conversation UUID
+ },
+ types: {
+ TEMPLATE_CONTENT_TYPE => {
+ body: template_config[:message],
+ actions: [
+ {
+ type: 'URL',
+ title: template_config[:button_text] || DEFAULT_BUTTON_TEXT,
+ url: "#{template_config[:base_url]}/survey/responses/{{1}}"
+ }
+ ]
+ }
+ }
+ }
+ end
+
+ def submit_for_whatsapp_approval(approval_url, template_name)
+ @api_client.submit_for_approval(approval_url, template_name, TEMPLATE_CATEGORY)
+ end
+
+ def process_template_creation_response(response, template_config = {})
+ if response.success? && response['sid']
+ {
+ success: true,
+ content_sid: response['sid'],
+ friendly_name: template_config[:template_name],
+ language: template_config[:language] || DEFAULT_LANGUAGE,
+ status: TEMPLATE_STATUS_PENDING
+ }
+ else
+ Rails.logger.error "Twilio template creation failed: #{response.code} - #{response.body}"
+ {
+ success: false,
+ error: 'Template creation failed',
+ response_body: response.body
+ }
+ end
+ end
+
+ def process_approval_response(approval_response, creation_response, template_config)
+ if approval_response.success?
+ build_successful_approval_response(approval_response, creation_response, template_config)
+ else
+ build_failed_approval_response(approval_response, creation_response, template_config)
+ end
+ end
+
+ def build_successful_approval_response(approval_response, creation_response, template_config)
+ approval_data = approval_response.parsed_response
+ {
+ success: true,
+ content_sid: creation_response['sid'],
+ friendly_name: template_config[:template_name],
+ language: template_config[:language] || DEFAULT_LANGUAGE,
+ status: TEMPLATE_STATUS_PENDING,
+ approval_sid: approval_data['sid'],
+ whatsapp_status: approval_data.dig('whatsapp', 'status') || TEMPLATE_STATUS_PENDING
+ }
+ end
+
+ def build_failed_approval_response(approval_response, creation_response, template_config)
+ Rails.logger.error "Twilio template approval submission failed: #{approval_response.code} - #{approval_response.body}"
+ {
+ success: true,
+ content_sid: creation_response['sid'],
+ friendly_name: template_config[:template_name],
+ language: template_config[:language] || DEFAULT_LANGUAGE,
+ status: 'created'
+ }
+ end
+end
diff --git a/app/services/twilio/delivery_status_service.rb b/app/services/twilio/delivery_status_service.rb
new file mode 100644
index 0000000..bf8422f
--- /dev/null
+++ b/app/services/twilio/delivery_status_service.rb
@@ -0,0 +1,59 @@
+class Twilio::DeliveryStatusService
+ pattr_initialize [:params!]
+ # Reference: https://www.twilio.com/docs/messaging/api/message-resource#message-status-values
+
+ def perform
+ return if twilio_channel.blank?
+
+ return unless supported_status?
+
+ process_statuses if message.present?
+ end
+
+ private
+
+ def process_statuses
+ @message.status = status
+ @message.external_error = external_error if error_occurred?
+ @message.save!
+ end
+
+ def supported_status?
+ %w[sent delivered read failed undelivered].include?(params[:MessageStatus])
+ end
+
+ def status
+ params[:MessageStatus] == 'undelivered' ? 'failed' : params[:MessageStatus]
+ end
+
+ def external_error
+ return nil unless error_occurred?
+
+ error_message = params[:ErrorMessage].presence
+ error_code = params[:ErrorCode]
+
+ if error_message.present?
+ "#{error_code} - #{error_message}"
+ elsif error_code.present?
+ I18n.t('conversations.messages.delivery_status.error_code', error_code: error_code)
+ end
+ end
+
+ def error_occurred?
+ params[:ErrorCode].present? && %w[failed undelivered].include?(params[:MessageStatus])
+ end
+
+ def twilio_channel
+ @twilio_channel ||= if params[:MessagingServiceSid].present?
+ ::Channel::TwilioSms.find_by(messaging_service_sid: params[:MessagingServiceSid])
+ elsif params[:AccountSid].present? && params[:From].present?
+ ::Channel::TwilioSms.find_by!(account_sid: params[:AccountSid], phone_number: params[:From])
+ end
+ end
+
+ def message
+ return unless params[:MessageSid]
+
+ @message ||= twilio_channel.inbox.messages.find_by(source_id: params[:MessageSid])
+ end
+end
diff --git a/app/services/twilio/incoming_message_service.rb b/app/services/twilio/incoming_message_service.rb
new file mode 100644
index 0000000..5d695eb
--- /dev/null
+++ b/app/services/twilio/incoming_message_service.rb
@@ -0,0 +1,201 @@
+class Twilio::IncomingMessageService
+ include ::FileTypeHelper
+
+ pattr_initialize [:params!]
+
+ def perform
+ return if twilio_channel.blank?
+
+ set_contact
+ set_conversation
+ @message = @conversation.messages.build(
+ content: message_body,
+ account_id: @inbox.account_id,
+ inbox_id: @inbox.id,
+ message_type: :incoming,
+ sender: @contact,
+ source_id: params[:SmsSid]
+ )
+ attach_files
+ attach_location if location_message?
+ @message.save!
+ end
+
+ private
+
+ def twilio_channel
+ @twilio_channel ||= ::Channel::TwilioSms.find_by(messaging_service_sid: params[:MessagingServiceSid]) if params[:MessagingServiceSid].present?
+ if params[:AccountSid].present? && params[:To].present?
+ @twilio_channel ||= ::Channel::TwilioSms.find_by!(account_sid: params[:AccountSid],
+ phone_number: params[:To])
+ end
+ @twilio_channel
+ end
+
+ def inbox
+ @inbox ||= twilio_channel.inbox
+ end
+
+ def account
+ @account ||= inbox.account
+ end
+
+ def phone_number
+ twilio_channel.sms? ? params[:From] : params[:From].gsub('whatsapp:', '')
+ end
+
+ def normalized_phone_number
+ return phone_number unless twilio_channel.whatsapp?
+
+ Whatsapp::PhoneNumberNormalizationService.new(inbox).normalize_and_find_contact_by_provider("whatsapp:#{phone_number}", :twilio)
+ end
+
+ def formatted_phone_number
+ TelephoneNumber.parse(phone_number).international_number
+ end
+
+ def message_body
+ params[:Body]&.delete("\u0000")
+ end
+
+ def set_contact
+ source_id = twilio_channel.whatsapp? ? normalized_phone_number : params[:From]
+
+ contact_inbox = ::ContactInboxWithContactBuilder.new(
+ source_id: source_id,
+ inbox: inbox,
+ contact_attributes: contact_attributes
+ ).perform
+
+ @contact_inbox = contact_inbox
+ @contact = contact_inbox.contact
+
+ # Update existing contact name if ProfileName is available and current name is just phone number
+ update_contact_name_if_needed
+ end
+
+ def conversation_params
+ {
+ account_id: @inbox.account_id,
+ inbox_id: @inbox.id,
+ contact_id: @contact.id,
+ contact_inbox_id: @contact_inbox.id,
+ additional_attributes: additional_attributes
+ }
+ end
+
+ def set_conversation
+ # if lock to single conversation is disabled, we will create a new conversation if previous conversation is resolved
+ @conversation = if @inbox.lock_to_single_conversation
+ @contact_inbox.conversations.last
+ else
+ @contact_inbox.conversations.where
+ .not(status: :resolved).last
+ end
+ return if @conversation
+
+ @conversation = ::Conversation.create!(conversation_params)
+ end
+
+ def contact_attributes
+ {
+ name: contact_name,
+ phone_number: phone_number,
+ additional_attributes: additional_attributes
+ }
+ end
+
+ def contact_name
+ params[:ProfileName].presence || formatted_phone_number
+ end
+
+ def additional_attributes
+ if twilio_channel.sms?
+ {
+ from_zip_code: params[:FromZip],
+ from_country: params[:FromCountry],
+ from_state: params[:FromState]
+ }
+ else
+ {}
+ end
+ end
+
+ def attach_files
+ num_media = params[:NumMedia].to_i
+ return if num_media.zero?
+
+ num_media.times do |i|
+ media_url = params[:"MediaUrl#{i}"]
+ attach_single_file(media_url) if media_url.present?
+ end
+ end
+
+ def attach_single_file(media_url)
+ attachment_file = download_attachment_file(media_url)
+ return if attachment_file.blank?
+
+ @message.attachments.new(
+ account_id: @message.account_id,
+ file_type: file_type(attachment_file.content_type),
+ file: {
+ io: attachment_file,
+ filename: attachment_file.original_filename,
+ content_type: attachment_file.content_type
+ }
+ )
+ end
+
+ def download_attachment_file(media_url)
+ download_with_auth(media_url)
+ rescue Down::Error, Down::ClientError => e
+ handle_download_attachment_error(e, media_url)
+ end
+
+ def download_with_auth(media_url)
+ auth_credentials = if twilio_channel.api_key_sid.present?
+ # When using api_key_sid, the auth token should be the api_secret_key
+ [twilio_channel.api_key_sid, twilio_channel.auth_token]
+ else
+ # When using account_sid, the auth token is the account's auth token
+ [twilio_channel.account_sid, twilio_channel.auth_token]
+ end
+
+ Down.download(media_url, http_basic_authentication: auth_credentials)
+ end
+
+ def handle_download_attachment_error(error, media_url)
+ Rails.logger.info "Error downloading attachment from Twilio: #{error.message}: Retrying without auth"
+ Down.download(media_url)
+ rescue StandardError => e
+ Rails.logger.info "Error downloading attachment from Twilio: #{e.message}: Skipping"
+ nil
+ end
+
+ def location_message?
+ params[:MessageType] == 'location' && params[:Latitude].present? && params[:Longitude].present?
+ end
+
+ def attach_location
+ @message.attachments.new(
+ account_id: @message.account_id,
+ file_type: :location,
+ coordinates_lat: params[:Latitude].to_f,
+ coordinates_long: params[:Longitude].to_f
+ )
+ end
+
+ def update_contact_name_if_needed
+ return if params[:ProfileName].blank?
+ return if @contact.name == params[:ProfileName]
+
+ # Only update if current name exactly matches the phone number or formatted phone number
+ return unless contact_name_matches_phone_number?
+
+ @contact.update!(name: params[:ProfileName])
+ end
+
+ def contact_name_matches_phone_number?
+ @contact.name == phone_number || @contact.name == formatted_phone_number
+ end
+end
diff --git a/app/services/twilio/oneoff_sms_campaign_service.rb b/app/services/twilio/oneoff_sms_campaign_service.rb
new file mode 100644
index 0000000..391b043
--- /dev/null
+++ b/app/services/twilio/oneoff_sms_campaign_service.rb
@@ -0,0 +1,35 @@
+class Twilio::OneoffSmsCampaignService
+ pattr_initialize [:campaign!]
+
+ def perform
+ raise "Invalid campaign #{campaign.id}" if campaign.inbox.inbox_type != 'Twilio SMS' || !campaign.one_off?
+ raise 'Completed Campaign' if campaign.completed?
+
+ # marks campaign completed so that other jobs won't pick it up
+ campaign.completed!
+
+ audience_label_ids = campaign.audience.select { |audience| audience['type'] == 'Label' }.pluck('id')
+ audience_labels = campaign.account.labels.where(id: audience_label_ids).pluck(:title)
+ process_audience(audience_labels)
+ end
+
+ private
+
+ delegate :inbox, to: :campaign
+ delegate :channel, to: :inbox
+
+ def process_audience(audience_labels)
+ campaign.account.contacts.tagged_with(audience_labels, any: true).each do |contact|
+ next if contact.phone_number.blank?
+
+ content = Liquid::CampaignTemplateService.new(campaign: campaign, contact: contact).call(campaign.message)
+
+ begin
+ channel.send_message(to: contact.phone_number, body: content)
+ rescue Twilio::REST::TwilioError, Twilio::REST::RestError => e
+ Rails.logger.error("[Twilio Campaign #{campaign.id}] Failed to send to #{contact.phone_number}: #{e.message}")
+ next
+ end
+ end
+ end
+end
diff --git a/app/services/twilio/send_on_twilio_service.rb b/app/services/twilio/send_on_twilio_service.rb
new file mode 100644
index 0000000..71e67aa
--- /dev/null
+++ b/app/services/twilio/send_on_twilio_service.rb
@@ -0,0 +1,100 @@
+class Twilio::SendOnTwilioService < Base::SendOnChannelService
+ def send_csat_template_message(phone_number:, content_sid:, content_variables: {})
+ send_params = {
+ to: phone_number,
+ content_sid: content_sid
+ }
+
+ send_params[:content_variables] = content_variables.to_json if content_variables.present?
+ send_params[:status_callback] = channel.send(:twilio_delivery_status_index_url) if channel.respond_to?(:twilio_delivery_status_index_url, true)
+
+ # Add messaging service or from number
+ send_params = send_params.merge(channel.send(:send_message_from))
+
+ twilio_message = channel.send(:client).messages.create(**send_params)
+
+ { success: true, message_id: twilio_message.sid }
+ rescue Twilio::REST::TwilioError, Twilio::REST::RestError => e
+ Rails.logger.error "Failed to send Twilio template message: #{e.message}"
+ { success: false, error: e.message }
+ end
+
+ private
+
+ def channel_class
+ Channel::TwilioSms
+ end
+
+ def perform_reply
+ begin
+ twilio_message = if template_params.present?
+ send_template_message
+ else
+ channel.send_message(**message_params)
+ end
+ rescue Twilio::REST::TwilioError, Twilio::REST::RestError => e
+ Messages::StatusUpdateService.new(message, 'failed', e.message).perform
+ end
+ message.update!(source_id: twilio_message.sid) if twilio_message
+ end
+
+ def send_template_message
+ content_sid, content_variables = process_template_params
+
+ if content_sid.blank?
+ message.update!(status: :failed, external_error: 'Template not found')
+ return nil
+ end
+
+ send_params = {
+ to: contact_inbox.source_id,
+ content_sid: content_sid
+ }
+
+ send_params[:content_variables] = content_variables.to_json if content_variables.present?
+ send_params[:status_callback] = channel.send(:twilio_delivery_status_index_url) if channel.respond_to?(:twilio_delivery_status_index_url, true)
+
+ # Add messaging service or from number
+ send_params = send_params.merge(channel.send(:send_message_from))
+
+ channel.send(:client).messages.create(**send_params)
+ end
+
+ def template_params
+ message.additional_attributes && message.additional_attributes['template_params']
+ end
+
+ def process_template_params
+ return [nil, nil] if template_params.blank?
+
+ Twilio::TemplateProcessorService.new(
+ channel: channel,
+ template_params: template_params,
+ message: message
+ ).call
+ end
+
+ def message_params
+ {
+ body: message.outgoing_content,
+ to: contact_inbox.source_id,
+ media_url: attachments
+ }
+ end
+
+ def attachments
+ message.attachments.map(&:download_url)
+ end
+
+ def inbox
+ @inbox ||= message.inbox
+ end
+
+ def channel
+ @channel ||= inbox.channel
+ end
+
+ def outgoing_message?
+ message.outgoing? || message.template?
+ end
+end
diff --git a/app/services/twilio/template_processor_service.rb b/app/services/twilio/template_processor_service.rb
new file mode 100644
index 0000000..2801f74
--- /dev/null
+++ b/app/services/twilio/template_processor_service.rb
@@ -0,0 +1,121 @@
+class Twilio::TemplateProcessorService
+ pattr_initialize [:channel!, :template_params, :message]
+
+ def call
+ return [nil, nil] if template_params.blank?
+
+ template = find_template
+ return [nil, nil] if template.blank?
+
+ content_variables = build_content_variables(template)
+ [template['content_sid'], content_variables]
+ end
+
+ private
+
+ def find_template
+ channel.content_templates&.dig('templates')&.find do |template|
+ template['friendly_name'] == template_params['name'] &&
+ template['language'] == (template_params['language'] || 'en') &&
+ template['status'] == 'approved'
+ end
+ end
+
+ def build_content_variables(template)
+ case template['template_type']
+ when 'text', 'quick_reply', 'call_to_action'
+ convert_text_template(template_params) # Text, quick reply and call-to-action templates use body variables
+ when 'media'
+ convert_media_template(template_params)
+ else
+ {}
+ end
+ end
+
+ def convert_text_template(chatwoot_params)
+ return process_key_value_params(chatwoot_params['processed_params']) if chatwoot_params['processed_params'].present?
+
+ process_whatsapp_format_params(chatwoot_params['parameters'])
+ end
+
+ def process_key_value_params(processed_params)
+ content_variables = {}
+ processed_params.each do |key, value|
+ content_variables[key.to_s] = value.to_s
+ end
+ content_variables
+ end
+
+ def process_whatsapp_format_params(parameters)
+ content_variables = {}
+ parameter_index = 1
+
+ parameters&.each do |component|
+ next unless component['type'] == 'body'
+
+ component['parameters']&.each do |param|
+ content_variables[parameter_index.to_s] = param['text']
+ parameter_index += 1
+ end
+ end
+
+ content_variables
+ end
+
+ def convert_media_template(chatwoot_params)
+ content_variables = {}
+
+ # Handle processed_params format (key-value pairs)
+ if chatwoot_params['processed_params'].present?
+ chatwoot_params['processed_params'].each do |key, value|
+ content_variables[key.to_s] = value.to_s
+ end
+ else
+ # Handle parameters format (WhatsApp Cloud API format)
+ parameter_index = 1
+ chatwoot_params['parameters']&.each do |component|
+ parameter_index = process_component(component, content_variables, parameter_index)
+ end
+ end
+
+ content_variables
+ end
+
+ def process_component(component, content_variables, parameter_index)
+ case component['type']
+ when 'header'
+ process_media_header(component, content_variables, parameter_index)
+ when 'body'
+ process_body_parameters(component, content_variables, parameter_index)
+ else
+ parameter_index
+ end
+ end
+
+ def process_media_header(component, content_variables, parameter_index)
+ media_param = component['parameters']&.first
+ return parameter_index unless media_param
+
+ media_link = extract_media_link(media_param)
+ if media_link
+ content_variables[parameter_index.to_s] = media_link
+ parameter_index + 1
+ else
+ parameter_index
+ end
+ end
+
+ def extract_media_link(media_param)
+ media_param.dig('image', 'link') ||
+ media_param.dig('video', 'link') ||
+ media_param.dig('document', 'link')
+ end
+
+ def process_body_parameters(component, content_variables, parameter_index)
+ component['parameters']&.each do |param|
+ content_variables[parameter_index.to_s] = param['text']
+ parameter_index += 1
+ end
+ parameter_index
+ end
+end
diff --git a/app/services/twilio/template_sync_service.rb b/app/services/twilio/template_sync_service.rb
new file mode 100644
index 0000000..747c50f
--- /dev/null
+++ b/app/services/twilio/template_sync_service.rb
@@ -0,0 +1,120 @@
+class Twilio::TemplateSyncService
+ pattr_initialize [:channel!]
+
+ def call
+ fetch_templates_from_twilio
+ update_channel_templates
+ mark_templates_updated
+ rescue Twilio::REST::TwilioError => e
+ Rails.logger.error("Twilio template sync failed: #{e.message}")
+ false
+ end
+
+ private
+
+ def fetch_templates_from_twilio
+ @templates = client.content.v1.contents.list(limit: 1000)
+ end
+
+ def update_channel_templates
+ formatted_templates = @templates.map { |template| format_template(template) }
+
+ channel.update!(
+ content_templates: { templates: formatted_templates },
+ content_templates_last_updated: Time.current
+ )
+ end
+
+ def format_template(template)
+ {
+ content_sid: template.sid,
+ friendly_name: template.friendly_name,
+ language: template.language,
+ status: derive_status(template),
+ template_type: derive_template_type(template),
+ media_type: derive_media_type(template),
+ variables: template.variables || {},
+ category: derive_category(template),
+ body: extract_body_content(template),
+ types: template.types,
+ created_at: template.date_created,
+ updated_at: template.date_updated
+ }
+ end
+
+ def mark_templates_updated
+ channel.update!(content_templates_last_updated: Time.current)
+ end
+
+ def client
+ @client ||= channel.send(:client)
+ end
+
+ def derive_status(_template)
+ # For now, assume all fetched templates are approved
+ # In the future, this could check approval status from Twilio
+ 'approved'
+ end
+
+ def derive_template_type(template)
+ template_types = template.types.keys
+
+ if template_types.include?('twilio/media')
+ 'media'
+ elsif template_types.include?('twilio/quick-reply')
+ 'quick_reply'
+ elsif template_types.include?('twilio/call-to-action')
+ 'call_to_action'
+ elsif template_types.include?('twilio/catalog')
+ 'catalog'
+ else
+ 'text'
+ end
+ end
+
+ def derive_media_type(template)
+ return nil unless derive_template_type(template) == 'media'
+
+ media_content = template.types['twilio/media']
+ return nil unless media_content
+
+ if media_content['image']
+ 'image'
+ elsif media_content['video']
+ 'video'
+ elsif media_content['document']
+ 'document'
+ end
+ end
+
+ def derive_category(template)
+ # Map template friendly names or other attributes to categories
+ # For now, use utility as default
+ case template.friendly_name
+ when /marketing|promo|offer|sale/i
+ 'marketing'
+ when /auth|otp|verify|code/i
+ 'authentication'
+ else
+ 'utility'
+ end
+ end
+
+ def extract_body_content(template)
+ template_types = template.types
+
+ if template_types['twilio/text']
+ template_types['twilio/text']['body']
+ elsif template_types['twilio/media']
+ template_types['twilio/media']['body']
+ elsif template_types['twilio/quick-reply']
+ template_types['twilio/quick-reply']['body']
+ elsif template_types['twilio/call-to-action']
+ template_types['twilio/call-to-action']['body']
+ elsif template_types['twilio/catalog']
+ template_types['twilio/catalog']['body']
+ else
+ ''
+ end
+ end
+end
diff --git a/app/services/twilio/webhook_setup_service.rb b/app/services/twilio/webhook_setup_service.rb
new file mode 100644
index 0000000..b949bf3
--- /dev/null
+++ b/app/services/twilio/webhook_setup_service.rb
@@ -0,0 +1,51 @@
+class Twilio::WebhookSetupService
+ include Rails.application.routes.url_helpers
+
+ pattr_initialize [:inbox!]
+
+ def perform
+ if channel.messaging_service_sid?
+ update_messaging_service
+ else
+ update_phone_number
+ end
+ end
+
+ private
+
+ def update_messaging_service
+ twilio_client
+ .messaging.services(channel.messaging_service_sid)
+ .update(
+ inbound_method: 'POST',
+ inbound_request_url: twilio_callback_index_url,
+ use_inbound_webhook_on_number: false
+ )
+ end
+
+ def update_phone_number
+ if phone_numbers.empty?
+ Rails.logger.warn "TWILIO_PHONE_NUMBER_NOT_FOUND: #{channel.phone_number}"
+ else
+ twilio_client
+ .incoming_phone_numbers(phonenumber_sid)
+ .update(sms_method: 'POST', sms_url: twilio_callback_index_url)
+ end
+ end
+
+ def phonenumber_sid
+ phone_numbers.first.sid
+ end
+
+ def phone_numbers
+ @phone_numbers ||= twilio_client.incoming_phone_numbers.list(phone_number: channel.phone_number)
+ end
+
+ def channel
+ @channel ||= inbox.channel
+ end
+
+ def twilio_client
+ @twilio_client ||= ::Twilio::REST::Client.new(channel.account_sid, channel.auth_token)
+ end
+end
diff --git a/app/services/twitter/direct_message_parser_service.rb b/app/services/twitter/direct_message_parser_service.rb
new file mode 100644
index 0000000..5383e2e
--- /dev/null
+++ b/app/services/twitter/direct_message_parser_service.rb
@@ -0,0 +1,126 @@
+class Twitter::DirectMessageParserService < Twitter::WebhooksBaseService
+ pattr_initialize [:payload]
+
+ def perform
+ return if source_app_id == parent_app_id
+
+ set_inbox
+ ensure_contacts
+ set_conversation
+ @message = @conversation.messages.create!(
+ content: message_create_data['message_data']['text'],
+ account_id: @inbox.account_id,
+ inbox_id: @inbox.id,
+ message_type: outgoing_message? ? :outgoing : :incoming,
+ sender: @contact,
+ source_id: direct_message_data['id']
+ )
+ attach_files
+ end
+
+ private
+
+ def attach_files
+ return if message_create_data['message_data']['attachment'].blank?
+
+ save_media
+ @message
+ end
+
+ def save_media_urls(file)
+ @message.content_attributes[:media_url] = file['media_url']
+ @message.content_attributes[:display_url] = file['display_url']
+ @message.save!
+ end
+
+ def direct_message_events_params
+ payload['direct_message_events']
+ end
+
+ def direct_message_data
+ direct_message_events_params.first
+ end
+
+ def message_create_data
+ direct_message_data['message_create']
+ end
+
+ def source_app_id
+ message_create_data['source_app_id']
+ end
+
+ def parent_app_id
+ ENV.fetch('TWITTER_APP_ID', '')
+ end
+
+ def media
+ message_create_data['message_data']['attachment']['media']
+ end
+
+ def users
+ payload[:users]
+ end
+
+ def ensure_contacts
+ users.each do |key, user|
+ next if key == profile_id
+
+ find_or_create_contact(user)
+ end
+ end
+
+ def conversation_params
+ {
+ account_id: @inbox.account_id,
+ inbox_id: @inbox.id,
+ contact_id: @contact.id,
+ contact_inbox_id: @contact_inbox.id,
+ additional_attributes: {
+ type: 'direct_message'
+ }
+ }
+ end
+
+ def set_conversation
+ @conversation = @contact_inbox.conversations.where("additional_attributes ->> 'type' = 'direct_message'").first
+ return if @conversation
+
+ @conversation = ::Conversation.create!(conversation_params)
+ end
+
+ def outgoing_message?
+ message_create_data['sender_id'] == @inbox.channel.profile_id
+ end
+
+ def api_client
+ @api_client ||= begin
+ consumer = OAuth::Consumer.new(ENV.fetch('TWITTER_CONSUMER_KEY', nil), ENV.fetch('TWITTER_CONSUMER_SECRET', nil),
+ { site: 'https://api.twitter.com' })
+ token = { oauth_token: @inbox.channel.twitter_access_token, oauth_token_secret: @inbox.channel.twitter_access_token_secret }
+ OAuth::AccessToken.from_hash(consumer, token)
+ end
+ end
+
+ def save_media
+ save_media_urls(media)
+ response = api_client.get(media['media_url'], [])
+
+ temp_file = Tempfile.new('twitter_attachment')
+ temp_file.binmode
+ temp_file << response.body
+ temp_file.rewind
+
+ return unless media['type'] == 'photo'
+
+ @message.attachments.new(
+ account_id: @inbox.account_id,
+ file_type: 'image',
+ file: {
+ io: temp_file,
+ filename: 'twitter_attachment',
+ content_type: media['type']
+ }
+ )
+ @message.save!
+ end
+end
diff --git a/app/services/twitter/send_on_twitter_service.rb b/app/services/twitter/send_on_twitter_service.rb
new file mode 100644
index 0000000..83086bd
--- /dev/null
+++ b/app/services/twitter/send_on_twitter_service.rb
@@ -0,0 +1,64 @@
+class Twitter::SendOnTwitterService < Base::SendOnChannelService
+ pattr_initialize [:message!]
+
+ private
+
+ delegate :additional_attributes, to: :contact
+
+ def channel_class
+ Channel::TwitterProfile
+ end
+
+ def perform_reply
+ conversation_type == 'tweet' ? send_tweet_reply : send_direct_message
+ end
+
+ def twitter_client
+ Twitty::Facade.new do |config|
+ config.consumer_key = ENV.fetch('TWITTER_CONSUMER_KEY', nil)
+ config.consumer_secret = ENV.fetch('TWITTER_CONSUMER_SECRET', nil)
+ config.access_token = channel.twitter_access_token
+ config.access_token_secret = channel.twitter_access_token_secret
+ config.base_url = 'https://api.twitter.com'
+ config.environment = ENV.fetch('TWITTER_ENVIRONMENT', '')
+ end
+ end
+
+ def conversation_type
+ conversation.additional_attributes['type']
+ end
+
+ def screen_name
+ return "@#{reply_to_message.inbox.name}" if reply_to_message.outgoing?
+
+ "@#{reply_to_message.sender&.additional_attributes.try(:[], 'screen_name') || ''}"
+ end
+
+ def send_direct_message
+ twitter_client.send_direct_message(
+ recipient_id: contact_inbox.source_id,
+ message: message.outgoing_content
+ )
+ end
+
+ def reply_to_message
+ @reply_to_message ||= if message.in_reply_to
+ conversation.messages.find(message.in_reply_to)
+ else
+ conversation.messages.incoming.last
+ end
+ end
+
+ def send_tweet_reply
+ response = twitter_client.send_tweet_reply(
+ reply_to_tweet_id: reply_to_message.source_id,
+ tweet: "#{screen_name} #{message.outgoing_content}"
+ )
+ if response.status == '200'
+ tweet_data = response.body
+ message.update!(source_id: tweet_data['id_str'])
+ else
+ Rails.logger.error "TWITTER_TWEET_REPLY_ERROR #{response.body}"
+ end
+ end
+end
diff --git a/app/services/twitter/tweet_parser_service.rb b/app/services/twitter/tweet_parser_service.rb
new file mode 100644
index 0000000..207f14a
--- /dev/null
+++ b/app/services/twitter/tweet_parser_service.rb
@@ -0,0 +1,92 @@
+class Twitter::TweetParserService < Twitter::WebhooksBaseService
+ pattr_initialize [:payload]
+
+ def perform
+ set_inbox
+
+ return if !tweets_enabled? || message_already_exist? || user_has_blocked?
+
+ create_message
+ end
+
+ private
+
+ def message_type
+ user['id'] == profile_id ? :outgoing : :incoming
+ end
+
+ def tweet_text
+ tweet_data['truncated'] ? tweet_data['extended_tweet']['full_text'] : tweet_data['text']
+ end
+
+ def tweet_create_events_params
+ payload['tweet_create_events']
+ end
+
+ def tweet_data
+ tweet_create_events_params.first
+ end
+
+ def user
+ tweet_data['user']
+ end
+
+ def tweet_id
+ tweet_data['id'].to_s
+ end
+
+ def user_has_blocked?
+ payload['user_has_blocked'] == true
+ end
+
+ def tweets_enabled?
+ @inbox.channel.tweets_enabled?
+ end
+
+ def parent_tweet_id
+ tweet_data['in_reply_to_status_id_str'].nil? ? tweet_data['id'].to_s : tweet_data['in_reply_to_status_id_str']
+ end
+
+ def conversation_params
+ {
+ account_id: @inbox.account_id,
+ inbox_id: @inbox.id,
+ contact_id: @contact.id,
+ contact_inbox_id: @contact_inbox.id,
+ additional_attributes: {
+ type: 'tweet',
+ tweet_id: parent_tweet_id,
+ tweet_source: tweet_data['source']
+ }
+ }
+ end
+
+ def set_conversation
+ tweet_conversations = @contact_inbox.conversations.where("additional_attributes ->> 'tweet_id' = ?", parent_tweet_id)
+ @conversation = tweet_conversations.first
+ return if @conversation
+
+ tweet_message = @inbox.messages.find_by(source_id: parent_tweet_id)
+ @conversation = tweet_message.conversation if tweet_message
+ return if @conversation
+
+ @conversation = ::Conversation.create!(conversation_params)
+ end
+
+ def message_already_exist?
+ @inbox.messages.find_by(source_id: tweet_id)
+ end
+
+ def create_message
+ find_or_create_contact(user)
+ set_conversation
+ @conversation.messages.create!(
+ account_id: @inbox.account_id,
+ sender: @contact,
+ content: tweet_text,
+ inbox_id: @inbox.id,
+ message_type: message_type,
+ source_id: tweet_id
+ )
+ end
+end
diff --git a/app/services/twitter/webhook_subscribe_service.rb b/app/services/twitter/webhook_subscribe_service.rb
new file mode 100644
index 0000000..f052bf5
--- /dev/null
+++ b/app/services/twitter/webhook_subscribe_service.rb
@@ -0,0 +1,57 @@
+class Twitter::WebhookSubscribeService
+ include Rails.application.routes.url_helpers
+
+ pattr_initialize [:inbox_id]
+
+ def perform
+ ensure_webhook
+ unless subscription?
+ subscribe_response = twitter_client.create_subscription
+ raise StandardError, 'Twitter Subscription Failed' unless subscribe_response.status == '204'
+ end
+
+ true
+ end
+
+ private
+
+ delegate :channel, to: :inbox
+ delegate :twitter_client, to: :channel
+
+ def inbox
+ Inbox.find(inbox_id)
+ end
+
+ def twitter_url
+ webhooks_twitter_url(protocol: 'https')
+ end
+
+ def ensure_webhook
+ webhooks = fetch_webhooks
+ return true if webhooks&.first&.try(:[], 'url') == twitter_url
+
+ # twitter supports only one webhook url per environment
+ # so we will delete the existing one if its not chatwoot
+ unregister_webhook(webhooks.first) if webhooks&.first
+ register_webhook
+ end
+
+ def unregister_webhook(webhook)
+ unregister_response = twitter_client.unregister_webhook(id: webhook.try(:[], 'id'))
+ Rails.logger.info "TWITTER_UNREGISTER_WEBHOOK: #{unregister_response.body}"
+ end
+
+ def register_webhook
+ register_response = twitter_client.register_webhook(url: twitter_url)
+ Rails.logger.info "TWITTER_REGISTER_WEBHOOK: #{register_response.body}"
+ end
+
+ def subscription?
+ response = twitter_client.fetch_subscriptions
+ response.status == '204'
+ end
+
+ def fetch_webhooks
+ twitter_client.fetch_webhooks.body
+ end
+end
diff --git a/app/services/twitter/webhooks_base_service.rb b/app/services/twitter/webhooks_base_service.rb
new file mode 100644
index 0000000..5ad8221
--- /dev/null
+++ b/app/services/twitter/webhooks_base_service.rb
@@ -0,0 +1,35 @@
+class Twitter::WebhooksBaseService
+ private
+
+ def profile_id
+ payload[:for_user_id]
+ end
+
+ def additional_contact_attributes(user)
+ {
+ screen_name: user['screen_name'],
+ location: user['location'],
+ url: user['url'],
+ description: user['description'],
+ followers_count: user['followers_count'],
+ friends_count: user['friends_count']
+ }
+ end
+
+ def set_inbox
+ twitter_profile = ::Channel::TwitterProfile.find_by(profile_id: profile_id)
+ @inbox = ::Inbox.find_by!(channel: twitter_profile)
+ end
+
+ def find_or_create_contact(user)
+ @contact_inbox = @inbox.contact_inboxes.where(source_id: user['id']).first
+ @contact = @contact_inbox.contact if @contact_inbox
+ return if @contact
+
+ @contact_inbox = @inbox.channel.create_contact_inbox(
+ user['id'], user['name'], additional_contact_attributes(user)
+ )
+ @contact = @contact_inbox.contact
+ Avatar::AvatarFromUrlJob.perform_later(@contact, user['profile_image_url']) if user['profile_image_url']
+ end
+end
diff --git a/app/services/whatsapp/channel_creation_service.rb b/app/services/whatsapp/channel_creation_service.rb
new file mode 100644
index 0000000..74882c7
--- /dev/null
+++ b/app/services/whatsapp/channel_creation_service.rb
@@ -0,0 +1,73 @@
+class Whatsapp::ChannelCreationService
+ def initialize(account, waba_info, phone_info, access_token)
+ @account = account
+ @waba_info = waba_info
+ @phone_info = phone_info
+ @access_token = access_token
+ end
+
+ def perform
+ validate_parameters!
+
+ existing_channel = find_existing_channel
+ raise I18n.t('errors.whatsapp.phone_number_already_exists', phone_number: existing_channel.phone_number) if existing_channel
+
+ create_channel_with_inbox
+ end
+
+ private
+
+ def validate_parameters!
+ raise ArgumentError, 'Account is required' if @account.blank?
+ raise ArgumentError, 'WABA info is required' if @waba_info.blank?
+ raise ArgumentError, 'Phone info is required' if @phone_info.blank?
+ raise ArgumentError, 'Access token is required' if @access_token.blank?
+ end
+
+ def find_existing_channel
+ Channel::Whatsapp.find_by(
+ phone_number: @phone_info[:phone_number]
+ )
+ end
+
+ def create_channel_with_inbox
+ ActiveRecord::Base.transaction do
+ channel = build_channel
+ create_inbox(channel)
+ channel
+ end
+ end
+
+ def build_channel
+ Channel::Whatsapp.build(
+ account: @account,
+ phone_number: @phone_info[:phone_number],
+ provider: 'whatsapp_cloud',
+ provider_config: build_provider_config
+ )
+ end
+
+ def build_provider_config
+ {
+ api_key: @access_token,
+ phone_number_id: @phone_info[:phone_number_id],
+ business_account_id: @waba_info[:waba_id],
+ source: 'embedded_signup'
+ }
+ end
+
+ def create_inbox(channel)
+ inbox_name = build_inbox_name
+
+ Inbox.create!(
+ account: @account,
+ name: inbox_name,
+ channel: channel
+ )
+ end
+
+ def build_inbox_name
+ business_name = @phone_info[:business_name] || @waba_info[:business_name]
+ "#{business_name} WhatsApp"
+ end
+end
diff --git a/app/services/whatsapp/csat_template_service.rb b/app/services/whatsapp/csat_template_service.rb
new file mode 100644
index 0000000..9bdbef8
--- /dev/null
+++ b/app/services/whatsapp/csat_template_service.rb
@@ -0,0 +1,139 @@
+class Whatsapp::CsatTemplateService
+ DEFAULT_BUTTON_TEXT = 'Please rate us'.freeze
+ DEFAULT_LANGUAGE = 'en'.freeze
+ WHATSAPP_API_VERSION = 'v14.0'.freeze
+ TEMPLATE_CATEGORY = 'MARKETING'.freeze
+ TEMPLATE_STATUS_PENDING = 'PENDING'.freeze
+
+ def initialize(whatsapp_channel)
+ @whatsapp_channel = whatsapp_channel
+ end
+
+ def create_template(template_config)
+ base_name = template_config[:template_name]
+ template_name = generate_template_name(base_name)
+ template_config_with_name = template_config.merge(template_name: template_name)
+ request_body = build_template_request_body(template_config_with_name)
+ response = send_template_creation_request(request_body)
+ process_template_creation_response(response, template_config_with_name)
+ end
+
+ def delete_template(template_name = nil)
+ template_name ||= CsatTemplateNameService.csat_template_name(@whatsapp_channel.inbox.id)
+ response = HTTParty.delete(
+ "#{business_account_path}/message_templates?name=#{template_name}",
+ headers: api_headers
+ )
+ { success: response.success?, response_body: response.body }
+ end
+
+ def get_template_status(template_name)
+ response = HTTParty.get("#{business_account_path}/message_templates?name=#{template_name}", headers: api_headers)
+
+ if response.success? && response['data']&.any?
+ template_data = response['data'].first
+ {
+ success: true,
+ template: {
+ id: template_data['id'], name: template_data['name'],
+ status: template_data['status'], language: template_data['language']
+ }
+ }
+ else
+ { success: false, error: 'Template not found' }
+ end
+ rescue StandardError => e
+ Rails.logger.error "Error fetching template status: #{e.message}"
+ { success: false, error: e.message }
+ end
+
+ private
+
+ def generate_template_name(base_name)
+ current_template_name = current_template_name_from_config
+ CsatTemplateNameService.generate_next_template_name(base_name, @whatsapp_channel.inbox.id, current_template_name)
+ end
+
+ def current_template_name_from_config
+ @whatsapp_channel.inbox.csat_config&.dig('template', 'name')
+ end
+
+ def build_template_request_body(template_config)
+ {
+ name: template_config[:template_name],
+ language: template_config[:language] || DEFAULT_LANGUAGE,
+ category: TEMPLATE_CATEGORY,
+ components: build_template_components(template_config)
+ }
+ end
+
+ def build_template_components(template_config)
+ [
+ build_body_component(template_config[:message]),
+ build_buttons_component(template_config)
+ ]
+ end
+
+ def build_body_component(message)
+ {
+ type: 'BODY',
+ text: message
+ }
+ end
+
+ def build_buttons_component(template_config)
+ {
+ type: 'BUTTONS',
+ buttons: [
+ {
+ type: 'URL',
+ text: template_config[:button_text] || DEFAULT_BUTTON_TEXT,
+ url: "#{template_config[:base_url]}/survey/responses/{{1}}",
+ example: ['12345']
+ }
+ ]
+ }
+ end
+
+ def send_template_creation_request(request_body)
+ HTTParty.post(
+ "#{business_account_path}/message_templates",
+ headers: api_headers,
+ body: request_body.to_json
+ )
+ end
+
+ def process_template_creation_response(response, template_config = {})
+ if response.success?
+ {
+ success: true,
+ template_id: response['id'],
+ template_name: response['name'] || template_config[:template_name],
+ language: template_config[:language] || DEFAULT_LANGUAGE,
+ status: TEMPLATE_STATUS_PENDING
+ }
+ else
+ Rails.logger.error "WhatsApp template creation failed: #{response.code} - #{response.body}"
+ {
+ success: false,
+ error: 'Template creation failed',
+ response_body: response.body
+ }
+ end
+ end
+
+ def business_account_path
+ "#{api_base_path}/#{WHATSAPP_API_VERSION}/#{@whatsapp_channel.provider_config['business_account_id']}"
+ end
+
+ def api_headers
+ {
+ 'Authorization' => "Bearer #{@whatsapp_channel.provider_config['api_key']}",
+ 'Content-Type' => 'application/json'
+ }
+ end
+
+ def api_base_path
+ ENV.fetch('WHATSAPP_CLOUD_BASE_URL', 'https://graph.facebook.com')
+ end
+end
diff --git a/app/services/whatsapp/embedded_signup_service.rb b/app/services/whatsapp/embedded_signup_service.rb
new file mode 100644
index 0000000..52273bc
--- /dev/null
+++ b/app/services/whatsapp/embedded_signup_service.rb
@@ -0,0 +1,88 @@
+class Whatsapp::EmbeddedSignupService
+ def initialize(account:, params:, inbox_id: nil)
+ @account = account
+ @code = params[:code]
+ @business_id = params[:business_id]
+ @waba_id = params[:waba_id]
+ @phone_number_id = params[:phone_number_id]
+ @inbox_id = inbox_id
+ end
+
+ def perform
+ validate_parameters!
+
+ access_token = exchange_code_for_token
+ phone_info = fetch_phone_info(access_token)
+ validate_token_access(access_token)
+
+ channel = create_or_reauthorize_channel(access_token, phone_info)
+ # NOTE: We call setup_webhooks explicitly here instead of relying on after_commit callback because:
+ # 1. Reauthorization flow updates an existing channel (not a create), so after_commit on: :create won't trigger
+ # 2. We need to run check_channel_health_and_prompt_reauth after webhook setup completes
+ # 3. The channel is marked with source: 'embedded_signup' to skip the after_commit callback
+ channel.setup_webhooks
+ check_channel_health_and_prompt_reauth(channel)
+ channel
+
+ rescue StandardError => e
+ Rails.logger.error("[WHATSAPP] Embedded signup failed: #{e.message}")
+ raise e
+ end
+
+ private
+
+ def exchange_code_for_token
+ Whatsapp::TokenExchangeService.new(@code).perform
+ end
+
+ def fetch_phone_info(access_token)
+ Whatsapp::PhoneInfoService.new(@waba_id, @phone_number_id, access_token).perform
+ end
+
+ def validate_token_access(access_token)
+ Whatsapp::TokenValidationService.new(access_token, @waba_id).perform
+ end
+
+ def create_or_reauthorize_channel(access_token, phone_info)
+ if @inbox_id.present?
+ Whatsapp::ReauthorizationService.new(
+ account: @account,
+ inbox_id: @inbox_id,
+ phone_number_id: @phone_number_id,
+ business_id: @business_id
+ ).perform(access_token, phone_info)
+ else
+ waba_info = { waba_id: @waba_id, business_name: phone_info[:business_name] }
+ Whatsapp::ChannelCreationService.new(@account, waba_info, phone_info, access_token).perform
+ end
+ end
+
+ def check_channel_health_and_prompt_reauth(channel)
+ health_data = Whatsapp::HealthService.new(channel).fetch_health_status
+ return unless health_data
+
+ if channel_in_pending_state?(health_data)
+ channel.prompt_reauthorization!
+ else
+ Rails.logger.info "[WHATSAPP] Channel #{channel.phone_number} health check passed"
+ end
+ rescue StandardError => e
+ Rails.logger.error "[WHATSAPP] Health check failed for channel #{channel.phone_number}: #{e.message}"
+ end
+
+ def channel_in_pending_state?(health_data)
+ health_data[:platform_type] == 'NOT_APPLICABLE' ||
+ health_data.dig(:throughput, 'level') == 'NOT_APPLICABLE'
+ end
+
+ def validate_parameters!
+ missing_params = []
+ missing_params << 'code' if @code.blank?
+ missing_params << 'business_id' if @business_id.blank?
+ missing_params << 'waba_id' if @waba_id.blank?
+
+ return if missing_params.empty?
+
+ raise ArgumentError, "Required parameters are missing: #{missing_params.join(', ')}"
+ end
+end
diff --git a/app/services/whatsapp/facebook_api_client.rb b/app/services/whatsapp/facebook_api_client.rb
new file mode 100644
index 0000000..55ce4e6
--- /dev/null
+++ b/app/services/whatsapp/facebook_api_client.rb
@@ -0,0 +1,105 @@
+class Whatsapp::FacebookApiClient
+ BASE_URI = 'https://graph.facebook.com'.freeze
+
+ def initialize(access_token = nil)
+ @access_token = access_token
+ @api_version = GlobalConfigService.load('WHATSAPP_API_VERSION', 'v22.0')
+ end
+
+ def exchange_code_for_token(code)
+ response = HTTParty.get(
+ "#{BASE_URI}/#{@api_version}/oauth/access_token",
+ query: {
+ client_id: GlobalConfigService.load('WHATSAPP_APP_ID', ''),
+ client_secret: GlobalConfigService.load('WHATSAPP_APP_SECRET', ''),
+ code: code
+ }
+ )
+
+ handle_response(response, 'Token exchange failed')
+ end
+
+ def fetch_phone_numbers(waba_id)
+ response = HTTParty.get(
+ "#{BASE_URI}/#{@api_version}/#{waba_id}/phone_numbers",
+ query: { access_token: @access_token }
+ )
+
+ handle_response(response, 'WABA phone numbers fetch failed')
+ end
+
+ def debug_token(input_token)
+ response = HTTParty.get(
+ "#{BASE_URI}/#{@api_version}/debug_token",
+ query: {
+ input_token: input_token,
+ access_token: build_app_access_token
+ }
+ )
+
+ handle_response(response, 'Token validation failed')
+ end
+
+ def register_phone_number(phone_number_id, pin)
+ response = HTTParty.post(
+ "#{BASE_URI}/#{@api_version}/#{phone_number_id}/register",
+ headers: request_headers,
+ body: { messaging_product: 'whatsapp', pin: pin.to_s }.to_json
+ )
+
+ handle_response(response, 'Phone registration failed')
+ end
+
+ def phone_number_verified?(phone_number_id)
+ response = HTTParty.get(
+ "#{BASE_URI}/#{@api_version}/#{phone_number_id}",
+ headers: request_headers
+ )
+
+ data = handle_response(response, 'Phone status check failed')
+ data['code_verification_status'] == 'VERIFIED'
+ end
+
+ def subscribe_waba_webhook(waba_id, callback_url, verify_token)
+ response = HTTParty.post(
+ "#{BASE_URI}/#{@api_version}/#{waba_id}/subscribed_apps",
+ headers: request_headers,
+ body: {
+ override_callback_uri: callback_url,
+ verify_token: verify_token
+ }.to_json
+ )
+
+ handle_response(response, 'Webhook subscription failed')
+ end
+
+ def unsubscribe_waba_webhook(waba_id)
+ response = HTTParty.delete(
+ "#{BASE_URI}/#{@api_version}/#{waba_id}/subscribed_apps",
+ headers: request_headers
+ )
+
+ handle_response(response, 'Webhook unsubscription failed')
+ end
+
+ private
+
+ def request_headers
+ {
+ 'Authorization' => "Bearer #{@access_token}",
+ 'Content-Type' => 'application/json'
+ }
+ end
+
+ def build_app_access_token
+ app_id = GlobalConfigService.load('WHATSAPP_APP_ID', '')
+ app_secret = GlobalConfigService.load('WHATSAPP_APP_SECRET', '')
+ "#{app_id}|#{app_secret}"
+ end
+
+ def handle_response(response, error_message)
+ raise "#{error_message}: #{response.body}" unless response.success?
+
+ response.parsed_response
+ end
+end
diff --git a/app/services/whatsapp/health_service.rb b/app/services/whatsapp/health_service.rb
new file mode 100644
index 0000000..94789ef
--- /dev/null
+++ b/app/services/whatsapp/health_service.rb
@@ -0,0 +1,84 @@
+class Whatsapp::HealthService
+ BASE_URI = 'https://graph.facebook.com'.freeze
+
+ def initialize(channel)
+ @channel = channel
+ @access_token = channel.provider_config['api_key']
+ @api_version = GlobalConfigService.load('WHATSAPP_API_VERSION', 'v22.0')
+ end
+
+ def fetch_health_status
+ validate_channel!
+ fetch_phone_health_data
+ end
+
+ private
+
+ def validate_channel!
+ raise ArgumentError, 'Channel is required' if @channel.blank?
+ raise ArgumentError, 'API key is missing' if @access_token.blank?
+ raise ArgumentError, 'Phone number ID is missing' if @channel.provider_config['phone_number_id'].blank?
+ end
+
+ def fetch_phone_health_data
+ phone_number_id = @channel.provider_config['phone_number_id']
+
+ response = HTTParty.get(
+ "#{BASE_URI}/#{@api_version}/#{phone_number_id}",
+ query: {
+ fields: health_fields,
+ access_token: @access_token
+ }
+ )
+
+ handle_response(response)
+ rescue StandardError => e
+ Rails.logger.error "[WHATSAPP HEALTH] Error fetching health data: #{e.message}"
+ raise e
+ end
+
+ def health_fields
+ %w[
+ quality_rating
+ messaging_limit_tier
+ code_verification_status
+ account_mode
+ id
+ display_phone_number
+ name_status
+ verified_name
+ webhook_configuration
+ throughput
+ last_onboarded_time
+ platform_type
+ certificate
+ ].join(',')
+ end
+
+ def handle_response(response)
+ unless response.success?
+ error_message = "WhatsApp API request failed: #{response.code} - #{response.body}"
+ Rails.logger.error "[WHATSAPP HEALTH] #{error_message}"
+ raise error_message
+ end
+
+ data = response.parsed_response
+ format_health_response(data)
+ end
+
+ def format_health_response(response)
+ {
+ display_phone_number: response['display_phone_number'],
+ verified_name: response['verified_name'],
+ name_status: response['name_status'],
+ quality_rating: response['quality_rating'],
+ messaging_limit_tier: response['messaging_limit_tier'],
+ account_mode: response['account_mode'],
+ code_verification_status: response['code_verification_status'],
+ throughput: response['throughput'],
+ last_onboarded_time: response['last_onboarded_time'],
+ platform_type: response['platform_type'],
+ business_id: @channel.provider_config['business_account_id']
+ }
+ end
+end
diff --git a/app/services/whatsapp/incoming_message_base_service.rb b/app/services/whatsapp/incoming_message_base_service.rb
new file mode 100644
index 0000000..315182f
--- /dev/null
+++ b/app/services/whatsapp/incoming_message_base_service.rb
@@ -0,0 +1,196 @@
+# Mostly modeled after the intial implementation of the service based on 360 Dialog
+# https://docs.360dialog.com/whatsapp-api/whatsapp-api/media
+# https://developers.facebook.com/docs/whatsapp/api/media/
+class Whatsapp::IncomingMessageBaseService
+ include ::Whatsapp::IncomingMessageServiceHelpers
+
+ pattr_initialize [:inbox!, :params!]
+
+ def perform
+ processed_params
+
+ if processed_params.try(:[], :statuses).present?
+ process_statuses
+ elsif processed_params.try(:[], :messages).present?
+ process_messages
+ end
+ end
+
+ private
+
+ def process_messages
+ # We don't support reactions & ephemeral message now, we need to skip processing the message
+ # if the webhook event is a reaction or an ephermal message or an unsupported message.
+ return if unprocessable_message_type?(message_type)
+
+ # Multiple webhook event can be received against the same message due to misconfigurations in the Meta
+ # business manager account. While we have not found the core reason yet, the following line ensure that
+ # there are no duplicate messages created.
+ return if find_message_by_source_id(@processed_params[:messages].first[:id]) || message_under_process?
+
+ cache_message_source_id_in_redis
+ set_contact
+ return unless @contact
+
+ ActiveRecord::Base.transaction do
+ set_conversation
+ create_messages
+ clear_message_source_id_from_redis
+ end
+ end
+
+ def process_statuses
+ return unless find_message_by_source_id(@processed_params[:statuses].first[:id])
+
+ update_message_with_status(@message, @processed_params[:statuses].first)
+ rescue ArgumentError => e
+ Rails.logger.error "Error while processing whatsapp status update #{e.message}"
+ end
+
+ def update_message_with_status(message, status)
+ message.status = status[:status]
+ if status[:status] == 'failed' && status[:errors].present?
+ error = status[:errors]&.first
+ message.external_error = "#{error[:code]}: #{error[:title]}"
+ end
+ message.save!
+ end
+
+ def create_messages
+ message = @processed_params[:messages].first
+ log_error(message) && return if error_webhook_event?(message)
+
+ process_in_reply_to(message)
+
+ message_type == 'contacts' ? create_contact_messages(message) : create_regular_message(message)
+ end
+
+ def create_contact_messages(message)
+ message['contacts'].each do |contact|
+ create_message(contact)
+ attach_contact(contact)
+ @message.save!
+ end
+ end
+
+ def create_regular_message(message)
+ create_message(message)
+ attach_files
+ attach_location if message_type == 'location'
+ @message.save!
+ end
+
+ def set_contact
+ contact_params = @processed_params[:contacts]&.first
+ return if contact_params.blank?
+
+ waid = processed_waid(contact_params[:wa_id])
+
+ contact_inbox = ::ContactInboxWithContactBuilder.new(
+ source_id: waid,
+ inbox: inbox,
+ contact_attributes: { name: contact_params.dig(:profile, :name), phone_number: "+#{@processed_params[:messages].first[:from]}" }
+ ).perform
+
+ @contact_inbox = contact_inbox
+ @contact = contact_inbox.contact
+
+ # Update existing contact name if ProfileName is available and current name is just phone number
+ update_contact_with_profile_name(contact_params)
+ end
+
+ def set_conversation
+ # if lock to single conversation is disabled, we will create a new conversation if previous conversation is resolved
+ @conversation = if @inbox.lock_to_single_conversation
+ @contact_inbox.conversations.last
+ else
+ @contact_inbox.conversations
+ .where.not(status: :resolved).last
+ end
+ return if @conversation
+
+ @conversation = ::Conversation.create!(conversation_params)
+ end
+
+ def attach_files
+ return if %w[text button interactive location contacts].include?(message_type)
+
+ attachment_payload = @processed_params[:messages].first[message_type.to_sym]
+ @message.content ||= attachment_payload[:caption]
+
+ attachment_file = download_attachment_file(attachment_payload)
+ return if attachment_file.blank?
+
+ @message.attachments.new(
+ account_id: @message.account_id,
+ file_type: file_content_type(message_type),
+ file: {
+ io: attachment_file,
+ filename: attachment_file.original_filename,
+ content_type: attachment_file.content_type
+ }
+ )
+ end
+
+ def attach_location
+ location = @processed_params[:messages].first['location']
+ location_name = location['name'] ? "#{location['name']}, #{location['address']}" : ''
+ @message.attachments.new(
+ account_id: @message.account_id,
+ file_type: file_content_type(message_type),
+ coordinates_lat: location['latitude'],
+ coordinates_long: location['longitude'],
+ fallback_title: location_name,
+ external_url: location['url']
+ )
+ end
+
+ def create_message(message)
+ @message = @conversation.messages.build(
+ content: message_content(message),
+ account_id: @inbox.account_id,
+ inbox_id: @inbox.id,
+ message_type: :incoming,
+ sender: @contact,
+ source_id: message[:id].to_s,
+ in_reply_to_external_id: @in_reply_to_external_id
+ )
+ end
+
+ def attach_contact(contact)
+ phones = contact[:phones]
+ phones = [{ phone: 'Phone number is not available' }] if phones.blank?
+
+ name_info = contact['name'] || {}
+ contact_meta = {
+ firstName: name_info['first_name'],
+ lastName: name_info['last_name']
+ }.compact
+
+ phones.each do |phone|
+ @message.attachments.new(
+ account_id: @message.account_id,
+ file_type: file_content_type(message_type),
+ fallback_title: phone[:phone].to_s,
+ meta: contact_meta
+ )
+ end
+ end
+
+ def update_contact_with_profile_name(contact_params)
+ profile_name = contact_params.dig(:profile, :name)
+ return if profile_name.blank?
+ return if @contact.name == profile_name
+
+ # Only update if current name exactly matches the phone number or formatted phone number
+ return unless contact_name_matches_phone_number?
+
+ @contact.update!(name: profile_name)
+ end
+
+ def contact_name_matches_phone_number?
+ phone_number = "+#{@processed_params[:messages].first[:from]}"
+ formatted_phone_number = TelephoneNumber.parse(phone_number).international_number
+ @contact.name == phone_number || @contact.name == formatted_phone_number
+ end
+end
diff --git a/app/services/whatsapp/incoming_message_service.rb b/app/services/whatsapp/incoming_message_service.rb
new file mode 100644
index 0000000..f619bb2
--- /dev/null
+++ b/app/services/whatsapp/incoming_message_service.rb
@@ -0,0 +1,5 @@
+# https://docs.360dialog.com/whatsapp-api/whatsapp-api/media
+# https://developers.facebook.com/docs/whatsapp/api/media/
+
+class Whatsapp::IncomingMessageService < Whatsapp::IncomingMessageBaseService
+end
diff --git a/app/services/whatsapp/incoming_message_service_helpers.rb b/app/services/whatsapp/incoming_message_service_helpers.rb
new file mode 100644
index 0000000..46ad255
--- /dev/null
+++ b/app/services/whatsapp/incoming_message_service_helpers.rb
@@ -0,0 +1,88 @@
+module Whatsapp::IncomingMessageServiceHelpers
+ def download_attachment_file(attachment_payload)
+ Down.download(inbox.channel.media_url(attachment_payload[:id]), headers: inbox.channel.api_headers)
+ end
+
+ def conversation_params
+ {
+ account_id: @inbox.account_id,
+ inbox_id: @inbox.id,
+ contact_id: @contact.id,
+ contact_inbox_id: @contact_inbox.id
+ }
+ end
+
+ def processed_params
+ @processed_params ||= params
+ end
+
+ def account
+ @account ||= inbox.account
+ end
+
+ def message_type
+ @processed_params[:messages].first[:type]
+ end
+
+ def message_content(message)
+ # TODO: map interactive messages back to button messages in chatwoot
+ message.dig(:text, :body) ||
+ message.dig(:button, :text) ||
+ message.dig(:interactive, :button_reply, :title) ||
+ message.dig(:interactive, :list_reply, :title) ||
+ message.dig(:name, :formatted_name)
+ end
+
+ def file_content_type(file_type)
+ return :image if %w[image sticker].include?(file_type)
+ return :audio if %w[audio voice].include?(file_type)
+ return :video if ['video'].include?(file_type)
+ return :location if ['location'].include?(file_type)
+ return :contact if ['contacts'].include?(file_type)
+
+ :file
+ end
+
+ def unprocessable_message_type?(message_type)
+ %w[reaction ephemeral unsupported request_welcome].include?(message_type)
+ end
+
+ def processed_waid(waid)
+ Whatsapp::PhoneNumberNormalizationService.new(inbox).normalize_and_find_contact_by_provider(waid, :cloud)
+ end
+
+ def error_webhook_event?(message)
+ message.key?('errors')
+ end
+
+ def log_error(message)
+ Rails.logger.warn "Whatsapp Error: #{message['errors'][0]['title']} - contact: #{message['from']}"
+ end
+
+ def process_in_reply_to(message)
+ @in_reply_to_external_id = message['context']&.[]('id')
+ end
+
+ def find_message_by_source_id(source_id)
+ return unless source_id
+
+ @message = Message.find_by(source_id: source_id)
+ end
+
+ def message_under_process?
+ key = format(Redis::RedisKeys::MESSAGE_SOURCE_KEY, id: @processed_params[:messages].first[:id])
+ Redis::Alfred.get(key)
+ end
+
+ def cache_message_source_id_in_redis
+ return if @processed_params.try(:[], :messages).blank?
+
+ key = format(Redis::RedisKeys::MESSAGE_SOURCE_KEY, id: @processed_params[:messages].first[:id])
+ ::Redis::Alfred.setex(key, true)
+ end
+
+ def clear_message_source_id_from_redis
+ key = format(Redis::RedisKeys::MESSAGE_SOURCE_KEY, id: @processed_params[:messages].first[:id])
+ ::Redis::Alfred.delete(key)
+ end
+end
diff --git a/app/services/whatsapp/incoming_message_whatsapp_cloud_service.rb b/app/services/whatsapp/incoming_message_whatsapp_cloud_service.rb
new file mode 100644
index 0000000..f8ac8c8
--- /dev/null
+++ b/app/services/whatsapp/incoming_message_whatsapp_cloud_service.rb
@@ -0,0 +1,23 @@
+# https://docs.360dialog.com/whatsapp-api/whatsapp-api/media
+# https://developers.facebook.com/docs/whatsapp/api/media/
+
+class Whatsapp::IncomingMessageWhatsappCloudService < Whatsapp::IncomingMessageBaseService
+ private
+
+ def processed_params
+ @processed_params ||= params[:entry].try(:first).try(:[], 'changes').try(:first).try(:[], 'value')
+ end
+
+ def download_attachment_file(attachment_payload)
+ url_response = HTTParty.get(
+ inbox.channel.media_url(
+ attachment_payload[:id],
+ inbox.channel.provider_config['phone_number_id']
+ ),
+ headers: inbox.channel.api_headers
+ )
+ # This url response will be failure if the access token has expired.
+ inbox.channel.authorization_error! if url_response.unauthorized?
+ Down.download(url_response.parsed_response['url'], headers: inbox.channel.api_headers) if url_response.success?
+ end
+end
diff --git a/app/services/whatsapp/oneoff_campaign_service.rb b/app/services/whatsapp/oneoff_campaign_service.rb
new file mode 100644
index 0000000..5917838
--- /dev/null
+++ b/app/services/whatsapp/oneoff_campaign_service.rb
@@ -0,0 +1,96 @@
+class Whatsapp::OneoffCampaignService
+ pattr_initialize [:campaign!]
+
+ def perform
+ validate_campaign!
+ # marks campaign completed so that other jobs won't pick it up
+ campaign.completed!
+ process_audience(extract_audience_labels)
+ end
+
+ private
+
+ delegate :inbox, to: :campaign
+ delegate :channel, to: :inbox
+
+ def validate_campaign_type!
+ raise "Invalid campaign #{campaign.id}" unless whatsapp_campaign? && campaign.one_off?
+ end
+
+ def whatsapp_campaign?
+ campaign.inbox.inbox_type == 'Whatsapp'
+ end
+
+ def validate_campaign_status!
+ raise 'Completed Campaign' if campaign.completed?
+ end
+
+ def validate_provider!
+ raise 'WhatsApp Cloud provider required' if channel.provider != 'whatsapp_cloud'
+ end
+
+ def validate_feature_flag!
+ raise 'WhatsApp campaigns feature not enabled' unless campaign.account.feature_enabled?(:whatsapp_campaign)
+ end
+
+ def validate_campaign!
+ validate_campaign_type!
+ validate_campaign_status!
+ validate_provider!
+ validate_feature_flag!
+ end
+
+ def extract_audience_labels
+ audience_label_ids = campaign.audience.select { |audience| audience['type'] == 'Label' }.pluck('id')
+ campaign.account.labels.where(id: audience_label_ids).pluck(:title)
+ end
+
+ def process_contact(contact)
+ Rails.logger.info "Processing contact: #{contact.name} (#{contact.phone_number})"
+
+ if contact.phone_number.blank?
+ Rails.logger.info "Skipping contact #{contact.name} - no phone number"
+ return
+ end
+
+ if campaign.template_params.blank?
+ Rails.logger.error "Skipping contact #{contact.name} - no template_params found for WhatsApp campaign"
+ return
+ end
+
+ send_whatsapp_template_message(to: contact.phone_number)
+ end
+
+ def process_audience(audience_labels)
+ contacts = campaign.account.contacts.tagged_with(audience_labels, any: true)
+ Rails.logger.info "Processing #{contacts.count} contacts for campaign #{campaign.id}"
+
+ contacts.each { |contact| process_contact(contact) }
+
+ Rails.logger.info "Campaign #{campaign.id} processing completed"
+ end
+
+ def send_whatsapp_template_message(to:)
+ processor = Whatsapp::TemplateProcessorService.new(
+ channel: channel,
+ template_params: campaign.template_params
+ )
+
+ name, namespace, lang_code, processed_parameters = processor.call
+
+ return if name.blank?
+
+ channel.send_template(to, {
+ name: name,
+ namespace: namespace,
+ lang_code: lang_code,
+ parameters: processed_parameters
+ }, nil)
+
+ rescue StandardError => e
+ Rails.logger.error "Failed to send WhatsApp template message to #{to}: #{e.message}"
+ Rails.logger.error "Backtrace: #{e.backtrace.first(5).join('\n')}"
+ # continue processing remaining contacts
+ nil
+ end
+end
diff --git a/app/services/whatsapp/phone_info_service.rb b/app/services/whatsapp/phone_info_service.rb
new file mode 100644
index 0000000..72a3e53
--- /dev/null
+++ b/app/services/whatsapp/phone_info_service.rb
@@ -0,0 +1,57 @@
+class Whatsapp::PhoneInfoService
+ def initialize(waba_id, phone_number_id, access_token)
+ @waba_id = waba_id
+ @phone_number_id = phone_number_id
+ @access_token = access_token
+ @api_client = Whatsapp::FacebookApiClient.new(access_token)
+ end
+
+ def perform
+ validate_parameters!
+ fetch_and_process_phone_info
+ end
+
+ private
+
+ def validate_parameters!
+ raise ArgumentError, 'WABA ID is required' if @waba_id.blank?
+ raise ArgumentError, 'Access token is required' if @access_token.blank?
+ end
+
+ def fetch_and_process_phone_info
+ response = @api_client.fetch_phone_numbers(@waba_id)
+ phone_numbers = response['data']
+
+ phone_data = find_phone_data(phone_numbers)
+ raise "No phone numbers found for WABA #{@waba_id}" if phone_data.nil?
+
+ build_phone_info(phone_data)
+ end
+
+ def find_phone_data(phone_numbers)
+ return nil if phone_numbers.blank?
+
+ if @phone_number_id.present?
+ phone_numbers.find { |phone| phone['id'] == @phone_number_id } || phone_numbers.first
+ else
+ phone_numbers.first
+ end
+ end
+
+ def build_phone_info(phone_data)
+ display_phone_number = sanitize_phone_number(phone_data['display_phone_number'])
+
+ {
+ phone_number_id: phone_data['id'],
+ phone_number: "+#{display_phone_number}",
+ verified: phone_data['code_verification_status'] == 'VERIFIED',
+ business_name: phone_data['verified_name'] || phone_data['display_phone_number']
+ }
+ end
+
+ def sanitize_phone_number(phone_number)
+ return phone_number if phone_number.blank?
+
+ phone_number.gsub(/[\s\-\(\)\.\+]/, '').strip
+ end
+end
diff --git a/app/services/whatsapp/phone_normalizers/argentina_phone_normalizer.rb b/app/services/whatsapp/phone_normalizers/argentina_phone_normalizer.rb
new file mode 100644
index 0000000..109a068
--- /dev/null
+++ b/app/services/whatsapp/phone_normalizers/argentina_phone_normalizer.rb
@@ -0,0 +1,18 @@
+# Handles Argentina phone number normalization
+#
+# Argentina phone numbers can appear with or without "9" after country code
+# This normalizer removes the "9" when present to create consistent format: 54 + area + number
+class Whatsapp::PhoneNormalizers::ArgentinaPhoneNormalizer < Whatsapp::PhoneNormalizers::BasePhoneNormalizer
+ def normalize(waid)
+ return waid unless handles_country?(waid)
+
+ # Remove "9" after country code if present (549 → 54)
+ waid.sub(/^549/, '54')
+ end
+
+ private
+
+ def country_code_pattern
+ /^54/
+ end
+end
diff --git a/app/services/whatsapp/phone_normalizers/base_phone_normalizer.rb b/app/services/whatsapp/phone_normalizers/base_phone_normalizer.rb
new file mode 100644
index 0000000..91882b8
--- /dev/null
+++ b/app/services/whatsapp/phone_normalizers/base_phone_normalizer.rb
@@ -0,0 +1,19 @@
+# Base class for country-specific phone number normalizers
+# Each country normalizer should inherit from this class and implement:
+# - country_code_pattern: regex to identify the country code
+# - normalize: logic to convert phone number to normalized format for contact lookup
+class Whatsapp::PhoneNormalizers::BasePhoneNormalizer
+ def handles_country?(waid)
+ waid.match(country_code_pattern)
+ end
+
+ def normalize(waid)
+ raise NotImplementedError, 'Subclasses must implement #normalize'
+ end
+
+ private
+
+ def country_code_pattern
+ raise NotImplementedError, 'Subclasses must implement #country_code_pattern'
+ end
+end
diff --git a/app/services/whatsapp/phone_normalizers/brazil_phone_normalizer.rb b/app/services/whatsapp/phone_normalizers/brazil_phone_normalizer.rb
new file mode 100644
index 0000000..24a1c40
--- /dev/null
+++ b/app/services/whatsapp/phone_normalizers/brazil_phone_normalizer.rb
@@ -0,0 +1,26 @@
+# Handles Brazil phone number normalization
+# ref: https://github.com/chatwoot/chatwoot/issues/5840
+#
+# Brazil changed its mobile number system by adding a "9" prefix to existing numbers.
+# This normalizer adds the "9" digit if the number is 12 digits (making it 13 digits total)
+# to match the new format: 55 + DDD + 9 + number
+class Whatsapp::PhoneNormalizers::BrazilPhoneNormalizer < Whatsapp::PhoneNormalizers::BasePhoneNormalizer
+ COUNTRY_CODE_LENGTH = 2
+ DDD_LENGTH = 2
+
+ def normalize(waid)
+ return waid unless handles_country?(waid)
+
+ ddd = waid[COUNTRY_CODE_LENGTH, DDD_LENGTH]
+ number = waid[COUNTRY_CODE_LENGTH + DDD_LENGTH, waid.length - (COUNTRY_CODE_LENGTH + DDD_LENGTH)]
+ normalized_number = "55#{ddd}#{number}"
+ normalized_number = "55#{ddd}9#{number}" if normalized_number.length != 13
+ normalized_number
+ end
+
+ private
+
+ def country_code_pattern
+ /^55/
+ end
+end
diff --git a/app/services/whatsapp/phone_number_normalization_service.rb b/app/services/whatsapp/phone_number_normalization_service.rb
new file mode 100644
index 0000000..1e52d9b
--- /dev/null
+++ b/app/services/whatsapp/phone_number_normalization_service.rb
@@ -0,0 +1,69 @@
+# Service to handle phone number normalization for WhatsApp messages
+# Currently supports Brazil and Argentina phone number format variations
+# Supports both WhatsApp Cloud API and Twilio WhatsApp providers
+class Whatsapp::PhoneNumberNormalizationService
+ def initialize(inbox)
+ @inbox = inbox
+ end
+
+ # @param raw_number [String] The phone number in provider-specific format
+ # - Cloud: "5541988887777" (clean number)
+ # - Twilio: "whatsapp:+5541988887777" (prefixed format)
+ # @param provider [Symbol] :cloud or :twilio
+ # @return [String] Normalized source_id in provider format or original if not found
+ def normalize_and_find_contact_by_provider(raw_number, provider)
+ # Extract clean number based on provider format
+ clean_number = extract_clean_number(raw_number, provider)
+
+ # Find appropriate normalizer for the country
+ normalizer = find_normalizer_for_country(clean_number)
+ return raw_number unless normalizer
+
+ # Normalize the clean number
+ normalized_clean_number = normalizer.normalize(clean_number)
+
+ # Format for provider and check for existing contact
+ provider_format = format_for_provider(normalized_clean_number, provider)
+ existing_contact_inbox = find_existing_contact_inbox(provider_format)
+
+ existing_contact_inbox&.source_id || raw_number
+ end
+
+ private
+
+ attr_reader :inbox
+
+ def find_normalizer_for_country(waid)
+ NORMALIZERS.map(&:new)
+ .find { |normalizer| normalizer.handles_country?(waid) }
+ end
+
+ def find_existing_contact_inbox(normalized_waid)
+ inbox.contact_inboxes.find_by(source_id: normalized_waid)
+ end
+
+ # Extract clean number from provider-specific format
+ def extract_clean_number(raw_number, provider)
+ case provider
+ when :twilio
+ raw_number.gsub(/^whatsapp:\+/, '') # Remove prefix: "whatsapp:+5541988887777" → "5541988887777"
+ else
+ raw_number # Default fallback for unknown providers
+ end
+ end
+
+ # Format normalized number for provider-specific storage
+ def format_for_provider(clean_number, provider)
+ case provider
+ when :twilio
+ "whatsapp:+#{clean_number}" # Add prefix: "5541988887777" → "whatsapp:+5541988887777"
+ else
+ clean_number # Default for :cloud and unknown providers: "5541988887777"
+ end
+ end
+
+ NORMALIZERS = [
+ Whatsapp::PhoneNormalizers::BrazilPhoneNormalizer,
+ Whatsapp::PhoneNormalizers::ArgentinaPhoneNormalizer
+ ].freeze
+end
diff --git a/app/services/whatsapp/populate_template_parameters_service.rb b/app/services/whatsapp/populate_template_parameters_service.rb
new file mode 100644
index 0000000..6ea3e6e
--- /dev/null
+++ b/app/services/whatsapp/populate_template_parameters_service.rb
@@ -0,0 +1,163 @@
+class Whatsapp::PopulateTemplateParametersService
+ def build_parameter(value)
+ case value
+ when String
+ build_string_parameter(value)
+ when Hash
+ build_hash_parameter(value)
+ else
+ { type: 'text', text: value.to_s }
+ end
+ end
+
+ def build_button_parameter(button)
+ return { type: 'text', text: '' } if button.blank?
+
+ case button['type']
+ when 'copy_code'
+ coupon_code = button['parameter'].to_s.strip
+ raise ArgumentError, 'Coupon code cannot be empty' if coupon_code.blank?
+ raise ArgumentError, 'Coupon code cannot exceed 15 characters' if coupon_code.length > 15
+
+ {
+ type: 'coupon_code',
+ coupon_code: coupon_code
+ }
+ else
+ # For URL buttons and other button types, treat parameter as text
+ # If parameter is blank, use empty string (required for URL buttons)
+ { type: 'text', text: button['parameter'].to_s.strip }
+ end
+ end
+
+ def build_media_parameter(url, media_type, media_name = nil)
+ return nil if url.blank?
+
+ sanitized_url = sanitize_parameter(url)
+ normalized_url = normalize_url(sanitized_url)
+ validate_url(normalized_url)
+ build_media_type_parameter(normalized_url, media_type.downcase, media_name)
+ end
+
+ def build_named_parameter(parameter_name, value)
+ sanitized_value = sanitize_parameter(value.to_s)
+ { type: 'text', parameter_name: parameter_name, text: sanitized_value }
+ end
+
+ private
+
+ def build_string_parameter(value)
+ sanitized_value = sanitize_parameter(value)
+ if rich_formatting?(sanitized_value)
+ build_rich_text_parameter(sanitized_value)
+ else
+ { type: 'text', text: sanitized_value }
+ end
+ end
+
+ def build_hash_parameter(value)
+ case value['type']
+ when 'currency'
+ build_currency_parameter(value)
+ when 'date_time'
+ build_date_time_parameter(value)
+ else
+ { type: 'text', text: value.to_s }
+ end
+ end
+
+ def build_currency_parameter(value)
+ {
+ type: 'currency',
+ currency: {
+ fallback_value: value['fallback_value'],
+ code: value['code'],
+ amount_1000: value['amount_1000']
+ }
+ }
+ end
+
+ def build_date_time_parameter(value)
+ {
+ type: 'date_time',
+ date_time: {
+ fallback_value: value['fallback_value'],
+ day_of_week: value['day_of_week'],
+ day_of_month: value['day_of_month'],
+ month: value['month'],
+ year: value['year']
+ }
+ }
+ end
+
+ def build_media_type_parameter(sanitized_url, media_type, media_name = nil)
+ case media_type
+ when 'image'
+ build_image_parameter(sanitized_url)
+ when 'video'
+ build_video_parameter(sanitized_url)
+ when 'document'
+ build_document_parameter(sanitized_url, media_name)
+ else
+ raise ArgumentError, "Unsupported media type: #{media_type}"
+ end
+ end
+
+ def build_image_parameter(url)
+ { type: 'image', image: { link: url } }
+ end
+
+ def build_video_parameter(url)
+ { type: 'video', video: { link: url } }
+ end
+
+ def build_document_parameter(url, media_name = nil)
+ document_params = { link: url }
+ document_params[:filename] = media_name if media_name.present?
+
+ { type: 'document', document: document_params }
+ end
+
+ def rich_formatting?(text)
+ # Check if text contains WhatsApp rich formatting markers
+ text.match?(/\*[^*]+\*/) || # Bold: *text*
+ text.match?(/_[^_]+_/) || # Italic: _text_
+ text.match?(/~[^~]+~/) || # Strikethrough: ~text~
+ text.match?(/```[^`]+```/) # Monospace: ```text```
+ end
+
+ def build_rich_text_parameter(text)
+ # WhatsApp supports rich text formatting in templates
+ # This preserves the formatting markers for the API
+ { type: 'text', text: text }
+ end
+
+ def sanitize_parameter(value)
+ # Basic sanitization - remove dangerous characters and limit length
+ sanitized = value.to_s.strip
+ sanitized = sanitized.gsub(/[<>\"']/, '') # Remove potential HTML/JS chars
+ sanitized[0...1000] # Limit length to prevent DoS
+ end
+
+ def normalize_url(url)
+ # Use Addressable::URI for better URL normalization
+ # It handles spaces, special characters, and encoding automatically
+ Addressable::URI.parse(url).normalize.to_s
+ rescue Addressable::URI::InvalidURIError
+ # Fallback: simple space encoding if Addressable fails
+ url.gsub(' ', '%20')
+ end
+
+ def validate_url(url)
+ return if url.blank?
+
+ # url is already normalized by the caller
+
+ uri = URI.parse(url)
+ raise ArgumentError, "Invalid URL scheme: #{uri.scheme}. Only http and https are allowed" unless %w[http https].include?(uri.scheme)
+ raise ArgumentError, 'URL too long (max 2000 characters)' if url.length > 2000
+
+ rescue URI::InvalidURIError => e
+ raise ArgumentError, "Invalid URL format: #{e.message}. Please enter a valid URL like https://example.com/document.pdf"
+ end
+end
diff --git a/app/services/whatsapp/providers/base_service.rb b/app/services/whatsapp/providers/base_service.rb
new file mode 100644
index 0000000..9fd1f62
--- /dev/null
+++ b/app/services/whatsapp/providers/base_service.rb
@@ -0,0 +1,106 @@
+#######################################
+# To create a whatsapp provider
+# - Inherit this as the base class.
+# - Implement `send_message` method in your child class.
+# - Implement `send_template_message` method in your child class.
+# - Implement `sync_templates` method in your child class.
+# - Implement `validate_provider_config` method in your child class.
+# - Use Childclass.new(whatsapp_channel: channel).perform.
+######################################
+
+class Whatsapp::Providers::BaseService
+ pattr_initialize [:whatsapp_channel!]
+
+ def send_message(_phone_number, _message)
+ raise 'Overwrite this method in child class'
+ end
+
+ def send_template(_phone_number, _template_info, _message)
+ raise 'Overwrite this method in child class'
+ end
+
+ def sync_template
+ raise 'Overwrite this method in child class'
+ end
+
+ def validate_provider_config
+ raise 'Overwrite this method in child class'
+ end
+
+ def error_message
+ raise 'Overwrite this method in child class'
+ end
+
+ def process_response(response, message)
+ parsed_response = response.parsed_response
+ if response.success? && parsed_response['error'].blank?
+ parsed_response['messages'].first['id']
+ else
+ handle_error(response, message)
+ nil
+ end
+ end
+
+ def handle_error(response, message)
+ Rails.logger.error response.body
+ return if message.blank?
+
+ # https://developers.facebook.com/docs/whatsapp/cloud-api/support/error-codes/#sample-response
+ error_message = error_message(response)
+ return if error_message.blank?
+
+ message.external_error = error_message
+ message.status = :failed
+ message.save!
+ end
+
+ def create_buttons(items)
+ buttons = []
+ items.each do |item|
+ button = { :type => 'reply', 'reply' => { 'id' => item['value'], 'title' => item['title'] } }
+ buttons << button
+ end
+ buttons
+ end
+
+ def create_rows(items)
+ rows = []
+ items.each do |item|
+ row = { 'id' => item['value'], 'title' => item['title'] }
+ rows << row
+ end
+ rows
+ end
+
+ def create_payload(type, message_content, action)
+ {
+ 'type': type,
+ 'body': {
+ 'text': message_content
+ },
+ 'action': action
+ }
+ end
+
+ def create_payload_based_on_items(message)
+ if message.content_attributes['items'].length <= 3
+ create_button_payload(message)
+ else
+ create_list_payload(message)
+ end
+ end
+
+ def create_button_payload(message)
+ buttons = create_buttons(message.content_attributes['items'])
+ json_hash = { 'buttons' => buttons }
+ create_payload('button', message.outgoing_content, JSON.generate(json_hash))
+ end
+
+ def create_list_payload(message)
+ rows = create_rows(message.content_attributes['items'])
+ section1 = { 'rows' => rows }
+ sections = [section1]
+ json_hash = { :button => I18n.t('conversations.messages.whatsapp.list_button_label'), 'sections' => sections }
+ create_payload('list', message.outgoing_content, JSON.generate(json_hash))
+ end
+end
diff --git a/app/services/whatsapp/providers/whatsapp_360_dialog_service.rb b/app/services/whatsapp/providers/whatsapp_360_dialog_service.rb
new file mode 100644
index 0000000..352f2d2
--- /dev/null
+++ b/app/services/whatsapp/providers/whatsapp_360_dialog_service.rb
@@ -0,0 +1,128 @@
+class Whatsapp::Providers::Whatsapp360DialogService < Whatsapp::Providers::BaseService
+ def send_message(phone_number, message)
+ @message = message
+ if message.attachments.present?
+ send_attachment_message(phone_number, message)
+ elsif message.content_type == 'input_select'
+ send_interactive_text_message(phone_number, message)
+ else
+ send_text_message(phone_number, message)
+ end
+ end
+
+ def send_template(phone_number, template_info, message)
+ response = HTTParty.post(
+ "#{api_base_path}/messages",
+ headers: api_headers,
+ body: {
+ to: phone_number,
+ template: template_body_parameters(template_info),
+ type: 'template'
+ }.to_json
+ )
+
+ process_response(response, message)
+ end
+
+ def sync_templates
+ # ensuring that channels with wrong provider config wouldn't keep trying to sync templates
+ whatsapp_channel.mark_message_templates_updated
+ response = HTTParty.get("#{api_base_path}/configs/templates", headers: api_headers)
+ whatsapp_channel.update(message_templates: response['waba_templates'], message_templates_last_updated: Time.now.utc) if response.success?
+ end
+
+ def validate_provider_config?
+ response = HTTParty.post(
+ "#{api_base_path}/configs/webhook",
+ headers: { 'D360-API-KEY': whatsapp_channel.provider_config['api_key'], 'Content-Type': 'application/json' },
+ body: {
+ url: "#{ENV.fetch('FRONTEND_URL', nil)}/webhooks/whatsapp/#{whatsapp_channel.phone_number}"
+ }.to_json
+ )
+ response.success?
+ end
+
+ def api_headers
+ { 'D360-API-KEY' => whatsapp_channel.provider_config['api_key'], 'Content-Type' => 'application/json' }
+ end
+
+ def media_url(media_id)
+ "#{api_base_path}/media/#{media_id}"
+ end
+
+ private
+
+ def api_base_path
+ # provide the environment variable when testing against sandbox : 'https://waba-sandbox.360dialog.io/v1'
+ ENV.fetch('360DIALOG_BASE_URL', 'https://waba.360dialog.io/v1')
+ end
+
+ def send_text_message(phone_number, message)
+ response = HTTParty.post(
+ "#{api_base_path}/messages",
+ headers: api_headers,
+ body: {
+ to: phone_number,
+ text: { body: message.outgoing_content },
+ type: 'text'
+ }.to_json
+ )
+
+ process_response(response, message)
+ end
+
+ def send_attachment_message(phone_number, message)
+ attachment = message.attachments.first
+ type = %w[image audio video].include?(attachment.file_type) ? attachment.file_type : 'document'
+ type_content = {
+ 'link': attachment.download_url
+ }
+ type_content['caption'] = message.outgoing_content unless %w[audio sticker].include?(type)
+ type_content['filename'] = attachment.file.filename if type == 'document'
+
+ response = HTTParty.post(
+ "#{api_base_path}/messages",
+ headers: api_headers,
+ body: {
+ 'to' => phone_number,
+ 'type' => type,
+ type.to_s => type_content
+ }.to_json
+ )
+
+ process_response(response, message)
+ end
+
+ def error_message(response)
+ # {"meta": {"success": false, "http_code": 400, "developer_message": "errro-message", "360dialog_trace_id": "someid"}}
+ response.parsed_response.dig('meta', 'developer_message')
+ end
+
+ def template_body_parameters(template_info)
+ {
+ name: template_info[:name],
+ namespace: template_info[:namespace],
+ language: {
+ policy: 'deterministic',
+ code: template_info[:lang_code]
+ },
+ components: template_info[:parameters]
+ }
+ end
+
+ def send_interactive_text_message(phone_number, message)
+ payload = create_payload_based_on_items(message)
+
+ response = HTTParty.post(
+ "#{api_base_path}/messages",
+ headers: api_headers,
+ body: {
+ to: phone_number,
+ interactive: payload,
+ type: 'interactive'
+ }.to_json
+ )
+
+ process_response(response, message)
+ end
+end
diff --git a/app/services/whatsapp/providers/whatsapp_cloud_service.rb b/app/services/whatsapp/providers/whatsapp_cloud_service.rb
new file mode 100644
index 0000000..6f2ead5
--- /dev/null
+++ b/app/services/whatsapp/providers/whatsapp_cloud_service.rb
@@ -0,0 +1,209 @@
+class Whatsapp::Providers::WhatsappCloudService < Whatsapp::Providers::BaseService
+ def send_message(phone_number, message)
+ @message = message
+
+ if message.attachments.present?
+ send_attachment_message(phone_number, message)
+ elsif message.content_type == 'input_select'
+ send_interactive_text_message(phone_number, message)
+ else
+ send_text_message(phone_number, message)
+ end
+ end
+
+ def send_template(phone_number, template_info, message)
+ template_body = template_body_parameters(template_info)
+
+ request_body = {
+ messaging_product: 'whatsapp',
+ recipient_type: 'individual', # Only individual messages supported (not group messages)
+ to: phone_number,
+ type: 'template',
+ template: template_body
+ }
+
+ response = HTTParty.post(
+ "#{phone_id_path}/messages",
+ headers: api_headers,
+ body: request_body.to_json
+ )
+
+ process_response(response, message)
+ end
+
+ def sync_templates
+ # ensuring that channels with wrong provider config wouldn't keep trying to sync templates
+ whatsapp_channel.mark_message_templates_updated
+ templates = fetch_whatsapp_templates("#{business_account_path}/message_templates?access_token=#{whatsapp_channel.provider_config['api_key']}")
+ whatsapp_channel.update(message_templates: templates, message_templates_last_updated: Time.now.utc) if templates.present?
+ end
+
+ def fetch_whatsapp_templates(url)
+ response = HTTParty.get(url)
+ return [] unless response.success?
+
+ next_url = next_url(response)
+
+ return response['data'] + fetch_whatsapp_templates(next_url) if next_url.present?
+
+ response['data']
+ end
+
+ def next_url(response)
+ response['paging'] ? response['paging']['next'] : ''
+ end
+
+ def validate_provider_config?
+ response = HTTParty.get("#{business_account_path}/message_templates?access_token=#{whatsapp_channel.provider_config['api_key']}")
+ response.success?
+ end
+
+ def api_headers
+ { 'Authorization' => "Bearer #{whatsapp_channel.provider_config['api_key']}", 'Content-Type' => 'application/json' }
+ end
+
+ def create_csat_template(template_config)
+ csat_template_service.create_template(template_config)
+ end
+
+ def delete_csat_template(template_name = nil)
+ template_name ||= CsatTemplateNameService.csat_template_name(whatsapp_channel.inbox.id)
+ csat_template_service.delete_template(template_name)
+ end
+
+ def get_template_status(template_name)
+ csat_template_service.get_template_status(template_name)
+ end
+
+ def media_url(media_id, phone_number_id = nil)
+ url = "#{api_base_path}/v13.0/#{media_id}"
+ url += "?phone_number_id=#{phone_number_id}" if phone_number_id
+ url
+ end
+
+ private
+
+ def csat_template_service
+ @csat_template_service ||= Whatsapp::CsatTemplateService.new(whatsapp_channel)
+ end
+
+ def api_base_path
+ ENV.fetch('WHATSAPP_CLOUD_BASE_URL', 'https://graph.facebook.com')
+ end
+
+ # TODO: See if we can unify the API versions and for both paths and make it consistent with out facebook app API versions
+ def phone_id_path
+ "#{api_base_path}/v13.0/#{whatsapp_channel.provider_config['phone_number_id']}"
+ end
+
+ def business_account_path
+ "#{api_base_path}/v14.0/#{whatsapp_channel.provider_config['business_account_id']}"
+ end
+
+ def send_text_message(phone_number, message)
+ response = HTTParty.post(
+ "#{phone_id_path}/messages",
+ headers: api_headers,
+ body: {
+ messaging_product: 'whatsapp',
+ context: whatsapp_reply_context(message),
+ to: phone_number,
+ text: { body: message.outgoing_content },
+ type: 'text'
+ }.to_json
+ )
+
+ process_response(response, message)
+ end
+
+ def send_attachment_message(phone_number, message)
+ attachment = message.attachments.first
+ type = %w[image audio video].include?(attachment.file_type) ? attachment.file_type : 'document'
+ type_content = {
+ 'link': attachment.download_url
+ }
+ type_content['caption'] = message.outgoing_content unless %w[audio sticker].include?(type)
+ type_content['filename'] = attachment.file.filename if type == 'document'
+ response = HTTParty.post(
+ "#{phone_id_path}/messages",
+ headers: api_headers,
+ body: {
+ :messaging_product => 'whatsapp',
+ :context => whatsapp_reply_context(message),
+ 'to' => phone_number,
+ 'type' => type,
+ type.to_s => type_content
+ }.to_json
+ )
+
+ process_response(response, message)
+ end
+
+ def error_message(response)
+ # https://developers.facebook.com/docs/whatsapp/cloud-api/support/error-codes/#sample-response
+ response.parsed_response&.dig('error', 'message')
+ end
+
+ def template_body_parameters(template_info)
+ template_body = {
+ name: template_info[:name],
+ language: {
+ policy: 'deterministic',
+ code: template_info[:lang_code]
+ }
+ }
+
+ # Enhanced template parameters structure
+ # Note: Legacy format support (simple parameter arrays) has been removed
+ # in favor of the enhanced component-based structure that supports
+ # headers, buttons, and authentication templates.
+ #
+ # Expected payload format from frontend:
+ # {
+ # processed_params: {
+ # body: { '1': 'John', '2': '123 Main St' },
+ # header: {
+ # media_url: 'https://...',
+ # media_type: 'image',
+ # media_name: 'filename.pdf' # Optional, for document templates only
+ # },
+ # buttons: [{ type: 'url', parameter: 'otp123456' }]
+ # }
+ # }
+ # This gets transformed into WhatsApp API component format:
+ # [
+ # { type: 'body', parameters: [...] },
+ # { type: 'header', parameters: [...] },
+ # { type: 'button', sub_type: 'url', parameters: [...] }
+ # ]
+ template_body[:components] = template_info[:parameters] || []
+
+ template_body
+ end
+
+ def whatsapp_reply_context(message)
+ reply_to = message.content_attributes[:in_reply_to_external_id]
+ return nil if reply_to.blank?
+
+ {
+ message_id: reply_to
+ }
+ end
+
+ def send_interactive_text_message(phone_number, message)
+ payload = create_payload_based_on_items(message)
+
+ response = HTTParty.post(
+ "#{phone_id_path}/messages",
+ headers: api_headers,
+ body: {
+ messaging_product: 'whatsapp',
+ to: phone_number,
+ interactive: payload,
+ type: 'interactive'
+ }.to_json
+ )
+
+ process_response(response, message)
+ end
+end
diff --git a/app/services/whatsapp/reauthorization_service.rb b/app/services/whatsapp/reauthorization_service.rb
new file mode 100644
index 0000000..aeb6dfb
--- /dev/null
+++ b/app/services/whatsapp/reauthorization_service.rb
@@ -0,0 +1,42 @@
+class Whatsapp::ReauthorizationService
+ def initialize(account:, inbox_id:, phone_number_id:, business_id:)
+ @account = account
+ @inbox_id = inbox_id
+ @phone_number_id = phone_number_id
+ @business_id = business_id
+ end
+
+ def perform(access_token, phone_info)
+ inbox = @account.inboxes.find(@inbox_id)
+ channel = inbox.channel
+
+ # Validate phone number matches for reauthorization
+ if phone_info[:phone_number] != channel.phone_number
+ raise StandardError, "Phone number mismatch. Expected #{channel.phone_number}, got #{phone_info[:phone_number]}"
+ end
+
+ # Update channel configuration
+ update_channel_config(channel, access_token, phone_info)
+ # Mark as reauthorized
+ channel.reauthorized! if channel.respond_to?(:reauthorized!)
+
+ channel
+ end
+
+ private
+
+ def update_channel_config(channel, access_token, phone_info)
+ current_config = channel.provider_config || {}
+ channel.provider_config = current_config.merge(
+ 'api_key' => access_token,
+ 'phone_number_id' => @phone_number_id,
+ 'business_account_id' => @business_id,
+ 'source' => 'embedded_signup'
+ )
+ channel.save!
+
+ # Update inbox name if business name changed
+ business_name = phone_info[:business_name] || phone_info[:verified_name]
+ channel.inbox.update!(name: business_name) if business_name.present?
+ end
+end
diff --git a/app/services/whatsapp/send_on_whatsapp_service.rb b/app/services/whatsapp/send_on_whatsapp_service.rb
new file mode 100644
index 0000000..20419c0
--- /dev/null
+++ b/app/services/whatsapp/send_on_whatsapp_service.rb
@@ -0,0 +1,48 @@
+class Whatsapp::SendOnWhatsappService < Base::SendOnChannelService
+ private
+
+ def channel_class
+ Channel::Whatsapp
+ end
+
+ def perform_reply
+ should_send_template_message = template_params.present? || !message.conversation.can_reply?
+ if should_send_template_message
+ send_template_message
+ else
+ send_session_message
+ end
+ end
+
+ def send_template_message
+ processor = Whatsapp::TemplateProcessorService.new(
+ channel: channel,
+ template_params: template_params,
+ message: message
+ )
+
+ name, namespace, lang_code, processed_parameters = processor.call
+
+ if name.blank?
+ message.update!(status: :failed, external_error: 'Template not found or invalid template name')
+ return
+ end
+
+ message_id = channel.send_template(message.conversation.contact_inbox.source_id, {
+ name: name,
+ namespace: namespace,
+ lang_code: lang_code,
+ parameters: processed_parameters
+ }, message)
+ message.update!(source_id: message_id) if message_id.present?
+ end
+
+ def send_session_message
+ message_id = channel.send_message(message.conversation.contact_inbox.source_id, message)
+ message.update!(source_id: message_id) if message_id.present?
+ end
+
+ def template_params
+ message.additional_attributes && message.additional_attributes['template_params']
+ end
+end
diff --git a/app/services/whatsapp/template_parameter_converter_service.rb b/app/services/whatsapp/template_parameter_converter_service.rb
new file mode 100644
index 0000000..641a29b
--- /dev/null
+++ b/app/services/whatsapp/template_parameter_converter_service.rb
@@ -0,0 +1,120 @@
+# Service to convert legacy WhatsApp template parameter formats to enhanced format
+#
+# Legacy formats (deprecated):
+# - Array: ["John", "Order123"] - positional parameters
+# - Flat Hash: {"1": "John", "2": "Order123"} - direct key-value mapping
+#
+# Enhanced format:
+# - Component-based: {"body": {"1": "John", "2": "Order123"}} - structured by template components
+# - Supports header, body, footer, and button parameters separately
+#
+class Whatsapp::TemplateParameterConverterService
+ def initialize(template_params, template)
+ @template_params = template_params
+ @template = template
+ end
+
+ def normalize_to_enhanced
+ processed_params = @template_params['processed_params']
+
+ # Early return if already enhanced format
+ return @template_params if enhanced_format?(processed_params)
+
+ # Mark as legacy format before conversion for tracking
+ @template_params['format_version'] = 'legacy'
+
+ # Convert legacy formats to enhanced structure
+ # TODO: Legacy format support will be deprecated and removed after 2-3 releases
+ enhanced_params = convert_legacy_to_enhanced(processed_params, @template)
+
+ # Replace original params with enhanced structure
+ @template_params['processed_params'] = enhanced_params
+
+ @template_params
+ end
+
+ private
+
+ def enhanced_format?(processed_params)
+ return false unless processed_params.is_a?(Hash)
+
+ # Enhanced format has component-based structure
+ component_keys = %w[body header footer buttons]
+ has_component_structure = processed_params.keys.any? { |k| component_keys.include?(k) }
+
+ # Additional validation for enhanced format
+ if has_component_structure
+ validate_enhanced_structure(processed_params)
+ else
+ false
+ end
+ end
+
+ def validate_enhanced_structure(params)
+ valid_body?(params['body']) &&
+ valid_header?(params['header']) &&
+ valid_buttons?(params['buttons'])
+ end
+
+ def valid_body?(body)
+ body.nil? || body.is_a?(Hash)
+ end
+
+ def valid_header?(header)
+ header.nil? || header.is_a?(Hash)
+ end
+
+ def valid_buttons?(buttons)
+ return true if buttons.nil?
+ return false unless buttons.is_a?(Array)
+
+ buttons.all? { |b| b.is_a?(Hash) && b['type'] }
+ end
+
+ def convert_legacy_to_enhanced(legacy_params, _template)
+ # Legacy system only supported text-based templates with body parameters
+ # We only convert the parameter format, not add new features
+
+ enhanced = {}
+
+ case legacy_params
+ when Array
+ # Array format: ["John", "Order123"] → {body: {"1": "John", "2": "Order123"}}
+ body_params = convert_array_to_body_params(legacy_params)
+ enhanced['body'] = body_params unless body_params.empty?
+ when Hash
+ # Hash format: {"1": "John", "name": "Jane"} → {body: {"1": "John", "name": "Jane"}}
+ body_params = convert_hash_to_body_params(legacy_params)
+ enhanced['body'] = body_params unless body_params.empty?
+ when NilClass
+ # Templates without parameters (nil processed_params)
+ # Return empty enhanced structure
+ else
+ raise ArgumentError, "Unknown legacy format: #{legacy_params.class}"
+ end
+
+ enhanced
+ end
+
+ def convert_array_to_body_params(params_array)
+ return {} if params_array.empty?
+
+ body_params = {}
+ params_array.each_with_index do |value, index|
+ body_params[(index + 1).to_s] = value.to_s
+ end
+
+ body_params
+ end
+
+ def convert_hash_to_body_params(params_hash)
+ return {} if params_hash.empty?
+
+ body_params = {}
+ params_hash.each do |key, value|
+ body_params[key.to_s] = value.to_s
+ end
+
+ body_params
+ end
+end
diff --git a/app/services/whatsapp/template_processor_service.rb b/app/services/whatsapp/template_processor_service.rb
new file mode 100644
index 0000000..0aaca2f
--- /dev/null
+++ b/app/services/whatsapp/template_processor_service.rb
@@ -0,0 +1,130 @@
+class Whatsapp::TemplateProcessorService
+ pattr_initialize [:channel!, :template_params, :message]
+
+ def call
+ return [nil, nil, nil, nil] if template_params.blank?
+
+ process_template_with_params
+ end
+
+ private
+
+ def process_template_with_params
+ [
+ template_params['name'],
+ template_params['namespace'],
+ template_params['language'],
+ processed_templates_params
+ ]
+ end
+
+ def find_template
+ channel.message_templates.find do |t|
+ t['name'] == template_params['name'] &&
+ t['language']&.downcase == template_params['language']&.downcase &&
+ t['status']&.downcase == 'approved'
+ end
+ end
+
+ def processed_templates_params
+ template = find_template
+ return if template.blank?
+
+ # Convert legacy format to enhanced format before processing
+ converter = Whatsapp::TemplateParameterConverterService.new(template_params, template)
+ normalized_params = converter.normalize_to_enhanced
+
+ process_enhanced_template_params(template, normalized_params['processed_params'])
+ end
+
+ def process_enhanced_template_params(template, processed_params = nil)
+ processed_params ||= template_params['processed_params']
+ components = []
+
+ components.concat(process_header_components(processed_params))
+ components.concat(process_body_components(processed_params, template))
+ components.concat(process_footer_components(processed_params))
+ components.concat(process_button_components(processed_params))
+
+ @template_params = components
+ end
+
+ def process_header_components(processed_params)
+ return [] if processed_params['header'].blank?
+
+ header_params = build_header_params(processed_params['header'])
+ header_params.present? ? [{ type: 'header', parameters: header_params }] : []
+ end
+
+ def build_header_params(header_data)
+ header_params = []
+ header_data.each do |key, value|
+ next if value.blank?
+
+ if media_url_with_type?(key, header_data)
+ media_name = header_data['media_name']
+ media_param = parameter_builder.build_media_parameter(value, header_data['media_type'], media_name)
+ header_params << media_param if media_param
+ elsif key != 'media_type' && key != 'media_name'
+ header_params << parameter_builder.build_parameter(value)
+ end
+ end
+ header_params
+ end
+
+ def media_url_with_type?(key, header_data)
+ key == 'media_url' && header_data['media_type'].present?
+ end
+
+ def process_body_components(processed_params, template)
+ return [] if processed_params['body'].blank?
+
+ body_params = processed_params['body'].filter_map do |key, value|
+ next if value.blank?
+
+ parameter_format = template['parameter_format']
+ if parameter_format == 'NAMED'
+ parameter_builder.build_named_parameter(key, value)
+ else
+ parameter_builder.build_parameter(value)
+ end
+ end
+
+ body_params.present? ? [{ type: 'body', parameters: body_params }] : []
+ end
+
+ def process_footer_components(processed_params)
+ return [] if processed_params['footer'].blank?
+
+ footer_params = processed_params['footer'].filter_map do |_, value|
+ next if value.blank?
+
+ parameter_builder.build_parameter(value)
+ end
+
+ footer_params.present? ? [{ type: 'footer', parameters: footer_params }] : []
+ end
+
+ def process_button_components(processed_params)
+ return [] if processed_params['buttons'].blank?
+
+ button_params = processed_params['buttons'].filter_map.with_index do |button, index|
+ next if button.blank?
+
+ if button['type'] == 'url' || button['parameter'].present?
+ {
+ type: 'button',
+ sub_type: button['type'] || 'url',
+ index: index,
+ parameters: [parameter_builder.build_button_parameter(button)]
+ }
+ end
+ end
+
+ button_params.compact
+ end
+
+ def parameter_builder
+ @parameter_builder ||= Whatsapp::PopulateTemplateParametersService.new
+ end
+end
diff --git a/app/services/whatsapp/token_exchange_service.rb b/app/services/whatsapp/token_exchange_service.rb
new file mode 100644
index 0000000..112c548
--- /dev/null
+++ b/app/services/whatsapp/token_exchange_service.rb
@@ -0,0 +1,26 @@
+class Whatsapp::TokenExchangeService
+ def initialize(code)
+ @code = code
+ @api_client = Whatsapp::FacebookApiClient.new
+ end
+
+ def perform
+ validate_code!
+ exchange_token
+ end
+
+ private
+
+ def validate_code!
+ raise ArgumentError, 'Authorization code is required' if @code.blank?
+ end
+
+ def exchange_token
+ response = @api_client.exchange_code_for_token(@code)
+ access_token = response['access_token']
+
+ raise "No access token in response: #{response}" if access_token.blank?
+
+ access_token
+ end
+end
diff --git a/app/services/whatsapp/token_validation_service.rb b/app/services/whatsapp/token_validation_service.rb
new file mode 100644
index 0000000..863f9da
--- /dev/null
+++ b/app/services/whatsapp/token_validation_service.rb
@@ -0,0 +1,42 @@
+class Whatsapp::TokenValidationService
+ def initialize(access_token, waba_id)
+ @access_token = access_token
+ @waba_id = waba_id
+ @api_client = Whatsapp::FacebookApiClient.new(access_token)
+ end
+
+ def perform
+ validate_parameters!
+ validate_token_waba_access
+ end
+
+ private
+
+ def validate_parameters!
+ raise ArgumentError, 'Access token is required' if @access_token.blank?
+ raise ArgumentError, 'WABA ID is required' if @waba_id.blank?
+ end
+
+ def validate_token_waba_access
+ token_debug_data = @api_client.debug_token(@access_token)
+ waba_scope = extract_waba_scope(token_debug_data)
+ verify_waba_authorization(waba_scope)
+ end
+
+ def extract_waba_scope(token_data)
+ granular_scopes = token_data.dig('data', 'granular_scopes')
+ waba_scope = granular_scopes&.find { |scope| scope['scope'] == 'whatsapp_business_management' }
+
+ raise 'No WABA scope found in token' unless waba_scope
+
+ waba_scope
+ end
+
+ def verify_waba_authorization(waba_scope)
+ authorized_waba_ids = waba_scope['target_ids'] || []
+
+ return if authorized_waba_ids.include?(@waba_id)
+
+ raise "Token does not have access to WABA #{@waba_id}. Authorized WABAs: #{authorized_waba_ids}"
+ end
+end
diff --git a/app/services/whatsapp/webhook_setup_service.rb b/app/services/whatsapp/webhook_setup_service.rb
new file mode 100644
index 0000000..63fed1e
--- /dev/null
+++ b/app/services/whatsapp/webhook_setup_service.rb
@@ -0,0 +1,116 @@
+class Whatsapp::WebhookSetupService
+ def initialize(channel, waba_id, access_token)
+ @channel = channel
+ @waba_id = waba_id
+ @access_token = access_token
+ @api_client = Whatsapp::FacebookApiClient.new(access_token)
+ end
+
+ def perform
+ validate_parameters!
+
+ # Register phone number if either condition is met:
+ # 1. Phone number is not verified (code_verification_status != 'VERIFIED')
+ # 2. Phone number needs registration (pending provisioning state)
+ register_phone_number if !phone_number_verified? || phone_number_needs_registration?
+
+ setup_webhook
+ end
+
+ private
+
+ def validate_parameters!
+ raise ArgumentError, 'Channel is required' if @channel.blank?
+ raise ArgumentError, 'WABA ID is required' if @waba_id.blank?
+ raise ArgumentError, 'Access token is required' if @access_token.blank?
+ end
+
+ def register_phone_number
+ phone_number_id = @channel.provider_config['phone_number_id']
+ pin = fetch_or_create_pin
+
+ @api_client.register_phone_number(phone_number_id, pin)
+ store_pin(pin)
+ rescue StandardError => e
+ Rails.logger.warn("[WHATSAPP] Phone registration failed but continuing: #{e.message}")
+ # Continue with webhook setup even if registration fails
+ # This is just a warning, not a blocking error
+ end
+
+ def fetch_or_create_pin
+ # Check if we have a stored PIN for this phone number
+ existing_pin = @channel.provider_config['verification_pin']
+ return existing_pin.to_i if existing_pin.present?
+
+ # Generate a new 6-digit PIN if none exists
+ SecureRandom.random_number(900_000) + 100_000
+ end
+
+ def store_pin(pin)
+ # Store the PIN in provider_config for future use
+ @channel.provider_config['verification_pin'] = pin
+ @channel.save!
+ end
+
+ def setup_webhook
+ callback_url = build_callback_url
+ verify_token = @channel.provider_config['webhook_verify_token']
+
+ @api_client.subscribe_waba_webhook(@waba_id, callback_url, verify_token)
+
+ rescue StandardError => e
+ Rails.logger.error("[WHATSAPP] Webhook setup failed: #{e.message}")
+ raise "Webhook setup failed: #{e.message}"
+ end
+
+ def build_callback_url
+ frontend_url = ENV.fetch('FRONTEND_URL', nil)
+ phone_number = @channel.phone_number
+
+ "#{frontend_url}/webhooks/whatsapp/#{phone_number}"
+ end
+
+ def phone_number_verified?
+ phone_number_id = @channel.provider_config['phone_number_id']
+
+ # Check with WhatsApp API if the phone number code verification is complete
+ # This checks code_verification_status == 'VERIFIED'
+ verified = @api_client.phone_number_verified?(phone_number_id)
+ Rails.logger.info("[WHATSAPP] Phone number #{phone_number_id} code verification status: #{verified}")
+
+ verified
+ rescue StandardError => e
+ # If verification check fails, assume not verified to be safe
+ Rails.logger.error("[WHATSAPP] Phone verification status check failed: #{e.message}")
+ false
+ end
+
+ def phone_number_needs_registration?
+ # Check if phone is in pending provisioning state based on health data
+ # This is a separate check from phone_number_verified? which only checks code verification
+
+ phone_number_in_pending_state?
+
+ rescue StandardError => e
+ Rails.logger.error("[WHATSAPP] Phone registration check failed: #{e.message}")
+ # Conservative approach: don't register if we can't determine the state
+ false
+ end
+
+ def phone_number_in_pending_state?
+ health_service = Whatsapp::HealthService.new(@channel)
+ health_data = health_service.fetch_health_status
+
+ # Check if phone number is in "not provisioned" state based on health indicators
+ # These conditions indicate the number is pending and needs registration:
+ # - platform_type: "NOT_APPLICABLE" means not fully set up
+ # - throughput.level: "NOT_APPLICABLE" means no messaging capacity assigned
+ health_data[:platform_type] == 'NOT_APPLICABLE' ||
+ health_data.dig(:throughput, :level) == 'NOT_APPLICABLE'
+
+ rescue StandardError => e
+ Rails.logger.error("[WHATSAPP] Health status check failed: #{e.message}")
+ # If health check fails, assume registration is not needed to avoid errors
+ false
+ end
+end
diff --git a/app/services/whatsapp/webhook_teardown_service.rb b/app/services/whatsapp/webhook_teardown_service.rb
new file mode 100644
index 0000000..c4a39a5
--- /dev/null
+++ b/app/services/whatsapp/webhook_teardown_service.rb
@@ -0,0 +1,47 @@
+class Whatsapp::WebhookTeardownService
+ def initialize(channel)
+ @channel = channel
+ end
+
+ def perform
+ return unless should_teardown_webhook?
+
+ teardown_webhook
+ rescue StandardError => e
+ handle_webhook_teardown_error(e)
+ end
+
+ private
+
+ def should_teardown_webhook?
+ whatsapp_cloud_provider? && embedded_signup_source? && webhook_config_present?
+ end
+
+ def whatsapp_cloud_provider?
+ @channel.provider == 'whatsapp_cloud'
+ end
+
+ def embedded_signup_source?
+ @channel.provider_config['source'] == 'embedded_signup'
+ end
+
+ def webhook_config_present?
+ @channel.provider_config['business_account_id'].present? &&
+ @channel.provider_config['api_key'].present?
+ end
+
+ def teardown_webhook
+ waba_id = @channel.provider_config['business_account_id']
+ access_token = @channel.provider_config['api_key']
+ api_client = Whatsapp::FacebookApiClient.new(access_token)
+
+ api_client.unsubscribe_waba_webhook(waba_id)
+ Rails.logger.info "[WHATSAPP] Webhook unsubscribed successfully for channel #{@channel.id}"
+ end
+
+ def handle_webhook_teardown_error(error)
+ Rails.logger.error "[WHATSAPP] Webhook teardown failed: #{error.message}"
+ # Don't raise the error to prevent channel deletion from failing
+ # Failed webhook teardown shouldn't block deletion
+ end
+end
diff --git a/app/services/widget/token_service.rb b/app/services/widget/token_service.rb
new file mode 100644
index 0000000..b50119e
--- /dev/null
+++ b/app/services/widget/token_service.rb
@@ -0,0 +1,27 @@
+class Widget::TokenService < BaseTokenService
+ DEFAULT_EXPIRY_DAYS = 180
+
+ def generate_token
+ JWT.encode(token_payload, secret_key, algorithm)
+ end
+
+ private
+
+ def token_payload
+ (payload || {}).merge(exp: exp, iat: iat)
+ end
+
+ def iat
+ Time.zone.now.to_i
+ end
+
+ def exp
+ iat + expire_in.days.to_i
+ end
+
+ def expire_in
+ # Value is stored in days, defaulting to 6 months (180 days)
+ token_expiry_value = InstallationConfig.find_by(name: 'WIDGET_TOKEN_EXPIRY')&.value
+ (token_expiry_value.presence || DEFAULT_EXPIRY_DAYS).to_i
+ end
+end
diff --git a/app/views/android_app/assetlinks.json.erb b/app/views/android_app/assetlinks.json.erb
new file mode 100644
index 0000000..575ca3b
--- /dev/null
+++ b/app/views/android_app/assetlinks.json.erb
@@ -0,0 +1,12 @@
+[
+ {
+ "relation": ["delegate_permission/common.handle_all_urls"],
+ "target": {
+ "namespace": "android_app",
+ "package_name": "<%= ENV['ANDROID_BUNDLE_ID'] %>",
+ "sha256_cert_fingerprints": [
+ "<%= ENV['ANDROID_SHA256_CERT_FINGERPRINT'] %>"
+ ]
+ }
+ }
+]
\ No newline at end of file
diff --git a/app/views/api/v1/accounts/actions/contact_merges/create.json.jbuilder b/app/views/api/v1/accounts/actions/contact_merges/create.json.jbuilder
new file mode 100644
index 0000000..c0ea40c
--- /dev/null
+++ b/app/views/api/v1/accounts/actions/contact_merges/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/contact', formats: [:json], resource: @base_contact
diff --git a/app/views/api/v1/accounts/agent_bots/avatar.json.jbuilder b/app/views/api/v1/accounts/agent_bots/avatar.json.jbuilder
new file mode 100644
index 0000000..f647ac3
--- /dev/null
+++ b/app/views/api/v1/accounts/agent_bots/avatar.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/agent_bot', formats: [:json], resource: AgentBotPresenter.new(@agent_bot)
diff --git a/app/views/api/v1/accounts/agent_bots/create.json.jbuilder b/app/views/api/v1/accounts/agent_bots/create.json.jbuilder
new file mode 100644
index 0000000..f647ac3
--- /dev/null
+++ b/app/views/api/v1/accounts/agent_bots/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/agent_bot', formats: [:json], resource: AgentBotPresenter.new(@agent_bot)
diff --git a/app/views/api/v1/accounts/agent_bots/index.json.jbuilder b/app/views/api/v1/accounts/agent_bots/index.json.jbuilder
new file mode 100644
index 0000000..39c14a2
--- /dev/null
+++ b/app/views/api/v1/accounts/agent_bots/index.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @agent_bots do |agent_bot|
+ json.partial! 'api/v1/models/agent_bot', formats: [:json], resource: AgentBotPresenter.new(agent_bot)
+end
diff --git a/app/views/api/v1/accounts/agent_bots/reset_access_token.json.jbuilder b/app/views/api/v1/accounts/agent_bots/reset_access_token.json.jbuilder
new file mode 100644
index 0000000..f647ac3
--- /dev/null
+++ b/app/views/api/v1/accounts/agent_bots/reset_access_token.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/agent_bot', formats: [:json], resource: AgentBotPresenter.new(@agent_bot)
diff --git a/app/views/api/v1/accounts/agent_bots/show.json.jbuilder b/app/views/api/v1/accounts/agent_bots/show.json.jbuilder
new file mode 100644
index 0000000..f647ac3
--- /dev/null
+++ b/app/views/api/v1/accounts/agent_bots/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/agent_bot', formats: [:json], resource: AgentBotPresenter.new(@agent_bot)
diff --git a/app/views/api/v1/accounts/agent_bots/update.json.jbuilder b/app/views/api/v1/accounts/agent_bots/update.json.jbuilder
new file mode 100644
index 0000000..f647ac3
--- /dev/null
+++ b/app/views/api/v1/accounts/agent_bots/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/agent_bot', formats: [:json], resource: AgentBotPresenter.new(@agent_bot)
diff --git a/app/views/api/v1/accounts/agents/create.json.jbuilder b/app/views/api/v1/accounts/agents/create.json.jbuilder
new file mode 100644
index 0000000..18760d9
--- /dev/null
+++ b/app/views/api/v1/accounts/agents/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/agent', formats: [:json], resource: @agent
diff --git a/app/views/api/v1/accounts/agents/index.json.jbuilder b/app/views/api/v1/accounts/agents/index.json.jbuilder
new file mode 100644
index 0000000..935e789
--- /dev/null
+++ b/app/views/api/v1/accounts/agents/index.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @agents do |agent|
+ json.partial! 'api/v1/models/agent', formats: [:json], resource: agent
+end
diff --git a/app/views/api/v1/accounts/agents/update.json.jbuilder b/app/views/api/v1/accounts/agents/update.json.jbuilder
new file mode 100644
index 0000000..18760d9
--- /dev/null
+++ b/app/views/api/v1/accounts/agents/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/agent', formats: [:json], resource: @agent
diff --git a/app/views/api/v1/accounts/articles/_article.json.jbuilder b/app/views/api/v1/accounts/articles/_article.json.jbuilder
new file mode 100644
index 0000000..8c03f8f
--- /dev/null
+++ b/app/views/api/v1/accounts/articles/_article.json.jbuilder
@@ -0,0 +1,33 @@
+json.id article.id
+json.slug article.slug
+json.title article.title
+json.content article.content
+json.description article.description
+json.status article.status
+json.position article.position
+json.account_id article.account_id
+json.updated_at article.updated_at.to_i
+json.meta article.meta
+
+json.category do
+ json.id article.category_id
+ json.name article.category&.name
+ json.slug article.category&.slug
+ json.locale article.category&.locale
+end
+
+json.views article.views
+
+if article.author.present?
+ json.author do
+ json.partial! 'api/v1/models/agent', formats: [:json], resource: article.author
+ end
+end
+
+json.associated_articles do
+ if article.associated_articles.any?
+ json.array! article.associated_articles.each do |associated_article|
+ json.partial! 'api/v1/accounts/articles/associated_article', formats: [:json], article: associated_article
+ end
+ end
+end
diff --git a/app/views/api/v1/accounts/articles/_associated_article.json.jbuilder b/app/views/api/v1/accounts/articles/_associated_article.json.jbuilder
new file mode 100644
index 0000000..3420188
--- /dev/null
+++ b/app/views/api/v1/accounts/articles/_associated_article.json.jbuilder
@@ -0,0 +1,21 @@
+json.id article.id
+json.category_id article.category_id
+json.title article.title
+json.content article.content
+json.description article.description
+json.status article.status
+json.account_id article.account_id
+
+if article.portal.present?
+ json.portal do
+ json.partial! 'api/v1/accounts/portals/portal', formats: [:json], portal: article.portal, articles: []
+ end
+end
+
+json.views article.views
+
+if article.author.present?
+ json.author do
+ json.partial! 'api/v1/models/agent', formats: [:json], resource: article.author
+ end
+end
diff --git a/app/views/api/v1/accounts/articles/create.json.jbuilder b/app/views/api/v1/accounts/articles/create.json.jbuilder
new file mode 100644
index 0000000..fdc6247
--- /dev/null
+++ b/app/views/api/v1/accounts/articles/create.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'article', article: @article
+end
diff --git a/app/views/api/v1/accounts/articles/edit.json.jbuilder b/app/views/api/v1/accounts/articles/edit.json.jbuilder
new file mode 100644
index 0000000..fdc6247
--- /dev/null
+++ b/app/views/api/v1/accounts/articles/edit.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'article', article: @article
+end
diff --git a/app/views/api/v1/accounts/articles/index.json.jbuilder b/app/views/api/v1/accounts/articles/index.json.jbuilder
new file mode 100644
index 0000000..62d61f7
--- /dev/null
+++ b/app/views/api/v1/accounts/articles/index.json.jbuilder
@@ -0,0 +1,13 @@
+json.payload do
+ json.array! @articles, partial: 'article', as: :article
+end
+
+json.meta do
+ json.all_articles_count @portal_articles.size
+ json.archived_articles_count @archived_articles_count
+ json.articles_count @articles_count
+ json.current_page @current_page
+ json.draft_articles_count @draft_articles_count
+ json.mine_articles_count @mine_articles_count
+ json.published_count @published_articles_count
+end
diff --git a/app/views/api/v1/accounts/articles/show.json.jbuilder b/app/views/api/v1/accounts/articles/show.json.jbuilder
new file mode 100644
index 0000000..fdc6247
--- /dev/null
+++ b/app/views/api/v1/accounts/articles/show.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'article', article: @article
+end
diff --git a/app/views/api/v1/accounts/articles/update.json.jbuilder b/app/views/api/v1/accounts/articles/update.json.jbuilder
new file mode 100644
index 0000000..fdc6247
--- /dev/null
+++ b/app/views/api/v1/accounts/articles/update.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'article', article: @article
+end
diff --git a/app/views/api/v1/accounts/assignable_agents/index.json.jbuilder b/app/views/api/v1/accounts/assignable_agents/index.json.jbuilder
new file mode 100644
index 0000000..295c5ce
--- /dev/null
+++ b/app/views/api/v1/accounts/assignable_agents/index.json.jbuilder
@@ -0,0 +1,5 @@
+json.payload do
+ json.array! @assignable_agents do |agent|
+ json.partial! 'api/v1/models/agent', formats: [:json], resource: agent
+ end
+end
diff --git a/app/views/api/v1/accounts/assignment_policies/_assignment_policy.json.jbuilder b/app/views/api/v1/accounts/assignment_policies/_assignment_policy.json.jbuilder
new file mode 100644
index 0000000..cf09a29
--- /dev/null
+++ b/app/views/api/v1/accounts/assignment_policies/_assignment_policy.json.jbuilder
@@ -0,0 +1,11 @@
+json.id assignment_policy.id
+json.name assignment_policy.name
+json.description assignment_policy.description
+json.assignment_order assignment_policy.assignment_order
+json.conversation_priority assignment_policy.conversation_priority
+json.fair_distribution_limit assignment_policy.fair_distribution_limit
+json.fair_distribution_window assignment_policy.fair_distribution_window
+json.enabled assignment_policy.enabled
+json.assigned_inbox_count assignment_policy.inboxes.count
+json.created_at assignment_policy.created_at.to_i
+json.updated_at assignment_policy.updated_at.to_i
diff --git a/app/views/api/v1/accounts/assignment_policies/create.json.jbuilder b/app/views/api/v1/accounts/assignment_policies/create.json.jbuilder
new file mode 100644
index 0000000..8fd9543
--- /dev/null
+++ b/app/views/api/v1/accounts/assignment_policies/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'assignment_policy', assignment_policy: @assignment_policy
diff --git a/app/views/api/v1/accounts/assignment_policies/inboxes/create.json.jbuilder b/app/views/api/v1/accounts/assignment_policies/inboxes/create.json.jbuilder
new file mode 100644
index 0000000..c5aede0
--- /dev/null
+++ b/app/views/api/v1/accounts/assignment_policies/inboxes/create.json.jbuilder
@@ -0,0 +1,5 @@
+json.id @inbox_assignment_policy.id
+json.inbox_id @inbox_assignment_policy.inbox_id
+json.assignment_policy_id @inbox_assignment_policy.assignment_policy_id
+json.created_at @inbox_assignment_policy.created_at.to_i
+json.updated_at @inbox_assignment_policy.updated_at.to_i
diff --git a/app/views/api/v1/accounts/assignment_policies/inboxes/index.json.jbuilder b/app/views/api/v1/accounts/assignment_policies/inboxes/index.json.jbuilder
new file mode 100644
index 0000000..5a22aa9
--- /dev/null
+++ b/app/views/api/v1/accounts/assignment_policies/inboxes/index.json.jbuilder
@@ -0,0 +1,3 @@
+json.inboxes @inboxes do |inbox|
+ json.partial! 'api/v1/models/inbox', formats: [:json], resource: inbox
+end
diff --git a/app/views/api/v1/accounts/assignment_policies/index.json.jbuilder b/app/views/api/v1/accounts/assignment_policies/index.json.jbuilder
new file mode 100644
index 0000000..0be431f
--- /dev/null
+++ b/app/views/api/v1/accounts/assignment_policies/index.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @assignment_policies do |assignment_policy|
+ json.partial! 'assignment_policy', assignment_policy: assignment_policy
+end
diff --git a/app/views/api/v1/accounts/assignment_policies/show.json.jbuilder b/app/views/api/v1/accounts/assignment_policies/show.json.jbuilder
new file mode 100644
index 0000000..8fd9543
--- /dev/null
+++ b/app/views/api/v1/accounts/assignment_policies/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'assignment_policy', assignment_policy: @assignment_policy
diff --git a/app/views/api/v1/accounts/assignment_policies/update.json.jbuilder b/app/views/api/v1/accounts/assignment_policies/update.json.jbuilder
new file mode 100644
index 0000000..8fd9543
--- /dev/null
+++ b/app/views/api/v1/accounts/assignment_policies/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'assignment_policy', assignment_policy: @assignment_policy
diff --git a/app/views/api/v1/accounts/automation_rules/clone.json.jbuilder b/app/views/api/v1/accounts/automation_rules/clone.json.jbuilder
new file mode 100644
index 0000000..1a78f4a
--- /dev/null
+++ b/app/views/api/v1/accounts/automation_rules/clone.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'api/v1/accounts/automation_rules/partials/automation_rule', formats: [:json], automation_rule: @automation_rule
+end
diff --git a/app/views/api/v1/accounts/automation_rules/create.json.jbuilder b/app/views/api/v1/accounts/automation_rules/create.json.jbuilder
new file mode 100644
index 0000000..a43a8a1
--- /dev/null
+++ b/app/views/api/v1/accounts/automation_rules/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/accounts/automation_rules/partials/automation_rule', formats: [:json], automation_rule: @automation_rule
diff --git a/app/views/api/v1/accounts/automation_rules/index.json.jbuilder b/app/views/api/v1/accounts/automation_rules/index.json.jbuilder
new file mode 100644
index 0000000..a4b4f81
--- /dev/null
+++ b/app/views/api/v1/accounts/automation_rules/index.json.jbuilder
@@ -0,0 +1,5 @@
+json.payload do
+ json.array! @automation_rules do |automation_rule|
+ json.partial! 'api/v1/accounts/automation_rules/partials/automation_rule', formats: [:json], automation_rule: automation_rule
+ end
+end
diff --git a/app/views/api/v1/accounts/automation_rules/partials/_automation_rule.json.jbuilder b/app/views/api/v1/accounts/automation_rules/partials/_automation_rule.json.jbuilder
new file mode 100644
index 0000000..a1047c8
--- /dev/null
+++ b/app/views/api/v1/accounts/automation_rules/partials/_automation_rule.json.jbuilder
@@ -0,0 +1,10 @@
+json.id automation_rule.id
+json.account_id automation_rule.account_id
+json.name automation_rule.name
+json.description automation_rule.description
+json.event_name automation_rule.event_name
+json.conditions automation_rule.conditions
+json.actions automation_rule.actions
+json.created_on automation_rule.created_at.to_i
+json.active automation_rule.active?
+json.files automation_rule.file_base_data if automation_rule.files.any?
diff --git a/app/views/api/v1/accounts/automation_rules/show.json.jbuilder b/app/views/api/v1/accounts/automation_rules/show.json.jbuilder
new file mode 100644
index 0000000..1a78f4a
--- /dev/null
+++ b/app/views/api/v1/accounts/automation_rules/show.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'api/v1/accounts/automation_rules/partials/automation_rule', formats: [:json], automation_rule: @automation_rule
+end
diff --git a/app/views/api/v1/accounts/automation_rules/update.json.jbuilder b/app/views/api/v1/accounts/automation_rules/update.json.jbuilder
new file mode 100644
index 0000000..1a78f4a
--- /dev/null
+++ b/app/views/api/v1/accounts/automation_rules/update.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'api/v1/accounts/automation_rules/partials/automation_rule', formats: [:json], automation_rule: @automation_rule
+end
diff --git a/app/views/api/v1/accounts/callbacks/facebook_pages.json.jbuilder b/app/views/api/v1/accounts/callbacks/facebook_pages.json.jbuilder
new file mode 100644
index 0000000..a3d4dcc
--- /dev/null
+++ b/app/views/api/v1/accounts/callbacks/facebook_pages.json.jbuilder
@@ -0,0 +1,4 @@
+json.data do
+ json.page_details @page_details
+ json.user_access_token @user_access_token
+end
diff --git a/app/views/api/v1/accounts/callbacks/reauthorize_page.json.jbuilder b/app/views/api/v1/accounts/callbacks/reauthorize_page.json.jbuilder
new file mode 100644
index 0000000..e12b90d
--- /dev/null
+++ b/app/views/api/v1/accounts/callbacks/reauthorize_page.json.jbuilder
@@ -0,0 +1,3 @@
+json.data do
+ json.partial! 'api/v1/models/inbox', formats: [:json], resource: @inbox
+end
diff --git a/app/views/api/v1/accounts/callbacks/register_facebook_page.json.jbuilder b/app/views/api/v1/accounts/callbacks/register_facebook_page.json.jbuilder
new file mode 100644
index 0000000..e9ee5e0
--- /dev/null
+++ b/app/views/api/v1/accounts/callbacks/register_facebook_page.json.jbuilder
@@ -0,0 +1,7 @@
+json.id @facebook_inbox.id
+json.channel_id @facebook_inbox.channel_id
+json.name @facebook_inbox.name
+json.channel_type @facebook_inbox.channel_type
+json.avatar_url @facebook_inbox.try(:avatar_url)
+json.page_id @facebook_inbox.channel.try(:page_id)
+json.enable_auto_assignment @facebook_inbox.enable_auto_assignment
diff --git a/app/views/api/v1/accounts/campaigns/create.json.jbuilder b/app/views/api/v1/accounts/campaigns/create.json.jbuilder
new file mode 100644
index 0000000..87482e1
--- /dev/null
+++ b/app/views/api/v1/accounts/campaigns/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/campaign', formats: [:json], resource: @campaign
diff --git a/app/views/api/v1/accounts/campaigns/index.json.jbuilder b/app/views/api/v1/accounts/campaigns/index.json.jbuilder
new file mode 100644
index 0000000..c51ec1d
--- /dev/null
+++ b/app/views/api/v1/accounts/campaigns/index.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @campaigns do |campaign|
+ json.partial! 'api/v1/models/campaign', formats: [:json], resource: campaign
+end
diff --git a/app/views/api/v1/accounts/campaigns/show.json.jbuilder b/app/views/api/v1/accounts/campaigns/show.json.jbuilder
new file mode 100644
index 0000000..87482e1
--- /dev/null
+++ b/app/views/api/v1/accounts/campaigns/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/campaign', formats: [:json], resource: @campaign
diff --git a/app/views/api/v1/accounts/campaigns/update.json.jbuilder b/app/views/api/v1/accounts/campaigns/update.json.jbuilder
new file mode 100644
index 0000000..87482e1
--- /dev/null
+++ b/app/views/api/v1/accounts/campaigns/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/campaign', formats: [:json], resource: @campaign
diff --git a/app/views/api/v1/accounts/categories/_associated_category.json.jbuilder b/app/views/api/v1/accounts/categories/_associated_category.json.jbuilder
new file mode 100644
index 0000000..4b4915d
--- /dev/null
+++ b/app/views/api/v1/accounts/categories/_associated_category.json.jbuilder
@@ -0,0 +1,7 @@
+json.id category.id
+json.name category.name
+json.slug category.slug
+json.locale category.locale
+json.description category.description
+json.position category.position
+json.account_id category.account_id
diff --git a/app/views/api/v1/accounts/categories/_category.json.jbuilder b/app/views/api/v1/accounts/categories/_category.json.jbuilder
new file mode 100644
index 0000000..c3674b7
--- /dev/null
+++ b/app/views/api/v1/accounts/categories/_category.json.jbuilder
@@ -0,0 +1,32 @@
+json.id category.id
+json.name category.name
+json.slug category.slug
+json.locale category.locale
+json.description category.description
+json.position category.position
+json.account_id category.account_id
+json.icon category.icon
+
+json.related_categories do
+ if category.related_categories.any?
+ json.array! category.related_categories.each do |related_category|
+ json.partial! 'api/v1/accounts/categories/associated_category', formats: [:json], category: related_category
+ end
+ end
+end
+
+if category.parent_category.present?
+ json.parent_category do
+ json.partial! 'api/v1/accounts/categories/associated_category', formats: [:json], category: category.parent_category
+ end
+end
+
+if category.root_category.present?
+ json.root_category do
+ json.partial! 'api/v1/accounts/categories/associated_category', formats: [:json], category: category.root_category
+ end
+end
+
+json.meta do
+ json.articles_count category.articles.search(locale: @current_locale).size
+end
diff --git a/app/views/api/v1/accounts/categories/create.json.jbuilder b/app/views/api/v1/accounts/categories/create.json.jbuilder
new file mode 100644
index 0000000..932cd6a
--- /dev/null
+++ b/app/views/api/v1/accounts/categories/create.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'category', category: @category
+end
diff --git a/app/views/api/v1/accounts/categories/index.json.jbuilder b/app/views/api/v1/accounts/categories/index.json.jbuilder
new file mode 100644
index 0000000..f73995c
--- /dev/null
+++ b/app/views/api/v1/accounts/categories/index.json.jbuilder
@@ -0,0 +1,8 @@
+json.payload do
+ json.array! @categories, partial: 'category', as: :category
+end
+
+json.meta do
+ json.current_page @current_page
+ json.categories_count @categories.size
+end
diff --git a/app/views/api/v1/accounts/categories/show.json.jbuilder b/app/views/api/v1/accounts/categories/show.json.jbuilder
new file mode 100644
index 0000000..932cd6a
--- /dev/null
+++ b/app/views/api/v1/accounts/categories/show.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'category', category: @category
+end
diff --git a/app/views/api/v1/accounts/categories/update.json.jbuilder b/app/views/api/v1/accounts/categories/update.json.jbuilder
new file mode 100644
index 0000000..932cd6a
--- /dev/null
+++ b/app/views/api/v1/accounts/categories/update.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'category', category: @category
+end
diff --git a/app/views/api/v1/accounts/channels/twilio_channels/create.json.jbuilder b/app/views/api/v1/accounts/channels/twilio_channels/create.json.jbuilder
new file mode 100644
index 0000000..2ad94ff
--- /dev/null
+++ b/app/views/api/v1/accounts/channels/twilio_channels/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/inbox', formats: [:json], resource: @inbox
diff --git a/app/views/api/v1/accounts/contact_inboxes/filter.json.jbuilder b/app/views/api/v1/accounts/contact_inboxes/filter.json.jbuilder
new file mode 100644
index 0000000..9b6c30d
--- /dev/null
+++ b/app/views/api/v1/accounts/contact_inboxes/filter.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/contact', formats: [:json], resource: @contact, with_contact_inboxes: true
diff --git a/app/views/api/v1/accounts/contacts/active.json.jbuilder b/app/views/api/v1/accounts/contacts/active.json.jbuilder
new file mode 100644
index 0000000..577dff4
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/active.json.jbuilder
@@ -0,0 +1,10 @@
+json.meta do
+ json.count @contacts_count
+ json.current_page @current_page
+end
+
+json.payload do
+ json.array! @contacts do |contact|
+ json.partial! 'api/v1/models/contact', formats: [:json], resource: contact, with_contact_inboxes: @include_contact_inboxes
+ end
+end
diff --git a/app/views/api/v1/accounts/contacts/avatar.json.jbuilder b/app/views/api/v1/accounts/contacts/avatar.json.jbuilder
new file mode 100644
index 0000000..897dcf5
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/avatar.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'api/v1/models/contact', formats: [:json], resource: @contact, with_contact_inboxes: false
+end
diff --git a/app/views/api/v1/accounts/contacts/contact_inboxes/create.json.jbuilder b/app/views/api/v1/accounts/contacts/contact_inboxes/create.json.jbuilder
new file mode 100644
index 0000000..e73bf6d
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/contact_inboxes/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/contact_inbox', formats: [:json], resource: @contact_inbox
diff --git a/app/views/api/v1/accounts/contacts/contactable_inboxes.json.jbuilder b/app/views/api/v1/accounts/contacts/contactable_inboxes.json.jbuilder
new file mode 100644
index 0000000..15babe3
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/contactable_inboxes.json.jbuilder
@@ -0,0 +1,8 @@
+json.payload do
+ json.array! @contactable_inboxes do |contactable_inbox|
+ json.inbox do
+ json.partial! 'api/v1/models/inbox_slim', formats: [:json], resource: contactable_inbox[:inbox]
+ end
+ json.source_id contactable_inbox[:source_id]
+ end
+end
diff --git a/app/views/api/v1/accounts/contacts/conversations/index.json.jbuilder b/app/views/api/v1/accounts/contacts/conversations/index.json.jbuilder
new file mode 100644
index 0000000..c81e4bd
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/conversations/index.json.jbuilder
@@ -0,0 +1,5 @@
+json.payload do
+ json.array! @conversations do |conversation|
+ json.partial! 'api/v1/conversations/partials/conversation', formats: [:json], conversation: conversation
+ end
+end
diff --git a/app/views/api/v1/accounts/contacts/create.json.jbuilder b/app/views/api/v1/accounts/contacts/create.json.jbuilder
new file mode 100644
index 0000000..ecbe596
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/create.json.jbuilder
@@ -0,0 +1,9 @@
+json.payload do
+ json.contact do
+ json.partial! 'api/v1/models/contact', formats: [:json], resource: @contact, with_contact_inboxes: true
+ end
+ json.contact_inbox do
+ json.inbox @contact_inbox&.inbox
+ json.source_id @contact_inbox&.source_id
+ end
+end
diff --git a/app/views/api/v1/accounts/contacts/destroy_custom_attributes.json.jbuilder b/app/views/api/v1/accounts/contacts/destroy_custom_attributes.json.jbuilder
new file mode 100644
index 0000000..524a393
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/destroy_custom_attributes.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'api/v1/models/contact', formats: [:json], resource: @contact, with_contact_inboxes: true
+end
diff --git a/app/views/api/v1/accounts/contacts/filter.json.jbuilder b/app/views/api/v1/accounts/contacts/filter.json.jbuilder
new file mode 100644
index 0000000..577dff4
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/filter.json.jbuilder
@@ -0,0 +1,10 @@
+json.meta do
+ json.count @contacts_count
+ json.current_page @current_page
+end
+
+json.payload do
+ json.array! @contacts do |contact|
+ json.partial! 'api/v1/models/contact', formats: [:json], resource: contact, with_contact_inboxes: @include_contact_inboxes
+ end
+end
diff --git a/app/views/api/v1/accounts/contacts/index.json.jbuilder b/app/views/api/v1/accounts/contacts/index.json.jbuilder
new file mode 100644
index 0000000..577dff4
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/index.json.jbuilder
@@ -0,0 +1,10 @@
+json.meta do
+ json.count @contacts_count
+ json.current_page @current_page
+end
+
+json.payload do
+ json.array! @contacts do |contact|
+ json.partial! 'api/v1/models/contact', formats: [:json], resource: contact, with_contact_inboxes: @include_contact_inboxes
+ end
+end
diff --git a/app/views/api/v1/accounts/contacts/labels/create.json.jbuilder b/app/views/api/v1/accounts/contacts/labels/create.json.jbuilder
new file mode 100644
index 0000000..b47f087
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/labels/create.json.jbuilder
@@ -0,0 +1 @@
+json.payload @labels
diff --git a/app/views/api/v1/accounts/contacts/labels/index.json.jbuilder b/app/views/api/v1/accounts/contacts/labels/index.json.jbuilder
new file mode 100644
index 0000000..b47f087
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/labels/index.json.jbuilder
@@ -0,0 +1 @@
+json.payload @labels
diff --git a/app/views/api/v1/accounts/contacts/notes/create.json.jbuilder b/app/views/api/v1/accounts/contacts/notes/create.json.jbuilder
new file mode 100644
index 0000000..5bec111
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/notes/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/note', formats: [:json], resource: @note
diff --git a/app/views/api/v1/accounts/contacts/notes/index.json.jbuilder b/app/views/api/v1/accounts/contacts/notes/index.json.jbuilder
new file mode 100644
index 0000000..f224301
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/notes/index.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @notes do |note|
+ json.partial! 'api/v1/models/note', formats: [:json], resource: note
+end
diff --git a/app/views/api/v1/accounts/contacts/notes/show.json.jbuilder b/app/views/api/v1/accounts/contacts/notes/show.json.jbuilder
new file mode 100644
index 0000000..5bec111
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/notes/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/note', formats: [:json], resource: @note
diff --git a/app/views/api/v1/accounts/contacts/notes/update.json.jbuilder b/app/views/api/v1/accounts/contacts/notes/update.json.jbuilder
new file mode 100644
index 0000000..5bec111
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/notes/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/note', formats: [:json], resource: @note
diff --git a/app/views/api/v1/accounts/contacts/search.json.jbuilder b/app/views/api/v1/accounts/contacts/search.json.jbuilder
new file mode 100644
index 0000000..577dff4
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/search.json.jbuilder
@@ -0,0 +1,10 @@
+json.meta do
+ json.count @contacts_count
+ json.current_page @current_page
+end
+
+json.payload do
+ json.array! @contacts do |contact|
+ json.partial! 'api/v1/models/contact', formats: [:json], resource: contact, with_contact_inboxes: @include_contact_inboxes
+ end
+end
diff --git a/app/views/api/v1/accounts/contacts/show.json.jbuilder b/app/views/api/v1/accounts/contacts/show.json.jbuilder
new file mode 100644
index 0000000..1add733
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/show.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'api/v1/models/contact', formats: [:json], resource: @contact, with_contact_inboxes: @include_contact_inboxes
+end
diff --git a/app/views/api/v1/accounts/contacts/update.json.jbuilder b/app/views/api/v1/accounts/contacts/update.json.jbuilder
new file mode 100644
index 0000000..1add733
--- /dev/null
+++ b/app/views/api/v1/accounts/contacts/update.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'api/v1/models/contact', formats: [:json], resource: @contact, with_contact_inboxes: @include_contact_inboxes
+end
diff --git a/app/views/api/v1/accounts/conversations/attachments.json.jbuilder b/app/views/api/v1/accounts/conversations/attachments.json.jbuilder
new file mode 100644
index 0000000..167b183
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/attachments.json.jbuilder
@@ -0,0 +1,16 @@
+json.meta do
+ json.total_count @attachments_count
+end
+
+json.payload @attachments do |attachment|
+ json.message_id attachment.push_event_data[:message_id]
+ json.thumb_url attachment.push_event_data[:thumb_url]
+ json.data_url attachment.push_event_data[:data_url]
+ json.file_size attachment.push_event_data[:file_size]
+ json.file_type attachment.push_event_data[:file_type]
+ json.extension attachment.push_event_data[:extension]
+ json.width attachment.push_event_data[:width]
+ json.height attachment.push_event_data[:height]
+ json.created_at attachment.message.created_at.to_i
+ json.sender attachment.message.sender.push_event_data if attachment.message.sender
+end
diff --git a/app/views/api/v1/accounts/conversations/create.json.jbuilder b/app/views/api/v1/accounts/conversations/create.json.jbuilder
new file mode 100644
index 0000000..c273dd3
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/conversations/partials/conversation', formats: [:json], conversation: @conversation
diff --git a/app/views/api/v1/accounts/conversations/custom_attributes.json.jbuilder b/app/views/api/v1/accounts/conversations/custom_attributes.json.jbuilder
new file mode 100644
index 0000000..1ca5128
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/custom_attributes.json.jbuilder
@@ -0,0 +1 @@
+json.custom_attributes @conversation.custom_attributes
diff --git a/app/views/api/v1/accounts/conversations/filter.json.jbuilder b/app/views/api/v1/accounts/conversations/filter.json.jbuilder
new file mode 100644
index 0000000..d72c4e8
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/filter.json.jbuilder
@@ -0,0 +1,10 @@
+json.meta do
+ json.mine_count @conversations_count[:mine_count]
+ json.unassigned_count @conversations_count[:unassigned_count]
+ json.all_count @conversations_count[:all_count]
+end
+json.payload do
+ json.array! @conversations do |conversation|
+ json.partial! 'api/v1/conversations/partials/conversation', formats: [:json], conversation: conversation
+ end
+end
diff --git a/app/views/api/v1/accounts/conversations/index.json.jbuilder b/app/views/api/v1/accounts/conversations/index.json.jbuilder
new file mode 100644
index 0000000..670899f
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/index.json.jbuilder
@@ -0,0 +1,13 @@
+json.data do
+ json.meta do
+ json.mine_count @conversations_count[:mine_count]
+ json.assigned_count @conversations_count[:assigned_count]
+ json.unassigned_count @conversations_count[:unassigned_count]
+ json.all_count @conversations_count[:all_count]
+ end
+ json.payload do
+ json.array! @conversations do |conversation|
+ json.partial! 'api/v1/conversations/partials/conversation', formats: [:json], conversation: conversation
+ end
+ end
+end
diff --git a/app/views/api/v1/accounts/conversations/labels/create.json.jbuilder b/app/views/api/v1/accounts/conversations/labels/create.json.jbuilder
new file mode 100644
index 0000000..b47f087
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/labels/create.json.jbuilder
@@ -0,0 +1 @@
+json.payload @labels
diff --git a/app/views/api/v1/accounts/conversations/labels/index.json.jbuilder b/app/views/api/v1/accounts/conversations/labels/index.json.jbuilder
new file mode 100644
index 0000000..b47f087
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/labels/index.json.jbuilder
@@ -0,0 +1 @@
+json.payload @labels
diff --git a/app/views/api/v1/accounts/conversations/messages/create.json.jbuilder b/app/views/api/v1/accounts/conversations/messages/create.json.jbuilder
new file mode 100644
index 0000000..3798b6c
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/messages/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/message', message: @message
diff --git a/app/views/api/v1/accounts/conversations/messages/destroy.json.jbuilder b/app/views/api/v1/accounts/conversations/messages/destroy.json.jbuilder
new file mode 100644
index 0000000..3798b6c
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/messages/destroy.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/message', message: @message
diff --git a/app/views/api/v1/accounts/conversations/messages/index.json.jbuilder b/app/views/api/v1/accounts/conversations/messages/index.json.jbuilder
new file mode 100644
index 0000000..2a1511d
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/messages/index.json.jbuilder
@@ -0,0 +1,14 @@
+json.meta do
+ json.labels @conversation.cached_label_list_array
+ json.additional_attributes @conversation.additional_attributes
+ json.contact @conversation.contact.push_event_data
+ json.assignee @conversation.assignee.push_event_data if @conversation.assignee.present?
+ json.agent_last_seen_at @conversation.agent_last_seen_at
+ json.assignee_last_seen_at @conversation.assignee_last_seen_at
+end
+
+json.payload do
+ json.array! @messages do |message|
+ json.partial! 'api/v1/models/message', message: message
+ end
+end
diff --git a/app/views/api/v1/accounts/conversations/messages/retry.json.jbuilder b/app/views/api/v1/accounts/conversations/messages/retry.json.jbuilder
new file mode 100644
index 0000000..3798b6c
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/messages/retry.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/message', message: @message
diff --git a/app/views/api/v1/accounts/conversations/messages/update.json.jbuilder b/app/views/api/v1/accounts/conversations/messages/update.json.jbuilder
new file mode 100644
index 0000000..3798b6c
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/messages/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/message', message: @message
diff --git a/app/views/api/v1/accounts/conversations/meta.json.jbuilder b/app/views/api/v1/accounts/conversations/meta.json.jbuilder
new file mode 100644
index 0000000..0326ad5
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/meta.json.jbuilder
@@ -0,0 +1,6 @@
+json.meta do
+ json.mine_count @conversations_count[:mine_count]
+ json.assigned_count @conversations_count[:assigned_count]
+ json.unassigned_count @conversations_count[:unassigned_count]
+ json.all_count @conversations_count[:all_count]
+end
diff --git a/app/views/api/v1/accounts/conversations/participants/create.json.jbuilder b/app/views/api/v1/accounts/conversations/participants/create.json.jbuilder
new file mode 100644
index 0000000..5de9584
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/participants/create.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @participants do |participant|
+ json.partial! 'api/v1/models/agent', format: :json, resource: participant.user
+end
diff --git a/app/views/api/v1/accounts/conversations/participants/show.json.jbuilder b/app/views/api/v1/accounts/conversations/participants/show.json.jbuilder
new file mode 100644
index 0000000..5de9584
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/participants/show.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @participants do |participant|
+ json.partial! 'api/v1/models/agent', format: :json, resource: participant.user
+end
diff --git a/app/views/api/v1/accounts/conversations/search.json.jbuilder b/app/views/api/v1/accounts/conversations/search.json.jbuilder
new file mode 100644
index 0000000..fce9749
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/search.json.jbuilder
@@ -0,0 +1,10 @@
+json.meta do
+ json.mine_count @conversations_count[:mine_count]
+ json.unassigned_count @conversations_count[:unassigned_count]
+ json.all_count @conversations_count[:all_count]
+end
+json.payload do
+ json.array! @conversations do |conversation|
+ json.partial! 'api/v1/models/conversation', formats: [:json], conversation: conversation
+ end
+end
diff --git a/app/views/api/v1/accounts/conversations/show.json.jbuilder b/app/views/api/v1/accounts/conversations/show.json.jbuilder
new file mode 100644
index 0000000..c273dd3
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/conversations/partials/conversation', formats: [:json], conversation: @conversation
diff --git a/app/views/api/v1/accounts/conversations/toggle_status.json.jbuilder b/app/views/api/v1/accounts/conversations/toggle_status.json.jbuilder
new file mode 100644
index 0000000..00cd070
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/toggle_status.json.jbuilder
@@ -0,0 +1,9 @@
+json.meta do
+end
+
+json.payload do
+ json.success @status
+ json.conversation_id @conversation.display_id
+ json.current_status @conversation.status
+ json.snoozed_until @conversation.snoozed_until
+end
diff --git a/app/views/api/v1/accounts/conversations/unread.json.jbuilder b/app/views/api/v1/accounts/conversations/unread.json.jbuilder
new file mode 100644
index 0000000..c273dd3
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/unread.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/conversations/partials/conversation', formats: [:json], conversation: @conversation
diff --git a/app/views/api/v1/accounts/conversations/update.json.jbuilder b/app/views/api/v1/accounts/conversations/update.json.jbuilder
new file mode 100644
index 0000000..c273dd3
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/conversations/partials/conversation', formats: [:json], conversation: @conversation
diff --git a/app/views/api/v1/accounts/conversations/update_last_seen.json.jbuilder b/app/views/api/v1/accounts/conversations/update_last_seen.json.jbuilder
new file mode 100644
index 0000000..c273dd3
--- /dev/null
+++ b/app/views/api/v1/accounts/conversations/update_last_seen.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/conversations/partials/conversation', formats: [:json], conversation: @conversation
diff --git a/app/views/api/v1/accounts/create.json.jbuilder b/app/views/api/v1/accounts/create.json.jbuilder
new file mode 100644
index 0000000..b423b53
--- /dev/null
+++ b/app/views/api/v1/accounts/create.json.jbuilder
@@ -0,0 +1,25 @@
+json.data do
+ json.id resource.id
+ json.provider resource.provider
+ json.uid resource.uid
+ json.name resource.name
+ json.display_name resource.display_name
+ json.email resource.email
+ json.account_id @account.id
+ json.created_at resource.created_at
+ json.pubsub_token resource.pubsub_token
+ json.role resource.active_account_user&.role
+ json.inviter_id resource.active_account_user&.inviter_id
+ json.confirmed resource.confirmed?
+ json.avatar_url resource.avatar_url
+ json.access_token resource.access_token.token
+ json.accounts do
+ json.array! resource.account_users do |account_user|
+ json.id account_user.account_id
+ json.name account_user.account.name
+ json.active_at account_user.active_at
+ json.role account_user.role
+ json.locale account_user.account.locale
+ end
+ end
+end
diff --git a/app/views/api/v1/accounts/csat_survey_responses/download.csv.erb b/app/views/api/v1/accounts/csat_survey_responses/download.csv.erb
new file mode 100644
index 0000000..ba17c17
--- /dev/null
+++ b/app/views/api/v1/accounts/csat_survey_responses/download.csv.erb
@@ -0,0 +1,42 @@
+<%
+ headers = [
+ I18n.t('reports.csat.headers.agent_name'),
+ I18n.t('reports.csat.headers.rating'),
+ I18n.t('reports.csat.headers.feedback'),
+ I18n.t('reports.csat.headers.contact_name'),
+ I18n.t('reports.csat.headers.contact_email_address'),
+ I18n.t('reports.csat.headers.contact_phone_number'),
+ I18n.t('reports.csat.headers.link_to_the_conversation'),
+ I18n.t('reports.csat.headers.recorded_at')
+ ]
+ headers << I18n.t('reports.csat.headers.review_notes') if ChatwootApp.enterprise?
+-%>
+<%= CSV.generate_line(headers) -%>
+<% @csat_survey_responses.each do |csat_response| %>
+<% assigned_agent = csat_response.assigned_agent %>
+<% contact = csat_response.contact %>
+<% conversation = csat_response.conversation %>
+<%
+ row = [
+ assigned_agent ? "#{assigned_agent.name} (#{assigned_agent.email})" : nil,
+ csat_response.rating,
+ csat_response.feedback_message.presence,
+ contact&.name.presence,
+ contact&.email.presence,
+ contact&.phone_number.presence,
+ conversation ? app_account_conversation_url(account_id: Current.account.id, id: conversation.display_id) : nil,
+ csat_response.created_at
+ ]
+ row << csat_response.csat_review_notes if ChatwootApp.enterprise?
+-%>
+<%= CSV.generate_line(row).html_safe -%>
+<% end %>
+<%=
+ CSV.generate_line([
+ I18n.t(
+ 'reports.period',
+ since: Date.strptime(params[:since], '%s'),
+ until: Date.strptime(params[:until], '%s')
+ )
+ ])
+-%>
diff --git a/app/views/api/v1/accounts/csat_survey_responses/index.json.jbuilder b/app/views/api/v1/accounts/csat_survey_responses/index.json.jbuilder
new file mode 100644
index 0000000..ab15426
--- /dev/null
+++ b/app/views/api/v1/accounts/csat_survey_responses/index.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @csat_survey_responses do |csat_survey_response|
+ json.partial! 'api/v1/models/csat_survey_response', formats: [:json], resource: csat_survey_response
+end
diff --git a/app/views/api/v1/accounts/csat_survey_responses/metrics.json.jbuilder b/app/views/api/v1/accounts/csat_survey_responses/metrics.json.jbuilder
new file mode 100644
index 0000000..4de4708
--- /dev/null
+++ b/app/views/api/v1/accounts/csat_survey_responses/metrics.json.jbuilder
@@ -0,0 +1,3 @@
+json.total_count @total_count
+json.ratings_count @ratings_count
+json.total_sent_messages_count @total_sent_messages_count
diff --git a/app/views/api/v1/accounts/csat_survey_responses/update.json.jbuilder b/app/views/api/v1/accounts/csat_survey_responses/update.json.jbuilder
new file mode 100644
index 0000000..065eb23
--- /dev/null
+++ b/app/views/api/v1/accounts/csat_survey_responses/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/csat_survey_response', formats: [:json], resource: @csat_survey_response
diff --git a/app/views/api/v1/accounts/custom_attribute_definitions/create.json.jbuilder b/app/views/api/v1/accounts/custom_attribute_definitions/create.json.jbuilder
new file mode 100644
index 0000000..b92e2d1
--- /dev/null
+++ b/app/views/api/v1/accounts/custom_attribute_definitions/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/custom_attribute_definition', formats: [:json], resource: @custom_attribute_definition
diff --git a/app/views/api/v1/accounts/custom_attribute_definitions/index.json.jbuilder b/app/views/api/v1/accounts/custom_attribute_definitions/index.json.jbuilder
new file mode 100644
index 0000000..d7ab49b
--- /dev/null
+++ b/app/views/api/v1/accounts/custom_attribute_definitions/index.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @custom_attribute_definitions do |custom_attribute_definition|
+ json.partial! 'api/v1/models/custom_attribute_definition', formats: [:json], resource: custom_attribute_definition
+end
diff --git a/app/views/api/v1/accounts/custom_attribute_definitions/show.json.jbuilder b/app/views/api/v1/accounts/custom_attribute_definitions/show.json.jbuilder
new file mode 100644
index 0000000..b92e2d1
--- /dev/null
+++ b/app/views/api/v1/accounts/custom_attribute_definitions/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/custom_attribute_definition', formats: [:json], resource: @custom_attribute_definition
diff --git a/app/views/api/v1/accounts/custom_attribute_definitions/update.json.jbuilder b/app/views/api/v1/accounts/custom_attribute_definitions/update.json.jbuilder
new file mode 100644
index 0000000..b92e2d1
--- /dev/null
+++ b/app/views/api/v1/accounts/custom_attribute_definitions/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/custom_attribute_definition', formats: [:json], resource: @custom_attribute_definition
diff --git a/app/views/api/v1/accounts/custom_filters/create.json.jbuilder b/app/views/api/v1/accounts/custom_filters/create.json.jbuilder
new file mode 100644
index 0000000..0a2b07c
--- /dev/null
+++ b/app/views/api/v1/accounts/custom_filters/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/custom_filter', formats: [:json], resource: @custom_filter
diff --git a/app/views/api/v1/accounts/custom_filters/index.json.jbuilder b/app/views/api/v1/accounts/custom_filters/index.json.jbuilder
new file mode 100644
index 0000000..ff3c2b2
--- /dev/null
+++ b/app/views/api/v1/accounts/custom_filters/index.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @custom_filters do |custom_filter|
+ json.partial! 'api/v1/models/custom_filter', formats: [:json], resource: custom_filter
+end
diff --git a/app/views/api/v1/accounts/custom_filters/show.json.jbuilder b/app/views/api/v1/accounts/custom_filters/show.json.jbuilder
new file mode 100644
index 0000000..0a2b07c
--- /dev/null
+++ b/app/views/api/v1/accounts/custom_filters/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/custom_filter', formats: [:json], resource: @custom_filter
diff --git a/app/views/api/v1/accounts/custom_filters/update.json.jbuilder b/app/views/api/v1/accounts/custom_filters/update.json.jbuilder
new file mode 100644
index 0000000..0a2b07c
--- /dev/null
+++ b/app/views/api/v1/accounts/custom_filters/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/custom_filter', formats: [:json], resource: @custom_filter
diff --git a/app/views/api/v1/accounts/dashboard_apps/create.json.jbuilder b/app/views/api/v1/accounts/dashboard_apps/create.json.jbuilder
new file mode 100644
index 0000000..6ee3dc0
--- /dev/null
+++ b/app/views/api/v1/accounts/dashboard_apps/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/dashboard_app', formats: [:json], resource: @dashboard_app
diff --git a/app/views/api/v1/accounts/dashboard_apps/index.json.jbuilder b/app/views/api/v1/accounts/dashboard_apps/index.json.jbuilder
new file mode 100644
index 0000000..9ab1d64
--- /dev/null
+++ b/app/views/api/v1/accounts/dashboard_apps/index.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @dashboard_apps do |dashboard_app|
+ json.partial! 'api/v1/models/dashboard_app', formats: [:json], resource: dashboard_app
+end
diff --git a/app/views/api/v1/accounts/dashboard_apps/show.json.jbuilder b/app/views/api/v1/accounts/dashboard_apps/show.json.jbuilder
new file mode 100644
index 0000000..6ee3dc0
--- /dev/null
+++ b/app/views/api/v1/accounts/dashboard_apps/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/dashboard_app', formats: [:json], resource: @dashboard_app
diff --git a/app/views/api/v1/accounts/dashboard_apps/update.json.jbuilder b/app/views/api/v1/accounts/dashboard_apps/update.json.jbuilder
new file mode 100644
index 0000000..6ee3dc0
--- /dev/null
+++ b/app/views/api/v1/accounts/dashboard_apps/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/dashboard_app', formats: [:json], resource: @dashboard_app
diff --git a/app/views/api/v1/accounts/inbox_members/create.json.jbuilder b/app/views/api/v1/accounts/inbox_members/create.json.jbuilder
new file mode 100644
index 0000000..c80827c
--- /dev/null
+++ b/app/views/api/v1/accounts/inbox_members/create.json.jbuilder
@@ -0,0 +1,5 @@
+json.payload do
+ json.array! @agents do |agent|
+ json.partial! 'api/v1/models/agent', formats: [:json], resource: agent
+ end
+end
diff --git a/app/views/api/v1/accounts/inbox_members/show.json.jbuilder b/app/views/api/v1/accounts/inbox_members/show.json.jbuilder
new file mode 100644
index 0000000..c80827c
--- /dev/null
+++ b/app/views/api/v1/accounts/inbox_members/show.json.jbuilder
@@ -0,0 +1,5 @@
+json.payload do
+ json.array! @agents do |agent|
+ json.partial! 'api/v1/models/agent', formats: [:json], resource: agent
+ end
+end
diff --git a/app/views/api/v1/accounts/inbox_members/update.json.jbuilder b/app/views/api/v1/accounts/inbox_members/update.json.jbuilder
new file mode 100644
index 0000000..c80827c
--- /dev/null
+++ b/app/views/api/v1/accounts/inbox_members/update.json.jbuilder
@@ -0,0 +1,5 @@
+json.payload do
+ json.array! @agents do |agent|
+ json.partial! 'api/v1/models/agent', formats: [:json], resource: agent
+ end
+end
diff --git a/app/views/api/v1/accounts/inboxes/agent_bot.json.jbuilder b/app/views/api/v1/accounts/inboxes/agent_bot.json.jbuilder
new file mode 100644
index 0000000..2ffc9c4
--- /dev/null
+++ b/app/views/api/v1/accounts/inboxes/agent_bot.json.jbuilder
@@ -0,0 +1,3 @@
+json.agent_bot do
+ json.partial! 'api/v1/models/agent_bot', formats: [:json], resource: @agent_bot if @agent_bot.present?
+end
diff --git a/app/views/api/v1/accounts/inboxes/assignable_agents.json.jbuilder b/app/views/api/v1/accounts/inboxes/assignable_agents.json.jbuilder
new file mode 100644
index 0000000..295c5ce
--- /dev/null
+++ b/app/views/api/v1/accounts/inboxes/assignable_agents.json.jbuilder
@@ -0,0 +1,5 @@
+json.payload do
+ json.array! @assignable_agents do |agent|
+ json.partial! 'api/v1/models/agent', formats: [:json], resource: agent
+ end
+end
diff --git a/app/views/api/v1/accounts/inboxes/assignment_policies/create.json.jbuilder b/app/views/api/v1/accounts/inboxes/assignment_policies/create.json.jbuilder
new file mode 100644
index 0000000..1056587
--- /dev/null
+++ b/app/views/api/v1/accounts/inboxes/assignment_policies/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/accounts/assignment_policies/assignment_policy', formats: [:json], assignment_policy: @assignment_policy
diff --git a/app/views/api/v1/accounts/inboxes/assignment_policies/show.json.jbuilder b/app/views/api/v1/accounts/inboxes/assignment_policies/show.json.jbuilder
new file mode 100644
index 0000000..1056587
--- /dev/null
+++ b/app/views/api/v1/accounts/inboxes/assignment_policies/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/accounts/assignment_policies/assignment_policy', formats: [:json], assignment_policy: @assignment_policy
diff --git a/app/views/api/v1/accounts/inboxes/campaigns.json.jbuilder b/app/views/api/v1/accounts/inboxes/campaigns.json.jbuilder
new file mode 100644
index 0000000..c51ec1d
--- /dev/null
+++ b/app/views/api/v1/accounts/inboxes/campaigns.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @campaigns do |campaign|
+ json.partial! 'api/v1/models/campaign', formats: [:json], resource: campaign
+end
diff --git a/app/views/api/v1/accounts/inboxes/create.json.jbuilder b/app/views/api/v1/accounts/inboxes/create.json.jbuilder
new file mode 100644
index 0000000..2ad94ff
--- /dev/null
+++ b/app/views/api/v1/accounts/inboxes/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/inbox', formats: [:json], resource: @inbox
diff --git a/app/views/api/v1/accounts/inboxes/index.json.jbuilder b/app/views/api/v1/accounts/inboxes/index.json.jbuilder
new file mode 100644
index 0000000..501ff97
--- /dev/null
+++ b/app/views/api/v1/accounts/inboxes/index.json.jbuilder
@@ -0,0 +1,5 @@
+json.payload do
+ json.array! @inboxes do |inbox|
+ json.partial! 'api/v1/models/inbox', formats: [:json], resource: inbox
+ end
+end
diff --git a/app/views/api/v1/accounts/inboxes/show.json.jbuilder b/app/views/api/v1/accounts/inboxes/show.json.jbuilder
new file mode 100644
index 0000000..2ad94ff
--- /dev/null
+++ b/app/views/api/v1/accounts/inboxes/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/inbox', formats: [:json], resource: @inbox
diff --git a/app/views/api/v1/accounts/inboxes/update.json.jbuilder b/app/views/api/v1/accounts/inboxes/update.json.jbuilder
new file mode 100644
index 0000000..2ad94ff
--- /dev/null
+++ b/app/views/api/v1/accounts/inboxes/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/inbox', formats: [:json], resource: @inbox
diff --git a/app/views/api/v1/accounts/integrations/apps/index.json.jbuilder b/app/views/api/v1/accounts/integrations/apps/index.json.jbuilder
new file mode 100644
index 0000000..4b46a29
--- /dev/null
+++ b/app/views/api/v1/accounts/integrations/apps/index.json.jbuilder
@@ -0,0 +1,5 @@
+json.payload do
+ json.array! @apps do |app|
+ json.partial! 'api/v1/models/app', formats: [:json], resource: app
+ end
+end
diff --git a/app/views/api/v1/accounts/integrations/apps/show.json.jbuilder b/app/views/api/v1/accounts/integrations/apps/show.json.jbuilder
new file mode 100644
index 0000000..4270337
--- /dev/null
+++ b/app/views/api/v1/accounts/integrations/apps/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/app', formats: [:json], resource: @app
diff --git a/app/views/api/v1/accounts/integrations/hooks/create.json.jbuilder b/app/views/api/v1/accounts/integrations/hooks/create.json.jbuilder
new file mode 100644
index 0000000..6c6f810
--- /dev/null
+++ b/app/views/api/v1/accounts/integrations/hooks/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/hook', formats: [:json], resource: @hook
diff --git a/app/views/api/v1/accounts/integrations/hooks/update.json.jbuilder b/app/views/api/v1/accounts/integrations/hooks/update.json.jbuilder
new file mode 100644
index 0000000..6c6f810
--- /dev/null
+++ b/app/views/api/v1/accounts/integrations/hooks/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/hook', formats: [:json], resource: @hook
diff --git a/app/views/api/v1/accounts/integrations/linear/create.json.jbuilder b/app/views/api/v1/accounts/integrations/linear/create.json.jbuilder
new file mode 100644
index 0000000..c208c81
--- /dev/null
+++ b/app/views/api/v1/accounts/integrations/linear/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/app', formats: [:json], resource: @hook.app
diff --git a/app/views/api/v1/accounts/integrations/slack/create.json.jbuilder b/app/views/api/v1/accounts/integrations/slack/create.json.jbuilder
new file mode 100644
index 0000000..c208c81
--- /dev/null
+++ b/app/views/api/v1/accounts/integrations/slack/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/app', formats: [:json], resource: @hook.app
diff --git a/app/views/api/v1/accounts/integrations/slack/list_all_channels.json.jbuilder b/app/views/api/v1/accounts/integrations/slack/list_all_channels.json.jbuilder
new file mode 100644
index 0000000..a70f30c
--- /dev/null
+++ b/app/views/api/v1/accounts/integrations/slack/list_all_channels.json.jbuilder
@@ -0,0 +1,4 @@
+json.array! @channels do |channel|
+ json.id channel['id']
+ json.name channel['name']
+end
diff --git a/app/views/api/v1/accounts/integrations/slack/update.json.jbuilder b/app/views/api/v1/accounts/integrations/slack/update.json.jbuilder
new file mode 100644
index 0000000..c208c81
--- /dev/null
+++ b/app/views/api/v1/accounts/integrations/slack/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/app', formats: [:json], resource: @hook.app
diff --git a/app/views/api/v1/accounts/labels/create.json.jbuilder b/app/views/api/v1/accounts/labels/create.json.jbuilder
new file mode 100644
index 0000000..edeff66
--- /dev/null
+++ b/app/views/api/v1/accounts/labels/create.json.jbuilder
@@ -0,0 +1,5 @@
+json.id @label.id
+json.title @label.title
+json.description @label.description
+json.color @label.color
+json.show_on_sidebar @label.show_on_sidebar
diff --git a/app/views/api/v1/accounts/labels/index.json.jbuilder b/app/views/api/v1/accounts/labels/index.json.jbuilder
new file mode 100644
index 0000000..ddff73e
--- /dev/null
+++ b/app/views/api/v1/accounts/labels/index.json.jbuilder
@@ -0,0 +1,9 @@
+json.payload do
+ json.array! @labels do |label|
+ json.id label.id
+ json.title label.title
+ json.description label.description
+ json.color label.color
+ json.show_on_sidebar label.show_on_sidebar
+ end
+end
diff --git a/app/views/api/v1/accounts/labels/show.json.jbuilder b/app/views/api/v1/accounts/labels/show.json.jbuilder
new file mode 100644
index 0000000..edeff66
--- /dev/null
+++ b/app/views/api/v1/accounts/labels/show.json.jbuilder
@@ -0,0 +1,5 @@
+json.id @label.id
+json.title @label.title
+json.description @label.description
+json.color @label.color
+json.show_on_sidebar @label.show_on_sidebar
diff --git a/app/views/api/v1/accounts/labels/update.json.jbuilder b/app/views/api/v1/accounts/labels/update.json.jbuilder
new file mode 100644
index 0000000..edeff66
--- /dev/null
+++ b/app/views/api/v1/accounts/labels/update.json.jbuilder
@@ -0,0 +1,5 @@
+json.id @label.id
+json.title @label.title
+json.description @label.description
+json.color @label.color
+json.show_on_sidebar @label.show_on_sidebar
diff --git a/app/views/api/v1/accounts/macros/create.json.jbuilder b/app/views/api/v1/accounts/macros/create.json.jbuilder
new file mode 100644
index 0000000..acc2a88
--- /dev/null
+++ b/app/views/api/v1/accounts/macros/create.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'api/v1/models/macro', formats: [:json], macro: @macro
+end
diff --git a/app/views/api/v1/accounts/macros/index.json.jbuilder b/app/views/api/v1/accounts/macros/index.json.jbuilder
new file mode 100644
index 0000000..ab43404
--- /dev/null
+++ b/app/views/api/v1/accounts/macros/index.json.jbuilder
@@ -0,0 +1,5 @@
+json.payload do
+ json.array! @macros do |macro|
+ json.partial! 'api/v1/models/macro', formats: [:json], macro: macro
+ end
+end
diff --git a/app/views/api/v1/accounts/macros/show.json.jbuilder b/app/views/api/v1/accounts/macros/show.json.jbuilder
new file mode 100644
index 0000000..acc2a88
--- /dev/null
+++ b/app/views/api/v1/accounts/macros/show.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'api/v1/models/macro', formats: [:json], macro: @macro
+end
diff --git a/app/views/api/v1/accounts/macros/update.json.jbuilder b/app/views/api/v1/accounts/macros/update.json.jbuilder
new file mode 100644
index 0000000..acc2a88
--- /dev/null
+++ b/app/views/api/v1/accounts/macros/update.json.jbuilder
@@ -0,0 +1,3 @@
+json.payload do
+ json.partial! 'api/v1/models/macro', formats: [:json], macro: @macro
+end
diff --git a/app/views/api/v1/accounts/notification_settings/show.json.jbuilder b/app/views/api/v1/accounts/notification_settings/show.json.jbuilder
new file mode 100644
index 0000000..16d0d88
--- /dev/null
+++ b/app/views/api/v1/accounts/notification_settings/show.json.jbuilder
@@ -0,0 +1,7 @@
+json.id @notification_setting.id
+json.user_id @notification_setting.user_id
+json.account_id @notification_setting.account_id
+json.all_email_flags @notification_setting.all_email_flags
+json.selected_email_flags @notification_setting.selected_email_flags
+json.all_push_flags @notification_setting.all_push_flags
+json.selected_push_flags @notification_setting.selected_push_flags
diff --git a/app/views/api/v1/accounts/notifications/index.json.jbuilder b/app/views/api/v1/accounts/notifications/index.json.jbuilder
new file mode 100644
index 0000000..0885826
--- /dev/null
+++ b/app/views/api/v1/accounts/notifications/index.json.jbuilder
@@ -0,0 +1,28 @@
+json.data do
+ json.meta do
+ json.unread_count @unread_count
+ json.count @count
+ json.current_page @current_page
+ end
+
+ json.payload do
+ json.array! @notifications do |notification|
+ json.id notification.id
+ json.notification_type notification.notification_type
+ json.push_message_title notification.push_message_title
+ json.push_message_body notification.push_message_body
+ # TODO: front end assumes primary actor to be conversation. should fix in future
+ json.primary_actor_type notification.primary_actor_type
+ json.primary_actor_id notification.primary_actor_id
+ json.primary_actor notification.primary_actor.push_event_data
+ json.read_at notification.read_at
+ # Secondary actor could be nil for cases like system assigning conversation
+ json.secondary_actor notification.secondary_actor&.push_event_data
+ json.user notification.user.push_event_data
+ json.created_at notification.created_at.to_i
+ json.last_activity_at notification.last_activity_at.to_i
+ json.snoozed_until notification.snoozed_until
+ json.meta notification.meta
+ end
+ end
+end
diff --git a/app/views/api/v1/accounts/portals/_portal.json.jbuilder b/app/views/api/v1/accounts/portals/_portal.json.jbuilder
new file mode 100644
index 0000000..37020b5
--- /dev/null
+++ b/app/views/api/v1/accounts/portals/_portal.json.jbuilder
@@ -0,0 +1,43 @@
+json.id portal.id
+json.color portal.color
+json.custom_domain portal.custom_domain
+json.header_text portal.header_text
+json.homepage_link portal.homepage_link
+json.name portal.name
+json.page_title portal.page_title
+json.slug portal.slug
+json.archived portal.archived
+json.account_id portal.account_id
+
+json.config do
+ json.allowed_locales do
+ json.array! portal.config['allowed_locales'].each do |locale|
+ json.partial! 'api/v1/models/portal_config', formats: [:json], locale: locale, portal: portal
+ end
+ end
+end
+
+if portal.channel_web_widget
+ json.inbox do
+ json.partial! 'api/v1/models/inbox', formats: [:json], resource: portal.channel_web_widget.inbox
+ end
+end
+
+json.logo portal.file_base_data if portal.logo.present?
+
+json.meta do
+ json.all_articles_count articles.try(:size)
+ json.archived_articles_count articles.try(:archived).try(:size)
+ json.published_count articles.try(:published).try(:size)
+ json.draft_articles_count articles.try(:draft).try(:size)
+ json.mine_articles_count articles.search_by_author(current_user.id).try(:size) if current_user.present? && articles.any?
+ json.categories_count portal.categories.try(:size)
+ json.default_locale portal.default_locale
+end
+
+if portal.ssl_settings.present?
+ json.ssl_settings do
+ json.status portal.ssl_settings['cf_status']
+ json.verification_errors portal.ssl_settings['cf_verification_errors']
+ end
+end
diff --git a/app/views/api/v1/accounts/portals/add_members.json.jbuilder b/app/views/api/v1/accounts/portals/add_members.json.jbuilder
new file mode 100644
index 0000000..40641fa
--- /dev/null
+++ b/app/views/api/v1/accounts/portals/add_members.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'portal', portal: @portal, articles: []
diff --git a/app/views/api/v1/accounts/portals/create.json.jbuilder b/app/views/api/v1/accounts/portals/create.json.jbuilder
new file mode 100644
index 0000000..40641fa
--- /dev/null
+++ b/app/views/api/v1/accounts/portals/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'portal', portal: @portal, articles: []
diff --git a/app/views/api/v1/accounts/portals/index.json.jbuilder b/app/views/api/v1/accounts/portals/index.json.jbuilder
new file mode 100644
index 0000000..d602b66
--- /dev/null
+++ b/app/views/api/v1/accounts/portals/index.json.jbuilder
@@ -0,0 +1,10 @@
+json.payload do
+ json.array! @portals.each do |portal|
+ json.partial! 'portal', formats: [:json], portal: portal, articles: []
+ end
+end
+
+json.meta do
+ json.current_page @current_page
+ json.portals_count @portals.size
+end
diff --git a/app/views/api/v1/accounts/portals/show.json.jbuilder b/app/views/api/v1/accounts/portals/show.json.jbuilder
new file mode 100644
index 0000000..6350b5a
--- /dev/null
+++ b/app/views/api/v1/accounts/portals/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'portal', portal: @portal, articles: @articles
diff --git a/app/views/api/v1/accounts/portals/update.json.jbuilder b/app/views/api/v1/accounts/portals/update.json.jbuilder
new file mode 100644
index 0000000..40641fa
--- /dev/null
+++ b/app/views/api/v1/accounts/portals/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'portal', portal: @portal, articles: []
diff --git a/app/views/api/v1/accounts/search/_agent.json.jbuilder b/app/views/api/v1/accounts/search/_agent.json.jbuilder
new file mode 100644
index 0000000..98a9e2c
--- /dev/null
+++ b/app/views/api/v1/accounts/search/_agent.json.jbuilder
@@ -0,0 +1,5 @@
+json.id agent.id
+json.available_name agent.available_name
+json.email agent.email
+json.name agent.name
+json.role agent.role
diff --git a/app/views/api/v1/accounts/search/_article.json.jbuilder b/app/views/api/v1/accounts/search/_article.json.jbuilder
new file mode 100644
index 0000000..352cb64
--- /dev/null
+++ b/app/views/api/v1/accounts/search/_article.json.jbuilder
@@ -0,0 +1,10 @@
+json.id article.id
+json.title article.title
+json.locale article.locale
+json.content article.content
+json.slug article.slug
+json.portal_slug article.portal.slug
+json.account_id article.account_id
+json.category_name article.category&.name
+json.status article.status
+json.updated_at article.updated_at.to_i
diff --git a/app/views/api/v1/accounts/search/_contact.json.jbuilder b/app/views/api/v1/accounts/search/_contact.json.jbuilder
new file mode 100644
index 0000000..0d95787
--- /dev/null
+++ b/app/views/api/v1/accounts/search/_contact.json.jbuilder
@@ -0,0 +1,7 @@
+json.email contact.email
+json.id contact.id
+json.name contact.name
+json.phone_number contact.phone_number
+json.identifier contact.identifier
+json.additional_attributes contact.additional_attributes
+json.last_activity_at contact.last_activity_at&.to_i
diff --git a/app/views/api/v1/accounts/search/_conversation_search_result.json.jbuilder b/app/views/api/v1/accounts/search/_conversation_search_result.json.jbuilder
new file mode 100644
index 0000000..a0b7e02
--- /dev/null
+++ b/app/views/api/v1/accounts/search/_conversation_search_result.json.jbuilder
@@ -0,0 +1,15 @@
+json.id conversation.display_id
+json.account_id conversation.account_id
+json.created_at conversation.created_at.to_i
+json.message do
+ json.partial! 'message', formats: [:json], message: conversation.messages.try(:first)
+end
+json.contact do
+ json.partial! 'contact', formats: [:json], contact: conversation.contact if conversation.try(:contact).present?
+end
+json.inbox do
+ json.partial! 'inbox', formats: [:json], inbox: conversation.inbox if conversation.try(:inbox).present?
+end
+json.agent do
+ json.partial! 'agent', formats: [:json], agent: conversation.assignee if conversation.try(:assignee).present?
+end
diff --git a/app/views/api/v1/accounts/search/_inbox.json.jbuilder b/app/views/api/v1/accounts/search/_inbox.json.jbuilder
new file mode 100644
index 0000000..a5f9e8b
--- /dev/null
+++ b/app/views/api/v1/accounts/search/_inbox.json.jbuilder
@@ -0,0 +1,4 @@
+json.id inbox.id
+json.channel_id inbox.channel_id
+json.name inbox.name
+json.channel_type inbox.channel_type
diff --git a/app/views/api/v1/accounts/search/_message.json.jbuilder b/app/views/api/v1/accounts/search/_message.json.jbuilder
new file mode 100644
index 0000000..33f8e35
--- /dev/null
+++ b/app/views/api/v1/accounts/search/_message.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/message', message: message
diff --git a/app/views/api/v1/accounts/search/articles.json.jbuilder b/app/views/api/v1/accounts/search/articles.json.jbuilder
new file mode 100644
index 0000000..f20a163
--- /dev/null
+++ b/app/views/api/v1/accounts/search/articles.json.jbuilder
@@ -0,0 +1,7 @@
+json.payload do
+ json.articles do
+ json.array! @result[:articles] do |article|
+ json.partial! 'article', formats: [:json], article: article
+ end
+ end
+end
diff --git a/app/views/api/v1/accounts/search/contacts.json.jbuilder b/app/views/api/v1/accounts/search/contacts.json.jbuilder
new file mode 100644
index 0000000..505b502
--- /dev/null
+++ b/app/views/api/v1/accounts/search/contacts.json.jbuilder
@@ -0,0 +1,7 @@
+json.payload do
+ json.contacts do
+ json.array! @result[:contacts] do |contact|
+ json.partial! 'contact', formats: [:json], contact: contact
+ end
+ end
+end
diff --git a/app/views/api/v1/accounts/search/conversations.json.jbuilder b/app/views/api/v1/accounts/search/conversations.json.jbuilder
new file mode 100644
index 0000000..70d48a8
--- /dev/null
+++ b/app/views/api/v1/accounts/search/conversations.json.jbuilder
@@ -0,0 +1,23 @@
+json.payload do
+ json.conversations do
+ json.array! @result[:conversations] do |conversation|
+ json.id conversation.display_id
+ json.account_id conversation.account_id
+ json.created_at conversation.created_at.to_i
+ json.message do
+ json.partial! 'message', formats: [:json], message: conversation.messages.try(:first)
+ end
+ json.contact do
+ json.partial! 'contact', formats: [:json], contact: conversation.contact if conversation.try(:contact).present?
+ end
+ json.inbox do
+ json.partial! 'inbox', formats: [:json], inbox: conversation.inbox if conversation.try(:inbox).present?
+ end
+ json.agent do
+ json.partial! 'agent', formats: [:json], agent: conversation.assignee if conversation.try(:assignee).present?
+ end
+
+ json.additional_attributes conversation.additional_attributes
+ end
+ end
+end
diff --git a/app/views/api/v1/accounts/search/index.json.jbuilder b/app/views/api/v1/accounts/search/index.json.jbuilder
new file mode 100644
index 0000000..a3d8f18
--- /dev/null
+++ b/app/views/api/v1/accounts/search/index.json.jbuilder
@@ -0,0 +1,22 @@
+json.payload do
+ json.conversations do
+ json.array! @result[:conversations] do |conversation|
+ json.partial! 'conversation_search_result', formats: [:json], conversation: conversation
+ end
+ end
+ json.contacts do
+ json.array! @result[:contacts] do |contact|
+ json.partial! 'contact', formats: [:json], contact: contact
+ end
+ end
+ json.messages do
+ json.array! @result[:messages] do |message|
+ json.partial! 'message', formats: [:json], message: message
+ end
+ end
+ json.articles do
+ json.array! @result[:articles] do |article|
+ json.partial! 'article', formats: [:json], article: article
+ end
+ end
+end
diff --git a/app/views/api/v1/accounts/search/messages.json.jbuilder b/app/views/api/v1/accounts/search/messages.json.jbuilder
new file mode 100644
index 0000000..1bd024d
--- /dev/null
+++ b/app/views/api/v1/accounts/search/messages.json.jbuilder
@@ -0,0 +1,7 @@
+json.payload do
+ json.messages do
+ json.array! @result[:messages] do |message|
+ json.partial! 'message', formats: [:json], message: message
+ end
+ end
+end
diff --git a/app/views/api/v1/accounts/show.json.jbuilder b/app/views/api/v1/accounts/show.json.jbuilder
new file mode 100644
index 0000000..cb8c27c
--- /dev/null
+++ b/app/views/api/v1/accounts/show.json.jbuilder
@@ -0,0 +1,3 @@
+json.partial! 'api/v1/models/account', formats: [:json], resource: @account
+json.latest_chatwoot_version @latest_chatwoot_version
+json.partial! 'enterprise/api/v1/accounts/partials/account', account: @account if ChatwootApp.enterprise?
diff --git a/app/views/api/v1/accounts/team_members/create.json.jbuilder b/app/views/api/v1/accounts/team_members/create.json.jbuilder
new file mode 100644
index 0000000..a32c982
--- /dev/null
+++ b/app/views/api/v1/accounts/team_members/create.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @team_members do |team_member|
+ json.partial! 'api/v1/models/agent', formats: [:json], resource: team_member
+end
diff --git a/app/views/api/v1/accounts/team_members/index.json.jbuilder b/app/views/api/v1/accounts/team_members/index.json.jbuilder
new file mode 100644
index 0000000..a32c982
--- /dev/null
+++ b/app/views/api/v1/accounts/team_members/index.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @team_members do |team_member|
+ json.partial! 'api/v1/models/agent', formats: [:json], resource: team_member
+end
diff --git a/app/views/api/v1/accounts/teams/create.json.jbuilder b/app/views/api/v1/accounts/teams/create.json.jbuilder
new file mode 100644
index 0000000..a470a10
--- /dev/null
+++ b/app/views/api/v1/accounts/teams/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/team', formats: [:json], resource: @team
diff --git a/app/views/api/v1/accounts/teams/index.json.jbuilder b/app/views/api/v1/accounts/teams/index.json.jbuilder
new file mode 100644
index 0000000..c1a6d81
--- /dev/null
+++ b/app/views/api/v1/accounts/teams/index.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @teams do |team|
+ json.partial! 'api/v1/models/team', formats: [:json], resource: team
+end
diff --git a/app/views/api/v1/accounts/teams/show.json.jbuilder b/app/views/api/v1/accounts/teams/show.json.jbuilder
new file mode 100644
index 0000000..a470a10
--- /dev/null
+++ b/app/views/api/v1/accounts/teams/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/team', formats: [:json], resource: @team
diff --git a/app/views/api/v1/accounts/teams/update.json.jbuilder b/app/views/api/v1/accounts/teams/update.json.jbuilder
new file mode 100644
index 0000000..a470a10
--- /dev/null
+++ b/app/views/api/v1/accounts/teams/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/team', formats: [:json], resource: @team
diff --git a/app/views/api/v1/accounts/update.json.jbuilder b/app/views/api/v1/accounts/update.json.jbuilder
new file mode 100644
index 0000000..bd43a86
--- /dev/null
+++ b/app/views/api/v1/accounts/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/account', formats: [:json], resource: @account
diff --git a/app/views/api/v1/accounts/webhooks/_webhook.json.jbuilder b/app/views/api/v1/accounts/webhooks/_webhook.json.jbuilder
new file mode 100644
index 0000000..5406cf1
--- /dev/null
+++ b/app/views/api/v1/accounts/webhooks/_webhook.json.jbuilder
@@ -0,0 +1,11 @@
+json.id webhook.id
+json.name webhook.name
+json.url webhook.url
+json.account_id webhook.account_id
+json.subscriptions webhook.subscriptions
+if webhook.inbox
+ json.inbox do
+ json.id webhook.inbox.id
+ json.name webhook.inbox.name
+ end
+end
diff --git a/app/views/api/v1/accounts/webhooks/create.json.jbuilder b/app/views/api/v1/accounts/webhooks/create.json.jbuilder
new file mode 100644
index 0000000..5d05d13
--- /dev/null
+++ b/app/views/api/v1/accounts/webhooks/create.json.jbuilder
@@ -0,0 +1,5 @@
+json.payload do
+ json.webhook do
+ json.partial! 'webhook', webhook: @webhook
+ end
+end
diff --git a/app/views/api/v1/accounts/webhooks/index.json.jbuilder b/app/views/api/v1/accounts/webhooks/index.json.jbuilder
new file mode 100644
index 0000000..d14616c
--- /dev/null
+++ b/app/views/api/v1/accounts/webhooks/index.json.jbuilder
@@ -0,0 +1,5 @@
+json.payload do
+ json.webhooks do
+ json.array! @webhooks, partial: 'webhook', as: :webhook
+ end
+end
diff --git a/app/views/api/v1/accounts/webhooks/update.json.jbuilder b/app/views/api/v1/accounts/webhooks/update.json.jbuilder
new file mode 100644
index 0000000..5d05d13
--- /dev/null
+++ b/app/views/api/v1/accounts/webhooks/update.json.jbuilder
@@ -0,0 +1,5 @@
+json.payload do
+ json.webhook do
+ json.partial! 'webhook', webhook: @webhook
+ end
+end
diff --git a/app/views/api/v1/accounts/whatsapp/callbacks/embedded_signup.json.jbuilder b/app/views/api/v1/accounts/whatsapp/callbacks/embedded_signup.json.jbuilder
new file mode 100644
index 0000000..2ad94ff
--- /dev/null
+++ b/app/views/api/v1/accounts/whatsapp/callbacks/embedded_signup.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/inbox', formats: [:json], resource: @inbox
diff --git a/app/views/api/v1/conversations/partials/_conversation.json.jbuilder b/app/views/api/v1/conversations/partials/_conversation.json.jbuilder
new file mode 100644
index 0000000..4cb13f5
--- /dev/null
+++ b/app/views/api/v1/conversations/partials/_conversation.json.jbuilder
@@ -0,0 +1,62 @@
+# TODO: Move this into models jbuilder
+# Currently the file there is used only for search endpoint.
+# Everywhere else we use conversation builder in partials folder
+
+json.meta do
+ json.sender do
+ json.partial! 'api/v1/models/contact', formats: [:json], resource: conversation.contact
+ end
+ json.channel conversation.inbox.try(:channel_type)
+ if conversation.assigned_entity.is_a?(AgentBot)
+ json.assignee do
+ json.partial! 'api/v1/models/agent_bot_slim', formats: [:json], resource: conversation.assigned_entity
+ end
+ json.assignee_type 'AgentBot'
+ elsif conversation.assigned_entity&.account
+ json.assignee do
+ json.partial! 'api/v1/models/agent', formats: [:json], resource: conversation.assigned_entity
+ end
+ json.assignee_type 'User'
+ end
+ if conversation.team.present?
+ json.team do
+ json.partial! 'api/v1/models/team', formats: [:json], resource: conversation.team
+ end
+ end
+ json.hmac_verified conversation.contact_inbox&.hmac_verified
+end
+
+json.id conversation.display_id
+if conversation.messages.where(account_id: conversation.account_id).last.blank?
+ json.messages []
+else
+ json.messages [
+ conversation.messages.where(account_id: conversation.account_id)
+ .includes([{ attachments: [{ file_attachment: [:blob] }] }]).last.try(:push_event_data)
+ ]
+end
+
+json.account_id conversation.account_id
+json.uuid conversation.uuid
+json.additional_attributes conversation.additional_attributes
+json.agent_last_seen_at conversation.agent_last_seen_at.to_i
+json.assignee_last_seen_at conversation.assignee_last_seen_at.to_i
+json.can_reply conversation.can_reply?
+json.contact_last_seen_at conversation.contact_last_seen_at.to_i
+json.custom_attributes conversation.custom_attributes
+json.inbox_id conversation.inbox_id
+json.labels conversation.cached_label_list_array
+json.muted conversation.muted?
+json.snoozed_until conversation.snoozed_until
+json.status conversation.status
+json.created_at conversation.created_at.to_i
+json.updated_at conversation.updated_at.to_f
+json.timestamp conversation.last_activity_at.to_i
+json.first_reply_created_at conversation.first_reply_created_at.to_i
+json.unread_count conversation.unread_incoming_messages.count
+json.last_non_activity_message conversation.messages.where(account_id: conversation.account_id).non_activity_messages.first.try(:push_event_data)
+json.last_activity_at conversation.last_activity_at.to_i
+json.priority conversation.priority
+json.waiting_since conversation.waiting_since.to_i.to_i
+json.sla_policy_id conversation.sla_policy_id
+json.partial! 'enterprise/api/v1/conversations/partials/conversation', conversation: conversation if ChatwootApp.enterprise?
diff --git a/app/views/api/v1/models/_account.json.jbuilder b/app/views/api/v1/models/_account.json.jbuilder
new file mode 100644
index 0000000..efeff7d
--- /dev/null
+++ b/app/views/api/v1/models/_account.json.jbuilder
@@ -0,0 +1,27 @@
+json.settings resource.settings
+json.created_at resource.created_at
+if resource.custom_attributes.present?
+ json.custom_attributes do
+ json.plan_name resource.custom_attributes['plan_name']
+ json.subscribed_quantity resource.custom_attributes['subscribed_quantity']
+ json.subscription_status resource.custom_attributes['subscription_status']
+ json.subscription_ends_on resource.custom_attributes['subscription_ends_on']
+ json.industry resource.custom_attributes['industry'] if resource.custom_attributes['industry'].present?
+ json.company_size resource.custom_attributes['company_size'] if resource.custom_attributes['company_size'].present?
+ json.timezone resource.custom_attributes['timezone'] if resource.custom_attributes['timezone'].present?
+ json.logo resource.custom_attributes['logo'] if resource.custom_attributes['logo'].present?
+ json.onboarding_step resource.custom_attributes['onboarding_step'] if resource.custom_attributes['onboarding_step'].present?
+ json.marked_for_deletion_at resource.custom_attributes['marked_for_deletion_at'] if resource.custom_attributes['marked_for_deletion_at'].present?
+ if resource.custom_attributes['marked_for_deletion_reason'].present?
+ json.marked_for_deletion_reason resource.custom_attributes['marked_for_deletion_reason']
+ end
+ end
+end
+json.domain @account.domain
+json.features @account.enabled_features
+json.id @account.id
+json.locale @account.locale
+json.name @account.name
+json.support_email @account.support_email
+json.status @account.status
+json.cache_keys @account.cache_keys
diff --git a/app/views/api/v1/models/_agent.json.jbuilder b/app/views/api/v1/models/_agent.json.jbuilder
new file mode 100644
index 0000000..6d37860
--- /dev/null
+++ b/app/views/api/v1/models/_agent.json.jbuilder
@@ -0,0 +1,14 @@
+json.id resource.id
+# could be nil for a deleted agent hence the safe operator before account id
+json.account_id Current.account&.id
+json.availability_status resource.availability_status
+json.auto_offline resource.auto_offline
+json.confirmed resource.confirmed?
+json.email resource.email
+json.provider resource.provider
+json.available_name resource.available_name
+json.custom_attributes resource.custom_attributes if resource.custom_attributes.present?
+json.name resource.name
+json.role resource.role
+json.thumbnail resource.avatar_url
+json.custom_role_id resource.current_account_user&.custom_role_id if ChatwootApp.enterprise?
diff --git a/app/views/api/v1/models/_agent_bot.json.jbuilder b/app/views/api/v1/models/_agent_bot.json.jbuilder
new file mode 100644
index 0000000..2547bb2
--- /dev/null
+++ b/app/views/api/v1/models/_agent_bot.json.jbuilder
@@ -0,0 +1,10 @@
+json.id resource.id
+json.name resource.name
+json.description resource.description
+json.thumbnail resource.avatar_url
+json.outgoing_url resource.outgoing_url unless resource.system_bot?
+json.bot_type resource.bot_type
+json.bot_config resource.bot_config
+json.account_id resource.account_id
+json.access_token resource.access_token if resource.access_token.present?
+json.system_bot resource.system_bot?
diff --git a/app/views/api/v1/models/_agent_bot_slim.json.jbuilder b/app/views/api/v1/models/_agent_bot_slim.json.jbuilder
new file mode 100644
index 0000000..29f1e12
--- /dev/null
+++ b/app/views/api/v1/models/_agent_bot_slim.json.jbuilder
@@ -0,0 +1,6 @@
+json.id resource.id
+json.name resource.name
+json.description resource.description
+json.thumbnail resource.avatar_url
+json.outgoing_url resource.outgoing_url unless resource.system_bot?
+json.bot_type resource.bot_type
diff --git a/app/views/api/v1/models/_app.json.jbuilder b/app/views/api/v1/models/_app.json.jbuilder
new file mode 100644
index 0000000..42539a0
--- /dev/null
+++ b/app/views/api/v1/models/_app.json.jbuilder
@@ -0,0 +1,17 @@
+json.id resource.id
+json.name resource.name
+json.description resource.description
+json.short_description resource.short_description.presence
+json.enabled resource.enabled?(@current_account)
+
+if Current.account_user&.administrator?
+ json.call(resource.params, *resource.params.keys)
+ json.action resource.action
+ json.button resource.action
+end
+
+json.hooks do
+ json.array! @current_account.hooks.where(app_id: resource.id) do |hook|
+ json.partial! 'api/v1/models/hook', formats: [:json], resource: hook
+ end
+end
diff --git a/app/views/api/v1/models/_campaign.json.jbuilder b/app/views/api/v1/models/_campaign.json.jbuilder
new file mode 100644
index 0000000..8757fd0
--- /dev/null
+++ b/app/views/api/v1/models/_campaign.json.jbuilder
@@ -0,0 +1,23 @@
+json.id resource.display_id
+json.title resource.title
+json.description resource.description
+json.account_id resource.account_id
+json.inbox do
+ json.partial! 'api/v1/models/inbox', formats: [:json], resource: resource.inbox
+end
+json.sender do
+ json.partial! 'api/v1/models/agent', formats: [:json], resource: resource.sender if resource.sender.present?
+end
+json.message resource.message
+json.template_params resource.template_params
+json.campaign_status resource.campaign_status
+json.enabled resource.enabled
+json.campaign_type resource.campaign_type
+if resource.campaign_type == 'one_off'
+ json.scheduled_at resource.scheduled_at.to_i
+ json.audience resource.audience
+end
+json.trigger_rules resource.trigger_rules
+json.trigger_only_during_business_hours resource.trigger_only_during_business_hours
+json.created_at resource.created_at
+json.updated_at resource.updated_at
diff --git a/app/views/api/v1/models/_contact.json.jbuilder b/app/views/api/v1/models/_contact.json.jbuilder
new file mode 100644
index 0000000..4e998dd
--- /dev/null
+++ b/app/views/api/v1/models/_contact.json.jbuilder
@@ -0,0 +1,20 @@
+json.additional_attributes resource.additional_attributes
+json.availability_status resource.availability_status
+json.email resource.email
+json.id resource.id
+json.name resource.name
+json.phone_number resource.phone_number
+json.blocked resource.blocked
+json.identifier resource.identifier
+json.thumbnail resource.avatar_url
+json.custom_attributes resource.custom_attributes
+json.last_activity_at resource.last_activity_at.to_i if resource[:last_activity_at].present?
+json.created_at resource.created_at.to_i if resource[:created_at].present?
+# we only want to output contact inbox when its /contacts endpoints
+if defined?(with_contact_inboxes) && with_contact_inboxes.present?
+ json.contact_inboxes do
+ json.array! resource.contact_inboxes do |contact_inbox|
+ json.partial! 'api/v1/models/contact_inbox', formats: [:json], resource: contact_inbox
+ end
+ end
+end
diff --git a/app/views/api/v1/models/_contact_inbox.json.jbuilder b/app/views/api/v1/models/_contact_inbox.json.jbuilder
new file mode 100644
index 0000000..a1c8231
--- /dev/null
+++ b/app/views/api/v1/models/_contact_inbox.json.jbuilder
@@ -0,0 +1,4 @@
+json.source_id resource.source_id
+json.inbox do
+ json.partial! 'api/v1/models/inbox_slim', formats: [:json], resource: resource.inbox
+end
diff --git a/app/views/api/v1/models/_conversation.json.jbuilder b/app/views/api/v1/models/_conversation.json.jbuilder
new file mode 100644
index 0000000..68dfd2c
--- /dev/null
+++ b/app/views/api/v1/models/_conversation.json.jbuilder
@@ -0,0 +1,24 @@
+# This file is used to render conversation data search API response.
+
+json.id conversation.display_id
+json.uuid conversation.uuid
+json.created_at conversation.created_at.to_i
+json.contact do
+ json.id conversation.contact.id
+ json.name conversation.contact.name
+end
+json.inbox do
+ json.id conversation.inbox.id
+ json.name conversation.inbox.name
+ json.channel_type conversation.inbox.channel_type
+end
+json.messages do
+ json.array! conversation.messages do |message|
+ json.content message.content
+ json.id message.id
+ json.sender_name message.sender.name if message.sender
+ json.message_type message.message_type_before_type_cast
+ json.created_at message.created_at.to_i
+ end
+end
+json.account_id conversation.account_id
diff --git a/app/views/api/v1/models/_csat_survey_response.json.jbuilder b/app/views/api/v1/models/_csat_survey_response.json.jbuilder
new file mode 100644
index 0000000..fbba50a
--- /dev/null
+++ b/app/views/api/v1/models/_csat_survey_response.json.jbuilder
@@ -0,0 +1,25 @@
+json.id resource.id
+json.rating resource.rating
+json.feedback_message resource.feedback_message
+json.csat_review_notes resource.csat_review_notes
+json.review_notes_updated_at resource.review_notes_updated_at&.to_i
+if resource.review_notes_updated_by
+ json.review_notes_updated_by do
+ json.id resource.review_notes_updated_by.id
+ json.name resource.review_notes_updated_by.name
+ end
+end
+json.account_id resource.account_id
+json.message_id resource.message_id
+if resource.contact
+ json.contact do
+ json.partial! 'api/v1/models/contact', formats: [:json], resource: resource.contact
+ end
+end
+json.conversation_id resource.conversation.display_id
+if resource.assigned_agent
+ json.assigned_agent do
+ json.partial! 'api/v1/models/agent', formats: [:json], resource: resource.assigned_agent
+ end
+end
+json.created_at resource.created_at.to_i
diff --git a/app/views/api/v1/models/_custom_attribute_definition.json.jbuilder b/app/views/api/v1/models/_custom_attribute_definition.json.jbuilder
new file mode 100644
index 0000000..8a1010d
--- /dev/null
+++ b/app/views/api/v1/models/_custom_attribute_definition.json.jbuilder
@@ -0,0 +1,12 @@
+json.id resource.id
+json.attribute_display_name resource.attribute_display_name
+json.attribute_display_type resource.attribute_display_type
+json.attribute_description resource.attribute_description
+json.attribute_key resource.attribute_key
+json.regex_pattern resource.regex_pattern
+json.regex_cue resource.regex_cue
+json.attribute_values resource.attribute_values
+json.attribute_model resource.attribute_model
+json.default_value resource.default_value
+json.created_at resource.created_at
+json.updated_at resource.updated_at
diff --git a/app/views/api/v1/models/_custom_filter.json.jbuilder b/app/views/api/v1/models/_custom_filter.json.jbuilder
new file mode 100644
index 0000000..473f2d2
--- /dev/null
+++ b/app/views/api/v1/models/_custom_filter.json.jbuilder
@@ -0,0 +1,6 @@
+json.id resource.id
+json.name resource.name
+json.filter_type resource.filter_type
+json.query resource.query
+json.created_at resource.created_at
+json.updated_at resource.updated_at
diff --git a/app/views/api/v1/models/_dashboard_app.json.jbuilder b/app/views/api/v1/models/_dashboard_app.json.jbuilder
new file mode 100644
index 0000000..f8632d2
--- /dev/null
+++ b/app/views/api/v1/models/_dashboard_app.json.jbuilder
@@ -0,0 +1,4 @@
+json.id resource.id
+json.title resource.title
+json.content resource.content
+json.created_at resource.created_at
diff --git a/app/views/api/v1/models/_hook.json.jbuilder b/app/views/api/v1/models/_hook.json.jbuilder
new file mode 100644
index 0000000..5df214a
--- /dev/null
+++ b/app/views/api/v1/models/_hook.json.jbuilder
@@ -0,0 +1,9 @@
+json.id resource.id
+json.app_id resource.app_id
+json.status resource.enabled?
+json.inbox resource.inbox&.slice(:id, :name)
+json.account_id resource.account_id
+json.hook_type resource.hook_type
+
+json.settings resource.settings if Current.account_user&.administrator?
+json.reference_id resource.reference_id if Current.account_user&.administrator?
diff --git a/app/views/api/v1/models/_inbox.json.jbuilder b/app/views/api/v1/models/_inbox.json.jbuilder
new file mode 100644
index 0000000..f0b5b1e
--- /dev/null
+++ b/app/views/api/v1/models/_inbox.json.jbuilder
@@ -0,0 +1,137 @@
+json.id resource.id
+json.avatar_url resource.try(:avatar_url)
+json.channel_id resource.channel_id
+json.name resource.name
+json.channel_type resource.channel_type
+json.greeting_enabled resource.greeting_enabled
+json.greeting_message resource.greeting_message
+json.working_hours_enabled resource.working_hours_enabled
+json.enable_email_collect resource.enable_email_collect
+json.csat_survey_enabled resource.csat_survey_enabled
+json.csat_config resource.csat_config
+json.enable_auto_assignment resource.enable_auto_assignment
+json.auto_assignment_config resource.auto_assignment_config
+json.out_of_office_message resource.out_of_office_message
+json.working_hours resource.weekly_schedule
+json.timezone resource.timezone
+json.callback_webhook_url resource.callback_webhook_url
+json.allow_messages_after_resolved resource.allow_messages_after_resolved
+json.lock_to_single_conversation resource.lock_to_single_conversation
+json.sender_name_type resource.sender_name_type
+json.business_name resource.business_name
+
+if resource.portal.present?
+ json.help_center do
+ json.name resource.portal.name
+ json.slug resource.portal.slug
+ end
+end
+
+## Channel specific settings
+## TODO : Clean up and move the attributes into channel sub section
+
+json.tweets_enabled resource.channel.try(:tweets_enabled) if resource.twitter?
+
+## WebWidget Attributes
+json.allowed_domains resource.channel.try(:allowed_domains)
+json.widget_color resource.channel.try(:widget_color)
+json.website_url resource.channel.try(:website_url)
+json.hmac_mandatory resource.channel.try(:hmac_mandatory)
+json.welcome_title resource.channel.try(:welcome_title)
+json.welcome_tagline resource.channel.try(:welcome_tagline)
+json.web_widget_script resource.channel.try(:web_widget_script)
+json.website_token resource.channel.try(:website_token)
+json.selected_feature_flags resource.channel.try(:selected_feature_flags)
+json.reply_time resource.channel.try(:reply_time)
+if resource.web_widget?
+ json.hmac_token resource.channel.try(:hmac_token) if Current.account_user&.administrator?
+ json.pre_chat_form_enabled resource.channel.try(:pre_chat_form_enabled)
+ json.pre_chat_form_options resource.channel.try(:pre_chat_form_options)
+ json.continuity_via_email resource.channel.try(:continuity_via_email)
+end
+
+## Facebook Attributes
+if resource.facebook?
+ json.page_id resource.channel.try(:page_id)
+ json.reauthorization_required resource.channel.try(:reauthorization_required?)
+end
+
+## Instagram Attributes
+json.reauthorization_required resource.channel.try(:reauthorization_required?) if resource.instagram?
+json.instagram_id resource.channel.try(:instagram_id) if resource.instagram?
+
+## Tiktok Attributes
+json.reauthorization_required resource.channel.try(:reauthorization_required?) if resource.tiktok?
+
+## Twilio Attributes
+json.messaging_service_sid resource.channel.try(:messaging_service_sid)
+json.phone_number resource.channel.try(:phone_number)
+json.medium resource.channel.try(:medium) if resource.twilio?
+if resource.twilio?
+ json.content_templates resource.channel.try(:content_templates)
+ if Current.account_user&.administrator?
+ json.auth_token resource.channel.try(:auth_token)
+ json.account_sid resource.channel.try(:account_sid)
+ end
+end
+
+if resource.email?
+ ## Email Channel Attributes
+ json.email resource.channel.try(:email)
+ json.forwarding_enabled ENV.fetch('MAILER_INBOUND_EMAIL_DOMAIN', '').present?
+ json.forward_to_email resource.channel.try(:forward_to_email) if ENV.fetch('MAILER_INBOUND_EMAIL_DOMAIN', '').present?
+
+ ## IMAP
+ if Current.account_user&.administrator?
+ json.imap_login resource.channel.try(:imap_login)
+ json.imap_password resource.channel.try(:imap_password)
+ json.imap_address resource.channel.try(:imap_address)
+ json.imap_port resource.channel.try(:imap_port)
+ json.imap_enabled resource.channel.try(:imap_enabled)
+ json.imap_enable_ssl resource.channel.try(:imap_enable_ssl)
+
+ if resource.channel.try(:microsoft?) || resource.channel.try(:google?) || resource.channel.try(:legacy_google?)
+ json.reauthorization_required resource.channel.try(:provider_config).empty? || resource.channel.try(:reauthorization_required?)
+ end
+ end
+
+ ## SMTP
+ if Current.account_user&.administrator?
+ json.smtp_login resource.channel.try(:smtp_login)
+ json.smtp_password resource.channel.try(:smtp_password)
+ json.smtp_address resource.channel.try(:smtp_address)
+ json.smtp_port resource.channel.try(:smtp_port)
+ json.smtp_enabled resource.channel.try(:smtp_enabled)
+ json.smtp_domain resource.channel.try(:smtp_domain)
+ json.smtp_enable_ssl_tls resource.channel.try(:smtp_enable_ssl_tls)
+ json.smtp_enable_starttls_auto resource.channel.try(:smtp_enable_starttls_auto)
+ json.smtp_openssl_verify_mode resource.channel.try(:smtp_openssl_verify_mode)
+ json.smtp_authentication resource.channel.try(:smtp_authentication)
+ end
+end
+
+## API Channel Attributes
+if resource.api?
+ json.hmac_token resource.channel.try(:hmac_token) if Current.account_user&.administrator?
+ json.webhook_url resource.channel.try(:webhook_url)
+ json.inbox_identifier resource.channel.try(:identifier)
+ json.additional_attributes resource.channel.try(:additional_attributes)
+end
+
+json.provider resource.channel.try(:provider)
+
+## Telegram Attributes
+json.bot_name resource.channel.try(:bot_name) if resource.telegram?
+
+### WhatsApp Channel
+if resource.whatsapp?
+ json.message_templates resource.channel.try(:message_templates)
+ json.provider_config resource.channel.try(:provider_config) if Current.account_user&.administrator?
+ json.reauthorization_required resource.channel.try(:reauthorization_required?)
+end
+
+## Voice Channel Attributes
+if resource.channel_type == 'Channel::Voice'
+ json.voice_call_webhook_url resource.channel.try(:voice_call_webhook_url)
+ json.voice_status_webhook_url resource.channel.try(:voice_status_webhook_url)
+end
diff --git a/app/views/api/v1/models/_inbox_slim.json.jbuilder b/app/views/api/v1/models/_inbox_slim.json.jbuilder
new file mode 100644
index 0000000..c47aabf
--- /dev/null
+++ b/app/views/api/v1/models/_inbox_slim.json.jbuilder
@@ -0,0 +1,6 @@
+json.id resource.id
+json.avatar_url resource.try(:avatar_url)
+json.channel_id resource.channel_id
+json.name resource.name
+json.channel_type resource.channel_type
+json.provider resource.channel.try(:provider)
diff --git a/app/views/api/v1/models/_macro.json.jbuilder b/app/views/api/v1/models/_macro.json.jbuilder
new file mode 100644
index 0000000..c1a4205
--- /dev/null
+++ b/app/views/api/v1/models/_macro.json.jbuilder
@@ -0,0 +1,19 @@
+json.id macro.id
+json.name macro.name
+json.visibility macro.visibility
+
+if macro.created_by.present?
+ json.created_by do
+ json.partial! 'api/v1/models/agent', formats: [:json], resource: macro.created_by
+ end
+end
+
+if macro.updated_by.present?
+ json.updated_by do
+ json.partial! 'api/v1/models/agent', formats: [:json], resource: macro.updated_by
+ end
+end
+
+json.account_id macro.account_id
+json.actions macro.actions
+json.files macro.file_base_data if macro.files.any?
diff --git a/app/views/api/v1/models/_message.json.jbuilder b/app/views/api/v1/models/_message.json.jbuilder
new file mode 100644
index 0000000..583bc6f
--- /dev/null
+++ b/app/views/api/v1/models/_message.json.jbuilder
@@ -0,0 +1,14 @@
+json.id message.id
+json.content message.content
+json.inbox_id message.inbox_id
+json.echo_id message.echo_id if message.echo_id
+json.conversation_id message.conversation.display_id
+json.message_type message.message_type_before_type_cast
+json.content_type message.content_type
+json.status message.status
+json.content_attributes message.content_attributes
+json.created_at message.created_at.to_i
+json.private message.private
+json.source_id message.source_id
+json.sender message.sender.push_event_data if message.sender
+json.attachments message.attachments.map(&:push_event_data) if message.attachments.present?
diff --git a/app/views/api/v1/models/_note.json.jbuilder b/app/views/api/v1/models/_note.json.jbuilder
new file mode 100644
index 0000000..3631022
--- /dev/null
+++ b/app/views/api/v1/models/_note.json.jbuilder
@@ -0,0 +1,11 @@
+json.id resource.id
+json.content resource.content
+json.account_id json.account_id
+json.contact_id json.contact_id
+if resource.user.present?
+ json.user do
+ json.partial! 'api/v1/models/agent', formats: [:json], resource: resource.user
+ end
+end
+json.created_at resource.created_at.to_i
+json.updated_at resource.updated_at.to_i
diff --git a/app/views/api/v1/models/_portal_config.json.jbuilder b/app/views/api/v1/models/_portal_config.json.jbuilder
new file mode 100644
index 0000000..38e4fdd
--- /dev/null
+++ b/app/views/api/v1/models/_portal_config.json.jbuilder
@@ -0,0 +1,3 @@
+json.code locale
+json.articles_count portal.articles.search({ locale: locale }).size
+json.categories_count portal.categories.search_by_locale(locale).size
diff --git a/app/views/api/v1/models/_team.json.jbuilder b/app/views/api/v1/models/_team.json.jbuilder
new file mode 100644
index 0000000..9aaab89
--- /dev/null
+++ b/app/views/api/v1/models/_team.json.jbuilder
@@ -0,0 +1,6 @@
+json.id resource.id
+json.name resource.name
+json.description resource.description
+json.allow_auto_assign resource.allow_auto_assign
+json.account_id resource.account_id
+json.is_member Current.user.teams.include?(resource)
diff --git a/app/views/api/v1/models/_user.json.jbuilder b/app/views/api/v1/models/_user.json.jbuilder
new file mode 100644
index 0000000..b6a4480
--- /dev/null
+++ b/app/views/api/v1/models/_user.json.jbuilder
@@ -0,0 +1,35 @@
+json.access_token resource.access_token.token
+json.account_id resource.active_account_user&.account_id
+json.available_name resource.available_name
+json.avatar_url resource.avatar_url
+json.confirmed resource.confirmed?
+json.display_name resource.display_name
+json.message_signature resource.message_signature
+json.email resource.email
+json.hmac_identifier resource.hmac_identifier if GlobalConfig.get('CHATWOOT_INBOX_HMAC_KEY')['CHATWOOT_INBOX_HMAC_KEY'].present?
+json.id resource.id
+json.inviter_id resource.active_account_user&.inviter_id
+json.name resource.name
+json.provider resource.provider
+json.pubsub_token resource.pubsub_token
+json.custom_attributes resource.custom_attributes if resource.custom_attributes.present?
+json.role resource.active_account_user&.role
+json.ui_settings resource.ui_settings
+json.uid resource.uid
+json.type resource.type
+json.accounts do
+ json.array! resource.account_users do |account_user|
+ json.id account_user.account_id
+ json.name account_user.account.name
+ json.status account_user.account.status
+ json.active_at account_user.active_at
+ json.role account_user.role
+ json.permissions account_user.permissions
+ # the actual availability user has configured
+ json.availability account_user.availability
+ # availability derived from presence
+ json.availability_status account_user.availability_status
+ json.auto_offline account_user.auto_offline
+ json.partial! 'api/v1/models/account_user', account_user: account_user if ChatwootApp.enterprise?
+ end
+end
diff --git a/app/views/api/v1/models/_widget_message.json.jbuilder b/app/views/api/v1/models/_widget_message.json.jbuilder
new file mode 100644
index 0000000..8aa42ab
--- /dev/null
+++ b/app/views/api/v1/models/_widget_message.json.jbuilder
@@ -0,0 +1,9 @@
+json.id resource.id
+json.content resource.content
+json.message_type resource.message_type_before_type_cast
+json.content_type resource.content_type
+json.content_attributes resource.content_attributes
+json.created_at resource.created_at.to_i
+json.conversation_id resource.conversation.display_id
+json.attachments resource.attachments.map(&:push_event_data) if resource.attachments.present?
+json.sender resource.sender.push_event_data if resource.sender
diff --git a/app/views/api/v1/profile/mfa/backup_codes.json.jbuilder b/app/views/api/v1/profile/mfa/backup_codes.json.jbuilder
new file mode 100644
index 0000000..2aafdd3
--- /dev/null
+++ b/app/views/api/v1/profile/mfa/backup_codes.json.jbuilder
@@ -0,0 +1 @@
+json.backup_codes @backup_codes
diff --git a/app/views/api/v1/profile/mfa/create.json.jbuilder b/app/views/api/v1/profile/mfa/create.json.jbuilder
new file mode 100644
index 0000000..52072cc
--- /dev/null
+++ b/app/views/api/v1/profile/mfa/create.json.jbuilder
@@ -0,0 +1,2 @@
+json.provisioning_url @user.mfa_service.two_factor_provisioning_uri
+json.secret @user.otp_secret
diff --git a/app/views/api/v1/profile/mfa/destroy.json.jbuilder b/app/views/api/v1/profile/mfa/destroy.json.jbuilder
new file mode 100644
index 0000000..a5bf2ea
--- /dev/null
+++ b/app/views/api/v1/profile/mfa/destroy.json.jbuilder
@@ -0,0 +1 @@
+json.enabled @user.mfa_enabled?
diff --git a/app/views/api/v1/profile/mfa/show.json.jbuilder b/app/views/api/v1/profile/mfa/show.json.jbuilder
new file mode 100644
index 0000000..4568f48
--- /dev/null
+++ b/app/views/api/v1/profile/mfa/show.json.jbuilder
@@ -0,0 +1,3 @@
+json.feature_available Chatwoot.mfa_enabled?
+json.enabled @user.mfa_enabled?
+json.backup_codes_generated @user.mfa_service.backup_codes_generated? if Chatwoot.mfa_enabled?
diff --git a/app/views/api/v1/profile/mfa/verify.json.jbuilder b/app/views/api/v1/profile/mfa/verify.json.jbuilder
new file mode 100644
index 0000000..54be3fc
--- /dev/null
+++ b/app/views/api/v1/profile/mfa/verify.json.jbuilder
@@ -0,0 +1,2 @@
+json.enabled @user.mfa_enabled?
+json.backup_codes @backup_codes if @backup_codes.present?
diff --git a/app/views/api/v1/profiles/auto_offline.jbuilder b/app/views/api/v1/profiles/auto_offline.jbuilder
new file mode 100644
index 0000000..0a4b4f9
--- /dev/null
+++ b/app/views/api/v1/profiles/auto_offline.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/user', formats: [:json], resource: @user
diff --git a/app/views/api/v1/profiles/availability.jbuilder b/app/views/api/v1/profiles/availability.jbuilder
new file mode 100644
index 0000000..0a4b4f9
--- /dev/null
+++ b/app/views/api/v1/profiles/availability.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/user', formats: [:json], resource: @user
diff --git a/app/views/api/v1/profiles/avatar.json.jbuilder b/app/views/api/v1/profiles/avatar.json.jbuilder
new file mode 100644
index 0000000..0a4b4f9
--- /dev/null
+++ b/app/views/api/v1/profiles/avatar.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/user', formats: [:json], resource: @user
diff --git a/app/views/api/v1/profiles/reset_access_token.json.jbuilder b/app/views/api/v1/profiles/reset_access_token.json.jbuilder
new file mode 100644
index 0000000..0a4b4f9
--- /dev/null
+++ b/app/views/api/v1/profiles/reset_access_token.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/user', formats: [:json], resource: @user
diff --git a/app/views/api/v1/profiles/show.json.jbuilder b/app/views/api/v1/profiles/show.json.jbuilder
new file mode 100644
index 0000000..0a4b4f9
--- /dev/null
+++ b/app/views/api/v1/profiles/show.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/user', formats: [:json], resource: @user
diff --git a/app/views/api/v1/profiles/update.json.jbuilder b/app/views/api/v1/profiles/update.json.jbuilder
new file mode 100644
index 0000000..0a4b4f9
--- /dev/null
+++ b/app/views/api/v1/profiles/update.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'api/v1/models/user', formats: [:json], resource: @user
diff --git a/app/views/api/v1/widget/campaigns/index.json.jbuilder b/app/views/api/v1/widget/campaigns/index.json.jbuilder
new file mode 100644
index 0000000..84084dc
--- /dev/null
+++ b/app/views/api/v1/widget/campaigns/index.json.jbuilder
@@ -0,0 +1,7 @@
+json.array! @campaigns do |campaign|
+ json.id campaign.display_id
+ json.trigger_rules campaign.trigger_rules
+ json.trigger_only_during_business_hours campaign.trigger_only_during_business_hours
+ json.message campaign.message
+ json.sender campaign.sender&.push_event_data
+end
diff --git a/app/views/api/v1/widget/configs/create.json.jbuilder b/app/views/api/v1/widget/configs/create.json.jbuilder
new file mode 100644
index 0000000..51c1067
--- /dev/null
+++ b/app/views/api/v1/widget/configs/create.json.jbuilder
@@ -0,0 +1,36 @@
+json.website_channel_config do
+ json.allow_messages_after_resolved @web_widget.inbox.allow_messages_after_resolved
+ json.api_host ENV.fetch('FRONTEND_URL', nil)
+ json.auth_token @token
+ json.avatar_url @web_widget.inbox.avatar_url
+ json.csat_survey_enabled @web_widget.inbox.csat_survey_enabled
+ json.disable_branding @web_widget.inbox.account.feature_enabled?('disable_branding')
+ json.enabled_features @web_widget.selected_feature_flags
+ json.enabled_languages available_locales_with_name
+ json.locale @web_widget.account.locale
+ json.out_of_office_message @web_widget.inbox.out_of_office_message
+ json.portal @web_widget.inbox.portal
+ json.pre_chat_form_enabled @web_widget.pre_chat_form_enabled
+ json.pre_chat_form_options @web_widget.pre_chat_form_options
+ json.reply_time @web_widget.reply_time
+ json.timezone @web_widget.inbox.timezone
+ json.utc_off_set ActiveSupport::TimeZone[@web_widget.inbox.timezone].now.formatted_offset
+ json.website_name @web_widget.inbox.name
+ json.website_token @web_widget.website_token
+ json.welcome_tagline @web_widget.welcome_tagline
+ json.welcome_title @web_widget.welcome_title
+ json.widget_color @web_widget.widget_color
+ json.working_hours @web_widget.inbox.working_hours
+ json.working_hours_enabled @web_widget.inbox.working_hours_enabled
+end
+
+json.contact do
+ json.email @contact.email
+ json.id @contact.id
+ json.identifier @contact.identifier
+ json.name @contact.name
+ json.phone_number @contact.phone_number
+ json.pubsub_token @contact_inbox.pubsub_token
+end
+
+json.global_config @global_config
diff --git a/app/views/api/v1/widget/contacts/set_user.json.jbuilder b/app/views/api/v1/widget/contacts/set_user.json.jbuilder
new file mode 100644
index 0000000..e6283fa
--- /dev/null
+++ b/app/views/api/v1/widget/contacts/set_user.json.jbuilder
@@ -0,0 +1,5 @@
+json.id @contact.id
+json.has_email @contact.email.present?
+json.has_name @contact.name.present?
+json.has_phone_number @contact.phone_number.present?
+json.widget_auth_token @widget_auth_token if @widget_auth_token.present?
diff --git a/app/views/api/v1/widget/contacts/show.json.jbuilder b/app/views/api/v1/widget/contacts/show.json.jbuilder
new file mode 100644
index 0000000..26be98a
--- /dev/null
+++ b/app/views/api/v1/widget/contacts/show.json.jbuilder
@@ -0,0 +1,5 @@
+json.id @contact.id
+json.has_email @contact.email.present?
+json.has_name @contact.name.present?
+json.has_phone_number @contact.phone_number.present?
+json.identifier @contact.identifier
diff --git a/app/views/api/v1/widget/contacts/update.json.jbuilder b/app/views/api/v1/widget/contacts/update.json.jbuilder
new file mode 100644
index 0000000..21f3c37
--- /dev/null
+++ b/app/views/api/v1/widget/contacts/update.json.jbuilder
@@ -0,0 +1,4 @@
+json.id @contact.id
+json.has_email @contact.email.present?
+json.has_name @contact.name.present?
+json.has_phone_number @contact.phone_number.present?
diff --git a/app/views/api/v1/widget/conversations/create.json.jbuilder b/app/views/api/v1/widget/conversations/create.json.jbuilder
new file mode 100644
index 0000000..17585c2
--- /dev/null
+++ b/app/views/api/v1/widget/conversations/create.json.jbuilder
@@ -0,0 +1,11 @@
+json.id @conversation.display_id
+json.inbox_id @conversation.inbox_id
+json.contact_last_seen_at @conversation.contact_last_seen_at.to_i
+json.status @conversation.status
+json.messages do
+ json.array! @conversation.messages do |message|
+ json.partial! 'api/v1/models/widget_message', resource: message
+ end
+end
+json.custom_attributes @conversation.custom_attributes
+json.contact @conversation.contact
diff --git a/app/views/api/v1/widget/conversations/index.json.jbuilder b/app/views/api/v1/widget/conversations/index.json.jbuilder
new file mode 100644
index 0000000..45cd6a8
--- /dev/null
+++ b/app/views/api/v1/widget/conversations/index.json.jbuilder
@@ -0,0 +1,6 @@
+if @conversation
+ json.id @conversation.display_id
+ json.inbox_id @conversation.inbox_id
+ json.contact_last_seen_at @conversation.contact_last_seen_at.to_i
+ json.status @conversation.status
+end
diff --git a/app/views/api/v1/widget/inbox_members/index.json.jbuilder b/app/views/api/v1/widget/inbox_members/index.json.jbuilder
new file mode 100644
index 0000000..8b46c89
--- /dev/null
+++ b/app/views/api/v1/widget/inbox_members/index.json.jbuilder
@@ -0,0 +1,10 @@
+json.payload do
+ json.array! @inbox_members do |inbox_member|
+ next if inbox_member.user.blank?
+
+ json.id inbox_member.user.id
+ json.name inbox_member.user.available_name
+ json.avatar_url inbox_member.user.avatar_url
+ json.availability_status inbox_member.user.account_users.find_by(account_id: @current_account.id)&.availability_status
+ end
+end
diff --git a/app/views/api/v1/widget/messages/create.json.jbuilder b/app/views/api/v1/widget/messages/create.json.jbuilder
new file mode 100644
index 0000000..fbd6ab5
--- /dev/null
+++ b/app/views/api/v1/widget/messages/create.json.jbuilder
@@ -0,0 +1,11 @@
+json.id @message.id
+json.content @message.content
+json.inbox_id @message.inbox_id
+json.conversation_id @message.conversation.display_id
+json.message_type @message.message_type_before_type_cast
+json.created_at @message.created_at.to_i
+json.private @message.private
+json.source_id @message.source_id
+json.content_attributes @message.content_attributes
+json.attachments @message.attachments.map(&:push_event_data) if @message.attachments.present?
+json.sender @message.sender.push_event_data if @message.sender
diff --git a/app/views/api/v1/widget/messages/index.json.jbuilder b/app/views/api/v1/widget/messages/index.json.jbuilder
new file mode 100644
index 0000000..29e8081
--- /dev/null
+++ b/app/views/api/v1/widget/messages/index.json.jbuilder
@@ -0,0 +1,16 @@
+json.payload do
+ json.array! @messages do |message|
+ json.id message.id
+ json.content message.content
+ json.message_type message.message_type_before_type_cast
+ json.content_type message.content_type
+ json.content_attributes message.content_attributes
+ json.created_at message.created_at.to_i
+ json.conversation_id message.conversation.display_id
+ json.attachments message.attachments.map(&:push_event_data) if message.attachments.present?
+ json.sender message.sender.push_event_data if message.sender
+ end
+end
+json.meta do
+ json.contact_last_seen_at @conversation.contact_last_seen_at.to_i if @conversation.present?
+end
diff --git a/app/views/api/v1/widget/messages/update.json.jbuilder b/app/views/api/v1/widget/messages/update.json.jbuilder
new file mode 100644
index 0000000..e5abbd2
--- /dev/null
+++ b/app/views/api/v1/widget/messages/update.json.jbuilder
@@ -0,0 +1 @@
+json.contact @contact if @contact
diff --git a/app/views/api/v2/accounts/reports/agents.csv.erb b/app/views/api/v2/accounts/reports/agents.csv.erb
new file mode 100644
index 0000000..3b5d765
--- /dev/null
+++ b/app/views/api/v2/accounts/reports/agents.csv.erb
@@ -0,0 +1,15 @@
+<%= CSVSafe.generate_line [I18n.t('reports.period', since: Date.strptime(params[:since], '%s'), until: Date.strptime(params[:until], '%s'))] %>
+
+<% headers = [
+ I18n.t('reports.agent_csv.agent_name'),
+ I18n.t('reports.agent_csv.conversations_count'),
+ I18n.t('reports.agent_csv.avg_first_response_time'),
+ I18n.t('reports.agent_csv.avg_resolution_time'),
+ I18n.t('reports.agent_csv.avg_customer_waiting_time'),
+ I18n.t('reports.agent_csv.resolution_count')
+ ]
+%>
+<%= CSVSafe.generate_line headers -%>
+<% @report_data.each do |row| %>
+<%= CSVSafe.generate_line row -%>
+<% end %>
diff --git a/app/views/api/v2/accounts/reports/conversation_traffic.erb b/app/views/api/v2/accounts/reports/conversation_traffic.erb
new file mode 100644
index 0000000..d0cb245
--- /dev/null
+++ b/app/views/api/v2/accounts/reports/conversation_traffic.erb
@@ -0,0 +1,5 @@
+<%= CSV.generate_line [I18n.t('reports.conversation_traffic_csv.timezone'), @timezone] %>
+
+<% @report_data.each do |row| %>
+<%= CSVSafe.generate_line row -%>
+<% end %>
diff --git a/app/views/api/v2/accounts/reports/conversations_summary.csv.erb b/app/views/api/v2/accounts/reports/conversations_summary.csv.erb
new file mode 100644
index 0000000..5055739
--- /dev/null
+++ b/app/views/api/v2/accounts/reports/conversations_summary.csv.erb
@@ -0,0 +1,16 @@
+<%= CSVSafe.generate_line [I18n.t('reports.period', since: Date.strptime(params[:since], '%s'), until: Date.strptime(params[:until], '%s'))] %>
+
+<% headers = [
+ I18n.t('reports.conversation_csv.conversations_count'),
+ I18n.t('reports.conversation_csv.incoming_messages_count'),
+ I18n.t('reports.conversation_csv.outgoing_messages_count'),
+ I18n.t('reports.conversation_csv.avg_first_response_time'),
+ I18n.t('reports.conversation_csv.avg_resolution_time'),
+ I18n.t('reports.conversation_csv.resolution_count'),
+ I18n.t('reports.conversation_csv.avg_customer_waiting_time')
+]
+%>
+<%= CSVSafe.generate_line headers -%>
+<% @report_data.each do |row| %>
+<%= CSVSafe.generate_line row -%>
+<% end %>
diff --git a/app/views/api/v2/accounts/reports/inboxes.csv.erb b/app/views/api/v2/accounts/reports/inboxes.csv.erb
new file mode 100644
index 0000000..df038d5
--- /dev/null
+++ b/app/views/api/v2/accounts/reports/inboxes.csv.erb
@@ -0,0 +1,14 @@
+<%= CSVSafe.generate_line [I18n.t('reports.period', since: Date.strptime(params[:since], '%s'), until: Date.strptime(params[:until], '%s'))] %>
+
+<% headers = [
+ I18n.t('reports.inbox_csv.inbox_name'),
+ I18n.t('reports.inbox_csv.inbox_type'),
+ I18n.t('reports.inbox_csv.conversations_count'),
+ I18n.t('reports.inbox_csv.avg_first_response_time'),
+ I18n.t('reports.inbox_csv.avg_resolution_time')
+ ]
+%>
+<%= CSVSafe.generate_line headers -%>
+<% @report_data.each do |row| %>
+<%= CSVSafe.generate_line row -%>
+<% end %>
diff --git a/app/views/api/v2/accounts/reports/labels.csv.erb b/app/views/api/v2/accounts/reports/labels.csv.erb
new file mode 100644
index 0000000..a9d4201
--- /dev/null
+++ b/app/views/api/v2/accounts/reports/labels.csv.erb
@@ -0,0 +1,15 @@
+<%= CSVSafe.generate_line [I18n.t('reports.period', since: Date.strptime(params[:since], '%s'), until: Date.strptime(params[:until], '%s'))] %>
+
+<% headers = [
+ I18n.t('reports.label_csv.label_title'),
+ I18n.t('reports.label_csv.conversations_count'),
+ I18n.t('reports.label_csv.avg_first_response_time'),
+ I18n.t('reports.label_csv.avg_resolution_time'),
+ I18n.t('reports.label_csv.avg_reply_time'),
+ I18n.t('reports.label_csv.resolution_count'),
+ ]
+%>
+<%= CSVSafe.generate_line headers -%>
+<% @report_data.each do |row| %>
+<%= CSVSafe.generate_line row -%>
+<% end %>
diff --git a/app/views/api/v2/accounts/reports/teams.csv.erb b/app/views/api/v2/accounts/reports/teams.csv.erb
new file mode 100644
index 0000000..6ba4a00
--- /dev/null
+++ b/app/views/api/v2/accounts/reports/teams.csv.erb
@@ -0,0 +1,15 @@
+<%= CSVSafe.generate_line [I18n.t('reports.period', since: Date.strptime(params[:since], '%s'), until: Date.strptime(params[:until], '%s'))] %>
+
+<% headers = [
+ I18n.t('reports.team_csv.team_name'),
+ I18n.t('reports.team_csv.conversations_count'),
+ I18n.t('reports.team_csv.avg_first_response_time'),
+ I18n.t('reports.team_csv.avg_resolution_time'),
+ I18n.t('reports.team_csv.avg_customer_waiting_time'),
+ I18n.t('reports.team_csv.resolution_count')
+ ]
+%>
+<%= CSVSafe.generate_line headers -%>
+<% @report_data.each do |row| %>
+<%= CSVSafe.generate_line row -%>
+<% end %>
diff --git a/app/views/apple_app/site_association.html.erb b/app/views/apple_app/site_association.html.erb
new file mode 100644
index 0000000..e5cfa0b
--- /dev/null
+++ b/app/views/apple_app/site_association.html.erb
@@ -0,0 +1,11 @@
+{
+ "applinks": {
+ "apps": [],
+ "details": [
+ {
+ "appID": "<%= ENV['IOS_APP_ID'] %>",
+ "paths": [ "/app/accounts/*/conversations/*"]
+ }
+ ]
+ }
+}
diff --git a/app/views/dashboard/index.html.erb b/app/views/dashboard/index.html.erb
new file mode 100644
index 0000000..e69de29
diff --git a/app/views/devise/_auth.json.jbuilder b/app/views/devise/_auth.json.jbuilder
new file mode 100644
index 0000000..31fb0ab
--- /dev/null
+++ b/app/views/devise/_auth.json.jbuilder
@@ -0,0 +1,3 @@
+json.data do
+ json.partial! 'api/v1/models/user', formats: [:json], resource: resource
+end
diff --git a/app/views/devise/mailer/confirmation_instructions.html.erb b/app/views/devise/mailer/confirmation_instructions.html.erb
new file mode 100644
index 0000000..4a3b450
--- /dev/null
+++ b/app/views/devise/mailer/confirmation_instructions.html.erb
@@ -0,0 +1,29 @@
+
+
+
+ Howdy, Welcome to Chatwoot 👋
+
+
+
+
+
diff --git a/app/views/layouts/portal.html.erb b/app/views/layouts/portal.html.erb
new file mode 100644
index 0000000..72b086d
--- /dev/null
+++ b/app/views/layouts/portal.html.erb
@@ -0,0 +1,160 @@
+<%#
+# Application Layout
+
+This view template is used as the layout
+for every page that Administrate generates.
+
+By default, it renders:
+- Navigation
+- Content for a search bar
+ (if provided by a `content_for` block in a nested page)
+- Flashes
+- Links to stylesheets and JavaScripts
+- The appearance dropdown styles are added to the top to prevent FOUC
+%>
+
+
+
+
+
+
+
+
+
+ <%= vite_client_tag %>
+ <%= vite_javascript_tag 'portal' %>
+
+ <%= csrf_meta_tags %>
+ <% if content_for?(:head) %>
+ <%= yield(:head) %>
+ <% else %>
+
+
+
+
+
+
+
+
+
+
+
+ {{ content_for_layout }}
+
+
+ Account ID: {{ meta.account_id }}
+ Account Name: {{ meta.account_name }}
+ Deletion due at: {{ meta.marked_for_deletion_at }}
+ Deleted At: {{ meta.deleted_at }}
+ Deletion Reason: {{ meta.deletion_reason }}
+
+ {% for user in meta.soft_deleted_users %}
+ User ID: {{ user.user_id }}, Email: {{ user.user_email }}{% unless forloop.last %}
{% endunless %}
+ {% endfor %}
+
+Chatwoot System
+
+
+
+ {% if chat_message.sender == user.available_name %}
+ You
+ {% else %}
+ {{chat_message.sender}}
+ {% endif %}
+
+
+ {% if chat_message.sender == user.available_name %}
+ You
+ {% else %}
+ {{chat_message.sender}}
+ {% endif %}
+
+
+ {{message.text_content}}
+
+
+
+ {% if chat_message.sender == user.available_name %}
+ You
+ {% else %}
+ {{chat_message.sender}}
+ {% endif %}
+
+
+
+
+ <%= message.sender&.try(:available_name) || message.sender&.name || '' %>
+ <% if message.conversation.inbox&.inbox_type == 'Email' %>
+
+
+
+<% end %>
diff --git a/app/views/mailers/conversation_reply_mailer/email_reply.html.erb b/app/views/mailers/conversation_reply_mailer/email_reply.html.erb
new file mode 100644
index 0000000..aae8d3c
--- /dev/null
+++ b/app/views/mailers/conversation_reply_mailer/email_reply.html.erb
@@ -0,0 +1,11 @@
+<% if @message.content_attributes.dig('email', 'html_content', 'reply').present? %>
+<%= @message.content_attributes.dig('email', 'html_content', 'reply').html_safe %>
+<% elsif @message.content %>
+<%= @message.outgoing_content.html_safe %>
+<% end %>
+<% if @large_attachments.present? %>
+
+ <% if message.content %>
+ <%= ChatwootMarkdownRenderer.new(message.content).render_message %>
+ <% end %>
+ <% if message.attachments.present? %>
+
+
+
+
+ <%= message.incoming? ? 'You' : message.sender&.available_name || message.sender&.name || 'Bot' %>
+
+
+
+<% end %>
diff --git a/app/views/mailers/conversation_reply_mailer/reply_without_summary.html.erb b/app/views/mailers/conversation_reply_mailer/reply_without_summary.html.erb
new file mode 100644
index 0000000..4c043a1
--- /dev/null
+++ b/app/views/mailers/conversation_reply_mailer/reply_without_summary.html.erb
@@ -0,0 +1,13 @@
+<% @messages.each do |message| %>
+
+ <% if (message.content_type == 'input_csat' && message.message_type == 'template') %>
+
+
+ <% end %>
+ Attachments:
+ <% message.attachments.each_with_index do |attachment, index| %>
+ <% if index > 0 %>
<% end %>
+ <%= attachment.file.filename.to_s %>
+ <% end %>
+
+ <% end %>
+
Hello there,
+To complete the setup of your help center, you'll need to update the DNS settings for your custom domain: {{ cname_record | split: ' ' | first }}.
+Please add the following CNAME record to your DNS provider's configuration:
+{{ cname_record }}
+Step-by-step Instructions:
+ +Once the DNS record is live, your custom domain will automatically be secured with an SSL certificate.
+ +If you have any questions or need help, feel free to reach out to our support team—we’re here to assist you.
+This is the mail from Automation System
+ +{{ custom_message }}
+ ++Click here to get cracking. +
diff --git a/app/views/mailers/team_notifications/automation_notification_mailer/conversation_updated.liquid b/app/views/mailers/team_notifications/automation_notification_mailer/conversation_updated.liquid new file mode 100644 index 0000000..8edefcc --- /dev/null +++ b/app/views/mailers/team_notifications/automation_notification_mailer/conversation_updated.liquid @@ -0,0 +1,8 @@ +Hi {{user.available_name}}
+ + +{{ custom_message }}
+ ++Click here to get cracking. +
diff --git a/app/views/mailers/team_notifications/automation_notification_mailer/message_created.liquid b/app/views/mailers/team_notifications/automation_notification_mailer/message_created.liquid new file mode 100644 index 0000000..8edefcc --- /dev/null +++ b/app/views/mailers/team_notifications/automation_notification_mailer/message_created.liquid @@ -0,0 +1,8 @@ +Hi {{user.available_name}}
+ + +{{ custom_message }}
+ ++Click here to get cracking. +
diff --git a/app/views/microsoft/identity_association.json.jbuilder b/app/views/microsoft/identity_association.json.jbuilder new file mode 100644 index 0000000..ec65e01 --- /dev/null +++ b/app/views/microsoft/identity_association.json.jbuilder @@ -0,0 +1,5 @@ +json.associatedApplications do + json.array! [@identity_json] do |identity_id| + json.applicationId identity_id + end +end diff --git a/app/views/platform/api/v1/accounts/create.json.jbuilder b/app/views/platform/api/v1/accounts/create.json.jbuilder new file mode 100644 index 0000000..449293e --- /dev/null +++ b/app/views/platform/api/v1/accounts/create.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'platform/api/v1/models/account', formats: [:json], resource: @resource diff --git a/app/views/platform/api/v1/accounts/index.json.jbuilder b/app/views/platform/api/v1/accounts/index.json.jbuilder new file mode 100644 index 0000000..2e8e9f7 --- /dev/null +++ b/app/views/platform/api/v1/accounts/index.json.jbuilder @@ -0,0 +1,3 @@ +json.array! @resources do |account| + json.partial! 'platform/api/v1/models/account', formats: [:json], resource: account +end diff --git a/app/views/platform/api/v1/accounts/show.json.jbuilder b/app/views/platform/api/v1/accounts/show.json.jbuilder new file mode 100644 index 0000000..449293e --- /dev/null +++ b/app/views/platform/api/v1/accounts/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'platform/api/v1/models/account', formats: [:json], resource: @resource diff --git a/app/views/platform/api/v1/accounts/update.json.jbuilder b/app/views/platform/api/v1/accounts/update.json.jbuilder new file mode 100644 index 0000000..449293e --- /dev/null +++ b/app/views/platform/api/v1/accounts/update.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'platform/api/v1/models/account', formats: [:json], resource: @resource diff --git a/app/views/platform/api/v1/agent_bots/avatar.json.jbuilder b/app/views/platform/api/v1/agent_bots/avatar.json.jbuilder new file mode 100644 index 0000000..17143d3 --- /dev/null +++ b/app/views/platform/api/v1/agent_bots/avatar.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'platform/api/v1/models/agent_bot', formats: [:json], resource: @resource diff --git a/app/views/platform/api/v1/agent_bots/create.json.jbuilder b/app/views/platform/api/v1/agent_bots/create.json.jbuilder new file mode 100644 index 0000000..17143d3 --- /dev/null +++ b/app/views/platform/api/v1/agent_bots/create.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'platform/api/v1/models/agent_bot', formats: [:json], resource: @resource diff --git a/app/views/platform/api/v1/agent_bots/index.json.jbuilder b/app/views/platform/api/v1/agent_bots/index.json.jbuilder new file mode 100644 index 0000000..daa54aa --- /dev/null +++ b/app/views/platform/api/v1/agent_bots/index.json.jbuilder @@ -0,0 +1,3 @@ +json.array! @resources do |resource| + json.partial! 'platform/api/v1/models/agent_bot', formats: [:json], resource: resource.permissible +end diff --git a/app/views/platform/api/v1/agent_bots/show.json.jbuilder b/app/views/platform/api/v1/agent_bots/show.json.jbuilder new file mode 100644 index 0000000..17143d3 --- /dev/null +++ b/app/views/platform/api/v1/agent_bots/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'platform/api/v1/models/agent_bot', formats: [:json], resource: @resource diff --git a/app/views/platform/api/v1/agent_bots/update.json.jbuilder b/app/views/platform/api/v1/agent_bots/update.json.jbuilder new file mode 100644 index 0000000..17143d3 --- /dev/null +++ b/app/views/platform/api/v1/agent_bots/update.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'platform/api/v1/models/agent_bot', formats: [:json], resource: @resource diff --git a/app/views/platform/api/v1/models/_account.json.jbuilder b/app/views/platform/api/v1/models/_account.json.jbuilder new file mode 100644 index 0000000..135f0a3 --- /dev/null +++ b/app/views/platform/api/v1/models/_account.json.jbuilder @@ -0,0 +1,9 @@ +json.id resource.id +json.name resource.name +json.locale resource.locale +json.domain resource.domain +json.support_email resource.support_email +json.features resource.enabled_features +json.custom_attributes resource.custom_attributes +json.limits resource.limits +json.status resource.status diff --git a/app/views/platform/api/v1/models/_agent_bot.json.jbuilder b/app/views/platform/api/v1/models/_agent_bot.json.jbuilder new file mode 100644 index 0000000..8e04e98 --- /dev/null +++ b/app/views/platform/api/v1/models/_agent_bot.json.jbuilder @@ -0,0 +1,6 @@ +json.id resource.id +json.name resource.name +json.description resource.description +json.outgoing_url resource.name +json.account_id resource.account_id +json.access_token resource.access_token.token diff --git a/app/views/platform/api/v1/models/_user.json.jbuilder b/app/views/platform/api/v1/models/_user.json.jbuilder new file mode 100644 index 0000000..7cf3941 --- /dev/null +++ b/app/views/platform/api/v1/models/_user.json.jbuilder @@ -0,0 +1,24 @@ +json.access_token resource.access_token.token +json.account_id resource.active_account_user&.account_id +json.available_name resource.available_name +json.avatar_url resource.avatar_url +json.confirmed resource.confirmed? +json.display_name resource.display_name +json.message_signature resource.message_signature +json.email resource.email +json.id resource.id +json.name resource.name +json.provider resource.provider +json.pubsub_token resource.pubsub_token +json.custom_attributes resource.custom_attributes if resource.custom_attributes.present? +json.role resource.active_account_user&.role +json.ui_settings resource.ui_settings +json.uid resource.uid +json.accounts do + json.array! resource.account_users do |account_user| + json.id account_user.account_id + json.name account_user.account.name + json.active_at account_user.active_at + json.role account_user.role + end +end diff --git a/app/views/platform/api/v1/users/create.json.jbuilder b/app/views/platform/api/v1/users/create.json.jbuilder new file mode 100644 index 0000000..382b0a0 --- /dev/null +++ b/app/views/platform/api/v1/users/create.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'platform/api/v1/models/user', formats: [:json], resource: @resource diff --git a/app/views/platform/api/v1/users/show.json.jbuilder b/app/views/platform/api/v1/users/show.json.jbuilder new file mode 100644 index 0000000..382b0a0 --- /dev/null +++ b/app/views/platform/api/v1/users/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'platform/api/v1/models/user', formats: [:json], resource: @resource diff --git a/app/views/platform/api/v1/users/token.json.jbuilder b/app/views/platform/api/v1/users/token.json.jbuilder new file mode 100644 index 0000000..d9d5468 --- /dev/null +++ b/app/views/platform/api/v1/users/token.json.jbuilder @@ -0,0 +1,9 @@ +json.access_token @resource.access_token.token +json.expiry nil +json.user do + json.id @resource.id + json.name @resource.name + json.display_name @resource.display_name + json.email @resource.email + json.pubsub_token @resource.pubsub_token +end diff --git a/app/views/platform/api/v1/users/update.json.jbuilder b/app/views/platform/api/v1/users/update.json.jbuilder new file mode 100644 index 0000000..382b0a0 --- /dev/null +++ b/app/views/platform/api/v1/users/update.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'platform/api/v1/models/user', formats: [:json], resource: @resource diff --git a/app/views/public/api/v1/csat_survey/show.json.jbuilder b/app/views/public/api/v1/csat_survey/show.json.jbuilder new file mode 100644 index 0000000..3e5e3e2 --- /dev/null +++ b/app/views/public/api/v1/csat_survey/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'public/api/v1/models/csat_survey', formats: [:json], resource: @message diff --git a/app/views/public/api/v1/csat_survey/update.json.jbuilder b/app/views/public/api/v1/csat_survey/update.json.jbuilder new file mode 100644 index 0000000..3e5e3e2 --- /dev/null +++ b/app/views/public/api/v1/csat_survey/update.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'public/api/v1/models/csat_survey', formats: [:json], resource: @message diff --git a/app/views/public/api/v1/inboxes/contacts/create.json.jbuilder b/app/views/public/api/v1/inboxes/contacts/create.json.jbuilder new file mode 100644 index 0000000..f3f9124 --- /dev/null +++ b/app/views/public/api/v1/inboxes/contacts/create.json.jbuilder @@ -0,0 +1,3 @@ +json.source_id @contact_inbox.source_id +json.pubsub_token @contact_inbox.pubsub_token +json.partial! 'public/api/v1/models/contact', resource: @contact_inbox.contact, formats: [:json] diff --git a/app/views/public/api/v1/inboxes/contacts/show.json.jbuilder b/app/views/public/api/v1/inboxes/contacts/show.json.jbuilder new file mode 100644 index 0000000..74cab2e --- /dev/null +++ b/app/views/public/api/v1/inboxes/contacts/show.json.jbuilder @@ -0,0 +1,3 @@ +json.source_id @contact_inbox.source_id +json.pubsub_token @contact_inbox.pubsub_token +json.partial! 'public/api/v1/models/contact', formats: [:json], resource: @contact_inbox.contact diff --git a/app/views/public/api/v1/inboxes/contacts/update.json.jbuilder b/app/views/public/api/v1/inboxes/contacts/update.json.jbuilder new file mode 100644 index 0000000..74cab2e --- /dev/null +++ b/app/views/public/api/v1/inboxes/contacts/update.json.jbuilder @@ -0,0 +1,3 @@ +json.source_id @contact_inbox.source_id +json.pubsub_token @contact_inbox.pubsub_token +json.partial! 'public/api/v1/models/contact', formats: [:json], resource: @contact_inbox.contact diff --git a/app/views/public/api/v1/inboxes/conversations/create.json.jbuilder b/app/views/public/api/v1/inboxes/conversations/create.json.jbuilder new file mode 100644 index 0000000..1b95884 --- /dev/null +++ b/app/views/public/api/v1/inboxes/conversations/create.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'public/api/v1/models/conversation', formats: [:json], resource: @conversation diff --git a/app/views/public/api/v1/inboxes/conversations/index.json.jbuilder b/app/views/public/api/v1/inboxes/conversations/index.json.jbuilder new file mode 100644 index 0000000..ac2e88d --- /dev/null +++ b/app/views/public/api/v1/inboxes/conversations/index.json.jbuilder @@ -0,0 +1,3 @@ +json.array! @conversations do |conversation| + json.partial! 'public/api/v1/models/conversation', formats: [:json], resource: conversation +end diff --git a/app/views/public/api/v1/inboxes/conversations/show.json.jbuilder b/app/views/public/api/v1/inboxes/conversations/show.json.jbuilder new file mode 100644 index 0000000..1b95884 --- /dev/null +++ b/app/views/public/api/v1/inboxes/conversations/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'public/api/v1/models/conversation', formats: [:json], resource: @conversation diff --git a/app/views/public/api/v1/inboxes/conversations/toggle_status.json.jbuilder b/app/views/public/api/v1/inboxes/conversations/toggle_status.json.jbuilder new file mode 100644 index 0000000..1b95884 --- /dev/null +++ b/app/views/public/api/v1/inboxes/conversations/toggle_status.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'public/api/v1/models/conversation', formats: [:json], resource: @conversation diff --git a/app/views/public/api/v1/inboxes/messages/create.json.jbuilder b/app/views/public/api/v1/inboxes/messages/create.json.jbuilder new file mode 100644 index 0000000..e2b85bf --- /dev/null +++ b/app/views/public/api/v1/inboxes/messages/create.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'public/api/v1/models/message', formats: [:json], resource: @message diff --git a/app/views/public/api/v1/inboxes/messages/index.json.jbuilder b/app/views/public/api/v1/inboxes/messages/index.json.jbuilder new file mode 100644 index 0000000..af01db4 --- /dev/null +++ b/app/views/public/api/v1/inboxes/messages/index.json.jbuilder @@ -0,0 +1,3 @@ +json.array! @messages do |message| + json.partial! 'public/api/v1/models/message', formats: [:json], resource: message +end diff --git a/app/views/public/api/v1/inboxes/messages/update.json.jbuilder b/app/views/public/api/v1/inboxes/messages/update.json.jbuilder new file mode 100644 index 0000000..e2b85bf --- /dev/null +++ b/app/views/public/api/v1/inboxes/messages/update.json.jbuilder @@ -0,0 +1 @@ +json.partial! 'public/api/v1/models/message', formats: [:json], resource: @message diff --git a/app/views/public/api/v1/inboxes/show.json.jbuilder b/app/views/public/api/v1/inboxes/show.json.jbuilder new file mode 100644 index 0000000..ba882aa --- /dev/null +++ b/app/views/public/api/v1/inboxes/show.json.jbuilder @@ -0,0 +1,3 @@ +json.identifier @inbox_channel.identifier +json.identity_validation_enabled @inbox_channel.hmac_mandatory +json.partial! 'public/api/v1/models/inbox', formats: [:json], resource: @inbox_channel.inbox diff --git a/app/views/public/api/v1/models/_article.json.jbuilder b/app/views/public/api/v1/models/_article.json.jbuilder new file mode 100644 index 0000000..7050f32 --- /dev/null +++ b/app/views/public/api/v1/models/_article.json.jbuilder @@ -0,0 +1,42 @@ +json.id article.id +json.category_id article.category_id +json.title article.title +json.content article.content +json.description article.description +json.status article.status +json.position article.position +json.account_id article.account_id +json.last_updated_at article.updated_at +json.slug article.slug + +if article.portal.present? + json.portal do + json.partial! 'public/api/v1/models/hc/portal', formats: [:json], portal: article.portal + end +end + +if article.category.present? + json.category do + json.id article.category.id + json.slug article.category.slug + json.locale article.category.locale + end +end + +json.views article.views + +if article.author.present? + json.author do + json.partial! 'public/api/v1/models/hc/author', formats: [:json], resource: article.author + end +end + +json.associated_articles do + if article.associated_articles.any? + json.array! article.associated_articles.each do |associated_article| + json.partial! 'public/api/v1/models/hc/associated_article', formats: [:json], article: associated_article + end + end +end + +json.link "hc/#{article.portal.slug}/articles/#{article.slug}" diff --git a/app/views/public/api/v1/models/_associated_category.json.jbuilder b/app/views/public/api/v1/models/_associated_category.json.jbuilder new file mode 100644 index 0000000..881ea6a --- /dev/null +++ b/app/views/public/api/v1/models/_associated_category.json.jbuilder @@ -0,0 +1,5 @@ +json.name category.name +json.slug category.slug +json.locale category.locale +json.description category.description +json.position category.position diff --git a/app/views/public/api/v1/models/_category.json.jbuilder b/app/views/public/api/v1/models/_category.json.jbuilder new file mode 100644 index 0000000..15dc616 --- /dev/null +++ b/app/views/public/api/v1/models/_category.json.jbuilder @@ -0,0 +1,9 @@ +json.name category.name +json.slug category.slug +json.locale category.locale +json.description category.description +json.position category.position + +json.meta do + json.articles_count category.articles.published.size +end diff --git a/app/views/public/api/v1/models/_contact.json.jbuilder b/app/views/public/api/v1/models/_contact.json.jbuilder new file mode 100644 index 0000000..fc9dbb2 --- /dev/null +++ b/app/views/public/api/v1/models/_contact.json.jbuilder @@ -0,0 +1,4 @@ +json.id resource.id +json.name resource.name +json.email resource.email +json.phone_number resource.phone_number diff --git a/app/views/public/api/v1/models/_conversation.json.jbuilder b/app/views/public/api/v1/models/_conversation.json.jbuilder new file mode 100644 index 0000000..b0a4647 --- /dev/null +++ b/app/views/public/api/v1/models/_conversation.json.jbuilder @@ -0,0 +1,12 @@ +json.id resource.display_id +json.uuid resource.uuid +json.inbox_id resource.inbox_id +json.contact_last_seen_at resource.contact_last_seen_at.to_i +json.status resource.status +json.agent_last_seen_at resource.agent_last_seen_at.to_i +json.messages do + json.array! resource.messages.chat do |message| + json.partial! 'public/api/v1/models/message', formats: [:json], resource: message + end +end +json.contact resource.contact diff --git a/app/views/public/api/v1/models/_csat_survey.json.jbuilder b/app/views/public/api/v1/models/_csat_survey.json.jbuilder new file mode 100644 index 0000000..c5206e9 --- /dev/null +++ b/app/views/public/api/v1/models/_csat_survey.json.jbuilder @@ -0,0 +1,9 @@ +json.id resource.id +json.csat_survey_response resource.csat_survey_response +json.display_type resource.inbox.csat_config.try(:[], 'display_type') || 'emoji' +json.content resource.inbox.csat_config.try(:[], 'message') +json.inbox_avatar_url resource.inbox.avatar_url +json.inbox_name resource.inbox.name +json.locale resource.account.locale +json.conversation_id resource.conversation_id +json.created_at resource.created_at diff --git a/app/views/public/api/v1/models/_inbox.json.jbuilder b/app/views/public/api/v1/models/_inbox.json.jbuilder new file mode 100644 index 0000000..4865976 --- /dev/null +++ b/app/views/public/api/v1/models/_inbox.json.jbuilder @@ -0,0 +1,6 @@ +json.name resource.name +json.timezone resource.timezone +json.working_hours resource.weekly_schedule +json.working_hours_enabled resource.working_hours_enabled +json.csat_survey_enabled resource.csat_survey_enabled +json.greeting_enabled resource.greeting_enabled diff --git a/app/views/public/api/v1/models/_message.json.jbuilder b/app/views/public/api/v1/models/_message.json.jbuilder new file mode 100644 index 0000000..8aa42ab --- /dev/null +++ b/app/views/public/api/v1/models/_message.json.jbuilder @@ -0,0 +1,9 @@ +json.id resource.id +json.content resource.content +json.message_type resource.message_type_before_type_cast +json.content_type resource.content_type +json.content_attributes resource.content_attributes +json.created_at resource.created_at.to_i +json.conversation_id resource.conversation.display_id +json.attachments resource.attachments.map(&:push_event_data) if resource.attachments.present? +json.sender resource.sender.push_event_data if resource.sender diff --git a/app/views/public/api/v1/models/hc/_associated_article.json.jbuilder b/app/views/public/api/v1/models/hc/_associated_article.json.jbuilder new file mode 100644 index 0000000..a2dac80 --- /dev/null +++ b/app/views/public/api/v1/models/hc/_associated_article.json.jbuilder @@ -0,0 +1,15 @@ +json.id article.id +json.category_id article.category_id +json.title article.title +json.content article.content +json.description article.description +json.status article.status +json.account_id article.account_id +json.last_updated_at article.updated_at +json.views article.views + +if article.author.present? + json.author do + json.partial! 'public/api/v1/models/hc/author', formats: [:json], resource: article.author + end +end diff --git a/app/views/public/api/v1/models/hc/_author.json.jbuilder b/app/views/public/api/v1/models/hc/_author.json.jbuilder new file mode 100644 index 0000000..954a5f0 --- /dev/null +++ b/app/views/public/api/v1/models/hc/_author.json.jbuilder @@ -0,0 +1,3 @@ +json.available_name resource.available_name +json.name resource.name +json.thumbnail resource.avatar_url diff --git a/app/views/public/api/v1/models/hc/_portal.json.jbuilder b/app/views/public/api/v1/models/hc/_portal.json.jbuilder new file mode 100644 index 0000000..2e7b999 --- /dev/null +++ b/app/views/public/api/v1/models/hc/_portal.json.jbuilder @@ -0,0 +1,22 @@ +json.custom_domain portal.custom_domain +json.header_text portal.header_text +json.homepage_link portal.homepage_link +json.name portal.name +json.page_title portal.page_title +json.slug portal.slug + +json.categories do + if portal.categories.any? + json.array! portal.categories.each do |category| + json.partial! 'public/api/v1/models/category', formats: [:json], category: category + end + end +end + +json.logo portal.file_base_data if portal.logo.present? + +json.meta do + json.articles_count portal.articles.published.size + json.categories_count portal.categories.size + json.default_locale portal.default_locale +end diff --git a/app/views/public/api/v1/portals/_article_count.html.erb b/app/views/public/api/v1/portals/_article_count.html.erb new file mode 100644 index 0000000..497c522 --- /dev/null +++ b/app/views/public/api/v1/portals/_article_count.html.erb @@ -0,0 +1,6 @@ +<% if article_count == 0 %> +<% elsif article_count == 1 %> + <%= article_count %> <%= I18n.t('public_portal.common.article') %> +<% else %> + <%= article_count %> <%= I18n.t('public_portal.common.articles') %> +<% end %> diff --git a/app/views/public/api/v1/portals/_authors.html.erb b/app/views/public/api/v1/portals/_authors.html.erb new file mode 100644 index 0000000..07c5c2c --- /dev/null +++ b/app/views/public/api/v1/portals/_authors.html.erb @@ -0,0 +1,24 @@ +<% author_count = category.articles.published.order(position: :asc).map(&:author).uniq.size %> +<% if author_count > 0 %> +<%= I18n.t('public_portal.common.no_articles') %>
+<%= I18n.t('public_portal.hero.sub_title') %>
+ ++ <%= article.author.updated_at.strftime("%B %d %Y") %>
+<%= I18n.t('public_portal.common.no_articles') %>
+<%= I18n.t('public_portal.hero.sub_title') %>
+<%= I18n.t('public_portal.common.no_articles') %>
+<%= I18n.t('public_portal.404.description') %>
+ +This will clear the IndexedDB cache keys from redis.
The next load will fetch the data from backend.
Click the button to generate seed data into this account for demos.
+Note: This will clear all the existing data in this account.
++ <%= @installation_configs[key]&.dig('description') %> +
+ <% end %> +| + <%= link_to(sanitized_order_params(page, collection_field_name).merge( + collection_presenter.order_params_for(attr_name, key: collection_field_name) + )) do %> + <%= t( + "helpers.label.#{collection_presenter.resource_name}.#{attr_name}", + default: attr_name.to_s, + ).titleize %> + <% if collection_presenter.ordered_by?(attr_name) %> + + + + <% end %> + <% end %> + | + <% end %> + <% [existing_action?(collection_presenter.resource_name, :edit), + existing_action?(collection_presenter.resource_name, :destroy)].count(true).times do %> ++ <% end %> + | |
|---|---|---|
| + <% if authorized_action? resource, :show -%> + + <%= render_field attribute %> + + <% end -%> + | + <% end %> + + <% if existing_action? collection_presenter.resource_name, :edit %> +<%= link_to( + t("administrate.actions.edit"), + [:edit, namespace, resource], + class: "action-edit", + ) if authorized_action? resource, :edit%> | + <% end %> + + <% if existing_action? collection_presenter.resource_name, :destroy %> +<%= link_to( + t("administrate.actions.destroy"), + [namespace, resource], + class: "text-color-red", + method: :delete, + data: { confirm: t("administrate.actions.confirm") } + ) if authorized_action? resource, :destroy %> | + <% end %> +
| Metric | +Value | +
|---|---|
| <%= key %> | +<%= value %> | +
Update your instance settings, access billing portal
+<%= SuperAdmin::FeaturesHelper.plan_details.html_safe %>
+You have <%= User.count %> agents. Please add more licenses to add more users.
+Do you face any issues? We are here to help.
+<%= attrs[:description] %>
+| + <%= link_to(sanitized_order_params(page, collection_field_name).merge( + collection_presenter.order_params_for(attr_name, key: collection_field_name) + )) do %> + <%= t( + "helpers.label.#{collection_presenter.resource_name}.#{attr_name}", + default: attr_name.to_s, + ).titleize %> + <% if collection_presenter.ordered_by?(attr_name) %> + + + + <% end %> + <% end %> + | + <% end %> + <% [existing_action?(collection_presenter.resource_name, :edit), + existing_action?(collection_presenter.resource_name, :destroy)].count(true).times do %> ++ <% end %> + | |
|---|---|---|
| + <% if authorized_action? resource, :show -%> + + <%= render_field attribute %> + + <% end -%> + | + <% end %> + + <% if existing_action? collection_presenter.resource_name, :edit %> +<%= link_to( + t("administrate.actions.edit"), + [:edit, namespace, resource.becomes(User)], + class: "action-edit", + ) if authorized_action? resource, :edit%> | + <% end %> + + <% if existing_action? collection_presenter.resource_name, :destroy %> +<%= link_to( + t("administrate.actions.destroy"), + [namespace, collection_presenter.resource_name == 'account_user' ? resource : resource.becomes(User)], + class: "text-color-red", + method: :delete, + data: { confirm: t("administrate.actions.confirm") } + ) if authorized_action? resource, :destroy %> | + <% end %> +
Caution: Any actions executed after impersonate will appear as if performed by the impersonated user - [<%= page.resource.name %> ]
+ Impersonate user +Hi <%= @resource.name %>,
+ +<% account_user = @resource&.account_users&.first %> +<% is_saml_account = account_user&.account&.saml_enabled? %> + +<% if account_user&.inviter.present? && @resource.unconfirmed_email.blank? %> + <% if is_saml_account %> +<%= account_user.inviter.name %>, with <%= account_user.account.name %>, has invited you to access <%= global_config['BRAND_NAME'] || 'Chatwoot' %> via Single Sign-On (SSO).
+Your organization uses SSO for secure authentication. You will not need a password to access your account.
+ <% else %> +<%= account_user.inviter.name %>, with <%= account_user.account.name %>, has invited you to try out <%= global_config['BRAND_NAME'] || 'Chatwoot' %>.
+ <% end %> +<% end %> + +<% if @resource.confirmed? %> +You can login to your <%= global_config['BRAND_NAME'] || 'Chatwoot' %> account through the link below:
+<% else %> + <% if account_user&.inviter.blank? %> ++ Welcome to <%= global_config['BRAND_NAME'] || 'Chatwoot' %>! We have a suite of powerful tools ready for you to explore. Before that we quickly need to verify your email address to know it's really you. +
+ <% end %> + <% unless is_saml_account %> +Please take a moment and click the link below and activate your account.
+ <% end %> +<% end %> + + +<% if @resource.unconfirmed_email.present? %> +<%= link_to 'Confirm my account', frontend_url('auth/confirmation', confirmation_token: @token) %>
+<% elsif @resource.confirmed? %> + <% if is_saml_account %> +You can now access your account by logging in through your organization's SSO portal.
+ <% else %> +<%= link_to 'Login to my account', frontend_url('auth/sign_in') %>
+ <% end %> +<% elsif account_user&.inviter.present? %> + <% if is_saml_account %> +You can access your account by logging in through your organization's SSO portal.
+ <% else %> +<%= link_to 'Confirm my account', frontend_url('auth/password/edit', reset_password_token: @resource.send(:set_reset_password_token)) %>
+ <% end %> +<% else %> +<%= link_to 'Confirm my account', frontend_url('auth/confirmation', confirmation_token: @token) %>
+<% end %> diff --git a/enterprise/app/views/enterprise/api/v1/accounts/partials/_account.json.jbuilder b/enterprise/app/views/enterprise/api/v1/accounts/partials/_account.json.jbuilder new file mode 100644 index 0000000..bbb4962 --- /dev/null +++ b/enterprise/app/views/enterprise/api/v1/accounts/partials/_account.json.jbuilder @@ -0,0 +1 @@ +json.subscribed_features @account.subscribed_features diff --git a/enterprise/app/views/enterprise/api/v1/conversations/partials/_conversation.json.jbuilder b/enterprise/app/views/enterprise/api/v1/conversations/partials/_conversation.json.jbuilder new file mode 100644 index 0000000..5a390a6 --- /dev/null +++ b/enterprise/app/views/enterprise/api/v1/conversations/partials/_conversation.json.jbuilder @@ -0,0 +1,10 @@ +if conversation.account.feature_enabled?('sla') + json.applied_sla do + json.partial! 'api/v1/models/applied_sla', formats: [:json], resource: conversation.applied_sla if conversation.applied_sla.present? + end + json.sla_events do + json.array! conversation.sla_events do |sla_event| + json.partial! 'api/v1/models/sla_event', formats: [:json], sla_event: sla_event + end + end +end diff --git a/enterprise/app/views/fields/account_features_field/_form.html.erb b/enterprise/app/views/fields/account_features_field/_form.html.erb new file mode 100644 index 0000000..ffdd330 --- /dev/null +++ b/enterprise/app/views/fields/account_features_field/_form.html.erb @@ -0,0 +1,34 @@ +Features that remain enabled even when account plan is downgraded
+ +Features that remain enabled even when account plan is downgraded
+ +No manually managed features configured
+<% end %> \ No newline at end of file diff --git a/enterprise/config/initializers/omniauth_saml.rb b/enterprise/config/initializers/omniauth_saml.rb new file mode 100644 index 0000000..f39e9d5 --- /dev/null +++ b/enterprise/config/initializers/omniauth_saml.rb @@ -0,0 +1,47 @@ +# Enterprise Edition SAML SSO Provider +# This initializer adds SAML authentication support for Enterprise customers + +# SAML setup proc for multi-tenant configuration +SAML_SETUP_PROC = proc do |env| + request = ActionDispatch::Request.new(env) + + # Extract account_id from various sources + account_id = request.params['account_id'] || + request.session[:saml_account_id] || + env['omniauth.params']&.dig('account_id') + relay_state = request.params['RelayState'] || '' + + if account_id + # Store in session and omniauth params for callback + request.session[:saml_account_id] = account_id + request.session[:saml_relay_state] = relay_state + env['omniauth.params'] ||= {} + env['omniauth.params']['account_id'] = account_id + env['omniauth.params']['RelayState'] = relay_state + + # Find SAML settings for this account + settings = AccountSamlSettings.find_by(account_id: account_id) + + if settings + # Configure the strategy options dynamically + env['omniauth.strategy'].options[:idp_sso_service_url_runtime_params] = { RelayState: :RelayState } + env['omniauth.strategy'].options[:assertion_consumer_service_url] = "#{ENV.fetch('FRONTEND_URL', 'http://localhost:3000')}/omniauth/saml/callback?account_id=#{account_id}" + env['omniauth.strategy'].options[:sp_entity_id] = settings.sp_entity_id + env['omniauth.strategy'].options[:idp_entity_id] = settings.idp_entity_id + env['omniauth.strategy'].options[:idp_sso_service_url] = settings.sso_url + env['omniauth.strategy'].options[:idp_cert] = settings.certificate + env['omniauth.strategy'].options[:name_identifier_format] = 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress' + else + # Set a dummy certificate to avoid the error + env['omniauth.strategy'].options[:idp_cert] = 'DUMMY' + end + else + # Set a dummy certificate to avoid the error + env['omniauth.strategy'].options[:idp_cert] = 'DUMMY' + end +end + +Rails.application.config.middleware.use OmniAuth::Builder do + # SAML provider with setup phase for multi-tenant configuration + provider :saml, setup: SAML_SETUP_PROC +end diff --git a/enterprise/config/premium_features.yml b/enterprise/config/premium_features.yml new file mode 100644 index 0000000..dbe5061 --- /dev/null +++ b/enterprise/config/premium_features.yml @@ -0,0 +1,8 @@ +# List of the premium features in EE edition +- disable_branding +- audit_logs +- response_bot +- sla +- captain_integration +- custom_roles +- csat_review_notes diff --git a/enterprise/config/premium_installation_config.yml b/enterprise/config/premium_installation_config.yml new file mode 100644 index 0000000..0f102b0 --- /dev/null +++ b/enterprise/config/premium_installation_config.yml @@ -0,0 +1,22 @@ +# ------- Branding Related Config ------- # +- name: INSTALLATION_NAME + value: 'Chatwoot' +- name: LOGO_THUMBNAIL + value: '/brand-assets/logo_thumbnail.svg' +- name: LOGO + value: '/brand-assets/logo.svg' +- name: LOGO_DARK + value: '/brand-assets/logo_dark.svg' +- name: BRAND_URL + value: 'https://www.chatwoot.com' +- name: WIDGET_BRAND_URL + value: 'https://www.chatwoot.com' +- name: BRAND_NAME + value: 'Chatwoot' +- name: TERMS_URL + value: 'https://www.chatwoot.com/terms-of-service' +- name: PRIVACY_URL + value: 'https://www.chatwoot.com/privacy-policy' +- name: DISPLAY_MANIFEST + value: true +# ------- End of Branding Related Config ------- # diff --git a/enterprise/lib/captain/prompt_renderer.rb b/enterprise/lib/captain/prompt_renderer.rb new file mode 100644 index 0000000..1a73ddd --- /dev/null +++ b/enterprise/lib/captain/prompt_renderer.rb @@ -0,0 +1,25 @@ +require 'liquid' + +class Captain::PromptRenderer + class << self + def render(template_name, context = {}) + template = load_template(template_name) + liquid_template = Liquid::Template.parse(template) + liquid_template.render(stringify_keys(context)) + end + + private + + def load_template(template_name) + template_path = Rails.root.join('enterprise', 'lib', 'captain', 'prompts', "#{template_name}.liquid") + + raise "Template not found: #{template_name}" unless File.exist?(template_path) + + File.read(template_path) + end + + def stringify_keys(hash) + hash.deep_stringify_keys + end + end +end diff --git a/enterprise/lib/captain/prompts/assistant.liquid b/enterprise/lib/captain/prompts/assistant.liquid new file mode 100644 index 0000000..0dc7d85 --- /dev/null +++ b/enterprise/lib/captain/prompts/assistant.liquid @@ -0,0 +1,81 @@ +# System Context +You are part of Captain, a multi-agent AI system designed for seamless agent coordination and task execution. You can transfer conversations to specialized agents using handoff functions (e.g., `handoff_to_[agent_name]`). These transfers happen in the background - never mention or draw attention to them in your responses. + +# Your Identity +You are {{name}}, a helpful and knowledgeable assistant. Your role is to primarily act as a orchestrator handling multiple scenarios by using handoff tools. Your job also involves providing accurate information, assisting with tasks, and ensuring the customer get the help they need. + +{{ description }} + +Don't digress away from your instructions, and use all the available tools at your disposal for solving customer issues. If you are to state something factual about {{product_name}} ensure you source that information from the FAQs only. Use the `captain--tools--faq_lookup` tool for this. + +{% if conversation || contact -%} +# Current Context + +Here's the metadata we have about the current conversation and the contact associated with it: + +{% if conversation -%} +{% render 'conversation' %} +{% endif -%} + +{% if contact -%} +{% render 'contact' %} +{% endif -%} +{% endif -%} + +{% if response_guidelines.size > 0 -%} +# Response Guidelines +Your responses should follow these guidelines: +{% for guideline in response_guidelines -%} +- {{ guideline }} +- Be conversational but professional +- Provide actionable information +- Include relevant details from tool responses +{% endfor %} +{% endif -%} + +{% if guardrails.size > 0 -%} +# Guardrails +Always respect these boundaries: +{% for guardrail in guardrails -%} +- {{ guardrail }} +{% endfor %} +{% endif -%} + +# Decision Framework + +## 1. Analyze the Request +First, understand what the user is asking: +- **Intent**: What are they trying to achieve? +- **Type**: Is it a question, task, complaint, or request? +- **Complexity**: Can you handle it or does it need specialized expertise? + +## 2. Check for Specialized Scenarios First + +Before using any tools, check if the request matches any of these scenarios. If it seems like a particular scenario matches, use the specific handoff tool to transfer the conversation to the specific agent. The following are the scenario agents that are available to you. + +{% for scenario in scenarios -%} +- {{ scenario.title }}: {{ scenario.description }}, use the `handoff_to_{{ scenario.key }}` tool to transfer the conversation to the {{ scenario.title }} agent. +{% endfor %} +If unclear, ask clarifying questions to determine if a scenario applies: + +## 3. Handle the Request +If no specialized scenario clearly matches, handle it yourself in the following way + +### For Questions and Information Requests +1. **First, check existing knowledge**: Use `captain--tools--faq_lookup` tool to search for relevant information +2. **If not found in FAQs**: Try to ask clarifying questions to gather more information +3. **If unable to answer**: Use `captain--tools--handoff` tool to transfer to a human expert + +### For Complex or Unclear Requests +1. **Ask clarifying questions**: Gather more information if needed +2. **Break down complex tasks**: Handle step by step or hand off if too complex +3. **Escalate when necessary**: Use `captain--tools--handoff` tool for issues beyond your capabilities + +# Human Handoff Protocol +Transfer to a human agent when: +- User explicitly requests human assistance +- You cannot find needed information after checking FAQs +- The issue requires specialized knowledge or permissions you don't have +- Multiple attempts to help have been unsuccessful + +When using the `captain--tools--handoff` tool, provide a clear reason that helps the human agent understand the context. diff --git a/enterprise/lib/captain/prompts/scenario.liquid b/enterprise/lib/captain/prompts/scenario.liquid new file mode 100644 index 0000000..1148a7c --- /dev/null +++ b/enterprise/lib/captain/prompts/scenario.liquid @@ -0,0 +1,48 @@ +# System context +You are part of a multi-agent system where you've been handed off a conversation to handle a specific task. The handoff was seamless - the user is not aware of any transfer. Continue the conversation naturally. + +# Your Role +You are a specialized agent called "{{ title }}", your task is to handle the following scenario: + +{{ instructions }} + +If you believe the user's request is not within the scope of your role, you can assign this conversation back to the orchestrator agent using the `handoff_to_{{ assistant_name }}` tool + +{% if conversation || contact %} +# Current Context + +Here's the metadata we have about the current conversation and the contact associated with it: + +{% if conversation -%} +{% render 'conversation' %} +{% endif -%} + +{% if contact -%} +{% render 'contact' %} +{% endif -%} +{% endif -%} + + +{% if response_guidelines.size > 0 -%} +# Response Guidelines +Your responses should follow these guidelines: +{% for guideline in response_guidelines -%} +- {{ guideline }} +{% endfor %} +{% endif -%} + +{% if guardrails.size > 0 -%} +# Guardrails +Always respect these boundaries: +{% for guardrail in guardrails -%} +- {{ guardrail }} +{% endfor %} +{% endif -%} + +{% if tools.size > 0 -%} +# Available Tools +You have access to these tools: +{% for tool in tools -%} +- {{ tool.id }}: {{ tool.description }} +{% endfor %} +{%- endif %} diff --git a/enterprise/lib/captain/prompts/snippets/contact.liquid b/enterprise/lib/captain/prompts/snippets/contact.liquid new file mode 100644 index 0000000..372389c --- /dev/null +++ b/enterprise/lib/captain/prompts/snippets/contact.liquid @@ -0,0 +1,17 @@ +# Contact Information +- Contact ID: {{ contact.id }} +- Name: {{ contact.name || "Unknown" }} +- Email: {{ contact.email || "None" }} +- Phone: {{ contact.phone_number || "None" }} +- Identifier: {{ contact.identifier || "None" }} +- Type: {{ contact.contact_type || "visitor" }} +{% if contact.custom_attributes -%} + {% for attribute in contact.custom_attributes -%} +- {{ attribute[0] }}: {{ attribute[1] }} + {% endfor -%} +{% endif -%} +{% if contact.additional_attributes -%} + {% for attribute in contact.additional_attributes -%} +- {{ attribute[0] }}: {{ attribute[1] }} + {% endfor -%} +{% endif -%} \ No newline at end of file diff --git a/enterprise/lib/captain/prompts/snippets/conversation.liquid b/enterprise/lib/captain/prompts/snippets/conversation.liquid new file mode 100644 index 0000000..b5faee7 --- /dev/null +++ b/enterprise/lib/captain/prompts/snippets/conversation.liquid @@ -0,0 +1,18 @@ +# Current Conversation Context +- Conversation ID: {{ conversation.display_id }} +- Contact ID: {{ conversation.contact_id }} +- Status: {{ conversation.status }} +- Priority: {{ conversation.priority || "None" }} +{% if conversation.label_list.size > 0 -%} +- Labels: {{ conversation.label_list | join: ", " }} +{% endif -%} +{% if conversation.custom_attributes -%} + {% for attribute in conversation.custom_attributes -%} +- {{ attribute[0] }}: {{ attribute[1] }} + {% endfor -%} +{% endif -%} +{% if conversation.additional_attributes -%} + {% for attribute in conversation.additional_attributes -%} +- {{ attribute[0] }}: {{ attribute[1] }} + {% endfor -%} +{% endif -%} \ No newline at end of file diff --git a/enterprise/lib/captain/response_schema.rb b/enterprise/lib/captain/response_schema.rb new file mode 100644 index 0000000..651eb7e --- /dev/null +++ b/enterprise/lib/captain/response_schema.rb @@ -0,0 +1,6 @@ +# TODO: Wrap the schema lib under ai-agents +# So we can extend it as Agents::Schema +class Captain::ResponseSchema < RubyLLM::Schema + string :response, description: 'The message to send to the user' + string :reasoning, description: "Agent's thought process" +end diff --git a/enterprise/lib/captain/tools/add_contact_note_tool.rb b/enterprise/lib/captain/tools/add_contact_note_tool.rb new file mode 100644 index 0000000..e1475ab --- /dev/null +++ b/enterprise/lib/captain/tools/add_contact_note_tool.rb @@ -0,0 +1,26 @@ +class Captain::Tools::AddContactNoteTool < Captain::Tools::BasePublicTool + description 'Add a note to a contact profile' + param :note, type: 'string', desc: 'The note content to add to the contact' + + def perform(tool_context, note:) + contact = find_contact(tool_context.state) + return 'Contact not found' unless contact + + return 'Note content is required' if note.blank? + + log_tool_usage('add_contact_note', { contact_id: contact.id, note_length: note.length }) + + create_contact_note(contact, note) + "Note added successfully to contact #{contact.name} (ID: #{contact.id})" + end + + private + + def create_contact_note(contact, note) + contact.notes.create!(content: note) + end + + def permissions + %w[contact_manage] + end +end diff --git a/enterprise/lib/captain/tools/add_label_to_conversation_tool.rb b/enterprise/lib/captain/tools/add_label_to_conversation_tool.rb new file mode 100644 index 0000000..429f33b --- /dev/null +++ b/enterprise/lib/captain/tools/add_label_to_conversation_tool.rb @@ -0,0 +1,34 @@ +class Captain::Tools::AddLabelToConversationTool < Captain::Tools::BasePublicTool + description 'Add a label to a conversation' + param :label_name, type: 'string', desc: 'The name of the label to add' + + def perform(tool_context, label_name:) + conversation = find_conversation(tool_context.state) + return 'Conversation not found' unless conversation + + label_name = label_name&.strip&.downcase + return 'Label name is required' if label_name.blank? + + label = find_label(label_name) + return 'Label not found' unless label + + add_label_to_conversation(conversation, label_name) + + log_tool_usage('added_label', conversation_id: conversation.id, label: label_name) + + "Label '#{label_name}' added to conversation ##{conversation.display_id}" + end + + private + + def find_label(label_name) + account_scoped(Label).find_by(title: label_name) + end + + def add_label_to_conversation(conversation, label_name) + conversation.add_labels(label_name) + rescue StandardError => e + Rails.logger.error "Failed to add label to conversation: #{e.message}" + raise + end +end diff --git a/enterprise/lib/captain/tools/add_private_note_tool.rb b/enterprise/lib/captain/tools/add_private_note_tool.rb new file mode 100644 index 0000000..36e1ef9 --- /dev/null +++ b/enterprise/lib/captain/tools/add_private_note_tool.rb @@ -0,0 +1,33 @@ +class Captain::Tools::AddPrivateNoteTool < Captain::Tools::BasePublicTool + description 'Add a private note to a conversation' + param :note, type: 'string', desc: 'The private note content' + + def perform(tool_context, note:) + conversation = find_conversation(tool_context.state) + return 'Conversation not found' unless conversation + + return 'Note content is required' if note.blank? + + log_tool_usage('add_private_note', { conversation_id: conversation.id, note_length: note.length }) + create_private_note(conversation, note) + + 'Private note added successfully' + end + + private + + def create_private_note(conversation, note) + conversation.messages.create!( + account: @assistant.account, + inbox: conversation.inbox, + sender: @assistant, + message_type: :outgoing, + content: note, + private: true + ) + end + + def permissions + %w[conversation_manage conversation_unassigned_manage conversation_participating_manage] + end +end diff --git a/enterprise/lib/captain/tools/base_public_tool.rb b/enterprise/lib/captain/tools/base_public_tool.rb new file mode 100644 index 0000000..e1f779b --- /dev/null +++ b/enterprise/lib/captain/tools/base_public_tool.rb @@ -0,0 +1,45 @@ +require 'agents' + +class Captain::Tools::BasePublicTool < Agents::Tool + def initialize(assistant) + @assistant = assistant + super() + end + + def active? + # Public tools are always active + true + end + + def permissions + # Override in subclasses to specify required permissions + # Returns empty array for public tools (no permissions required) + [] + end + + private + + def account_scoped(model_class) + model_class.where(account_id: @assistant.account_id) + end + + def find_conversation(state) + conversation_id = state&.dig(:conversation, :id) + return nil unless conversation_id + + account_scoped(::Conversation).find_by(id: conversation_id) + end + + def find_contact(state) + contact_id = state&.dig(:contact, :id) + return nil unless contact_id + + account_scoped(::Contact).find_by(id: contact_id) + end + + def log_tool_usage(action, details = {}) + Rails.logger.info do + "#{self.class.name}: #{action} for assistant #{@assistant&.id} - #{details.inspect}" + end + end +end diff --git a/enterprise/lib/captain/tools/faq_lookup_tool.rb b/enterprise/lib/captain/tools/faq_lookup_tool.rb new file mode 100644 index 0000000..93dd902 --- /dev/null +++ b/enterprise/lib/captain/tools/faq_lookup_tool.rb @@ -0,0 +1,48 @@ +class Captain::Tools::FaqLookupTool < Captain::Tools::BasePublicTool + description 'Search FAQ responses using semantic similarity to find relevant answers' + param :query, type: 'string', desc: 'The question or topic to search for in the FAQ database' + + def perform(_tool_context, query:) + log_tool_usage('searching', { query: query }) + + # Use existing vector search on approved responses + responses = @assistant.responses.approved.search(query).to_a + + if responses.empty? + log_tool_usage('no_results', { query: query }) + "No relevant FAQs found for: #{query}" + else + log_tool_usage('found_results', { query: query, count: responses.size }) + format_responses(responses) + end + end + + private + + def format_responses(responses) + responses.map { |response| format_response(response) }.join + end + + def format_response(response) + formatted_response = " + Question: #{response.question} + Answer: #{response.answer} + " + if should_show_source?(response) + formatted_response += " + Source: #{response.documentable.external_link} + " + end + + formatted_response + end + + def should_show_source?(response) + return false if response.documentable.blank? + return false unless response.documentable.try(:external_link) + + # Don't show source if it's a PDF placeholder + external_link = response.documentable.external_link + !external_link.start_with?('PDF:') + end +end diff --git a/enterprise/lib/captain/tools/handoff_tool.rb b/enterprise/lib/captain/tools/handoff_tool.rb new file mode 100644 index 0000000..797f248 --- /dev/null +++ b/enterprise/lib/captain/tools/handoff_tool.rb @@ -0,0 +1,59 @@ +class Captain::Tools::HandoffTool < Captain::Tools::BasePublicTool + description 'Hand off the conversation to a human agent when unable to assist further' + param :reason, type: 'string', desc: 'The reason why handoff is needed (optional)', required: false + + def perform(tool_context, reason: nil) + conversation = find_conversation(tool_context.state) + return 'Conversation not found' unless conversation + + # Log the handoff with reason + log_tool_usage('tool_handoff', { + conversation_id: conversation.id, + reason: reason || 'Agent requested handoff' + }) + + # Use existing handoff mechanism from ResponseBuilderJob + trigger_handoff(conversation, reason) + + "Conversation handed off to human support team#{" (Reason: #{reason})" if reason}" + rescue StandardError => e + ChatwootExceptionTracker.new(e).capture_exception + 'Failed to handoff conversation' + end + + private + + def trigger_handoff(conversation, reason) + # post the reason as a private note + conversation.messages.create!( + message_type: :outgoing, + private: true, + sender: @assistant, + account: conversation.account, + inbox: conversation.inbox, + content: reason + ) + + # Trigger the bot handoff (sets status to open + dispatches events) + conversation.bot_handoff! + + # Send out of office message if applicable (since template messages were suppressed while Captain was handling) + send_out_of_office_message_if_applicable(conversation) + end + + def send_out_of_office_message_if_applicable(conversation) + ::MessageTemplates::Template::OutOfOffice.perform_if_applicable(conversation) + end + + # TODO: Future enhancement - Add team assignment capability + # This tool could be enhanced to: + # 1. Accept team_id parameter for routing to specific teams + # 2. Set conversation priority based on handoff reason + # 3. Add metadata for intelligent agent assignment + # 4. Support escalation levels (L1 -> L2 -> L3) + # + # Example future signature: + # param :team_id, type: 'string', desc: 'ID of team to assign conversation to', required: false + # param :priority, type: 'string', desc: 'Priority level (low/medium/high/urgent)', required: false + # param :escalation_level, type: 'string', desc: 'Support level (L1/L2/L3)', required: false +end diff --git a/enterprise/lib/captain/tools/http_tool.rb b/enterprise/lib/captain/tools/http_tool.rb new file mode 100644 index 0000000..b4593d2 --- /dev/null +++ b/enterprise/lib/captain/tools/http_tool.rb @@ -0,0 +1,112 @@ +require 'agents' + +class Captain::Tools::HttpTool < Agents::Tool + def initialize(assistant, custom_tool) + @assistant = assistant + @custom_tool = custom_tool + super() + end + + def active? + @custom_tool.enabled? + end + + def perform(tool_context, **params) + url = @custom_tool.build_request_url(params) + body = @custom_tool.build_request_body(params) + + response = execute_http_request(url, body, tool_context) + @custom_tool.format_response(response.body) + rescue StandardError => e + Rails.logger.error("HttpTool execution error for #{@custom_tool.slug}: #{e.class} - #{e.message}") + 'An error occurred while executing the request' + end + + private + + PRIVATE_IP_RANGES = [ + IPAddr.new('127.0.0.0/8'), # IPv4 Loopback + IPAddr.new('10.0.0.0/8'), # IPv4 Private network + IPAddr.new('172.16.0.0/12'), # IPv4 Private network + IPAddr.new('192.168.0.0/16'), # IPv4 Private network + IPAddr.new('169.254.0.0/16'), # IPv4 Link-local + IPAddr.new('::1'), # IPv6 Loopback + IPAddr.new('fc00::/7'), # IPv6 Unique local addresses + IPAddr.new('fe80::/10') # IPv6 Link-local + ].freeze + + # Limit response size to prevent memory exhaustion and match LLM token limits + # 1MB of text ≈ 250K tokens, which exceeds most LLM context windows + MAX_RESPONSE_SIZE = 1.megabyte + + def execute_http_request(url, body, tool_context) + uri = URI.parse(url) + + # Check if resolved IP is private + check_private_ip!(uri.host) + + http = Net::HTTP.new(uri.host, uri.port) + http.use_ssl = uri.scheme == 'https' + http.read_timeout = 30 + http.open_timeout = 10 + http.max_retries = 0 # Disable redirects + + request = build_http_request(uri, body) + apply_authentication(request) + apply_metadata_headers(request, tool_context) + + response = http.request(request) + + raise "HTTP request failed with status #{response.code}" unless response.is_a?(Net::HTTPSuccess) + + validate_response!(response) + + response + end + + def check_private_ip!(hostname) + ip_address = IPAddr.new(Resolv.getaddress(hostname)) + + raise 'Request blocked: hostname resolves to private IP address' if PRIVATE_IP_RANGES.any? { |range| range.include?(ip_address) } + rescue Resolv::ResolvError, SocketError => e + raise "DNS resolution failed: #{e.message}" + end + + def validate_response!(response) + content_length = response['content-length']&.to_i + if content_length && content_length > MAX_RESPONSE_SIZE + raise "Response size #{content_length} bytes exceeds maximum allowed #{MAX_RESPONSE_SIZE} bytes" + end + + return unless response.body && response.body.bytesize > MAX_RESPONSE_SIZE + + raise "Response body size #{response.body.bytesize} bytes exceeds maximum allowed #{MAX_RESPONSE_SIZE} bytes" + end + + def build_http_request(uri, body) + if @custom_tool.http_method == 'POST' + request = Net::HTTP::Post.new(uri.request_uri) + if body + request.body = body + request['Content-Type'] = 'application/json' + end + else + request = Net::HTTP::Get.new(uri.request_uri) + end + request + end + + def apply_authentication(request) + headers = @custom_tool.build_auth_headers + headers.each { |key, value| request[key] = value } + + credentials = @custom_tool.build_basic_auth_credentials + request.basic_auth(*credentials) if credentials + end + + def apply_metadata_headers(request, tool_context) + state = tool_context&.state || {} + metadata_headers = @custom_tool.build_metadata_headers(state) + metadata_headers.each { |key, value| request[key] = value } + end +end diff --git a/enterprise/lib/captain/tools/update_priority_tool.rb b/enterprise/lib/captain/tools/update_priority_tool.rb new file mode 100644 index 0000000..1196911 --- /dev/null +++ b/enterprise/lib/captain/tools/update_priority_tool.rb @@ -0,0 +1,50 @@ +class Captain::Tools::UpdatePriorityTool < Captain::Tools::BasePublicTool + description 'Update the priority of a conversation' + param :priority, type: 'string', desc: 'The priority level: low, medium, high, urgent, or nil to remove priority' + + def perform(tool_context, priority:) + @conversation = find_conversation(tool_context.state) + return 'Conversation not found' unless @conversation + + @normalized_priority = normalize_priority(priority) + return "Invalid priority. Valid options: #{valid_priority_options}" unless valid_priority?(@normalized_priority) + + log_tool_usage('update_priority', { conversation_id: @conversation.id, priority: priority }) + + execute_priority_update + end + + private + + def execute_priority_update + update_conversation_priority(@conversation, @normalized_priority) + priority_text = @normalized_priority || 'none' + "Priority updated to '#{priority_text}' for conversation ##{@conversation.display_id}" + end + + def normalize_priority(priority) + return nil if priority == 'nil' || priority.blank? + + priority.downcase + end + + def valid_priority?(priority) + valid_priorities.include?(priority) + end + + def valid_priorities + @valid_priorities ||= [nil] + Conversation.priorities.keys + end + + def valid_priority_options + (valid_priorities.compact + ['nil']).join(', ') + end + + def update_conversation_priority(conversation, priority) + conversation.update!(priority: priority) + end + + def permissions + %w[conversation_manage conversation_unassigned_manage conversation_participating_manage] + end +end diff --git a/enterprise/lib/enterprise.rb b/enterprise/lib/enterprise.rb new file mode 100644 index 0000000..50fc8f6 --- /dev/null +++ b/enterprise/lib/enterprise.rb @@ -0,0 +1,2 @@ +module Enterprise +end diff --git a/enterprise/lib/enterprise/integrations/openai_processor_service.rb b/enterprise/lib/enterprise/integrations/openai_processor_service.rb new file mode 100644 index 0000000..5a98ad4 --- /dev/null +++ b/enterprise/lib/enterprise/integrations/openai_processor_service.rb @@ -0,0 +1,82 @@ +module Enterprise::Integrations::OpenaiProcessorService + ALLOWED_EVENT_NAMES = %w[rephrase summarize reply_suggestion label_suggestion fix_spelling_grammar shorten expand + make_friendly make_formal simplify].freeze + CACHEABLE_EVENTS = %w[label_suggestion].freeze + + def label_suggestion_message + payload = label_suggestion_body + return nil if payload.blank? + + response = make_api_call(label_suggestion_body) + + return response if response[:error].present? + + # LLMs are not deterministic, so this is bandaid solution + # To what you ask? Sometimes, the response includes + # "Labels:" in it's response in some format. This is a hacky way to remove it + # TODO: Fix with with a better prompt + { message: response[:message] ? response[:message].gsub(/^(label|labels):/i, '') : '' } + end + + private + + def labels_with_messages + return nil unless valid_conversation?(conversation) + + labels = hook.account.labels.pluck(:title).join(', ') + character_count = labels.length + + messages = init_messages_body(false) + add_messages_until_token_limit(conversation, messages, false, character_count) + + return nil if messages.blank? || labels.blank? + + "Messages:\n#{messages}\nLabels:\n#{labels}" + end + + def valid_conversation?(conversation) + return false if conversation.nil? + return false if conversation.messages.incoming.count < 3 + + # Think Mark think, at this point the conversation is beyond saving + return false if conversation.messages.count > 100 + + # if there are more than 20 messages, only trigger this if the last message is from the client + return false if conversation.messages.count > 20 && !conversation.messages.last.incoming? + + true + end + + def summarize_body + { + model: self.class::GPT_MODEL, + messages: [ + { role: 'system', + content: prompt_from_file('summary', enterprise: true) }, + { role: 'user', content: conversation_messages } + ] + }.to_json + end + + def label_suggestion_body + return unless label_suggestions_enabled? + + content = labels_with_messages + return value_from_cache if content.blank? + + { + model: self.class::GPT_MODEL, + messages: [ + { + role: 'system', + content: prompt_from_file('label_suggestion', enterprise: true) + }, + { role: 'user', content: content } + ] + }.to_json + end + + def label_suggestions_enabled? + hook.settings['label_suggestion'].present? + end +end diff --git a/enterprise/lib/enterprise/integrations/openai_prompts/label_suggestion.txt b/enterprise/lib/enterprise/integrations/openai_prompts/label_suggestion.txt new file mode 100644 index 0000000..6b0e436 --- /dev/null +++ b/enterprise/lib/enterprise/integrations/openai_prompts/label_suggestion.txt @@ -0,0 +1 @@ +Your role is as an assistant to a customer support agent. You will be provided with a transcript of a conversation between a customer and the support agent, along with a list of potential labels. Your task is to analyze the conversation and select the two labels from the given list that most accurately represent the themes or issues discussed. Ensure you preserve the exact casing of the labels as they are provided in the list. Do not create new labels; only choose from those provided. Once you have made your selections, please provide your response as a comma-separated list of the provided labels. Remember, your response should only contain the labels you\'ve selected,in their original casing, and nothing else. \ No newline at end of file diff --git a/enterprise/lib/enterprise/integrations/openai_prompts/summary.txt b/enterprise/lib/enterprise/integrations/openai_prompts/summary.txt new file mode 100644 index 0000000..5196f5b --- /dev/null +++ b/enterprise/lib/enterprise/integrations/openai_prompts/summary.txt @@ -0,0 +1,28 @@ +As an AI-powered summarization tool, your task is to condense lengthy interactions between customer support agents and customers into brief, digestible summaries. The objective of these summaries is to provide a quick overview, enabling any agent, even those without prior context, to grasp the essence of the conversation promptly. + +Make sure you strongly adhere to the following rules when generating the summary + +1. Be brief and concise. The shorter the summary the better. +2. Aim to summarize the conversation in approximately 200 words, formatted as multiple small paragraphs that are easier to read. +3. Describe the customer intent in around 50 words. +4. Remove information that is not directly relevant to the customer's problem or the agent's solution. For example, personal anecdotes, small talk, etc. +5. Don't include segments of the conversation that didn't contribute meaningful content, like greetings or farewell. +6. The 'Action Items' should be a bullet list, arranged in order of priority if possible. +7. 'Action Items' should strictly encapsulate tasks committed to by the agent or left incomplete. Any suggestions made by the agent should not be included. +8. The 'Action Items' should be brief and concise +9. Mark important words or parts of sentences as bold. +10. Apply markdown syntax to format any included code, using backticks. +11. Include a section for "Follow-up Items" or "Open Questions" if there are any unresolved issues or outstanding questions. +12. If any section does not have any content, remove that section and the heading from the response +13. Do not insert your own opinions about the conversation. + + +Reply in the user's language, as a markdown of the following format. + +**Customer Intent** + +**Conversation Summary** + +**Action Items** + +**Follow-up Items** \ No newline at end of file diff --git a/enterprise/lib/tasks/search.rake b/enterprise/lib/tasks/search.rake new file mode 100644 index 0000000..4ec1374 --- /dev/null +++ b/enterprise/lib/tasks/search.rake @@ -0,0 +1,44 @@ +namespace :search do + desc 'Reindex messages for all accounts' + task all: :environment do + next unless check_opensearch_config + + puts 'Starting reindex for all accounts...' + account_count = Account.count + puts "Found #{account_count} accounts" + + Account.find_each.with_index(1) do |account, index| + puts "[#{index}/#{account_count}] Reindexing messages for account #{account.id}" + reindex_account(account) + end + + puts 'Reindex task queued for all accounts' + end + + desc 'Reindex messages for a specific account: rake search:account ACCOUNT_ID=1' + task account: :environment do + next unless check_opensearch_config + + account_id = ENV.fetch('ACCOUNT_ID', nil) + account = Account.find_by(id: account_id) + if account.nil? + puts 'Please provide a valid account ID. Account not found' + next + end + puts "Reindexing messages for account #{account.id}" + reindex_account(account) + end +end + +def check_opensearch_config + if ENV['OPENSEARCH_URL'].blank? + puts 'Skipping reindex as OPENSEARCH_URL is not configured' + return false + end + true +end + +def reindex_account(account) + Messages::ReindexService.new(account: account).perform + puts "Reindex task queued for account #{account.id}" +end diff --git a/enterprise/tasks_railtie.rb b/enterprise/tasks_railtie.rb new file mode 100644 index 0000000..9a7d093 --- /dev/null +++ b/enterprise/tasks_railtie.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class TasksRailtie < Rails::Railtie + rake_tasks do + # Load all rake tasks from enterprise/lib/tasks + Dir.glob(Rails.root.join('enterprise/lib/tasks/**/*.rake')).each { |f| load f } + end +end diff --git a/histoire.config.ts b/histoire.config.ts new file mode 100644 index 0000000..41b6f3c --- /dev/null +++ b/histoire.config.ts @@ -0,0 +1,44 @@ +import { defineConfig } from 'histoire'; +import { HstVue } from '@histoire/plugin-vue'; + +export default defineConfig({ + setupFile: './histoire.setup.ts', + plugins: [HstVue()], + collectMaxThreads: 4, + vite: { + server: { + port: 6179, + }, + }, + viteIgnorePlugins: ['vite-plugin-ruby'], + theme: { + darkClass: 'dark', + title: '@chatwoot/design', + logo: { + square: './design-system/images/logo-thumbnail.svg', + light: './design-system/images/logo.png', + dark: './design-system/images/logo-dark.png', + }, + }, + defaultStoryProps: { + icon: 'carbon:cube', + iconColor: '#1F93FF', + layout: { + type: 'grid', + width: '80%', + }, + }, + tree: { + groups: [ + { + id: 'top', + title: '', + }, + { + id: 'components', + title: 'Components', + include: () => true, + }, + ], + }, +}); diff --git a/lib/action_view/template/handlers/liquid.rb b/lib/action_view/template/handlers/liquid.rb new file mode 100644 index 0000000..65c0b1b --- /dev/null +++ b/lib/action_view/template/handlers/liquid.rb @@ -0,0 +1,62 @@ +# Code inspired by +# http://royvandermeij.com/blog/2011/09/21/create-a-liquid-handler-for-rails-3-dot-1/ +# https://github.com/chamnap/liquid-rails/blob/master/lib/liquid-rails/template_handler.rb + +class ActionView::Template::Handlers::Liquid + def self.call(template, _source) + "ActionView::Template::Handlers::Liquid.new(self).render(#{template.source.inspect}, local_assigns)" + end + + def initialize(view) + @view = view + @controller = @view.controller + @helper = ActionController::Base.helpers + end + + def render(template, local_assigns = {}) + assigns = drops + assigns['content_for_layout'] = @view.content_for(:layout) if @view.content_for?(:layout) + assigns.merge!(local_assigns) + assigns.merge!(locals) + + liquid = Liquid::Template.parse(template) + liquid.send(render_method, assigns.stringify_keys, filters: filters, registers: registers.stringify_keys) + end + + def locals + if @controller.respond_to?(:liquid_locals, true) + @controller.send(:liquid_locals) + else + {} + end + end + + def drops + droppables = @controller.send(:liquid_droppables) if @controller.respond_to?(:liquid_droppables, true) + droppables.update(droppables) { |_, obj| obj.try(:to_drop) || nil } + end + + def filters + if @controller.respond_to?(:liquid_filters, true) + @controller.send(:liquid_filters) + else + [] + end + end + + def registers + if @controller.respond_to?(:liquid_registers, true) + @controller.send(:liquid_registers) + else + {} + end + end + + def compilable? + false + end + + def render_method + ::Rails.env.development? || ::Rails.env.test? ? :render! : :render + end +end diff --git a/lib/assets/.keep b/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/lib/base_markdown_renderer.rb b/lib/base_markdown_renderer.rb new file mode 100644 index 0000000..df49918 --- /dev/null +++ b/lib/base_markdown_renderer.rb @@ -0,0 +1,39 @@ +class BaseMarkdownRenderer < CommonMarker::HtmlRenderer + def image(node) + src, title = extract_img_attributes(node) + height = extract_image_height(src) + + render_img_tag(src, title, height) + end + + private + + def extract_img_attributes(node) + [ + escape_href(node.url), + escape_html(node.title) + ] + end + + def extract_image_height(src) + query_params = parse_query_params(src) + query_params['cw_image_height']&.first + end + + def parse_query_params(url) + parsed_url = URI.parse(url) + CGI.parse(parsed_url.query || '') + rescue URI::InvalidURIError + {} + end + + def render_img_tag(src, title, height = nil) + title_attribute = title.present? ? " title=\"#{title}\"" : '' + height_attribute = height ? " height=\"#{height}\" width=\"auto\"" : '' + + plain do + # plain ensures that the content is not wrapped in a paragraph tag + out("You may have mistyped the address or the page may have moved.
+If you are the application owner check the logs for more information.
+Maybe you tried to change something you didn't have access to.
+If you are the application owner check the logs for more information.
+If you are the application owner check the logs for more information.
+Custom HTML content
' + }) + + message = described_class.new(user, conversation, params).perform + + expect(message.content_attributes.dig('email', 'html_content', 'full')).to eq 'Custom HTML content
' + expect(message.content_attributes.dig('email', 'html_content', 'reply')).to eq 'Custom HTML content
' + expect(message.content_attributes.dig('email', 'text_content', 'full')).to eq 'Regular message content' + expect(message.content_attributes.dig('email', 'text_content', 'reply')).to eq 'Regular message content' + end + + it 'does not process custom email content for private messages' do + params = ActionController::Parameters.new({ + content: 'Regular message content', + email_html_content: 'Custom HTML content
', + private: true + }) + + message = described_class.new(user, conversation, params).perform + + expect(message.content_attributes.dig('email', 'html_content')).to be_nil + expect(message.content_attributes.dig('email', 'text_content')).to be_nil + end + + it 'falls back to default behavior when no custom email content is provided' do + params = ActionController::Parameters.new({ + content: 'Regular **markdown** content' + }) + + message = described_class.new(user, conversation, params).perform + + expect(message.content_attributes.dig('email', 'html_content', 'full')).to include('markdown') + expect(message.content_attributes.dig('email', 'text_content', 'full')).to eq 'Regular **markdown** content' + end + end + + context 'when liquid templates are present in email content' do + let(:contact) { create(:contact, name: 'John', email: 'john@example.com') } + let(:conversation) { create(:conversation, inbox: channel_email.inbox, account: account, contact: contact) } + + it 'processes liquid variables in email content' do + params = ActionController::Parameters.new({ + content: 'Hello {{contact.name}}, your email is {{contact.email}}' + }) + + message = described_class.new(user, conversation, params).perform + + expect(message.content_attributes.dig('email', 'html_content', 'full')).to include('Hello John') + expect(message.content_attributes.dig('email', 'html_content', 'full')).to include('john@example.com') + expect(message.content_attributes.dig('email', 'text_content', 'full')).to eq 'Hello John, your email is john@example.com' + end + + it 'does not process liquid in code blocks' do + params = ActionController::Parameters.new({ + content: 'Hello {{contact.name}}, use this code: `{{contact.email}}`' + }) + + message = described_class.new(user, conversation, params).perform + + expect(message.content_attributes.dig('email', 'text_content', 'full')).to eq 'Hello John, use this code: `{{contact.email}}`' + end + + it 'handles broken liquid syntax gracefully' do + params = ActionController::Parameters.new({ + content: 'Hello {{contact.name} {{invalid}}' + }) + + message = described_class.new(user, conversation, params).perform + + expect(message.content_attributes.dig('email', 'text_content', 'full')).to eq 'Hello {{contact.name} {{invalid}}' + end + + it 'does not process liquid for incoming messages' do + params = ActionController::Parameters.new({ + content: 'Hello {{contact.name}}', + message_type: 'incoming' + }) + + api_channel = create(:channel_api, account: account) + api_conversation = create(:conversation, inbox: api_channel.inbox, account: account, contact: contact) + + message = described_class.new(user, api_conversation, params).perform + + expect(message.content).to eq 'Hello {{contact.name}}' + end + + it 'does not process liquid for private messages' do + params = ActionController::Parameters.new({ + content: 'Hello {{contact.name}}', + private: true + }) + + message = described_class.new(user, conversation, params).perform + + expect(message.content_attributes.dig('email', 'html_content')).to be_nil + expect(message.content_attributes.dig('email', 'text_content')).to be_nil + end + end + end + end +end diff --git a/spec/builders/notification_builder_spec.rb b/spec/builders/notification_builder_spec.rb new file mode 100644 index 0000000..1b28f6a --- /dev/null +++ b/spec/builders/notification_builder_spec.rb @@ -0,0 +1,101 @@ +require 'rails_helper' + +describe NotificationBuilder do + include ActiveJob::TestHelper + + describe '#perform' do + let!(:account) { create(:account) } + let!(:user) { create(:user, account: account) } + let!(:primary_actor) { create(:conversation, account: account) } + + before do + notification_setting = user.notification_settings.find_by(account_id: account.id) + notification_setting.selected_email_flags = [:email_conversation_creation] + notification_setting.selected_push_flags = [:push_conversation_creation] + notification_setting.save! + end + + it 'creates a notification' do + expect do + described_class.new( + notification_type: 'conversation_creation', + user: user, + account: account, + primary_actor: primary_actor + ).perform + end.to change { user.notifications.count }.by(1) + end + + it 'will not throw error if notification setting is not present' do + perform_enqueued_jobs do + user.account_users.destroy_all + end + expect( + described_class.new( + notification_type: 'conversation_creation', + user: user, + account: account, + primary_actor: primary_actor + ).perform + ).to be_nil + end + + it 'will not create a conversation_creation notification if user is not subscribed to it' do + notification_setting = user.notification_settings.find_by(account_id: account.id) + notification_setting.selected_email_flags = [] + notification_setting.selected_push_flags = [] + notification_setting.save! + + expect( + described_class.new( + notification_type: 'conversation_creation', + user: user, + account: account, + primary_actor: primary_actor + ).perform + ).to be_nil + end + + it 'will create a conversation_mention notification even though user is not subscribed to it' do + notification_setting = user.notification_settings.find_by(account_id: account.id) + notification_setting.selected_email_flags = [] + notification_setting.selected_push_flags = [] + notification_setting.save! + + expect do + described_class.new( + notification_type: 'conversation_mention', + user: user, + account: account, + primary_actor: primary_actor + ).perform + end.to change { user.notifications.count }.by(1) + end + + it 'will not create a notification if conversation contact is blocked and notification type is not conversation_mention' do + primary_actor.contact.update(blocked: true) + + expect do + described_class.new( + notification_type: 'conversation_creation', + user: user, + account: account, + primary_actor: primary_actor + ).perform + end.not_to(change { user.notifications.count }) + end + + it 'will create a notification if conversation contact is blocked and notification type is conversation_mention' do + primary_actor.contact.update(blocked: true) + + expect do + described_class.new( + notification_type: 'conversation_mention', + user: user, + account: account, + primary_actor: primary_actor + ).perform + end.to change { user.notifications.count }.by(1) + end + end +end diff --git a/spec/builders/v2/report_builder_spec.rb b/spec/builders/v2/report_builder_spec.rb new file mode 100644 index 0000000..3f86b03 --- /dev/null +++ b/spec/builders/v2/report_builder_spec.rb @@ -0,0 +1,480 @@ +require 'rails_helper' + +describe V2::ReportBuilder do + include ActiveJob::TestHelper + let_it_be(:account) { create(:account) } + let_it_be(:label_1) { create(:label, title: 'Label_1', account: account) } + let_it_be(:label_2) { create(:label, title: 'Label_2', account: account) } + + describe '#timeseries' do + # Use before_all to share expensive setup across all tests in this describe block + # This runs once instead of 21 times, dramatically speeding up the suite + before_all do + travel_to(Time.zone.today) do + user = create(:user, account: account) + inbox = create(:inbox, account: account) + create(:inbox_member, user: user, inbox: inbox) + + gravatar_url = 'https://www.gravatar.com' + stub_request(:get, /#{gravatar_url}.*/).to_return(status: 404) + + perform_enqueued_jobs do + 10.times do + conversation = create(:conversation, account: account, + inbox: inbox, assignee: user, + created_at: Time.zone.today) + create_list(:message, 5, message_type: 'outgoing', + account: account, inbox: inbox, + conversation: conversation, created_at: Time.zone.today + 2.hours) + create_list(:message, 2, message_type: 'incoming', + account: account, inbox: inbox, + conversation: conversation, + created_at: Time.zone.today + 3.hours) + conversation.update_labels('label_1') + conversation.label_list + conversation.save! + end + + 5.times do + conversation = create(:conversation, account: account, + inbox: inbox, assignee: user, + created_at: (Time.zone.today - 2.days)) + create_list(:message, 3, message_type: 'outgoing', + account: account, inbox: inbox, + conversation: conversation, + created_at: (Time.zone.today - 2.days)) + create_list(:message, 1, message_type: 'incoming', + account: account, inbox: inbox, + conversation: conversation, + created_at: (Time.zone.today - 2.days)) + conversation.update_labels('label_2') + conversation.label_list + conversation.save! + end + end + end + end + + context 'when report type is account' do + it 'return conversations count' do + params = { + metric: 'conversations_count', + type: :account, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s + } + + builder = described_class.new(account, params) + metrics = builder.timeseries + + expect(metrics[Time.zone.today]).to be 10 + expect(metrics[Time.zone.today - 2.days]).to be 5 + end + + it 'return incoming messages count' do + params = { + metric: 'incoming_messages_count', + type: :account, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s + } + + builder = described_class.new(account, params) + metrics = builder.timeseries + + expect(metrics[Time.zone.today]).to be 20 + expect(metrics[Time.zone.today - 2.days]).to be 5 + end + + it 'return outgoing messages count' do + params = { + metric: 'outgoing_messages_count', + type: :account, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s + } + + builder = described_class.new(account, params) + metrics = builder.timeseries + + expect(metrics[Time.zone.today]).to be 50 + expect(metrics[Time.zone.today - 2.days]).to be 15 + end + + it 'return resolutions count' do + travel_to(Time.zone.today) do + params = { + metric: 'resolutions_count', + type: :account, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s + } + + conversations = account.conversations.where('created_at < ?', 1.day.ago) + perform_enqueued_jobs do + # Resolve all 5 conversations + conversations.each(&:resolved!) + + # Reopen 1 conversation + conversations.first.open! + end + + builder = described_class.new(account, params) + metrics = builder.timeseries + + # 5 resolution events occurred (even though 1 was later reopened) + expect(metrics[Time.zone.today]).to be 5 + expect(metrics[Time.zone.today - 2.days]).to be 0 + end + end + + it 'return resolutions count with multiple resolutions of same conversation' do + travel_to(Time.zone.today) do + params = { + metric: 'resolutions_count', + type: :account, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s + } + + conversations = account.conversations.where('created_at < ?', 1.day.ago) + perform_enqueued_jobs do + # Resolve all 5 conversations (first round) + conversations.each(&:resolved!) + + # Reopen 2 conversations and resolve them again + conversations.first(2).each do |conversation| + conversation.open! + conversation.resolved! + end + end + + builder = described_class.new(account, params) + metrics = builder.timeseries + + # 7 total resolution events: 5 initial + 2 re-resolutions + expect(metrics[Time.zone.today]).to be 7 + expect(metrics[Time.zone.today - 2.days]).to be 0 + end + end + + it 'returns bot_resolutions count' do + travel_to(Time.zone.today) do + params = { + metric: 'bot_resolutions_count', + type: :account, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s + } + + create(:agent_bot_inbox, inbox: account.inboxes.first) + conversations = account.conversations.where('created_at < ?', 1.day.ago) + conversations.each do |conversation| + conversation.messages.outgoing.all.update(sender: nil) + end + + perform_enqueued_jobs do + # Resolve all 5 conversations + conversations.each(&:resolved!) + + # Reopen 1 conversation + conversations.first.open! + end + + builder = described_class.new(account, params) + metrics = builder.timeseries + summary = builder.bot_summary + + # 5 bot resolution events occurred (even though 1 was later reopened) + expect(metrics[Time.zone.today]).to be 5 + expect(metrics[Time.zone.today - 2.days]).to be 0 + expect(summary[:bot_resolutions_count]).to be 5 + end + end + + it 'return bot_handoff count' do + travel_to(Time.zone.today) do + params = { + metric: 'bot_handoffs_count', + type: :account, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s + } + + create(:agent_bot_inbox, inbox: account.inboxes.first) + conversations = account.conversations.where('created_at < ?', 1.day.ago) + conversations.each do |conversation| + conversation.pending! + conversation.messages.outgoing.all.update(sender: nil) + end + + perform_enqueued_jobs do + # Resolve all 5 conversations + conversations.each(&:bot_handoff!) + + # Reopen 1 conversation + conversations.first.open! + end + + builder = described_class.new(account, params) + metrics = builder.timeseries + summary = builder.bot_summary + + # 4 conversations are resolved + expect(metrics[Time.zone.today]).to be 5 + expect(metrics[Time.zone.today - 2.days]).to be 0 + expect(summary[:bot_handoffs_count]).to be 5 + end + end + + it 'returns average first response time' do + params = { + metric: 'avg_first_response_time', + type: :account, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s + } + + builder = described_class.new(account, params) + metrics = builder.timeseries + + expect(metrics[Time.zone.today].to_f).to be 0.48e4 + end + + it 'returns summary' do + params = { + type: :account, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s + } + + builder = described_class.new(account, params) + metrics = builder.summary + + expect(metrics[:conversations_count]).to be 15 + expect(metrics[:incoming_messages_count]).to be 25 + expect(metrics[:outgoing_messages_count]).to be 65 + expect(metrics[:avg_resolution_time]).to be 0 + expect(metrics[:resolutions_count]).to be 0 + end + + it 'returns argument error for incorrect group by' do + params = { + type: :account, + metric: 'avg_first_response_time', + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s, + group_by: 'test'.to_s + } + + builder = described_class.new(account, params) + expect { builder.timeseries }.to raise_error(ArgumentError) + end + + it 'logs error when metric is nil' do + params = { + metric: nil, # Set metric to nil to test this case + type: :account, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s + } + + builder = described_class.new(account, params) + + expect(Rails.logger).to receive(:error).with('ReportBuilder: Invalid metric - ') + builder.timeseries + end + + it 'calls the appropriate metric method for a valid metric' do + params = { + metric: 'not_conversation_count', # Provide a invalid metric + type: :account, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s + } + + builder = described_class.new(account, params) + expect(Rails.logger).to receive(:error).with('ReportBuilder: Invalid metric - not_conversation_count') + + builder.timeseries + end + end + + context 'when report type is label' do + it 'return conversations count' do + params = { + metric: 'conversations_count', + type: :label, + id: label_2.id, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s + } + + builder = described_class.new(account, params) + metrics = builder.timeseries + + expect(metrics[Time.zone.today - 2.days]).to be 5 + end + + it 'return incoming messages count' do + params = { + metric: 'incoming_messages_count', + type: :label, + id: label_1.id, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: (Time.zone.today + 1.day).to_time.to_i.to_s + } + + builder = described_class.new(account, params) + metrics = builder.timeseries + + expect(metrics[Time.zone.today]).to be 20 + expect(metrics[Time.zone.today - 2.days]).to be 0 + end + + it 'return outgoing messages count' do + params = { + metric: 'outgoing_messages_count', + type: :label, + id: label_1.id, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: (Time.zone.today + 1.day).to_time.to_i.to_s + } + + builder = described_class.new(account, params) + metrics = builder.timeseries + + expect(metrics[Time.zone.today]).to be 50 + expect(metrics[Time.zone.today - 2.days]).to be 0 + end + + it 'return resolutions count' do + travel_to(Time.zone.today) do + params = { + metric: 'resolutions_count', + type: :label, + id: label_2.id, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: (Time.zone.today + 1.day).to_time.to_i.to_s + } + + conversations = account.conversations.where('created_at < ?', 1.day.ago) + + perform_enqueued_jobs do + # ensure 5 reporting events are created + conversations.each(&:resolved!) + + # open one of the conversations to check if it is not counted + conversations.last.open! + end + + builder = described_class.new(account, params) + metrics = builder.timeseries + + # this should count all 5 resolution events (even though 1 was later reopened) + expect(metrics[Time.zone.today]).to be 5 + expect(metrics[Time.zone.today - 2.days]).to be 0 + end + end + + it 'return resolutions count with multiple resolutions of same conversation' do + travel_to(Time.zone.today) do + params = { + metric: 'resolutions_count', + type: :label, + id: label_2.id, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: (Time.zone.today + 1.day).to_time.to_i.to_s + } + + conversations = account.conversations.where('created_at < ?', 1.day.ago) + + perform_enqueued_jobs do + # Resolve all 5 conversations (first round) + conversations.each(&:resolved!) + + # Reopen 3 conversations and resolve them again + conversations.first(3).each do |conversation| + conversation.open! + conversation.resolved! + end + end + + builder = described_class.new(account, params) + metrics = builder.timeseries + + # 8 total resolution events: 5 initial + 3 re-resolutions + expect(metrics[Time.zone.today]).to be 8 + expect(metrics[Time.zone.today - 2.days]).to be 0 + end + end + + it 'returns average first response time' do + label_2.reporting_events.update(value: 1.5) + + params = { + metric: 'avg_first_response_time', + type: :label, + id: label_2.id, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s + } + + builder = described_class.new(account, params) + metrics = builder.timeseries + expect(metrics[Time.zone.today].to_f).to be 0.15e1 + end + + it 'returns summary' do + params = { + type: :label, + id: label_2.id, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s + } + + builder = described_class.new(account, params) + metrics = builder.summary + + expect(metrics[:conversations_count]).to be 5 + expect(metrics[:incoming_messages_count]).to be 5 + expect(metrics[:outgoing_messages_count]).to be 15 + expect(metrics[:avg_resolution_time]).to be 0 + expect(metrics[:resolutions_count]).to be 0 + end + + it 'returns summary for correct group by' do + params = { + type: :label, + id: label_2.id, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s, + group_by: 'week'.to_s + } + + builder = described_class.new(account, params) + metrics = builder.summary + + expect(metrics[:conversations_count]).to be 5 + expect(metrics[:incoming_messages_count]).to be 5 + expect(metrics[:outgoing_messages_count]).to be 15 + expect(metrics[:avg_resolution_time]).to be 0 + expect(metrics[:resolutions_count]).to be 0 + end + + it 'returns argument error for incorrect group by' do + params = { + metric: 'avg_first_response_time', + type: :label, + id: label_2.id, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s, + group_by: 'test'.to_s + } + + builder = described_class.new(account, params) + expect { builder.timeseries }.to raise_error(ArgumentError) + end + end + end +end diff --git a/spec/builders/v2/reports/agent_summary_builder_spec.rb b/spec/builders/v2/reports/agent_summary_builder_spec.rb new file mode 100644 index 0000000..e550d97 --- /dev/null +++ b/spec/builders/v2/reports/agent_summary_builder_spec.rb @@ -0,0 +1,143 @@ +require 'rails_helper' + +RSpec.describe V2::Reports::AgentSummaryBuilder do + let(:account) { create(:account) } + let(:user1) { create(:user, account: account, role: :agent) } + let(:user2) { create(:user, account: account, role: :agent) } + + let(:params) do + { + business_hours: business_hours, + since: 1.week.ago.beginning_of_day, + until: Time.current.end_of_day + } + end + let(:builder) { described_class.new(account: account, params: params) } + + describe '#build' do + context 'when there is team data' do + before do + c1 = create(:conversation, account: account, assignee: user1, created_at: Time.current) + c2 = create(:conversation, account: account, assignee: user2, created_at: Time.current) + create( + :reporting_event, + account: account, + conversation: c2, + user: user2, + name: 'conversation_resolved', + value: 50, + value_in_business_hours: 40, + created_at: Time.current + ) + create( + :reporting_event, + account: account, + conversation: c1, + user: user1, + name: 'first_response', + value: 20, + value_in_business_hours: 10, + created_at: Time.current + ) + create( + :reporting_event, + account: account, + conversation: c1, + user: user1, + name: 'reply_time', + value: 30, + value_in_business_hours: 15, + created_at: Time.current + ) + create( + :reporting_event, + account: account, + conversation: c1, + user: user1, + name: 'reply_time', + value: 40, + value_in_business_hours: 25, + created_at: Time.current + ) + end + + context 'when business hours is disabled' do + let(:business_hours) { false } + + it 'returns the correct team stats' do + report = builder.build + + expect(report).to eq( + [ + { + id: user1.id, + conversations_count: 1, + resolved_conversations_count: 0, + avg_resolution_time: nil, + avg_first_response_time: 20.0, + avg_reply_time: 35.0 + }, + { + id: user2.id, + conversations_count: 1, + resolved_conversations_count: 1, + avg_resolution_time: 50.0, + avg_first_response_time: nil, + avg_reply_time: nil + } + ] + ) + end + end + + context 'when business hours is enabled' do + let(:business_hours) { true } + + it 'uses business hours values' do + report = builder.build + + expect(report).to eq( + [ + { + id: user1.id, + conversations_count: 1, + resolved_conversations_count: 0, + avg_resolution_time: nil, + avg_first_response_time: 10.0, + avg_reply_time: 20.0 + }, + { + id: user2.id, + conversations_count: 1, + resolved_conversations_count: 1, + avg_resolution_time: 40.0, + avg_first_response_time: nil, + avg_reply_time: nil + } + ] + ) + end + end + end + + context 'when there is no team data' do + let!(:new_user) { create(:user, account: account, role: :agent) } + let(:business_hours) { false } + + it 'returns zero values' do + report = builder.build + + expect(report).to include( + { + id: new_user.id, + conversations_count: 0, + resolved_conversations_count: 0, + avg_resolution_time: nil, + avg_first_response_time: nil, + avg_reply_time: nil + } + ) + end + end + end +end diff --git a/spec/builders/v2/reports/bot_metrics_builder_spec.rb b/spec/builders/v2/reports/bot_metrics_builder_spec.rb new file mode 100644 index 0000000..53e52d5 --- /dev/null +++ b/spec/builders/v2/reports/bot_metrics_builder_spec.rb @@ -0,0 +1,44 @@ +require 'rails_helper' + +RSpec.describe V2::Reports::BotMetricsBuilder do + subject(:bot_metrics_builder) { described_class.new(inbox.account, params) } + + let(:inbox) { create(:inbox) } + let!(:resolved_conversation) { create(:conversation, account: inbox.account, inbox: inbox, created_at: 2.days.ago) } + let!(:unresolved_conversation) { create(:conversation, account: inbox.account, inbox: inbox, created_at: 2.days.ago) } + let(:since) { 1.week.ago.to_i.to_s } + let(:until_time) { Time.now.to_i.to_s } + let(:params) { { since: since, until: until_time } } + + before do + create(:agent_bot_inbox, inbox: inbox) + create(:message, account: inbox.account, conversation: resolved_conversation, created_at: 2.days.ago, message_type: 'outgoing') + create(:reporting_event, account_id: inbox.account.id, name: 'conversation_bot_resolved', conversation_id: resolved_conversation.id, + created_at: 2.days.ago) + create(:reporting_event, account_id: inbox.account.id, name: 'conversation_bot_handoff', + conversation_id: resolved_conversation.id, created_at: 2.days.ago) + create(:reporting_event, account_id: inbox.account.id, name: 'conversation_bot_handoff', + conversation_id: unresolved_conversation.id, created_at: 2.days.ago) + end + + describe '#metrics' do + context 'with valid params' do + it 'returns correct metrics' do + metrics = bot_metrics_builder.metrics + + expect(metrics[:conversation_count]).to eq(2) + expect(metrics[:message_count]).to eq(1) + expect(metrics[:resolution_rate]).to eq(50) + expect(metrics[:handoff_rate]).to eq(100) + end + end + + context 'with missing params' do + let(:params) { {} } + + it 'handles missing since and until params gracefully' do + expect { bot_metrics_builder.metrics }.not_to raise_error + end + end + end +end diff --git a/spec/builders/v2/reports/channel_summary_builder_spec.rb b/spec/builders/v2/reports/channel_summary_builder_spec.rb new file mode 100644 index 0000000..4111282 --- /dev/null +++ b/spec/builders/v2/reports/channel_summary_builder_spec.rb @@ -0,0 +1,92 @@ +require 'rails_helper' + +RSpec.describe V2::Reports::ChannelSummaryBuilder do + let!(:account) { create(:account) } + let!(:web_widget_inbox) { create(:inbox, account: account) } + let!(:email_inbox) { create(:inbox, :with_email, account: account) } + let(:params) do + { + since: 1.week.ago.beginning_of_day, + until: Time.current.end_of_day + } + end + let(:builder) { described_class.new(account: account, params: params) } + + describe '#build' do + subject(:report) { builder.build } + + context 'when there are conversations with different statuses across channels' do + before do + # Web widget conversations + create(:conversation, account: account, inbox: web_widget_inbox, status: :open, created_at: 2.days.ago) + create(:conversation, account: account, inbox: web_widget_inbox, status: :open, created_at: 3.days.ago) + create(:conversation, account: account, inbox: web_widget_inbox, status: :resolved, created_at: 2.days.ago) + create(:conversation, account: account, inbox: web_widget_inbox, status: :pending, created_at: 1.day.ago) + create(:conversation, account: account, inbox: web_widget_inbox, status: :snoozed, created_at: 1.day.ago) + + # Email conversations + create(:conversation, account: account, inbox: email_inbox, status: :open, created_at: 2.days.ago) + create(:conversation, account: account, inbox: email_inbox, status: :resolved, created_at: 1.day.ago) + create(:conversation, account: account, inbox: email_inbox, status: :resolved, created_at: 3.days.ago) + end + + it 'returns correct counts grouped by channel type' do + expect(report['Channel::WebWidget']).to eq( + open: 2, + resolved: 1, + pending: 1, + snoozed: 1, + total: 5 + ) + + expect(report['Channel::Email']).to eq( + open: 1, + resolved: 2, + pending: 0, + snoozed: 0, + total: 3 + ) + end + end + + context 'when conversations are outside the date range' do + before do + create(:conversation, account: account, inbox: web_widget_inbox, status: :open, created_at: 2.days.ago) + create(:conversation, account: account, inbox: web_widget_inbox, status: :resolved, created_at: 2.weeks.ago) + end + + it 'only includes conversations within the date range' do + expect(report['Channel::WebWidget']).to eq( + open: 1, + resolved: 0, + pending: 0, + snoozed: 0, + total: 1 + ) + end + end + + context 'when there are no conversations' do + it 'returns an empty hash' do + expect(report).to eq({}) + end + end + + context 'when a channel has only one status type' do + before do + create(:conversation, account: account, inbox: web_widget_inbox, status: :resolved, created_at: 1.day.ago) + create(:conversation, account: account, inbox: web_widget_inbox, status: :resolved, created_at: 2.days.ago) + end + + it 'returns zeros for other statuses' do + expect(report['Channel::WebWidget']).to eq( + open: 0, + resolved: 2, + pending: 0, + snoozed: 0, + total: 2 + ) + end + end + end +end diff --git a/spec/builders/v2/reports/conversations/metric_builder_spec.rb b/spec/builders/v2/reports/conversations/metric_builder_spec.rb new file mode 100644 index 0000000..1b0ed7a --- /dev/null +++ b/spec/builders/v2/reports/conversations/metric_builder_spec.rb @@ -0,0 +1,50 @@ +require 'rails_helper' + +RSpec.describe V2::Reports::Conversations::MetricBuilder, type: :model do + subject { described_class.new(account, params) } + + let(:account) { create(:account) } + let(:params) { { since: '2023-01-01', until: '2024-01-01' } } + let(:count_builder_instance) { instance_double(V2::Reports::Timeseries::CountReportBuilder, aggregate_value: 42) } + let(:avg_builder_instance) { instance_double(V2::Reports::Timeseries::AverageReportBuilder, aggregate_value: 42) } + + before do + allow(V2::Reports::Timeseries::CountReportBuilder).to receive(:new).and_return(count_builder_instance) + allow(V2::Reports::Timeseries::AverageReportBuilder).to receive(:new).and_return(avg_builder_instance) + end + + describe '#summary' do + it 'returns the correct summary values' do + summary = subject.summary + expect(summary).to eq( + { + conversations_count: 42, + incoming_messages_count: 42, + outgoing_messages_count: 42, + avg_first_response_time: 42, + avg_resolution_time: 42, + resolutions_count: 42, + reply_time: 42 + } + ) + end + + it 'creates builders with proper params' do + subject.summary + expect(V2::Reports::Timeseries::CountReportBuilder).to have_received(:new).with(account, params.merge(metric: 'conversations_count')) + expect(V2::Reports::Timeseries::AverageReportBuilder).to have_received(:new).with(account, params.merge(metric: 'avg_first_response_time')) + end + end + + describe '#bot_summary' do + it 'returns a detailed summary of bot-specific conversation metrics' do + bot_summary = subject.bot_summary + expect(bot_summary).to eq( + { + bot_resolutions_count: 42, + bot_handoffs_count: 42 + } + ) + end + end +end diff --git a/spec/builders/v2/reports/conversations/report_builder_spec.rb b/spec/builders/v2/reports/conversations/report_builder_spec.rb new file mode 100644 index 0000000..db7a0ac --- /dev/null +++ b/spec/builders/v2/reports/conversations/report_builder_spec.rb @@ -0,0 +1,44 @@ +require 'rails_helper' + +describe V2::Reports::Conversations::ReportBuilder do + subject { described_class.new(account, params) } + + let(:account) { create(:account) } + let(:average_builder) { V2::Reports::Timeseries::AverageReportBuilder } + let(:count_builder) { V2::Reports::Timeseries::CountReportBuilder } + + shared_examples 'valid metric handler' do |metric, method, builder| + context 'when a valid metric is given' do + let(:params) { { metric: metric } } + + it "calls the correct #{method} builder for #{metric}" do + builder_instance = instance_double(builder) + allow(builder).to receive(:new).and_return(builder_instance) + allow(builder_instance).to receive(method) + + builder_instance.public_send(method) + expect(builder_instance).to have_received(method) + end + end + end + + context 'when invalid metric is given' do + let(:metric) { 'invalid_metric' } + let(:params) { { metric: metric } } + + it 'logs the error and returns empty value' do + expect(Rails.logger).to receive(:error).with("ReportBuilder: Invalid metric - #{metric}") + expect(subject.timeseries).to eq({}) + end + end + + describe '#timeseries' do + it_behaves_like 'valid metric handler', 'avg_first_response_time', :timeseries, V2::Reports::Timeseries::AverageReportBuilder + it_behaves_like 'valid metric handler', 'conversations_count', :timeseries, V2::Reports::Timeseries::CountReportBuilder + end + + describe '#aggregate_value' do + it_behaves_like 'valid metric handler', 'avg_first_response_time', :aggregate_value, V2::Reports::Timeseries::AverageReportBuilder + it_behaves_like 'valid metric handler', 'conversations_count', :aggregate_value, V2::Reports::Timeseries::CountReportBuilder + end +end diff --git a/spec/builders/v2/reports/inbox_summary_builder_spec.rb b/spec/builders/v2/reports/inbox_summary_builder_spec.rb new file mode 100644 index 0000000..625721e --- /dev/null +++ b/spec/builders/v2/reports/inbox_summary_builder_spec.rb @@ -0,0 +1,93 @@ +require 'rails_helper' + +RSpec.describe V2::Reports::InboxSummaryBuilder do + let(:account) { create(:account) } + let(:i1) { create(:inbox, account: account) } + let(:i2) { create(:inbox, account: account) } + let(:params) do + { + business_hours: business_hours, + since: 1.week.ago.beginning_of_day, + until: Time.current.end_of_day + } + end + let(:builder) { described_class.new(account: account, params: params) } + + before do + c1 = create(:conversation, account: account, inbox: i1, created_at: 2.days.ago) + c2 = create(:conversation, account: account, inbox: i2, created_at: 1.day.ago) + c2.resolved! + create(:reporting_event, account: account, conversation: c2, inbox: i2, name: 'conversation_resolved', value: 100, value_in_business_hours: 60, + created_at: 1.day.ago) + create(:reporting_event, account: account, conversation: c1, inbox: i1, name: 'first_response', value: 50, value_in_business_hours: 30, + created_at: 1.day.ago) + create(:reporting_event, account: account, conversation: c1, inbox: i1, name: 'reply_time', value: 30, value_in_business_hours: 10, + created_at: 1.day.ago) + create(:reporting_event, account: account, conversation: c1, inbox: i1, name: 'reply_time', value: 40, value_in_business_hours: 20, + created_at: 1.day.ago) + end + + describe '#build' do + subject(:report) { builder.build } + + context 'when business hours is disabled' do + let(:business_hours) { false } + + it 'includes correct stats for each inbox' do + expect(report).to contain_exactly({ + id: i1.id, + conversations_count: 1, + resolved_conversations_count: 0, + avg_resolution_time: nil, + avg_first_response_time: 50.0, + avg_reply_time: 35.0 + }, { + id: i2.id, + conversations_count: 1, + resolved_conversations_count: 1, + avg_resolution_time: 100.0, + avg_first_response_time: nil, + avg_reply_time: nil + }) + end + end + + context 'when business hours is enabled' do + let(:business_hours) { true } + + it 'uses business hours values for calculations' do + expect(report).to contain_exactly({ + id: i1.id, + conversations_count: 1, + resolved_conversations_count: 0, + avg_resolution_time: nil, + avg_first_response_time: 30.0, + avg_reply_time: 15.0 + }, { + id: i2.id, + conversations_count: 1, + resolved_conversations_count: 1, + avg_resolution_time: 60.0, + avg_first_response_time: nil, + avg_reply_time: nil + }) + end + end + + context 'when there is no data for an inbox' do + let!(:empty_inbox) { create(:inbox, account: account) } + let(:business_hours) { false } + + it 'returns nil values for metrics' do + expect(report).to include( + id: empty_inbox.id, + conversations_count: 0, + resolved_conversations_count: 0, + avg_resolution_time: nil, + avg_first_response_time: nil, + avg_reply_time: nil + ) + end + end + end +end diff --git a/spec/builders/v2/reports/label_summary_builder_spec.rb b/spec/builders/v2/reports/label_summary_builder_spec.rb new file mode 100644 index 0000000..f0eb6ce --- /dev/null +++ b/spec/builders/v2/reports/label_summary_builder_spec.rb @@ -0,0 +1,373 @@ +require 'rails_helper' + +RSpec.describe V2::Reports::LabelSummaryBuilder do + include ActiveJob::TestHelper + + let_it_be(:account) { create(:account) } + let_it_be(:label_1) { create(:label, title: 'label_1', account: account) } + let_it_be(:label_2) { create(:label, title: 'label_2', account: account) } + let_it_be(:label_3) { create(:label, title: 'label_3', account: account) } + + let(:params) do + { + business_hours: business_hours, + since: (Time.zone.today - 3.days).to_time.to_i.to_s, + until: Time.zone.today.end_of_day.to_time.to_i.to_s, + timezone_offset: 0 + } + end + let(:builder) { described_class.new(account: account, params: params) } + + describe '#initialize' do + let(:business_hours) { false } + + it 'sets account and params' do + expect(builder.account).to eq(account) + expect(builder.params).to eq(params) + end + + it 'sets timezone from timezone_offset' do + builder_with_offset = described_class.new(account: account, params: { timezone_offset: -8 }) + expect(builder_with_offset.instance_variable_get(:@timezone)).to eq('Pacific Time (US & Canada)') + end + + it 'defaults timezone when timezone_offset is not provided' do + builder_without_offset = described_class.new(account: account, params: {}) + expect(builder_without_offset.instance_variable_get(:@timezone)).not_to be_nil + end + end + + describe '#build' do + context 'when there are no labels' do + let(:business_hours) { false } + let(:empty_account) { create(:account) } + let(:empty_builder) { described_class.new(account: empty_account, params: params) } + + it 'returns empty array' do + expect(empty_builder.build).to eq([]) + end + end + + context 'when there are labels but no conversations' do + let(:business_hours) { false } + + it 'returns zero values for all labels' do + report = builder.build + + expect(report.length).to eq(3) + + bug_report = report.find { |r| r[:name] == 'label_1' } + feature_request = report.find { |r| r[:name] == 'label_2' } + customer_support = report.find { |r| r[:name] == 'label_3' } + + [ + [bug_report, label_1, 'label_1'], + [feature_request, label_2, 'label_2'], + [customer_support, label_3, 'label_3'] + ].each do |report_data, label, label_name| + expect(report_data).to include( + id: label.id, + name: label_name, + conversations_count: 0, + avg_resolution_time: 0, + avg_first_response_time: 0, + avg_reply_time: 0, + resolved_conversations_count: 0 + ) + end + end + end + + context 'when there are labeled conversations with metrics' do + before do + travel_to(Time.zone.today) do + user = create(:user, account: account) + inbox = create(:inbox, account: account) + create(:inbox_member, user: user, inbox: inbox) + + gravatar_url = 'https://www.gravatar.com' + stub_request(:get, /#{gravatar_url}.*/).to_return(status: 404) + + perform_enqueued_jobs do + # Create conversations with label_1 + 3.times do + conversation = create(:conversation, account: account, + inbox: inbox, assignee: user, + created_at: Time.zone.today) + create_list(:message, 2, message_type: 'outgoing', + account: account, inbox: inbox, + conversation: conversation, + created_at: Time.zone.today + 1.hour) + create_list(:message, 1, message_type: 'incoming', + account: account, inbox: inbox, + conversation: conversation, + created_at: Time.zone.today + 2.hours) + conversation.update_labels('label_1') + conversation.label_list + conversation.save! + end + + # Create conversations with label_2 + 2.times do + conversation = create(:conversation, account: account, + inbox: inbox, assignee: user, + created_at: Time.zone.today) + create_list(:message, 1, message_type: 'outgoing', + account: account, inbox: inbox, + conversation: conversation, + created_at: Time.zone.today + 1.hour) + conversation.update_labels('label_2') + conversation.label_list + conversation.save! + end + + # Resolve some conversations + conversations_to_resolve = account.conversations.first(2) + conversations_to_resolve.each(&:toggle_status) + + # Create some reporting events + account.conversations.reload.each_with_index do |conv, idx| + # First response times + create(:reporting_event, + account: account, + conversation: conv, + name: 'first_response', + value: (30 + (idx * 10)) * 60, + value_in_business_hours: (20 + (idx * 5)) * 60, + created_at: Time.zone.today) + + # Reply times + create(:reporting_event, + account: account, + conversation: conv, + name: 'reply_time', + value: (15 + (idx * 5)) * 60, + value_in_business_hours: (10 + (idx * 3)) * 60, + created_at: Time.zone.today) + + # Resolution times for resolved conversations + next unless conv.resolved? + + create(:reporting_event, + account: account, + conversation: conv, + name: 'conversation_resolved', + value: (60 + (idx * 30)) * 60, + value_in_business_hours: (45 + (idx * 20)) * 60, + created_at: Time.zone.today) + end + end + end + end + + context 'when business hours is disabled' do + let(:business_hours) { false } + + it 'returns correct label stats using regular values' do + report = builder.build + + expect(report.length).to eq(3) + + label_1_report = report.find { |r| r[:name] == 'label_1' } + label_2_report = report.find { |r| r[:name] == 'label_2' } + label_3_report = report.find { |r| r[:name] == 'label_3' } + + expect(label_1_report).to include( + conversations_count: 3, + avg_first_response_time: be > 0, + avg_reply_time: be > 0 + ) + + expect(label_2_report).to include( + conversations_count: 2, + avg_first_response_time: be > 0, + avg_reply_time: be > 0 + ) + + expect(label_3_report).to include( + conversations_count: 0, + avg_first_response_time: 0, + avg_reply_time: 0 + ) + end + end + + context 'when business hours is enabled' do + let(:business_hours) { true } + + it 'returns correct label stats using business hours values' do + report = builder.build + + expect(report.length).to eq(3) + + label_1_report = report.find { |r| r[:name] == 'label_1' } + label_2_report = report.find { |r| r[:name] == 'label_2' } + + expect(label_1_report[:conversations_count]).to eq(3) + expect(label_1_report[:avg_first_response_time]).to be > 0 + expect(label_1_report[:avg_reply_time]).to be > 0 + + expect(label_2_report[:conversations_count]).to eq(2) + expect(label_2_report[:avg_first_response_time]).to be > 0 + expect(label_2_report[:avg_reply_time]).to be > 0 + end + end + end + + context 'when filtering by date range' do + let(:business_hours) { false } + + before do + travel_to(Time.zone.today) do + user = create(:user, account: account) + inbox = create(:inbox, account: account) + create(:inbox_member, user: user, inbox: inbox) + + gravatar_url = 'https://www.gravatar.com' + stub_request(:get, /#{gravatar_url}.*/).to_return(status: 404) + + perform_enqueued_jobs do + # Conversation within range + conversation_in_range = create(:conversation, account: account, + inbox: inbox, assignee: user, + created_at: 2.days.ago) + conversation_in_range.update_labels('label_1') + conversation_in_range.label_list + conversation_in_range.save! + + create(:reporting_event, + account: account, + conversation: conversation_in_range, + name: 'first_response', + value: 1800, + created_at: 2.days.ago) + + # Conversation outside range (too old) + conversation_out_of_range = create(:conversation, account: account, + inbox: inbox, assignee: user, + created_at: 1.week.ago) + conversation_out_of_range.update_labels('label_1') + conversation_out_of_range.label_list + conversation_out_of_range.save! + + create(:reporting_event, + account: account, + conversation: conversation_out_of_range, + name: 'first_response', + value: 3600, + created_at: 1.week.ago) + end + end + end + + it 'only includes conversations within the date range' do + report = builder.build + + expect(report.length).to eq(3) + + label_1_report = report.find { |r| r[:name] == 'label_1' } + expect(label_1_report).not_to be_nil + expect(label_1_report[:conversations_count]).to eq(1) + expect(label_1_report[:avg_first_response_time]).to eq(1800.0) + end + end + + context 'with business hours parameter' do + let(:business_hours) { 'true' } + + before do + travel_to(Time.zone.today) do + user = create(:user, account: account) + inbox = create(:inbox, account: account) + create(:inbox_member, user: user, inbox: inbox) + + gravatar_url = 'https://www.gravatar.com' + stub_request(:get, /#{gravatar_url}.*/).to_return(status: 404) + + perform_enqueued_jobs do + conversation = create(:conversation, account: account, + inbox: inbox, assignee: user, + created_at: Time.zone.today) + conversation.update_labels('label_1') + conversation.label_list + conversation.save! + + create(:reporting_event, + account: account, + conversation: conversation, + name: 'first_response', + value: 3600, + value_in_business_hours: 1800, + created_at: Time.zone.today) + end + end + end + + it 'properly casts string "true" to boolean and uses business hours values' do + report = builder.build + + expect(report.length).to eq(3) + + label_1_report = report.find { |r| r[:name] == 'label_1' } + expect(label_1_report).not_to be_nil + expect(label_1_report[:avg_first_response_time]).to eq(1800.0) + end + end + + context 'with resolution count with multiple resolutions of same conversation' do + let(:business_hours) { false } + let(:account2) { create(:account) } + let(:unique_label_name) { SecureRandom.uuid } + let(:test_label) { create(:label, title: unique_label_name, account: account2) } + let(:test_date) { Date.new(2025, 6, 15) } + let(:account2_builder) do + described_class.new(account: account2, params: { + business_hours: false, + since: test_date.to_time.to_i.to_s, + until: test_date.end_of_day.to_time.to_i.to_s, + timezone_offset: 0 + }) + end + + before do + # Ensure test_label is created + test_label + + travel_to(test_date) do + user = create(:user, account: account2) + inbox = create(:inbox, account: account2) + create(:inbox_member, user: user, inbox: inbox) + + gravatar_url = 'https://www.gravatar.com' + stub_request(:get, /#{gravatar_url}.*/).to_return(status: 404) + + perform_enqueued_jobs do + conversation = create(:conversation, account: account2, + inbox: inbox, assignee: user, + created_at: test_date) + conversation.update_labels(unique_label_name) + conversation.label_list + conversation.save! + + # First resolution + conversation.resolved! + + # Reopen conversation + conversation.open! + + # Second resolution + conversation.resolved! + end + end + end + + it 'counts multiple resolution events for same conversation' do + report = account2_builder.build + + test_label_report = report.find { |r| r[:name] == unique_label_name } + expect(test_label_report).not_to be_nil + expect(test_label_report[:resolved_conversations_count]).to eq(2) + end + end + end +end diff --git a/spec/builders/v2/reports/team_summary_builder_spec.rb b/spec/builders/v2/reports/team_summary_builder_spec.rb new file mode 100644 index 0000000..0ce2377 --- /dev/null +++ b/spec/builders/v2/reports/team_summary_builder_spec.rb @@ -0,0 +1,138 @@ +require 'rails_helper' + +RSpec.describe V2::Reports::TeamSummaryBuilder do + let(:account) { create(:account) } + let(:team1) { create(:team, account: account, name: 'team-1') } + let(:team2) { create(:team, account: account, name: 'team-2') } + let(:params) do + { + business_hours: business_hours, + since: 1.week.ago.beginning_of_day, + until: Time.current.end_of_day + } + end + let(:builder) { described_class.new(account: account, params: params) } + + describe '#build' do + context 'when there is team data' do + before do + c1 = create(:conversation, account: account, team: team1, created_at: Time.current) + c2 = create(:conversation, account: account, team: team2, created_at: Time.current) + create( + :reporting_event, + account: account, + conversation: c2, + name: 'conversation_resolved', + value: 50, + value_in_business_hours: 40, + created_at: Time.current + ) + create( + :reporting_event, + account: account, + conversation: c1, + name: 'first_response', + value: 20, + value_in_business_hours: 10, + created_at: Time.current + ) + create( + :reporting_event, + account: account, + conversation: c1, + name: 'reply_time', + value: 30, + value_in_business_hours: 15, + created_at: Time.current + ) + create( + :reporting_event, + account: account, + conversation: c1, + name: 'reply_time', + value: 40, + value_in_business_hours: 25, + created_at: Time.current + ) + end + + context 'when business hours is disabled' do + let(:business_hours) { false } + + it 'returns the correct team stats' do + report = builder.build + + expect(report).to eq( + [ + { + id: team1.id, + conversations_count: 1, + resolved_conversations_count: 0, + avg_resolution_time: nil, + avg_first_response_time: 20.0, + avg_reply_time: 35.0 + }, + { + id: team2.id, + conversations_count: 1, + resolved_conversations_count: 1, + avg_resolution_time: 50.0, + avg_first_response_time: nil, + avg_reply_time: nil + } + ] + ) + end + end + + context 'when business hours is enabled' do + let(:business_hours) { true } + + it 'uses business hours values' do + report = builder.build + + expect(report).to eq( + [ + { + id: team1.id, + conversations_count: 1, + resolved_conversations_count: 0, + avg_resolution_time: nil, + avg_first_response_time: 10.0, + avg_reply_time: 20.0 + }, + { + id: team2.id, + conversations_count: 1, + resolved_conversations_count: 1, + avg_resolution_time: 40.0, + avg_first_response_time: nil, + avg_reply_time: nil + } + ] + ) + end + end + end + + context 'when there is no team data' do + let!(:new_team) { create(:team, account: account) } + let(:business_hours) { false } + + it 'returns zero values' do + report = builder.build + + expect(report).to include( + { + id: new_team.id, + conversations_count: 0, + resolved_conversations_count: 0, + avg_resolution_time: nil, + avg_first_response_time: nil, + avg_reply_time: nil + } + ) + end + end + end +end diff --git a/spec/builders/v2/reports/timeseries/average_report_builder_spec.rb b/spec/builders/v2/reports/timeseries/average_report_builder_spec.rb new file mode 100644 index 0000000..4f6036f --- /dev/null +++ b/spec/builders/v2/reports/timeseries/average_report_builder_spec.rb @@ -0,0 +1,174 @@ +require 'rails_helper' + +describe V2::Reports::Timeseries::AverageReportBuilder do + subject { described_class.new(account, params) } + + let(:account) { create(:account) } + let(:team) { create(:team, account: account) } + let(:inbox) { create(:inbox, account: account) } + let(:label) { create(:label, title: 'spec-billing', account: account) } + let!(:conversation) { create(:conversation, account: account, inbox: inbox, team: team) } + let(:current_time) { '26.10.2020 10:00'.to_datetime } + + let(:params) do + { + type: filter_type, + business_hours: business_hours, + timezone_offset: timezone_offset, + group_by: group_by, + metric: metric, + since: (current_time - 1.week).beginning_of_day.to_i.to_s, + until: current_time.end_of_day.to_i.to_s, + id: filter_id + } + end + let(:timezone_offset) { nil } + let(:group_by) { 'day' } + let(:metric) { 'avg_first_response_time' } + let(:business_hours) { false } + let(:filter_type) { :account } + let(:filter_id) { '' } + + before do + travel_to current_time + conversation.label_list.add(label.title) + conversation.save! + create(:reporting_event, name: 'first_response', value: 80, value_in_business_hours: 10, account: account, created_at: Time.zone.now, + conversation: conversation, inbox: inbox) + create(:reporting_event, name: 'first_response', value: 100, value_in_business_hours: 20, account: account, created_at: 1.hour.ago) + create(:reporting_event, name: 'first_response', value: 93, value_in_business_hours: 30, account: account, created_at: 1.week.ago) + end + + describe '#timeseries' do + context 'when there is no filter applied' do + it 'returns the correct values' do + timeseries_values = subject.timeseries + + expect(timeseries_values).to eq( + [ + { count: 1, timestamp: 1_603_065_600, value: 93.0 }, + { count: 0, timestamp: 1_603_152_000, value: 0 }, + { count: 0, timestamp: 1_603_238_400, value: 0 }, + { count: 0, timestamp: 1_603_324_800, value: 0 }, + { count: 0, timestamp: 1_603_411_200, value: 0 }, + { count: 0, timestamp: 1_603_497_600, value: 0 }, + { count: 0, timestamp: 1_603_584_000, value: 0 }, + { count: 2, timestamp: 1_603_670_400, value: 90.0 } + ] + ) + end + + context 'when business hours is provided' do + let(:business_hours) { true } + + it 'returns correct timeseries' do + timeseries_values = subject.timeseries + + expect(timeseries_values).to eq( + [ + { count: 1, timestamp: 1_603_065_600, value: 30.0 }, + { count: 0, timestamp: 1_603_152_000, value: 0 }, + { count: 0, timestamp: 1_603_238_400, value: 0 }, + { count: 0, timestamp: 1_603_324_800, value: 0 }, + { count: 0, timestamp: 1_603_411_200, value: 0 }, + { count: 0, timestamp: 1_603_497_600, value: 0 }, + { count: 0, timestamp: 1_603_584_000, value: 0 }, + { count: 2, timestamp: 1_603_670_400, value: 15.0 } + ] + ) + end + end + + context 'when group_by is provided' do + let(:group_by) { 'week' } + + it 'returns correct timeseries' do + timeseries_values = subject.timeseries + expect(timeseries_values).to eq( + [ + { count: 1, timestamp: (current_time - 1.week).beginning_of_week(:sunday).to_i, value: 93.0 }, + { count: 2, timestamp: current_time.beginning_of_week(:sunday).to_i, value: 90.0 } + ] + ) + end + end + + context 'when timezone offset is provided' do + let(:timezone_offset) { '5.5' } + let(:group_by) { 'week' } + + it 'returns correct timeseries' do + timeseries_values = subject.timeseries + expect(timeseries_values).to eq( + [ + { count: 1, timestamp: (current_time - 1.week).in_time_zone('Chennai').beginning_of_week(:sunday).to_i, value: 93.0 }, + { count: 2, timestamp: current_time.in_time_zone('Chennai').beginning_of_week(:sunday).to_i, value: 90.0 } + ] + ) + end + end + end + + context 'when the label filter is applied' do + let(:group_by) { 'week' } + let(:filter_type) { 'label' } + let(:filter_id) { label.id } + + it 'returns correct timeseries' do + timeseries_values = subject.timeseries + start_of_the_week = current_time.beginning_of_week(:sunday).to_i + last_week_start_of_the_week = (current_time - 1.week).beginning_of_week(:sunday).to_i + expect(timeseries_values).to eq( + [ + { count: 0, timestamp: last_week_start_of_the_week, value: 0 }, + { count: 1, timestamp: start_of_the_week, value: 80.0 } + ] + ) + end + end + + context 'when the inbox filter is applied' do + let(:group_by) { 'week' } + let(:filter_type) { 'inbox' } + let(:filter_id) { inbox.id } + + it 'returns correct timeseries' do + timeseries_values = subject.timeseries + start_of_the_week = current_time.beginning_of_week(:sunday).to_i + last_week_start_of_the_week = (current_time - 1.week).beginning_of_week(:sunday).to_i + expect(timeseries_values).to eq( + [ + { count: 0, timestamp: last_week_start_of_the_week, value: 0 }, + { count: 1, timestamp: start_of_the_week, value: 80.0 } + ] + ) + end + end + + context 'when the team filter is applied' do + let(:group_by) { 'week' } + let(:filter_type) { 'team' } + let(:filter_id) { team.id } + + it 'returns correct timeseries' do + timeseries_values = subject.timeseries + start_of_the_week = current_time.beginning_of_week(:sunday).to_i + last_week_start_of_the_week = (current_time - 1.week).beginning_of_week(:sunday).to_i + expect(timeseries_values).to eq( + [ + { count: 0, timestamp: last_week_start_of_the_week, value: 0 }, + { count: 1, timestamp: start_of_the_week, value: 80.0 } + ] + ) + end + end + end + + describe '#aggregate_value' do + context 'when there is no filter applied' do + it 'returns the correct average value' do + expect(subject.aggregate_value).to eq 91.0 + end + end + end +end diff --git a/spec/builders/v2/reports/timeseries/count_report_builder_spec.rb b/spec/builders/v2/reports/timeseries/count_report_builder_spec.rb new file mode 100644 index 0000000..038bd61 --- /dev/null +++ b/spec/builders/v2/reports/timeseries/count_report_builder_spec.rb @@ -0,0 +1,113 @@ +require 'rails_helper' + +describe V2::Reports::Timeseries::CountReportBuilder do + subject { described_class.new(account, params) } + + let(:account) { create(:account) } + let(:account2) { create(:account) } + let(:user) { create(:user, email: 'agent1@example.com') } + let(:inbox) { create(:inbox, account: account) } + let(:inbox2) { create(:inbox, account: account2) } + let(:current_time) { Time.current } + + let(:params) do + { + type: 'agent', + metric: 'resolutions_count', + since: (current_time - 1.day).beginning_of_day.to_i.to_s, + until: current_time.end_of_day.to_i.to_s, + id: user.id.to_s + } + end + + before do + travel_to current_time + + # Add the same user to both accounts + create(:account_user, account: account, user: user) + create(:account_user, account: account2, user: user) + + # Create conversations in account1 + conversation1 = create(:conversation, account: account, inbox: inbox, assignee: user) + conversation2 = create(:conversation, account: account, inbox: inbox, assignee: user) + + # Create conversations in account2 + conversation3 = create(:conversation, account: account2, inbox: inbox2, assignee: user) + conversation4 = create(:conversation, account: account2, inbox: inbox2, assignee: user) + + # User resolves 2 conversations in account1 + create(:reporting_event, + name: 'conversation_resolved', + account: account, + user: user, + conversation: conversation1, + created_at: current_time - 12.hours) + + create(:reporting_event, + name: 'conversation_resolved', + account: account, + user: user, + conversation: conversation2, + created_at: current_time - 6.hours) + + # Same user resolves 3 conversations in account2 - these should NOT be counted for account1 + create(:reporting_event, + name: 'conversation_resolved', + account: account2, + user: user, + conversation: conversation3, + created_at: current_time - 8.hours) + + create(:reporting_event, + name: 'conversation_resolved', + account: account2, + user: user, + conversation: conversation4, + created_at: current_time - 4.hours) + + # Create another conversation in account2 for testing + conversation5 = create(:conversation, account: account2, inbox: inbox2, assignee: user) + create(:reporting_event, + name: 'conversation_resolved', + account: account2, + user: user, + conversation: conversation5, + created_at: current_time - 2.hours) + end + + describe '#aggregate_value' do + it 'returns only resolutions performed by the user in the specified account' do + # User should have 2 resolutions in account1, not 5 (total across both accounts) + expect(subject.aggregate_value).to eq(2) + end + + context 'when querying account2' do + subject { described_class.new(account2, params) } + + it 'returns only resolutions for account2' do + # User should have 3 resolutions in account2 + expect(subject.aggregate_value).to eq(3) + end + end + end + + describe '#timeseries' do + it 'filters resolutions by account' do + result = subject.timeseries + # Should only count the 2 resolutions from account1 + total_count = result.sum { |r| r[:value] } + expect(total_count).to eq(2) + end + end + + describe 'account isolation' do + it 'does not leak data between accounts' do + # If account isolation works correctly, the counts should be different + account1_count = described_class.new(account, params).aggregate_value + account2_count = described_class.new(account2, params).aggregate_value + + expect(account1_count).to eq(2) + expect(account2_count).to eq(3) + end + end +end diff --git a/spec/builders/year_in_review_builder_spec.rb b/spec/builders/year_in_review_builder_spec.rb new file mode 100644 index 0000000..526b684 --- /dev/null +++ b/spec/builders/year_in_review_builder_spec.rb @@ -0,0 +1,64 @@ +require 'rails_helper' + +RSpec.describe YearInReviewBuilder, type: :model do + subject(:builder) { described_class.new(account: account, user_id: user.id, year: year) } + + let(:account) { create(:account) } + let(:user) { create(:user, account: account) } + let(:year) { 2025 } + + describe '#build' do + context 'when there is no data for the year' do + it 'returns empty aggregates' do + result = builder.build + + expect(result[:year]).to eq(year) + expect(result[:total_conversations]).to eq(0) + expect(result[:busiest_day]).to be_nil + expect(result[:support_personality]).to eq({ avg_response_time_seconds: 0 }) + end + end + + context 'when there is data for the year' do + let(:busiest_date) { Time.zone.local(year, 3, 10, 10, 0, 0) } + let(:other_date) { Time.zone.local(year, 3, 11, 10, 0, 0) } + + before do + create(:conversation, account: account, assignee: user, created_at: busiest_date) + create(:conversation, account: account, assignee: user, created_at: busiest_date + 1.hour) + create(:conversation, account: account, assignee: user, created_at: other_date) + + create( + :reporting_event, + account: account, + user: user, + name: 'first_response', + value: 12.7, + created_at: busiest_date + ) + end + + it 'returns total conversations count' do + expect(builder.build[:total_conversations]).to eq(3) + end + + it 'returns busiest day data' do + expect(builder.build[:busiest_day]).to eq({ date: busiest_date.strftime('%b %d'), count: 2 }) + end + + it 'returns support personality data' do + expect(builder.build[:support_personality]).to eq({ avg_response_time_seconds: 12 }) + end + + it 'scopes data to the provided year' do + create(:conversation, account: account, assignee: user, created_at: Time.zone.local(year - 1, 6, 1)) + create(:reporting_event, account: account, user: user, name: 'first_response', value: 99, created_at: Time.zone.local(year - 1, 6, 1)) + + result = builder.build + + expect(result[:total_conversations]).to eq(3) + expect(result[:support_personality]).to eq({ avg_response_time_seconds: 12 }) + end + end + end +end diff --git a/spec/channels/room_channel_spec.rb b/spec/channels/room_channel_spec.rb new file mode 100644 index 0000000..b39725f --- /dev/null +++ b/spec/channels/room_channel_spec.rb @@ -0,0 +1,24 @@ +require 'rails_helper' + +RSpec.describe RoomChannel do + let!(:contact_inbox) { create(:contact_inbox) } + let!(:account) { create(:account) } + let!(:user) { create(:user, account: account) } + + before do + stub_connection + end + + it 'subscribes to a stream when pubsub_token is provided' do + subscribe(pubsub_token: contact_inbox.pubsub_token) + expect(subscription).to be_confirmed + expect(subscription).to have_stream_for(contact_inbox.pubsub_token) + end + + it 'subscribes to a stream when pubsub_token is provided for user' do + subscribe(user_id: user.id, pubsub_token: user.pubsub_token, account_id: account.id) + expect(subscription).to be_confirmed + expect(subscription).to have_stream_for(user.pubsub_token) + expect(subscription).to have_stream_for("account_#{account.id}") + end +end diff --git a/spec/config/markdown_embeds_spec.rb b/spec/config/markdown_embeds_spec.rb new file mode 100644 index 0000000..9e9e568 --- /dev/null +++ b/spec/config/markdown_embeds_spec.rb @@ -0,0 +1,109 @@ +require 'rails_helper' + +# rubocop:disable RSpec/DescribeClass +describe 'Markdown Embeds Configuration' do + # rubocop:enable RSpec/DescribeClass + let(:config) { YAML.load_file(Rails.root.join('config/markdown_embeds.yml')) } + + describe 'YAML structure' do + it 'loads valid YAML' do + expect(config).to be_a(Hash) + expect(config).not_to be_empty + end + + it 'has required keys for each embed type' do + config.each do |embed_type, embed_config| + expect(embed_config).to have_key('regex'), "#{embed_type} missing regex" + expect(embed_config).to have_key('template'), "#{embed_type} missing template" + expect(embed_config['regex']).to be_a(String), "#{embed_type} regex should be string" + expect(embed_config['template']).to be_a(String), "#{embed_type} template should be string" + end + end + + it 'contains expected embed types' do + expected_types = %w[youtube loom vimeo mp4 arcade_tab arcade wistia bunny codepen github_gist] + expect(config.keys).to match_array(expected_types) + end + end + + describe 'regex patterns and named capture groups' do + let(:test_cases) do + { + 'youtube' => [ + { url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', expected: { 'video_id' => 'dQw4w9WgXcQ' } }, + { url: 'https://youtu.be/dQw4w9WgXcQ', expected: { 'video_id' => 'dQw4w9WgXcQ' } }, + { url: 'https://youtube.com/watch?v=abc123XYZ', expected: { 'video_id' => 'abc123XYZ' } } + ], + 'loom' => [ + { url: 'https://www.loom.com/share/abc123def456', expected: { 'video_id' => 'abc123def456' } }, + { url: 'https://loom.com/share/xyz789', expected: { 'video_id' => 'xyz789' } } + ], + 'vimeo' => [ + { url: 'https://vimeo.com/123456789', expected: { 'video_id' => '123456789' } }, + { url: 'https://www.vimeo.com/987654321', expected: { 'video_id' => '987654321' } } + ], + 'mp4' => [ + { url: 'https://example.com/video.mp4', expected: { 'link_url' => 'https://example.com/video.mp4' } }, + { url: 'https://www.test.com/path/to/movie.mp4', expected: { 'link_url' => 'https://www.test.com/path/to/movie.mp4' } } + ], + 'arcade' => [ + { url: 'https://app.arcade.software/share/arcade123', expected: { 'video_id' => 'arcade123' } }, + { url: 'https://www.app.arcade.software/share/demo456', expected: { 'video_id' => 'demo456' } } + ], + 'arcade_tab' => [ + { url: 'https://app.arcade.software/share/arcade789?embed_mobile=tab', expected: { 'video_id' => 'arcade789' } }, + { url: 'https://app.arcade.software/share/demo789?foo=bar&embed_mobile=tab', expected: { 'video_id' => 'demo789' } }, + { url: 'https://app.arcade.software/share/demo-with-query?foo=bar&embed_mobile=tab?user_id=1', + expected: { 'video_id' => 'demo-with-query' } } + ], + 'wistia' => [ + { url: 'https://chatwoot.wistia.com/medias/kjwjeq6f9i', expected: { 'video_id' => 'kjwjeq6f9i' } }, + { url: 'https://www.company.wistia.com/medias/abc123def', expected: { 'video_id' => 'abc123def' } } + ], + 'bunny' => [ + { url: 'https://iframe.mediadelivery.net/play/431789/1f105841-cad9-46fe-a70e-b7623c60797c', + expected: { 'library_id' => '431789', 'video_id' => '1f105841-cad9-46fe-a70e-b7623c60797c' } }, + { url: 'https://iframe.mediadelivery.net/play/12345/abcdef-ghijkl', expected: { 'library_id' => '12345', 'video_id' => 'abcdef-ghijkl' } } + ], + 'codepen' => [ + { url: 'https://codepen.io/username/pen/abcdef', expected: { 'user' => 'username', 'pen_id' => 'abcdef' } }, + { url: 'https://www.codepen.io/testuser/pen/xyz123', expected: { 'user' => 'testuser', 'pen_id' => 'xyz123' } } + ], + 'github_gist' => [ + { url: 'https://gist.github.com/username/1234567890abcdef1234567890abcdef', + expected: { 'username' => 'username', 'gist_id' => '1234567890abcdef1234567890abcdef' } }, + { url: 'https://gist.github.com/testuser/fedcba0987654321fedcba0987654321', expected: { 'username' => 'testuser', 'gist_id' => 'fedcba0987654321fedcba0987654321' } } + ] + } + end + + it 'correctly captures named groups for all embed types' do + test_cases.each do |embed_type, cases| + regex = Regexp.new(config[embed_type]['regex']) + + cases.each do |test_case| + match = regex.match(test_case[:url]) + expect(match).not_to be_nil, "#{embed_type} regex failed to match URL: #{test_case[:url]}" + expect(match.named_captures).to eq(test_case[:expected]), + "#{embed_type} captured groups don't match expected for URL: #{test_case[:url]}" + end + end + end + + it 'validates that template variables match capture group names' do + config.each do |embed_type, embed_config| + regex = Regexp.new(embed_config['regex']) + template = embed_config['template'] + + # Extract template variables like %{video_id} + template_vars = template.scan(/%\{(\w+)\}/).flatten.uniq + + # Get named capture groups from regex + capture_names = regex.names + + expect(capture_names).to match_array(template_vars), + "#{embed_type}: Template variables #{template_vars} don't match capture groups #{capture_names}" + end + end + end +end diff --git a/spec/configs/schedule_spec.rb b/spec/configs/schedule_spec.rb new file mode 100644 index 0000000..29b4e93 --- /dev/null +++ b/spec/configs/schedule_spec.rb @@ -0,0 +1,24 @@ +## we had instances where after copy pasting the schedule block, +## the dev forgets to changes the schedule key, +## this would break some of the scheduled jobs with out explicit errors +require 'rails_helper' + +RSpec.context 'with valid schedule.yml' do + it 'does not have duplicates' do + file = Rails.root.join('config/schedule.yml') + schedule_keys = [] + invalid_line_starts = [' ', '#', "\n"] + # couldn't figure out a proper solution with yaml.parse + # so the rudementary solution is to read the file and parse it + # check for duplicates in the array + File.open(file).each do |f| + f.each_line do |line| + next if invalid_line_starts.include?(line[0]) + + schedule_keys << line.split(':')[0] + end + end + # ensure that no duplicates exist + expect(schedule_keys.count).to eq(schedule_keys.uniq.count) + end +end diff --git a/spec/controllers/.keep b/spec/controllers/.keep new file mode 100644 index 0000000..e69de29 diff --git a/spec/controllers/android_assetlinks_spec.rb b/spec/controllers/android_assetlinks_spec.rb new file mode 100644 index 0000000..a44ef11 --- /dev/null +++ b/spec/controllers/android_assetlinks_spec.rb @@ -0,0 +1,10 @@ +require 'rails_helper' + +describe '.well-known/assetlinks.json', type: :request do + describe 'GET /.well-known/assetlinks.json' do + it 'successfully retrieves assetlinks.json file' do + get '/.well-known/assetlinks.json' + expect(response).to have_http_status(:success) + end + end +end diff --git a/spec/controllers/api/base_controller_spec.rb b/spec/controllers/api/base_controller_spec.rb new file mode 100644 index 0000000..0034715 --- /dev/null +++ b/spec/controllers/api/base_controller_spec.rb @@ -0,0 +1,121 @@ +require 'rails_helper' + +RSpec.describe 'API Base', type: :request do + let!(:account) { create(:account) } + let!(:user) { create(:user, account: account) } + + describe 'request with api_access_token for user' do + context 'when accessing an account scoped resource' do + let!(:admin) { create(:user, :administrator, account: account) } + let!(:conversation) { create(:conversation, account: account) } + + it 'sets Current attributes for the request and then returns the response' do + # This test verifies that Current.user, Current.account, and Current.account_user + # are properly set during request processing. We verify this indirectly: + # - A successful response proves Current.account_user was set (required for authorization) + # - The correct conversation data proves Current.account was set (scopes the query) + get "/api/v1/accounts/#{account.id}/conversations/#{conversation.display_id}", + headers: { api_access_token: admin.access_token.token }, + as: :json + + expect(response).to have_http_status(:success) + expect(response.parsed_body['id']).to eq(conversation.display_id) + end + end + + context 'when it is an invalid api_access_token' do + it 'returns unauthorized' do + get '/api/v1/profile', + headers: { api_access_token: 'invalid' }, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is a valid api_access_token' do + it 'returns current user information' do + get '/api/v1/profile', + headers: { api_access_token: user.access_token.token }, + as: :json + + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['id']).to eq(user.id) + expect(json_response['email']).to eq(user.email) + end + end + end + + describe 'request with api_access_token for a super admin' do + before do + user.update!(type: 'SuperAdmin') + end + + context 'when its a valid api_access_token' do + it 'returns current user information' do + get '/api/v1/profile', + headers: { api_access_token: user.access_token.token }, + as: :json + + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['id']).to eq(user.id) + expect(json_response['email']).to eq(user.email) + end + end + end + + describe 'request with api_access_token for bot' do + let!(:agent_bot) { create(:agent_bot) } + let!(:inbox) { create(:inbox, account: account) } + let!(:conversation) { create(:conversation, account: account, inbox: inbox, assignee: user, status: 'pending') } + + context 'when it is an unauthorized url' do + it 'returns unauthorized' do + get '/api/v1/profile', + headers: { api_access_token: agent_bot.access_token.token }, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is a accessible url' do + it 'returns success' do + create(:agent_bot_inbox, inbox: inbox, agent_bot: agent_bot) + + post "/api/v1/accounts/#{account.id}/conversations/#{conversation.display_id}/toggle_status", + headers: { api_access_token: agent_bot.access_token.token }, + as: :json + + expect(response).to have_http_status(:success) + expect(conversation.reload.status).to eq('open') + end + end + + context 'when the account is suspended' do + it 'returns 401 unauthorized' do + account.update!(status: :suspended) + + post "/api/v1/accounts/#{account.id}/canned_responses", + headers: { api_access_token: user.access_token.token }, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + + # this exception occured in a client instance (DoubleRender error) + it 'will not throw exception if user does not have access to suspended account' do + user_with_out_access = create(:user) + account.update!(status: :suspended) + + post "/api/v1/accounts/#{account.id}/canned_responses", + headers: { api_access_token: user_with_out_access.access_token.token }, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/actions/contact_merges_controller_spec.rb b/spec/controllers/api/v1/accounts/actions/contact_merges_controller_spec.rb new file mode 100644 index 0000000..1390cdd --- /dev/null +++ b/spec/controllers/api/v1/accounts/actions/contact_merges_controller_spec.rb @@ -0,0 +1,41 @@ +require 'rails_helper' + +RSpec.describe 'Contact Merge Action API', type: :request do + let(:account) { create(:account) } + let!(:base_contact) { create(:contact, account: account) } + let!(:mergee_contact) { create(:contact, account: account) } + + describe 'POST /api/v1/accounts/{account.id}/actions/contact_merge' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/actions/contact_merge" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let(:agent) { create(:user, account: account, role: :agent) } + let(:merge_action) { double } + + before do + allow(ContactMergeAction).to receive(:new).and_return(merge_action) + allow(merge_action).to receive(:perform) + end + + it 'merges two contacts by calling contact merge action' do + post "/api/v1/accounts/#{account.id}/actions/contact_merge", + params: { base_contact_id: base_contact.id, mergee_contact_id: mergee_contact.id }, + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['id']).to eq(base_contact.id) + expected_params = { account: account, base_contact: base_contact, mergee_contact: mergee_contact } + expect(ContactMergeAction).to have_received(:new).with(expected_params) + expect(merge_action).to have_received(:perform) + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/agent_bots_controller_spec.rb b/spec/controllers/api/v1/accounts/agent_bots_controller_spec.rb new file mode 100644 index 0000000..61fcf30 --- /dev/null +++ b/spec/controllers/api/v1/accounts/agent_bots_controller_spec.rb @@ -0,0 +1,316 @@ +require 'rails_helper' + +RSpec.describe 'Agent Bot API', type: :request do + let!(:account) { create(:account) } + let!(:agent_bot) { create(:agent_bot, account: account) } + let(:admin) { create(:user, account: account, role: :administrator) } + let(:agent) { create(:user, account: account, role: :agent) } + + describe 'GET /api/v1/accounts/{account.id}/agent_bots' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/agent_bots" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'returns all the agent_bots in account along with global agent bots' do + global_bot = create(:agent_bot) + get "/api/v1/accounts/#{account.id}/agent_bots", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(response.body).to include(agent_bot.name) + expect(response.body).to include(global_bot.name) + expect(response.body).to include(agent_bot.access_token.token) + expect(response.body).not_to include(global_bot.access_token.token) + end + + it 'properly differentiates between system bots and account bots' do + global_bot = create(:agent_bot) + get "/api/v1/accounts/#{account.id}/agent_bots", + headers: agent.create_new_auth_token, + as: :json + + response_data = response.parsed_body + # Find the global bot in the response + global_bot_response = response_data.find { |bot| bot['id'] == global_bot.id } + # Find the account bot in the response + account_bot_response = response_data.find { |bot| bot['id'] == agent_bot.id } + + # Verify system_bot attribute and outgoing_url for global bot + expect(global_bot_response['system_bot']).to be(true) + expect(global_bot_response).not_to include('outgoing_url') + + # Verify account bot has system_bot attribute false and includes outgoing_url + expect(account_bot_response['system_bot']).to be(false) + expect(account_bot_response).to include('outgoing_url') + + # Verify both bots have thumbnail field + expect(global_bot_response).to include('thumbnail') + expect(account_bot_response).to include('thumbnail') + end + end + end + + describe 'GET /api/v1/accounts/{account.id}/agent_bots/:id' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/agent_bots/#{agent_bot.id}" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'shows the agent bot' do + get "/api/v1/accounts/#{account.id}/agent_bots/#{agent_bot.id}", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(response.body).to include(agent_bot.name) + expect(response.body).to include(agent_bot.access_token.token) + end + + it 'will show a global agent bot' do + global_bot = create(:agent_bot) + get "/api/v1/accounts/#{account.id}/agent_bots/#{global_bot.id}", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(response.body).to include(global_bot.name) + expect(response.body).not_to include(global_bot.access_token.token) + + # Test for system_bot attribute and webhook URL not being exposed + expect(response.parsed_body['system_bot']).to be(true) + expect(response.parsed_body).not_to include('outgoing_url') + end + end + end + + describe 'POST /api/v1/accounts/{account.id}/agent_bots' do + let(:valid_params) { { name: 'test' } } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + expect { post "/api/v1/accounts/#{account.id}/agent_bots", params: valid_params }.not_to change(Label, :count) + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'creates the agent bot when administrator' do + expect do + post "/api/v1/accounts/#{account.id}/agent_bots", headers: admin.create_new_auth_token, + params: valid_params + end.to change(AgentBot, :count).by(1) + + expect(response).to have_http_status(:success) + end + + it 'would not create the agent bot when agent' do + expect do + post "/api/v1/accounts/#{account.id}/agent_bots", headers: agent.create_new_auth_token, + params: valid_params + end.not_to change(AgentBot, :count) + + expect(response).to have_http_status(:unauthorized) + end + end + end + + describe 'PATCH /api/v1/accounts/{account.id}/agent_bots/:id' do + let(:valid_params) { { name: 'test_updated' } } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + patch "/api/v1/accounts/#{account.id}/agent_bots/#{agent_bot.id}", + params: valid_params + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'updates the agent bot' do + patch "/api/v1/accounts/#{account.id}/agent_bots/#{agent_bot.id}", + headers: admin.create_new_auth_token, + params: valid_params, + as: :json + + expect(response).to have_http_status(:success) + expect(agent_bot.reload.name).to eq('test_updated') + expect(response.body).to include(agent_bot.access_token.token) + end + + it 'would not update the agent bot when agent' do + patch "/api/v1/accounts/#{account.id}/agent_bots/#{agent_bot.id}", + headers: agent.create_new_auth_token, + params: valid_params, + as: :json + + expect(response).to have_http_status(:unauthorized) + expect(agent_bot.reload.name).not_to eq('test_updated') + end + + it 'would not update a global agent bot' do + global_bot = create(:agent_bot) + patch "/api/v1/accounts/#{account.id}/agent_bots/#{global_bot.id}", + headers: admin.create_new_auth_token, + params: valid_params, + as: :json + + expect(response).to have_http_status(:not_found) + expect(agent_bot.reload.name).not_to eq('test_updated') + expect(response.body).not_to include(global_bot.access_token.token) + end + + it 'updates avatar and includes thumbnail in response' do + # no avatar before upload + expect(agent_bot.avatar.attached?).to be(false) + file = fixture_file_upload(Rails.root.join('spec/assets/avatar.png'), 'image/png') + patch "/api/v1/accounts/#{account.id}/agent_bots/#{agent_bot.id}", + headers: admin.create_new_auth_token, + params: valid_params.merge(avatar: file) + + expect(response).to have_http_status(:success) + agent_bot.reload + expect(agent_bot.avatar.attached?).to be(true) + + # Verify thumbnail is included in the response + expect(response.parsed_body).to include('thumbnail') + end + + it 'updated avatar with avatar_url' do + patch "/api/v1/accounts/#{account.id}/agent_bots/#{agent_bot.id}", + headers: admin.create_new_auth_token, + params: valid_params.merge(avatar_url: 'http://example.com/avatar.png'), + as: :json + expect(response).to have_http_status(:success) + expect(Avatar::AvatarFromUrlJob).to have_been_enqueued.with(agent_bot, 'http://example.com/avatar.png') + end + end + end + + describe 'DELETE /api/v1/accounts/{account.id}/agent_bots/:id' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + delete "/api/v1/accounts/#{account.id}/agent_bots/#{agent_bot.id}" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'deletes an agent bot when administrator' do + delete "/api/v1/accounts/#{account.id}/agent_bots/#{agent_bot.id}", + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(account.agent_bots.size).to eq(0) + end + + it 'would not delete the agent bot when agent' do + delete "/api/v1/accounts/#{account.id}/agent_bots/#{agent_bot.id}", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:unauthorized) + expect(account.agent_bots.size).not_to eq(0) + end + + it 'would not delete a global agent bot' do + global_bot = create(:agent_bot) + delete "/api/v1/accounts/#{account.id}/agent_bots/#{global_bot.id}", + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:not_found) + expect(account.agent_bots.size).not_to eq(0) + end + end + end + + describe 'DELETE /api/v1/accounts/{account.id}/agent_bots/:id/avatar' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + delete "/api/v1/accounts/#{account.id}/agent_bots/#{agent_bot.id}" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + before do + agent_bot.avatar.attach(io: Rails.root.join('spec/assets/avatar.png').open, filename: 'avatar.png', content_type: 'image/png') + end + + it 'delete agent_bot avatar' do + delete "/api/v1/accounts/#{account.id}/agent_bots/#{agent_bot.id}/avatar", + headers: admin.create_new_auth_token, + as: :json + + expect { agent_bot.avatar.attachment.reload }.to raise_error(ActiveRecord::RecordNotFound) + expect(response).to have_http_status(:success) + end + end + end + + describe 'POST /api/v1/accounts/{account.id}/agent_bots/:id/reset_access_token' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/agent_bots/#{agent_bot.id}/reset_access_token" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'regenerates the access token when administrator' do + old_token = agent_bot.access_token.token + + post "/api/v1/accounts/#{account.id}/agent_bots/#{agent_bot.id}/reset_access_token", + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + agent_bot.reload + expect(agent_bot.access_token.token).not_to eq(old_token) + json_response = response.parsed_body + expect(json_response['access_token']).to eq(agent_bot.access_token.token) + end + + it 'would not reset the access token when agent' do + old_token = agent_bot.access_token.token + + post "/api/v1/accounts/#{account.id}/agent_bots/#{agent_bot.id}/reset_access_token", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:unauthorized) + agent_bot.reload + expect(agent_bot.access_token.token).to eq(old_token) + end + + it 'would not reset access token for a global agent bot' do + global_bot = create(:agent_bot) + old_token = global_bot.access_token.token + + post "/api/v1/accounts/#{account.id}/agent_bots/#{global_bot.id}/reset_access_token", + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:not_found) + global_bot.reload + expect(global_bot.access_token.token).to eq(old_token) + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/agents_controller_spec.rb b/spec/controllers/api/v1/accounts/agents_controller_spec.rb new file mode 100644 index 0000000..a74cbe2 --- /dev/null +++ b/spec/controllers/api/v1/accounts/agents_controller_spec.rb @@ -0,0 +1,213 @@ +require 'rails_helper' + +RSpec.describe 'Agents API', type: :request do + include ActiveJob::TestHelper + + let(:account) { create(:account) } + let!(:admin) { create(:user, custom_attributes: { test: 'test' }, account: account, role: :administrator) } + let!(:agent) { create(:user, account: account, email: 'exists@example.com', role: :agent) } + + describe 'GET /api/v1/accounts/{account.id}/agents' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/agents" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let!(:agent) { create(:user, account: account, role: :agent) } + + it 'returns all agents of account' do + get "/api/v1/accounts/#{account.id}/agents", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(response.parsed_body.size).to eq(account.users.count) + end + + it 'returns custom fields on agents if present' do + agent.update(custom_attributes: { test: 'test' }) + + get "/api/v1/accounts/#{account.id}/agents", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + data = response.parsed_body + expect(data.first['custom_attributes']['test']).to eq('test') + end + end + end + + describe 'DELETE /api/v1/accounts/{account.id}/agents/:id' do + let(:other_agent) { create(:user, account: account, role: :agent) } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + delete "/api/v1/accounts/#{account.id}/agents/#{other_agent.id}" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'returns unauthorized for agents' do + delete "/api/v1/accounts/#{account.id}/agents/#{other_agent.id}", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + + it 'deletes the agent and user object if associated with only one account' do + expect(account.users).to include(other_agent) + + perform_enqueued_jobs(only: DeleteObjectJob) do + delete "/api/v1/accounts/#{account.id}/agents/#{other_agent.id}", + headers: admin.create_new_auth_token, + as: :json + end + + expect(response).to have_http_status(:success) + expect(account.reload.users).not_to include(other_agent) + end + + it 'deletes only the agent object when user is associated with multiple accounts' do + other_account = create(:account) + create(:account_user, account_id: other_account.id, user_id: other_agent.id) + + perform_enqueued_jobs(only: DeleteObjectJob) do + delete "/api/v1/accounts/#{account.id}/agents/#{other_agent.id}", + headers: admin.create_new_auth_token, + as: :json + end + + expect(response).to have_http_status(:success) + expect(account.reload.users).not_to include(other_agent) + expect(other_agent.account_users.count).to eq(1) # Should only be associated with other_account now + end + end + end + + describe 'PUT /api/v1/accounts/{account.id}/agents/:id' do + let(:other_agent) { create(:user, account: account, role: :agent) } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + put "/api/v1/accounts/#{account.id}/agents/#{other_agent.id}" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + params = { name: 'TestUser' } + + it 'returns unauthorized for agents' do + put "/api/v1/accounts/#{account.id}/agents/#{other_agent.id}", + params: params, + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + + it 'modifies an agent name' do + put "/api/v1/accounts/#{account.id}/agents/#{other_agent.id}", + params: params, + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(other_agent.reload.name).to eq(params[:name]) + end + + it 'modifies an agents account user attributes' do + put "/api/v1/accounts/#{account.id}/agents/#{other_agent.id}", + params: { role: 'administrator', availability: 'busy', auto_offline: false }, + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + response_data = response.parsed_body + expect(response_data['role']).to eq('administrator') + expect(response_data['availability_status']).to eq('busy') + expect(response_data['auto_offline']).to be(false) + expect(other_agent.account_users.first.role).to eq('administrator') + end + end + end + + describe 'POST /api/v1/accounts/{account.id}/agents' do + let(:other_agent) { create(:user, account: account, role: :agent) } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/agents" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + params = { name: 'NewUser', email: Faker::Internet.email, role: :agent } + + it 'returns unauthorized for agents' do + post "/api/v1/accounts/#{account.id}/agents", + params: params, + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + + it 'creates a new agent' do + post "/api/v1/accounts/#{account.id}/agents", + params: params, + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(response.parsed_body['email']).to eq(params[:email]) + expect(account.users.last.name).to eq('NewUser') + end + end + end + + describe 'POST /api/v1/accounts/{account.id}/agents/bulk_create' do + let(:emails) { ['test1@example.com', 'test2@example.com', 'test3@example.com'] } + let(:bulk_create_params) { { emails: emails } } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/agents/bulk_create", params: bulk_create_params + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when authenticated as admin' do + it 'creates multiple agents successfully' do + expect do + post "/api/v1/accounts/#{account.id}/agents/bulk_create", params: bulk_create_params, headers: admin.create_new_auth_token + end.to change(User, :count).by(3) + + expect(response).to have_http_status(:ok) + end + + it 'ignores errors if account_user already exists' do + params = { emails: ['exists@example.com', 'test1@example.com', 'test2@example.com'] } + + expect do + post "/api/v1/accounts/#{account.id}/agents/bulk_create", params: params, + headers: admin.create_new_auth_token + end.to change(User, :count).by(2) + + expect(response).to have_http_status(:ok) + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/articles_controller_spec.rb b/spec/controllers/api/v1/accounts/articles_controller_spec.rb new file mode 100644 index 0000000..e74be76 --- /dev/null +++ b/spec/controllers/api/v1/accounts/articles_controller_spec.rb @@ -0,0 +1,296 @@ +require 'rails_helper' + +RSpec.describe 'Api::V1::Accounts::Articles', type: :request do + let(:account) { create(:account) } + let(:agent) { create(:user, account: account, role: :agent) } + let(:admin) { create(:user, account: account, role: :administrator) } + let!(:portal) { create(:portal, name: 'test_portal', account_id: account.id) } + let!(:category) { create(:category, name: 'category', portal: portal, account_id: account.id, locale: 'en', slug: 'category_slug') } + let!(:article) { create(:article, category: category, portal: portal, account_id: account.id, author_id: agent.id) } + + describe 'POST /api/v1/accounts/{account.id}/portals/{portal.slug}/articles' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles", params: {} + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'creates article' do + article_params = { + article: { + category_id: category.id, + description: 'test description', + title: 'MyTitle', + slug: 'my-title', + content: 'This is my content.', + status: :published, + author_id: agent.id, + position: 3 + } + } + post "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles", + params: article_params, + headers: admin.create_new_auth_token + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['payload']['title']).to eql('MyTitle') + expect(json_response['payload']['status']).to eql('published') + expect(json_response['payload']['position']).to be(3) + end + + it 'creates article even if category is not provided' do + article_params = { + article: { + category_id: nil, + description: 'test description', + title: 'MyTitle', + slug: 'my-title', + content: 'This is my content.', + status: :published, + author_id: agent.id, + position: 3 + } + } + post "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles", + params: article_params, + headers: admin.create_new_auth_token + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['payload']['title']).to eql('MyTitle') + expect(json_response['payload']['status']).to eql('published') + expect(json_response['payload']['position']).to be(3) + end + + it 'creates article as draft when status is not provided' do + article_params = { + article: { + category_id: category.id, + description: 'test description', + title: 'DraftTitle', + slug: 'draft-title', + content: 'This is my draft content.', + author_id: agent.id + } + } + post "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles", + params: article_params, + headers: admin.create_new_auth_token + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['payload']['title']).to eql('DraftTitle') + expect(json_response['payload']['status']).to eql('draft') + end + + it 'associate to the root article' do + root_article = create(:article, category: category, slug: 'root-article', portal: portal, account_id: account.id, author_id: agent.id, + associated_article_id: nil) + parent_article = create(:article, category: category, slug: 'parent-article', portal: portal, account_id: account.id, author_id: agent.id, + associated_article_id: root_article.id) + + article_params = { + article: { + category_id: category.id, + description: 'test description', + title: 'MyTitle', + slug: 'MyTitle', + content: 'This is my content.', + status: :published, + author_id: agent.id, + associated_article_id: parent_article.id + } + } + post "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles", + params: article_params, + headers: admin.create_new_auth_token + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['payload']['title']).to eql('MyTitle') + + category = Article.find(json_response['payload']['id']) + expect(category.associated_article_id).to eql(root_article.id) + end + + it 'associate to the current parent article' do + parent_article = create(:article, category: category, portal: portal, account_id: account.id, author_id: agent.id, associated_article_id: nil) + + article_params = { + article: { + category_id: category.id, + description: 'test description', + title: 'MyTitle', + slug: 'MyTitle', + content: 'This is my content.', + status: :published, + author_id: agent.id, + associated_article_id: parent_article.id + } + } + post "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles", + params: article_params, + headers: admin.create_new_auth_token + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['payload']['title']).to eql('MyTitle') + + category = Article.find(json_response['payload']['id']) + expect(category.associated_article_id).to eql(parent_article.id) + end + end + end + + describe 'PUT /api/v1/accounts/{account.id}/portals/{portal.slug}/articles/{article.id}' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + put "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles/#{article.id}", params: {} + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'updates article' do + article_params = { + article: { + title: 'MyTitle2', + status: 'published', + description: 'test_description', + position: 5 + } + } + + expect(article.title).not_to eql(article_params[:article][:title]) + + put "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles/#{article.id}", + params: article_params, + headers: admin.create_new_auth_token + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['payload']['title']).to eql(article_params[:article][:title]) + expect(json_response['payload']['status']).to eql(article_params[:article][:status]) + expect(json_response['payload']['position']).to eql(article_params[:article][:position]) + end + end + end + + describe 'DELETE /api/v1/accounts/{account.id}/portals/{portal.slug}/articles/{article.id}' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + delete "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles/#{article.id}", params: {} + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'deletes category' do + delete "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles/#{article.id}", + headers: admin.create_new_auth_token + expect(response).to have_http_status(:success) + deleted_article = Article.find_by(id: article.id) + expect(deleted_article).to be_nil + end + end + end + + describe 'GET /api/v1/accounts/{account.id}/portals/{portal.slug}/articles' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles" + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'get all articles' do + article2 = create(:article, account_id: account.id, portal: portal, category: category, author_id: agent.id) + expect(article2.id).not_to be_nil + + get "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles", + headers: admin.create_new_auth_token, + params: {} + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['payload'].count).to be 2 + end + + it 'get all articles with uncategorized articles' do + article2 = create(:article, account_id: account.id, portal: portal, category: nil, locale: 'en', author_id: agent.id) + expect(article2.id).not_to be_nil + + get "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles", + headers: admin.create_new_auth_token, + params: {} + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['payload'].count).to be 2 + expect(json_response['payload'][0]['id']).to eq article2.id + expect(json_response['payload'][0]['category']['id']).to be_nil + end + + it 'get all articles with searched params' do + article2 = create(:article, account_id: account.id, portal: portal, category: category, author_id: agent.id) + expect(article2.id).not_to be_nil + + get "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles", + headers: admin.create_new_auth_token, + params: { category_slug: category.slug } + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['payload'].count).to be 2 + end + + it 'get all articles with searched text query' do + article2 = create(:article, + account_id: account.id, + portal: portal, + category: category, + author_id: agent.id, + content: 'this is some test and funny content') + expect(article2.id).not_to be_nil + + get "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles", + headers: admin.create_new_auth_token, + params: { query: 'funny' } + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['payload'].count).to be 1 + expect(json_response['meta']['all_articles_count']).to be 2 + expect(json_response['meta']['articles_count']).to be 1 + expect(json_response['meta']['mine_articles_count']).to be 0 + end + end + + describe 'GET /api/v1/accounts/{account.id}/portals/{portal.slug}/articles/{article.id}' do + it 'get article' do + article2 = create(:article, account_id: account.id, portal: portal, category: category, author_id: agent.id) + expect(article2.id).not_to be_nil + + get "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles/#{article2.id}", + headers: admin.create_new_auth_token + expect(response).to have_http_status(:success) + json_response = response.parsed_body + + expect(json_response['payload']['title']).to eq(article2.title) + expect(json_response['payload']['id']).to eq(article2.id) + end + + it 'get associated articles' do + root_article = create(:article, category: category, portal: portal, account_id: account.id, author_id: agent.id, associated_article_id: nil) + child_article_1 = create(:article, slug: 'child-1', category: category, portal: portal, account_id: account.id, author_id: agent.id, + associated_article_id: root_article.id) + child_article_2 = create(:article, slug: 'child-2', category: category, portal: portal, account_id: account.id, author_id: agent.id, + associated_article_id: root_article.id) + + get "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles/#{root_article.id}", + headers: admin.create_new_auth_token + expect(response).to have_http_status(:success) + json_response = response.parsed_body + + expect(json_response['payload']['associated_articles'].length).to eq(2) + associated_articles_ids = json_response['payload']['associated_articles'].pluck('id') + expect(associated_articles_ids).to contain_exactly(child_article_1.id, child_article_2.id) + expect(json_response['payload']['id']).to eq(root_article.id) + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/assignable_agents_controller_spec.rb b/spec/controllers/api/v1/accounts/assignable_agents_controller_spec.rb new file mode 100644 index 0000000..6f1a068 --- /dev/null +++ b/spec/controllers/api/v1/accounts/assignable_agents_controller_spec.rb @@ -0,0 +1,67 @@ +require 'rails_helper' + +RSpec.describe 'Assignable Agents API', type: :request do + let(:account) { create(:account) } + let(:agent1) { create(:user, account: account, role: :agent) } + let!(:agent2) { create(:user, account: account, role: :agent) } + let!(:admin) { create(:user, account: account, role: :administrator) } + + describe 'GET /api/v1/accounts/{account.id}/assignable_agents' do + let(:inbox1) { create(:inbox, account: account) } + let(:inbox2) { create(:inbox, account: account) } + + before do + create(:inbox_member, user: agent1, inbox: inbox1) + create(:inbox_member, user: agent1, inbox: inbox2) + end + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/assignable_agents" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when the user is not part of an inbox' do + context 'when the user is an admininstrator' do + it 'returns all assignable inbox members along with administrators' do + get "/api/v1/accounts/#{account.id}/assignable_agents", + params: { inbox_ids: [inbox1.id, inbox2.id] }, + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + response_data = JSON.parse(response.body, symbolize_names: true)[:payload] + expect(response_data.size).to eq(2) + expect(response_data.pluck(:role)).to include('agent', 'administrator') + end + end + + context 'when the user is an agent' do + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/assignable_agents", + params: { inbox_ids: [inbox1.id, inbox2.id] }, + headers: agent2.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + end + end + + context 'when the user is part of the inbox' do + it 'returns all assignable inbox members along with administrators' do + get "/api/v1/accounts/#{account.id}/assignable_agents", + params: { inbox_ids: [inbox1.id, inbox2.id] }, + headers: agent1.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + response_data = JSON.parse(response.body, symbolize_names: true)[:payload] + expect(response_data.size).to eq(2) + expect(response_data.pluck(:role)).to include('agent', 'administrator') + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/assignment_policies/inboxes_controller_spec.rb b/spec/controllers/api/v1/accounts/assignment_policies/inboxes_controller_spec.rb new file mode 100644 index 0000000..6b3c677 --- /dev/null +++ b/spec/controllers/api/v1/accounts/assignment_policies/inboxes_controller_spec.rb @@ -0,0 +1,63 @@ +require 'rails_helper' + +RSpec.describe 'Assignment Policy Inboxes API', type: :request do + let(:account) { create(:account) } + let(:assignment_policy) { create(:assignment_policy, account: account) } + + describe 'GET /api/v1/accounts/{account_id}/assignment_policies/{assignment_policy_id}/inboxes' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/assignment_policies/#{assignment_policy.id}/inboxes" + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated admin' do + let(:admin) { create(:user, account: account, role: :administrator) } + + context 'when assignment policy has associated inboxes' do + before do + inbox1 = create(:inbox, account: account) + inbox2 = create(:inbox, account: account) + create(:inbox_assignment_policy, inbox: inbox1, assignment_policy: assignment_policy) + create(:inbox_assignment_policy, inbox: inbox2, assignment_policy: assignment_policy) + end + + it 'returns all inboxes associated with the assignment policy' do + get "/api/v1/accounts/#{account.id}/assignment_policies/#{assignment_policy.id}/inboxes", + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['inboxes']).to be_an(Array) + expect(json_response['inboxes'].length).to eq(2) + end + end + + context 'when assignment policy has no associated inboxes' do + it 'returns empty array' do + get "/api/v1/accounts/#{account.id}/assignment_policies/#{assignment_policy.id}/inboxes", + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['inboxes']).to eq([]) + end + end + end + + context 'when it is an agent' do + let(:agent) { create(:user, account: account, role: :agent) } + + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/assignment_policies/#{assignment_policy.id}/inboxes", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/assignment_policies_controller_spec.rb b/spec/controllers/api/v1/accounts/assignment_policies_controller_spec.rb new file mode 100644 index 0000000..f882ec9 --- /dev/null +++ b/spec/controllers/api/v1/accounts/assignment_policies_controller_spec.rb @@ -0,0 +1,326 @@ +require 'rails_helper' + +RSpec.describe 'Assignment Policies API', type: :request do + let(:account) { create(:account) } + + describe 'GET /api/v1/accounts/{account.id}/assignment_policies' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/assignment_policies" + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated admin' do + let(:admin) { create(:user, account: account, role: :administrator) } + + before do + create_list(:assignment_policy, 3, account: account) + end + + it 'returns all assignment policies for the account' do + get "/api/v1/accounts/#{account.id}/assignment_policies", + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response.length).to eq(3) + expect(json_response.first.keys).to include('id', 'name', 'description') + end + end + + context 'when it is an agent' do + let(:agent) { create(:user, account: account, role: :agent) } + + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/assignment_policies", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + end + end + + describe 'GET /api/v1/accounts/{account.id}/assignment_policies/:id' do + let(:assignment_policy) { create(:assignment_policy, account: account) } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/assignment_policies/#{assignment_policy.id}" + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated admin' do + let(:admin) { create(:user, account: account, role: :administrator) } + + it 'returns the assignment policy' do + get "/api/v1/accounts/#{account.id}/assignment_policies/#{assignment_policy.id}", + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['id']).to eq(assignment_policy.id) + expect(json_response['name']).to eq(assignment_policy.name) + end + + it 'returns not found for non-existent policy' do + get "/api/v1/accounts/#{account.id}/assignment_policies/999999", + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:not_found) + end + end + + context 'when it is an agent' do + let(:agent) { create(:user, account: account, role: :agent) } + + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/assignment_policies/#{assignment_policy.id}", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + end + end + + describe 'POST /api/v1/accounts/{account.id}/assignment_policies' do + let(:valid_params) do + { + assignment_policy: { + name: 'New Assignment Policy', + description: 'Policy for new team', + conversation_priority: 'longest_waiting', + fair_distribution_limit: 15, + enabled: true + } + } + end + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/assignment_policies", params: valid_params + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated admin' do + let(:admin) { create(:user, account: account, role: :administrator) } + + it 'creates a new assignment policy' do + expect do + post "/api/v1/accounts/#{account.id}/assignment_policies", + headers: admin.create_new_auth_token, + params: valid_params, + as: :json + end.to change(AssignmentPolicy, :count).by(1) + + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['name']).to eq('New Assignment Policy') + expect(json_response['conversation_priority']).to eq('longest_waiting') + end + + it 'creates policy with minimal required params' do + minimal_params = { assignment_policy: { name: 'Minimal Policy' } } + + expect do + post "/api/v1/accounts/#{account.id}/assignment_policies", + headers: admin.create_new_auth_token, + params: minimal_params, + as: :json + end.to change(AssignmentPolicy, :count).by(1) + + expect(response).to have_http_status(:success) + end + + it 'prevents duplicate policy names within account' do + create(:assignment_policy, account: account, name: 'Duplicate Policy') + duplicate_params = { assignment_policy: { name: 'Duplicate Policy' } } + + expect do + post "/api/v1/accounts/#{account.id}/assignment_policies", + headers: admin.create_new_auth_token, + params: duplicate_params, + as: :json + end.not_to change(AssignmentPolicy, :count) + + expect(response).to have_http_status(:unprocessable_entity) + end + + it 'validates required fields' do + invalid_params = { assignment_policy: { name: '' } } + + post "/api/v1/accounts/#{account.id}/assignment_policies", + headers: admin.create_new_auth_token, + params: invalid_params, + as: :json + + expect(response).to have_http_status(:unprocessable_entity) + end + end + + context 'when it is an agent' do + let(:agent) { create(:user, account: account, role: :agent) } + + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/assignment_policies", + headers: agent.create_new_auth_token, + params: valid_params, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + end + end + + describe 'PUT /api/v1/accounts/{account.id}/assignment_policies/:id' do + let(:assignment_policy) { create(:assignment_policy, account: account, name: 'Original Policy') } + let(:update_params) do + { + assignment_policy: { + name: 'Updated Policy', + description: 'Updated description', + fair_distribution_limit: 20 + } + } + end + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + put "/api/v1/accounts/#{account.id}/assignment_policies/#{assignment_policy.id}", + params: update_params + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated admin' do + let(:admin) { create(:user, account: account, role: :administrator) } + + it 'updates the assignment policy' do + put "/api/v1/accounts/#{account.id}/assignment_policies/#{assignment_policy.id}", + headers: admin.create_new_auth_token, + params: update_params, + as: :json + + expect(response).to have_http_status(:success) + assignment_policy.reload + expect(assignment_policy.name).to eq('Updated Policy') + expect(assignment_policy.fair_distribution_limit).to eq(20) + end + + it 'allows partial updates' do + partial_params = { assignment_policy: { enabled: false } } + + put "/api/v1/accounts/#{account.id}/assignment_policies/#{assignment_policy.id}", + headers: admin.create_new_auth_token, + params: partial_params, + as: :json + + expect(response).to have_http_status(:success) + expect(assignment_policy.reload.enabled).to be(false) + expect(assignment_policy.name).to eq('Original Policy') # unchanged + end + + it 'prevents duplicate names during update' do + create(:assignment_policy, account: account, name: 'Existing Policy') + duplicate_params = { assignment_policy: { name: 'Existing Policy' } } + + put "/api/v1/accounts/#{account.id}/assignment_policies/#{assignment_policy.id}", + headers: admin.create_new_auth_token, + params: duplicate_params, + as: :json + + expect(response).to have_http_status(:unprocessable_entity) + end + + it 'returns not found for non-existent policy' do + put "/api/v1/accounts/#{account.id}/assignment_policies/999999", + headers: admin.create_new_auth_token, + params: update_params, + as: :json + + expect(response).to have_http_status(:not_found) + end + end + + context 'when it is an agent' do + let(:agent) { create(:user, account: account, role: :agent) } + + it 'returns unauthorized' do + put "/api/v1/accounts/#{account.id}/assignment_policies/#{assignment_policy.id}", + headers: agent.create_new_auth_token, + params: update_params, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + end + end + + describe 'DELETE /api/v1/accounts/{account.id}/assignment_policies/:id' do + let(:assignment_policy) { create(:assignment_policy, account: account) } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + delete "/api/v1/accounts/#{account.id}/assignment_policies/#{assignment_policy.id}" + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated admin' do + let(:admin) { create(:user, account: account, role: :administrator) } + + it 'deletes the assignment policy' do + assignment_policy # create it first + + expect do + delete "/api/v1/accounts/#{account.id}/assignment_policies/#{assignment_policy.id}", + headers: admin.create_new_auth_token, + as: :json + end.to change(AssignmentPolicy, :count).by(-1) + + expect(response).to have_http_status(:ok) + end + + it 'cascades deletion to associated inbox assignment policies' do + inbox = create(:inbox, account: account) + create(:inbox_assignment_policy, inbox: inbox, assignment_policy: assignment_policy) + + expect do + delete "/api/v1/accounts/#{account.id}/assignment_policies/#{assignment_policy.id}", + headers: admin.create_new_auth_token, + as: :json + end.to change(InboxAssignmentPolicy, :count).by(-1) + + expect(response).to have_http_status(:ok) + end + + it 'returns not found for non-existent policy' do + delete "/api/v1/accounts/#{account.id}/assignment_policies/999999", + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:not_found) + end + end + + context 'when it is an agent' do + let(:agent) { create(:user, account: account, role: :agent) } + + it 'returns unauthorized' do + delete "/api/v1/accounts/#{account.id}/assignment_policies/#{assignment_policy.id}", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/automation_rules_controller_spec.rb b/spec/controllers/api/v1/accounts/automation_rules_controller_spec.rb new file mode 100644 index 0000000..ff882da --- /dev/null +++ b/spec/controllers/api/v1/accounts/automation_rules_controller_spec.rb @@ -0,0 +1,448 @@ +require 'rails_helper' + +RSpec.describe 'Api::V1::Accounts::AutomationRulesController', type: :request do + let(:account) { create(:account) } + let(:administrator) { create(:user, account: account, role: :administrator) } + let!(:inbox) { create(:inbox, account: account, enable_auto_assignment: false) } + let!(:contact) { create(:contact, account: account) } + let(:contact_inbox) { create(:contact_inbox, inbox_id: inbox.id, contact_id: contact.id) } + + describe 'GET /api/v1/accounts/{account.id}/automation_rules' do + context 'when it is an authenticated user' do + it 'returns all records' do + automation_rule = create(:automation_rule, account: account, name: 'Test Automation Rule') + + get "/api/v1/accounts/#{account.id}/automation_rules", + headers: administrator.create_new_auth_token + + expect(response).to have_http_status(:success) + body = JSON.parse(response.body, symbolize_names: true) + expect(body[:payload].first[:id]).to eq(automation_rule.id) + end + end + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/automation_rules" + + expect(response).to have_http_status(:unauthorized) + end + end + end + + describe 'POST /api/v1/accounts/{account.id}/automation_rules' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/automation_rules" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let(:params) do + { + 'name': 'Notify Conversation Created and mark priority query', + 'description': 'Notify all administrator about conversation created and mark priority query', + 'event_name': 'conversation_created', + 'conditions': [ + { + 'attribute_key': 'browser_language', + 'filter_operator': 'equal_to', + 'values': ['en'], + 'query_operator': 'AND' + }, + { + 'attribute_key': 'country_code', + 'filter_operator': 'equal_to', + 'values': %w[USA UK], + 'query_operator': nil + } + ], + 'actions': [ + { + 'action_name': :send_message, + 'action_params': ['Welcome to the chatwoot platform.'] + }, + { + 'action_name': :assign_team, + 'action_params': [1] + }, + { + 'action_name': :add_label, + 'action_params': %w[support priority_customer] + } + ] + } + end + + it 'processes invalid query operator' do + expect(account.automation_rules.count).to eq(0) + params[:conditions] << { + 'attribute_key': 'browser_language', + 'filter_operator': 'equal_to', + 'values': ['en'], + 'query_operator': 'invalid' + } + + post "/api/v1/accounts/#{account.id}/automation_rules", + headers: administrator.create_new_auth_token, + params: params + + expect(response).to have_http_status(:unprocessable_entity) + expect(account.automation_rules.count).to eq(0) + end + + it 'throws an error for unknown attributes in condtions' do + expect(account.automation_rules.count).to eq(0) + params[:conditions] << { + 'attribute_key': 'unknown_attribute', + 'filter_operator': 'equal_to', + 'values': ['en'], + 'query_operator': 'AND' + } + + post "/api/v1/accounts/#{account.id}/automation_rules", + headers: administrator.create_new_auth_token, + params: params + + expect(response).to have_http_status(:unprocessable_entity) + expect(account.automation_rules.count).to eq(0) + end + + it 'Saves for automation_rules for account with country_code and browser_language conditions' do + expect(account.automation_rules.count).to eq(0) + + post "/api/v1/accounts/#{account.id}/automation_rules", + headers: administrator.create_new_auth_token, + params: params + + expect(response).to have_http_status(:success) + expect(account.automation_rules.count).to eq(1) + end + + it 'Saves for automation_rules for account with status conditions' do + params[:conditions] = [ + { + attribute_key: 'status', + filter_operator: 'equal_to', + values: ['resolved'], + query_operator: nil + } + ] + expect(account.automation_rules.count).to eq(0) + + post "/api/v1/accounts/#{account.id}/automation_rules", + headers: administrator.create_new_auth_token, + params: params + + expect(response).to have_http_status(:success) + expect(account.automation_rules.count).to eq(1) + end + + it 'Saves file in the automation actions to send an attachments' do + blob = ActiveStorage::Blob.create_and_upload!( + io: Rails.root.join('spec/assets/avatar.png').open, + filename: 'avatar.png', + content_type: 'image/png' + ) + + expect(account.automation_rules.count).to eq(0) + + params[:actions] = [ + { + 'action_name': :send_message, + 'action_params': ['Welcome to the chatwoot platform.'] + }, + { + 'action_name': :send_attachment, + 'action_params': [blob.signed_id] + } + ] + + post "/api/v1/accounts/#{account.id}/automation_rules", + headers: administrator.create_new_auth_token, + params: params + + automation_rule = account.automation_rules.first + expect(automation_rule.files.presence).to be_truthy + expect(automation_rule.files.count).to eq(1) + end + + it 'Saves files in the automation actions to send multiple attachments' do + blob_1 = ActiveStorage::Blob.create_and_upload!( + io: Rails.root.join('spec/assets/avatar.png').open, + filename: 'avatar.png', + content_type: 'image/png' + ) + blob_2 = ActiveStorage::Blob.create_and_upload!( + io: Rails.root.join('spec/assets/sample.png').open, + filename: 'sample.png', + content_type: 'image/png' + ) + + params[:actions] = [ + { + 'action_name': :send_attachment, + 'action_params': [blob_1.signed_id] + }, + { + 'action_name': :send_attachment, + 'action_params': [blob_2.signed_id] + } + ] + + post "/api/v1/accounts/#{account.id}/automation_rules", + headers: administrator.create_new_auth_token, + params: params + + automation_rule = account.automation_rules.first + expect(automation_rule.files.count).to eq(2) + end + + it 'returns error for invalid attachment blob_id' do + params[:actions] = [ + { + 'action_name': :send_attachment, + 'action_params': ['invalid_blob_id'] + } + ] + + post "/api/v1/accounts/#{account.id}/automation_rules", + headers: administrator.create_new_auth_token, + params: params + + expect(response).to have_http_status(:unprocessable_entity) + expect(response.parsed_body['error']).to eq(I18n.t('errors.attachments.invalid')) + end + + it 'stores the original blob_id in action_params after create' do + blob = ActiveStorage::Blob.create_and_upload!( + io: Rails.root.join('spec/assets/avatar.png').open, + filename: 'avatar.png', + content_type: 'image/png' + ) + + params[:actions] = [ + { + 'action_name': :send_attachment, + 'action_params': [blob.signed_id] + } + ] + + post "/api/v1/accounts/#{account.id}/automation_rules", + headers: administrator.create_new_auth_token, + params: params + + automation_rule = account.automation_rules.first + attachment_action = automation_rule.actions.find { |a| a['action_name'] == 'send_attachment' } + expect(attachment_action['action_params'].first).to be_a(Integer) + expect(attachment_action['action_params'].first).to eq(automation_rule.files.first.blob_id) + end + end + end + + describe 'GET /api/v1/accounts/{account.id}/automation_rules/{automation_rule.id}' do + let!(:automation_rule) { create(:automation_rule, account: account, name: 'Test Automation Rule') } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/automation_rules/#{automation_rule.id}" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'returns for automation_rule for account' do + expect(account.automation_rules.count).to eq(1) + + get "/api/v1/accounts/#{account.id}/automation_rules/#{automation_rule.id}", + headers: administrator.create_new_auth_token + + expect(response).to have_http_status(:success) + body = JSON.parse(response.body, symbolize_names: true) + expect(body[:payload]).to be_present + expect(body[:payload][:id]).to eq(automation_rule.id) + end + end + end + + describe 'POST /api/v1/accounts/{account.id}/automation_rules/{automation_rule.id}/clone' do + let!(:automation_rule) { create(:automation_rule, account: account, name: 'Test Automation Rule') } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/automation_rules/#{automation_rule.id}/clone" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'returns for cloned automation_rule for account' do + expect(account.automation_rules.count).to eq(1) + + post "/api/v1/accounts/#{account.id}/automation_rules/#{automation_rule.id}/clone", + headers: administrator.create_new_auth_token + + expect(response).to have_http_status(:success) + body = JSON.parse(response.body, symbolize_names: true) + expect(body[:payload]).to be_present + expect(body[:payload][:id]).not_to eq(automation_rule.id) + expect(account.automation_rules.count).to eq(2) + end + end + end + + describe 'PATCH /api/v1/accounts/{account.id}/automation_rules/{automation_rule.id}' do + let!(:automation_rule) { create(:automation_rule, account: account, name: 'Test Automation Rule') } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + patch "/api/v1/accounts/#{account.id}/automation_rules/#{automation_rule.id}" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let(:update_params) do + { + 'description': 'Update description', + 'name': 'Update name', + 'conditions': [ + { + 'attribute_key': 'browser_language', + 'filter_operator': 'equal_to', + 'values': ['en'], + 'query_operator': 'AND' + } + ], + 'actions': [ + { + 'action_name': :add_label, + 'action_params': %w[support priority_customer] + } + ] + } + end + + it 'returns for cloned automation_rule for account' do + expect(account.automation_rules.count).to eq(1) + expect(account.automation_rules.first.actions.size).to eq(4) + + patch "/api/v1/accounts/#{account.id}/automation_rules/#{automation_rule.id}", + headers: administrator.create_new_auth_token, + params: update_params + + expect(response).to have_http_status(:success) + body = JSON.parse(response.body, symbolize_names: true) + expect(body[:payload][:name]).to eq('Update name') + expect(body[:payload][:description]).to eq('Update description') + expect(body[:payload][:conditions].size).to eq(1) + expect(body[:payload][:actions].size).to eq(1) + end + + it 'returns for updated active flag for automation_rule' do + expect(automation_rule.active).to be(true) + params = { active: false } + + patch "/api/v1/accounts/#{account.id}/automation_rules/#{automation_rule.id}", + headers: administrator.create_new_auth_token, + params: params + + expect(response).to have_http_status(:success) + body = JSON.parse(response.body, symbolize_names: true) + expect(body[:payload][:active]).to be(false) + expect(automation_rule.reload.active).to be(false) + end + + it 'allows update with existing blob_id' do + blob = ActiveStorage::Blob.create_and_upload!( + io: Rails.root.join('spec/assets/avatar.png').open, + filename: 'avatar.png', + content_type: 'image/png' + ) + + automation_rule.update!(actions: [{ 'action_name' => 'send_attachment', 'action_params' => [blob.id] }]) + automation_rule.files.attach(blob) + + update_params[:actions] = [ + { + 'action_name': :send_attachment, + 'action_params': [blob.id] + } + ] + + patch "/api/v1/accounts/#{account.id}/automation_rules/#{automation_rule.id}", + headers: administrator.create_new_auth_token, + params: update_params + + expect(response).to have_http_status(:success) + end + + it 'returns error for invalid blob_id on update' do + update_params[:actions] = [ + { + 'action_name': :send_attachment, + 'action_params': [999_999] + } + ] + + patch "/api/v1/accounts/#{account.id}/automation_rules/#{automation_rule.id}", + headers: administrator.create_new_auth_token, + params: update_params + + expect(response).to have_http_status(:unprocessable_entity) + expect(response.parsed_body['error']).to eq(I18n.t('errors.attachments.invalid')) + end + + it 'allows adding new attachment on update with signed blob_id' do + blob = ActiveStorage::Blob.create_and_upload!( + io: Rails.root.join('spec/assets/avatar.png').open, + filename: 'avatar.png', + content_type: 'image/png' + ) + + update_params[:actions] = [ + { + 'action_name': :send_attachment, + 'action_params': [blob.signed_id] + } + ] + + patch "/api/v1/accounts/#{account.id}/automation_rules/#{automation_rule.id}", + headers: administrator.create_new_auth_token, + params: update_params + + expect(response).to have_http_status(:success) + expect(automation_rule.reload.files.count).to eq(1) + end + end + end + + describe 'DELETE /api/v1/accounts/{account.id}/automation_rules/{automation_rule.id}' do + let!(:automation_rule) { create(:automation_rule, account: account, name: 'Test Automation Rule') } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + delete "/api/v1/accounts/#{account.id}/automation_rules/#{automation_rule.id}" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'delete the automation_rule for account' do + expect(account.automation_rules.count).to eq(1) + + delete "/api/v1/accounts/#{account.id}/automation_rules/#{automation_rule.id}", + headers: administrator.create_new_auth_token + + expect(response).to have_http_status(:success) + expect(account.automation_rules.count).to eq(0) + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/bulk_actions_controller_spec.rb b/spec/controllers/api/v1/accounts/bulk_actions_controller_spec.rb new file mode 100644 index 0000000..1ab490a --- /dev/null +++ b/spec/controllers/api/v1/accounts/bulk_actions_controller_spec.rb @@ -0,0 +1,273 @@ +require 'rails_helper' + +RSpec.describe 'Api::V1::Accounts::BulkActionsController', type: :request do + include ActiveJob::TestHelper + let(:account) { create(:account) } + let(:agent_1) { create(:user, account: account, role: :agent) } + let(:agent_2) { create(:user, account: account, role: :agent) } + let(:team_1) { create(:team, account: account) } + + before do + create(:conversation, account_id: account.id, status: :open, team_id: team_1.id) + create(:conversation, account_id: account.id, status: :open, team_id: team_1.id) + create(:conversation, account_id: account.id, status: :open) + create(:conversation, account_id: account.id, status: :open) + Conversation.all.find_each do |conversation| + create(:inbox_member, inbox: conversation.inbox, user: agent_1) + create(:inbox_member, inbox: conversation.inbox, user: agent_2) + end + end + + describe 'POST /api/v1/accounts/{account.id}/bulk_action' do + context 'when it is an unauthenticated user' do + let!(:agent) { create(:user) } + + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/bulk_actions", + headers: agent.create_new_auth_token, + params: { type: 'Conversation', fields: { status: 'open' }, ids: [1, 2, 3] } + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let!(:agent) { create(:user, account: account, role: :agent) } + + it 'Ignores bulk_actions for wrong type' do + post "/api/v1/accounts/#{account.id}/bulk_actions", + headers: agent.create_new_auth_token, + params: { type: 'Test', fields: { status: 'snoozed' }, ids: %w[1 2 3] } + + expect(response).to have_http_status(:unprocessable_entity) + end + + it 'Bulk update conversation status' do + expect(Conversation.first.status).to eq('open') + expect(Conversation.last.status).to eq('open') + expect(Conversation.first.assignee_id).to be_nil + + perform_enqueued_jobs do + post "/api/v1/accounts/#{account.id}/bulk_actions", + headers: agent.create_new_auth_token, + params: { type: 'Conversation', fields: { status: 'snoozed' }, ids: Conversation.first(3).pluck(:display_id) } + + expect(response).to have_http_status(:success) + end + + expect(Conversation.first.status).to eq('snoozed') + expect(Conversation.last.status).to eq('open') + expect(Conversation.first.assignee_id).to be_nil + end + + it 'Bulk update conversation team id to none' do + params = { type: 'Conversation', fields: { team_id: 0 }, ids: Conversation.first(1).pluck(:display_id) } + expect(Conversation.first.team).not_to be_nil + + perform_enqueued_jobs do + post "/api/v1/accounts/#{account.id}/bulk_actions", + headers: agent.create_new_auth_token, + params: params + + expect(response).to have_http_status(:success) + end + + expect(Conversation.first.team).to be_nil + + last_activity_message = Conversation.first.messages.activity.last + + expect(last_activity_message.content).to eq("Unassigned from #{team_1.name} by #{agent.name}") + end + + it 'Bulk update conversation team id to team' do + params = { type: 'Conversation', fields: { team_id: team_1.id }, ids: Conversation.last(2).pluck(:display_id) } + expect(Conversation.last.team_id).to be_nil + + perform_enqueued_jobs do + post "/api/v1/accounts/#{account.id}/bulk_actions", + headers: agent.create_new_auth_token, + params: params + + expect(response).to have_http_status(:success) + end + + expect(Conversation.last.team).to eq(team_1) + + last_activity_message = Conversation.last.messages.activity.last + + expect(last_activity_message.content).to eq("Assigned to #{team_1.name} by #{agent.name}") + end + + it 'Bulk update conversation assignee id' do + params = { type: 'Conversation', fields: { assignee_id: agent_1.id }, ids: Conversation.first(3).pluck(:display_id) } + + expect(Conversation.first.status).to eq('open') + expect(Conversation.first.assignee_id).to be_nil + expect(Conversation.second.assignee_id).to be_nil + + perform_enqueued_jobs do + post "/api/v1/accounts/#{account.id}/bulk_actions", + headers: agent.create_new_auth_token, + params: params + + expect(response).to have_http_status(:success) + end + + expect(Conversation.first.assignee_id).to eq(agent_1.id) + expect(Conversation.second.assignee_id).to eq(agent_1.id) + expect(Conversation.first.status).to eq('open') + end + + it 'Bulk remove assignee id from conversations' do + Conversation.first.update(assignee_id: agent_1.id) + Conversation.second.update(assignee_id: agent_2.id) + params = { type: 'Conversation', fields: { assignee_id: nil }, ids: Conversation.first(3).pluck(:display_id) } + + expect(Conversation.first.status).to eq('open') + expect(Conversation.first.assignee_id).to eq(agent_1.id) + expect(Conversation.second.assignee_id).to eq(agent_2.id) + + perform_enqueued_jobs do + post "/api/v1/accounts/#{account.id}/bulk_actions", + headers: agent.create_new_auth_token, + params: params + + expect(response).to have_http_status(:success) + end + + expect(Conversation.first.assignee_id).to be_nil + expect(Conversation.second.assignee_id).to be_nil + expect(Conversation.first.status).to eq('open') + end + + it 'Do not bulk update status to nil' do + Conversation.first.update(assignee_id: agent_1.id) + Conversation.second.update(assignee_id: agent_2.id) + params = { type: 'Conversation', fields: { status: nil }, ids: Conversation.first(3).pluck(:display_id) } + + expect(Conversation.first.status).to eq('open') + + perform_enqueued_jobs do + post "/api/v1/accounts/#{account.id}/bulk_actions", + headers: agent.create_new_auth_token, + params: params + + expect(response).to have_http_status(:success) + end + + expect(Conversation.first.status).to eq('open') + end + + it 'Bulk update conversation status and assignee id' do + params = { type: 'Conversation', fields: { assignee_id: agent_1.id, status: 'snoozed' }, ids: Conversation.first(3).pluck(:display_id) } + + expect(Conversation.first.status).to eq('open') + expect(Conversation.second.assignee_id).to be_nil + + perform_enqueued_jobs do + post "/api/v1/accounts/#{account.id}/bulk_actions", + headers: agent.create_new_auth_token, + params: params + + expect(response).to have_http_status(:success) + end + + expect(Conversation.first.assignee_id).to eq(agent_1.id) + expect(Conversation.second.assignee_id).to eq(agent_1.id) + expect(Conversation.first.status).to eq('snoozed') + expect(Conversation.second.status).to eq('snoozed') + end + + it 'Bulk update conversation labels' do + params = { type: 'Conversation', ids: Conversation.first(3).pluck(:display_id), labels: { add: %w[support priority_customer] } } + + expect(Conversation.first.labels).to eq([]) + expect(Conversation.second.labels).to eq([]) + + perform_enqueued_jobs do + post "/api/v1/accounts/#{account.id}/bulk_actions", + headers: agent.create_new_auth_token, + params: params + + expect(response).to have_http_status(:success) + end + + expect(Conversation.first.label_list).to contain_exactly('support', 'priority_customer') + expect(Conversation.second.label_list).to contain_exactly('support', 'priority_customer') + end + end + end + + describe 'POST /api/v1/accounts/{account.id}/bulk_actions' do + context 'when it is an authenticated user' do + let!(:agent) { create(:user, account: account, role: :agent) } + + it 'Bulk delete conversation labels' do + Conversation.first.add_labels(%w[support priority_customer]) + Conversation.second.add_labels(%w[support priority_customer]) + Conversation.third.add_labels(%w[support priority_customer]) + + params = { type: 'Conversation', ids: Conversation.first(3).pluck(:display_id), labels: { remove: %w[support] } } + + expect(Conversation.first.label_list).to contain_exactly('support', 'priority_customer') + expect(Conversation.second.label_list).to contain_exactly('support', 'priority_customer') + + perform_enqueued_jobs do + post "/api/v1/accounts/#{account.id}/bulk_actions", + headers: agent.create_new_auth_token, + params: params + + expect(response).to have_http_status(:success) + end + + expect(Conversation.first.label_list).to contain_exactly('priority_customer') + expect(Conversation.second.label_list).to contain_exactly('priority_customer') + end + end + end + + describe 'POST /api/v1/accounts/{account.id}/bulk_actions (contacts)' do + context 'when it is an authenticated user' do + let!(:agent) { create(:user, account: account, role: :agent) } + + it 'enqueues Contacts::BulkActionJob with permitted params' do + contact_one = create(:contact, account: account) + contact_two = create(:contact, account: account) + + expect do + post "/api/v1/accounts/#{account.id}/bulk_actions", + headers: agent.create_new_auth_token, + params: { + type: 'Contact', + ids: [contact_one.id, contact_two.id], + labels: { add: %w[vip support] }, + extra: 'ignored' + } + end.to have_enqueued_job(Contacts::BulkActionJob).with( + account.id, + agent.id, + hash_including( + 'ids' => [contact_one.id.to_s, contact_two.id.to_s], + 'labels' => hash_including('add' => %w[vip support]) + ) + ) + + expect(response).to have_http_status(:success) + end + + it 'returns unauthorized for delete action when user is not admin' do + contact = create(:contact, account: account) + + post "/api/v1/accounts/#{account.id}/bulk_actions", + headers: agent.create_new_auth_token, + params: { + type: 'Contact', + ids: [contact.id], + action_name: 'delete' + } + + expect(response).to have_http_status(:unauthorized) + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/callbacks_controller_spec.rb b/spec/controllers/api/v1/accounts/callbacks_controller_spec.rb new file mode 100644 index 0000000..477ca4f --- /dev/null +++ b/spec/controllers/api/v1/accounts/callbacks_controller_spec.rb @@ -0,0 +1,134 @@ +require 'rails_helper' + +RSpec.describe 'Callbacks API', type: :request do + before do + stub_request(:any, /graph.facebook.com/) + # Mock new and return instance doubles defined above + allow(Koala::Facebook::OAuth).to receive(:new).and_return(koala_oauth) + allow(Koala::Facebook::API).to receive(:new).and_return(koala_api) + + allow(Facebook::Messenger::Subscriptions).to receive(:subscribe).and_return(true) + allow(koala_api).to receive(:get_connections).and_return( + [{ 'id' => facebook_page.page_id, 'access_token' => SecureRandom.hex(10) }] + ) + allow(koala_oauth).to receive(:exchange_access_token_info).and_return('access_token' => SecureRandom.hex(10)) + end + + let(:account) { create(:account) } + let!(:facebook_page) { create(:channel_facebook_page, inbox: inbox, account: account) } + let(:valid_params) { attributes_for(:channel_facebook_page).merge(inbox_name: 'Test Inbox') } + let(:inbox) { create(:inbox, account: account) } + + # Doubles + let(:koala_api) { instance_double(Koala::Facebook::API) } + let(:koala_oauth) { instance_double(Koala::Facebook::OAuth) } + + describe 'POST /api/v1/accounts/{account.id}/callbacks/register_facebook_page' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/callbacks/register_facebook_page" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let(:admin) { create(:user, account: account, role: :administrator) } + + it 'registers a new facebook page with no avatar' do + post "/api/v1/accounts/#{account.id}/callbacks/register_facebook_page", + headers: admin.create_new_auth_token, + params: valid_params, + as: :json + + expect(response).to have_http_status(:success) + end + + it 'registers a new facebook page with avatar' do + buf = OpenURI::Buffer.new + io = buf.io + io.base_uri = URI.parse('https://example.org') + allow_any_instance_of(URI::HTTP).to receive(:open).and_return(io) # rubocop:disable RSpec/AnyInstance + + post "/api/v1/accounts/#{account.id}/callbacks/register_facebook_page", + headers: admin.create_new_auth_token, + params: valid_params, + as: :json + + expect(response).to have_http_status(:success) + end + + it 'registers a new facebook page with avatar on redirect' do + allow_any_instance_of(URI::HTTP).to receive(:open).and_raise(OpenURI::HTTPRedirect.new(nil, nil, URI.parse('https://example.org'))) # rubocop:disable RSpec/AnyInstance + + post "/api/v1/accounts/#{account.id}/callbacks/register_facebook_page", + headers: admin.create_new_auth_token, + params: valid_params, + as: :json + + expect(response).to have_http_status(:success) + end + end + end + + describe 'POST /api/v1/accounts/{account.id}/callbacks/facebook_pages' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/callbacks/facebook_pages" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let(:admin) { create(:user, account: account, role: :administrator) } + + it 'returns facebook pages of account' do + post "/api/v1/accounts/#{account.id}/callbacks/facebook_pages", + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(response.body).to include(facebook_page.page_id.to_s) + end + end + end + + describe 'POST /api/v1/accounts/{account.id}/callbacks/reauthorize_page' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/callbacks/reauthorize_page" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let(:admin) { create(:user, account: account, role: :administrator) } + + it 'reauthorizes the page' do + params = { inbox_id: inbox.id } + + post "/api/v1/accounts/#{account.id}/callbacks/reauthorize_page", + headers: admin.create_new_auth_token, + params: params, + as: :json + + expect(response).to have_http_status(:success) + expect(response.body).to include(inbox.id.to_s) + end + + it 'returns unprocessable_entity if no page found' do + allow(koala_api).to receive(:get_connections).and_return([]) + params = { inbox_id: inbox.id } + + post "/api/v1/accounts/#{account.id}/callbacks/reauthorize_page", + headers: admin.create_new_auth_token, + params: params, + as: :json + + expect(response).to have_http_status(:unprocessable_entity) + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/campaigns_controller_spec.rb b/spec/controllers/api/v1/accounts/campaigns_controller_spec.rb new file mode 100644 index 0000000..f33a66d --- /dev/null +++ b/spec/controllers/api/v1/accounts/campaigns_controller_spec.rb @@ -0,0 +1,230 @@ +require 'rails_helper' + +RSpec.describe 'Campaigns API', type: :request do + let(:account) { create(:account) } + + describe 'GET /api/v1/accounts/{account.id}/campaigns' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/campaigns" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let(:agent) { create(:user, account: account, role: :agent) } + let(:administrator) { create(:user, account: account, role: :administrator) } + let(:inbox) { create(:inbox, account: account) } + let!(:campaign) { create(:campaign, account: account, inbox: inbox, trigger_rules: { url: 'https://test.com' }) } + + it 'returns unauthorized for agents' do + get "/api/v1/accounts/#{account.id}/campaigns", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + + it 'returns all campaigns to administrators' do + get "/api/v1/accounts/#{account.id}/campaigns", + headers: administrator.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + body = JSON.parse(response.body, symbolize_names: true) + expect(body.first[:id]).to eq(campaign.display_id) + end + end + end + + describe 'GET /api/v1/accounts/{account.id}/campaigns/:id' do + let(:campaign) { create(:campaign, account: account, trigger_rules: { url: 'https://test.com' }) } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/campaigns/#{campaign.display_id}" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let(:agent) { create(:user, account: account, role: :agent) } + let(:administrator) { create(:user, account: account, role: :administrator) } + + it 'returns unauthorized for agents' do + get "/api/v1/accounts/#{account.id}/campaigns/#{campaign.display_id}", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + + it 'shows the campaign for administrators' do + get "/api/v1/accounts/#{account.id}/campaigns/#{campaign.display_id}", + headers: administrator.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(JSON.parse(response.body, symbolize_names: true)[:id]).to eq(campaign.display_id) + end + end + end + + describe 'POST /api/v1/accounts/{account.id}/campaigns' do + let(:inbox) { create(:inbox, account: account) } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/campaigns", + params: { inbox_id: inbox.id, title: 'test', message: 'test message' }, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let(:agent) { create(:user, account: account, role: :agent) } + let(:administrator) { create(:user, account: account, role: :administrator) } + + it 'returns unauthorized for agents' do + post "/api/v1/accounts/#{account.id}/campaigns", + params: { inbox_id: inbox.id, title: 'test', message: 'test message' }, + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + + it 'creates a new campaign' do + post "/api/v1/accounts/#{account.id}/campaigns", + params: { inbox_id: inbox.id, title: 'test', message: 'test message' }, + headers: administrator.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(JSON.parse(response.body, symbolize_names: true)[:title]).to eq('test') + end + + it 'creates a new ongoing campaign' do + post "/api/v1/accounts/#{account.id}/campaigns", + params: { inbox_id: inbox.id, title: 'test', message: 'test message', trigger_rules: { url: 'https://test.com' } }, + headers: administrator.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(JSON.parse(response.body, symbolize_names: true)[:title]).to eq('test') + end + + it 'throws error when invalid url provided for ongoing campaign' do + post "/api/v1/accounts/#{account.id}/campaigns", + params: { inbox_id: inbox.id, title: 'test', message: 'test message', trigger_rules: { url: 'javascript' } }, + headers: administrator.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:unprocessable_entity) + end + + it 'creates a new oneoff campaign' do + twilio_sms = create(:channel_twilio_sms, account: account) + twilio_inbox = create(:inbox, channel: twilio_sms, account: account) + label1 = create(:label, account: account) + label2 = create(:label, account: account) + scheduled_at = 2.days.from_now + + post "/api/v1/accounts/#{account.id}/campaigns", + params: { + inbox_id: twilio_inbox.id, title: 'test', message: 'test message', + scheduled_at: scheduled_at, + audience: [{ type: 'Label', id: label1.id }, { type: 'Label', id: label2.id }] + }, + headers: administrator.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + response_data = JSON.parse(response.body, symbolize_names: true) + expect(response_data[:campaign_type]).to eq('one_off') + expect(response_data[:scheduled_at].present?).to be true + expect(response_data[:scheduled_at]).to eq(scheduled_at.to_i) + expect(response_data[:audience].pluck(:id)).to include(label1.id, label2.id) + end + end + end + + describe 'PATCH /api/v1/accounts/{account.id}/campaigns/:id' do + let(:inbox) { create(:inbox, account: account) } + let!(:campaign) { create(:campaign, account: account, trigger_rules: { url: 'https://test.com' }) } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + patch "/api/v1/accounts/#{account.id}/campaigns/#{campaign.display_id}", + params: { inbox_id: inbox.id, title: 'test', message: 'test message' }, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let(:agent) { create(:user, account: account, role: :agent) } + let(:administrator) { create(:user, account: account, role: :administrator) } + + it 'returns unauthorized for agents' do + patch "/api/v1/accounts/#{account.id}/campaigns/#{campaign.display_id}", + params: { inbox_id: inbox.id, title: 'test', message: 'test message' }, + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + + it 'updates the campaign' do + patch "/api/v1/accounts/#{account.id}/campaigns/#{campaign.display_id}", + params: { inbox_id: inbox.id, title: 'test', message: 'test message' }, + headers: administrator.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(JSON.parse(response.body, symbolize_names: true)[:title]).to eq('test') + end + end + end + + describe 'DELETE /api/v1/accounts/{account.id}/campaigns/:id' do + let(:inbox) { create(:inbox, account: account) } + let!(:campaign) { create(:campaign, account: account, trigger_rules: { url: 'https://test.com' }) } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + delete "/api/v1/accounts/#{account.id}/campaigns/#{campaign.display_id}", + as: :json + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let(:agent) { create(:user, account: account, role: :agent) } + let(:administrator) { create(:user, account: account, role: :administrator) } + + it 'return unauthorized if agent' do + delete "/api/v1/accounts/#{account.id}/campaigns/#{campaign.display_id}", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + + it 'delete campaign if admin' do + delete "/api/v1/accounts/#{account.id}/campaigns/#{campaign.display_id}", + headers: administrator.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(Campaign.exists?(campaign.display_id)).to be false + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/canned_responses_controller_spec.rb b/spec/controllers/api/v1/accounts/canned_responses_controller_spec.rb new file mode 100644 index 0000000..45c99f1 --- /dev/null +++ b/spec/controllers/api/v1/accounts/canned_responses_controller_spec.rb @@ -0,0 +1,130 @@ +require 'rails_helper' + +RSpec.describe 'Canned Responses API', type: :request do + let(:account) { create(:account) } + + before do + create(:canned_response, account: account, content: 'Hey {{ contact.name }}, Thanks for reaching out', short_code: 'name-short-code') + end + + describe 'GET /api/v1/accounts/{account.id}/canned_responses' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/canned_responses" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let(:agent) { create(:user, account: account, role: :agent) } + + it 'returns all the canned responses' do + get "/api/v1/accounts/#{account.id}/canned_responses", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(response.parsed_body).to eq(account.canned_responses.as_json) + end + + it 'returns all the canned responses the user searched for' do + cr1 = account.canned_responses.first + create(:canned_response, account: account, content: 'Great! Looking forward', short_code: 'short-code') + cr2 = create(:canned_response, account: account, content: 'Thanks for reaching out', short_code: 'content-with-thanks') + cr3 = create(:canned_response, account: account, content: 'Thanks for reaching out', short_code: 'Thanks') + + params = { search: 'thanks' } + + get "/api/v1/accounts/#{account.id}/canned_responses", + params: params, + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(response.parsed_body).to eq( + [cr3, cr2, cr1].as_json + ) + end + end + end + + describe 'POST /api/v1/accounts/{account.id}/canned_responses' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/canned_responses" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let(:agent) { create(:user, account: account, role: :agent) } + + it 'creates a new canned response' do + params = { short_code: 'short', content: 'content' } + + post "/api/v1/accounts/#{account.id}/canned_responses", + params: params, + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(account.canned_responses.count).to eq(2) + end + end + end + + describe 'PUT /api/v1/accounts/{account.id}/canned_responses/:id' do + let(:canned_response) { CannedResponse.last } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + put "/api/v1/accounts/#{account.id}/canned_responses/#{canned_response.id}" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let(:agent) { create(:user, account: account, role: :agent) } + + it 'updates an existing canned response' do + params = { short_code: 'B' } + + put "/api/v1/accounts/#{account.id}/canned_responses/#{canned_response.id}", + params: params, + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(canned_response.reload.short_code).to eq('B') + end + end + end + + describe 'DELETE /api/v1/accounts/{account.id}/canned_responses/:id' do + let(:canned_response) { CannedResponse.last } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + delete "/api/v1/accounts/#{account.id}/canned_responses/#{canned_response.id}" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let(:agent) { create(:user, account: account, role: :agent) } + + it 'destroys the canned response' do + delete "/api/v1/accounts/#{account.id}/canned_responses/#{canned_response.id}", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(CannedResponse.count).to eq(0) + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/captain/preferences_controller_spec.rb b/spec/controllers/api/v1/accounts/captain/preferences_controller_spec.rb new file mode 100644 index 0000000..c06f3c8 --- /dev/null +++ b/spec/controllers/api/v1/accounts/captain/preferences_controller_spec.rb @@ -0,0 +1,153 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Api::V1::Accounts::Captain::Preferences', type: :request do + let(:account) { create(:account) } + let(:admin) { create(:user, account: account, role: :administrator) } + let(:agent) { create(:user, account: account, role: :agent) } + + def json_response + JSON.parse(response.body, symbolize_names: true) + end + + describe 'GET /api/v1/accounts/{account.id}/captain/preferences' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/captain/preferences", + as: :json + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an agent' do + it 'returns captain config' do + get "/api/v1/accounts/#{account.id}/captain/preferences", + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(json_response).to have_key(:providers) + expect(json_response).to have_key(:models) + expect(json_response).to have_key(:features) + end + end + + context 'when it is an admin' do + it 'returns captain config' do + get "/api/v1/accounts/#{account.id}/captain/preferences", + headers: admin.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(json_response).to have_key(:providers) + expect(json_response).to have_key(:models) + expect(json_response).to have_key(:features) + end + end + end + + describe 'PUT /api/v1/accounts/{account.id}/captain/preferences' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + put "/api/v1/accounts/#{account.id}/captain/preferences", + params: { captain_models: { editor: 'gpt-4.1-mini' } }, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an agent' do + it 'returns forbidden' do + put "/api/v1/accounts/#{account.id}/captain/preferences", + headers: agent.create_new_auth_token, + params: { captain_models: { editor: 'gpt-4.1-mini' } }, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an admin' do + it 'updates captain_models' do + put "/api/v1/accounts/#{account.id}/captain/preferences", + headers: admin.create_new_auth_token, + params: { captain_models: { editor: 'gpt-4.1-mini' } }, + as: :json + + expect(response).to have_http_status(:success) + expect(json_response).to have_key(:providers) + expect(json_response).to have_key(:models) + expect(json_response).to have_key(:features) + expect(account.reload.captain_models['editor']).to eq('gpt-4.1-mini') + end + + it 'updates captain_features' do + put "/api/v1/accounts/#{account.id}/captain/preferences", + headers: admin.create_new_auth_token, + params: { captain_features: { editor: true } }, + as: :json + + expect(response).to have_http_status(:success) + expect(json_response).to have_key(:providers) + expect(json_response).to have_key(:models) + expect(json_response).to have_key(:features) + expect(account.reload.captain_features['editor']).to be true + end + + it 'merges with existing captain_models' do + account.update!(captain_models: { 'editor' => 'gpt-4.1-mini', 'assistant' => 'gpt-5.1' }) + + put "/api/v1/accounts/#{account.id}/captain/preferences", + headers: admin.create_new_auth_token, + params: { captain_models: { editor: 'gpt-4.1' } }, + as: :json + + expect(response).to have_http_status(:success) + expect(json_response).to have_key(:providers) + expect(json_response).to have_key(:models) + expect(json_response).to have_key(:features) + models = account.reload.captain_models + expect(models['editor']).to eq('gpt-4.1') + expect(models['assistant']).to eq('gpt-5.1') # Preserved + end + + it 'merges with existing captain_features' do + account.update!(captain_features: { 'editor' => true, 'assistant' => false }) + + put "/api/v1/accounts/#{account.id}/captain/preferences", + headers: admin.create_new_auth_token, + params: { captain_features: { editor: false } }, + as: :json + + expect(response).to have_http_status(:success) + expect(json_response).to have_key(:providers) + expect(json_response).to have_key(:models) + expect(json_response).to have_key(:features) + features = account.reload.captain_features + expect(features['editor']).to be false + expect(features['assistant']).to be false # Preserved + end + + it 'updates both models and features in single request' do + put "/api/v1/accounts/#{account.id}/captain/preferences", + headers: admin.create_new_auth_token, + params: { + captain_models: { editor: 'gpt-4.1-mini' }, + captain_features: { editor: true } + }, + as: :json + + expect(response).to have_http_status(:success) + expect(json_response).to have_key(:providers) + expect(json_response).to have_key(:models) + expect(json_response).to have_key(:features) + account.reload + expect(account.captain_models['editor']).to eq('gpt-4.1-mini') + expect(account.captain_features['editor']).to be true + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/categories_controller_spec.rb b/spec/controllers/api/v1/accounts/categories_controller_spec.rb new file mode 100644 index 0000000..48cc001 --- /dev/null +++ b/spec/controllers/api/v1/accounts/categories_controller_spec.rb @@ -0,0 +1,264 @@ +require 'rails_helper' + +RSpec.describe 'Api::V1::Accounts::Categories', type: :request do + let(:account) { create(:account) } + let(:agent) { create(:user, account: account, role: :agent) } + let(:admin) { create(:user, account: account, role: :administrator) } + let!(:portal) { create(:portal, name: 'test_portal', account_id: account.id, config: { allowed_locales: %w[en es] }) } + let!(:category) { create(:category, name: 'category', portal: portal, account_id: account.id, slug: 'category_slug', position: 1) } + let!(:category_to_associate) do + create(:category, name: 'associated category', portal: portal, account_id: account.id, slug: 'associated_category_slug', position: 2) + end + let!(:related_category_1) do + create(:category, name: 'related category 1', portal: portal, account_id: account.id, slug: 'category_slug_1', position: 3) + end + let!(:related_category_2) do + create(:category, name: 'related category 2', portal: portal, account_id: account.id, slug: 'category_slug_2', position: 4) + end + + describe 'POST /api/v1/accounts/{account.id}/portals/{portal.slug}/categories' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories", params: {} + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let!(:category_params) do + { + category: { + name: 'test_category', + description: 'test_description', + position: 5, + locale: 'es', + slug: 'test_category_1', + parent_category_id: category.id, + associated_category_id: category_to_associate.id, + related_category_ids: [related_category_1.id, related_category_2.id] + } + } + end + + let!(:category_params_2) do + { + category: { + name: 'test_category_2', + description: 'test_description_2', + position: 6, + locale: 'es', + slug: 'test_category_2', + parent_category_id: category.id, + associated_category_id: category_to_associate.id, + related_category_ids: [related_category_1.id, related_category_2.id] + } + } + end + + it 'creates category' do + post "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories", + params: category_params, + headers: admin.create_new_auth_token + expect(response).to have_http_status(:success) + + json_response = response.parsed_body + + expect(json_response['payload']['related_categories'][0]['id']).to eql(related_category_1.id) + expect(json_response['payload']['related_categories'][1]['id']).to eql(related_category_2.id) + expect(json_response['payload']['parent_category']['id']).to eql(category.id) + expect(json_response['payload']['root_category']['id']).to eql(category_to_associate.id) + expect(category.reload.sub_category_ids).to eql([Category.last.id]) + expect(category_to_associate.reload.associated_category_ids).to eql([Category.last.id]) + end + + it 'creates multiple sub_categories under one parent_category' do + post "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories", + params: category_params, + headers: admin.create_new_auth_token + + post "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories", + params: category_params_2, + headers: admin.create_new_auth_token + + expect(response).to have_http_status(:success) + expect(category.reload.sub_category_ids).to eql(Category.last(2).pluck(:id)) + end + + it 'creates multiple associated_categories with one category' do + post "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories", + params: category_params, + headers: admin.create_new_auth_token + + post "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories", + params: category_params_2, + headers: admin.create_new_auth_token + + expect(response).to have_http_status(:success) + expect(category_to_associate.reload.associated_category_ids).to eql(Category.last(2).pluck(:id)) + end + + it 'will throw an error on locale, category_id uniqueness' do + post "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories", + params: category_params, + headers: admin.create_new_auth_token + + post "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories", + params: category_params, + headers: admin.create_new_auth_token + expect(response).to have_http_status(:unprocessable_entity) + json_response = response.parsed_body + expect(json_response['message']).to eql('Locale should be unique in the category and portal') + end + + it 'will throw an error slug presence' do + category_params = { + category: { + name: 'test_category', + description: 'test_description', + position: 1, + locale: 'es' + } + } + + post "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories", + params: category_params, + headers: admin.create_new_auth_token + expect(response).to have_http_status(:unprocessable_entity) + json_response = response.parsed_body + + expect(json_response['message']).to eql("Slug can't be blank") + end + end + end + + describe 'PUT /api/v1/accounts/{account.id}/portals/{portal.slug}/categories/{category.id}' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + put "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories/#{category.id}", params: {} + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'updates category' do + category_params = { + category: { + name: 'test_category_2', + description: 'test_description', + position: 1, + related_category_ids: [related_category_1.id], + parent_category_id: related_category_2.id + } + } + + expect(category.name).not_to eql(category_params[:category][:name]) + expect(category.related_categories).to be_empty + expect(category.parent_category).to be_nil + + put "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories/#{category.id}", + params: category_params, + headers: admin.create_new_auth_token + + json_response = response.parsed_body + + expect(json_response['payload']['name']).to eql(category_params[:category][:name]) + expect(json_response['payload']['related_categories'][0]['id']).to eql(related_category_1.id) + expect(json_response['payload']['parent_category']['id']).to eql(related_category_2.id) + expect(related_category_2.reload.sub_category_ids).to eql([category.id]) + end + + it 'updates related categories' do + category_params = { + category: { + related_category_ids: [related_category_1.id] + } + } + category.related_categories << related_category_2 + category.save! + + expect(category.related_category_ids).to eq([related_category_2.id]) + + put "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories/#{category.id}", + params: category_params, + headers: admin.create_new_auth_token + + expect(response).to have_http_status(:success) + + json_response = response.parsed_body + + expect(json_response['payload']['name']).to eql(category.name) + expect(json_response['payload']['related_categories'][0]['id']).to eql(related_category_1.id) + expect(category.reload.related_category_ids).to eq([related_category_1.id]) + expect(related_category_1.reload.related_category_ids).to be_empty + expect(json_response['payload']['position']).to eql(category.position) + end + + # [category_1, category_2] !== [category_2, category_1] + it 'update reverse associations for related categories' do + category.related_categories << related_category_2 + category.save! + + expect(category.related_category_ids).to eq([related_category_2.id]) + + category_params = { + category: { + related_category_ids: [category.id] + } + } + + put "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories/#{related_category_2.id}", + params: category_params, + headers: admin.create_new_auth_token + + expect(response).to have_http_status(:success) + + expect(category.reload.related_category_ids).to eq([related_category_2.id]) + expect(related_category_2.reload.related_category_ids).to eq([category.id]) + end + end + end + + describe 'DELETE /api/v1/accounts/{account.id}/portals/{portal.slug}/categories/{category.id}' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + delete "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories/#{category.id}", params: {} + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'deletes category' do + delete "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories/#{category.id}", + headers: admin.create_new_auth_token + expect(response).to have_http_status(:success) + deleted_category = Category.find_by(id: category.id) + expect(deleted_category).to be_nil + end + end + end + + describe 'GET /api/v1/accounts/{account.id}/portals/{portal.slug}/categories' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories" + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + it 'get all categories in portal' do + category_count = Category.all.count + + category2 = create(:category, name: 'test_category_2', portal: portal, locale: 'es', slug: 'category_slug_2') + + expect(category2.id).not_to be_nil + + get "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/categories", + headers: admin.create_new_auth_token + expect(response).to have_http_status(:success) + json_response = response.parsed_body + expect(json_response['payload'].count).to be(category_count + 1) + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/channels/twilio_channels_controller_spec.rb b/spec/controllers/api/v1/accounts/channels/twilio_channels_controller_spec.rb new file mode 100644 index 0000000..8e3e45f --- /dev/null +++ b/spec/controllers/api/v1/accounts/channels/twilio_channels_controller_spec.rb @@ -0,0 +1,156 @@ +require 'rails_helper' + +RSpec.describe '/api/v1/accounts/{account.id}/channels/twilio_channel', type: :request do + let(:account) { create(:account) } + let(:admin) { create(:user, account: account, role: :administrator) } + let(:agent) { create(:user, account: account, role: :agent) } + let(:twilio_client) { instance_double(Twilio::REST::Client) } + let(:message_double) { double } + let(:twilio_webhook_setup_service) { instance_double(Twilio::WebhookSetupService) } + + before do + allow(Twilio::REST::Client).to receive(:new).and_return(twilio_client) + allow(Twilio::WebhookSetupService).to receive(:new).and_return(twilio_webhook_setup_service) + allow(twilio_webhook_setup_service).to receive(:perform) + end + + describe 'POST /api/v1/accounts/{account.id}/channels/twilio_channel' do + let(:params) do + { + twilio_channel: { + account_sid: 'sid', + auth_token: 'token', + phone_number: '', + messaging_service_sid: 'MGec8130512b5dd462cfe03095ec1342ed', + name: 'SMS Channel', + medium: 'sms' + } + } + end + + context 'when unauthenticated user' do + it 'returns unauthorized' do + post api_v1_account_channels_twilio_channel_path(account), params: params + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when user is logged in' do + context 'with user as administrator' do + it 'creates inbox and returns inbox object' do + allow(twilio_client).to receive(:messages).and_return(message_double) + allow(message_double).to receive(:list).and_return([]) + + post api_v1_account_channels_twilio_channel_path(account), + params: params, + headers: admin.create_new_auth_token + + expect(response).to have_http_status(:success) + json_response = response.parsed_body + + expect(json_response['name']).to eq('SMS Channel') + expect(json_response['messaging_service_sid']).to eq('MGec8130512b5dd462cfe03095ec1342ed') + end + + it 'creates inbox with blank phone number and returns inbox object' do + params = { + twilio_channel: { + account_sid: 'sid-1', + auth_token: 'token-1', + phone_number: '', + messaging_service_sid: 'MGec8130512b5dd462cfe03095ec1111ed', + name: 'SMS Channel', + medium: 'whatsapp' + } + } + allow(twilio_client).to receive(:messages).and_return(message_double) + allow(message_double).to receive(:list).and_return([]) + + post api_v1_account_channels_twilio_channel_path(account), + params: params, + headers: admin.create_new_auth_token + + expect(response).to have_http_status(:success) + json_response = response.parsed_body + + expect(json_response['messaging_service_sid']).to eq('MGec8130512b5dd462cfe03095ec1111ed') + end + + context 'with a phone number' do # rubocop:disable RSpec/NestedGroups + let(:params) do + { + twilio_channel: { + account_sid: 'sid', + auth_token: 'token', + phone_number: '+1234567890', + messaging_service_sid: '', + name: 'SMS Channel', + medium: 'sms' + } + } + end + + it 'creates inbox with empty messaging service sid and returns inbox object' do + allow(twilio_client).to receive(:messages).and_return(message_double) + allow(message_double).to receive(:list).and_return([]) + + post api_v1_account_channels_twilio_channel_path(account), + params: params, + headers: admin.create_new_auth_token + + expect(response).to have_http_status(:success) + json_response = response.parsed_body + + expect(json_response['name']).to eq('SMS Channel') + expect(json_response['phone_number']).to eq('+1234567890') + end + + it 'creates one more inbox with empty messaging service sid' do + params = { + twilio_channel: { + account_sid: 'sid-1', + auth_token: 'token-1', + phone_number: '+1224466880', + messaging_service_sid: '', + name: 'SMS Channel', + medium: 'whatsapp' + } + } + allow(twilio_client).to receive(:messages).and_return(message_double) + allow(message_double).to receive(:list).and_return([]) + + post api_v1_account_channels_twilio_channel_path(account), + params: params, + headers: admin.create_new_auth_token + + expect(response).to have_http_status(:success) + json_response = response.parsed_body + + expect(json_response['phone_number']).to eq('whatsapp:+1224466880') + end + end + + it 'return error if Twilio tokens are incorrect' do + allow(twilio_client).to receive(:messages).and_return(message_double) + allow(message_double).to receive(:list).and_raise(Twilio::REST::TwilioError) + + post api_v1_account_channels_twilio_channel_path(account), + params: params, + headers: admin.create_new_auth_token + + expect(response).to have_http_status(:unprocessable_entity) + end + end + + context 'with user as agent' do + it 'returns unauthorized' do + post api_v1_account_channels_twilio_channel_path(account), + params: params, + headers: agent.create_new_auth_token + + expect(response).to have_http_status(:unauthorized) + end + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/contact_inboxes_controller_spec.rb b/spec/controllers/api/v1/accounts/contact_inboxes_controller_spec.rb new file mode 100644 index 0000000..86deab7 --- /dev/null +++ b/spec/controllers/api/v1/accounts/contact_inboxes_controller_spec.rb @@ -0,0 +1,71 @@ +require 'rails_helper' + +RSpec.describe 'Contact Inboxes API', type: :request do + let(:account) { create(:account) } + + let(:inbox) { create(:inbox, account: account) } + let(:contact) { create(:contact, account: account) } + let!(:contact_inbox) { create(:contact_inbox, contact: contact, inbox: inbox) } + + describe 'POST /api/v1/accounts/{account.id}/contact_inboxes/filter' do + let(:admin) { create(:user, account: account, role: :administrator) } + + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/contact_inboxes/filter" + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated admin user' do + it 'returns not found if the params are invalid' do + post "/api/v1/accounts/#{account.id}/contact_inboxes/filter", + headers: admin.create_new_auth_token, + params: { inbox_id: inbox.id, source_id: 'random_source_id' }, + as: :json + + expect(response).to have_http_status(:not_found) + end + + it 'returns the contact if the params are valid' do + post "/api/v1/accounts/#{account.id}/contact_inboxes/filter", + headers: admin.create_new_auth_token, + params: { inbox_id: inbox.id, source_id: contact_inbox.source_id }, + as: :json + + expect(response).to have_http_status(:success) + response_body = response.parsed_body + expect(response_body['id']).to eq(contact.id) + expect(response_body['contact_inboxes'].first['source_id']).to eq(contact_inbox.source_id) + end + end + + context 'when it is an authenticated agent user' do + let(:agent_with_inbox_access) { create(:user, account: account, role: :agent) } + let(:agent_without_inbox_access) { create(:user, account: account, role: :agent) } + + before do + create(:inbox_member, user: agent_with_inbox_access, inbox: inbox) + end + + it 'returns unauthorized if agent does not have inbox access' do + post "/api/v1/accounts/#{account.id}/contact_inboxes/filter", + headers: agent_without_inbox_access.create_new_auth_token, + params: { inbox_id: inbox.id, source_id: contact_inbox.source_id }, + as: :json + + expect(response).to have_http_status(:unauthorized) + end + + it 'returns success if agent have inbox access' do + post "/api/v1/accounts/#{account.id}/contact_inboxes/filter", + headers: agent_with_inbox_access.create_new_auth_token, + params: { inbox_id: inbox.id, source_id: contact_inbox.source_id }, + as: :json + + expect(response).to have_http_status(:success) + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/contacts/contact_inboxes_controller_spec.rb b/spec/controllers/api/v1/accounts/contacts/contact_inboxes_controller_spec.rb new file mode 100644 index 0000000..659d41f --- /dev/null +++ b/spec/controllers/api/v1/accounts/contacts/contact_inboxes_controller_spec.rb @@ -0,0 +1,76 @@ +require 'rails_helper' + +RSpec.describe '/api/v1/accounts/{account.id}/contacts/:id/contact_inboxes', type: :request do + let(:account) { create(:account) } + let(:contact) { create(:contact, account: account, email: 'f.o.o.b.a.r@gmail.com') } + let(:channel_twilio_sms) { create(:channel_twilio_sms, account: account) } + let(:channel_email) { create(:channel_email, account: account) } + let(:channel_api) { create(:channel_api, account: account) } + let(:agent) { create(:user, account: account) } + + describe 'GET /api/v1/accounts/{account.id}/contacts/:id/contact_inboxes' do + context 'when unauthenticated user' do + it 'returns unauthorized' do + post "/api/v1/accounts/#{account.id}/contacts/#{contact.id}/contact_inboxes" + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when authenticated user with access to inbox' do + it 'creates a contact inbox' do + create(:inbox_member, inbox: channel_api.inbox, user: agent) + expect do + post "/api/v1/accounts/#{account.id}/contacts/#{contact.id}/contact_inboxes", + params: { inbox_id: channel_api.inbox.id }, + headers: agent.create_new_auth_token, + as: :json + end.to change(ContactInbox, :count).by(1) + + expect(response).to have_http_status(:success) + contact_inbox = contact.reload.contact_inboxes.find_by(inbox_id: channel_api.inbox.id) + expect(contact_inbox).to be_present + expect(contact_inbox.hmac_verified).to be(false) + end + + it 'creates a valid email contact inbox' do + create(:inbox_member, inbox: channel_email.inbox, user: agent) + expect do + post "/api/v1/accounts/#{account.id}/contacts/#{contact.id}/contact_inboxes", + params: { inbox_id: channel_email.inbox.id }, + headers: agent.create_new_auth_token, + as: :json + end.to change(ContactInbox, :count).by(1) + + expect(response).to have_http_status(:success) + expect(contact.reload.contact_inboxes.map(&:inbox_id)).to include(channel_email.inbox.id) + end + + it 'creates an hmac verified contact inbox' do + create(:inbox_member, inbox: channel_api.inbox, user: agent) + expect do + post "/api/v1/accounts/#{account.id}/contacts/#{contact.id}/contact_inboxes", + params: { inbox_id: channel_api.inbox.id, hmac_verified: true }, + headers: agent.create_new_auth_token, + as: :json + end.to change(ContactInbox, :count).by(1) + + expect(response).to have_http_status(:success) + contact_inbox = contact.reload.contact_inboxes.find_by(inbox_id: channel_api.inbox.id) + expect(contact_inbox).to be_present + expect(contact_inbox.hmac_verified).to be(true) + end + + it 'throws error for invalid source id' do + create(:inbox_member, inbox: channel_twilio_sms.inbox, user: agent) + expect do + post "/api/v1/accounts/#{account.id}/contacts/#{contact.id}/contact_inboxes", + params: { inbox_id: channel_twilio_sms.inbox.id }, + headers: agent.create_new_auth_token, + as: :json + end.not_to change(ContactInbox, :count) + + expect(response).to have_http_status(:unprocessable_entity) + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/contacts/conversations_controller_spec.rb b/spec/controllers/api/v1/accounts/contacts/conversations_controller_spec.rb new file mode 100644 index 0000000..da7764d --- /dev/null +++ b/spec/controllers/api/v1/accounts/contacts/conversations_controller_spec.rb @@ -0,0 +1,65 @@ +require 'rails_helper' + +RSpec.describe '/api/v1/accounts/{account.id}/contacts/:id/conversations', type: :request do + let(:account) { create(:account) } + let(:contact) { create(:contact, account: account) } + let(:inbox_1) { create(:inbox, account: account) } + let(:inbox_2) { create(:inbox, account: account) } + let(:contact_inbox_1) { create(:contact_inbox, contact: contact, inbox: inbox_1) } + let(:contact_inbox_2) { create(:contact_inbox, contact: contact, inbox: inbox_2) } + let(:admin) { create(:user, account: account, role: :administrator) } + let(:agent) { create(:user, account: account, role: :agent) } + let(:unknown) { create(:user, account: account, role: nil) } + + before do + create(:inbox_member, user: agent, inbox: inbox_1) + 2.times.each do + create(:conversation, account: account, inbox: inbox_1, contact: contact, contact_inbox: contact_inbox_1) + create(:conversation, account: account, inbox: inbox_2, contact: contact, contact_inbox: contact_inbox_2) + end + end + + describe 'GET /api/v1/accounts/{account.id}/contacts/:id/conversations' do + context 'when unauthenticated user' do + it 'returns unauthorized' do + get "/api/v1/accounts/#{account.id}/contacts/#{contact.id}/conversations" + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when user is logged in' do + context 'with user as administrator' do + it 'returns conversations from all inboxes' do + get "/api/v1/accounts/#{account.id}/contacts/#{contact.id}/conversations", headers: admin.create_new_auth_token + + expect(response).to have_http_status(:success) + json_response = response.parsed_body + + expect(json_response['payload'].length).to eq 4 + end + end + + context 'with user as agent' do + it 'returns conversations from the inboxes which agent has access to' do + get "/api/v1/accounts/#{account.id}/contacts/#{contact.id}/conversations", headers: agent.create_new_auth_token + + expect(response).to have_http_status(:success) + json_response = response.parsed_body + + expect(json_response['payload'].length).to eq 2 + end + end + + context 'with user as unknown role' do + it 'returns conversations from no inboxes' do + get "/api/v1/accounts/#{account.id}/contacts/#{contact.id}/conversations", headers: unknown.create_new_auth_token + + expect(response).to have_http_status(:success) + json_response = response.parsed_body + + expect(json_response['payload'].length).to eq 0 + end + end + end + end +end diff --git a/spec/controllers/api/v1/accounts/contacts/labels_controller_spec.rb b/spec/controllers/api/v1/accounts/contacts/labels_controller_spec.rb new file mode 100644 index 0000000..77d8f39 --- /dev/null +++ b/spec/controllers/api/v1/accounts/contacts/labels_controller_spec.rb @@ -0,0 +1,67 @@ +require 'rails_helper' + +RSpec.describe 'Contact Label API', type: :request do + let(:account) { create(:account) } + + describe 'GET /api/v1/accounts/{account.id}/contacts/Some formatted content.
+
+
| ||||
|
+The response was: + +550 5.1.1 The email account that you tried to reach does not exist. Please = +try double-checking the recipient's email address for typos or unnecessary = +spaces. For more information, go to https://support.google.com/mail/?p=3DNo= +SuchUser d2e1a72fcca58-74ce2b0525csor332154b3a.0 - gsmtp + + |
+
Hey, just checking in. Let me know if you got my earlier message.
+ +--00000000000093475906390e1e9b-- diff --git a/spec/fixtures/files/bounced_with_no_from.eml b/spec/fixtures/files/bounced_with_no_from.eml new file mode 100644 index 0000000..9057a68 --- /dev/null +++ b/spec/fixtures/files/bounced_with_no_from.eml @@ -0,0 +1,102 @@ +X-Original-To: unique-id@reply.example.com +Received: from gate.forward.smtp.example.com (mxd [192.0.2.1]) by mx.example.net with ESMTP id JANE3UihQWCm3SPLwYMiwA for