diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000000..d34b00917bf --- /dev/null +++ b/.dockerignore @@ -0,0 +1,19 @@ +commands +nginx +node_modules +public +scripts +src +*.yml +*.yaml +.env* +.git* +.snyk +*.md +Dockerfile* +jest*.js +yarn.lock +docker-entrypoint.sh +*.tar.gz +ui/.env +ui/.env.sample \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000000..0a14a1910b8 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ +FROM node:14-slim as builder + +ARG DEBIAN_FRONTEND=noninteractive + +RUN apt-get update + +WORKDIR /source + +COPY --chown=node:node . /source + +WORKDIR /source/ui + +RUN yarn && yarn build + +FROM node:14-slim + +WORKDIR /app + +COPY --from=builder --chown=node:node /source/ui . + +RUN yarn global add serve + +USER node + +EXPOSE 3000 + +ENTRYPOINT [ "serve", "-s", "build", "-l", "3000" ] diff --git a/build.sh b/build.sh new file mode 100755 index 00000000000..7ea9c657982 --- /dev/null +++ b/build.sh @@ -0,0 +1,13 @@ +docker rmi $(docker images | grep '^' | awk '{print $3}') + +tag=$1 + +docker build -t whatspro/crm:$tag . + +docker push whatspro/crm:$tag + +docker builder prune -f + +docker rmi whatspro/crm:$tag + +docker rmi $(docker images | grep '^' | awk '{print $3}') \ No newline at end of file diff --git a/ui/.prettierrc b/ui/.prettierrc new file mode 100644 index 00000000000..544138be456 --- /dev/null +++ b/ui/.prettierrc @@ -0,0 +1,3 @@ +{ + "singleQuote": true +} diff --git a/ui/package.json b/ui/package.json index 7fbc6822fd8..8e81f6e588c 100644 --- a/ui/package.json +++ b/ui/package.json @@ -54,6 +54,7 @@ "react-color": "^2.17.3", "react-copy-to-clipboard": "^5.0.1", "react-dom": "^16.11.0", + "react-dropzone": "^11.4.2", "react-markdown": "^3.3.0", "react-router-dom": "^5.1.2", "react-scripts": "^3.0.1", @@ -94,6 +95,8 @@ "record-cypress": "cypress run --record --key fd048d49-6b4c-4e6b-885f-819a533c2fc4" }, "devDependencies": { + "cypress": "^4.9.0", + "@types/dom-mediacapture-record": "^1.0.11", "enzyme": "^3.3.0", "enzyme-adapter-react-16": "^1.1.1", "lint-staged": "^5.0.0", @@ -102,8 +105,7 @@ "tslint": "^5.18.0", "tslint-config-prettier": "^1.18.0", "tslint-react": "^4.0.0", - "typescript": "^3.0.3", - "cypress": "^4.9.0" + "typescript": "^3.0.3" }, "browserslist": [ ">0.2%", diff --git a/ui/public/favicon-unread.png b/ui/public/favicon-unread.png index a1d6a424a44..1fa945405b4 100644 Binary files a/ui/public/favicon-unread.png and b/ui/public/favicon-unread.png differ diff --git a/ui/public/favicon.png b/ui/public/favicon.png index dd488d176be..18b1e9e3f1f 100644 Binary files a/ui/public/favicon.png and b/ui/public/favicon.png differ diff --git a/ui/public/images/erxes.png b/ui/public/images/erxes.png index e4bda547b41..b2f9aa3422e 100644 Binary files a/ui/public/images/erxes.png and b/ui/public/images/erxes.png differ diff --git a/ui/public/images/logo-dark.png b/ui/public/images/logo-dark.png index c898c3ce63d..6428b0dca62 100644 Binary files a/ui/public/images/logo-dark.png and b/ui/public/images/logo-dark.png differ diff --git a/ui/public/images/logo-image.png b/ui/public/images/logo-image.png index a3a4b1d19af..66aa9bf8c0f 100644 Binary files a/ui/public/images/logo-image.png and b/ui/public/images/logo-image.png differ diff --git a/ui/public/images/logo.png b/ui/public/images/logo.png index f55a60a7c00..1ccb48b4956 100644 Binary files a/ui/public/images/logo.png and b/ui/public/images/logo.png differ diff --git a/ui/public/index.html b/ui/public/index.html index 0fdb3b118ac..ff3e5bbd6ea 100644 --- a/ui/public/index.html +++ b/ui/public/index.html @@ -1,5 +1,5 @@ - + - erxes + WhatsPro @@ -46,15 +46,19 @@ }; window.envMaps = [ - { name: 'REACT_APP_API_URL', processValue: '%REACT_APP_API_URL%' }, + { name: 'REACT_APP_API_URL', processValue: '%REACT_APP_API_URL%', + endpoint: 'https://hostname/api' }, { name: 'REACT_APP_API_SUBSCRIPTION_URL', - processValue: '%REACT_APP_API_SUBSCRIPTION_URL%', + processValue: '%REACT_APP_API_SUBSCRIPTION_URL%', + endpoint: 'wss://hostname/subscriptions', }, - { name: 'REACT_APP_CDN_HOST', processValue: '%REACT_APP_CDN_HOST%' }, + { name: 'REACT_APP_CDN_HOST', processValue: '%REACT_APP_CDN_HOST%', + endpoint: 'https://hostname/widgets' }, { name: 'REACT_APP_DASHBOARD_URL', - processValue: '%REACT_APP_DASHBOARD_URL%', + processValue: '%REACT_APP_DASHBOARD_URL%', + endpoint: 'https://hostname/dash', }, ]; @@ -63,7 +67,8 @@ localStorage.setItem( `erxes_env_${envMap.name}`, - getEnv(envMap.name, envMap.processValue) + + envMap.processValue.replace(`%${envMap.name}%`, envMap.endpoint.replace('hostname', location.host)) ); } diff --git a/ui/src/appContext.tsx b/ui/src/appContext.tsx index dd275c4369c..47e829be081 100644 --- a/ui/src/appContext.tsx +++ b/ui/src/appContext.tsx @@ -6,6 +6,7 @@ import React from 'react'; interface IState { currentUser?: IUser; currentLanguage: string; + isLoading: boolean; isShownIndicator: boolean; isRemovingImport: boolean; isDoneIndicatorAction: boolean; @@ -31,11 +32,12 @@ export class AppProvider extends React.Component< super(props); // initiliaze locale ====== - const currentLanguage = localStorage.getItem('currentLanguage') || 'en'; + const currentLanguage = localStorage.getItem('currentLanguage') || process.env.REACT_APP_DEFAULT_LANGUAGE || 'pt-br'; this.state = { currentUser: props.currentUser, currentLanguage, + isLoading: false, isShownIndicator: false, isRemovingImport: false, isDoneIndicatorAction: false @@ -80,23 +82,31 @@ export class AppProvider extends React.Component< } setLocale = (currentLanguage: string): void => { + console.log(currentLanguage); + + document.documentElement.lang = currentLanguage; + if (currentLanguage !== 'mn') { import(`dayjs/locale/${currentLanguage}`) .then(() => dayjs.locale(currentLanguage)) - .catch(_ => dayjs.locale('en')); + .catch(_ => dayjs.locale('pt-br')); } import(`./locales/${currentLanguage}.json`) .then(data => { const translations = data.default; T.setTexts(translations); + + setTimeout(() => { + this.setState({ isLoading: false }); + }, 1000); }) .catch(e => console.log(e)); // tslint:disable-line }; changeLanguage = (languageCode): void => { if (this.state.currentLanguage !== languageCode) { - localStorage.setItem('currentLanguage', languageCode || 'en'); + localStorage.setItem('currentLanguage', languageCode || 'pt-br'); window.location.reload(); } }; @@ -105,16 +115,22 @@ export class AppProvider extends React.Component< const { currentUser, currentLanguage, + isLoading, isShownIndicator, isRemovingImport, isDoneIndicatorAction } = this.state; + if (isLoading) { + return null; + } + return ( Scale your business with Growth Hacking": "Scale your business with Growth Hacking", + "Drive leads to a successful close with Sales Pipeline": "Drive leads to a successful close with Sales Pipeline", + "Stay in sync with Shared Team Inbox": "Stay in sync with Shared Team Inbox", + "Increase conversion with Email & SMS Marketing": "Increase conversion with Email & SMS Marketing", + "Manage your customers from the Contact Management": "Manage your customers from the Contact Management", + "Connect with your customers with Live Chat & In-App-Messaging": "Connect with your customers with Live Chat & In-App-Messaging", + "Never miss a potential lead with Pop-ups & Forms": "Never miss a potential lead with Pop-ups & Forms", + "Educate both your customers and staff with Knowledge Base": "Educate both your customers and staff with Knowledge Base", + "Power your team’s success with Task Management": "Power your team’s success with Task Management", + "You successfully changed": "You successfully changed", + "This will permanently delete any items related to this stage": "This will permanently delete any items related to this stage", + "You have successfully removed a stage": "You have successfully removed a stage", + "You successfully updated a tag": "You successfully updated a tag", + "You've already created a messenger for the brand you've selected": "You've already created a messenger for the brand you've selected", + "Please choose a different brand or edit the previously created messenger": "Please choose a different brand or edit the previously created messenger", + "You successfully added a segment": "You successfully added a segment", + "You successfully deleted a segment": "You successfully deleted a segment", + "You successfully updated a segment": "You successfully updated a segment", + "Enter an email": "Enter an email", + "Enter an phone": "Enter an phone", + "Primary email verification status": "Primary email verification status", + "Primary phone verification status": "Primary phone verification status", + "Male": "Male", + "Female": "Female", + "Not applicable": "Not applicable", + "Valid": "Valid", + "Invalid": "Invalid", + "Accept all unverifiable": "Accept all unverifiable", + "Disposable": "Disposable", + "Catchall": "Catchall", + "Bad syntax": "Bad syntax", + "Unverifiable": "Unverifiable", + "Not checked": "Not checked", + "You successfully added a customer": "You successfully added a customer", + "Change email status": "Change email status", + "Change phone status": "Change phone status", + "Choose Properties/View": "Choose Properties/View", + "Manage properties": "Manage properties", + "Export this leads": "Export this leads", + "Cannot read property 'sendMessage' of undefined": "Cannot read property 'sendMessage' of undefined", + "The changes will take a few seconds": "The changes will take a few seconds", + "Contacted": "Contacted", + "Working": "Working", + "Bad timing": "Bad timing", + "Unqualified": "Unqualified", + "Mark as Complete": "Mark as Complete", + "Primary phone": "Primary phone", + "No location": "No location", + "See related Deal": "See related Deal", + "See related Ticket": "See related Ticket", + "See related Task": "See related Task", + "No ticket": "No ticket", + "Create a new Task": "Create a new Task", + "New Task": "New Task", + "Create a new Ticket": "Create a new Ticket", + "Create a new Deal": "Create a new Deal", + "Quick message": "Quick message", + "Sending to:": "Sending to:", + "Badge": "Badge", + "Subject:": "Subject:", + "New Deal": "New Deal", + "New Ticket": "New Ticket", + "Enter company name": "Enter company name", + "Enter company email": "Enter company email", + "Enter company phone": "Enter company phone", + "You successfully added a company": "You successfully added a company", + "See related customers": "See related customers", + "At Time of Due Date": "At Time of Due Date", + "5 Minutes Before": "5 Minutes Before", + "10 Minutes Before": "10 Minutes Before", + "15 Minutes Before": "15 Minutes Before", + "1 Hour Before": "1 Hour Before", + "2 Hour Before": "2 Hour Before", + "1 Day Before": "1 Day Before", + "2 Day Before": "2 Day Before", + "Add a more detailed description": "Add a more detailed description", + "Write Form title": "Write Form title", + "Recognizes which language is set for visitor’s browser": "Recognizes which language is set for visitor’s browser", + "Insert only Language codes in value field as appointed in ISO-639,": "Insert only Language codes in value field as appointed in ISO-639,", + "“en” for English, “fr” for French, “de” for German etc": "“en” for English, “fr” for French, “de” for German etc", + "Write your desired page URL, excluding domain name": "Write your desired page URL, excluding domain name", + "For example: If you want to place your engagement message on": "For example: If you want to place your engagement message on", + "then write /pricing0": "then write /pricing0", + "Locates visitor’s physical location in country resolution": "Locates visitor’s physical location in country resolution", + "Insert only Country codes in value field as appointed in ISO-3166 standard,": "Insert only Country codes in value field as appointed in ISO-3166 standard,", + "“gb” for Great Britain, “fr” for French, “de” for German, “jp” for Japanese etc": "“gb” for Great Britain, “fr” for French, “de” for German, “jp” for Japanese etc", + "Locates visitor’s physical location in city resolution": "Locates visitor’s physical location in city resolution", + "Write a name of the City in value field": "Write a name of the City in value field", + "If Country’s not set, every city with same name will meet the criteria": "If Country’s not set, every city with same name will meet the criteria", + "Counts individual visitor’s visitting number": "Counts individual visitor’s visitting number", + "redirect": "redirect", + "onPage": "onPage", + "Paste the code below before the body tag on every page you want erxes pop ups to appear": "Paste the code below before the body tag on every page you want erxes pop ups to appear", + "If your flow type is embedded paste the code below additionally that you want erxes pop ups to appear": "If your flow type is embedded paste the code below additionally that you want erxes pop ups to appear", + "Install code of Teste": "Install code of Teste", + "Great job! You just set up your email signature": "Great job! You just set up your email signature", + "You successfully changed a notification setting": "You successfully changed a notification setting", + "State change": "State change", + "Assignee change": "Assignee change", + "Add message": "Add message", + "Members change": "Members change", + "Assigned a new deal card": "Assigned a new deal card", + "Removed from the deal card": "Removed from the deal card", + "Deal card edited": "Deal card edited", + "Deal card deleted": "Deal card deleted", + "Assigned a new ticket card": "Assigned a new ticket card", + "Removed from the ticket card": "Removed from the ticket card", + "Ticket card edited": "Ticket card edited", + "Ticket card deleted": "Ticket card deleted", + "Assigned a new task card": "Assigned a new task card", + "Removed from the task card": "Removed from the task card", + "Task card edited": "Task card edited", + "Moved between stages": "Moved between stages", + "Due date is near": "Due date is near", + "Task card deleted": "Task card deleted", + "Mention on customer note": "Mention on customer note", + "Mention on company note": "Mention on company note", + "No segment": "No segment", + "Sender:": "Sender:", + "The email address is not verified (x) by Amazon Ses services": "The email address is not verified (x) by Amazon Ses services", + "If you want to verify your email:": "If you want to verify your email:", + "Log in to your AWS Management Console": "Log in to your AWS Management Console", + "Click on the Services menu from the dropdown menu": "Click on the Services menu from the dropdown menu", + "Click on the Simple Email Services menu from the left sidebar": "Click on the Simple Email Services menu from the left sidebar", + "Click on the Email Addresses menu from the left sidebar": "Click on the Email Addresses menu from the left sidebar", + "Finally, click on the button that named 'Verify a new email address'": "Finally, click on the button that named 'Verify a new email address'", + "Emails must be space separated": "Emails must be space separated", + "Choose a sender": "Choose a sender", + "Time tracking": "Time tracking", + "Time spent on this task": "Time spent on this task", + "started": "started", + "reseted": "reseted", + "completed": "completed", + "stopped": "stopped", + "Task reset!": "Task reset!", + "Task completed!": "Task completed!", + "You successfully added a user group": "You successfully added a user group", + "You successfully copied a user group": "You successfully copied a user group", + "KnowledgeBase": "KnowledgeBase", + "Permissions config": "Permissions config", + "Users Groups": "Users Groups", + "Products": "Products", + "Show brands": "Show brands", + "Manage brands": "Manage brands", + "Manage channels": "Manage channels", + "Show channel": "Show channel", + "Add companies": "Add companies", + "Edit companies": "Edit companies", + "Remove companies": "Remove companies", + "Merge companies": "Merge companies", + "Show companies": "Show companies", + "Show companies main": "Show companies main", + "Export companies to xls file": "Export companies to xls file", + "Show customers": "Show customers", + "Edit customer": "Edit customer", + "Merge customers": "Merge customers", + "Remove customers": "Remove customers", + "Change customer state": "Change customer state", + "Show deals": "Show deals", + "Add deal board": "Add deal board", + "Remove deal board": "Remove deal board", + "Add deal pipeline": "Add deal pipeline", + "Edit deal pipeline": "Edit deal pipeline", + "Remove deal pipeline": "Remove deal pipeline", + "Update pipeline order": "Update pipeline order", + "Deal pipeline watch": "Deal pipeline watch", + "Add deal stage": "Add deal stage", + "Edit deal stage": "Edit deal stage", + "Remove deal stage": "Remove deal stage", + "Add deal": "Add deal", + "Remove deal": "Remove deal", + "Watch deal": "Watch deal", + "Archive all deals in a specific stage": "Archive all deals in a specific stage", + "Export deals": "Export deals", + "Show tickets": "Show tickets", + "Add ticket board": "Add ticket board", + "Remove ticket board": "Remove ticket board", + "Add ticket pipeline": "Add ticket pipeline", + "Edit ticket pipeline": "Edit ticket pipeline", + "Remove ticket pipeline": "Remove ticket pipeline", + "Ticket pipeline watch": "Ticket pipeline watch", + "Add ticket stage": "Add ticket stage", + "Edit ticket stage": "Edit ticket stage", + "Update stage order": "Update stage order", + "Remove ticket stage": "Remove ticket stage", + "Add ticket": "Add ticket", + "Remove ticket": "Remove ticket", + "Watch ticket": "Watch ticket", + "Archive all tickets in a specific stage": "Archive all tickets in a specific stage", + "Show growth hacks": "Show growth hacks", + "Add growth hacking board": "Add growth hacking board", + "Remove growth hacking board": "Remove growth hacking board", + "Edit growth hacking pipeline": "Edit growth hacking pipeline", + "Add growth hacking pipeline": "Add growth hacking pipeline", + "Remove growth hacking pipeline": "Remove growth hacking pipeline", + "Growth hacking pipeline watch": "Growth hacking pipeline watch", + "Add growth hacking stage": "Add growth hacking stage", + "Edit growth hacking stage": "Edit growth hacking stage", + "Remove growth hacking stage": "Remove growth hacking stage", + "Add growth hacking": "Add growth hacking", + "Edit growth hacking": "Edit growth hacking", + "Remove growth hacking": "Remove growth hacking", + "Watch growth hacking": "Watch growth hacking", + "Archive all growth hacks in a specific stage": "Archive all growth hacks in a specific stage", + "Add growth hacking template": "Add growth hacking template", + "Edit growth hacking template": "Edit growth hacking template", + "Remove growth hacking template": "Remove growth hacking template", + "Duplicate growth hacking template": "Duplicate growth hacking template", + "Show growth hacking template": "Show growth hacking template", + "Show tasks": "Show tasks", + "Add task board": "Add task board", + "Remove task board": "Remove task board", + "Add task pipeline": "Add task pipeline", + "Edit task pipeline": "Edit task pipeline", + "Remove task pipeline": "Remove task pipeline", + "Task pipeline watch": "Task pipeline watch", + "Add task stage": "Add task stage", + "Edit task stage": "Edit task stage", + "Remove task stage": "Remove task stage", + "Add task": "Add task", + "Editar tarefa": "Editar tarefa", + "Remove task": "Remove task", + "Watch task": "Watch task", + "Archive all tasks in a specific stage": "Archive all tasks in a specific stage", + "Update time tracking for a task": "Update time tracking for a task", + "Set live engage message": "Set live engage message", + "Set pause engage message": "Set pause engage message", + "Set live engage message manual": "Set live engage message manual", + "Remove engage message": "Remove engage message", + "Edit engage message": "Edit engage message", + "Add engage message": "Add engage message", + "Show engages messages list": "Show engages messages list", + "Engages": "Engages", + "Manage export insights": "Manage export insights", + "Show insights": "Show insights", + "Manage knowledge base": "Manage knowledge base", + "Show knowledge base": "Show knowledge base", + "Manage permissions": "Manage permissions", + "Show permissions": "Show permissions", + "Show permissions actions": "Show permissions actions", + "Show permissions modules": "Show permissions modules", + "Manage users groups": "Manage users groups", + "Show users groups": "Show users groups", + "Manage scripts": "Manage scripts", + "Show scripts": "Show scripts", + "Manage products": "Manage products", + "Show products": "Show products", + "Show team members": "Show team members", + "Set active/deactive team member": "Set active/deactive team member", + "Invite team member": "Invite team member", + "Export team members": "Export team members", + "Manage email template": "Manage email template", + "Show email templates": "Show email templates", + "Manage response template": "Manage response template", + "Show response templates": "Show response templates", + "Import xls files": "Import xls files", + "Show import histories": "Show import histories", + "Remove import histories": "Remove import histories", + "Show tags": "Show tags", + "Manage forms": "Manage forms", + "Show forms": "Show forms", + "Show segments list": "Show segments list", + "Show integrations": "Show integrations", + "Create messenger integration": "Create messenger integration", + "Save messenger appearance data": "Save messenger appearance data", + "Create lead integration": "Create lead integration", + "Edit lead integration": "Edit lead integration", + "Remove integration": "Remove integration", + "Archive an integration": "Archive an integration", + "Edit common integration fields": "Edit common integration fields", + "Show conversations": "Show conversations", + "Assign conversation": "Assign conversation", + "Add conversation message": "Add conversation message", + "Resolve all converstaion": "Resolve all converstaion", + "Change conversation status": "Change conversation status", + "Show general settings": "Show general settings", + "Manage general settings": "Manage general settings", + "Show email appearance": "Show email appearance", + "Manage email appearance": "Manage email appearance", + "View logs": "View logs", + "Show webhooks": "Show webhooks", + "Manage webhooks": "Manage webhooks", + "Allowed": "Allowed", + "If you archive a pop ups, then you won't be able to see customers & conversations related to this pop ups anymore": "If you archive a pop ups, then you won't be able to see customers & conversations related to this pop ups anymore", + "Verified": "Verified", + "Duplicated email": "Duplicated email", + "Must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters": "Must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters", + "Endpoint url": "Endpoint url", + "Customer created": "Customer created", + "Customer updated": "Customer updated", + "Customer deleted": "Customer deleted", + "Company created": "Company created", + "Company updated": "Company updated", + "Company deleted": "Company deleted", + "Knowledge Base created": "Knowledge Base created", + "Knowledge Base updated": "Knowledge Base updated", + "Knowledge Base deleted": "Knowledge Base deleted", + "Admin messages": "Admin messages", + "Customer create conversation": "Customer create conversation", + "Customer messages": "Customer messages", + "Engage messages": "Engage messages", + "You successfully added a Webhook": "You successfully added a Webhook", + "unavailable": "unavailable", + "available": "available", + "You successfully deleted a webhook": "You successfully deleted a webhook", + "You successfully updated a Webhook": "You successfully updated a Webhook", + "Copy token": "Copy token", + "Transaction": "Transaction", + "Checklists": "Checklists", + "Checklist items": "Checklist items", + "Deal boards": "Deal boards", + "Deal pipelines": "Deal pipelines", + "Growth hack boards": "Growth hack boards", + "Growth hack pipelines": "Growth hack pipelines", + "Growth hacks": "Growth hacks", + "Internal notes": "Internal notes", + "Knowledgebase topics": "Knowledgebase topics", + "Knowledgebase categories": "Knowledgebase categories", + "Knowledgebase articles": "Knowledgebase articles", + "Pipeline labels": "Pipeline labels", + "Pipeline templates": "Pipeline templates", + "Product categories": "Product categories", + "Task pipelines": "Task pipelines", + "Ticket boards": "Ticket boards", + "Task boards": "Task boards", + "Ticket pipelines": "Ticket pipelines", + "Duplicated messenger for single brand": "Duplicated messenger for single brand", + "You successfully chose a new brand": "You successfully chose a new brand", + "Paste the following code before the body tag on every page you want erxes widget to appear": "Paste the following code before the body tag on every page you want erxes widget to appear", + "Import ErxesSDK into": "Import ErxesSDK into", + "into": "into", + "into your class": "into your class", + "and you can start Erxes with following options:": "and you can start Erxes with following options:", + "You successfully updated a messenger": "You successfully updated a messenger", + "Error: Integrations api is not running": "Error: Integrations api is not running", + "Monthly Active Users": "Monthly Active Users", + "Weekly Orders": "Weekly Orders", + "Monthly Orders": "Monthly Orders", + "Repeat Purchases (Total)": "Repeat Purchases (Total)", + "Daily Active Users": "Daily Active Users", + "Weekly Active Users": "Weekly Active Users", + "Active Subscriptions (Total)": "Active Subscriptions (Total)", + "Weekly Revenue": "Weekly Revenue", + "Monthly Revenue": "Monthly Revenue", + "Repeat Recurring Revenue": "Repeat Recurring Revenue", + "Viral coefficient": "Viral coefficient", + "Free-to-paid conversion rate": "Free-to-paid conversion rate", + "Number of deals created": "Number of deals created", + "Deal-to-close rate": "Deal-to-close rate", + "GROWTHHACKERS RECOMMENDED": "GROWTHHACKERS RECOMMENDED", + "YOUR METRICS": "YOUR METRICS", + "COMMON METRICS": "COMMON METRICS", + "GROWTH MATRIX": "GROWTH MATRIX", + "This will permanently delete the current Pipeline. Are you absolutely sure?": "This will permanently delete the current Pipeline. Are you absolutely sure?", + "Successfully duplicated a template": "Successfully duplicated a template", + "Task board & Pipelines": "Task board & Pipelines", + "Further instructions have been sent to your e-mail address": "Further instructions have been sent to your e-mail address", + "You will configure several settings on this page": "You will configure several settings on this page", + "You will be able to change these settings in the erxes settings tab": "You will be able to change these settings in the erxes settings tab", + "You will be creating the top level administrator account profile": "You will be creating the top level administrator account profile", + "Please complete all the data in Initial Configuration Steps": "Please complete all the data in Initial Configuration Steps", + "We would love your real first name, but you are free to choose any name you want to be called": "We would love your real first name, but you are free to choose any name you want to be called", + "Your best email address is required. You will want to receive these notifications": "Your best email address is required. You will want to receive these notifications", + "Initial Configuration Steps": "Initial Configuration Steps", + "Please fill out the following form to complete your installation": "Please fill out the following form to complete your installation", + "Please input the best email address to use as your login and to receive emails from your installation such as notifications, alerts and other messages": "Please input the best email address to use as your login and to receive emails from your installation such as notifications, alerts and other messages", + "You must check below to receive information about upgrades and upgrading instructions, new tutorials, occasional requests for feedback and the monthly newsletter": "You must check below to receive information about upgrades and upgrading instructions, new tutorials, occasional requests for feedback and the monthly newsletter", + "Yes, I want in": "Yes, I want in", + "I know I can unsubscribe easily at any time": "I know I can unsubscribe easily at any time", + "Save and continue to login": "Save and continue to login", + "Short name": "Short name", + "Phone (operator)": "Phone (operator)", + "Send to board": "Send to board", + "Time": "Time", + "This card is archived": "This card is archived", + "Select a color": "Select a color", + "Create a new label": "Create a new label", + "Are you sure? This cannot be undone": "Are you sure? This cannot be undone", + "You successfully deleted a label": "You successfully deleted a label", + "You successfully sent to a board": "You successfully sent to a board", + "You successfully deleted a stage": "You successfully deleted a stage", + "Track your entire sales pipeline from one dashboard": "Track your entire sales pipeline from one dashboard", + "You can also restrict access to your sales pipelines": "You can also restrict access to your sales pipelines", + "Create Boards and Pipelines": "Create Boards and Pipelines", + "Tip: Choose different views": "Tip: Choose different views", + "Click on “Boards, Calendar, Conversions” to filter deals": "Click on “Boards, Calendar, Conversions” to filter deals", + "unassigned": "unassigned", + "participating": "participating", + "closed": "closed", + "Convert to Card": "Convert to Card", + "Which specific knowledgebase do you want to display in a separate tab in this messenger": "Which specific knowledgebase do you want to display in a separate tab in this messenger", + "Which popup(s) do you want to display in this messenger": "Which popup(s) do you want to display in this messenger", + "Which website(s) do you want to display in this messenger": "Which website(s) do you want to display in this messenger", + "Website Title": "Website Title", + "Website Url": "Website Url", + "Button text": "Button text", + "Bot Press Endpoint URL": "Bot Press Endpoint URL", + "Please enter your Bot Press endpoint URL": "Please enter your Bot Press endpoint URL", + "You successfully added an integration": "You successfully added an integration", + "If you archive an integration, then you won't be able to see customers & conversations related to this integration anymore": "If you archive an integration, then you won't be able to see customers & conversations related to this integration anymore", + "If you remove an integration, then all related conversations, customers & pop ups will also be removed": "If you remove an integration, then all related conversations, customers & pop ups will also be removed", + "Your integration is no longer in this channel": "Your integration is no longer in this channel", + "You are going to unarchive this integration": "You are going to unarchive this integration", + "Integration has been archived": "Integration has been archived", + "Integration has been unarchived": "Integration has been unarchived", + "Name and brand must be chosen": "Name and brand must be chosen", + "Integration has been edited": "Integration has been edited", + "You successfully added a webhook integration": "You successfully added a webhook integration", + "Integration detail": "Integration detail", + "Sad": "Sad", + "Neutral": "Neutral", + "Like": "Like", + "Happy": "Happy", + "Dislike": "Dislike", + "publish": "publish", + "Chat": "Chat", + "Please carefully select the brand, it will appear in the selected brand messenger": "Please carefully select the brand, it will appear in the selected brand messenger", + "Message not found": "Message not found", + "Already exist": "Already exist", + "You just deleted an engagement message": "You just deleted an engagement message", + "Yay! Your engagement message is now live": "Yay! Your engagement message is now live", + "Your engagement message is paused for now": "Your engagement message is paused for now", + "You successfully updated a engagement message": "You successfully updated a engagement message", + "You successfully added a engagement message": "You successfully added a engagement message", + "SMS integration is not configured": "SMS integration is not configured", + "Go to Settings > System config > Integrations config and set Telnyx SMS API key": "Go to Settings > System config > Integrations config and set Telnyx SMS API key", + "Email verified": "Email verified", + "Email not verified": "Email not verified", + "Log messages": "Log messages", + "Write a content": "Write a content", + "Choose a sent as": "Choose a sent as", + "Write an email subject": "Write an email subject", + "Choose day:": "Choose day:", + "Deals not found": "Deals not found", + "You successfully added a product or service": "You successfully added a product or service", + "You successfully updated a deal": "You successfully updated a deal", + "You successfully deleted a deal": "You successfully deleted a deal", + "You successfully changed a deal": "You successfully changed a deal", + "You successfully copied a deal": "You successfully copied a deal", + "Current Stage": "Current Stage", + "Assigned": "Assigned", + "Manage Product & Service": "Manage Product & Service", + "You successfully updated": "You successfully updated", + "Growth funnel": "Growth funnel", + "Vote": "Vote", + "Unvote": "Unvote", + "Experiments": "Experiments", + "Sort": "Sort", + "Choose a growth funnel": "Choose a growth funnel", + "Low impact": "Low impact", + "High impact": "High impact", + "The conversation Assignee has been renewed": "The conversation Assignee has been renewed", + "Already created product board": "Already created product board", + "Created product board note": "Created product board note", + "You have a new email": "You have a new email", + "You have a message from facebook": "You have a message from facebook", + "You have got a new lead": "You have got a new lead", + "You have a new message from messenger": "You have a new message from messenger", + "Error": "Error", + "Visitor contact info": "Visitor contact info", + "response frequency averages": "response frequency averages", + "You successfully deleted an article": "You successfully deleted an article", + "If you remove a pop ups, then all related conversations, customers will also be removed": "If you remove a pop ups, then all related conversations, customers will also be removed", + "You successfully deleted a pop ups": "You successfully deleted a pop ups", + "You are going to unarchive this pop ups": "You are going to unarchive this pop ups", + "Pop ups has been archived": "Pop ups has been archived", + "Pop ups has been unarchived": "Pop ups has been unarchived", + "You should connect Popup to brand first": "You should connect Popup to brand first", + "Notification have been seen": "Notification have been seen", + "This page has no notification": "This page has no notification", + "Looks like you are all caught up!": "Looks like you are all caught up!", + "Hello Ganzorig": "Hello Ganzorig", + "Hello I'm erxes": "Hello I'm erxes", + "Make sure": "Make sure", + "save your profile information": "save your profile information", + "exactly": "exactly", + "atleast": "atleast", + "atmost": "atmost", + "Add event attribute": "Add event attribute", + "equals": "equals", + "is not equal to": "is not equal to", + "is set": "is set", + "is not set": "is not set", + "is true": "is true", + "is false": "is false", + "number: equals": "number: equals", + "number: is not equal to": "number: is not equal to", + "number: is greater than": "number: is greater than", + "number: is less than": "number: is less than", + "date: is greater than": "date: is greater than", + "date: is less than": "date: is less than", + "will occur before on following n-th minute": "will occur before on following n-th minute", + "will occur after on following n-th minute": "will occur after on following n-th minute", + "will occur before on following n-th day": "will occur before on following n-th day", + "will occur after on following n-th day": "will occur after on following n-th day", + "date relative less than": "date relative less than", + "date relative greater than": "date relative greater than", + "See parent segment conditions": "See parent segment conditions", + "Open segments and starting add details": "Open segments and starting add details", + "You successfully updated a task": "You successfully updated a task", + "You successfully deleted a task": "You successfully deleted a task", + "You successfully copied a task": "You successfully copied a task", + "You successfully changed a task": "You successfully changed a task", + "You successfully updated a ticket": "You successfully updated a ticket", + "You successfully deleted a ticket": "You successfully deleted a ticket", + "You successfully copied a ticket": "You successfully copied a ticket", + "You successfully changed a ticket": "You successfully changed a ticket", + "You successfully updated a note": "You successfully updated a note", + "integrations": "integrations", + "Archive List has been archived": "Archive List has been archived", + "This will remove list from the board": "This will remove list from the board", + "To view archived list and bring them back to the board, click “Menu” > “Archived Items”": "To view archived list and bring them back to the board, click “Menu” > “Archived Items”", + "alarm": "alarm", + "briefcase": "briefcase", + "earthgrid": "earthgrid", + "compass": "compass", + "idea": "idea", + "diamond": "diamond", + "piggybank": "piggybank", + "piechart": "piechart", + "scale": "scale", + "megaphone": "megaphone", + "tools": "tools", + "umbrella": "umbrella", + "bar-chart": "bar-chart", + "star": "star", + "head-1": "head-1", + "settings": "settings", + "paintpalette": "paintpalette", + "flag": "flag", + "phone-call": "phone-call", + "laptop": "laptop", + "home": "home", + "puzzle": "puzzle", + "medal": "medal", + "like": "like", + "book": "book", + "clipboard": "clipboard", + "computer": "computer", + "paste": "paste", + "folder": "folder", + "Install code of": "Install code of", + "Show checked items": "Show checked items", + "Hide completed items": "Hide completed items", + "You successfully deleted a company": "You successfully deleted a company", + "You successfully merged companies": "You successfully merged companies", + "Related Associate": "Related Associate", + "Competitor": "Competitor", + "Investor": "Investor", + "Partner": "Partner", + "Press": "Press", + "Prospect": "Prospect", + "Reseller": "Reseller", + "Your request has been successfully sent": "Your request has been successfully sent", + "Your contacts will be verified after a while": "Your contacts will be verified after a while", + "You successfully changed a status": "You successfully changed a status", + "A person who preparing to buy some service or product": "A person who preparing to buy some service or product", + "A person who already bought some service or product": "A person who already bought some service or product", + "Most visited pages on your website": "Most visited pages on your website", + "This email conversation will be automatically moved to a resolved state": "This email conversation will be automatically moved to a resolved state", + "Please choose phone number": "Please choose phone number", + "Please type sms text": "Please type sms text", + "Customer or company does not have primary phone": "Customer or company does not have primary phone", + "SMS successfully sent": "SMS successfully sent", + "There is no linked accounts": "There is no linked accounts", + "Continue with Facebook": "Continue with Facebook", + "You canceled importing action": "You canceled importing action", + "You can track your recently imported customers or companies here": "You can track your recently imported customers or companies here" } diff --git a/ui/src/locales/es.json b/ui/src/locales/es.json index 48f7bdd3d15..0fd24a061a0 100644 --- a/ui/src/locales/es.json +++ b/ui/src/locales/es.json @@ -46,7 +46,7 @@ "Sub segment of": "Sub segmento de", "Color": "Color", "Filters": "Filtros", - "User(s) will recieve this message": "El (Los) usuario(s) recibirán este mensaje", + "User(s) will receive this message": "El (Los) usuario(s) recibirán este mensaje", "Color code": "Código de color", "Engage Message": "Mensaje de compromiso", "Item counts": "Item counts", diff --git a/ui/src/locales/fa_IR.json b/ui/src/locales/fa_IR.json index 057ae4614b3..61cebab64d4 100644 --- a/ui/src/locales/fa_IR.json +++ b/ui/src/locales/fa_IR.json @@ -287,7 +287,7 @@ "Sub segment of": "زیر بخش از", "Color": "رنگ", "Filters": "فیلترها", - "User(s) will recieve this message": "کاربر (ها) این پیام را دریافت می کنند", + "User(s) will receive this message": "کاربر (ها) این پیام را دریافت می کنند", "Color code": "کد رنگ", "Engage Message": "پیام نامزدی", "Item counts": "تعداد موارد", diff --git a/ui/src/locales/fr.json b/ui/src/locales/fr.json index c56c9acc3fe..21d12cc4dc3 100644 --- a/ui/src/locales/fr.json +++ b/ui/src/locales/fr.json @@ -277,7 +277,7 @@ "Sub segment of": "Sous-segment de", "Color": "Couleur", "Filters": "Filtres", - "User(s) will recieve this message": "Les utilisateurs recevront ce message", + "User(s) will receive this message": "Les utilisateurs recevront ce message", "Color code": "Code couleur", "Engage Message": "Message d'engagement", "Item counts": "Nombre d'items", diff --git a/ui/src/locales/hi.json b/ui/src/locales/hi.json index 06534424e3e..4cf6033ad13 100644 --- a/ui/src/locales/hi.json +++ b/ui/src/locales/hi.json @@ -279,7 +279,7 @@ "Sub segment of": "उप खंड", "Color": "रंग", "Filters": "फिल्टर", - "User(s) will recieve this message": "उपयोगकर्ता (ओं) इस संदेश को प्राप्त होगा", + "User(s) will receive this message": "उपयोगकर्ता (ओं) इस संदेश को प्राप्त होगा", "Color code": "रंग संकेत", "Engage Message": "संदेश को शामिल", "Item counts": "आइटम गणना", diff --git a/ui/src/locales/id_ID.json b/ui/src/locales/id_ID.json index 80d9a3bfbf1..0667b15dba8 100644 --- a/ui/src/locales/id_ID.json +++ b/ui/src/locales/id_ID.json @@ -287,7 +287,7 @@ "Sub segment of": "Sub segmen", "Color": "Warna", "Filters": "Filter", - "User(s) will recieve this message": "Pengguna akan menerima pesan ini", + "User(s) will receive this message": "Pengguna akan menerima pesan ini", "Color code": "Kode warna", "Engage Message": "Libatkan Pesan", "Item counts": "Jumlah barang", diff --git a/ui/src/locales/it.json b/ui/src/locales/it.json index 6d9a9e2815b..7e994b3fd07 100644 --- a/ui/src/locales/it.json +++ b/ui/src/locales/it.json @@ -286,7 +286,7 @@ "Sub segment of": "Sub segmento di", "Color": "Colore", "Filters": "Filtri", - "User(s) will recieve this message": "User (s) riceverà questo messaggio", + "User(s) will receive this message": "User (s) riceverà questo messaggio", "Color code": "Colore del codice", "Engage Message": "Engage Messagge", "Item counts": "Conta voce", diff --git a/ui/src/locales/ja.json b/ui/src/locales/ja.json index 9a95b56af96..09b7ab71f79 100644 --- a/ui/src/locales/ja.json +++ b/ui/src/locales/ja.json @@ -278,7 +278,7 @@ "Sub segment of": "のサブセグメント", "Color": "色", "Filters": "フィルタ", - "User(s) will recieve this message": "ユーザー(複数可)は、このメッセージを受け取るします", + "User(s) will receive this message": "ユーザー(複数可)は、このメッセージを受け取るします", "Color code": "カラーコード", "Engage Message": "メッセージをエンゲージ", "Item counts": "アイテム数", diff --git a/ui/src/locales/jv.json b/ui/src/locales/jv.json index d0d9c55a59e..5db47cb09ce 100644 --- a/ui/src/locales/jv.json +++ b/ui/src/locales/jv.json @@ -287,7 +287,7 @@ "Sub segment of": "Sub bagean saka", "Color": "Werna", "Filters": "Saringan", - "User(s) will recieve this message": "Pangguna bakal nampa pesen iki", + "User(s) will receive this message": "Pangguna bakal nampa pesen iki", "Color code": "Kode warna", "Engage Message": "Nindakake pesen", "Item counts": "Item sing ngitung", diff --git a/ui/src/locales/kk.json b/ui/src/locales/kk.json index 5a34cb36faf..56248d74900 100644 --- a/ui/src/locales/kk.json +++ b/ui/src/locales/kk.json @@ -287,7 +287,7 @@ "Sub segment of": "Қосалқы сегмент", "Color": "Түсі", "Filters": "Сүзгілер", - "User(s) will recieve this message": "Пайдаланушы (лар) бұл хабарды алады", + "User(s) will receive this message": "Пайдаланушы (лар) бұл хабарды алады", "Color code": "Түс коды", "Engage Message": "Хабарламаны тарту", "Item counts": "Элемент есептеледі", diff --git a/ui/src/locales/ko.json b/ui/src/locales/ko.json index a79ab5a451f..9f206994423 100644 --- a/ui/src/locales/ko.json +++ b/ui/src/locales/ko.json @@ -278,7 +278,7 @@ "Sub segment of": "의 하위 세그먼트", "Color": "색깔", "Filters": "필터", - "User(s) will recieve this message": "사용자 (들)이 메시지를받을 것이다", + "User(s) will receive this message": "사용자 (들)이 메시지를받을 것이다", "Color code": "컬러 코드", "Engage Message": "메시지를 참여", "Item counts": "항목 수", diff --git a/ui/src/locales/mn.json b/ui/src/locales/mn.json index 8e8406652bd..3ba8944a3b3 100644 --- a/ui/src/locales/mn.json +++ b/ui/src/locales/mn.json @@ -286,7 +286,7 @@ "Sub segment of": "Дэд сегмент", "Color": "Өнгө", "Filters": "Шүүлтийн нөхцлүүд", - "User(s) will recieve this message": "Хэрэглэгч(д) энэхүү мессэжийг хүлээж авах болно", + "User(s) will receive this message": "Хэрэглэгч(д) энэхүү мессэжийг хүлээж авах болно", "Color code": "Өнгөний код", "Engage Message": "Маркетингийн зурвас", "Item counts": "Талбарын тоо", diff --git a/ui/src/locales/mr.json b/ui/src/locales/mr.json index 32d985870d2..23ff486dd02 100644 --- a/ui/src/locales/mr.json +++ b/ui/src/locales/mr.json @@ -287,7 +287,7 @@ "Sub segment of": "चा उपखंड", "Color": "रंग", "Filters": "फिल्टर", - "User(s) will recieve this message": "वापरकर्ता संदेश पाठवेल", + "User(s) will receive this message": "वापरकर्ता संदेश पाठवेल", "Color code": "रंग कोड", "Engage Message": "संदेश गुंतवा", "Item counts": "आयटम गणना", diff --git a/ui/src/locales/nl.json b/ui/src/locales/nl.json index 1e354caae8a..36f815ed7a1 100644 --- a/ui/src/locales/nl.json +++ b/ui/src/locales/nl.json @@ -287,7 +287,7 @@ "Sub segment of": "Subsegment van", "Color": "Kleur", "Filters": "Filters", - "User(s) will recieve this message": "Gebruiker (s) zullen dit bericht ontvangen", + "User(s) will receive this message": "Gebruiker (s) zullen dit bericht ontvangen", "Color code": "Kleurcode", "Engage Message": "Engage-bericht", "Item counts": "Item telt", diff --git a/ui/src/locales/pa.json b/ui/src/locales/pa.json index 80fe6b55e2c..0b57c02852b 100644 --- a/ui/src/locales/pa.json +++ b/ui/src/locales/pa.json @@ -287,7 +287,7 @@ "Sub segment of": "ਦਾ ਸਬ ਖੰਡ", "Color": "ਰੰਗ", "Filters": "ਫਿਲਟਰ", - "User(s) will recieve this message": "ਉਪਭੋਗਤਾ ਇਸ ਸੰਦੇਸ਼ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨਗੇ", + "User(s) will receive this message": "ਉਪਭੋਗਤਾ ਇਸ ਸੰਦੇਸ਼ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨਗੇ", "Color code": "ਰੰਗ ਕੋਡ", "Engage Message": "ਸੰਦੇਸ਼ ਸ਼ਾਮਲ ਕਰੋ", "Item counts": "ਆਈਟਮ ਦੀ ਗਿਣਤੀ", diff --git a/ui/src/locales/pl_PL.json b/ui/src/locales/pl_PL.json index ca4d0e17c27..f5c789b8ebb 100644 --- a/ui/src/locales/pl_PL.json +++ b/ui/src/locales/pl_PL.json @@ -287,7 +287,7 @@ "Sub segment of": "Podsegment", "Color": "Kolor", "Filters": "Filtry", - "User(s) will recieve this message": "Użytkownik (użytkownicy) otrzymają tę wiadomość", + "User(s) will receive this message": "Użytkownik (użytkownicy) otrzymają tę wiadomość", "Color code": "Kod koloru", "Engage Message": "Zaangażuj wiadomość", "Item counts": "Liczy się pozycja", diff --git a/ui/src/locales/pt-br.json b/ui/src/locales/pt-br.json index e18fc3e1049..c420402b6f4 100644 --- a/ui/src/locales/pt-br.json +++ b/ui/src/locales/pt-br.json @@ -1,16 +1,16 @@ { - "Homepage link": "https://www.erxes.io", + "Homepage link": "Link da Página Inicial", "Are you sure?": "Você tem certeza?", "Yes, I am": "Sim, eu tenho", "No, Cancel": "Não, cancelar", - "Filter by tags": "Filtrar por marcações", + "Filter by tags": "Filtrar por tags", "There is no data": "Não há dados", "There is no data.": "Não há dados.", "Load more": "Carregar mais", "There aren't any activities at the moment.": "Não há atividades no momento.", "Reset your password": "Redefinir sua senha", "Email me the instruction": "Me envie um e-mail com as instruções", - "Sign in": "Inscreva-se", + "Sign in": "Entrar", "Change password": "Mudar a senha", "Set your new password": "Defina sua nova senha", "Forgot password?": "Esqueceu sua senha?", @@ -29,8 +29,9 @@ "Inbox": "Caixa de entrada", "Customers": "Clientes", "Companies": "Empresas", + "companies": "empresas", "Engage": "Engajar", - "Insights": "Intuições", + "Insights": "Relatórios", "Knowledge Base": "Base de Conhecimento", "Settings": "Configurações", "Resolve": "Resolver", @@ -45,15 +46,15 @@ "Basic info": "Informações básicas", "Size": "Tamanho", "Other": "Outro", - "Industry": "Indústria", + "Industry": "Segmento", "Website": "Site", "Plan": "Plano", "About": "Sobre", - "Discard": "Discartar", + "Discard": "Descartar", "Save": "Salvar", "Create response template": "Criar padrão de resposta", "Associate": "Associado", - "No tags": "Sem marcações", + "No tags": "Sem tags", "Add customer": "Adicionar cliente", "No segments": "Sem segmentos", "Manage Columns": "Gerenciar colunas", @@ -86,7 +87,7 @@ "Load More": "Carregar mais", "Session count": "Contador de sessão", "Last seen at": "Visto por último em", - "Tags": "Marcações", + "Tags": "Tags", "Member": "Membro", "Remove": "Remover", "No companies added yet!": "Não há empresas cadastradas ainda!", @@ -95,7 +96,7 @@ "Last Name": "Sobrenome", "First name": "Nome", "Last name": "Sobrenome", - "Primary Email": "E-mail primário", + "Primary Email": "E-mail principal", "Phone": "Telefone", "Is user": "É usuário", "Save & New": "Salvar & Novo", @@ -103,13 +104,13 @@ "Close": "Fechar", "Customer properties": "Propriedades do cliente", "Device properties": "Propriedades do dispositivo", - "Location": "Localização", + "Location": "Fuso Horário", "Browser": "Navegador", "Platform": "Plataforma", "IP Address": "Endereço de IP", "Hostname": "Hostname", - "Language": "Linguagem", - "User Agent": "User Agent", + "Language": "Idioma", + "User Agent": "Agente", "Other properties": "Outras propriedades", "Facebook": "Facebook", "Facebook profile": "Perfil do Facebook", @@ -146,12 +147,13 @@ "default": "padrão", "primary": "primário", "Content": "Conteúdo", - "Save & draft": "Salvar & rascunho", - "Save & live": "Salvar & continuar", + "Save & draft": "Salvar e rascunho", + "Save & live": "Salvar e continuar", "Message:": "Mensagem:", "Email template:": "Modelo de e-mail:", "Email subject:": "Assunto do e-mail:", "From": "De", + "from": "de", "Message type:": "Tipo de mensagem:", "Sent as:": "Enviado como:", "Brand:": "Marca:", @@ -167,7 +169,7 @@ "Visitor auto": "Visitante automático", "Manual": "Manual", "Delivered to a user s email inbox": "Entregue para o e-mail do usuário", - "Customize with your own templates": "Pesonalize com seus próprios modelos", + "Customize with your own templates": "Personalize com seus próprios modelos", "Delivered inside your app": "Entregue dentro do seu aplicativo", "Reach active users": "Alcançar usuários ativos", "Channel": "Canal", @@ -187,6 +189,7 @@ "Delete": "Deletar", "Choose segment": "Selecione o segmento", "To:": "Para:", + "to": "para", "Messenger kind:": "Tipo de messenger:", "Title:": "Título", "Channel:": "Canal", @@ -201,7 +204,6 @@ "Number": "Número", "Text:": "Texto:", "Description:": "Descrição:", - "This item is requried": "Esse item é obrigatório", "Preview": "Visualizar", "Column name": "Nome da coluna", "Visible": "Visível", @@ -211,13 +213,14 @@ "Conversations": "Conversas", "Channels": "Canais", "Select all": "Escolher todos", - "Filter by tag": "Filtrar por marcação", + "Filter by tag": "Filtrar por tag", "Filter by integrations": "Filtrar por integração", "Filter by brand": "Filtrar por marca", "Filter by channel": "Filtrar por canal", "Filter by status": "Filtrar por status", "# Channel": "# Canal", "Unassigned": "Não atribuído", + "assigned": "atribuído", "Participating": "Participando", "Resolved": "Resolvido", "View more": "Ver mais", @@ -227,13 +230,13 @@ "Daily First Response Resolve Rate": "Taxa De Resolução Diária de Primeira Resposta", "Daily First Response Resolve Rate by Team Members": "Taxa De Resolução Diária De Primeira Resposta Por Membros Da Equipe", "Daily Response Close Resolve Rate by Team Members": "Taxa De Resolução Aproximada De Resposta Diária Por Membros Da Equipe", - "Volume Report": "Relatório de volume", + "Volume Report": "Relatório de Volume", "Feedbacks gathered through various customer engagement channels.": "Feedbacks reunidos através de vários canais de envolvimento do cliente.", - "Response Report": "Relatório de respostas", + "Response Report": "Relatório de Respostas", "Total number of response for customer feedbacks, by each staff.": "Número total de respostas para feedbacks de clientes, por cada equipe.", - "Response Close Report": "Relatório de resposta de perto", + "Response Close Report": "Relatório de Fechamento", "Average time of each staff solving problems that based on customer feedbacks.": "Tempo médio de cada equipe resolvendo problemas com base nos feedbacks dos clientes.", - "First Response Report": "Primeiro Relatório de Resposta", + "First Response Report": "Relatório de Primeira Resposta", "Responding time for a single feedback. Stats will define average response time by each staff.": "Tempo de resposta para um único feedback. As estatísticas definirão o tempo médio de resposta de cada equipe.", "Daily Response Close Resolve Rate": "Taxa De Resolução Aproximada De Resposta Diária", "Daily Response Close Resolve rate by Team Members": "Taxa De Resolução Aproximada De Resposta Diária Por Membros Da Equipe", @@ -241,7 +244,7 @@ "Response Trend": "Tendência de Resposta", "Punch card": "Cartão perfurado", "Response by team members": "Resposta por membros da equipe", - "Tag": "Marcação", + "Tag": "Tag", "Internal note": "Nota interna", "Manage templates": "Gerencie seus modelos", "Volume summary": "Resumo de Volume", @@ -253,7 +256,7 @@ "Add Category": "Adicionar Categoria", "Add Article": "Adicionar Artigo", "Customer engagement. REDEFINED.": "Envolvimento do cliente. REDEFINIDO.", - "erxes is an AI meets open source messaging platform for sales, marketing and support": "erxes é uma Inteligência Aritificial que atende a plataforma de mensagens de código aberto para vendas, marketing e suporte", + "erxes is an AI meets open source messaging platform for sales, marketing and support": "erxes é uma Inteligência Artificial que atende a plataforma de mensagens de código aberto para vendas, marketing e suporte", "404. This page is not found.": "404. Página não encontrada.", "erxes is an open-source messaging platform for customer success": "erxes é uma plataforma de mensagens de código aberto para o sucesso do cliente", "Notification settings": "Configuração de notificações", @@ -277,7 +280,7 @@ "Sub segment of": "Segmento secundário de", "Color": "Cor", "Filters": "Filtros", - "User(s) will recieve this message": "O(s) usuário(s) irão receber essa mensagem.", + "User(s) will receive this message": "O(s) usuário(s) irão receber essa mensagem.", "Color code": "Código de cor", "Engage Message": "Mensagem de engajamento", "Item counts": "Contador de itens", @@ -354,10 +357,13 @@ "Duplicate": "Duplicado", "Code": "Código", "Profile settings": "Configurações de perfil", + "Organization settings": "Configurações da organização", + "System configuration": "Configuração do sistema", + "System config": "Configuração do sistema", "Change Password": "Mudar Senha", "Signatures are only included in response emails.": "As assinaturas são incluídas apenas nos emails de resposta.", "Signature template": "Padrão de assinatura", - "You can use Markdown to format your signature.": "Você pode usar o Markdown para formatar sua assinatura.", + "You can use Markdown to format your signature": "Você pode usar o Markdown para formatar sua assinatura", "Password": "Senha", "Password confirmation": "Confirmação de senha", "Choose the channels": "Escolha os canais", @@ -367,10 +373,10 @@ "New Company": "Nova Empresa", "Edit name": "Editar nome", "Customer": "Cliente", - "Add tag": "Adicionar marcação", + "Add tag": "Adicionar tag", "Company": "Empresa", "New message ": "Nova mensagem ", - "There aren’t any activities at the moment.": "Não há atividades no momento", + "There aren’t any activities at the moment": "Não há atividades no momento", "This item is required": "Esse item é obrigatório", "Manage fields": "Gerenciar campos", "Add integrations ": "Adicionar integrações ", @@ -411,9 +417,6 @@ "Click to select a date": "Clique para selecionar uma data", "Choose users": "Escolher usuários", "Select Brand": "Selecionar uma marca", - "Write here Welcome message.": "Escreva aqui uma mensagem de boas-vindas.", - "Write here Away message.": "Escreva aqui uma mensagem de ausente.", - "Write here Thank you message.": "Escreva aqui uma mensagem de agradecimento.", "Select app": "Selecione um aplicativo", "Enter new password": "Digite sua nova senha", "Choose channels": "Escolher canais", @@ -441,15 +444,12 @@ "Edit Property": "Adicionar Propriedade", "Group:": "Grupo:", "There arent't any fields in this group": "Não há campos nesse grupo", - "Customer Properties": "Propriedades do Cliente", - "Company Properties": "Propriedades da Empresa", "Add an option": "Adicione uma opção", "Copy to clipboard": "Copiar para área de transferência", "Go to home page": "Ir para página inicial", "Assign to": "Atribuir a", "Remove assignee": "Remover atribuição", "Account settings": "Configurações de conta", - "General Settings": "Configurações gerais", "Integration Settings": "Configurações de integração", "Personal settings": "Configurações pessoais", "Add category": "Adicionar categoria", @@ -474,7 +474,7 @@ "Current page url": "URL da página atual", "Browser language": "Idioma do navegador", "conversation": "conversação", - "engageMessage": "mensagemEngajamento", + "engageMessage": "mensagem de Engajamento", "customer": "cliente", "company": "empresa", "starts with": "começa com", @@ -484,10 +484,10 @@ "Basic Info": "Informação básica", "Add Phone": "Adicionar Telefone", "Add Email": "Adicionar E-mail", - "Choose your tags": "Escolha suas marcações", - "Manage tags": "Gerenciar marcações", + "Choose your tags": "Escolha suas tags", + "Manage tags": "Gerenciar tags", "Edit Profile": "Editar perfil", - "Sign out": "Deslogar", + "Sign out": "Sair", "Last Updated By": "Última atualização por", "There is no channel": "Não há canal", "Facebook page": "Página do Facebook", @@ -495,6 +495,7 @@ "Edit segment": "Editar segmento", "New message": "Nova mensagem", "Message": "Mensagem", + "message": "mensagem", "Merge Customers": "Mesclar usuários", "Assign": "Atribuir", "There is no message.": "Não há mensagens.", @@ -542,7 +543,7 @@ "Move": "Mover", "Move deal": "Mover acordo", "Copy": "Copiar", - "Close date": "Fechar data", + "Close date": "Data de Prazo", "Choose product & service": "Escolher produto & serviço", "Select product & service": "Por favor, selecione produto & serviço", "Please, select a close date": "Por favor, selecione uma data próxima", @@ -551,21 +552,21 @@ "SKU": "SKU", "Choose a company": "Selecionar uma empresa", "Choose a customer": "Selecionar um cliente", - "Choose a board": "Selecionar um quadro", + "Choose a board": "Selecionar um board", "Choose a pipeline": "Selecionar um pipeline", - "Manage Board & Pipeline": "Gerenciar Quadros & Pipelines", + "Manage Board & Pipeline": "Gerenciar Boards & Pipelines", "Choose a stage": "Selecione um estágio", "Deal Settings": "Configurações de acordos", - "Boards & Pipelines": "Quadros & Pipelines", + "Boards & Pipelines": "Boards & Pipelines", "Product & Service": "Produto & Serviço", - "There is no pipeline in this board.": "Não há pipelines nesse quadro.", - "There is no board": "Não há quadros", - "New Board": "Novo quadro", + "There is no pipeline in this board.": "Não há pipelines nesse board.", + "There is no board": "Não há boards", + "New Board": "Novo board", "Add pipeline": "Adicionar pipeline", "Create one": "Criar um", "Edit pipeline": "Editar pipeline", "Add stage": "Adicionar estágio", - "Board": "Quadro", + "Board": "Board", "Pipeline": "Pipeline", "Stage": "Estágio", "Add a deal": "Adicionar negócio", @@ -597,7 +598,7 @@ "General": "Geral", "Currency": "Moeda", "Unit of measurement": "Unidade de medida", - "Create another board": "Criar outro quadro", + "Create another board": "Criar outro board", "No pipeline": "No pipeline", "No stage": "Sem palco", "No deal": "Sem acordo", @@ -610,7 +611,7 @@ "Choose a brand": "Escolha a marca", "Write a title": "Escreva o título", "Contact": "Contato", - "Created by": "Creado por", + "Created by": "Criado por", "Manage": "Administrar", "Dropdown": "Suspenso", "Slide-in Left": "Deslize para esquerda", @@ -633,16 +634,17 @@ "Imported User": "Usuário importado", "Export customers": "Exportar clientes", "Import customers": "Importar clientes", + "import customers": "Importar clientes", "Export companies": "Exportar empresas", "Import companies": "Importar empresas", "All customers imported successfully": "Todos os clientes foram importados com sucesso", "There aren't any imports": "Não há importações", "Successfully Removed all customers": "Todos os clientes removidos com sucesso", - "You can only import max 600 at a time": "Você pdoe importar no máximo 600 por vez", + "You can only import max 600 at a time": "Você pode importar no máximo 600 por vez", "Invalid import type": "Tipo de importação inválido", "Last updated": "Ultima atualização", - "Filter by lead status": "Filtrar pelo status da Lead", - "No lead status chosen": "Status da Lead não escolhido", + "Filter by lead status": "Filtrar pelo status do Lead", + "No lead status chosen": "Status do Lead não escolhido", "Schedule:": "Cronograma:", "Every Day": "Todo dia", "Every Month": "Todo mês", @@ -656,7 +658,7 @@ "Every Sunday": "Todo domingo", "Choose a schedule day": "Selecione o tipo de agendamento", "Choose a schedule time": "Selecione o horário do agendamento", - "Won": "Ganhou", + "Won": "Ganho", "Lost": "Perdido", "In Progress": "Em progresso", "It`s size exceeds the limit 10mb": "O tamanho excede o limite de 10 mb", @@ -676,10 +678,10 @@ "We`re ready to help you.": "Estamos prontos para ajudá-lo.", "Please choose a product": "Escolha um produto", "Please choose a currency": "Escolha uma moeda", - "No board": "Nenhum quadro", + "No board": "Nenhum board", "Empty": "Vazio", "There is no account.": "Conta inexistente.", - "There is no tag.": "Sem marcação.", + "There is no tag": "Sem tag", "Skip for now": "Ignorar por enquanto", "Go to Inbox": "Ir para a Caixa de entrada", "Messenger Language": "Idioma do Messenger", @@ -714,7 +716,7 @@ "Add another": "Adicionar outro", "Don't show again": "Não mostre novamente", "No other pipeline": "Nenhum outro pipeline", - "No other boards": "Nenhuma outros quadros", + "No other boards": "Não existem outros boards", "I'm ready to get started": "Estou pronto para começar", "Welcome paragraph": "Estamos muito felizes em ter você aqui. Vamos tirar um momento para você configurar", "Get notified and notify others to keep everything up to date": "Seja notificado e notifique outras pessoas para manter tudo atualizado", @@ -741,7 +743,7 @@ "Create brand channels that are specifically categorized by type and activity": "Crie canais de marca categorizados especificamente por tipo e atividade", "Add a Lead here and see it on your Messenger Widget! In order to see Leads in your inbox, please make sure it is added in your channel.": "Adicione um Lead aqui e veja-o nas ferramentas do seu Messenger! Para ver os leads em sua caixa de entrada, verifique se ele foi adicionado ao seu canal.", "You can choose from our many messenger integrations and add to your knowledge base. The knowledge base will appear in the tab of your messenger widget. To do this, please create and add to your knowledge base.": "Você pode escolher entre nossas muitas integrações com o messenger e adicionar à sua base de conhecimento. A base de conhecimento aparecerá na guia de ferramentas do seu messenger. Para fazer isso, crie e adicione à sua base de conhecimento.", - "An email signature is an opportunity to share information that helps build recognition and trust.": "Uma assinatura de email é uma oportunidade para compartilhar informações que ajudam a criar reconhecimento e confiança.", + "An email signature is an opportunity to share information that helps build recognition and trust": "Uma assinatura de email é uma oportunidade para compartilhar informações que ajudam a criar reconhecimento e confiança", "Let's start taking care of your customers": "Vamos começar a cuidar dos seus clientes", "Add in your first company!": "Adicione sua primeira empresa!", "Choose from our many integrations and add to your channel": "Escolha entre nossas muitas integrações e adicione ao seu canal", @@ -754,18 +756,16 @@ "Oh dear! You have no imports": "Oh céus! Você não tem importações", "A strong customer engagement can help to further brand growth and loyalty": "Um forte envolvimento do cliente pode ajudar a aumentar o crescimento e a lealdade da marca", "Get started on your pipeline": "Comece seu pipeline", - "Connect to Facebook messages right from your Team Inbox": "Conecte-se às mensagens do Facebook diretamente da sua Caixa de entrada da equipe", - "Tweet back to your DMs right from your Team Inbox": "Tweet de volta para seus DMs diretamente da Caixa de entrada da equipe", + "Connect to Facebook messages right from your Team Inbox": "Conecte-se às mensagens do Facebook diretamente da sua Caixa de entrada", + "Tweet back to your DMs right from your Team Inbox": "Tweet de volta para seus DMs diretamente da Caixa de entrada", "Connect straight to your Gmail and get those emails going": "Conecte-se diretamente ao seu Gmail e receba esses e-mails", "Find your lead forms right here in your Widget": "Encontre seus formulários de lead aqui em ferramenta", "Get access to your Knowledge Base right in your Widget": "Tenha acesso à sua Base de Conhecimento diretamente em ferramenta", - "Soon you'll be able to connect Viber straight to your Team Inbox": "Em breve, você poderá conectar o Viber diretamente à sua caixa de entrada da equipe", - "Get a hold of your Whatsapp messages through your Team Inbox": "Receba suas mensagens do WhatsApp por meio da Caixa de entrada da equipe", - "Connect with Wechat and start messaging right from your Team Inbox": "Conecte-se ao Wechat e comece a enviar mensagens diretamente da sua caixa de entrada da equipe", + "Soon you'll be able to connect Viber straight to your Team Inbox": "Em breve, você poderá conectar o Viber diretamente à sua caixa de entrada", + "Get a hold of your Whatsapp messages through your Team Inbox": "Receba suas mensagens do WhatsApp por meio da Caixa de entrada", + "Connect with Wechat and start messaging right from your Team Inbox": "Conecte-se ao Wechat e comece a enviar mensagens diretamente da sua caixa de entrada", "Find feedback that has been gathered from various customer engagement channels.": "Encontre feedback que foi coletado de vários canais de envolvimento do cliente.", - "A report on the total number of customer feedback responses given by team members.": "Um relatório sobre o número total de respostas de feedback do cliente fornecidas pelos membros da equipe.", - "The average time a team member solved a problem based on customer feedback.": "O tempo médio que um membro da equipe resolveu um problema com base no feedback do cliente.", - "You can find stats that defines the average response time by each team member.": "Você pode encontrar estatísticas que definem o tempo médio de resposta de cada membro da equipe.", + "The average time a team member solved a customer's problem based on customer feedback": "O tempo médio que um membro da equipe resolve o problema de um cliente com base no feedback do cliente", "Oh boy, looks like you need to get a head start on your deals": "Oh, parece que você precisa ter uma vantagem inicial nos seus negócios", "Open segments and starting add details": "Abrir segmentos e começar a adicionar detalhes", "Now easier to find contacts according to your brand": "Agora é mais fácil encontrar contatos de acordo com sua marca", @@ -784,30 +784,31 @@ "New permission": "Nova permissão", "New group": "Novo grupo", "Users groups": "Grupos de usuários", - "Choose the module": "Escolha o módulo", - "Choose the actions": "Escolha as ações", - "Choose the users": "Escolha os usuários", - "Choose the groups": "Escolha os grupos", + "Choose the module": "Escolher o módulo", + "Choose module": "Escolha o módulo", + "Choose the actions": "Escolher as ações", + "Choose the users": "Escolher os usuários", + "Choose the groups": "Escolher os grupos", "Choose groups": "Escolha grupos", "Allow": "Permitir", "Invitation Status": "Status do convite", - "Permission": "Permitir", + "Permission": "Permissões", "Continue": "Continuar", "Create brand": "Criar marca", "Create your first live chat and in-app messaging Stay up to date with every single customer feedback for more meaningful interactions": "Crie seu primeiro bate-papo ao vivo e mensagens no aplicativo. Mantenha-se atualizado com todos os comentários dos clientes para interações mais significativas.", - "A channel gives a full view of all the brands and its applications all in one place You can see all in-coming messages in your team inbox": "Um canal oferece uma visão completa de todas as marcas e suas aplicações em um só lugar. Você pode ver todas as mensagens recebidas na caixa de entrada da equipe.", - "Hooray and Congratulations! You've completed the initial setup!": "Viva e parabéns! Você concluiu a configuração inicial!", - "Paste the code below before the body tag on every page you want erxes chat to appear": "Cole o código abaixo antes da marcação do corpo em todas as páginas que você deseja que o erxes chat apareça", - "Choose messengers": "Escolha messengers", - "erxes allows you to create multiple messengers": "erxes permite criar vários messengers", - "erxes allows you to create multiple brands": "erxes permite criar várias marcas", - "erxes allows you to create multiple channels": "erxes permite criar vários canais", + "A channel gives a full view of all the brands and its applications all in one place You can see all in-coming messages in your team inbox": "Um canal oferece uma visão completa de todas as marcas e suas aplicações em um só lugar. Você pode ver todas as mensagens recebidas na caixa de entrada.", + "Hooray and Congratulations! You've completed the initial setup!": "Parabéns! Você concluiu a configuração inicial!", + "Paste the code below before the body tag on every page you want erxes chat to appear": "Cole o código abaixo antes da tag do corpo em todas as páginas que você deseja que o erxes apareça", + "Choose messengers": "Escolha o mensageiro", + "erxes allows you to create multiple messengers": "permite criar vários messengers", + "erxes allows you to create multiple brands": "permite criar várias marcas", + "erxes allows you to create multiple channels": "permite criar vários canais", "Contacts": "Contatos", "Create group": "Criar grupo", "Visitors": "Visitantes", - "Due in the next day": "Vencimento no dia seguinte", - "Due in the next week": "Vencimento na próxima semana", - "Due in the next month": "Vencimento no próximo mês", + "Due in the next day": "Prazo no dia seguinte", + "Due in the next week": "Prazo na próxima semana", + "Due in the next month": "Prazo no próximo mês", "Has no close date": "Não tem data de fechamento", "Over due": "Vencido", "Clear Filter": "Limpar filtro", @@ -819,10 +820,10 @@ "Choose team members": "Escolha membros da equipe", "erxes Inc": "erxes Inc", "Get": "Receber", - "Download ios app for free on the App Store": "Baixe o aplicativo ios gratuitamente na App Store.", + "Download ios app for free on the App Store": "Baixe o aplicativo iOS gratuitamente na App Store.", "Download android app for free on the Google play": "Baixe o aplicativo Android gratuitamente no Google play.", - "Please upgrade your browser to use erxes!": "Atualize seu navegador para usar Erxes!", - "Unfortunately, You are running on a browser that may not be fully compatible with erxes": "Infelizmente, você está executando em um navegador que pode não ser totalmente compatível com Erxes.", + "Please upgrade your browser to use erxes!": "Atualize seu navegador!", + "Unfortunately, You are running on a browser that may not be fully compatible with erxes": "Infelizmente, você está executando em um navegador que pode não ser totalmente compatível.", "Please use recommended version": "Por favor, use a versão recomendada", "Messenger data": "Dados do messenger", "Customer field data": "Dados campo do cliente", @@ -834,12 +835,12 @@ "What action can do": "Que ação pode ser feita", "Who can": "Quem pode", "Grant permission": "Conceder permissão", - "Check if permission is allowed": "Verifique se a permissão é permitida", + "Check if permission is allowed": "Confirme a permissão", "Then": "Então", "Or": "Ou", - "Auto message description": "Envie email direcionado e converse com usuários logados com base em sua marca / marcação / segmento. Você pode definir seu horário para enviar um e-mail ou conversar com antecedência. O bate-papo pode ser um trecho, badge ou a mensagem inteira. Podendo enviar um texto ou vídeo.", - "Manual message description": "Envie email direcionado e converse com usuários logados com base em sua marca / marcação / segmento. Um e-mail ou chat será enviado imediatamente após você clicar no botão Salvar. O bate-papo pode ser um trecho, badge ou a mensagem inteira. Podendo enviar um texto ou vídeo.", - "Visitor auto message description": "Envie chats direcionados para visitantes desconectados no site, com base na página de visita, atividade, país de residência e cidade. O bate-papo pode ser um trecho, badge ou a mensagem inteira. Podendo enviar um texto ou vídeo.", + "Auto message description": "Descrição da mensagem automática", + "Manual message description": "Descrição da mensagem manual", + "Visitor auto message description": "Descrição da mensagem automática do visitante", "Required field": "Campo obrigatório!", "Invalid email format! Please enter a valid email address": "Formato de email inválido! Por favor insira um endereço de e-mail válido.", "Invalid link": "Link inválido!", @@ -847,8 +848,8 @@ "characters": "caracteres!", "Invalid number format! Please enter a valid number": "Formato de número inválido! por favor insira um número válido.", "Insert email template to content": "Inserir modelo de email no conteúdo", - "Logs": "Histórico", - "There are no logs recorded": "Não há registros registrados", + "Logs": "Logs", + "There are no logs recorded": "Não há logs registrados", "Module": "Módulo", "Unchanged fields": "Campos inalterados", "Changed fields": "Campos alteráveis", @@ -872,13 +873,13 @@ "Invite to video call": "Convidar para videochamada", "Video call invitation sent": "Convite para videochamada enviado", "Conversion": "Conversão", - "Go to import": "Ir para importar", + "Go to import": "Importar", "Related": "Relacionado", "sec": "sec", "Workflow": "Fluxo de trabalho", "Watch": "Assistir", "Watching": "Assistindo", - "Team Inbox": "Caixa de entrada da equipe", + "Team Inbox": "Caixa de entrada", "Public": "Público", "Private": "Privado", "default language": "idioma padrão", @@ -892,7 +893,7 @@ "Task": "Tarefa", "Ticket Settings": "Configurações de ticket", "Task Settings": "Configurações de tarefa", - "Stage name": "Nome artístico", + "Stage name": "Nome do estágio", "Add a task": "Adicionar uma tarefa", "Add a ticket": "Adicionar um ticket", "Priority": "Prioridade", @@ -902,7 +903,7 @@ "Low": "Baixa", "Attachments": "Anexos", "Source": "Origem", - "Select a source": "Selecione uma origem", + "Select a source": "Selecione uma fonte", "Upload an attachment": "Carregar um anexo", "Select a priority": "Selecione uma prioridade", "Edit task": "Editar tarefa", @@ -919,5 +920,1576 @@ "There are": "Existem", "Paste the code below before the body tag on every page you want erxes lead to appear": "Cole o código abaixo antes da etiqueta do corpo em todas as páginas que você deseja que os erxes apareçam", "If your flow type is embedded paste the code below additionally that you want erxes lead to appear": "Se o seu tipo de fluxo estiver incorporado, cole o código abaixo adicionalmente, para que apareça o erxes", - "If your flow type is popup paste the code below additionally in your button": "Se o seu tipo de fluxo for pop-up, cole o código abaixo adicionalmente no seu botão" -} + "If your flow type is popup paste the code below additionally in your button": "Se o seu tipo de fluxo for pop-up, cole o código abaixo adicionalmente no seu botão", + "Send an Email": "Enviar um e-mail", + "Convert": "Converter", + "Convert to a deal": "Converter em acordo", + "Convert to a task": "Converter em tarefa", + "Convert to a ticket": "Converter em ticket", + "Resolve all": "Resolver todos", + "Error": "Erro", + "Invalid number": "Número inválido", + "You do not have permission to view this task": "Você não tem permissão para ver esta tarefa", + "Set reminder": "Definir lembrete", + "Due date": "Data de Vencimento", + "Jump to task": "Pule para a tarefa", + "Undefined": "Indefinido", + "deleted": "apagado", + "checked": "verificado", + "unchecked": "não verificado", + "created": "criado", + "show details": "mostrar detalhes", + "this customer": "este cliente", + "This customer registered to erxes by": "Este cliente se cadastrou por", + "registered": "registrado", + "This customer": "Este cliente", + "Unknown": "Desconhecido", + "sent email": "e-mail enviado", + "Collapse": "Colapsar", + "Expand": "Expandir", + "Engage email": "Engajar e-mail", + "left a note": "deixou uma nota", + "System": "Sistema", + "This": "Esse", + "joined a": "juntou-se a um", + "segment": "segmento", + "removed assignee of": "atribuição removida de", + "moved": "movido", + "Welcome to erxes video tutorial": "Bem-vindo ao tutorial em vídeo", + "Here is where you can check your performance and find some tips": "Aqui é onde você pode verificar seu desempenho e encontrar algumas dicas", + "For further help, please consult the": "Para obter mais ajuda, consulte a", + "documentation": "documentação", + "Default stage": "Estágio padrão", + "Setting up stage": "Configurando o palco", + "Sales pipeline stage + Product service": "Estágio de pipeline de vendas + serviço de produto", + "6 steps": "6 etapas", + "About 5 minutes": "Cerca de 5 minutos", + "Campaign & Projects": "Campanha e Projetos", + "Growth hacking template": "Modelo de growth hacking", + "Task stage": "Estágio de tarefa", + "Tickets stage": "Etapa de ingressos", + "Tags - inbox, customer, engage pop, up": "Tags - caixa de entrada, cliente, pop-up de engajamento", + "Segments - customer": "Segmentos - cliente", + "Permission - user group": "Permissão - grupo de usuários", + "Team members - invite": "Membros da equipe - convite", + "Email template": "Modelo de email", + "Import/export - data": "Importar / exportar - dados", + "Script Manager": "Gerente de Script", + "19 steps": "19 passos", + "About 19 minutes": "Cerca de 19 minutos", + "Using stage": "Usando o palco", + "8 steps": "8 passos", + "About 20 minutes": "Cerca de 20 minutos", + "Team inbox": "Caixa de entrada da equipe", + "Growth Hacking": "Hacking de crescimento", + "Use Cases": "Casos de Uso", + "Please refer to the following playlist on the most up to date use case video guides": "Consulte a lista de reprodução a seguir nos guias de vídeo de casos de uso mais atualizados", + "These videos will help you accomplish tasks by combining multiple erxes features": "Esses vídeos irão ajudá-lo a realizar tarefas, combinando vários recursos erxes", + "Tutorials": "Tutoriais", + "Help": "Ajuda", + "The conversation Assignee removed": "O destinatário da conversa foi removido", + "The conversation has been resolved!": "A conversa foi resolvida!", + "The conversation has been reopened and restored to Inbox": "A conversa foi reaberta e restaurada na caixa de entrada", + "You successfully saved a response template": "Você salvou com sucesso um modelo de resposta", + "Are you sure you want to resolve all conversations?": "Tem certeza de que deseja resolver todas as conversas?", + "You dont have permission to listen": "Você não tem permissão para ouvir", + "Meet with": "Encontrar com", + "Meeting Ready": "Reunião Pronta", + "Join Call": "Junte-se à chamada", + "You have received a video call request": "Você recebeu uma solicitação de videochamada", + "Video call ended": "Vídeo chamada encerrada", + "Reply to:": "Responder a:", + "Reply": "Responder", + "View more replies": "Veja mais respostas", + "Show resolved comments": "Mostrar comentários resolvidos", + "Post": "Publicar", + "Reply to all": "Responder a todos", + "Forward": "Avançar", + "Reply all": "Responder todos", + "Customer is offline Click to hide and send messages and they will receive them the next time they are online": "O cliente está offline Clique para ocultar e enviar mensagens e eles irão recebê-las na próxima vez que estiverem online", + "Conversation not found": "Conversa não encontrada", + "Customer not found": "Cliente não encontrado", + "Which integration would you like to connect?": "Qual integração você gostaria de conectar?", + "Facebook Post": "Publicações do Facebook", + "Receiving Facebook post and comments in your team inbox": "Recebendo postagens e comentários do Facebook na caixa de entrada da sua equipe", + "Facebook Messenger": "Facebook Messenger", + "Receiving Facebook messages in your team inbox": "Recebendo mensagens do Facebook na caixa de entrada da sua equipe", + "Answer questions on your website with a live chat widget": "Responda a perguntas no seu site com um widget de chat ao vivo", + "Gmail": "Gmail", + "Connect your Gmail to start receiving emails in your team inbox": "Conecte seu Gmail para começar a receber e-mails em sua caixa de entrada compartilhada", + "See all Integration": "Veja todas as Integração", + "Connect Integration": "Conectar Integrações", + "Awaiting Response": "Esperando resposta", + "Manage Channels": "Gerenciar canais", + "Watch Tutorial": "Veja o tutorial", + "Start Date": "Data de início", + "End Date": "Data final", + "Oh boy, looks like you need to get a head start on your board": "Nossa, parece que você precisa começar o seu board", + "Choose board": "Escolha o board", + "Choose pipeline": "Escolha o pipeline", + "Show Menu": "Mostrar Menu", + "Hide Menu": "Esconder o Menu", + "Archived items": "Itens arquivados", + "Filter by created members": "Filtrar por membros criados", + "Filter by priority": "Filtrar por prioridade", + "Filter by team members": "Filtrar por membros da equipe", + "Assigned to no one": "Não atribuído", + "No label chosen": "Nenhum rótulo escolhido", + "Filter by labels": "Filtrar por rótulos", + "Choose a source": "Escolha uma fonte", + "Loading": "Carregando", + "Due to the next day": "Até o dia seguinte", + "Overdue": "Atrasado", + "Switch To": "Troque para", + "item": "item", + "list": "lista", + "Response Frequency Report": "Relatório de Frequência de Resposta", + "There aren’t any archived": "Não há nenhum arquivado", + "Total conversation's session count, made with customers through every integration": "Contagem total de sessões de conversa, feita com clientes em cada integração", + "The general speed of the response report for customer request": "A velocidade geral do relatório de resposta para a solicitação do cliente", + "Download insight data as an excel sheet": "Baixe os dados do insight como uma planilha do Excel", + "Total messages count, sent by customers through every integration": "Contagem total de mensagens, enviadas por clientes em cada integração", + "A report on the total number of customer feedback responses given by team members": "Um relatório sobre o número total de respostas de feedback do cliente fornecidas pelos membros da equipe", + "You can find stats that defines the average response time by each team member": "Você pode encontrar estatísticas que definem o tempo médio de resposta de cada membro da equipe", + "Import & Export": "Importar & Exportar", + "Email Deliveries": "Entregas de e-mail", + "Outgoing webhooks": "Webhooks de saída", + "Set up your initial account settings so that things run smoothly in unison": "Defina as configurações iniciais da conta para que tudo corra bem", + "File upload": "Upload de arquivo", + "Learn how to set file uploading": "Aprenda a configurar o upload de arquivos", + "Upload File Types": "Carregar tipos de arquivo", + "Upload File Types of Widget": "Carregar tipos de arquivo de widget", + "Upload Service Type": "Tipo de serviço de upload", + "Bucket file system type": "Tipo de sistema de arquivos de intervalo", + "Learn how to create or find your Google Cloud Storage bucket": "Saiba como criar ou encontrar seu intervalo do Google Cloud Storage", + "Google Bucket Name": "Nome do segmento do Google", + "Learn how to set AWS S3 Variables": "Aprenda a definir as variáveis ​​AWS S3", + "AWS Access Key Id": "Chave de acesso do Id AWS", + "AWS Secret Access Key": "Chave de acesso secreta da AWS", + "AWS Bucket": "AWS Bucket", + "AWS Prefix": "Prefixo AWS", + "AWS Compatible Service Endpoint": "Terminal de serviço compatível com AWS", + "AWS Force Path Style": "AWS Force Path Style", + "AWS SES Access Key id": "ID da chave de acesso AWS SES", + "AWS SES Secret Access Key": "Chave de acesso secreta do AWS SES", + "AWS Region": "Região AWS", + "AWS SES Config Set": "Conjunto de configuração AWS SES", + "Used when using s3 compatible service": "Usado ao utilizar serviço compatível com s3", + "In this field, the AWS SES configuration is dedicated to providing transaction emails": "Neste campo, a configuração AWS SES é dedicada a fornecer e-mails de transação", + "Learn how to set Amazon SES variables": "Aprenda a definir variáveis ​​do Amazon SES", + "Learn how to set Google variables": "Aprenda a definir as variáveis ​​do Google", + "Google Project Id": "Id do projeto do Google", + "Google Application Credentials": "Credenciais de aplicativos do Google", + "Google Application Credentials JSON": "JSON de credenciais de aplicativos do Google", + "Google Client Id": "Id do cliente Google", + "Google Client Secret": "Google Client Secret", + "The topic value created in Gmail setup": "O valor do tópico criado na configuração do Gmail", + "Firebase config for notifications": "Configuração do Firebase para notificações", + "Common mail config": "Configuração de Email comum", + "Learn more about Email Settings": "Saiba mais sobre as configurações de e-mail", + "Default Email Service": "Serviço de e-mail padrão", + "Custom mail service": "Serviço de Email personalizado", + "Learn the case of custom email service": "Aprenda o caso do serviço de e-mail personalizado", + "Mail Service Name": "Nome do serviço de Email", + "Constants": "Constantes", + "Pronoun choices": "Escolhas de pronomes", + "Company industry types": "Tipos de indústria da empresa", + "Social links": "Links sociais", + "Back to Settings": "Voltar para Configurações", + "Integrations config": "Configuração de integração", + "Engage config": "Configuração de Engajamento", + "Learn how to set Facebook Integration Variables": "Aprenda como definir as variáveis ​​de integração do Facebook", + "Facebook App Id": "Id do aplicativo do Facebook", + "Facebook App Secret": "Segredo do aplicativo do Facebook", + "Facebook Verify Token": "Token de verificação do Facebook", + "Facebook permissions": "Permissões do Facebook", + "Twitter Consumer Key": "Chave do consumidor do Twitter", + "Twitter Consumer secret": "Segredo do consumidor do Twitter", + "Twitter Access Token": "Token de acesso do Twitter", + "Twitter Access Token Secret": "Segredo do token de acesso do Twitter", + "Twitter Webhook Env": "Env Webhook do Twitter", + "Nylas Client Id": "ID do cliente Nylas", + "Nylas Client Secret": "Segredo do cliente Nylas", + "Nylas Webhook Callback Url": "URL de retorno de chamada do Nylas Webhook", + "Microsoft Client Id": "ID de cliente Microsoft", + "Microsoft Client Secret": "Segredo do cliente Microsoft", + "Encryption Key": "Chave de encriptação", + "Learn how to set Twitter Integration Variables": "Aprenda como definir as variáveis ​​de integração do Twitter", + "Learn how to set Nylas Integration": "Aprenda como configurar a integração Nylas", + "Learn more about Video call configuration": "Saiba mais sobre a configuração de videochamada", + "Learn how to set Gmail Integration Variables": "Aprenda a definir as variáveis ​​de integração do Gmail", + "Learn how to set Smooch Integration Variables": "Aprenda como definir variáveis ​​de integração Smooch", + "Learn how to set WhatsApp Integration Variables": "Aprenda a definir as variáveis ​​de integração do WhatsApp", + "Chat-API API key": "Chave da API de bate-papo", + "Chat-API Webhook Callback Url": "URL de retorno de chamada do Webhook da API de bate-papo", + "Video call type": "Tipo de videochamada", + "Daily api key": "Chave de API diária", + "Daily end point": "Ponto final diário", + "Video call": "Video chamada", + "Sunshine Conversations API": "API Sunshine Conversations", + "Smooch App Id": "Id do App Smooch", + "Smooch App Key Id": "Id da chave do App Smooch", + "Smooch App Key Secret": "Segredo da chave do App Smooch", + "Smooch Webhook Callback Url": "URL de retorno de chamada do webhook Smooch", + "You successfully updated engages config": "Você atualizou com sucesso a configuração do engajamento", + "Successfully sent verification email. Please check your inbox": "Email de verificação enviado com sucesso. Por favor, verifique sua caixa de entrada", + "You are about to remove verified email. Are your sure?": "Você está prestes a remover o e-mail verificado. Você tem certeza?", + "Product Board": "Board de Produtos", + "Learn how to set Product Board Integration Variables": "Aprenda a definir as variáveis ​​de integração do board de produtos", + "Product Board Access token": "Token de acesso do board de produto", + "General system config": "Configuração geral do sistema", + "General Settings": "Configurações gerais", + "general settings": "configurações gerais", + "Write your default email service name": "Escreva o nome do seu serviço de e-mail padrão", + "Default email service is SES": "O serviço de e-mail padrão é SES", + "Comma-separated list of media types": "Lista separada por vírgulas de tipos de mídia", + "Leave it blank for accepting all media types": "Deixe em branco para aceitar todos os tipos de mídia", + "General Config": "Configuração Geral", + "Verify the email addresses that you send email from": "Verifique os endereços de e-mail dos quais você envia e-mails", + "Send test email": "Enviar e-mail de teste", + "Write your content": "Escreva seu conteúdo", + "Send your first testing email": "Envie seu primeiro e-mail de teste", + "Amazon Simple Email Service enables you to send and receive email using a reliable and scalable email platform": "O Amazon Simple Email Service permite que você envie e receba e-mail usando uma plataforma de e-mail confiável e escalonável", + "Set up your custom amazon simple email service account": "Configure sua conta de serviço de e-mail simples amazon personalizada", + "Learn more about Amazon SES configuration": "Saiba mais sobre a configuração do Amazon SES", + "AWS SES Access key ID": "ID da chave de acesso AWS SES", + "AWS SES Secret access key": "Chave de acesso secreta do AWS SES", + "AWS SES Region": "Região AWS SES", + "AWS SES Config set": "Conjunto de configurações do AWS SES", + "Unverified emails limit": "Limite de e-mails não verificados", + "To": "Para", + "Your team members are the bolts and nuts of your business": "Os membros da sua equipe são os motores de propulsão do seu negócio", + "Make sure all the parts are set and ready to go": "Certifique-se de que todas as peças estão definidas e prontas para uso", + "Here you can see a list of all your team members, you can categorize them into groups, welcome new members and edit their info": "Aqui você pode ver uma lista de todos os membros da sua equipe, você pode categorizá-los em grupos, dar as boas-vindas aos novos membros e editar suas informações", + "Invite team members": "Convide membros da equipe", + "Invitation status": "Status do convite", + "Active": "Ativo", + "Deactivated": "Desativado", + "Please separate each email address with comma": "Separe cada endereço de e-mail com vírgulas", + "Email address": "Endereço de e-mail", + "Choose group": "Escolha o grupo", + "or": "ou", + "add many at once": "adicione vários de uma vez", + "You can not delete yourself": "Você não pode se deletar", + "You successfully verified": "Verificado com sucesso", + "Congrats, Successfully updated": "Parabéns, atualizado com sucesso", + "Successfully resent the invitation": "O convite foi reenviado com sucesso", + "Please enter a repeat password": "Por favor repita a senha", + "Password didn't match": "Senha não confere", + "Your password has been changed and updated": "Sua senha foi alterada e atualizada", + "No email address found!": "Nenhum endereço de e-mail encontrado!", + "New Group": "Novo grupo", + "Create user group": "Criar grupo de usuários", + "Please select the module!": "Selecione o módulo!", + "Please select at least one action!": "Selecione pelo menos uma ação!", + "Please select at least one group or user!": "Selecione pelo menos um grupo ou usuário!", + "Choose actions": "Escolha as ações", + "Choose action": "Escolher ação", + "Group": "Grupo", + "You successfully deleted a permission": "Você excluiu uma permissão com sucesso", + "Copies user group along with the permissions & users": "Copiar o grupo de usuários junto com as permissões e usuários", + "You successfully deleted a user group": "Você excluiu com sucesso um grupo de usuários", + "The quick view finder helps you to view basic information on both companies and customers alike": "O localizador de visualização rápida ajuda você a visualizar informações básicas sobre empresas e clientes", + "Add groups and fields of the exact information you want to see": "Adicione grupos e campos das informações exatas que você deseja ver", + "properties": "propriedades", + "Property types": "Tipos de propriedade", + "Basic information": "Informação básica", + "Basic information of a customer": "Informações básicas de um cliente", + "Basic information of a company": "Informações básicas de uma empresa", + "Basic information of a product": "Informações básicas de um produto", + "Primary E-mail": "E-mail primário", + "Primary Phone": "Telefone principal", + "Primary phone:": "Telefone principal:", + "You successfully added a property group": "Você adicionou um grupo de propriedades com sucesso", + "You successfully added a property": "Você adicionou uma propriedade com sucesso", + "You successfully deleted a property group": "Você excluiu com sucesso um grupo de propriedades", + "You successfully deleted a property field": "Você excluiu com sucesso um campo de propriedade", + "Primary Name": "Nome Primário", + "Category": "Categoria", + "Customer Properties": "Propriedades do cliente", + "customer properties": "propriedades do cliente", + "Company Properties": "Propriedades da empresa", + "company properties": "propriedades da empresa", + "Product Properties": "Propriedades do Produto", + "product properties": "propriedades do Produto", + "You changed a property field visibility": "Você alterou a visibilidade de um campo de propriedade", + "You changed a property group visibility": "Você alterou a visibilidade de um grupo de propriedades", + "engageMessage tags": "tags para mensagens de engajamento", + "conversation tags": "tags para conversa", + "customer tags": "tags para cliente", + "company tags": "tags para empresas", + "integration tags": "tags para integração", + "product tags": "tags para produto e serviço", + "Tags type": "Tipo de tags", + "You successfully added a tag": "Você adicionou uma tag com sucesso", + "You successfully deleted a tag": "Você excluiu uma tag com sucesso", + "Edit tag": "Editar tag", + "Tag duplicated": "Tag duplicada", + "General settings": "Configurações Gerais", + "Getting Started with Segments": "Introdução aos segmentos", + "The Segments feature helps you to filter, target, and engage a certain group of contacts, The Segments are used in the Contacts and Engage features": "O recurso de segmentos ajuda você a filtrar, direcionar e envolver um determinado grupo de contatos, os segmentos são usados ​​nos recursos de Contatos e Engage", + "Create Custom Properties": "Crie propriedades personalizadas", + "Watch our tutorial": "Veja nosso tutorial", + "Choose the Contact Type": "Escolha o tipo de contato", + "If you wish to segment by any properties that are not available on erxes, make sure you’ve already created them": "Se você deseja segmentar por quaisquer propriedades que não estão disponíveis no erxes, certifique-se de já as ter criado", + "Make sure you’re on the right page and you want to segment by from the list on the left: Visitor, Lead, Customer, Company": "Certifique-se de que você está na página certa e deseja segmentar na lista à esquerda: Visitante, Lead, Cliente, Empresa", + "Customer Segments": "Segmentos de clientes", + "Lead": "Lead", + "Visitor": "Visitante", + "Learn how to create a segment": "Aprenda a criar um segmento", + "Go to Properties": "Ir para Propriedades", + "Install the Event Tracking script": "Instale o script de acompanhamento de eventos", + "If you wish to segment by events, i.e actions that are triggered by something your Customer performs on your website or app.": "Se você deseja segmentar por eventos, ou seja, ações que são acionadas por algo que seu cliente realiza em seu site ou aplicativo.", + "Select the property/event you want to filter by, select one of the operators and type in or select the value from the dropdown menu": "Selecione a propriedade/evento pelo qual deseja filtrar, selecione um dos operadores e digite ou selecione o valor no menu suspenso", + "Add Properties": "Adicionar Propriedades", + "Add Events": "Adicionar Eventos", + "Create your Segment": "Crie o seu segmento", + "Setup a new segment": "Configure um novo segmento", + "There aren’t any filters at the moment. You can create a segment by Property and/or by Events": "Não há filtros no momento. Você pode criar um segmento por propriedade e/ou por eventos", + "Segment Name": "Nome do Segmento", + "Not selected": "Não selecionado", + "Creating Customer Segment": "Criar Segmento de Cliente", + "segments": "segmentos", + "There aren’t any filters at the moment, You can create a segment by Property and/or by Events": "Não há filtros no momento. Você pode criar um segmento por propriedade e/ou por eventos", + "Show count": "Mostrar contagem", + "Create your first Task Board": "Crie o seu primeiro Board de Tarefas", + "Tip: Filter": "Dica: Filtro", + "Tip: This could be equivalent to your brands or you can organize by year/project/etc": "Dica: isso pode ser equivalente às suas marcas ou você pode organizar por ano / projeto / etc", + "Click on “Show Menu” to filter tasks by assigned team members, customers, date, etc": "Clique em “Mostrar Menu” para filtrar tarefas por membros da equipe atribuídos, clientes, data, etc", + "Getting Started with Tasks": "Introdução a Tarefas", + "Create a more collaborative, self-reliant and cross-linked team with our Kanban-style boards": "Crie uma equipe mais colaborativa, autossuficiente e interligada com nossos boards de estilo Kanban", + "Go to Board & Pipeline": "Ir para Boards & Pipeline", + "Add New": "Adicionar novo", + "Getting Started with Sales Pipeline": "Introdução ao funil de vendas", + "Drive leads to a successful close with our Kanban-style boards": "O Drive leva a um fechamento bem-sucedido com nossas placas de estilo Kanban", + "Tip: This could be equivalent to your departments and/or you can organize by year/project/etc": "Dica: isso pode ser equivalente aos seus departamentos e/ou você pode organizar por ano / projeto / etc", + "Start adding Pipelines to the Board": "Comece a adicionar pipelines ao board", + "Tip: This could be a bit more granular than the Board and/or you can organize by period/project/etc": "Dica: Isso pode ser um pouco mais granular do que o Board e/ou você pode organizar por período / projeto / etc", + "Create a Board": "Criar um Board", + "Create a Pipeline": "Crie um Pipeline", + "Manage your boards and pipelines so that its easy to manage incoming pop ups or requests that is adaptable to your team's needs": "Gerencie seus pipelines para que seja fácil gerenciar pop-ups ou solicitações que se adaptem às necessidades de sua equipe", + "Add in or delete boards and pipelines to keep business development on track and in check": "Adicionar ou excluir pipelines para manter o desenvolvimento sob controle", + "Here you can find data of all your previous imports of companies and customers": "Aqui você pode encontrar dados de todas as suas importações anteriores de empresas e clientes", + "Find out when they joined and their current status": "Descubra quando eles entraram e seu status atual", + "Nothing goes missing around here": "Não falta nada por aqui", + "Import & export": "Importar e exportar", + "Download Template": "Baixar modelo", + "Download template": "Baixar modelo", + "Getting Started with Import & Export Feature": "Introdução ao recurso de importação e exportação", + "These steps will help you with importing or exporting your data to and from erxes": "Estas etapas irão ajudá-lo a importar ou exportar seus dados de e para erxes", + "Export your data": "Exporte seus dados", + "Export your data from your previous software or have your data sheet (csv, xls) ready": "Exporte seus dados de seu software anterior ou tenha sua folha de dados (csv, xls) pronta", + "If you wish to import any properties that are not available on erxes, you need to create custom properties": "Se você deseja importar quaisquer propriedades que não estão disponíveis no erxes, você precisa criar propriedades personalizadas", + "Learn More": "Saber mais", + "Choose the data type": "Escolha o tipo de dados", + "Make sure you’re on the right page and you’ve selected the right data type (Lead, Customer, etc, on the left)": "Verifique se você está na página certa e se selecionou o tipo de dados correto (lead, cliente etc, à esquerda)", + "Click on “Download Template” for importing": "Clique em “Baixar modelo” para importar", + "This is an important step, because your column titles need to match with erxes titles": "Esta é uma etapa importante, porque os títulos das colunas precisam corresponder aos títulos erxes", + "Clean and prepare your data sheet": "Limpe e prepare sua folha de dados", + "Make sure the column titles match with the Template": "Certifique-se de que os títulos das colunas correspondam ao modelo", + "The order of the columns does not need to match": "A ordem das colunas não precisa corresponder", + "You can export your data from the list on the left": "Você pode exportar seus dados da lista à esquerda", + "If you wish to export your popup forms, go to Customer and click on “Export Popups Data”": "Se você deseja exportar seus formulários pop-up, vá para Cliente e clique em “Exportar dados de pop-ups”", + "Go to Customers": "Ir para os clientes", + "Export Pop-ups data": "Exportar dados de pop-ups", + "brand": "marca", + "channel": "canal", + "permission": "permissão", + "product": "produtos", + "task": "tarefa", + "Tasks": "Tarefas", + "Export tickets": "Exportar tickets", + "Import tickets": "Importar tickets", + "Import": "Importar", + "Export brands": "Exportar marcas", + "Export channels": "Exportar canais", + "Export leads": "Exportar leads", + "Export permissions": "Exportar permissões", + "products": "produtos", + "sales pipelines": "pipelines de vendas", + "Export sales pipelines": "Exportar pipelines de vendas", + "tasks": "tarefas", + "Export tasks": "Exportar tarefas", + "created at": "criado em", + "Select Columns": "Selecione as colunas", + "Download csv": "Baixar csv", + "Download xlsx": "Baixar xlsx", + "Modified at": "Modificado em", + "Date of birth": "Data de nascimento", + "Pronoun": "Pronome", + "Status do Lead": "Status do Lead", + "Has authority": "Tem autoridade", + "Is online": "Está online", + "Remote address": "Endereço remoto", + "Region": "Região", + "Host name": "Nome do host", + "Linguagem": "Idioma", + "User agent": "Agente", + "Profile score": "Pontuação do perfil", + "email deliveries": "entregas de e-mail", + "There are no logs": "Não há registros", + "Add Webhook": "Adicionar Webhook", + "Webhooks allow you to listen for triggers in your app, which will send relevant data to external URLs in real-time": "Os webhooks permitem que você ouça gatilhos em seu aplicativo, que enviarão dados relevantes para URLs externos em tempo real", + "Channels are important to know how and where your team members are spread out": "Os canais são importantes para saber como e onde os membros da sua equipe estão espalhados", + "Manage your channels and stay at the top of your game": "Gerencie seus canais e mantenha-se atualizado", + "Add New Channel": "Adicionar novo canal", + "'s integration": "integração", + "You successfully managed an integration": "Você gerenciou com sucesso uma integração", + "You successfully deleted a channel": "Você excluiu um canal com sucesso", + "You successfully added a channel": "Você adicionou um canal com sucesso", + "You successfully updated a channel": "Você atualizou um canal com sucesso", + "Add unlimited Brands with unlimited support to further your growth and accelerate your business": "Adicione marcas ilimitadas com suporte ilimitado para promover seu crescimento", + "Add New Brand": "Adicionar nova marca", + "You successfully added a brand": "Você adicionou uma marca com sucesso", + "You successfully deleted a brand": "Você excluiu uma marca com sucesso", + "All Integrations": "Todas as integrações", + "all integrations": "todas as integrações", + "All integrations": "Todas as integrações", + "Connect to Facebook posts right from your Team Inbox": "Conecte-se às postagens do Facebook diretamente da sua caixa de entrada da equipe", + "Connect and manage Facebook Messages right from your Team Inbox": "Conecte e gerencie as mensagens do Facebook diretamente da sua caixa de entrada da equipe", + "See and reply to Messenger messages in your Team Inbox": "Ver e responder às mensagens do Messenger em sua caixa de entrada de equipe", + "Connect a company email address such as sales@mycompany.com or info@mycompany.com": "Conecte um endereço de e-mail comercial, como vendas@minhaempresa.com ou info@minhaempresa.com", + "Connect a company email address such as": "Conecte um endereço de e-mail comercial, como", + "sales@mycompany": "vendas@minhaempresa", + "info@mycompany": "info@minhaempresa", + "Connect your call pro phone number": "Conecte o seu número de telefone profissional", + "Connect your chatfuel account": "Conecte sua conta chatfuel", + "Connect to your Telegram, a cloud-based mobile and desktop messaging app": "Conecte-se ao seu Telegram, um aplicativo de mensagens móvel e desktop baseado em nuvem", + "Connect Viber to your Team Inbox": "Conecte o Viber à sua caixa de entrada da equipe", + "See and reply to Line messages in your Team Inbox": "Ver e responder a mensagens do Line na caixa de entrada da equipe", + "Connect your Telnyx account to send & receive SMS": "Conecte sua conta Telnyx para enviar e receber SMS", + "Configure incoming webhooks": "Configurar webhooks de entrada", + "Set up your integrations and start connecting with your customers": "Configure suas integrações e comece a se conectar com seus clientes", + "Now you can reach them on wherever platform they feel most comfortable": "Agora você pode alcançá-los em qualquer plataforma em que se sintam mais confortáveis", + "Type to search for an integration": "Digite para pesquisar uma integração", + "For support teams": "Para equipes de suporte", + "Featured": "Apresentou", + "For sales teams": "Para equipes de vendas", + "For marketing teams": "Para equipes de marketing", + "Works with": "Funciona com", + "Categories": "Categorias", + "Email marketing": "Email marketing", + "Messaging": "Mensagens", + "Marketing automation": "Automação de marketing", + "Phone and video": "Telefone e vídeo", + "Social media": "Mídias sociais", + "Surveys and Feedback": "Pesquisas e feedback", + "Connect your Facebook Messenger": "Connect your Facebook Messenger", + "Connect your Facebook Messenger to start receiving Facebook messages in your team inbox": "Conecte seu Facebook Messenger para começar a receber mensagens do Facebook na caixa de entrada de sua equipe", + "You are creating a integration": "Você está criando uma integração", + "Connect Account": "Conectar conta", + "Integrations api is not running": "A API de integração não está em execução", + "You successfully removed an account": "Você removeu uma conta com sucesso", + "Connect Your Pages": "Conecte suas páginas", + "There is no pages": "Não há páginas", + "Integration Name": "Nome da Integração", + "Name this integration to differentiate from the rest": "Nomeie esta integração para diferenciá-la do resto", + "Which specific Brand does this integration belong to?": "A qual marca específica essa integração pertence?", + "In which Channel(s) do you want to add this integration?": "Em quais canais você deseja adicionar esta integração?", + "You are creating": "Você está criando", + "Select channel": "Selecione o canal", + "No resulst found": "Nenhum resultado encontrado", + "Connect your": "Conecte ao", + "Connect your Facebook Posts to start receiving Facebook post and comments in your team inbox": "Conecte suas postagens do Facebook para começar a receber postagens e comentários do Facebook na caixa de entrada de sua equipe", + "Choose a background color": "Escolha uma cor de fundo", + "Choose a text color": "Escolha uma cor para o texto", + "Greeting title": "Título de saudação", + "Write here Greeting title": "Escreva aqui Título de saudação", + "Greeting message": "Mensagem de saudação", + "Write here Greeting message": "Escreva aqui Mensagem de saudação", + "Write here Welcome message": "Escreva aqui Mensagem de boas-vindas", + "Write here Away message": "Escreva aqui mensagem de ausente", + "Write here Thank you message": "Escreva aqui a mensagem de obrigado", + "Greeting": "Saudações", + "Intro": "Introdução", + "Default Settings": "Configurações padrão", + "Default Language": "Idioma padrão", + "Require Authentication": "Exigir Autenticação", + "It will require email and phone in widget": "Irá requerer e-mail e telefone no widget", + "Show chat": "Mostrar chat", + "Hide chat section and show only knowledgebase and form": "Ocultar seção de bate-papo e mostrar apenas base de conhecimento e formulário", + "Show launcher": "Mostrar lançador", + "The widget section will invisible but you can still get messenger data": "A seção de widget ficará invisível, mas você ainda pode obter dados do messenger", + "Force logout when resolve": "Forçar logout quando resolver", + "If an operator resolve the conversation from inbox then client session will end automatically": "Se um operador resolver a conversa na caixa de entrada, a sessão do cliente será encerrada automaticamente", + "If customer is offline and inserted email, it will send email when operator respond": "Se o cliente estiver offline e tiver inserido o e-mail, ele enviará um e-mail quando o operador responder", + "Show video call request": "Mostrar pedido de videochamada", + "Integration Setup": "Configuração de integração", + "Learn how to connect a Gmail using IMAP": "Saiba como conectar um Gmail usando IMAP", + "Add Imap": "Adicionar Imap", + "IMAP Host": "Host IMAP", + "IMAP PORT": "Porta IMAP", + "SMTP Host": "Host SMTP", + "SMTP PORT": "Porta SMTP", + "Add Exchange": "Adicionar Exchange", + "Exchange server host": "Host do servidor Exchange", + "Add Outlook": "Adicionar Outlook", + "Add Yahoo": "Adicionar Yahoo", + "In order to connect Yahoo, you should generate the app password": "Para se conectar ao Yahoo, você deve gerar a senha do aplicativo", + "Click here to generate password for erxes": "Clique aqui para gerar senha para erxes", + "You successfully added a": "Você adicionou com sucesso um", + "Phone number": "Número de telefone", + "Record url": "URL de registro", + "Broadcast token": "Token de transmissão", + "Add Callpro": "Adicionar Callpro", + "Add Chatfuel": "Adicionar Chatfuel", + "Bot ID": "ID do bot", + "Block name": "Nome do bloco", + "Add Whatsapp": "Adicionar Whatsapp", + "Chat-API Instance id": "ID da instância da API de bate-papo", + "Chat-API token": "Token de API de bate-papo", + "Add Whatspro": "Adicionar Whatspro", + "WhatsPro Account id": "ID da conta WhatsPro", + "WhatsPro token": "Token WhatsPro", + "Add Telegram": "Adicionar Telegram", + "Learn more about Telegram": "Saiba mais sobre o Telegram", + "Telegram Bot Token": "Token do Telegram Bot", + "Add Viber": "Adicionar Viber", + "Viber Token": "Viber Token", + "Learn more about Viber": "Saiba mais sobre o Viber", + "Line Channel ID": "ID de canal do Line", + "Line Channel Secret": "Key do canal do Line", + "Webhook url": "URL do webhook", + "Copy and paste the webhook URL provided below into your LINE settings": "Copie e cole o URL do webhook fornecido abaixo nas configurações de LINE", + "Learn more about LINE": "Saiba mais sobre o LINE", + "Url will appear after save": "Url aparecerá após salvar", + "Add Line": "Adicionar Line", + "Telnyx phone number": "Número de telefone da Telnyx", + "Telnyx messaging profile id": "ID de perfil de mensagens Telnyx", + "Add telnyx": "Adicionar telnyx", + "Example payload": "Exemplo de payload", + "Make things easy for your team members and add in ready made response templates": "Facilite as coisas para os membros da sua equipe e adicione modelos de resposta prontos", + "Manage and edit your response templates according to each situation and respond in a timely manner and without the hassle": "Gerencie e edite seus modelos de resposta de acordo com cada situação e responda em tempo hábil e sem complicações", + "You successfully added a response template": "Você adicionou com sucesso um modelo de resposta", + "You successfully updated a response template": "Você atualizou com sucesso um modelo de resposta", + "You successfully deleted a response template": "Você excluiu com sucesso um modelo de resposta", + "It's all about thinking ahead for your customers": "É tudo uma questão de pensar no futuro", + "Team members will be able to choose from email templates and send out one message to multiple recipients": "Os membros da equipe poderão escolher entre modelos de e-mail e enviar uma mensagem para vários destinatários", + "You can use the email templates to send out a Mass email for leads/customers or you can send to other team members": "Você pode usar os modelos de e-mail para enviar um e-mail em massa para leads / clientes ou pode enviar para outros membros da equipe", + "You successfully added a email template": "Você adicionou com sucesso um modelo de e-mail", + "You successfully updated a email template": "Você atualizou com sucesso um modelo de e-mail", + "You successfully deleted a email template": "Você excluiu com sucesso um modelo de e-mail", + "You successfully deleted a": "Você excluiu com sucesso um", + "email template": "modelo de email", + "You successfully deleted": "Você excluiu com sucesso", + "response template": "modelo de resposta", + "Appearances matter, especially for your business": "As aparências são importantes, especialmente para sua empresa", + "Edit and manage your email appearance so that your business can operate in one voice": "Edite e gerencie a aparência do seu e-mail para que sua empresa possa operar em uma só voz", + "You successfully updated an email appearance": "Você atualizou com sucesso uma aparência de e-mail", + "Script manager allows erxes users to quickly and easily generate and update related scripts for any of their business websites": "O gerenciador de scripts permite que os usuários gerem e atualizem scripts relacionados para qualquer um de seus sites de negócios de forma rápida e fácil", + "Set up once and your team will be able to easily display multiple erxes widgets on any of their businesses websites": "Configure uma vez e sua equipe será capaz de exibir facilmente vários widgets em qualquer um de seus sites de negócios", + "Getting Started with erxes Scripts": "Primeiros passos com scripts", + "Avoid duplication of erxes widget scripts on your website, which might disable some of your erxes widgets (messenger, popups, etc)": "Evite a duplicação de scripts de widget em seu site, o que pode desativar alguns de seus widgets (messenger, pop-ups, etc)", + "Generate the combination of scripts": "Gere a combinação de scripts", + "Install the script": "Instale o script", + "Click on “New Script” and choose which widgets you’re going to display in a single page": "Clique em “Novo Script” e escolha quais widgets você irá exibir em uma única página", + "Copy the updated script and paste it into your website or Google Tag Manager": "Copie o script atualizado e cole-o no seu site ou no Gerenciador de tags do Google", + "New script": "Novo script", + "Knowledgebase topic": "Tópico da base de conhecimento", + "You successfully deleted a script": "Você excluiu um script com sucesso", + "Script manager": "Gerenciador de script", + "Growth Hacking Settings": "Configurações do Growth Hacking", + "Marketing campaigns & Projects": "Campanhas e projetos de marketing", + "Growth Hacking Templates": "Modelos de Growth Hacking", + "Campaign & Project": "Campanha e Projeto", + "There is no campaign": "Não há campanha", + "Campaign": "Campanha", + "campaign": "campanha", + "Get started on your project": "Comece seu projeto", + "New Campaign": "Nova campanha", + "You successfully added a board": "Você adicionou um board com sucesso", + "You successfully updated a board": "Você atualizou um board com sucesso", + "This will permanently delete the current Board": "Isso excluirá permanentemente o board atual", + "Are you absolutely sure?": "Você tem certeza absoluta?", + "in the filed below to confirm": "no campo abaixo para confirmar", + "Go to templates": "Ir para modelos", + "add ": "Adicionar", + "You successfully added a pipeline": "Você adicionou um pipeline com sucesso", + "You successfully updated a pipeline": "Você atualizou um pipeline com sucesso", + "Add project": "Adicionar projeto", + "Scoring type": "Tipo de pontuação", + "ice": "ICF", + "Set the Impact, Confidence and Ease factors for your tasks": "Defina os fatores de impacto, confiança e facilidade para suas tarefas", + "Final score is calculated by the formula:": "A pontuação final é calculada pela fórmula:", + "Impact * Confidence * Ease": "Impacto * Confiança * Facilidade", + "Set the Reach, Impact, Confidence and Effort factors for your tasks": "Defina os fatores de Alcance, Impacto, Confiança e Esforço para suas tarefas", + "rice": "Aice", + "(Reach * Impact * Confidence) / Effort": "(Alcance * Impacto * Confiança) / Esforço", + "Set the Potential, Importance and Ease factors for your tasks": "Defina os fatores de potencial, importância e facilidade para suas tarefas", + "pie": "Pif", + "(Potential + Importance + Ease) / 3": "(Potencial + Importância + Facilidade) / 3", + "Metric": "Métrica", + "Choose a metric": "Escolha uma métrica", + "Visibility": "Visibilidade", + "Choose template": "Escolha o modelo", + "Manage your boards and pipelines so that its easy to manage incoming leads or requests that is adaptable to your team's needs": "Gerencie seus boards e pipelines para que seja fácil gerenciar leads ou solicitações que se adaptem às necessidades de sua equipe", + "Go to Campaign": "Ir para a campanha", + "New Growth Hacking Templates": "Novos modelos de Growth Hacking", + "You successfully added a growth hack template": "Você adicionou com sucesso um template growth hack", + "You successfully updated a growth hack template": "Você atualizou com sucesso um template de growth hack", + "Stages": "Estágios", + "Add another stage": "Adicione outro estágio", + "The previous projects using that template will not change": "Os projetos anteriores que usam esse modelo não serão alterados", + "Only changes to the newly chosen projects": "Apenas mudanças nos projetos recém-escolhidos", + "You successfully deleted a growth hack template": "Você excluiu com sucesso um template de growth hack", + "You successfully deleted a board": "Você excluiu um board com sucesso", + "This will permanently delete the current": "Isso excluirá permanentemente o atual", + "Archive Items has been archived": "Os itens do arquivo foram arquivados", + "Add input field": "Adicionar campo de entrada", + "Field Label": "Legenda do campo", + "Field description": "Descrição do campo", + "This field is required": "Este campo é obrigatório", + "Field preview": "Pré-visualização do campo", + "New field": "Novo campo", + "Text input": "Campo de texto", + "Text area": "Área de texto", + "Checkbox": "Checkbox", + "Radio button": "Radio button", + "File": "Arquivo", + "There is no fields": "Não há campos", + "field": "campo", + "input": "entrada", + "textarea": "área de texto", + "file": "arquivo", + "firstName": "primeiro nome", + "lastName": "último nome", + "phone": "telefone", + "You successfully added a form": "Você adicionou um formulário com sucesso", + "Sales Pipeline Settings": "Configurações de processamento de vendas", + "Sales board & Pipelines": "Board de vendas e pipelines", + "Show only the user's assigned(created)": "Mostrar apenas o usuário atribuído (criado)", + "deal": "acordo", + "Users eligible to see all": "Usuários qualificados para ver todos", + "This will permanently update are you absolutely sure?": "Isso será atualizado permanentemente. Você tem certeza?", + "Board & Pipeline": "Board & Pipeline", + "There is no product & service category": "Não há categoria de produto e serviço", + "Filter by type": "Filtrar por tipo", + "Product": "Produtos", + "Service": "Serviço", + "service": "serviço", + "All information and know-how related to your business's products and services are found here": "Todas as informações e know-how relacionados aos produtos e serviços da sua empresa encontram-se aqui", + "Create and add in unlimited products and servicess so that you and your team members can edit and share": "Crie e adicione produtos e serviços ilimitados para que você e os membros de sua equipe possam editar e compartilhar", + "All products": "Todos os produtos", + "Depending on your business type, you may type in a barcode or any other UPC (Universal Product Code)": "Dependendo do seu tipo de negócio, você pode digitar um código de barras ou qualquer outro UPC (Código de Produto Universal)", + "If you don't use UPC, type in any numeric value to differentiate your products": "Se você não usa UPC, digite qualquer valor numérico para diferenciar seus produtos", + "Parent Category": "Categoria Parental", + "You successfully deleted a product": "Você excluiu um produto com sucesso", + "You successfully added a product and service": "Você adicionou com sucesso um produto e serviço", + "save": "salvar", + "You successfully deleted a note": "Você excluiu uma nota com sucesso", + "You successfully updated a product and service": "Você atualizou com sucesso um produto e serviço", + "There aren’t any data at the moment": "Não há dados no momento", + "Ticket board & Pipelines": "Board de Ticket e Pipelines", + "This will permanently delete the current Pipeline": "Isso excluirá permanentemente o pipeline atual", + "No stage in this pipeline": "Nenhum estágio neste pipeline", + "In time range": "No intervalo de tempo", + "This month": "Este mês", + "This week": "Esta semana", + "Last 30 days": "Últimos 30 dias", + "Last month": "Mês passado", + "Last week": "Semana Anterior", + "Yesterday": "Ontem", + "Volume Report By Date": "Relatório de Volume por Data", + "Volume Report By Time": "Relatório de Volume por Tempo", + "Operator Activity Report": "Relatório de atividade do operador", + "Duration of First Response Report": "Duração do primeiro relatório de resposta", + "First Response Report by Operators": "Relatório de Primeira Resposta dos Operadores", + "First Response Report by Operator": "Relatório de primeira resposta por operador", + "Tag Report": "Relatório de tag", + "Export First Response Report": "Exportar relatório de primeira resposta", + "Export Tag Report": "Exportar relatório de tag", + "Choose user": "Escolha o usuário", + "Response time of the operator": "Tempo de resposta do operador", + "Response time of the customer": "Tempo de resposta do cliente", + "Response time of the internal message": "Tempo de resposta da mensagem interna", + "Wait time between messages": "Tempo de espera entre mensagens", + "Duration time up until the conversation is resolved": "Tempo de duração até que a conversa seja resolvida", + "Trend": "Tendência", + "Team Member": "Membro da Equipe", + "In progress": "Em progresso", + "Not started": "Não iniciado", + "Completed": "Concluído", + "Filter by campaign": "Filtrar por campanha", + "Experiment name": "Nome do experimento", + "Impact": "Impacto", + "Confidence": "Confiança", + "Ease": "Facilidade", + "Score": "Pontuação", + "Add an experiment": "Adicionar um experimento", + "Weighted scoring": "Pontuação ponderada", + "Growth hacking": "Hacking de crescimento", + "Effort": "Esforço", + "Priority matrix": "Matriz de prioridade", + "Big Bets": "Grandes apostas", + "Quick Wins": "Vitórias rápidas", + "Time Sinks": "Afundar tempo", + "Maybes": "Maybes", + "Awareness": "Consciência", + "Acquisition": "Aquisição", + "Activation": "Ativação", + "Retention": "Retenção", + "Revenue": "Receita", + "Referrals": "Referências", + "There is no experiments": "Não há experimentos", + "Funnel Impact": "Impacto do funil", + "Count": "Contador", + "You successfully updated an experiment": "Você atualizou um experimento com sucesso", + "No Sales Pipelines": "Sem pipelines de vendas", + "Filter by products": "Filtrar por produtos", + "Filter by companies": "Filtrar por empresas", + "Filter by customers": "Filtrar por clientes", + "Stayed": "Fiquei", + "Deal Won Report": "Relatório de transação ganha", + "Deal Lost Report": "Relatório de transação perdida", + "Deal Volume Report": "Relatório de volume de negócios", + "Find feedback of won deals that has been created by team members": "Encontre feedback de negócios ganhos que foram criados por membros da equipe", + "Find feedback of lost deals that has been created by team members": "Encontre feedback de negócios perdidos que foram criados por membros da equipe", + "Find feedback that has been created by team members": "Encontre feedback que foi criado por membros da equipe", + "Sales pipeline": "Pipeline de vendas", + "Boards": "Boards", + "Import your previous contacts": "Importar seus contatos anteriores", + "Collect visitor information": "Colete informações do visitante", + "Sync email contacts": "Sincronizar contatos de e-mail", + "Start capturing social media contacts": "Comece a capturar contatos de mídia social", + "Generate contacts through Popups": "Gerar contatos por meio de pop-ups", + "Go to Customer Import": "Ir para Importação Cliente", + "Create Messenger": "Criar Mensageiro", + "Visit AppStore": "Visite a AppStore", + "Create a Popup": "Crie um Popup", + "Use Import feature to bulk import all your previous Customers or Leads": "Use o recurso de importação para importar em massa todos os seus clientes ou leads anteriores", + "Create your erxes Messenger to start capturing Visitors": "Crie o seu Messenger para começar a capturar visitantes", + "Integrate your email address to sync previous email Leads": "Integre seu endereço de e-mail para sincronizar leads de e-mail anteriores", + "Integrate social media website to start capturing Leads": "Integre o site de mídia social para começar a capturar Leads", + "Create your popups and start collecting Leads": "Crie seus pop-ups e comece a coletar leads", + "Getting Started with Contacts": "Primeiros passos com contatos", + "Coordinate and manage all your customer interactions": "Coordenar e gerenciar todas as suas interações com o cliente", + "Search and filter customers by pop ups": "Pesquise e filtre clientes por pop-ups", + "Filter by Pop Ups": "Filtrar por pop-ups", + "Submit once": "Envie uma vez", + "Turn on to receive a submission from the visitor only once": "Ative para receber um envio do visitante apenas uma vez", + "Once a submission is received, the popup will not show": "Assim que o envio for recebido, o pop-up não aparecerá", + "Getting Started with erxes Popups": "Primeiros passos com pop-ups", + "Never miss a potential lead by capturing them with a customizable Popups & Forms": "Nunca perca uma oportunidade potencial ao capturá-la com pop-ups e formulários personalizáveis", + "Create Popup": "Criar Popup", + "Fill out the details and create your popup message or form": "Preencha os detalhes e crie sua mensagem ou formulário pop-up", + "Create Pop Ups": "Criar Pop Ups", + "Instale o script": "Instale o script", + "Copy the individual script or use Script Manager to avoid script duplication errors if you’re planning to display this popup along with any other erxes widgets": "Copie o script individual ou use o Gerenciador de scripts para evitar erros de duplicação de scripts se você estiver planejando exibir este pop-up junto com quaisquer outros widgets", + "Go to Script Manager": "Ir para o Gerenciador de Script", + "Write title": "Escreva o título", + "Rule": "Regra", + "Getting Started with Engage": "Primeiros passos com o Engage", + "Learn how to use this feature to engage your contacts and drive conversations": "Aprenda a usar esse recurso para envolver seus contatos e conduzir conversas", + "Verify": "Verificar", + "your email address": "seu endereço de e-mail", + "Make sure it is the same as one of your team members": "Certifique-se de que é igual a um dos membros da sua equipe", + "Integrate that email address with": "Integre esse endereço de e-mail com", + "Connect your existing emails address as an integration": "Conecte seu endereço de e-mail existente como uma integração", + "Prepare your contacts by Segment / Tag / Brand": "Prepare seus contatos por segmento / tag / marca", + "For more targeted marketing, create a": "Para um marketing mais direcionado, crie um", + "Segment": "Segmento", + "For more targeted marketing, create a Segment": "Para um marketing mais direcionado, crie um segmento", + "Create a Segment": "Crie um segmento", + "Claim": "Reivindicar", + "your phone number": "seu número de telefone", + "Make sure you assigned it to a team member": "Certifique-se de atribuí-lo a um membro da equipe", + "Prepare your contacts": "Prepare seus contatos", + "Check the": "Verifica o", + "format": "formato", + "verification status, and primary phone state": "status de verificação e estado do telefone principal", + "a segment": "um segmento", + "Filter all contacts with valid phone numbers and other properties": "Filtre todos os contatos com números de telefone válidos e outras propriedades", + "If you wish to segment by events,": "Se você deseja segmentar por eventos,", + "actions that are triggered by something your": "ações que são desencadeadas por algo seu", + "Customer performs on your website or app": "O cliente executa em seu site ou aplicativo", + "There aren’t any filters at the moment": "Não há filtros no momento", + "You can create a segment by Property and/or by Events": "Você pode criar um segmento por propriedade e/ou por eventos", + "Creating customer segment": "Criar segmento de cliente", + "Getting Started with erxes Knowledgebase": "Introdução à Base de Conhecimento", + "Educate your customers and staff by creating help articles to reach higher levels of satisfaction": "Eduque seus clientes e funcionários criando artigos de ajuda para alcançar níveis mais altos de satisfação", + "Create your knowledgebase": "Crie sua base de conhecimento", + + "Make sure you’ve created your Brands": "Certifique-se de ter criado suas marcas", + "Click on “Add Knowledgebase” to create one for a specific Brand": "Clique em “Adicionar base de conhecimento” para criar um para uma marca específica", + "Click on the “Settings” button and “Add Categories”": "Clique no botão “Configurações” e “Adicionar categorias”", + "A good one to get started with would be “General, Pricing, etc": "Uma boa opção para começar seria “Geral, Preços, etc", + "Click on “Add Articles” to start adding help articles": "Clique em “Adicionar artigos” para começar a adicionar artigos de ajuda", + "Copy the individual script by clicking on the Settings button": "Copie o script individual clicando no botão Configurações", + "Use": "Usar", + "to avoid script duplication errors if you’re planning to display this popup along with any other erxes widgets": "para evitar erros de duplicação de script se você estiver planejando exibir este pop-up junto com quaisquer outros widgets", + "Add Knowledge Base": "Adicionar Base de Conhecimento", + "There is no knowledge base": "Não há base de conhecimento", + "article": "artigos", + "Background image:": "Imagem de fundo:", + "Custom color": "Cor customizada", + "Edit Knowledge Base": "Editar Base de Conhecimento", + "You successfully added a category": "Você adicionou uma categoria com sucesso", + "You successfully updated a category": "Você atualizou uma categoria com sucesso", + "You successfully deleted a category": "Você excluiu uma categoria com sucesso", + "You successfully updated a Knowledge Base": "Você atualizou com sucesso uma Base de Conhecimento", + "You successfully deleted a knowledge base": "Você excluiu com sucesso uma base de conhecimento", + "You successfully added a Knowledge Base": "Você adicionou com sucesso uma Base de Conhecimento", + "Paste the tag below where you want erxes knowledgebase to appear": "Cole a tag abaixo onde deseja que a base de conhecimento apareça", + "Open Source Growth Marketing Platform": "Plataforma de marketing de crescimento de código aberto", + "Marketing, sales, and customer service platform designed to help your business attract more engaged customers": "Plataforma de marketing, vendas e atendimento ao cliente projetada para ajudar sua empresa a atrair clientes mais engajados", + "Replace Hubspot with the mission and community-driven ecosystem": "Substitua o Hubspot pela missão e pelo ecossistema voltado para a comunidade", + "Hello": "Olá", + "You haven't fully configured": "Você não completou a configuração", + "Would you like to configure": "Você gostaria de configurar", + "Resume": "Retomar", + "Never see again": "Não mostrar novamente", + "Let's set up your workplace for success": "Vamos preparar seu local de trabalho para o sucesso", + "Congratulations! You have finished setting up": "Parabéns! Você terminou de configurar", + "you're halfway through, keep going!": "você está na metade, continue!", + "almost done, just a little more!": "quase pronto, só mais um pouco!", + "keep going!": "continue!", + "awesome!": "incrível!", + "done": "feito", + "Contact Management": "Gestão de Contatos", + "Live Chat & In-App-Messaging": "Chat ao vivo e mensagens no aplicativo", + "Pop-ups & Forms": "Pop-ups e formulários", + "Task Management": "Gestão de Tarefas", + "Reselect features": "Selecione novamente os recursos", + "Show completed": "Mostrar concluído", + "Set up your account": "Crie sua conta", + "Where do you want to start": "Onde você quer começar", + "There are a ton of things you can do with": "Há muitas coisas que você pode fazer com", + "Let's pick the place to start, and we'll help you to get the most out of it": "Vamos escolher o lugar por onde começar e vamos ajudá-lo a tirar o máximo proveito disso", + "You can choose": "Você pode escolher", + "at least two": "ao menos dois", + "fields in your priority order": "campos em sua ordem de prioridade", + "From ideas to actual performance, making sure everything recorded, prioritized and centralized in the single platform to get tested with pool of analysis and learnings, which made the growing as pleasure": "Das ideias ao desempenho real, garantindo que tudo seja registrado, priorizado e centralizado em uma única plataforma para ser testado com pool de análises e aprendizados, o que tornou o crescimento um prazer", + "Control your sales pipeline from one responsive field by precisely analyzing your progress and determining your next best move for success": "Controle seu funil de vendas a partir de um campo responsivo, analisando precisamente seu progresso e determinando sua próxima melhor jogada para o sucesso", + "Combine real-time client and team communication with in-app messaging, live chat, email, and social networks, so your customers can reach you however and whenever they want": "Combine a comunicação do cliente e da equipe em tempo real com mensagens no aplicativo, chat ao vivo, e-mail e redes sociais, para que seus clientes possam entrar em contato com você como e quando quiserem", + "Access our all-in-one CRM & product, and service system in one go so that it’s easier to coordinate and manage your interactions with your customers": "Acesse nosso CRM, produto e sistema de serviço tudo-em-um de uma só vez para que seja mais fácil coordenar e gerenciar suas interações com seus clientes", + "Enable businesses to capture every single customer feedback and communicate in real time, you can educate your customers through knowledge-base from the erxes Messenger": "Permita que as empresas capturem o feedback de cada cliente e se comuniquem em tempo real, você pode educar seus clientes por meio da base de conhecimento do erxes Messenger", + "Turn regular visitors into qualified pop ups by capturing them with a customizable landing page, forms, pop-up or embed placements": "Transforme visitantes regulares em pop-ups qualificados, capturando-os com uma página de destino personalizável, formulários, pop-up ou veiculações incorporadas", + "Start converting your prospects into potential customers through email, SMS, messenger or more interactions to drive them to a successful close": "Comece a converter seus clientes em potencial em clientes em potencial por meio de e-mail, SMS, messenger ou mais interações para levá-los a um fechamento bem-sucedido", + "Educate both your customers and staff by creating a help center related to your brands, products and services to reach a higher level of satisfaction": "Eduque seus clientes e funcionários criando um centro de ajuda relacionado às suas marcas, produtos e serviços para alcançar um nível mais alto de satisfação", + "Organize your own tasks or your team's sprints effectively with erxes Task, it involves planning, testing, tracking, and reporting": "Organize suas próprias tarefas ou sprints de sua equipe de forma eficaz com erxes Task, envolve planejamento, teste, rastreamento e relatórios", + "Create a marketing campaign": "Crie uma campanha de marketing", + "Then create a project": "Em seguida, crie um projeto", + "Duplicate growth hacking templates": "Modelos de growth hacking duplicados", + "Now add an experiments": "Agora adicione um experimento", + "Create a sales board": "Crie um board de vendas", + "Create a sales pipeline": "Crie um pipeline de vendas", + "Configure product & service": "Configurar produto e serviço", + "Now add deals": "Agora adicione ofertas", + "Create a brand": "Crie uma marca", + "Create a channel": "Crie um canal", + "Then create an integration": "Em seguida, crie uma integração", + "Connect integration to channel": "Conecte a integração ao canal", + "Add a response template": "Adicionar um modelo de resposta", + "Create a lead": "Crie um cliente potencial", + "Create a customer": "Crie um cliente", + "Create a company": "Crie uma empresa", + "Create a product or service": "Crie um produto ou serviço", + "Create a property": "Crie uma propriedade", + "Create a tag": "Crie uma tag", + "Create your Messenger": "Crie o seu Messenger", + "Install messenger code": "Instale o código do messenger", + "Create pop ups": "Crie pop-ups", + "Install on website": "Instalar no site", + "Verify your sending email": "Verifique seu e-mail de envio", + "Configure email template": "Configurar modelo de e-mail", + "Now create manual message": "Agora crie uma mensagem manual", + "Create topic": "Criar tópico", + "Create category": "Criar categoria", + "Now write articles": "Agora escreva artigos", + "Embed knowledgebase": "Base de conhecimento incorporada", + "Create a task board": "Crie um board de tarefas", + "Create a task pipeline": "Crie um pipeline de tarefas", + "Now add tasks": "Agora adicione tarefas", + "Assign a team member": "Atribuir um membro da equipe", + "Scale your business with Growth Hacking": "Amplie seus negócios com Growth Hacking", + "Drive leads to a successful close with Sales Pipeline": "O Drive leva a um fechamento bem-sucedido com Pipeline de Vendas", + "Stay in sync with Shared Team Inbox": "Fique em sincronia com caixa de entrada compartilhada da equipe", + "Increase conversion with Email & SMS Marketing": "Aumente a conversão com marketing por e-mail e SMS", + "Manage your customers from the Contact Management": "Gerencie seus clientes da Gestão de Contatos", + "Connect with your customers with Live Chat & In-App-Messaging": "Conecte-se com seus clientes com bate-papo ao vivo e mensagens no aplicativo", + "Never miss a potential lead with Pop-ups & Forms": "Nunca perca uma oportunidade potencial com pop-ups e formulários", + "Educate both your customers and staff with Knowledge Base": "Eduque seus clientes e equipe com Base de Conhecimento", + "Power your team’s success with Task Management": "Potencialize o sucesso de sua equipe com Gerenciamento de Tarefas", + "You successfully changed": "Você mudou com sucesso", + "Archive All Cards in This List": "Arquivar todos os cartões desta lista", + "Archive This List": "Arquive esta lista", + "Remove stage": "Remover estágio", + "This will permanently delete any items related to this stage": "Isso excluirá permanentemente todos os itens relacionados a este estágio", + "You have successfully removed a stage": "Você removeu com sucesso um estágio", + "You successfully updated a tag": "Você atualizou uma tag com sucesso", + "You've already created a messenger for the brand you've selected": "Você já criou um mensageiro para a marca que selecionou", + "Please choose a different brand or edit the previously created messenger": "Escolha uma marca diferente ou edite o mensageiro criado anteriormente", + "You successfully added a segment": "Você adicionou um segmento com sucesso", + "You successfully deleted a segment": "Você excluiu um segmento com sucesso", + "You successfully updated a segment": "Você atualizou um segmento com sucesso", + "General information": "Informação geral", + "Enter an email": "Digite um e-mail", + "Choose an owner": "Escolha um dono", + "Enter an phone": "Insira um telefone", + "Primary email verification status": "Status de verificação de e-mail principal", + "Primary phone verification status": "Status de verificação de telefone principal", + "Not known": "Não conhecido", + "Male": "Masculino", + "Female": "Feminino", + "Not applicable": "Não aplicável", + "Valid": "Válido", + "Invalid": "Inválido", + "Accept all unverifiable": "Aceite todos os não verificáveis", + "Disposable": "Dispensável", + "Catchall": "Catchall", + "Bad syntax": "Sintaxe ruim", + "Unverifiable": "Não verificável", + "Not checked": "Não checado", + "Save & View": "Salvar e visualizar", + "Birthday": "Aniversário", + "You successfully added a customer": "Você adicionou um cliente com sucesso", + "Primary email": "e-mail primário", + "Change email status": "Alterar o status do e-mail", + "Change phone status": "Alterar o status do telefone", + "Choose Properties/View": "Escolha Propriedades / Exibir", + "Manage properties": "Gerenciar propriedades", + "Export this leads": "Exportar leads", + "Verify phone numbers": "Verifique os números de telefone", + "Verify emails": "Verificar e-mails", + "Cannot read property 'sendMessage' of undefined": "Não é possível ler a propriedade 'sendMessage' de indefinido", + "You successfully deleted a customer": "Você excluiu um cliente com sucesso", + "The changes will take a few seconds": "As mudanças levarão alguns segundos", + "Contacted": "Contatado", + "Working": "Trabalhando", + "Bad timing": "Mau momento", + "Unqualified": "Não qualificado", + "Mark as Complete": "Marcar como Completo", + "You successfully updated state": "Você atualizou o estado com sucesso", + "Are your sure you want to convert lead to customer?": "Tem certeza de que deseja converter lead em cliente?", + "Primary phone": "Telefone principal", + "No location": "Sem localização", + "No activity": "Sem atividade", + "See related companies": "Veja empresas relacionadas", + "See related": "Ver relacionados", + "See related Deal": "Veja o acordo relacionado", + "See related Ticket": "Veja o Ticket relacionado", + "See related Task": "Veja a tarefa relacionada", + "No ticket": "Sem ticket", + "No task": "Sem tarefas", + "Don't see the result you're looking for?": "Não encontra o resultado que procura?", + "Create a new Task": "Crie uma nova tarefa", + "New Task": "Nova tarefa", + "Create a new Ticket": "Crie um novo Ticket", + "Create a new Deal": "Crie um novo acordo", + "Quick message": "Mensagem rápida", + "Sending to:": "Enviando para:", + "Badge": "Distintivo", + "Snippet": "Trecho", + "Show the full message": "Mostra a mensagem completa", + "Subject:": "Sujeito:", + "Change state": "Mudar de estado", + "New Deal": "Novo acordo", + "New Ticket": "Novo Ticket", + "Enter company name": "Insira o nome da empresa", + "Enter company email": "Digite o e-mail da empresa", + "Enter company phone": "Digite o telefone da empresa", + "Choose parent company": "Escolha a Matriz", + "You successfully added a company": "Você adicionou uma empresa com sucesso", + "See related customers": "Veja clientes relacionados", + "You successfully converted to customer": "Você converteu um cliente com sucesso", + "At Time of Due Date": "Na hora da data de vencimento", + "5 Minutes Before": "5 minutos antes", + "10 Minutes Before": "10 minutos antes", + "15 Minutes Before": "15 minutos antes", + "1 Hour Before": "1 hora antes", + "2 Hour Before": "2 horas antes", + "1 Day Before": "1 dia antes", + "2 Day Before": "2 dias antes", + "Add a more detailed description": "Adicione uma descrição mais detalhada", + "No matching items found": "Nenhum item correspondente encontrado", + "Write Form title": "Escreva o título do formulário", + + "Recognizes which language is set for visitor’s browser": "Reconhece qual idioma está definido para o navegador do visitante", + "Insert only Language codes in value field as appointed in ISO-639,": "Insira apenas códigos de idioma no campo de valor, conforme indicado na ISO-639,", + "“en” for English, “fr” for French, “de” for German etc": "“en” para inglês, “fr” para francês, “de” para alemão etc", + "Write your desired page URL, excluding domain name": "Escreva o URL da página desejada, excluindo o nome de domínio", + "For example: If you want to place your engagement message on": "Por exemplo: Se você deseja colocar sua mensagem de engajamento no", + "then write /pricing0": "então escreva / precificando 0", + "Locates visitor’s physical location in country resolution": "Localiza a localização física do visitante na resolução do país", + "Insert only Country codes in value field as appointed in ISO-3166 standard,": "Insira apenas os códigos de país no campo de valor, conforme indicado no padrão ISO-3166,", + "“gb” for Great Britain, “fr” for French, “de” for German, “jp” for Japanese etc": "“Gb” para Grã-Bretanha, “fr” para francês, “de” para alemão, “jp” para japonês etc", + "Locates visitor’s physical location in city resolution": "Localiza a localização física do visitante na resolução da cidade", + "Write a name of the City in value field": "Escreva um nome para a cidade no campo de valor", + "If Country’s not set, every city with same name will meet the criteria": "Se o país não for definido, todas as cidades com o mesmo nome atenderão aos critérios", + "Counts individual visitor’s visitting number": "Conta o número de visitantes individuais do visitante", + "redirect": "redirecionar", + "onPage": "na página", + "You successfully added a lead": "Você adicionou um lead com sucesso", + "Paste the code below before the body tag on every page you want erxes pop ups to appear": "Cole o código abaixo antes da tag do corpo em cada página em que deseja que os pop-ups apareçam", + "If your flow type is embedded paste the code below additionally that you want erxes pop ups to appear": "Se o seu tipo de fluxo estiver incorporado, cole o código abaixo, além disso, você deseja que os pop-ups apareçam", + "Install code of Teste": "Instale o código do Teste", + "Great job! You just set up your email signature": "Bom trabalho! Você acabou de configurar sua assinatura de e-mail", + "You successfully changed a notification setting": "Você alterou com sucesso uma configuração de notificação", + "State change": "Mudança de estado", + "Assignee change": "Mudança de cessionário", + "Add message": "Adicionar mensagem", + "Members change": "Mudança de membros", + "Assigned a new deal card": "Atribuído um novo card de acordo", + "Removed from the deal card": "Removido do card de acordo", + "Deal card edited": "Carta de oferta editada", + "Deal card deleted": "Carta de oferta excluída", + "Assigned a new ticket card": "Atribuiu um novo card de ticket", + "Removed from the ticket card": "Removido do card do bilhete", + "Ticket card edited": "Ticket editado", + "Ticket card deleted": "Ticket excluído", + "Assigned a new task card": "Atribuído um novo card de tarefa", + "Removed from the task card": "Removido do card de tarefas", + "Task card edited": "Card de tarefa editado", + "Moved between stages": "Movido entre os estágios", + "Due date is near": "A data de vencimento está próxima", + "Task card deleted": "Card de tarefa excluído", + "Mention on customer note": "Menção na nota do cliente", + "Mention on company note": "Menção na nota da empresa", + "Master email marketing with fully customized templates": "Domine o marketing por e-mail com modelos totalmente personalizados", + "Interact personally with direct in-app-messaging": "Interaja pessoalmente com mensagens diretas no aplicativo", + "Send bulk SMS online with simple and direct texts": "Envie SMS em massa online com textos simples e diretos", + "Choose a message type:": "Escolha um tipo de mensagem:", + "Choose a segment": "Escolha um segmento", + "Create a segment": "Crie um segmento", + "No segment": "Sem segmento", + "Sender:": "Remetente:", + "Attachments:": "Anexos:", + "The email address is not verified (x) by Amazon Ses services": "O endereço de e-mail não é verificado (x) pelos serviços Amazon Ses", + "If you want to verify your email:": "Se você deseja verificar seu e-mail:", + "Log in to your AWS Management Console": "Faça login em seu AWS Management Console", + "Click on the Services menu from the dropdown menu": "Clique no menu Serviços no menu suspenso", + "Click on the Simple Email Services menu from the left sidebar": "Clique no menu Simple Email Services na barra lateral esquerda", + "Click on the Email Addresses menu from the left sidebar": "Clique no menu Endereços de e-mail na barra lateral esquerda", + "Finally, click on the button that named 'Verify a new email address'": "Por fim, clique no botão denominado 'Verificar um novo endereço de e-mail'", + "Emails must be space separated": "Os e-mails devem ser separados por espaço", + "Choose a sender": "Escolha um remetente", + "You successfully added an article": "Você adicionou um artigo com sucesso", + "You successfully updated an article": "Você atualizou um artigo com sucesso", + "You successfully deleted an article": "Você excluiu um artigo com sucesso", + "Time tracking": "Controle de tempo", + "Time spent on this task": "Tempo gasto nesta tarefa", + "started": "iniciada", + "paused": "pausada", + "reseted": "reiniciada", + "completed": "Concluída", + "stopped": "parada", + "Task reset!": "Tarefa redefinida!", + "Task completed!": "Tarefa completa!", + "You successfully added a permission": "Você adicionou uma permissão com sucesso", + "You successfully added a user group": "Você adicionou com sucesso um grupo de usuários", + "You successfully copied a user group": "Você copiou com sucesso um grupo de usuários", + "KnowledgeBase": "Base de Conhecimento", + "Permissions config": "Configuração de permissões", + "Users Groups": "Grupos de usuários", + "Products": "Produtos", + "Show brands": "Mostrar marcas", + "Manage brands": "Gerenciar marcas", + "Manage channels": "Gerenciar canais", + "Show channel": "Mostrar canal", + "Add companies": "Adicionar empresas", + "Edit companies": "Editar empresas", + "Remove companies": "Remover empresas", + "Merge companies": "Fundir empresas", + "Show companies": "Mostrar empresas", + "Show companies main": "Mostrar principais empresas", + "Export companies to xls file": "Exportar empresas para arquivo xls", + "Show customers": "Mostrar clientes", + "Edit customer": "Editar cliente", + "Merge customers": "Unir clientes", + "Remove customers": "Remover clientes", + "Change customer state": "Alterar o estado do cliente", + "Show deals": "Mostrar acordos", + "Add deal board": "Adicionar board de acordo", + "Remove deal board": "Remover board de acordo", + "Add deal pipeline": "Adicionar pipeline de acordo", + "Edit deal pipeline": "Editar pipeline de acordo", + "Remove deal pipeline": "Remover pipeline de acordo", + "Update pipeline order": "Atualizar pedido de pipeline", + "Deal pipeline watch": "Relógio pipeline de acordo", + "Add deal stage": "Adicionar estágio de acordo", + "Edit deal stage": "Editar estágio do acordo", + "Remove deal stage": "Remover estágio do acordo", + "Add deal": "Adicionar acordo", + "Remove deal": "Remover acordo", + "Watch deal": "Veja o acordo", + "Archive all deals in a specific stage": "Arquive todas os acordos em um estágio específico ", + "Export deals": "Acordos de exportação", + "Show tickets": "Mostrar tickets", + "Add ticket board": "Adicionar board de ticket", + "Remove ticket board": "Remover board de ticket", + "Add ticket pipeline": "Adicionar pipeline de ticket", + "Edit ticket pipeline": "Editar pipeline de ticket", + "Remove ticket pipeline": "Remover pipeline de ticket", + "Ticket pipeline watch": "Observação de pipeline de ticket", + "Add ticket stage": "Adicionar estágio de ticket", + "Edit ticket stage": "Editar estágio de ticket", + "Update stage order": "Atualizar estágio do pedido", + "Remove ticket stage": "Remover estágio do ticket", + "Add ticket": "Adicionar ticket", + "Remove ticket": "Remover ticket", + "Watch ticket": "Observar ticket", + "Archive all tickets in a specific stage": "Arquive todos os tickets em um estágio específico", + "Show growth hacks": "Mostrar hacks de crescimento", + "Add growth hacking board": "Adicionar board do hacks de crescimento", + "Remove growth hacking board": "Remover board do hacks de crescimento", + "Edit growth hacking pipeline": "Editar pipeline do hacks de crescimento", + "Add growth hacking pipeline": "Adicionar pipeline do hacks de crescimento", + "Remove growth hacking pipeline": "Remover o pipeline do hacks de crescimento", + "Growth hacking pipeline watch": "Observar pipeline do hacks de crescimento", + "Add growth hacking stage": "Adicionar estágio do hacks de crescimento", + "Edit growth hacking stage": "Editar estágio do hacking de crescimento", + "Remove growth hacking stage": "Remover o estágio do hacking de crescimento", + "Add growth hacking": "Adicionar hacking de crescimento", + "Edit growth hacking": "Editar hacking de crescimento", + "Remove growth hacking": "Remover hacking de crescimento", + "Watch growth hacking": "Observar ao hacking de crescimento", + "Archive all growth hacks in a specific stage": "Arquive todos os hacking de crescimento em um estágio específico", + "Add growth hacking template": "Adicionar modelo de hacking de crescimento", + "Edit growth hacking template": "Editar modelo de hacking de crescimento", + "Remove growth hacking template": "Remover template de hacking de crescimento", + "Duplicate growth hacking template": "Duplicado modelo hacking de crescimento", + "Show growth hacking template": "Mostrar modelo de hacking de crescimento", + "Show tasks": "Mostrar tarefas", + "Add task board": "Adicionar board de tarefas", + "Remove task board": "Remover board de tarefas", + "Add task pipeline": "Adicionar pipeline de tarefa", + "Edit task pipeline": "Editar pipeline de tarefas", + "Remove task pipeline": "Remover pipeline de tarefas", + "Task pipeline watch": "Observação de pipeline de tarefas", + "Add task stage": "Adicionar estágio de tarefa", + "Edit task stage": "Editar o estágio da tarefa", + "Remove task stage": "Remover estágio de tarefa", + "Add task": "Adicionar tarefa", + "Editar tarefa": "Editar tarefa", + "Remove task": "Remover tarefa", + "Watch task": "Observar Tarefa", + "Archive all tasks in a specific stage": "Arquivar todas as tarefas em um estágio específico", + "Update time tracking for a task": "Atualizar o controle de tempo para uma tarefa", + "Set live engage message": "Definir mensagem de engajamento ao vivo", + "Set pause engage message": "Definir mensagem de pausa e engajamento", + "Set live engage message manual": "Definir mensagem de engajamento manual ao vivo", + "Remove engage message": "Remover mensagem de engajamento", + "Edit engage message": "Editar mensagem de engajamento", + "Add engage message": "Adicionar mensagem de engajamento", + "Show engages messages list": "Mostrar lista de mensagens engajamento", + "Engages": "Engajamento", + "Manage export insights": "Gerenciar insights de exportação", + "Show insights": "Mostrar insights", + "Manage knowledge base": "Gerenciar base de conhecimento", + "Show knowledge base": "Mostrar base de conhecimento", + "Manage permissions": "Gerenciar Permissões", + "Show permissions": "Exibir permissões", + "Show permissions actions": "Mostrar ações de permissões", + "Show permissions modules": "Mostrar módulos de permissões", + "Manage users groups": "Gerenciar grupos de usuários", + "Show users groups": "Mostrar grupos de usuários", + "Manage scripts": "Gerenciar scripts", + "Show scripts": "Mostrar scripts", + "Manage products": "Gerenciar produtos", + "Show products": "Mostrar produtos", + "Show team members": "Mostrar membros da equipe", + "Set active/deactive team member": "Definir membro da equipe ativo / desativado", + "Invite team member": "Convidar membro da equipe", + "Export team members": "Membros da equipe de exportação", + "Manage email template": "Gerenciar modelo de e-mail", + "Show email templates": "Mostrar modelos de e-mail", + "Manage response template": "Gerenciar modelo de resposta", + "Show response templates": "Mostrar modelos de resposta", + "Import xls files": "Importar arquivos xls", + "Show import histories": "Mostrar históricos de importação", + "Remove import histories": "Remover históricos de importação", + "Show tags": "Mostrar tags", + "Manage forms": "Gerenciar formulários", + "Show forms": "Mostrar formulários", + "Show segments list": "Mostrar lista de segmentos", + "Show integrations": "Mostrar integrações", + "Create messenger integration": "Criar mensagem de integração", + "Save messenger appearance data": "Salvar dados de aparência do messenger", + "Create lead integration": "Criar integração de leads", + "Edit lead integration": "Editar integração de leads", + "Remove integration": "Remover integração", + "Archive an integration": "Arquive uma integração", + "Edit common integration fields": "Editar campos de integração comuns", + "Show conversations": "Mostrar conversas", + "Assign conversation": "Atribuir conversa", + "Add conversation message": "Adicionar mensagem de conversa", + "Resolve all converstaion": "Resolva toda a conversão", + "Change conversation status": "Alterar o status da conversa", + "Show general settings": "Mostrar configurações gerais", + "Manage general settings": "Gerenciar configurações gerais", + "Show email appearance": "Mostrar aparência de e-mail", + "Manage email appearance": "Gerenciar aparência de e-mail", + "View logs": "Ver registros", + "Show webhooks": "Mostrar webhooks", + "Manage webhooks": "Gerenciar webhooks", + "Allowed": "Permitido", + "If you archive a pop ups, then you won't be able to see customers & conversations related to this pop ups anymore": "Se você arquivar pop-ups, não será mais possível ver clientes e conversas relacionadas a esses pop-ups", + "Verified": "Verificado", + "Duplicated email": "Email duplicado", + "Must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters": "Deve conter pelo menos um número e uma letra maiúscula e minúscula e pelo menos 8 ou mais caracteres", + "Endpoint url": "URL do endpoint", + "Customer created": "Cliente criado", + "Customer updated": "Cliente atualizado", + "Customer deleted": "Cliente excluído", + "Company created": "Empresa criada", + "Company updated": "Empresa atualizada", + "Company deleted": "Empresa excluída", + "Knowledge Base created": "Base de conhecimento criada", + "Knowledge Base updated": "Base de conhecimento atualizada", + "Knowledge Base deleted": "Base de conhecimento excluída", + "Admin messages": "Mensagens de administrador", + "Customer create conversation": "Cliente cria conversa", + "Customer messages": "Mensagens do cliente", + "Engage messages": "Envolva mensagens", + "You successfully added a Webhook": "Você adicionou um Webhook com sucesso", + "unavailable": "indisponível", + "available": "acessível", + "You successfully deleted a webhook": "Você excluiu um webhook com sucesso", + "You successfully updated a Webhook": "Você atualizou um Webhook com sucesso", + "Copy token": "Copiar Token", + "Transaction": "Transação", + "Checklists": "Lista de verificação", + "Checklist items": "Itens da lista de verificação", + "Deal boards": "Boards de acordos", + "Deal pipelines": "Pipelines de acordos", + "Growth hack boards": "Boards do Hack de crescimento", + "Growth hack pipelines": "Pipelines de hack de crescimento", + "Growth hacks": "Hack de crescimento", + "Internal notes": "Notas internas", + "Knowledgebase topics": "Tópicos da base de conhecimento", + "Knowledgebase categories": "Categorias da base de conhecimento", + "Knowledgebase articles": "Artigos da base de conhecimento", + "Pipeline labels": "Rótulos de pipeline", + "Pipeline templates": "Modelos de pipeline", + "Product categories": "Categorias de Produtos", + "Task pipelines": "Pipelines de tarefas", + "Ticket boards": "Boards de Tickets", + "Task boards": "Boards de tarefas", + "Ticket pipelines": "Pipelines de Tickets", + "Duplicated messenger for single brand": "Mensageiro duplicado para marca única", + "You successfully chose a new brand": "Você escolheu com sucesso uma nova marca", + "Basic JavaScript": "JavaScript básico", + "Single page apps": "Aplicativos de página única", + "Google tag manager": "Gerenciador de tags do Google", + "Paste the following code before the body tag on every page you want erxes widget to appear": "Cole o seguinte código antes da tag do corpo em cada página que você deseja que o widget apareça", + "For web apps built with asynchronous JavaScript": "Para aplicativos da web desenvolvidos com JavaScript assíncrono", + "Paste the code below in main layout you want erxes chat to appear": "Cole o código abaixo no layout principal que você deseja que o chat do apareça", + "To connect Google Tag Manager to erxes, you must have an active Google Tag Manager account with a published container": "Para conectar o Gerenciador de tags do Google, você deve ter uma conta do Gerenciador de tags do Google ativa com um contêiner publicado", + "IOS": "IOS", + "Android": "Android", + "Add Erxes SDK to your iOS project in Xcode:": "Adicione o SDK ao seu projeto iOS no Xcode:", + "then run": "então rode", + "in terminal": "no terminal", + "Add a 'Privacy - Photo Library Usage Description' entry to your": "Adicione uma entrada 'Privacy - Photo Library Usage Description' ao seu", + "This is required by Apple": "Isso é exigido pela Apple", + "and gives your users permission to upload images": "e dá a seus usuários permissão para fazer upload de imagens", + "Open source:": "Código aberto:", + "Import ErxesSDK into your UIViewController class and you can start Erxes with following options:": "Importe o ErxesSDK para sua classe UIViewController e você pode iniciar o Erxes com as seguintes opções:", + "SAAS:": "SAAS:", + "Without user data": "Sem dados do usuário", + "With user data": "Com dados do usuário", + "then paste the following code into": "em seguida, cole o seguinte código em", + "into your class": "dentro da sua classe", + "and you can start Erxes with following options:": "e você pode começar com as seguintes opções:", + "Add the JitPack repository to your build file": "Adicione o repositório JitPack ao seu arquivo de construção", + "Add it in your root build.gradle at the end of repositories:": "Adicione-o em seu build.gradle raiz no final dos repositórios:", + "Add the dependency": "Adicione a dependência", + "Add it in your root": "Adicione na sua root", + "at the end of repositories:": "no final dos repositórios:", + "Default configuration": "Configuração padrão", + "generated unique code of your brand": "gerou código único de sua marca", + "erxes-widgets-api server url": "url do servidor erxes-widgets-api", + "erxes-api subscription url": "url de inscrição erxes-api", + "erxes-api server url": "url do servidor erxes-api", + "Start chat": "Iniciar bate-papo", + "Import ErxesSDK into": "Importar o ErxesSDK para", + "into": "em", + "Call a chat with login form": "Chame um chat com o formulário de login", + "If your application has already registered with user , give user’s information with this way": "Se seu aplicativo já foi registrado com o usuário, forneça as informações do usuário desta forma", + "You successfully updated a messenger": "Você atualizou um messenger com sucesso", + "Error: Integrations api is not running": "Erro: API de integração não está em execução", + "Monthly Active Users": "Usuários ativos mensais", + "Weekly Orders": "Pedidos Semanais", + "Monthly Orders": "Pedidos Mensais", + "Repeat Purchases (Total)": "Compras repetidas (total)", + "Daily Active Users": "Usuários ativos diários", + "Weekly Active Users": "Usuários ativos semanais", + "Active Subscriptions (Total)": "Assinaturas ativas (total)", + "Weekly Revenue": "Receita Semanal", + "Monthly Revenue": "Receita mensal", + "Repeat Recurring Revenue": "Receita recorrente recorrente", + "Viral coefficient": "Coeficiente viral", + "Free-to-paid conversion rate": "Taxa de conversão gratuita para paga", + "Number of deals created": "Número de negócios criados", + "Deal-to-close rate": "Taxa de negócio para fechar", + "GROWTHHACKERS RECOMMENDED": "RECOMENDAÇÕES DE HACKS CRESCIMENTO", + "YOUR METRICS": "SUAS MÉTRICAS", + "COMMON METRICS": "MÉTRICAS COMUNS", + "GROWTH MATRIX": "GROWTH MATRIX", + "This will permanently delete the current Pipeline. Are you absolutely sure?": "Isso excluirá permanentemente o Pipeline atual. Você tem certeza absoluta?", + "Successfully duplicated a template": "Modelo duplicado com sucesso", + "Task board & Pipelines": "Board de tarefas e pipelines", + "Further instructions have been sent to your e-mail address": "Mais instruções foram enviadas para o seu endereço de e-mail", + "You will configure several settings on this page": "Você definirá várias configurações nesta página", + "You will be able to change these settings in the erxes settings tab": "Você poderá alterar essas configurações na guia de configurações do erxes", + "You will be creating the top level administrator account profile": "Você criará o perfil da conta de administrador de nível superior", + "Please complete all the data in Initial Configuration Steps": "Preencha todos os dados nas etapas de configuração inicial", + "We would love your real first name, but you are free to choose any name you want to be called": "Adoraríamos seu primeiro nome verdadeiro, mas você é livre para escolher qualquer nome que quiser ser chamado", + "Your best email address is required. You will want to receive these notifications": "Seu melhor endereço de e-mail é obrigatório. Você vai querer receber essas notificações", + "Initial Configuration Steps": "Etapas de configuração inicial", + "Please fill out the following form to complete your installation": "Por favor, preencha o seguinte formulário para completar sua instalação", + "Please input the best email address to use as your login and to receive emails from your installation such as notifications, alerts and other messages": "Insira o melhor endereço de e-mail para usar como login e para receber e-mails de sua instalação, como notificações, alertas e outras mensagens", + "You must check below to receive information about upgrades and upgrading instructions, new tutorials, occasional requests for feedback and the monthly newsletter": "Você deve verificar abaixo para receber informações sobre atualizações e instruções de atualização, novos tutoriais, solicitações ocasionais de feedback e o boletim informativo mensal", + "Yes, I want in": "Sim eu quero entrar", + "I know I can unsubscribe easily at any time": "Eu sei que posso cancelar a inscrição facilmente a qualquer momento", + "Save and continue to login": "Salve e continue para fazer o login", + "Short name": "Nome curto", + "Phone (operator)": "Telefone", + "Send to board": "Enviar para o board", + "Time": "Horário", + "This card is archived": "Este cartão está arquivado", + "Select a color": "Selecione uma cor", + "Create a new label": "Crie uma nova etiqueta", + "Are you sure? This cannot be undone": "Tem certeza? Isto não pode ser desfeito", + "You successfully deleted a label": "Você excluiu um rótulo com sucesso", + "You successfully sent to a board": "Você enviou com sucesso para um board", + "You successfully deleted a stage": "Você excluiu um estágio com sucesso", + "Track your entire sales pipeline from one dashboard. You can also restrict access to your sales pipelines": "Acompanhe todo o seu funil de vendas em um único painel. Você também pode restringir o acesso aos seus canais de vendas", + "Create Boards and Pipelines": "Crie boards e pipelines", + "Tip: Choose different views": "Dica: Escolha diferentes visualizações", + "Click on “Boards, Calendar, Conversions” to filter deals": "Clique em Boards, Calendário, Conversões” para filtrar ofertas", + "unassigned": "não atribuído", + "participating": "participando", + "closed": "fechado", + "You successfully deleted a checklist": "Você excluiu uma lista de verificação com sucesso", + "You successfully converted a card": "Você converteu um card com sucesso", + "Convert to Card": "Converter para card", + "Which specific knowledgebase do you want to display in a separate tab in this messenger": "Qual base de conhecimento específica você deseja exibir em uma guia separada neste messenger", + "Which popup(s) do you want to display in this messenger": "Quais pop-ups você deseja exibir neste messenger", + "Which website(s) do you want to display in this messenger": "Quais sites você deseja exibir neste messenger", + "Website Title": "Título do site", + "Website Url": "URL do site", + "Button text": "Botão de texto", + "Bot Press Endpoint URL": "URL do endpoint da imprensa do bot", + "Please enter your Bot Press endpoint URL": "Por favor, insira o URL do endpoint do Bot Press", + "You successfully added an integration": "Você adicionou uma integração com sucesso", + "If you archive an integration, then you won't be able to see customers & conversations related to this integration anymore": "Se você arquivar uma integração, não poderá mais ver clientes e conversas relacionadas a esta integração", + "If you remove an integration, then all related conversations, customers & pop ups will also be removed": "Se você remover uma integração, todas as conversas, clientes e pop-ups relacionados também serão removidos", + "Your integration is no longer in this channel": "Sua integração não está mais neste canal", + "You are going to unarchive this integration": "Você vai desarquivar esta integração", + "Integration has been archived": "Integração foi arquivada", + "Integration has been unarchived": "A integração foi desarquivada", + "Name and brand must be chosen": "Nome e marca devem ser escolhidos", + "Integration has been edited": "A integração foi editada", + "You successfully added a webhook integration": "Você adicionou com sucesso uma integração de webhook", + "Integration detail": "Detalhe de integração", + "Reactions": "Reações", + "Sad": "Triste", + "Neutral": "Neutro", + "Like": "Gostei", + "Happy": "Feliz", + "Dislike": "Não gosto", + "publish": "publicar", + "Chat": "Chat", + "Please carefully select the brand, it will appear in the selected brand messenger": "Selecione cuidadosamente a marca, ela aparecerá no mensageiro da marca selecionada", + "Message not found": "Mensagem não encontrada", + "Already exist": "Já existe", + "You just deleted an engagement message": "Você acabou de deletar uma mensagem de engajamento", + "Yay! Your engagement message is now live": "Uhul! Sua mensagem de engajamento agora está ao vivo", + "Your engagement message is paused for now": "Sua mensagem de engajamento está pausada por enquanto", + "You successfully updated a engagement message": "Você atualizou com sucesso uma mensagem de engajamento", + "You successfully added a engagement message": "Você adicionou com sucesso uma mensagem de engajamento", + "SMS integration is not configured": "A integração de SMS não está configurada", + "Go to Settings > System config > Integrations config and set Telnyx SMS API key": "Ir para Configurações> Configuração do sistema> Configuração de integração e defina a chave da API Telnyx SMS", + "Compose your SMS": "Componha o seu SMS", + "Email verified": "Email verificado", + "Email not verified": "Email não verificado", + "Log messages": "Mensagens de log", + "Write a content": "Escreva um conteúdo", + "Choose a sent as": "Escolha um enviar como", + "Choose day:": "Escolha o dia:", + "Deals not found": "Acordos não encontrados", + "You successfully added a product or service": "Você adicionou com sucesso um produto ou serviço", + "You successfully updated a deal": "Você atualizou um acordo com sucesso", + "You successfully deleted a deal": "Você excluiu um acordo com sucesso", + "You successfully changed a deal": "Você mudou um acordo com sucesso", + "You successfully copied a deal": "Você copiou um acordo com sucesso", + "Current Stage": "Estágio atual", + "Assigned": "Atribuído", + "Manage Product & Service": "Gerenciar Produto e Serviço", + "You successfully updated": "Você atualizou com sucesso", + "You successfully changed an experiment": "Você alterou um experimento com sucesso", + "Growth funnel": "Funil de crescimento", + "Vote": "Voto", + "Unvote": "Não votar", + "Experiments": "Experimentos", + "Sort": "Ordenar", + "Choose a growth funnel": "Escolha um funil de crescimento", + "The conversation Assignee has been renewed": "A conversa do destinatário foi renovada", + "Already created product board": "Board de produto já criada", + "Created product board note": "Nota de board de produto criada", + "You have a new email": "Você tem um novo e-mail", + "You have a message from facebook": "Voce tem uma mensagem do facebook", + "You have got a new lead": "Você tem uma nova pista", + "You have a new message from messenger": "Você tem uma nova mensagem do messenger", + "Visitor contact info": "Informações de contato do visitante", + "Conversation details": "Detalhes da conversa", + "You successfully deleted a file": "Você excluiu um arquivo com sucesso", + "Create product board note": "Criar nota de produto", + "Go to product board": "Ir para o board do produto", + "response frequency averages": "médias de frequência de resposta", + "If you remove a pop ups, then all related conversations, customers will also be removed": "Se você remover um pop-up, todas as conversas relacionadas e os clientes também serão removidos", + "You successfully deleted a pop ups": "Você excluiu com sucesso um pop-ups", + "You are going to unarchive this pop ups": "Você vai desarquivar esses pop-ups", + "Pop ups has been archived": "Pop ups foram arquivados", + "Pop ups has been unarchived": "Os pop-ups foram desarquivados", + "You should connect Popup to brand first": "Você deve conectar o Popup à marca primeiro", + "Notification have been seen": "Notificação foi vista", + "This page has no notification": "Esta página não tem notificação", + "Looks like you are all caught up!": "Parece que vocês estão em dia!", + "Hello Ganzorig": "Olá ganzorig", + "Hello I'm erxes": "Ola eu sou erxes", + "Make sure": "Certificar-se de", + "save your profile information": "salvar as informações do seu perfil", + "exactly": "exatamente", + "atleast": "pelo menos", + "atmost": "no máximo", + "Add event attribute": "Adicionar atributo de evento", + "equals": "é igual a", + "is not equal to": "não é igual a", + "is set": "está definido", + "is not set": "não está definido", + "is true": "é verdade", + "is false": "é falso", + "number: equals": "número: igual", + "number: is not equal to": "número: não é igual a", + "number: is greater than": "número: é maior que", + "number: is less than": "número: é menor que", + "date: is greater than": "data: é maior que", + "date: is less than": "data: é menor que", + "will occur before on following n-th minute": "ocorrerá antes do n-ésimo minuto seguinte", + "will occur after on following n-th minute": "ocorrerá após no seguinte n-ésimo minuto", + "will occur before on following n-th day": "ocorrerá antes do n-ésimo dia seguinte", + "will occur after on following n-th day": "ocorrerá depois do n-ésimo dia seguinte", + "date relative less than": "data relativa menor que", + "date relative greater than": "data relativa maior que", + "See parent segment conditions": "Veja as condições do segmento pai", + "Open segments and starting add details": "Abra os segmentos e comece a adicionar detalhes", + "You successfully updated a task": "Você atualizou uma tarefa com sucesso", + "You successfully deleted a task": "Você excluiu uma tarefa com sucesso", + "You successfully copied a task": "Você copiou uma tarefa com sucesso", + "You successfully changed a task": "Você mudou uma tarefa com sucesso", + "You successfully updated a ticket": "Você atualizou um ticket com sucesso", + "You successfully deleted a ticket": "Você excluiu um ticket com sucesso", + "You successfully copied a ticket": "Você copiou um ticket com sucesso", + "You successfully changed a ticket": "Você alterou um ticket com sucesso", + "You successfully updated a note": "Você atualizou uma nota com sucesso", + "integrations": "integrações", + "Archive List has been archived": "A lista de arquivos foi arquivada", + "This will remove list from the board": "Isso removerá a lista do board", + "To view archived list and bring them back to the board, click “Menu” > “Archived Items”": "Para visualizar a lista arquivada e trazê-la de volta ao board, clique em “Menu”> “Itens Arquivados”", + "alarm": "alarme", + "briefcase": "pasta", + "earthgrid": "terra", + "compass": "bússola", + "idea": "ideia", + "diamond": "diamante", + "piggybank": "cofrinho", + "piechart": "gráfico de pizza", + "scale": "escala", + "megaphone": "megafone", + "tools": "Ferramentas", + "umbrella": "guarda-chuva", + "bar-chart": "gráfico de barras", + "star": "Estrela", + "head-1": "cabeça", + "settings": "configurações", + "paintpalette": "paleta de tinta", + "flag": "bandeira", + "phone-call": "chamada telefónica", + "laptop": "laptop", + "home": "casa", + "puzzle": "quebra-cabeça", + "medal": "medalha", + "like": "gostei", + "book": "livro", + "clipboard": "prancheta", + "computer": "computador", + "paste": "colar", + "folder": "pasta", + "Install code of": "Instale o código de", + "Show checked items": "Mostrar itens marcados", + "Hide completed items": "Ocultar itens concluídos", + "You successfully deleted a company": "Você excluiu uma empresa com sucesso", + "You successfully merged companies": "Você fundiu empresas com sucesso", + "Related Associate": "Associado Relacionado", + "Competitor": "Concorrente", + "Investor": "Investidor", + "Partner": "Parceiro", + "Press": "Pressione", + "Prospect": "Prospect", + "Reseller": "Revendedor", + "You successfully changed the state": "Você mudou o estado com sucesso", + "You successfully merged a customer": "Você fundiu um cliente com sucesso", + "Your request has been successfully sent": "Sua solicitação foi enviada com sucesso", + "Your contacts will be verified after a while": "Seus contatos serão verificados depois de um tempo", + "You successfully changed a status": "Você alterou um status com sucesso", + "A person who preparing to buy some service or product": "Uma pessoa que se prepara para comprar algum serviço ou produto", + "A person who already bought some service or product": "Uma pessoa que já comprou algum serviço ou produto", + "Most visited pages on your website": "Páginas mais visitadas em seu site", + "You have successfully sent a email": "Você enviou um e-mail com sucesso", + "This email conversation will be automatically moved to a resolved state": "Esta conversa por e-mail será automaticamente movida para um estado resolvido", + "Please choose phone number": "Por favor escolha o número de telefone", + "Please type sms text": "Por favor, digite o texto sms", + "Customer or company does not have primary phone": "Cliente ou empresa não tem telefone principal", + "SMS successfully sent": "SMS enviado com sucesso", + "There is no linked accounts": "Não há contas vinculadas", + "Continue with Facebook": "Continuar com Facebook", + "You canceled importing action": "Você cancelou a ação de importação", + "You can track your recently imported customers or companies here": "Você pode rastrear seus clientes ou empresas importados recentemente aqui", + "Export this contacts": "Exportar contatos", + "Export this companies": "Exportar empresas", + "User name": "Usuário", + "Add lead": "Adicionar Lead", + "Reset Member Password": "Enviar alteração de senha", + "Resend": "Reenviar", + "You have successfully sent a message": "Mensagem enviada com sucesso", + "Send WhatsPro": "Enviar WhatsApp", + "Website Activity": "Atividade do site", + "Tracked data": "Rastreamento", + "sent a": "enviou uma", + "See full conversation": "Ver a conversa inteira", + "Go to a ticket": "Ir para Ticket", + "Go to a task": "Ir para Tarefas", + "Go to a deal": "Ir para Acordo", + "Type ": "Digite ", + "converted": "Convertido", + "Create your first Sales Board": "Crie seu primeiro board de vendas", + "Tip: This could be equivalent to your brands and/or you can organize by year/project/etc": "Dica: Isso pode ser equivalente às suas marcas e/ou você pode organizar por ano / projeto / etc", + "Project": "Projeto", + "Edit project": "Editar projeto", + "email template:": "modelo de e-mail", + "Select operator": "Selecione um operador", + "Select property": "Selecione uma propriedade", + "Select event": "Selecione um evento", + "Select value": "Selecione uma opção", + "State": "State", + "Avatar": "Avatar", + "Email validation status": "Email validation status", + "Phone validation status": "Phone validation status", + "Country code": "Country code", + "general": "Geral", + "location": "Localização", + "visitorContactInfo": "Informações de Contato", + "customer segments": "Segmentos de clientes", + "lead segments": "Segmentos de leads", + "visitor segments": "Segmentos de visitantes", + "company segments": "Segmentos de empresas", + "Creating company segment": "Criar segmento de empresa", + "Creating lead segment": "Criar segmento de lead", + "Creating visitor segment": "Criar segmento de visitante", + "Looking good!": "Alteração realizada!", + "You've successfully updated this profile": "Atualizado com sucesso", + "Invalid password. Try again": "Senha incorreta. Tente novamente", + "No results found": "Nenhum item encontrado" +} \ No newline at end of file diff --git a/ui/src/locales/pt_BR.json b/ui/src/locales/pt_BR.json index 7fad0c2deab..c117bb7a3a2 100644 --- a/ui/src/locales/pt_BR.json +++ b/ui/src/locales/pt_BR.json @@ -2,7 +2,7 @@ "Are you sure?": "Você tem certeza?", "Yes, I am": "Sim, eu tenho", "No, Cancel": "Não, cancelar", - "Filter by tags": "Filter by tags", + "Filter by tags": "Filtrar por etiquetas", "There is no data": "Não há dados", "There is no data.": "Não há dados.", "Load more": "Carregar mais", @@ -16,13 +16,13 @@ "Photo": "Foto", "Name": "Nome", "Views": "Visualizações", - "Conversion": "Conversion", - "Go to import": "Go to import", + "Conversion": "Conversão", + "Go to import": "Importar", "Conversion rate": "Taxa de conversão", "Contacts gathered": "Contatos reunidos", "Create lead": "Criar lead", "Form title": "Título do formulário", - "Related": "Related", + "Related": "Relacionado", "Form description": "Descrição do formulário", "Position": "Cargo", "Username": "Usuário", @@ -31,9 +31,9 @@ "Twitter username": "Usuário do Twitter", "Inbox": "Caixa de entrada", "Workflow": "Workflow", - "Watch": "Watch", - "Watching": "Watching", - "Team Inbox": "Team Inbox", + "Watch": "Ver", + "Watching": "Vendo", + "Team Inbox": "Caixa de entrada da equipe", "Customers": "Clientes", "Companies": "Empresas", "Engage": "Engajar", @@ -87,8 +87,8 @@ "There is no lead.": "Não há leads.", "New response template": "Novo modelo de resposta", "Cancel": "Cancelar", - "Public": "Public", - "Private": "Private", + "Public": "Público", + "Private": "Privado", "New email template": "Novo modelo de e-mail", "Local publisher's email template": "Modelo de e-mail dos publicadores locais", "New user": "Novo usuário", @@ -118,7 +118,7 @@ "IP Address": "Endereço de IP", "Hostname": "Hostname", "Language": "Linguagem", - "User Agent": "User Agent", + "User Agent": "Agente", "Other properties": "Outras propriedades", "Facebook": "Facebook", "Facebook profile": "Perfil do Facebook", @@ -152,7 +152,7 @@ "simple": "simples", "custom": "customizado", "default": "padrão", - "default language": "default language", + "default language": "idioma padrão", "primary": "primário", "Content": "Conteúdo", "Save & draft": "Salvar & rascunho", @@ -214,7 +214,7 @@ "Preview": "Visualizar", "Column name": "Nome da coluna", "Visible": "Visível", - "Visibility": "Visibility", + "Visibility": "Visibilidade", "Choose person": "Escolher pessoa", "Conversation Details": "Detalhes da Conversa", "Opened": "Aberto", @@ -271,11 +271,11 @@ "Mark Page Read": "Marcar Página como Lida", "Mark All Read": "Marcar Todas como Lidas", "Coming soon": "Em breve", - "Looks like you are all caught up": "Looks like you are all caught up", + "Looks like you are all caught up": "Parece que você está preso", "AI": "IA", "See all": "Ver tudo", "Select a field": "Selecione um campo", - "Add condition": "Adicionar uma condição", + "Add condition": "Adicionar condição", "Parent segment conditions": "Condições do segmento pai", "Filter by segments": "Filtrar por segmentos", "New segment": "Novo segmento", @@ -287,7 +287,7 @@ "Sub segment of": "Segmento secundário de", "Color": "Cor", "Filters": "Filtros", - "User(s) will recieve this message": "O(s) usuário(s) irão receber essa mensagem.", + "User(s) will receive this message": "O(s) usuário(s) irá(ão) receber essa mensagem.", "Color code": "Código de cor", "Engage Message": "Mensagem de engajamento", "Item counts": "Contador de itens", @@ -344,10 +344,10 @@ "Knowledge base": "Base de conhecimento", "Notification": "Notificação", "Notifications": "Notificações", - "Show unread": "Show unread", - "Unread": "Unread", - "Recent": "Recent", - "Mark all as read": "Mark all as read", + "Show unread": "Mostrar não lido", + "Unread": "Não lida", + "Recent": "Recente", + "Mark all as read": "Marcar tudo como lido", "Email Appearance": "Aparência do e-mail", "Team Members": "Membros do Time", "Account default": "Conta padrão", @@ -359,7 +359,7 @@ "Email Template": "Padrão de E-mail", "Response templates": "Padrão de resposta", "Email templates": "Padrão de e-mail", - "Brand Name": "Nome da Marcar", + "Brand Name": "Nome da Marca", "Current template": "Padrão escolhido", "Created at": "Criado às", "Manage Fields": "Gerenciar campos", @@ -415,7 +415,7 @@ "Edit response": "Editar resposta", "To send your message press Enter and Shift + Enter to add a new line": "Para enviar sua mensagem pressione Enter e Shift + Enter para adicionar uma nova linha", "To send your note press Enter and Shift + Enter to add a new line": "Para enviar sua nota pressione Enter e Shift + Enter para adicionar uma nova linha", - "Please enter an unit price. It should be a number": "Please enter an unit price. It should be a number", + "Please enter an unit price. It should be a number": "Insira um preço unitário. Deve ser um número", "Type to search": "Digite para procurar", "Members": "Membros", "Choose integrations": "Escolher integrações", @@ -462,7 +462,6 @@ "Assign to": "Atribuir a", "Remove assignee": "Remover atribuição", "Account settings": "Configurações de conta", - "General Settings": "Configurações gerais", "Integration Settings": "Configurações de integração", "Personal settings": "Configurações pessoais", "Add category": "Adicionar categoria", @@ -549,7 +548,7 @@ "Discount": "Desconto", "Tax": "Imposto", "Ticket": "Ticket", - "Task": "Task", + "Task": "Tarega", "Select company": "Selecionar empresa", "Select customer": "Selecionar cliente", "Note": "Nota", @@ -571,8 +570,8 @@ "Manage Board & Pipeline": "Gerenciar Quadros & Pipelines", "Choose a stage": "Selecione um estágio", "Deal Settings": "Configurações de acordos", - "Ticket Settings": "Ticket Settings", - "Task Settings": "Task Settings", + "Ticket Settings": "Configurações de Ticket", + "Task Settings": "Configurações de Tarefa", "Boards & Pipelines": "Quadros & Pipelines", "Product & Service": "Produto & Serviço", "There is no pipeline in this board.": "Não há pipelines nesse quadro.", @@ -585,24 +584,24 @@ "Board": "Quadro", "Pipeline": "Pipeline", "Stage": "Estágio", - "Stage name": "Stage name", + "Stage name": "Nome do Estágio", "Add a deal": "Adicionar negócio", - "Add a task": "Add a task", - "Add a ticket": "Add a ticket", - "Priority": "Priority", - "Critical": "Critical", - "High": "High", + "Add a task": "Adicionar uma tarefa", + "Add a ticket": "Adionar um ticket", + "Priority": "Prioridade", + "Critical": "Critíco", + "High": "Alto", "Normal": "Normal", - "Low": "Low", - "Attachments": "Attachments", - "Source": "Source", - "Select a source": "Select a source", - "Upload an attachment": "Upload an attachment", + "Low": "Baixo", + "Attachments": "Anexos", + "Source": "Fonte", + "Select a source": "Selecione uma fonte", + "Upload an attachment": "Carregar um anexo", "Description": "Descrição", - "Select a priority": "Select a priority", + "Select a priority": "Selecione uma prioridade", "Edit deal": "Editar negócio", - "Edit task": "Edit task", - "Edit ticket": "Edit ticket", + "Edit task": "Editar tarefa", + "Edit ticket": "Editar ticket", "Add Product / Service": "Adicionar Produto / Serviço", "Reply tweet": "Responder tweet", "Tweet": "Tweet", @@ -631,8 +630,8 @@ "Currency": "Moeda", "Unit of measurement": "Unidade de medida", "Create another board": "Criar outro quadro", - "No pipeline": "No pipeline", - "No stage": "Sem palco", + "No pipeline": "Sem pipeline", + "No stage": "Sem estágio", "No deal": "Sem acordo", "Background": "Background", "Choose": "Escolha", @@ -672,11 +671,11 @@ "All customers imported successfully": "Todos os clientes foram importados com sucesso", "There aren't any imports": "Não há importações", "Successfully Removed all customers": "Todos os clientes removidos com sucesso", - "You can only import max 600 at a time": "Você pdoe importar no máximo 600 por vez", + "You can only import max 600 at a time": "Você pode importar no máximo 600 por vez", "Invalid import type": "Tipo de importação inválido", "Last updated": "Ultima atualização", - "Filter by lead status": "Filtrar pelo status da Lead", - "No lead status chosen": "Status da Lead não escolhido", + "Filter by lead status": "Filtrar pelo status do Lead", + "No lead status chosen": "Status do Lead não escolhido", "Schedule:": "Cronograma:", "Every Day": "Todo dia", "Every Month": "Todo mês", @@ -690,226 +689,225 @@ "Every Sunday": "Todo domingo", "Choose a schedule day": "Selecione o tipo de agendamento", "Choose a schedule time": "Selecione o horário do agendamento", - "Won": "Ganhou", + "Won": "Ganho", "Lost": "Perdido", "App store": "App store", "App store menu": "App store menu", "In Progress": "Em progresso", - "It`s size exceeds the limit 10mb": "It`s size exceeds the limit 10mb", - "Congrats! Your email sent successfully!": "Congrats! Your email sent successfully!", - "Works with messenger": "Works with messenger", - "Knowledge base topic": "Knowledge base topic", - "Package version": "Package version", + "It`s size exceeds the limit 10mb": "Seu tamanho excede o limite de 10mb", + "Congrats! Your email sent successfully!": "Parabéns! Seu e-mail enviado com sucesso!", + "Works with messenger": "Funciona com mensageiro", + "Knowledge base topic": "Tópico da base de conhecimento", + "Package version": "Versão do pacote", "Branch name": "Branch name", - "Abbreviated": "Abbreviated", - "User": "User", - "Recent conversations": "Recent conversations", - "Start new conversation": "Start new conversation", - "Talk with support staff": "Talk with support staff", - "Send a message": "Send a message", - "Volume Report By Customer": "Volume Report By Customer", - "Export Report": "Export Report", - "We`re ready to help you.": "We`re ready to help you.", - "Please choose a product": "Please choose a product", - "Please choose a currency": "Please choose a currency", + "Abbreviated": "Abreviado", + "User": "Usuário", + "Recent conversations": "Conversas recentes", + "Start new conversation": "Iniciar nova conversa", + "Talk with support staff": "Converse com a equipe de suporte", + "Send a message": "Enviar uma mensagem", + "Volume Report By Customer": "Relatório de volume por cliente", + "Export Report": "Exportar Relatório", + "We`re ready to help you.": "Estamos prontos para ajudá-lo.", + "Please choose a product": "Escolha um produto", + "Please choose a currency": "Escolha uma moeda", "No board": "No board", - "Empty": "Empty", - "There is no account.": "There is no account.", - "There is no tag.": "There is no tag.", - "Skip for now": "Skip for now", - "Go to Inbox": "Go to Inbox", - "Messenger Language": "Messenger Language", - "Messenger name": "Messenger name", - "Skip": "Skip", - "Finish": "Finish", - "Show": "Show", - "Hide": "Hide", - "Previous": "Previous", - "Users": "Users", - "users": "users", - "brands": "brands", + "Empty": "Vazio", + "There is no account.": "Não há conta.", + "There is no tag.": "Não há tag.", + "Skip for now": "Pular por enquanto", + "Go to Inbox": "Ir para a caixa de entrada", + "Messenger Language": "Idioma do Messenger", + "Messenger name": "Messenger nome", + "Skip": "Pular", + "Finish": "Terminar", + "Show": "Mostrar", + "Hide": "Ocultar", + "Previous": "Anterior", + "Users": "Usuários", + "users": "usuários", + "brands": "marcas", "messengers": "messengers", - "channels": "channels", + "channels": "canais", "Emails": "Emails", "Messengers": "Messengers", - "You already have": "You already have", - "There is another": "There is another", - "Let's create your brand": "Let's create your brand", - "Invite users": "Invite users", - "Let's grow your team": "Let's grow your team", - "Invite": "Invite", - "Let's start": "Let's start", - "Start messaging now!": "Start messaging now!", - "Create channel": "Create channel", - "Get started on your channel": "Get started on your channel", - "Create your first messenger": "Create your first messenger", - "Welcome": "Welcome", - "Nothing inserted": "Nothing inserted", - "Empty emails": "Empty emails", - "Initial setup": "Initial setup", - "Add another": "Add another", - "Don't show again": "Don't show again", - "No other pipeline": "No other pipeline", - "No other boards": "No other boards", - "I'm ready to get started": "I'm ready to get started", - "Welcome paragraph": "We're so happy to have you. Let's take a moment to get you set up", - "Get notified and notify others to keep everything up to date": "Get notified and notify others to keep everything up to date", - "If your team hasn't received messages that you sent on the site, we can send it to them via email": "If your team hasn't received messages that you sent on the site, we can send it to them via email", - "Send an email and notify members that they've been invited!": "Send an email and notify members that they've been invited!", - "January": "January", - "February": "February", - "March": "March", - "April": "April", - "May": "May", - "June": "June", - "July": "July", - "August": "August", - "September": "September", - "October": "October", - "November": "November", - "December": "December", - "Today": "Today", - "Sales": "Sales", - "Monthly view": "Monthly view", - "Filter by": "Filter by", - "Creating a brand and by adding channels, you are able to better analyze your customers needs and help solve their problems": "Creating a brand and by adding channels, you are able to better analyze your customers needs and help solve their problems", - "Grow and add users to your team! Assign, designate and let them do what they do best": "Grow and add users to your team! Assign, designate and let them do what they do best", - "Stay up to date with every single customer feedback and create more meaningful conversations": "Stay up to date with every single customer feedback and create more meaningful conversations", - "Create brand channels that are specifically categorized by type and activity": "Create brand channels that are specifically categorized by type and activity", - "Add a Lead here and see it on your Messenger Widget! In order to see Leads in your inbox, please make sure it is added in your channel.": "Add a Lead here and see it on your Messenger Widget! In order to see Leads in your inbox, please make sure it is added in your channel.", - "You can choose from our many messenger integrations and add to your knowledge base. The knowledge base will appear in the tab of your messenger widget. To do this, please create and add to your knowledge base.": "You can choose from our many messenger integrations and add to your knowledge base. The knowledge base will appear in the tab of your messenger widget. To do this, please create and add to your knowledge base.", - "An email signature is an opportunity to share information that helps build recognition and trust.": "An email signature is an opportunity to share information that helps build recognition and trust.", - "Let's start taking care of your customers": "Let's start taking care of your customers", - "Add in your first company!": "Add in your first company!", - "Choose from our many integrations and add to your channel": "Choose from our many integrations and add to your channel", - "Let's get you messaging away!": "Let's get you messaging away!", - "Whoops! No messages here but you can always start": "Whoops! No messages here but you can always start", - "Articles can address any number of issues your customers encounter. Types of knowledge articles can include solutions to common issues, product or feature documentation, FAQ's and much more.": "Articles can address any number of issues your customers encounter. Types of knowledge articles can include solutions to common issues, product or feature documentation, FAQ's and much more.", - "Oops! No data here": "Oops! No data here", - "Start adding integrations now!": "Start adding integrations now!", - "Add an integration in this Brand": "Add an integration in this Brand", - "Oh dear! You have no imports": "Oh dear! You have no imports", - "A strong customer engagement can help to further brand growth and loyalty": "A strong customer engagement can help to further brand growth and loyalty", - "Get started on your pipeline": "Get started on your pipeline", - "Connect to Facebook messages right from your Team Inbox": "Connect to Facebook messages right from your Team Inbox", - "Tweet back to your DMs right from your Team Inbox": "Tweet back to your DMs right from your Team Inbox", - "Connect straight to your Gmail and get those emails going": "Connect straight to your Gmail and get those emails going", - "Find your lead forms right here in your Widget": "Find your lead forms right here in your Widget", - "Get access to your Knowledge Base right in your Widget": "Get access to your Knowledge Base right in your Widget", - "Soon you'll be able to connect Viber straight to your Team Inbox": "Soon you'll be able to connect Viber straight to your Team Inbox", - "Get a hold of your Whatsapp messages through your Team Inbox": "Get a hold of your Whatsapp messages through your Team Inbox", - "Connect with Wechat and start messaging right from your Team Inbox": "Connect with Wechat and start messaging right from your Team Inbox", - "Find feedback that has been gathered from various customer engagement channels.": "Find feedback that has been gathered from various customer engagement channels.", - "A report on the total number of customer feedback responses given by team members.": "A report on the total number of customer feedback responses given by team members.", - "The average time a team member solved a problem based on customer feedback.": "The average time a team member solved a problem based on the customer feedback.", - "You can find stats that defines the average response time by each team member.": "You can find stats that defines the average response time by each team member.", - "Oh boy, looks like you need to get a head start on your deals": "Oh boy, looks like you need to get a head start on your deals", - "Open segments and starting add details": "Open segments and starting add details", - "Now easier to find contacts according to your brand": "Now easier to find contacts according to your brand", - "Search and filter customers by form": "Search and filter customers by form", - "There is always a lead!": "There is always a lead!", - "Calendar": "Calendar", - "Columns": "Columns", - "columns": "columns", - "Linked Accounts": "Linked Accounts", - "Select account": "Select account", - "Select account ...": "Select account ...", - "Add Account": "Add Account", - "Remove Account": "Remove Account", - "You can upload only image file": "You can upload only .png or .jpg image file", - "Permissions": "Permissions", - "New permission": "New permission", - "New group": "New group", - "Users groups": "Users groups", - "Choose the module": "Choose the module", - "Choose the actions": "Choose the actions", - "Choose the users": "Choose the users", - "Choose the groups": "Choose the groups", - "Choose groups": "Choose groups", - "Allow": "Allow", - "Invitation Status": "Invitation Status", - "Permission": "Permission", - "data successfully imported": "data successfully imported", - "Show result": "Show result", - "Importing": "Importing", - "data": "data", - "errors acquired": "errors acquired", - "There are": "There are", - "Continue": "Continue", - "Create brand": "Create brand", - "Create your first live chat and in-app messaging Stay up to date with every single customer feedback for more meaningful interactions": "Create your first live chat and in-app messaging. Stay up to date with every single customer feedback for more meaningful interactions.", - "A channel gives a full view of all the brands and its applications all in one place You can see all in-coming messages in your team inbox": "A channel gives a full view of all the brands and its applications all in one place. You can see all in-coming messages in your team inbox.", - "Hooray and Congratulations! You've completed the initial setup!": "Hooray and Congratulations! You've completed the initial setup!", - "Paste the code below before the body tag on every page you want erxes chat to appear": "Paste the code below before the tag on every page you want erxes chat to appear.", - "Paste the code below before the body tag on every page you want erxes lead to appear": "Paste the code below before the body tag on every page you want erxes lead to appear", - "If your flow type is embedded paste the code below additionally that you want erxes lead to appear": "If your flow type is embedded paste the code below additionally that you want erxes lead to appear", - "If your flow type is popup paste the code below additionally in your button": "If your flow type is popup paste the code below additionally in your button", - "Choose messengers": "Choose messengers", - "erxes allows you to create multiple messengers": "erxes allows you to create multiple messengers", - "erxes allows you to create multiple brands": "erxes allows you to create multiple brands", - "erxes allows you to create multiple channels": "erxes allows you to create multiple channels", - "Contacts": "Contacts", - "Create group": "Create group", - "Visitors": "Visitors", - "Due in the next day": "Due in the next day", - "Due in the next week": "Due in the next week", - "Due in the next month": "Due in the next month", - "Has no close date": "Has no close date", - "Over due": "Over due", - "Clear Filter": "Clear Filter", - "Remove this filter": "Remove this filter", - "Filtering is on": "Filtering is on", - "Choose products": "Choose products", - "Choose companies": "Choose companies", - "Choose customers": "Choose customers", - "Choose team members": "Choose team members", + "You already have": "Você já tem", + "There is another": "Tem outro", + "Let's create your brand": "Vamos criar sua marca", + "Invite users": "Convidar usuários", + "Let's grow your team": "Vamos aumentar sua equipe", + "Invite": "Convidar", + "Let's start": "Vamos começar", + "Start messaging now!": "Comece a enviar mensagens agora!", + "Create channel": "Criar canal", + "Get started on your channel": "Comece no seu canal", + "Create your first messenger": "Crie seu primeiro mensageiro", + "Welcome": "Bem-vindo(a)", + "Nothing inserted": "Nada inserido", + "Empty emails": "E-mails vazios", + "Initial setup": "Setup inicial", + "Add another": "Adicionar outro", + "Don't show again": "Não mostrar novamente", + "No other pipeline": "Nenhum outro canal", + "No other boards": "Nenhum outro board", + "I'm ready to get started": "Estou pronto para começar", + "Welcome paragraph": "Estamos muito felizes em ter você. Vamos reservar um momento para você configurar", + "Get notified and notify others to keep everything up to date": "Seja notificado e notifique outras pessoas para manter tudo atualizado", + "If your team hasn't received messages that you sent on the site, we can send it to them via email": "Se sua equipe não recebeu as mensagens que você enviou no site, podemos enviá-las por e-mail", + "Send an email and notify members that they've been invited!": "Envie um e-mail e notifique os membros que eles foram convidados!", + "January": "Janeiro", + "February": "Fevereiro", + "March": "Março", + "April": "Abril", + "May": "Maio", + "June": "Junho", + "July": "Julho", + "August": "Agosto", + "September": "Setembro", + "October": "Outubro", + "November": "Novembro", + "December": "Dezembro", + "Today": "Hoje", + "Sales": "Vendas", + "Monthly view": "Visualização mensal", + "Filter by": "Filtrar por", + "Creating a brand and by adding channels, you are able to better analyze your customers needs and help solve their problems": "Criando uma marca e adicionando canais, você consegue analisar melhor as necessidades de seus clientes e ajudar a resolver seus problemas", + "Grow and add users to your team! Assign, designate and let them do what they do best": "Cresça e adicione usuários à sua equipe! Atribua, designe e deixe-os fazer o que fazem de melhor", + "Stay up to date with every single customer feedback and create more meaningful conversations": "Mantenha-se atualizado com cada feedback do cliente e crie conversas mais significativas", + "Create brand channels that are specifically categorized by type and activity": "Crie canais de marca especificamente categorizados por tipo e atividade", + "Add a Lead here and see it on your Messenger Widget! In order to see Leads in your inbox, please make sure it is added in your channel.": "Adicione um Lead aqui e veja-o no seu Messenger Widget! Para ver Leads em sua caixa de entrada, certifique-se de que ele foi adicionado ao seu canal.", + "You can choose from our many messenger integrations and add to your knowledge base. The knowledge base will appear in the tab of your messenger widget. To do this, please create and add to your knowledge base.": "Você pode escolher entre nossas muitas integrações de messenger e adicionar à sua base de conhecimento. A base de conhecimento aparecerá na guia do widget do messenger. Para fazer isso, crie e adicione à sua base de conhecimento.", + "An email signature is an opportunity to share information that helps build recognition and trust.": "Uma assinatura de e-mail é uma oportunidade de compartilhar informações que ajudam a criar reconhecimento e confiança.", + "Let's start taking care of your customers": "Vamos começar a cuidar dos seus clientes", + "Add in your first company!": "Adicione sua primeira empresa!", + "Choose from our many integrations and add to your channel": "Escolha entre nossas muitas integrações e adicione ao seu canal", + "Let's get you messaging away!": "Vamos tirar suas mensagens!", + "Whoops! No messages here but you can always start": "Opa! Nenhuma mensagem aqui, mas você sempre pode começar", + "Articles can address any number of issues your customers encounter. Types of knowledge articles can include solutions to common issues, product or feature documentation, FAQ's and much more.": "Os artigos podem abordar vários problemas que seus clientes encontram. Os tipos de artigos de conhecimento podem incluir soluções para problemas comuns, documentação de produtos ou recursos, perguntas frequentes e muito mais.", + "Oops! No data here": "Ops! Sem dados aqui", + "Start adding integrations now!": "Comece a adicionar integrações agora!", + "Add an integration in this Brand": "Adicionar uma integração nesta marca", + "Oh dear! You have no imports": "Opa! Você não tem importações", + "A strong customer engagement can help to further brand growth and loyalty": "Um forte envolvimento do cliente pode ajudar a promover o crescimento e a fidelidade da marca", + "Get started on your pipeline": "Comece seu pipeline", + "Connect to Facebook messages right from your Team Inbox": "Conecte-se às mensagens do Facebook diretamente da caixa de entrada da sua equipe", + "Tweet back to your DMs right from your Team Inbox": "Tweet de volta para seus DMs diretamente de sua caixa de entrada da equipe", + "Connect straight to your Gmail and get those emails going": "Conecte-se diretamente ao seu Gmail e envie seus e-mails", + "Find your lead forms right here in your Widget": "Encontre seus formulários de lead aqui mesmo no seu Widget", + "Get access to your Knowledge Base right in your Widget": "Obtenha acesso à sua Base de Conhecimento diretamente no seu Widget", + "Soon you'll be able to connect Viber straight to your Team Inbox": "Em breve você poderá conectar o Viber diretamente à sua caixa de entrada da equipe", + "Get a hold of your Whatsapp messages through your Team Inbox": "Receba suas mensagens do Whatsapp através de sua caixa de entrada da equipe", + "Connect with Wechat and start messaging right from your Team Inbox": "Conecte-se com o Wechat e comece a enviar mensagens diretamente da caixa de entrada da sua equipe", + "Find feedback that has been gathered from various customer engagement channels.": "Encontre o feedback coletado de vários canais de engajamento do cliente.", + "A report on the total number of customer feedback responses given by team members.": "Um relatório sobre o número total de respostas de feedback do cliente fornecidas pelos membros da equipe.", + "The average time a team member solved a problem based on customer feedback.": "O tempo médio que um membro da equipe resolveu um problema com base no feedback do cliente.", + "Oh boy, looks like you need to get a head start on your deals": "Opa, parece que você precisa ter uma vantagem inicial em seus negócios", + "Open segments and starting add details": "Abra segmentos e comece a adicionar detalhes", + "Now easier to find contacts according to your brand": "Agora ficou mais fácil encontrar contatos de acordo com a sua marca", + "Search and filter customers by form": "Pesquise e filtre clientes por formulário", + "There is always a lead!": "Há sempre um lead!", + "Calendar": "Calendário", + "Columns": "Colunas", + "columns": "colunas", + "Linked Accounts": "Contas ligadas", + "Select account": "Selecionar conta", + "Select account ...": "Selecionar conta...", + "Add Account": "Adicionar Conta", + "Remove Account": "Remover Conta", + "You can upload only image file": "Você pode enviar apenas arquivos de imagem .png ou .jpg", + "Permissions": "Permissões", + "New permission": "Nova permissão", + "New group": "Novo grupo", + "Users groups": "Grupos de usuários", + "Choose the module": "Escolha o módulo", + "Choose the actions": "Escolhe as ações", + "Choose the users": "Escolha os usuários", + "Choose the groups": "Escolha os grupos", + "Choose groups": "Escolha grupos", + "Allow": "Permitir", + "Invitation Status": "Status do convite", + "Permission": "Permissão", + "data successfully imported": "dados importados com sucesso", + "Show result": "Mostrar resultado", + "Importing": "Importando", + "data": "dados", + "errors acquired": "erros adquiridos", + "There are": "Há", + "Continue": "Continuar", + "Create brand": "Criar marca", + "Create your first live chat and in-app messaging Stay up to date with every single customer feedback for more meaningful interactions": "Crie seu primeiro bate-papo ao vivo e mensagens no aplicativo. Mantenha-se atualizado com cada feedback do cliente para interações mais significativas.", + "A channel gives a full view of all the brands and its applications all in one place You can see all in-coming messages in your team inbox": "Um canal oferece uma visão completa de todas as marcas e suas aplicações em um só lugar. Você pode ver todas as mensagens recebidas na caixa de entrada de sua equipe.", + "Hooray and Congratulations! You've completed the initial setup!": "Parabéns!!!!! Você concluiu a configuração inicial!", + "Paste the code below before the body tag on every page you want erxes chat to appear": "Cole o código abaixo antes da tag em todas as páginas que você deseja que o chat apareça.", + "Paste the code below before the body tag on every page you want erxes lead to appear": "Cole o código abaixo antes da tag body em todas as páginas que você deseja que o lead apareça", + "If your flow type is embedded paste the code below additionally that you want erxes lead to appear": "Se o seu tipo de fluxo estiver incorporado, cole o código abaixo adicionalmente que você deseja que o lead apareça", + "If your flow type is popup paste the code below additionally in your button": "Se o seu tipo de fluxo for pop-up, cole o código abaixo adicionalmente no seu botão", + "Choose messengers": "Escolha mensageiros", + "erxes allows you to create multiple messengers": "permite que você crie vários mensageiros", + "erxes allows you to create multiple brands": "permite criar várias marcas", + "erxes allows you to create multiple channels": "permite criar vários canais", + "Contacts": "Contatos", + "Create group": "Criar grupo", + "Visitors": "Visitantes", + "Due in the next day": "Prazo no dia seguinte", + "Due in the next week": "Prazo na próxima semana", + "Due in the next month": "Prazo no próximo mês", + "Has no close date": "Não tem data de fechamento", + "Over due": "Atrasado", + "Clear Filter": "Limpar Filtro", + "Remove this filter": "Remover este filtro", + "Filtering is on": "A filtragem está ativada", + "Choose products": "Escolha os produtos", + "Choose companies": "Escolha as empresas", + "Choose customers": "Escolha os clientes", + "Choose team members": "Escolha os membros da equipe", "erxes Inc": "erxes Inc", - "Get": "Get", - "Download ios app for free on the App Store": "Download ios app for free on the App Store.", - "Download android app for free on the Google play": "Download android app for free on the Google play.", - "Please upgrade your browser to use erxes!": "Please upgrade your browser to use erxes!", - "Unfortunately, You are running on a browser that may not be fully compatible with erxes": "Unfortunately, You are running on a browser that may not be fully compatible with erxes.", - "Please use recommended version": "Please use recommended version", - "Messenger data": "Messenger data", - "Customer field data": "Customer field data", - "Others": "Others", - "Select brand": "Select brand", - "There is no permissions in this group": "There is no permissions in this group.", - "There is no group": "There is no group.", - "User groups": "User groups", - "What action can do": "What action can do", - "Who can": "Who can", - "Grant permission": "Grant permission", - "Check if permission is allowed": "Check if permission is allowed", - "Then": "Then", - "Or": "Or", - "Auto message description": "Send targeted email and chat to logged-in users based on their brand/tag/segment. You can set your time to send an email or chat in advance. Chat design can be snipped, badge and full message and it can be a text or video.", - "Manual message description": "Send targeted email and chat to logged-in users based on their brand/tag/segment. An email or chat will be sent out immediately after you click save button. Chat design can be snipped, badge and full message and it can be a text or video.", - "Visitor auto message description": "Send targeted chats to logged-out visitors on website based on their visiting page, activity, their country of residence and city. Chat design can be snipped, badge and full message and it can be a text or video.", - "Required field": "Required field!", - "Invalid email format! Please enter a valid email address": "Invalid email format! Please enter a valid email address.", - "Invalid link": "Invalid link!", - "Maximum length is": "Maximum length is", - "characters": "characters!", - "Invalid number format! Please enter a valid number": "Invalid number format! Please enter a valid number.", - "Insert email template to content": "Insert email template to content", + "Get": "Obter", + "Download ios app for free on the App Store": "Baixe o aplicativo ios gratuitamente na App Store.", + "Download android app for free on the Google play": "Baixe o aplicativo Android gratuitamente no Google play.", + "Please upgrade your browser to use erxes!": "Atualize seu navegador", + "Unfortunately, You are running on a browser that may not be fully compatible with erxes": "Infelizmente, você está executando em um navegador que pode não ser totalmente compatível.", + "Please use recommended version": "Use a versão recomendada", + "Messenger data": "Dados do mensageiro", + "Customer field data": "Dados do campo do cliente", + "Others": "Outros", + "Select brand": "Selecionar marca", + "There is no permissions in this group": "Não há permissões neste grupo.", + "There is no group": "Não há grupo.", + "User groups": "Grupos de usuários", + "What action can do": "Que ação pode fazer", + "Who can": "Quem pode", + "Grant permission": "Conceder permissão", + "Check if permission is allowed": "Verifique se a permissão é permitida", + "Then": "Então", + "Or": "Ou", + "Auto message description": "Envie e-mail e bate-papo direcionados para usuários logados com base em sua marca/tag/segmento. Você pode definir seu horário para enviar um e-mail ou conversar com antecedência. O design do chat pode ser recorte, crachá e mensagem completa e pode ser um texto ou vídeo.", + "Manual message description": "Envie e-mail e bate-papo direcionados para usuários logados com base em sua marca/tag/segmento. Um e-mail ou bate-papo será enviado imediatamente após você clicar no botão Salvar. O design do chat pode ser recorte, crachá e mensagem completa e pode ser um texto ou vídeo.", + "Visitor auto message description": "Envie bate-papos direcionados para visitantes desconectados no site com base em sua página de visita, atividade, país de residência e cidade. O design do chat pode ser recorte, crachá e mensagem completa e pode ser um texto ou vídeo.", + "Required field": "Campo obrigatório!", + "Invalid email format! Please enter a valid email address": "Formato de email inválido! Por favor insira um endereço de e-mail válido.", + "Invalid link": "Link inválido!", + "Maximum length is": "O comprimento máximo é", + "characters": "caracteres", + "Invalid number format! Please enter a valid number": "Formato de número inválido! por favor insira um número válido.", + "Insert email template to content": "Inserir modelo de e-mail no conteúdo", "Logs": "Logs", - "There are no logs recorded": "There are no logs recorded", - "Module": "Module", - "Unchanged fields": "Unchanged fields", - "Changed fields": "Changed fields", - "Create": "Create", - "Update": "Update", - "Changes": "Changes", - "Choose start date": "Choose start date", - "Choose end date": "Choose end date", - "Permission denied": "Permission denied", - "Old data": "Old data", - "New data": "New data", - "Archive": "Archive", - "NetworkError": "Attempting to restore connection. Changes made now may not be saved.", - "Email add account description question": "Are you connecting a shared email account?", - "Email add account description": "When you connect an email to your conversations inbox, you're connecting it as a shared account. Messages sent to shared accounts can be viewed by everyone who has access to your team inbox.", - "No connected email": "No connected email", - "Your email will be sent with Erxes email template": "Your email will be sent with Erxes email template" + "There are no logs recorded": "Não há logs registrados", + "Module": "Módulo", + "Unchanged fields": "Campos inalterados", + "Changed fields": "Campos alterados", + "Create": "Criar", + "Update": "Atualizar", + "Changes": "Mudanças", + "Choose start date": "Escolha a data de início", + "Choose end date": "Escolha a data final", + "Permission denied": "Permissão negada", + "Old data": "Dados antigos", + "New data": "Novos dados", + "Archive": "Arquivo", + "NetworkError": "Erro de Conexão", + "Email add account description question": "E-mail adicionar pergunta de descrição da conta", + "Email add account description": "E-mail adicionar descrição da conta", + "No connected email": "Nenhum email conectado", + "Your email will be sent with Erxes email template": "Seu e-mail será enviado com o modelo de e-mail padrão" } diff --git a/ui/src/locales/ru.json b/ui/src/locales/ru.json index d208023d10a..204cdb53971 100644 --- a/ui/src/locales/ru.json +++ b/ui/src/locales/ru.json @@ -278,7 +278,7 @@ "Sub segment of": "Суб сегмент", "Color": "цвет", "Filters": "фильтры", - "User(s) will recieve this message": "Пользователь (ы) Получать это сообщение", + "User(s) will receive this message": "Пользователь (ы) Получать это сообщение", "Color code": "Цветовой код", "Engage Message": "Engage сообщение", "Item counts": "количество элементов", diff --git a/ui/src/locales/sq.json b/ui/src/locales/sq.json index 3e91f8f7dcb..d190b3c2fdd 100644 --- a/ui/src/locales/sq.json +++ b/ui/src/locales/sq.json @@ -287,7 +287,7 @@ "Sub segment of": "Nënseksioni i", "Color": "Ngjyrë", "Filters": "Filters", - "User(s) will recieve this message": "Përdoruesi (et) do të marrin këtë mesazh", + "User(s) will receive this message": "Përdoruesi (et) do të marrin këtë mesazh", "Color code": "Kodi i ngjyrave", "Engage Message": "Angazhoni mesazhin", "Item counts": "Numrat e sendeve", diff --git a/ui/src/locales/ta.json b/ui/src/locales/ta.json index 4d4b3b2cad5..dc230b3b5a8 100644 --- a/ui/src/locales/ta.json +++ b/ui/src/locales/ta.json @@ -287,7 +287,7 @@ "Sub segment of": "இன் துணை பிரிவு", "Color": "நிறம்", "Filters": "வடிகட்டிகள்", - "User(s) will recieve this message": "பயனர் (கள்) இந்த செய்தியைப் பெறுவார்கள்", + "User(s) will receive this message": "பயனர் (கள்) இந்த செய்தியைப் பெறுவார்கள்", "Color code": "வண்ண குறியீடு", "Engage Message": "செய்தியில் ஈடுபடுங்கள்", "Item counts": "உருப்படி எண்ணிக்கை", diff --git a/ui/src/locales/te.json b/ui/src/locales/te.json index 0bda4c334ae..afdf1567cf3 100644 --- a/ui/src/locales/te.json +++ b/ui/src/locales/te.json @@ -287,7 +287,7 @@ "Sub segment of": "యొక్క ఉప విభాగం", "Color": "రంగు", "Filters": "వడపోతలు", - "User(s) will recieve this message": "వినియోగదారు (లు) ఈ సందేశాన్ని స్వీకరిస్తారు", + "User(s) will receive this message": "వినియోగదారు (లు) ఈ సందేశాన్ని స్వీకరిస్తారు", "Color code": "రంగు కోడ్", "Engage Message": "సందేశంలో పాల్గొనండి", "Item counts": "అంశం గణనలు", diff --git a/ui/src/locales/tr_TR.json b/ui/src/locales/tr_TR.json index f9a83b6eedf..2db8a7ef729 100644 --- a/ui/src/locales/tr_TR.json +++ b/ui/src/locales/tr_TR.json @@ -287,7 +287,7 @@ "Sub segment of": "Alt bölümü", "Color": "Renk", "Filters": "Filtreler", - "User(s) will recieve this message": "Kullanıcılar bu mesajı alacak", + "User(s) will receive this message": "Kullanıcılar bu mesajı alacak", "Color code": "Renk kodu", "Engage Message": "İletiyi meşgul et", "Item counts": "Ürün sayıları", diff --git a/ui/src/locales/uk_UA.json b/ui/src/locales/uk_UA.json index 2240a9c45f1..41ebde394ab 100644 --- a/ui/src/locales/uk_UA.json +++ b/ui/src/locales/uk_UA.json @@ -287,7 +287,7 @@ "Sub segment of": "Підсегмент", "Color": "Колір", "Filters": "Фільтри", - "User(s) will recieve this message": "Користувач (и) отримає це повідомлення", + "User(s) will receive this message": "Користувач (и) отримає це повідомлення", "Color code": "Код кольору", "Engage Message": "Залучити повідомлення", "Item counts": "Кількість елементів", diff --git a/ui/src/locales/ur_PK.json b/ui/src/locales/ur_PK.json index e661141352f..1c7a4c5d526 100644 --- a/ui/src/locales/ur_PK.json +++ b/ui/src/locales/ur_PK.json @@ -287,7 +287,7 @@ "Sub segment of": "کا ذیلی طبقہ", "Color": "رنگ", "Filters": "فلٹرز", - "User(s) will recieve this message": "صارف (پیغامات) اس پیغام کو حاصل کریں گے", + "User(s) will receive this message": "صارف (پیغامات) اس پیغام کو حاصل کریں گے", "Color code": "رنگین کوڈ", "Engage Message": "مشغول پیغام", "Item counts": "آئٹم گنتی", diff --git a/ui/src/locales/vi.json b/ui/src/locales/vi.json index 49da58ac5a3..4d09f2d97e7 100644 --- a/ui/src/locales/vi.json +++ b/ui/src/locales/vi.json @@ -279,7 +279,7 @@ "Sub segment of": "phân khúc sub của", "Color": "Màu", "Filters": "bộ lọc", - "User(s) will recieve this message": "Người dùng (s) sẽ nhận được thông điệp này", + "User(s) will receive this message": "Người dùng (s) sẽ nhận được thông điệp này", "Color code": "mã màu", "Engage Message": "tham gia nhắn", "Item counts": "số lượng mục", diff --git a/ui/src/locales/yi.json b/ui/src/locales/yi.json index 4bc843b69e3..51261a4ab2a 100644 --- a/ui/src/locales/yi.json +++ b/ui/src/locales/yi.json @@ -279,7 +279,7 @@ "Sub segment of": "Sub segmen", "Color": "Warna", "Filters": "filter", - "User(s) will recieve this message": "Pengguna (s) akan menerima pesan ini", + "User(s) will receive this message": "Pengguna (s) akan menerima pesan ini", "Color code": "Kode warna", "Engage Message": "terlibat Pesan", "Item counts": "jumlah item", diff --git a/ui/src/locales/zh-cn.json b/ui/src/locales/zh-cn.json index 0111e52d22f..2bf5b9cb1c1 100644 --- a/ui/src/locales/zh-cn.json +++ b/ui/src/locales/zh-cn.json @@ -278,7 +278,7 @@ "Sub segment of": "子段", "Color": "颜色", "Filters": "过滤器", - "User(s) will recieve this message": "(多个)用户将收到此消息", + "User(s) will receive this message": "(多个)用户将收到此消息", "Color code": "色标", "Engage Message": "从事信息", "Item counts": "项目计数", diff --git a/ui/src/locales/zh_CN.json b/ui/src/locales/zh_CN.json index 1355042494b..40810c4e36a 100644 --- a/ui/src/locales/zh_CN.json +++ b/ui/src/locales/zh_CN.json @@ -287,7 +287,7 @@ "Sub segment of": "子段", "Color": "颜色", "Filters": "过滤器", - "User(s) will recieve this message": "(多个)用户将收到此消息", + "User(s) will receive this message": "(多个)用户将收到此消息", "Color code": "色标", "Engage Message": "从事信息", "Item counts": "项目计数", diff --git a/ui/src/modules/activityLogs/components/ActivityList.tsx b/ui/src/modules/activityLogs/components/ActivityList.tsx index 8c18a0d6f9c..3928c8f3689 100644 --- a/ui/src/modules/activityLogs/components/ActivityList.tsx +++ b/ui/src/modules/activityLogs/components/ActivityList.tsx @@ -65,7 +65,7 @@ class ActivityList extends React.Component { if (!activities || activities.length < 1) { return ( ); diff --git a/ui/src/modules/activityLogs/components/ActivityLogs.tsx b/ui/src/modules/activityLogs/components/ActivityLogs.tsx index e518da3a919..ecfbb51af4c 100644 --- a/ui/src/modules/activityLogs/components/ActivityLogs.tsx +++ b/ui/src/modules/activityLogs/components/ActivityLogs.tsx @@ -57,7 +57,7 @@ class ActivityLogs extends React.PureComponent { type={currentTab} /> } - emptyText="No Activities" + emptyText={__("No Activities")} emptyImage="/images/actions/19.svg" /> diff --git a/ui/src/modules/activityLogs/components/items/Conversation.tsx b/ui/src/modules/activityLogs/components/items/Conversation.tsx index fce2b0f902b..fc1ada23046 100644 --- a/ui/src/modules/activityLogs/components/items/Conversation.tsx +++ b/ui/src/modules/activityLogs/components/items/Conversation.tsx @@ -107,6 +107,7 @@ class Conversation extends React.Component { rows.push( { customer = comments.length > 0 ? comments[0].customer : customer; } - return ( - - {renderFullName(customer)} {action}  + return + {renderFullName(customer)} {__(action)}  - {kind} + {__(kind)} -  {item} - - ); +  {__(item)} + ; } renderContent() { diff --git a/ui/src/modules/activityLogs/components/items/ConvertLog.tsx b/ui/src/modules/activityLogs/components/items/ConvertLog.tsx index 7b6a01527d9..71f9167e777 100644 --- a/ui/src/modules/activityLogs/components/items/ConvertLog.tsx +++ b/ui/src/modules/activityLogs/components/items/ConvertLog.tsx @@ -24,7 +24,7 @@ class ConvertLog extends React.Component { createdByDetail } = activity; - let userName = 'Unknown'; + let userName = __('Unknown'); if (createdByDetail && createdByDetail.type === 'user') { userName = renderUserFullName(createdByDetail.content); @@ -32,7 +32,7 @@ class ConvertLog extends React.Component { const conversation = ( - conversation + {__("conversation")} ); diff --git a/ui/src/modules/activityLogs/components/items/InternalNote.tsx b/ui/src/modules/activityLogs/components/items/InternalNote.tsx index d25c3576be2..d6c5d77a9b6 100644 --- a/ui/src/modules/activityLogs/components/items/InternalNote.tsx +++ b/ui/src/modules/activityLogs/components/items/InternalNote.tsx @@ -9,7 +9,7 @@ import { } from 'modules/activityLogs/styles'; import { IUser } from 'modules/auth/types'; import Tip from 'modules/common/components/Tip'; -import { renderUserFullName } from 'modules/common/utils'; +import { renderUserFullName, __ } from 'modules/common/utils'; import Form from 'modules/internalNotes/components/Form'; import { IInternalNote } from 'modules/internalNotes/types'; import React from 'react'; @@ -41,7 +41,7 @@ class InternalNote extends React.Component { const { internalNote } = this.props; const { createdUser } = internalNote; - let userName = 'Unknown'; + let userName = __('Unknown'); if (createdUser.details) { userName = renderUserFullName(createdUser); @@ -49,7 +49,7 @@ class InternalNote extends React.Component { return ( - {userName} left a note + {userName} {__("left a note")} ); }; diff --git a/ui/src/modules/activityLogs/components/items/MergedLog.tsx b/ui/src/modules/activityLogs/components/items/MergedLog.tsx index 96917d22563..059cb1c93a9 100644 --- a/ui/src/modules/activityLogs/components/items/MergedLog.tsx +++ b/ui/src/modules/activityLogs/components/items/MergedLog.tsx @@ -24,12 +24,12 @@ class MergedLog extends React.Component { return {userName}; } - return System; + return {__("System")}; }; renderContent = () => { const { contentType, contentDetail } = this.props.activity; - const type = contentType.includes('customer') ? 'customers' : 'companies'; + const type = contentType.includes('customer') ? __('customers') : __('companies'); return ( <> diff --git a/ui/src/modules/activityLogs/components/items/SegmentLog.tsx b/ui/src/modules/activityLogs/components/items/SegmentLog.tsx index 3b6d5991c6c..1c554955ae4 100644 --- a/ui/src/modules/activityLogs/components/items/SegmentLog.tsx +++ b/ui/src/modules/activityLogs/components/items/SegmentLog.tsx @@ -6,6 +6,7 @@ import { } from 'modules/activityLogs/styles'; import { IActivityLog } from 'modules/activityLogs/types'; import Tip from 'modules/common/components/Tip'; +import { __ } from 'modules/common/utils'; import React from 'react'; type Props = { @@ -19,7 +20,7 @@ class SegmentLog extends React.Component { return ( - This {contentType} joined a {content.content} segment + {__("This")} {contentType} {__("joined a")} {content.content} {__("segment")} ); }; diff --git a/ui/src/modules/activityLogs/components/items/boardItems/AssigneeLog.tsx b/ui/src/modules/activityLogs/components/items/boardItems/AssigneeLog.tsx index 3b68d17d075..9d1c3480b5d 100644 --- a/ui/src/modules/activityLogs/components/items/boardItems/AssigneeLog.tsx +++ b/ui/src/modules/activityLogs/components/items/boardItems/AssigneeLog.tsx @@ -6,7 +6,7 @@ import { } from 'modules/activityLogs/styles'; import { IActivityLog } from 'modules/activityLogs/types'; import Tip from 'modules/common/components/Tip'; -import { renderUserFullName } from 'modules/common/utils'; +import { renderUserFullName, __ } from 'modules/common/utils'; import React from 'react'; import { Link } from 'react-router-dom'; @@ -58,7 +58,7 @@ class AssigneeLog extends React.Component { if (addedUserNames.length > 0 && removedUserNames.length === 0) { return ( - {userName} assigned + {userName} {__("assigned")} {addedUserNames} ); @@ -67,7 +67,7 @@ class AssigneeLog extends React.Component { if (removedUserNames && !addedUserNames) { return ( - {userName} removed assignee of + {userName} {__("removed assignee of")} {removedUserNames} ); @@ -75,7 +75,7 @@ class AssigneeLog extends React.Component { return ( - {userName} removed assignee of + {userName} {__("removed assignee of")} {removedUserNames} ); diff --git a/ui/src/modules/activityLogs/components/items/boardItems/MovementLog.tsx b/ui/src/modules/activityLogs/components/items/boardItems/MovementLog.tsx index a74c6e5fe0a..fbf8d7cfeec 100644 --- a/ui/src/modules/activityLogs/components/items/boardItems/MovementLog.tsx +++ b/ui/src/modules/activityLogs/components/items/boardItems/MovementLog.tsx @@ -6,7 +6,7 @@ import { } from 'modules/activityLogs/styles'; import { IActivityLog } from 'modules/activityLogs/types'; import Tip from 'modules/common/components/Tip'; -import { renderUserFullName } from 'modules/common/utils'; +import { renderUserFullName, __ } from 'modules/common/utils'; import React from 'react'; import { Link } from 'react-router-dom'; @@ -34,7 +34,7 @@ class MovementLog extends React.Component { return ( - {userName} moved  + {userName} {__("moved")}  { {item.name}   - {contentType} from  + {contentType} {__("from")}  {oldStage} to {destinationStage} ); diff --git a/ui/src/modules/activityLogs/components/items/boardItems/Task.tsx b/ui/src/modules/activityLogs/components/items/boardItems/Task.tsx index babda114ee9..9688141bfd3 100644 --- a/ui/src/modules/activityLogs/components/items/boardItems/Task.tsx +++ b/ui/src/modules/activityLogs/components/items/boardItems/Task.tsx @@ -113,7 +113,7 @@ class Task extends React.Component { size="small" onClick={this.onChange.bind(this, 'editing')} > - Cancel + {__("Cancel")} ); @@ -147,7 +147,7 @@ class Task extends React.Component { - Set reminder + {__("Set reminder")} { onSelect={onSelect} customOption={{ value: '', - label: 'Assigned to no one' + label: __('Assigned to no one') }} /> { onSelect={onSelect} filterParams={{ pipelineId: queryParams.pipelineId }} multi={true} - customOption={{ value: '', label: 'No label chosen' }} + customOption={{ value: '', label: __('No label chosen') }} /> {extraFilter} diff --git a/ui/src/modules/boards/components/editForm/CloseDate.tsx b/ui/src/modules/boards/components/editForm/CloseDate.tsx index 2d15edc048a..194c15ca355 100644 --- a/ui/src/modules/boards/components/editForm/CloseDate.tsx +++ b/ui/src/modules/boards/components/editForm/CloseDate.tsx @@ -17,6 +17,8 @@ import Popover from 'react-bootstrap/Popover'; import Select from 'react-select-plus'; import { generateButtonClass, selectOptions } from '../../utils'; +import { __ } from 'modules/common/utils'; + type Props = { closeDate: Date; isComplete: boolean; @@ -98,7 +100,7 @@ class CloseDate extends React.Component { { onChange={this.minuteOnChange} options={selectOptions(REMINDER_MINUTES)} clearable={false} + placeholder={__("Select")} /> @@ -146,7 +149,7 @@ class CloseDate extends React.Component { ); diff --git a/ui/src/modules/boards/components/editForm/EditForm.tsx b/ui/src/modules/boards/components/editForm/EditForm.tsx index 6b99648c90c..cad3d913c4d 100644 --- a/ui/src/modules/boards/components/editForm/EditForm.tsx +++ b/ui/src/modules/boards/components/editForm/EditForm.tsx @@ -93,7 +93,7 @@ class EditForm extends React.Component { return ( - {__('This card is archived.')} + {__('This card is archived')}. ); } diff --git a/ui/src/modules/boards/components/editForm/PriorityIndicator.tsx b/ui/src/modules/boards/components/editForm/PriorityIndicator.tsx index 4ebcf3b61f4..9e0270c607f 100644 --- a/ui/src/modules/boards/components/editForm/PriorityIndicator.tsx +++ b/ui/src/modules/boards/components/editForm/PriorityIndicator.tsx @@ -4,6 +4,8 @@ import React from 'react'; import styled from 'styled-components'; import styledTS from 'styled-components-ts'; +import { __ } from 'modules/common/utils'; + const Indicator = styled(ItemIndicator)` margin: 0 5px 0 0; `; @@ -47,7 +49,7 @@ export default (props: IProps) => { if (props.isFullBackground) { return ( - {props.value} + {__(props.value)} ); } diff --git a/ui/src/modules/boards/components/editForm/Sidebar.tsx b/ui/src/modules/boards/components/editForm/Sidebar.tsx index aa2923e7fdb..174b6c786b5 100644 --- a/ui/src/modules/boards/components/editForm/Sidebar.tsx +++ b/ui/src/modules/boards/components/editForm/Sidebar.tsx @@ -1,5 +1,6 @@ import FormGroup from 'modules/common/components/form/Group'; import ControlLabel from 'modules/common/components/form/Label'; +import { __ } from 'modules/common/utils'; import SelectTeamMembers from 'modules/settings/team/containers/SelectTeamMembers'; import React from 'react'; import { RightContent } from '../../styles/item'; @@ -28,7 +29,7 @@ class Sidebar extends React.Component { Assigned to { icon="checked-1" type="submit" > - Save + {__("Save")} diff --git a/ui/src/modules/boards/components/portable/Items.tsx b/ui/src/modules/boards/components/portable/Items.tsx index f4c3b423992..983ae3e76c5 100644 --- a/ui/src/modules/boards/components/portable/Items.tsx +++ b/ui/src/modules/boards/components/portable/Items.tsx @@ -86,7 +86,7 @@ class Items extends React.Component { const relTrigger = ( - {__('See related ' + data.options.title + '..')} + {__(`See related ${data.options.title}`)}.. ); diff --git a/ui/src/modules/boards/components/stage/AddForm.tsx b/ui/src/modules/boards/components/stage/AddForm.tsx index d54bd104275..26534fbdbef 100644 --- a/ui/src/modules/boards/components/stage/AddForm.tsx +++ b/ui/src/modules/boards/components/stage/AddForm.tsx @@ -6,6 +6,8 @@ import React from 'react'; import { FormFooter, HeaderContent, HeaderRow } from '../../styles/item'; import { invalidateCache } from '../../utils'; +import { __ } from "modules/common/utils"; + type Props = { add: (name: string, callback: () => void) => void; closeModal: () => void; @@ -78,7 +80,7 @@ class AddForm extends React.Component { icon="checked-1" type="submit" > - Save + {__("Save")} diff --git a/ui/src/modules/boards/components/stage/Stage.tsx b/ui/src/modules/boards/components/stage/Stage.tsx index 29d93ed0e38..05fc5359ff3 100644 --- a/ui/src/modules/boards/components/stage/Stage.tsx +++ b/ui/src/modules/boards/components/stage/Stage.tsx @@ -191,13 +191,13 @@ export default class Stage extends React.Component {
  • - Archive All Cards in This List + {__('Archive All Cards in This List')}
  • - Archive This List + {__('Archive This List')}
  • - Remove stage + {__('Remove stage')}
  • diff --git a/ui/src/modules/boards/constants.ts b/ui/src/modules/boards/constants.ts index bb3b1054ae5..1b0d7ec641e 100644 --- a/ui/src/modules/boards/constants.ts +++ b/ui/src/modules/boards/constants.ts @@ -53,7 +53,7 @@ export const EMPTY_CONTENT_DEAL = { steps: [ { title: "Create Boards and Pipelines", - description: "Track your entire sales pipeline from one dashboard. You can also restrict access to your sales pipelines.", + description: "Track your entire sales pipeline from one dashboard. You can also restrict access to your sales pipelines", url: "/settings/boards/deal", urlText: "Go to Board & Pipeline" }, @@ -71,13 +71,13 @@ export const EMPTY_CONTENT_TASK = { steps: [ { title: "Create your first Task Board", - description: "Tip: This could be equivalent to your brands or you can organize by year/project/etc.", + description: "Tip: This could be equivalent to your brands or you can organize by year/project/etc", url: "/settings/boards/task", urlText: "Go to Board & Pipeline" }, { title: "Tip: Filter", - description: "Click on “Show Menu” to filter tasks by assigned team members, customers, date, etc.", + description: "Click on “Show Menu” to filter tasks by assigned team members, customers, date, etc", icon: "lightbulb-alt" }, ] diff --git a/ui/src/modules/boards/containers/ArchivedItems.tsx b/ui/src/modules/boards/containers/ArchivedItems.tsx index 6d251222b15..313710c49b0 100644 --- a/ui/src/modules/boards/containers/ArchivedItems.tsx +++ b/ui/src/modules/boards/containers/ArchivedItems.tsx @@ -14,6 +14,8 @@ import ArchivedItems from '../components/ArchivedItems'; import { mutations, queries } from '../graphql'; import { IItemParams, IOptions, RemoveMutation, SaveMutation } from '../types'; +import { __ } from 'modules/common/utils'; + type IProps = { options: IOptions; type: string; @@ -84,7 +86,9 @@ class ArchivedItemsContainer extends React.Component { variables: { _id: item._id } }) .then(() => { - Alert.success(`You successfully deleted a ${options.type}`); + Alert.success( + `${__('You successfully deleted a')} ${options.type}` + ); archivedItemsQuery.refetch(); }) diff --git a/ui/src/modules/boards/containers/Stage.tsx b/ui/src/modules/boards/containers/Stage.tsx index 3d84cdd260f..0133206cc1b 100644 --- a/ui/src/modules/boards/containers/Stage.tsx +++ b/ui/src/modules/boards/containers/Stage.tsx @@ -17,6 +17,8 @@ import { SaveItemMutation } from '../types'; +import { __ } from 'modules/common/utils'; + type StageProps = { stage: IStage; index: number; @@ -88,8 +90,9 @@ class StageContainer extends React.PureComponent { removeStage = (id: string) => { const { removeStageMutation, refetchStages, stage } = this.props; - const message = - 'This will permanently delete any items related to this stage. Are you absolutely sure?'; + const message = `${__( + 'This will permanently delete any items related to this stage' + )}. ${__('Are you absolutely sure?')}`; confirm(message, { hasDeleteConfirm: true }) .then(() => { @@ -130,7 +133,7 @@ class StageContainer extends React.PureComponent { ] }) .then(() => { - Alert.success('Archive Items has been archived.'); + Alert.success(`${'Archive Items has been archived'}.`); onLoad(stageId, []); }) @@ -144,8 +147,10 @@ class StageContainer extends React.PureComponent { const { stage, refetchStages, options } = this.props; const message = ` - This will remove list from the board. To view archived list and bring them back to the board, click “Menu” > “Archived Items”. - Are you sure? + ${__('This will remove list from the board')}. ${__( + 'To view archived list and bring them back to the board, click “Menu” > “Archived Items”' + )}. + ${__('Are you sure?')} `; confirm(message).then(() => { @@ -159,7 +164,7 @@ class StageContainer extends React.PureComponent { } }) .then(() => { - Alert.success('Archive List has been archived.'); + Alert.success(`${__("Archive List has been archived")}.`); refetchStages({ pipelineId: stage.pipelineId }); }) diff --git a/ui/src/modules/boards/containers/label/Form.tsx b/ui/src/modules/boards/containers/label/Form.tsx index 23a9454f5f9..13ac5707ba7 100644 --- a/ui/src/modules/boards/containers/label/Form.tsx +++ b/ui/src/modules/boards/containers/label/Form.tsx @@ -13,6 +13,8 @@ import { RemovePipelineLabelMutationResponse } from '../../types'; +import { __ } from 'modules/common/utils'; + type Props = { pipelineId: string; afterSave: () => void; @@ -53,7 +55,7 @@ class FormContainer extends React.Component { const remove = (pipelineLabelId: string) => { toggleConfirm(() => { - confirm('Are you sure? This cannot be undone.', { + confirm(`${__('Are you sure? This cannot be undone')}.`, { beforeDismiss: () => { toggleConfirm(); } @@ -62,7 +64,7 @@ class FormContainer extends React.Component { variables: { _id: pipelineLabelId } }) .then(() => { - Alert.success('You successfully deleted a label.'); + Alert.success('You successfully deleted a label'); if (selectedLabelIds.includes(pipelineLabelId)) { const remained = selectedLabelIds.filter( @@ -104,9 +106,11 @@ class FormContainer extends React.Component { type="submit" btnSize="small" block={!this.props.labelId && true} - successMessage={`You successfully ${ - object && object._id ? 'updated' : 'added' - } a ${name}`} + successMessage={__( + `You successfully ${ + object && object._id ? 'updated' : 'added' + } a ${name}` + )} /> ); }; diff --git a/ui/src/modules/boards/utils.tsx b/ui/src/modules/boards/utils.tsx index e8fd4618868..0c2528e7772 100644 --- a/ui/src/modules/boards/utils.tsx +++ b/ui/src/modules/boards/utils.tsx @@ -3,6 +3,7 @@ import { STORAGE_PIPELINE_KEY } from 'modules/boards/constants'; import { Amount } from 'modules/boards/styles/stage'; +import { __ } from 'modules/common/utils'; import React from 'react'; import PriorityIndicator from './components/editForm/PriorityIndicator'; import { IDraggableLocation, IItem, IItemMap } from './types'; @@ -17,7 +18,7 @@ type Options = { // get options for react-select-plus export function selectOptions(array: Options[] = []) { - return array.map(item => ({ value: item._id, label: item.name })); + return array.map(item => ({ value: item._id, label: __(item.name ? item.name : "") })); } export function collectOrders(array: Options[] = []) { diff --git a/ui/src/modules/checklists/components/AddForm.tsx b/ui/src/modules/checklists/components/AddForm.tsx index b9d34d9c195..2d0e24242c5 100644 --- a/ui/src/modules/checklists/components/AddForm.tsx +++ b/ui/src/modules/checklists/components/AddForm.tsx @@ -6,6 +6,8 @@ import ControlLabel from 'modules/common/components/form/Label'; import { IButtonMutateProps, IFormProps } from 'modules/common/types'; import * as React from 'react'; +import { __ } from 'modules/common/utils'; + type IProps = { itemId: string; type: string; @@ -69,7 +71,7 @@ class AddForm extends React.Component { autoFocus={true} onChange={this.onChangeTitle} value={this.state.title} - placeholder="Checklist" + placeholder={__('Checklist')} onFocus={this.handleFocus} name="title" required={true} diff --git a/ui/src/modules/checklists/components/Item.tsx b/ui/src/modules/checklists/components/Item.tsx index 6beb7382d4c..ce52fd84136 100644 --- a/ui/src/modules/checklists/components/Item.tsx +++ b/ui/src/modules/checklists/components/Item.tsx @@ -3,7 +3,7 @@ import Button from 'modules/common/components/Button'; import DropdownToggle from 'modules/common/components/DropdownToggle'; import { FormControl } from 'modules/common/components/form'; import Icon from 'modules/common/components/Icon'; -import { isEmptyContent } from 'modules/common/utils'; +import { isEmptyContent, __ } from 'modules/common/utils'; import React, { useEffect, useState } from 'react'; import Dropdown from 'react-bootstrap/Dropdown'; import xss from 'xss'; @@ -163,12 +163,12 @@ function Item(props: Props) {
  • - Convert to Card + {__("Convert to Card")}
  • - Delete + {__("Delete")}
  • diff --git a/ui/src/modules/common/components/Attachment.tsx b/ui/src/modules/common/components/Attachment.tsx index 0f44c25f4df..ff31fe45734 100644 --- a/ui/src/modules/common/components/Attachment.tsx +++ b/ui/src/modules/common/components/Attachment.tsx @@ -129,7 +129,7 @@ class Attachment extends React.Component { @@ -137,6 +137,16 @@ class Attachment extends React.Component { ); }; + renderAudioFile = attachment => { + return ( + + + + + ); + }; + onLoadImage = () => { const { scrollBottom } = this.props; @@ -193,6 +203,10 @@ class Attachment extends React.Component { case 'mp4': filePreview = this.renderVideoFile(attachment); break; + case 'mp3': + case 'ogg': + filePreview = this.renderAudioFile(attachment); + break; case 'zip': case 'csv': case 'doc': @@ -201,7 +215,6 @@ class Attachment extends React.Component { case 'avi': case 'txt': case 'rar': - case 'mp3': case 'pdf': case 'png': case 'xls': diff --git a/ui/src/modules/common/components/AutoCompletionSelect.tsx b/ui/src/modules/common/components/AutoCompletionSelect.tsx index 3447d5cbbb5..fcce54572ad 100644 --- a/ui/src/modules/common/components/AutoCompletionSelect.tsx +++ b/ui/src/modules/common/components/AutoCompletionSelect.tsx @@ -336,7 +336,7 @@ function AutoCompletionSelect({ function renderNoResult() { if (searchValue.length === 0) { - return "Type to search"; + return __("Type to search"); } return ( diff --git a/ui/src/modules/common/components/ButtonMutate.tsx b/ui/src/modules/common/components/ButtonMutate.tsx index a3bf6ddd6bd..11a73580b1b 100644 --- a/ui/src/modules/common/components/ButtonMutate.tsx +++ b/ui/src/modules/common/components/ButtonMutate.tsx @@ -125,7 +125,7 @@ class ButtonMutate extends React.Component { const { confirmationUpdate } = this.props; if (confirmationUpdate) { - return confirm('This will permanently update are you absolutely sure?', { + return confirm(__('This will permanently update are you absolutely sure?'), { hasUpdateConfirm: true }) .then(() => { diff --git a/ui/src/modules/common/components/Chip.tsx b/ui/src/modules/common/components/Chip.tsx index 6d91eff8017..02a3ff07f97 100644 --- a/ui/src/modules/common/components/Chip.tsx +++ b/ui/src/modules/common/components/Chip.tsx @@ -2,6 +2,7 @@ import React from 'react'; import styled from 'styled-components'; import styledTS from 'styled-components-ts'; import { colors } from '../styles'; +import { __ } from '../utils'; const closeSize = '20px'; const horizontalSpace = '10px'; @@ -57,11 +58,11 @@ function Chip(props: { frontContent?: React.ReactNode; }) { const { capitalize = false, onClick, children, frontContent } = props; - + console.log(children); return ( {frontContent && {frontContent}} - {children} + {__(`${children}`)} × ); diff --git a/ui/src/modules/common/components/ConfirmDialog.tsx b/ui/src/modules/common/components/ConfirmDialog.tsx index f6fe4c167f7..2ba79f200b7 100644 --- a/ui/src/modules/common/components/ConfirmDialog.tsx +++ b/ui/src/modules/common/components/ConfirmDialog.tsx @@ -157,15 +157,11 @@ class ConfirmDialog extends React.Component { return null; } - const label = hasDeleteConfirm ? ( - <> - Type delete in the filed below to confirm. - - ) : ( - <> - Type update in the filed below to confirm. - - ); + const label = hasDeleteConfirm ? <> + {__('Type')} delete {__('in the filed below to confirm')}. + : <> + {__('Type')} update {__('in the filed below to confirm')}. + ; return ( <> diff --git a/ui/src/modules/common/components/DataWithLoader.tsx b/ui/src/modules/common/components/DataWithLoader.tsx index cfec1a928d1..642159e745a 100644 --- a/ui/src/modules/common/components/DataWithLoader.tsx +++ b/ui/src/modules/common/components/DataWithLoader.tsx @@ -1,6 +1,7 @@ import EmptyState from 'modules/common/components/EmptyState'; import Spinner from 'modules/common/components/Spinner'; import React from 'react'; +import { __ } from 'modules/common/utils'; type Props = { data: any; @@ -47,7 +48,7 @@ class DataWithLoader extends React.Component { return ( { {__('Filter by date')}
    - Start Date + {__("Start Date")} {
    - End Date + {__("End Date")} { + return ( + + + + + ); + }; + const renderImagePreview = () => { return ( @@ -140,6 +150,10 @@ export default function FilePreview({ fileUrl, fileName }: Props) { case 'png': filePreview = renderImagePreview(); break; + case 'mp3': + case 'ogg': + filePreview = renderAudioFile(); + break; case 'zip': case 'csv': case 'doc': @@ -148,7 +162,6 @@ export default function FilePreview({ fileUrl, fileName }: Props) { case 'avi': case 'txt': case 'rar': - case 'mp3': case 'pdf': case 'xls': filePreview = renderFile(fileExtension); diff --git a/ui/src/modules/common/components/HeaderDescription.tsx b/ui/src/modules/common/components/HeaderDescription.tsx index 14295da14fa..cdd0494aabe 100644 --- a/ui/src/modules/common/components/HeaderDescription.tsx +++ b/ui/src/modules/common/components/HeaderDescription.tsx @@ -39,7 +39,7 @@ class HeaderDescription extends React.PureComponent {

    {__(title)}

    - {__(description)} + {description}
    ); diff --git a/ui/src/modules/common/components/IntegrationIcon.tsx b/ui/src/modules/common/components/IntegrationIcon.tsx index f1a69fc4505..8d6ffa04527 100644 --- a/ui/src/modules/common/components/IntegrationIcon.tsx +++ b/ui/src/modules/common/components/IntegrationIcon.tsx @@ -24,12 +24,13 @@ const RoundedBackground = styledTS<{ type: string; size?: number }>( (props.type === 'facebook-messenger' && colors.socialFacebookMessenger) || (props.type === 'gmail' && colors.socialGmail) || (props.type === 'whatsapp' && colors.socialWhatsApp) || + (props.type === 'whatspro' && colors.colorCoreLightGreen) || (props.type.includes('nylas') && colors.socialGmail) || (props.type.includes('telegram') && colors.socialTelegram) || (props.type.includes('viber') && colors.socialViber) || (props.type.includes('line') && colors.socialLine) || (props.type.includes('twilio') && colors.socialTwilio) || - colors.colorCoreRed}; + colors.colorCoreRed}; i { color: ${colors.colorWhite}; @@ -97,6 +98,10 @@ class IntegrationIcon extends React.PureComponent { case 'whatsapp': icon = 'whatsapp-fill'; break; + + case 'whatspro': + icon = 'whatsapp'; + break; default: icon = 'doc-text-inv-1'; } diff --git a/ui/src/modules/common/components/ModifiableList.tsx b/ui/src/modules/common/components/ModifiableList.tsx index 8c783a42f1d..fbec57df15e 100644 --- a/ui/src/modules/common/components/ModifiableList.tsx +++ b/ui/src/modules/common/components/ModifiableList.tsx @@ -137,7 +137,7 @@ class ModifiableList extends React.Component { icon="checked-1" onClick={this.handleSaveOption} > - Save + {__("Save")} diff --git a/ui/src/modules/common/components/Timer.tsx b/ui/src/modules/common/components/Timer.tsx index a743ec1320c..9965b78476f 100644 --- a/ui/src/modules/common/components/Timer.tsx +++ b/ui/src/modules/common/components/Timer.tsx @@ -2,7 +2,7 @@ import Box from 'modules/common/components/Box'; import React from 'react'; import styled, { css } from 'styled-components'; import styledTS from 'styled-components-ts'; -import { Alert } from '../utils'; +import { Alert, __ } from '../utils'; import Button from './Button'; import Tip from './Tip'; @@ -263,7 +263,7 @@ class TaskTimer extends React.Component { return ( - + {getSpentTime(timeSpent)} ); @@ -274,7 +274,7 @@ class TaskTimer extends React.Component { const isComplete = status === STATUS_TYPES.COMPLETED; return ( - + {this.renderTime()} {this.renderActions()} diff --git a/ui/src/modules/common/components/Tip.tsx b/ui/src/modules/common/components/Tip.tsx index fd76c8b28b4..ce759a12fcd 100755 --- a/ui/src/modules/common/components/Tip.tsx +++ b/ui/src/modules/common/components/Tip.tsx @@ -1,6 +1,7 @@ import React from 'react'; import OverlayTrigger from 'react-bootstrap/OverlayTrigger'; import Tooltip from 'react-bootstrap/Tooltip'; +import { __ } from '../utils'; type Props = { text?: string | React.ReactNode; @@ -24,7 +25,7 @@ type Props = { }; function Tip({ text, children, placement }: Props) { - const tooltip = {text}; + const tooltip = {__(`${text}`)}; const placementValue = placement || 'auto'; return ( diff --git a/ui/src/modules/common/components/empty/EmptyContent.tsx b/ui/src/modules/common/components/empty/EmptyContent.tsx index 1208755987c..ac0ca6bff82 100644 --- a/ui/src/modules/common/components/empty/EmptyContent.tsx +++ b/ui/src/modules/common/components/empty/EmptyContent.tsx @@ -32,15 +32,15 @@ function EmptyContent({ content, vertical, maxItemWidth }: Props) { return ( ); } return ( -

    {title}

    -

    {description} {url && {urlText}}

    +

    {__(title)}

    +

    {`${__(description)}.`} {url && {__(urlText)}}

    {steps.map((step, index) => ( {step.icon ? : {index + 1}}

    {__(step.title)}

    - {step.html ?

    :

    {__(step.description)}

    } + {step.html ?

    :

    {`${__(step.description)}.`}

    } {renderButton(step.url, step.urlText, step.isOutside, step.target)} diff --git a/ui/src/modules/common/components/filterableList/FilterableList.tsx b/ui/src/modules/common/components/filterableList/FilterableList.tsx index f25a6fd06a7..a292294c973 100755 --- a/ui/src/modules/common/components/filterableList/FilterableList.tsx +++ b/ui/src/modules/common/components/filterableList/FilterableList.tsx @@ -92,7 +92,7 @@ class FilterableList extends React.Component { if (items.length === 0) { return ( ); diff --git a/ui/src/modules/common/components/rule/ConditionsRule.tsx b/ui/src/modules/common/components/rule/ConditionsRule.tsx index b7dd1ff4e70..1d9525d9bde 100644 --- a/ui/src/modules/common/components/rule/ConditionsRule.tsx +++ b/ui/src/modules/common/components/rule/ConditionsRule.tsx @@ -11,6 +11,8 @@ import React from 'react'; import styled from 'styled-components'; import { IConditionsRule } from '../../types'; +import { __ } from 'modules/common/utils'; + const RuleDescription = styled.p` text-transform: initial; `; @@ -54,23 +56,39 @@ class ConditionsRule extends React.Component { let description; switch (rule.kind) { case 'browserLanguage': - description = - 'Recognizes which language is set for visitor’s browser. Insert only Language codes in value field as appointed in ISO-639, i.e “en” for English, “fr” for French, “de” for German etc.'; + description = `${__( + 'Recognizes which language is set for visitor’s browser' + )}. ${__( + 'Insert only Language codes in value field as appointed in ISO-639,' + )} i.e ${__( + '“en” for English, “fr” for French, “de” for German etc' + )} .`; break; case 'currentPageUrl': - description = - 'Write your desired page URL, excluding domain name. For example: If you want to place your engagement message on https://office.erxes.io/pricing - then write /pricing'; + description = `${__( + 'Write your desired page URL, excluding domain name' + )}. ${__( + 'For example: If you want to place your engagement message on' + )} https://office.erxes.io/pricing - ${__("then write /pricing0")}.`; break; case 'country': - description = - 'Locates visitor’s physical location in country resolution. Insert only Country codes in value field as appointed in ISO-3166 standard, i.e “gb” for Great Britain, “fr” for French, “de” for German, “jp” for Japanese etc.'; + description = `${__( + 'Locates visitor’s physical location in country resolution' + )}. ${__( + 'Insert only Country codes in value field as appointed in ISO-3166 standard,' + )} i.e ${__( + '“gb” for Great Britain, “fr” for French, “de” for German, “jp” for Japanese etc' + )}.`; break; case 'city': - description = - 'Locates visitor’s physical location in city resolution. Write a name of the City in value field. If Country’s not set, every city with same name will meet the criteria.'; + description = `${__( + 'Locates visitor’s physical location in city resolution' + )}. ${__('Write a name of the City in value field')}. ${__( + 'If Country’s not set, every city with same name will meet the criteria' + )}.`; break; default: - description = 'Counts individual visitor’s visitting number.'; + description = `${__('Counts individual visitor’s visitting number')}.`; } return description; } @@ -122,7 +140,7 @@ class ConditionsRule extends React.Component { > {RULE_CONDITIONS[rule.kind].map((cond, index) => ( ))} @@ -151,7 +169,7 @@ class ConditionsRule extends React.Component { {VISITOR_AUDIENCE_RULES.map((rule, index) => ( ))} diff --git a/ui/src/modules/common/styles/colors.ts b/ui/src/modules/common/styles/colors.ts index 179feb7444d..ddf61749fc7 100644 --- a/ui/src/modules/common/styles/colors.ts +++ b/ui/src/modules/common/styles/colors.ts @@ -14,6 +14,7 @@ const colorCoreDarkBlue = '#0a1e41'; const colorCoreBlack = '#393C40'; const colorCoreGray = '#888'; const colorCoreLightGray = '#AAAEB3'; +const colorCoreLightGreen = '#25D366'; const colorLightGray = '#AAA'; const colorLightBlue = '#F8FBFF'; @@ -81,6 +82,7 @@ export default { colorLightBlue, colorCoreDarkGray, colorCoreDarkBlue, + colorCoreLightGreen, bgMain, bgDark, diff --git a/ui/src/modules/common/utils/Alert/Alert.tsx b/ui/src/modules/common/utils/Alert/Alert.tsx index 4cc0e32e39e..8b2b43c95bb 100644 --- a/ui/src/modules/common/utils/Alert/Alert.tsx +++ b/ui/src/modules/common/utils/Alert/Alert.tsx @@ -5,6 +5,7 @@ import { slideDown } from 'modules/common/utils/animations'; import React from 'react'; import styled from 'styled-components'; import styledTS from 'styled-components-ts'; +import {__} from 'modules/common/utils'; const types = { info: { @@ -86,7 +87,7 @@ export default class AlertStyled extends React.Component {   - {this.props.children} + {__(`${this.props.children}`)} ); } diff --git a/ui/src/modules/common/utils/uploadHandler.ts b/ui/src/modules/common/utils/uploadHandler.ts index 06ebe47d96f..f0297db10f4 100644 --- a/ui/src/modules/common/utils/uploadHandler.ts +++ b/ui/src/modules/common/utils/uploadHandler.ts @@ -19,7 +19,7 @@ type AfterReadParams = { }; type Params = { - files: FileList | null; + files: any; beforeUpload: () => void; afterUpload: (params: AfterUploadParams) => void; afterRead?: (params: AfterReadParams) => void; diff --git a/ui/src/modules/companies/components/detail/CompaniesMerge.tsx b/ui/src/modules/companies/components/detail/CompaniesMerge.tsx index c632a86eb84..c9390ca12e5 100644 --- a/ui/src/modules/companies/components/detail/CompaniesMerge.tsx +++ b/ui/src/modules/companies/components/detail/CompaniesMerge.tsx @@ -148,7 +148,7 @@ class CompaniesMerge extends React.Component { renderOwner(data) { return ( - Name: + Name: {data.details.fullName} ); @@ -157,7 +157,7 @@ class CompaniesMerge extends React.Component { renderParentCompany(data) { return ( - Name: + Name: {data.primaryName} ); diff --git a/ui/src/modules/companies/components/list/CompanyForm.tsx b/ui/src/modules/companies/components/list/CompanyForm.tsx index f49fabd760c..119944cf57a 100755 --- a/ui/src/modules/companies/components/list/CompanyForm.tsx +++ b/ui/src/modules/companies/components/list/CompanyForm.tsx @@ -111,7 +111,7 @@ class CompanyForm extends React.Component { generateConstantParams(constants) { return constants.map(constant => ({ value: constant, - label: constant + label: __(constant) })); } @@ -209,7 +209,7 @@ class CompanyForm extends React.Component { Owner { defaultValue={primaryName} defaultOptions={names || []} autoCompletionType="names" - placeholder="Enter company name" + placeholder={__("Enter company name")} queryName="companies" query={autoCompletionQuery} onChange={this.onChange.bind(this, 'names', 'primaryName')} @@ -252,7 +252,7 @@ class CompanyForm extends React.Component { defaultValue={primaryEmail} defaultOptions={emails || []} autoCompletionType="emails" - placeholder="Enter company email" + placeholder={__("Enter company email")} queryName="companies" query={autoCompletionQuery} onChange={this.onChange.bind(this, 'emails', 'primaryEmail')} @@ -275,7 +275,7 @@ class CompanyForm extends React.Component { Parent Company { defaultValue={primaryPhone} defaultOptions={phones || []} autoCompletionType="phones" - placeholder="Enter company phone" + placeholder={__("Enter company phone")} queryName="companies" query={autoCompletionQuery} onChange={this.onChange.bind(this, 'phones', 'primaryPhone')} @@ -320,14 +320,14 @@ class CompanyForm extends React.Component { componentClass: 'radio', options: [ { - childNode: 'Yes', + childNode: __('Yes'), value: 'Yes', checked: this.state.doNotDisturb === 'Yes', onChange: e => this.setState({ doNotDisturb: e.target.value }) }, { - childNode: 'No', + childNode: __('No'), value: 'No', checked: this.state.doNotDisturb === 'No', onChange: e => diff --git a/ui/src/modules/companies/containers/CompaniesList.tsx b/ui/src/modules/companies/containers/CompaniesList.tsx index f5fbd1a0f92..5dde256407a 100755 --- a/ui/src/modules/companies/containers/CompaniesList.tsx +++ b/ui/src/modules/companies/containers/CompaniesList.tsx @@ -22,6 +22,8 @@ import { RemoveMutationVariables } from '../types'; +import { __ } from 'modules/common/utils'; + type Props = { queryParams?: any; }; @@ -59,7 +61,7 @@ class CompanyListContainer extends React.Component { this.timer = setTimeout(() => { this.props.companiesMainQuery.refetch(); }, 5500); - } + }; render() { const { @@ -85,7 +87,12 @@ class CompanyListContainer extends React.Component { }) .then(() => { emptyBulk(); - Alert.success('You successfully deleted a company. The changes will take a few seconds', 4500); + Alert.success( + `${__('You successfully deleted a company')}. ${__( + 'The changes will take a few seconds' + )}`, + 4500 + ); this.refetchWithDelay(); }) @@ -161,7 +168,12 @@ class CompanyListContainer extends React.Component { return ; }; - return ; + return ( + + ); } } @@ -177,14 +189,14 @@ const generateParams = ({ queryParams }) => { sortDirection: queryParams.sortDirection ? parseInt(queryParams.sortDirection, 10) : undefined - } + }; }; const getRefetchQueries = (queryParams?: any) => { return [ { query: gql(queries.companiesMain), - variables: { ...generateParams({ queryParams })} + variables: { ...generateParams({ queryParams }) } }, { query: gql(queries.companyCounts), @@ -208,13 +220,16 @@ export default withProps( { name: 'companiesMainQuery', options: ({ queryParams }) => ({ - variables: generateParams({ queryParams }), - }), + variables: generateParams({ queryParams }) + }) + } + ), + graphql( + gql(queries.companiesListConfig), + { + name: 'companiesListConfigQuery' } ), - graphql(gql(queries.companiesListConfig), { - name: 'companiesListConfigQuery' - }), // mutations graphql( gql(mutations.companiesRemove), diff --git a/ui/src/modules/customers/components/common/ActionSection.tsx b/ui/src/modules/customers/components/common/ActionSection.tsx index a8ab7b97865..f61d1a8075b 100644 --- a/ui/src/modules/customers/components/common/ActionSection.tsx +++ b/ui/src/modules/customers/components/common/ActionSection.tsx @@ -161,7 +161,7 @@ class ActionSection extends React.Component { selected={this.state.customerState === type} onClick={onClick} > - {type} + {__(type)}

    {__(desc)}

    ); @@ -170,12 +170,12 @@ class ActionSection extends React.Component { renderChangeStateForm() { const options = [ { - value: __('lead'), - desc: __('A person who preparing to buy some service or product') + value: 'lead', + desc: 'A person who preparing to buy some service or product' }, { - value: __('customer'), - desc: __('A person who already bought some service or product') + value: 'customer', + desc: 'A person who already bought some service or product' } ]; diff --git a/ui/src/modules/customers/components/common/CustomerSection.tsx b/ui/src/modules/customers/components/common/CustomerSection.tsx index f7d5b5a1ce2..80691c7ca96 100644 --- a/ui/src/modules/customers/components/common/CustomerSection.tsx +++ b/ui/src/modules/customers/components/common/CustomerSection.tsx @@ -41,7 +41,7 @@ function Component({ const relCustomerTrigger = ( - {__('See related customers..')} + {__('See related customers')}.. ); diff --git a/ui/src/modules/customers/components/detail/CustomerDetails.tsx b/ui/src/modules/customers/components/detail/CustomerDetails.tsx index 807c91bc3fb..79ace3657e7 100755 --- a/ui/src/modules/customers/components/detail/CustomerDetails.tsx +++ b/ui/src/modules/customers/components/detail/CustomerDetails.tsx @@ -6,10 +6,11 @@ import { TabTitle } from 'modules/common/components/tabs'; import { __, renderFullName } from 'modules/common/utils'; import ActionSection from 'modules/customers/containers/common/ActionSection'; import LeadState from 'modules/customers/containers/LeadState'; -import { MailBox, UserHeader } from 'modules/customers/styles'; +import { MailBox, UserHeader, WhatsProBox } from 'modules/customers/styles'; import Widget from 'modules/engage/containers/Widget'; import Wrapper from 'modules/layout/components/Wrapper'; import MailForm from 'modules/settings/integrations/containers/mail/MailForm'; +import WhatsProForm from 'modules/settings/integrations/containers/whatspro/WhatsProForm'; import React from 'react'; import { ICustomer } from '../../types'; import InfoSection from '../common/InfoSection'; @@ -58,6 +59,43 @@ class CustomerDetails extends React.Component { ); }; + renderWhatsProTab = () => { + const { customer } = this.props; + + if (!customer.primaryPhone) { + return null; + } + + const triggerWhatsPro = ( + + {__('Send WhatsPro')} + + ); + + const content = props => ( + + + + ); + + return ( + + ); + }; + renderExtraTabs = () => { const triggerMessenger = ( @@ -73,6 +111,7 @@ class CustomerDetails extends React.Component { channelType="messenger" /> {this.renderEmailTab()} + {this.renderWhatsProTab()} ); }; @@ -99,9 +138,9 @@ class CustomerDetails extends React.Component { contentId={customer._id} contentType="customer" extraTabs={[ - { name: 'conversation', label: 'Conversation' }, - { name: 'email', label: 'Email' }, - { name: 'task', label: 'Task' } + { name: 'conversation', label: __('Conversation') }, + { name: 'email', label: __('Email') }, + { name: 'task', label: __('Task') } ]} /> diff --git a/ui/src/modules/customers/components/list/CustomerForm.tsx b/ui/src/modules/customers/components/list/CustomerForm.tsx index 2d440dff441..5856c2272c9 100755 --- a/ui/src/modules/customers/components/list/CustomerForm.tsx +++ b/ui/src/modules/customers/components/list/CustomerForm.tsx @@ -244,7 +244,7 @@ class CustomerForm extends React.Component { Owner { defaultValue={primaryEmail} defaultOptions={this.getEmailsOptions(customer)} autoCompletionType="emails" - placeholder="Enter an email" + placeholder={__("Enter an email")} queryName="customers" query={autoCompletionQuery} checkFormat={validator.isEmail} @@ -324,7 +324,7 @@ class CustomerForm extends React.Component { defaultValue={primaryPhone} defaultOptions={this.getPhonesOptions(customer)} autoCompletionType="phones" - placeholder="Enter an phone" + placeholder={__("Enter an phone")} queryName="customers" query={autoCompletionQuery} checkFormat={isValidPhone} @@ -347,7 +347,7 @@ class CustomerForm extends React.Component { {...formProps} required={false} name="birthDate" - placeholder={'Birthday'} + placeholder={__('Birthday')} value={this.state.birthDate} onChange={this.onDateChange} /> @@ -366,14 +366,14 @@ class CustomerForm extends React.Component { componentClass: 'radio', options: [ { - childNode: 'Yes', + childNode: __('Yes'), value: 'Yes', checked: this.state.hasAuthority === 'Yes', onChange: e => this.setState({ hasAuthority: e.target.value }) }, { - childNode: 'No', + childNode: __('No'), value: 'No', checked: this.state.hasAuthority === 'No', onChange: e => @@ -388,14 +388,14 @@ class CustomerForm extends React.Component { componentClass: 'radio', options: [ { - childNode: 'Yes', + childNode: __('Yes'), value: 'Yes', checked: this.state.doNotDisturb === 'Yes', onChange: e => this.setState({ doNotDisturb: e.target.value }) }, { - childNode: 'No', + childNode: __('No'), value: 'No', checked: this.state.doNotDisturb === 'No', onChange: e => diff --git a/ui/src/modules/customers/components/list/CustomersList.tsx b/ui/src/modules/customers/components/list/CustomersList.tsx index c28cc1bcb67..b9b124481e4 100755 --- a/ui/src/modules/customers/components/list/CustomersList.tsx +++ b/ui/src/modules/customers/components/list/CustomersList.tsx @@ -243,7 +243,7 @@ class CustomersList extends React.Component { const addTrigger = ( ); @@ -457,7 +457,7 @@ class CustomersList extends React.Component { @@ -470,7 +470,7 @@ class CustomersList extends React.Component { diff --git a/ui/src/modules/customers/constants.ts b/ui/src/modules/customers/constants.ts index a8527b08b07..124cb5fffea 100755 --- a/ui/src/modules/customers/constants.ts +++ b/ui/src/modules/customers/constants.ts @@ -1,5 +1,7 @@ import { getConstantFromStore } from 'modules/common/utils'; +import { __ } from 'modules/common/utils'; + export const CUSTOMER_BASIC_INFO = { avatar: 'Avatar', firstName: 'First Name', @@ -67,29 +69,29 @@ export const CUSTOMER_LINKS = { }; export const LEAD_CHOICES = [ - { label: 'New', value: 'new' }, - { label: 'Contacted', value: 'attemptedToContact' }, - { label: 'Working', value: 'inProgress' }, - { label: 'Bad timing', value: 'badTiming' }, - { label: 'Unqualified', value: 'unqualified' } + { label: __('New'), value: 'new' }, + { label: __('Contacted'), value: 'attemptedToContact' }, + { label: __('Working'), value: 'inProgress' }, + { label: __('Bad timing'), value: 'badTiming' }, + { label: __('Unqualified'), value: 'unqualified' } ]; export const EMAIL_VALIDATION_STATUSES = [ - { label: 'Valid', value: 'valid' }, - { label: 'Invalid', value: 'invalid' }, - { label: 'Accept all unverifiable', value: 'accept_all_unverifiable' }, - { label: 'Unknown', value: 'unknown' }, - { label: 'Disposable', value: 'disposable' }, - { label: 'Catchall', value: 'catchall' }, - { label: 'Bad syntax', value: 'badsyntax' }, - { label: 'Unverifiable', value: 'unverifiable' }, - { label: 'Not checked', value: 'Not checked' }, -] + { label: __('Valid'), value: 'valid' }, + { label: __('Invalid'), value: 'invalid' }, + { label: __('Accept all unverifiable'), value: 'accept_all_unverifiable' }, + { label: __('Unknown'), value: 'unknown' }, + { label: __('Disposable'), value: 'disposable' }, + { label: __('Catchall'), value: 'catchall' }, + { label: __('Bad syntax'), value: 'badsyntax' }, + { label: __('Unverifiable'), value: 'unverifiable' }, + { label: __('Not checked'), value: 'Not checked' } +]; export const PHONE_VALIDATION_STATUSES = [ - { label: 'Valid', value: 'valid' }, - { label: 'Invalid', value: 'invalid' }, - { label: 'Unknown', value: 'unknown' }, - { label: 'Unverifiable', value: 'unverifiable' }, - { label: 'Mobile phone', value: 'receives_sms' }, -] \ No newline at end of file + { label: __('Valid'), value: 'valid' }, + { label: __('Invalid'), value: 'invalid' }, + { label: __('Unknown'), value: 'unknown' }, + { label: __('Unverifiable'), value: 'unverifiable' }, + { label: __('Mobile phone'), value: 'receives_sms' } +]; diff --git a/ui/src/modules/customers/containers/CustomersList.tsx b/ui/src/modules/customers/containers/CustomersList.tsx index d099c06638f..e020532762e 100755 --- a/ui/src/modules/customers/containers/CustomersList.tsx +++ b/ui/src/modules/customers/containers/CustomersList.tsx @@ -25,6 +25,8 @@ import { VerifyMutationVariables } from '../types'; +import { __ } from 'modules/common/utils'; + type Props = { queryParams: any; showImportBar: () => void; @@ -56,7 +58,7 @@ class CustomerListContainer extends React.Component { this.state = { loading: false, mergeCustomerLoading: false, - responseId: '', + responseId: '' }; } @@ -76,7 +78,7 @@ class CustomerListContainer extends React.Component { this.timer = setTimeout(() => { this.props.customersMainQuery.refetch(); }, 5500); - } + }; render() { const { @@ -87,7 +89,7 @@ class CustomerListContainer extends React.Component { customersVerify, customersChangeVerificationStatus, type, - history, + history } = this.props; let columnsConfig = @@ -97,20 +99,25 @@ class CustomerListContainer extends React.Component { const localConfig = localStorage.getItem(`erxes_${type}_columns_config`); if (localConfig) { - columnsConfig = JSON.parse(localConfig).filter((conf) => conf.checked); + columnsConfig = JSON.parse(localConfig).filter(conf => conf.checked); } const removeCustomers = ({ customerIds }, emptyBulk) => { customersRemove({ - variables: { customerIds }, + variables: { customerIds } }) .then(() => { emptyBulk(); - Alert.success('You successfully deleted a customer. The changes will take a few seconds', 4500); + Alert.success( + `${__('You successfully deleted a customer')}. ${__( + 'The changes will take a few seconds' + )}.`, + 4500 + ); this.refetchWithDelay(); }) - .catch((e) => { + .catch(e => { Alert.error(e.message); }); }; @@ -121,8 +128,8 @@ class CustomerListContainer extends React.Component { customersMerge({ variables: { customerIds: ids, - customerFields: data, - }, + customerFields: data + } }) .then((result: any) => { callback(); @@ -131,7 +138,7 @@ class CustomerListContainer extends React.Component { history.push(`/contacts/details/${result.data.customersMerge._id}`); customersMainQuery.refetch(); }) - .catch((e) => { + .catch(e => { Alert.error(e.message); this.setState({ mergeCustomerLoading: false }); }); @@ -142,22 +149,24 @@ class CustomerListContainer extends React.Component { customersVerify({ variables: { - verificationType, - }, + verificationType + } }) .then(() => { Alert.success( - 'Your request has been successfully sent. Your contacts will be verified after a while' + `${__("Your request has been successfully sent")}. ${"Your contacts will be verified after a while"}` ); }) - .catch((e) => { + .catch(e => { Alert.error(e.message); }); }; - const changeVerificationStatus = ({ customerIds, verificationType, status }) => { - - + const changeVerificationStatus = ({ + customerIds, + verificationType, + status + }) => { customersChangeVerificationStatus({ variables: { customerIds, @@ -170,11 +179,10 @@ class CustomerListContainer extends React.Component { customersMainQuery.refetch(); }) - .catch((e) => { + .catch(e => { Alert.error(e.message); - }); - } + }; const exportData = (bulk: Array<{ _id: string }>) => { const { REACT_APP_API_URL } = getEnv(); @@ -187,17 +195,17 @@ class CustomerListContainer extends React.Component { } if (bulk.length > 0) { - queryParams.ids = bulk.map((customer) => customer._id); + queryParams.ids = bulk.map(customer => customer._id); } - columnsConfig.forEach((checked) => { + columnsConfig.forEach(checked => { checkedConfigs.push(checked); }); const exportQuery = { ...queryParams, type, - configs: JSON.stringify(columnsConfig), + configs: JSON.stringify(columnsConfig) }; const stringified = queryString.stringify(exportQuery); @@ -227,11 +235,13 @@ class CustomerListContainer extends React.Component { refetch: this.refetchWithDelay }; - const content = (props) => { + const content = props => { return ; }; - return ; + return ( + + ); } } @@ -252,7 +262,7 @@ const generateParams = ({ queryParams, type }) => { type, sortDirection: queryParams.sortDirection ? parseInt(queryParams.sortDirection, 10) - : undefined, + : undefined }; }; @@ -296,14 +306,14 @@ export default withProps( { name: 'customersMainQuery', options: ({ queryParams, type }) => ({ - variables: generateParams({ queryParams, type }), - }), + variables: generateParams({ queryParams, type }) + }) } ), graphql( gql(queries.customersListConfig), { - name: 'customersListConfigQuery', + name: 'customersListConfigQuery' } ), // mutations @@ -328,13 +338,13 @@ export default withProps( graphql( gql(mutations.customersVerify), { - name: 'customersVerify', + name: 'customersVerify' } ), graphql( gql(mutations.customersChangeVerificationStatus), { - name: 'customersChangeVerificationStatus', + name: 'customersChangeVerificationStatus' } ) )(withRouter(CustomerListContainer)) diff --git a/ui/src/modules/customers/styles.ts b/ui/src/modules/customers/styles.ts index 10dd2dae0ff..e7716b2dff4 100644 --- a/ui/src/modules/customers/styles.ts +++ b/ui/src/modules/customers/styles.ts @@ -182,6 +182,13 @@ const MailBox = styled.div` transition: all ease 0.3s; `; +const WhatsProBox = styled.div` + background: ${colors.colorWhite}; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + transition: all ease 0.3s; +`; + export const LeadStateWrapper = styled.div` display: flex; padding: 0 ${dimensions.coreSpacing}px; @@ -330,5 +337,6 @@ export { CustomerState, UserHeader, MailBox, + WhatsProBox, States }; diff --git a/ui/src/modules/engage/components/AutoAndManualForm.tsx b/ui/src/modules/engage/components/AutoAndManualForm.tsx index 6d6d9397201..6f9020d9f59 100644 --- a/ui/src/modules/engage/components/AutoAndManualForm.tsx +++ b/ui/src/modules/engage/components/AutoAndManualForm.tsx @@ -162,7 +162,9 @@ class AutoAndManualForm extends React.Component { if (this.state.method === METHODS.SMS && !this.props.smsConfig) { return Alert.warning( - 'SMS integration is not configured. Go to Settings > System config > Integrations config and set Telnyx SMS API key.' + `${__('SMS integration is not configured')}. ${__( + 'Go to Settings > System config > Integrations config and set Telnyx SMS API key' + )}.` ); } diff --git a/ui/src/modules/engage/components/EmailForm.tsx b/ui/src/modules/engage/components/EmailForm.tsx index 1190074a734..6a0ee7bdf00 100644 --- a/ui/src/modules/engage/components/EmailForm.tsx +++ b/ui/src/modules/engage/components/EmailForm.tsx @@ -177,23 +177,21 @@ class EmailForm extends React.Component { - From: - + {__("From:")} +
    - If you want to verify your email: + {__("If you want to verify your email:")}
      -
    1. Log in to your AWS Management Console
    2. -
    3. Click on the Services menu from the dropdown menu
    4. +
    5. {__("Log in to your AWS Management Console")}
    6. +
    7. {__("Click on the Services menu from the dropdown menu")}
    8. - Click on the Simple Email Services menu from the left - sidebar + {__("Click on the Simple Email Services menu from the left sidebar")}
    9. - Click on the Email Addresses menu from the left sidebar + {__("Click on the Email Addresses menu from the left sidebar")}
    10. - Finally, click on the button that named "Verify a new - email address" + {__("Finally, click on the button that named 'Verify a new email address'")}
    @@ -212,7 +210,7 @@ class EmailForm extends React.Component { Reply to: - Emails must be space separated + {__("Emails must be space separated")} { value={this.state.email.templateId} options={generateEmailTemplateParams(this.props.templates)} clearable={false} + placeholder={`${__("Select")}...`} /> - Attachments: + Attachments: { {this.renderSmsStats()}
    -

    Log messages

    +

    {__("Log messages")}

      {logs.map((log, index) => (
    • {log.message}
    • diff --git a/ui/src/modules/engage/components/MessengerForm.tsx b/ui/src/modules/engage/components/MessengerForm.tsx index 2a66722f01f..c6e049fd428 100644 --- a/ui/src/modules/engage/components/MessengerForm.tsx +++ b/ui/src/modules/engage/components/MessengerForm.tsx @@ -85,7 +85,7 @@ class MessengerForm extends React.Component { ))} @@ -118,7 +118,7 @@ class MessengerForm extends React.Component { const onChangeContent = e => { Alert.warning( - 'Please carefully select the brand, it will appear in the selected brand messenger.' + `${__("Please carefully select the brand, it will appear in the selected brand messenger")}.` ); this.changeContent('brandId', (e.target as HTMLInputElement).value); }; diff --git a/ui/src/modules/engage/components/SmsForm.tsx b/ui/src/modules/engage/components/SmsForm.tsx index 2471aa8c024..1a34782ec12 100644 --- a/ui/src/modules/engage/components/SmsForm.tsx +++ b/ui/src/modules/engage/components/SmsForm.tsx @@ -182,7 +182,7 @@ class MessengerForm extends React.Component { if (!smsConfig) { return ( System config > Integrations config and set Telnyx SMS API key"}.`} image="/images/actions/21.svg" /> ); diff --git a/ui/src/modules/engage/components/WidgetForm.tsx b/ui/src/modules/engage/components/WidgetForm.tsx index 22af28b98f9..558ab8b100d 100755 --- a/ui/src/modules/engage/components/WidgetForm.tsx +++ b/ui/src/modules/engage/components/WidgetForm.tsx @@ -127,7 +127,7 @@ class WidgetForm extends React.Component { {this.props.customers.map(customer => ( {customer.firstName} - ({customer.primaryEmail || 'Unknown'}) + ({customer.primaryEmail || __('Unknown')}) ))} @@ -279,7 +279,7 @@ class WidgetForm extends React.Component { ); } - render() { + render() { return (
      {this.renderReceivers()} @@ -314,7 +314,7 @@ class WidgetForm extends React.Component { btnStyle="success" icon="message" > - Send + {__("Send")} diff --git a/ui/src/modules/engage/constants.ts b/ui/src/modules/engage/constants.ts index 42c26c0bf10..12b9da05139 100755 --- a/ui/src/modules/engage/constants.ts +++ b/ui/src/modules/engage/constants.ts @@ -1,10 +1,12 @@ +import { __ } from "modules/common/utils"; + export const EMAIL_CONTENT_CLASS = 'erxes-email-content'; export const EMAIL_CONTENT_PLACEHOLDER = `
      `; export const MESSAGE_TYPES = [ - { label: 'Segment', value: 'segment' }, - { label: 'Tag', value: 'tag' }, - { label: 'Brand', value: 'brand' } + { label: __('Segment'), value: 'segment' }, + { label: __('Tag'), value: 'tag' }, + { label: __('Brand'), value: 'brand' } ]; export const MESSAGE_KINDS = { @@ -52,9 +54,9 @@ export const SENT_AS_CHOICES = { FULL_MESSAGE: 'fullMessage', ALL_LIST: ['badge', 'snippet', 'fullMessage'], SELECT_OPTIONS: [ - { value: 'badge', text: 'Badge' }, - { value: 'snippet', text: 'Snippet' }, - { value: 'fullMessage', text: 'Show the full message' } + { value: 'badge', text: __('Badge') }, + { value: 'snippet', text: __('Snippet') }, + { value: 'fullMessage', text: __('Show the full message') } ] }; diff --git a/ui/src/modules/engage/containers/MessageListRow.tsx b/ui/src/modules/engage/containers/MessageListRow.tsx index 17d8658a56e..62f22a9afd4 100755 --- a/ui/src/modules/engage/containers/MessageListRow.tsx +++ b/ui/src/modules/engage/containers/MessageListRow.tsx @@ -16,6 +16,7 @@ import { SetPauseMutationResponse } from '../types'; import { crudMutationsOptions } from '../utils'; +import { __ } from 'modules/common/utils'; type Props = { isChecked: boolean; @@ -64,7 +65,10 @@ const MessageRowContainer = (props: FinalProps) => { const remove = () => { confirm().then(() => { - doMutation(removeMutation, `You just deleted an engagement message.`) + doMutation( + removeMutation, + `${__('You just deleted an engagement message')}.` + ) .then(() => { history.push('/engage'); }) @@ -77,12 +81,18 @@ const MessageRowContainer = (props: FinalProps) => { const setLiveManual = () => doMutation( setLiveManualMutation, - 'Yay! Your engagement message is now live.' + `${__('Yay! Your engagement message is now live')}.` ); const setLive = () => - doMutation(setLiveMutation, 'Yay! Your engagement message is now live.'); + doMutation( + setLiveMutation, + `${__('Yay! Your engagement message is now live')}.` + ); const setPause = () => - doMutation(setPauseMutation, 'Your engagement message is paused for now.'); + doMutation( + setPauseMutation, + `${__('Your engagement message is paused for now')}.` + ); const updatedProps = { ...props, diff --git a/ui/src/modules/forms/components/FieldForm.tsx b/ui/src/modules/forms/components/FieldForm.tsx index 4c021895161..cce5787ff14 100644 --- a/ui/src/modules/forms/components/FieldForm.tsx +++ b/ui/src/modules/forms/components/FieldForm.tsx @@ -243,7 +243,7 @@ class FieldForm extends React.Component { - Field preview + {__("Field preview")} @@ -258,7 +258,7 @@ class FieldForm extends React.Component { - {mode === 'create' ? 'Add' : 'Edit'} {field.type} field + {mode === __("create") ? __("Add") : __("Edit")} {__(field.type)} {this.renderContent()} diff --git a/ui/src/modules/growthHacks/components/GrowthHackMainActionBar.tsx b/ui/src/modules/growthHacks/components/GrowthHackMainActionBar.tsx index 3371c6a1d5d..0796288093d 100644 --- a/ui/src/modules/growthHacks/components/GrowthHackMainActionBar.tsx +++ b/ui/src/modules/growthHacks/components/GrowthHackMainActionBar.tsx @@ -155,10 +155,10 @@ const GrowthHackMainActionBar = (props: IProps) => { const effort = hackScoringType === 'rice' ? 'effort' : 'ease'; const sortOptions = [ - { value: 'impact,1', label: 'Low impact' }, - { value: 'impact,-1', label: 'High impact' }, - { value: 'ease,1', label: `Low ${effort}` }, - { value: 'ease,-1', label: `High ${effort}` } + { value: 'impact,1', label: __('Low impact') }, + { value: 'impact,-1', label: __('High impact') }, + { value: 'ease,1', label: `${__("Low")} ${__(effort)}` }, + { value: 'ease,-1', label: `${__("High")} ${__(effort)}` } ]; const { sortField, sortDirection } = props.queryParams; @@ -166,7 +166,7 @@ const GrowthHackMainActionBar = (props: IProps) => { const growthHackFilter = ( <> diff --git a/ui/src/modules/growthHacks/components/editForm/StageForm.tsx b/ui/src/modules/growthHacks/components/editForm/StageForm.tsx index 2ee7ce628f0..9a67a555f40 100644 --- a/ui/src/modules/growthHacks/components/editForm/StageForm.tsx +++ b/ui/src/modules/growthHacks/components/editForm/StageForm.tsx @@ -6,6 +6,8 @@ import GenerateField from 'modules/settings/properties/components/GenerateField' import React from 'react'; import styled from 'styled-components'; +import { __ } from 'modules/common/utils'; + const RightContainer = styled.div` background: #fff; padding: 30px; @@ -86,7 +88,7 @@ class StageForm extends React.Component { btnStyle="success" icon="checked-1" > - Save + {__("Save")} ); diff --git a/ui/src/modules/growthHacks/components/funnelImpact/FunnelGroup.tsx b/ui/src/modules/growthHacks/components/funnelImpact/FunnelGroup.tsx index 037fdfabde1..c633d4a079a 100644 --- a/ui/src/modules/growthHacks/components/funnelImpact/FunnelGroup.tsx +++ b/ui/src/modules/growthHacks/components/funnelImpact/FunnelGroup.tsx @@ -5,6 +5,8 @@ import { IGrowthHack } from 'modules/growthHacks/types'; import React from 'react'; import GrowthHacks from './GrowthHacks'; +import { __ } from 'modules/common/utils'; + type Props = { queryParams: any; hackStage: string; @@ -42,7 +44,7 @@ class FunnelGroup extends React.Component {
    - Count: {totalCount} + {__('Count')}: {totalCount} diff --git a/ui/src/modules/growthHacks/components/home/Home.tsx b/ui/src/modules/growthHacks/components/home/Home.tsx index ab976092484..cb83c001423 100644 --- a/ui/src/modules/growthHacks/components/home/Home.tsx +++ b/ui/src/modules/growthHacks/components/home/Home.tsx @@ -125,7 +125,7 @@ class Home extends React.Component { return ( -
    {state}
    +
    {__(state)}
    {this.props.counts[state]}
    ); diff --git a/ui/src/modules/growthHacks/components/home/PipelineList.tsx b/ui/src/modules/growthHacks/components/home/PipelineList.tsx index 73f4e7253da..319183140b6 100644 --- a/ui/src/modules/growthHacks/components/home/PipelineList.tsx +++ b/ui/src/modules/growthHacks/components/home/PipelineList.tsx @@ -1,5 +1,6 @@ import { IPipeline } from 'modules/boards/types'; import { IButtonMutateProps } from 'modules/common/types'; +import { __ } from 'modules/common/utils'; import PipelineForm from 'modules/settings/boards/containers/PipelineForm'; import { options } from 'modules/settings/growthHacks/options'; import React, { useState } from 'react'; @@ -40,9 +41,9 @@ function PipelineList(props: Props) {
    +
    - Create
    - New
    - Project + {__('Create')}
    + {__('New')}
    + {__('Project')}
    diff --git a/ui/src/modules/growthHacks/components/priorityMatrix/Chart.tsx b/ui/src/modules/growthHacks/components/priorityMatrix/Chart.tsx index cf5ec32a59d..f48c1a76ad1 100644 --- a/ui/src/modules/growthHacks/components/priorityMatrix/Chart.tsx +++ b/ui/src/modules/growthHacks/components/priorityMatrix/Chart.tsx @@ -50,7 +50,7 @@ class Chart extends React.PureComponent { key={Math.random()} > - {`(${data.count}) Experiments`} + {`(${data.count}) ${__("Experiments")}`} ); diff --git a/ui/src/modules/growthHacks/containers/home/PipelineList.tsx b/ui/src/modules/growthHacks/containers/home/PipelineList.tsx index 77238bff661..0a1d0f735b8 100644 --- a/ui/src/modules/growthHacks/containers/home/PipelineList.tsx +++ b/ui/src/modules/growthHacks/containers/home/PipelineList.tsx @@ -4,7 +4,7 @@ import { queries } from 'modules/boards/graphql'; import { PipelinesQueryResponse } from 'modules/boards/types'; import ButtonMutate from 'modules/common/components/ButtonMutate'; import { IButtonMutateProps, IRouterProps } from 'modules/common/types'; -import { withProps } from 'modules/common/utils'; +import { withProps, __ } from 'modules/common/utils'; import mutations from 'modules/settings/boards/graphql/mutations'; import React from 'react'; import { graphql } from 'react-apollo'; @@ -54,9 +54,9 @@ class PipelineListContainer extends React.Component { refetchQueries={[]} isSubmitted={isSubmitted} type="submit" - successMessage={`You successfully ${ - object ? 'updated' : 'added' - } a ${name}`} + successMessage={__( + `You successfully ${object ? 'updated' : 'added'} a ${name}` + )} /> ); }; diff --git a/ui/src/modules/growthHacks/options.ts b/ui/src/modules/growthHacks/options.ts index 4f14d4b985c..f34ed080cd7 100644 --- a/ui/src/modules/growthHacks/options.ts +++ b/ui/src/modules/growthHacks/options.ts @@ -1,3 +1,4 @@ +import { __ } from 'modules/common/utils'; import GrowthHackEditForm from 'modules/growthHacks/containers/GrowthHackEditForm'; import GrowthHackItem from './components/GrowthHackItem'; import { mutations, queries } from './graphql'; @@ -38,7 +39,7 @@ const options = { copyMutation: mutations.growthHacksCopy }, texts: { - addText: 'Add an experiment', + addText: __("Add an experiment"), updateSuccessText: 'You successfully updated an experiment', deleteSuccessText: 'You successfully deleted an experiment', copySuccessText: 'You successfully copied an experiment', diff --git a/ui/src/modules/inbox/components/Inbox.tsx b/ui/src/modules/inbox/components/Inbox.tsx index 2fbe16fcf61..b85a15057d4 100644 --- a/ui/src/modules/inbox/components/Inbox.tsx +++ b/ui/src/modules/inbox/components/Inbox.tsx @@ -1,7 +1,7 @@ import { IUser } from 'modules/auth/types'; import asyncComponent from 'modules/common/components/AsyncComponent'; import ModalTrigger from 'modules/common/components/ModalTrigger'; -import { can } from 'modules/common/utils'; +import { can, __ } from 'modules/common/utils'; import Header from 'modules/layout/components/Header'; import { Contents, HeightedWrapper } from 'modules/layout/styles'; import MailForm from 'modules/settings/integrations/containers/mail/MailForm'; @@ -34,12 +34,12 @@ function Inbox({ currentConversationId, queryParams, currentUser }: Props) { } const content = () => ; - + const sendEmail = ( Send an Email} + title={__('Send an Email')} + trigger={{__('Send an Email')}} size="lg" content={content} paddingContent="less-padding" @@ -50,7 +50,7 @@ function Inbox({ currentConversationId, queryParams, currentUser }: Props) { return (
    { clear(targets.map(t => t._id), error => { if (error) { - Alert.error(`Error: ${error.message}`); + Alert.error(`${__("Error")}: ${error.message}`); } }); diff --git a/ui/src/modules/inbox/components/conversationDetail/sidebar/SidebarActivity.tsx b/ui/src/modules/inbox/components/conversationDetail/sidebar/SidebarActivity.tsx index b77b5affec7..25e59835481 100644 --- a/ui/src/modules/inbox/components/conversationDetail/sidebar/SidebarActivity.tsx +++ b/ui/src/modules/inbox/components/conversationDetail/sidebar/SidebarActivity.tsx @@ -47,7 +47,7 @@ class SidebarActivity extends React.Component { type={currentSubTab} // show logs filtered by type /> } - emptyText="No Activities" + emptyText={__("No Activities")} emptyImage="/images/actions/19.svg" /> diff --git a/ui/src/modules/inbox/components/conversationDetail/workarea/Dropzone.tsx b/ui/src/modules/inbox/components/conversationDetail/workarea/Dropzone.tsx new file mode 100644 index 00000000000..3915b7f4e5d --- /dev/null +++ b/ui/src/modules/inbox/components/conversationDetail/workarea/Dropzone.tsx @@ -0,0 +1,29 @@ +import React, { useCallback } from 'react'; +import { useDropzone } from 'react-dropzone'; + +import { DropzoneContent } from '../../../styles'; + +function Dropzone({ children, attach }) { + const onDrop = useCallback(acceptedFile => { + attach(acceptedFile); + }, [attach]); + + const { getRootProps, getInputProps, isDragActive } = useDropzone({ + onDrop, + noClick: true + }); + + return ( + + {isDragActive ? ( + +

    Drag file here

    + +
    + ) : null} + {children} +
    + ); +} + +export default Dropzone; diff --git a/ui/src/modules/inbox/components/conversationDetail/workarea/RecorderAudio.tsx b/ui/src/modules/inbox/components/conversationDetail/workarea/RecorderAudio.tsx new file mode 100644 index 00000000000..5fe3bc5391e --- /dev/null +++ b/ui/src/modules/inbox/components/conversationDetail/workarea/RecorderAudio.tsx @@ -0,0 +1,191 @@ +import React, { useState, useEffect } from 'react'; + +import Button from 'modules/common/components/Button'; +import Icon from 'modules/common/components/Icon'; +import { RecordActions, StopRecordButton } from 'modules/inbox/styles'; +import dayjs from 'dayjs'; + +type Recorder = { + recordingMinutes: number; + recordingSeconds: number; + initRecording: boolean; + mediaStream: MediaStream | null; + mediaRecorder: MediaRecorder | null; + audio: string | null; + file: File | null; +}; + +const initialState = { + recordingMinutes: 0, + recordingSeconds: 0, + initRecording: false, + mediaStream: null, + mediaRecorder: null, + audio: null, + file: null +}; + +const RecorderAudio = ({ toggleRecording, handleToggle, attach }) => { + const [recorderState, setRecorderState] = useState(initialState); + + const startRecording = async () => { + try { + const strem = await navigator.mediaDevices.getUserMedia({ audio: true }); + + setRecorderState(state => { + return { + ...state, + initRecording: true, + mediaStream: strem + }; + }); + } catch (err) { + console.log(err); + } + }; + + useEffect( + () => { + if (toggleRecording) { + startRecording(); + } + }, + [toggleRecording] + ); + + useEffect(() => { + let recordingInterval: any = null; + + if (recorderState.initRecording) { + recordingInterval = setInterval(() => { + setRecorderState(state => { + if (state.recordingSeconds >= 0 && state.recordingSeconds < 59) { + return { + ...state, + recordingSeconds: state.recordingSeconds + 1 + }; + } else if (state.recordingSeconds === 59) { + return { + ...state, + recordingMinutes: state.recordingMinutes + 1, + recordingSeconds: 0 + }; + } else return state; + }); + }, 1000); + } else + typeof recordingInterval === 'number' && clearInterval(recordingInterval); + + return () => { + typeof recordingInterval === 'number' && clearInterval(recordingInterval); + }; + }); + + useEffect( + () => { + setRecorderState(state => { + if (state.mediaStream) { + return { + ...state, + mediaRecorder: new MediaRecorder(state.mediaStream) + }; + } else return state; + }); + }, + [recorderState.mediaStream] + ); + + useEffect( + () => { + const recorder = recorderState.mediaRecorder; + let chunks: Blob[] = []; + + if (recorder && recorder.state === 'inactive') { + recorder.start(); + + recorder.ondataavailable = (e: any) => { + chunks.push(e.data); + }; + + recorder.onstop = () => { + const fileName = `erxes_audio_${Number(dayjs())}.ogg`; + const blob = new Blob(chunks, { type: 'audio/ogg; codecs=opus' }); + chunks = []; + + setRecorderState((state: Recorder) => { + if (state.mediaRecorder) { + return { + ...state, + audio: window.URL.createObjectURL(blob), + file: new File([blob], fileName, { + type: 'audio/ogg; codecs=opus', + lastModified: Number(dayjs()) + }) + }; + } else return initialState; + }); + }; + } + + return () => { + if (recorder) { + recorder.stream + .getAudioTracks() + .forEach((track: any) => track.stop()); + } + }; + }, + [recorderState.mediaRecorder] + ); + + const stopRecording = (recorder: any) => { + if (recorder.state !== 'inactive') recorder.stop(); + }; + + return ( + + {recorderState.audio ? ( + { + setRecorderState(initialState); + handleToggle(!toggleRecording); + }} + /> + ) : null} + + {recorderState.audio ? ( +