Merge branch 'release/2.9.0'

This commit is contained in:
Sojan 2022-09-19 20:36:55 -07:00
commit 85d3f91dac
314 changed files with 12459 additions and 2247 deletions

View file

@ -15,8 +15,11 @@ defaults: &defaults
- image: cimg/postgres:14.1
- image: cimg/redis:6.2.6
environment:
- CC_TEST_REPORTER_ID: b1b5c4447bf93f6f0b06a64756e35afd0810ea83649f03971cbf303b4449456f
- RAILS_LOG_TO_STDOUT: false
- COVERAGE: true
- LOG_LEVEL: warn
parallelism: 4
jobs:
build:
<<: *defaults
@ -88,6 +91,7 @@ jobs:
fi
curl -L https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/5.3.0/openapi-generator-cli-5.3.0.jar > ~/tmp/openapi-generator-cli-5.3.0.jar
java -jar ~/tmp/openapi-generator-cli-5.3.0.jar validate -i swagger/swagger.json
# Database setup
- run: yarn install --check-files
- run: bundle exec rake db:create
@ -113,34 +117,77 @@ jobs:
- run:
name: Run backend tests
command: |
bundle exec rspec $(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings) --profile=10 --format documentation
~/tmp/cc-test-reporter format-coverage -t simplecov -o ~/tmp/codeclimate.backend.json coverage/backend/.resultset.json
- persist_to_workspace:
root: ~/tmp
paths:
- codeclimate.backend.json
mkdir -p ~/tmp/test-results/rspec
mkdir -p ~/tmp/test-artifacts
mkdir -p coverage
~/tmp/cc-test-reporter before-build
TESTFILES=$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)
bundle exec rspec --profile 10 \
--out test-results/rspec/rspec.xml \
-- ${TESTFILES}
- run:
name: Code Climate Test Coverage
command: |
~/tmp/cc-test-reporter format-coverage -t simplecov -o "coverage/codeclimate.$CIRCLE_NODE_INDEX.json"
- run:
name: Run frontend tests
command: |
yarn test:coverage
~/tmp/cc-test-reporter format-coverage -t lcov -o ~/tmp/codeclimate.frontend.json buildreports/lcov.info
- persist_to_workspace:
root: ~/tmp
paths:
- codeclimate.frontend.json
mkdir -p ~/tmp/test-results/frontend_specs
~/tmp/cc-test-reporter before-build
TESTFILES=$(circleci tests glob **/specs/*.spec.js | circleci tests split --split-by=timings)
yarn test:coverage --profile 10 \
--out test-results/frontend_specs/rspec.xml \
-- ${TESTFILES}
- run:
name: Code Climate Test Coverage
command: |
~/tmp/cc-test-reporter format-coverage -t lcov -o coverage/codeclimate.frontend_$CIRCLE_NODE_INDEX.json buildreports/lcov.info
- persist_to_workspace:
root: coverage
paths:
- codeclimate.*.json
# collect reports
- store_test_results:
path: ~/tmp/test-results
- store_artifacts:
path: ~/tmp/test-results
destination: test-results
path: ~/tmp/test-artifacts
- store_artifacts:
path: log
upload-coverage:
working_directory: ~/build
docker:
# specify the version you desire here
- image: circleci/ruby:3.0.2-node-browsers
environment:
- CC_TEST_REPORTER_ID: caf26a895e937974a90860cfadfded20891cfd1373a5aaafb3f67406ab9d433f
steps:
- attach_workspace:
at: ~/build
- run:
name: Download cc-test-reporter
command: |
mkdir -p ~/tmp
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ~/tmp/cc-test-reporter
chmod +x ~/tmp/cc-test-reporter
- persist_to_workspace:
root: ~/tmp
paths:
- cc-test-reporter
- run:
name: Upload coverage results to Code Climate
command: |
~/tmp/cc-test-reporter sum-coverage ~/tmp/codeclimate.*.json -p 2 -o ~/tmp/codeclimate.total.json
~/tmp/cc-test-reporter upload-coverage -i ~/tmp/codeclimate.total.json
~/tmp/cc-test-reporter sum-coverage --output - codeclimate.*.json | ~/tmp/cc-test-reporter upload-coverage --debug --input -
workflows:
version: 2
commit:
jobs:
- build
- upload-coverage:
requires:
- build

View file

@ -3,6 +3,8 @@ SECRET_KEY_BASE=replace_with_lengthy_secure_hex
# Replace with the URL you are planning to use for your app
FRONTEND_URL=http://0.0.0.0:3000
# To use a dedicated URL for help center pages
# HELPCENTER_URL=http://0.0.0.0:3000
# If the variable is set, all non-authenticated pages would fallback to the default locale.
# Whenever a new account is created, the default language will be DEFAULT_LOCALE instead of en

View file

@ -23,6 +23,8 @@ jobs:
run: |
wget https://get.chatwoot.app/linux/install.sh
chmod +x install.sh
#fix for postgtres not starting automatically in gh action env
sed -i '/function configure_db() {/a sudo service postgresql start' install.sh
- name: create input file
run: |
@ -33,20 +35,6 @@ jobs:
run: |
sudo ./install.sh --install < input
# temp fix for postgresql not starting
# automatically in gh action env
- name: start postgresql service
if: always()
run: |
sudo service postgresql start
#re-running the installer again
- name: Run the installer again
if: always()
run: |
sudo ./install.sh --install < input
# disabling http verify for now as http
# access to port 3000 fails in gh action env
# - name: Verify

View file

@ -184,3 +184,4 @@ AllCops:
- db/migrate/20200927135222_add_last_activity_at_to_conversation.rb
- db/migrate/20210306170117_add_last_activity_at_to_contacts.rb
- db/migrate/20220809104508_revert_cascading_indexes.rb

View file

@ -131,6 +131,10 @@ gem 'pg_search'
# Subscriptions, Billing
gem 'stripe'
## - helper gems --##
## to populate db with sample data
gem 'faker'
group :production, :staging do
# we dont want request timing out in development while using byebug
gem 'rack-timeout'
@ -167,7 +171,6 @@ group :development, :test do
gem 'byebug', platform: :mri
gem 'climate_control'
gem 'factory_bot_rails'
gem 'faker'
gem 'listen'
gem 'mock_redis'
gem 'pry-rails'

View file

@ -16,7 +16,7 @@
___
<p align="center">
<a href="https://codeclimate.com/github/chatwoot/chatwoot/maintainability"><img src="https://api.codeclimate.com/v1/badges/80f9e1a7c72d186289ad/maintainability" alt="Maintainability"></a>
<a href="https://codeclimate.com/github/chatwoot/chatwoot/maintainability"><img src="https://api.codeclimate.com/v1/badges/e6e3f66332c91e5a4c0c/maintainability" alt="Maintainability"></a>
<img src="https://img.shields.io/circleci/build/github/chatwoot/chatwoot" alt="CircleCI Badge">
<a href="https://hub.docker.com/r/chatwoot/chatwoot/"><img src="https://img.shields.io/docker/pulls/chatwoot/chatwoot" alt="Docker Pull Badge"></a>
<a href="https://hub.docker.com/r/chatwoot/chatwoot/"><img src="https://img.shields.io/docker/cloud/build/chatwoot/chatwoot" alt="Docker Build Badge"></a>

View file

@ -1,30 +1,55 @@
# Security Policy
Chatwoot is looking forward to working with security researchers across the world to keep Chatwoot and our users safe. If you have found an issue in our systems/applications, please reach out to us.
Chatwoot is looking forward to working with security researchers worldwide to keep Chatwoot and our users safe. If you have found an issue in our systems/applications, please reach out to us.
## Reporting a Vulnerability
We use [huntr.dev](https://huntr.dev/) for security issues that affect our project. If you believe you have found a vulnerability, please disclose it via this [form](https://huntr.dev/bounties/disclose).
We use [huntr.dev](https://huntr.dev/) for security issues that affect our project. If you believe you have found a vulnerability, please disclose it via this [form](https://huntr.dev/bounties/disclose). This will enable us to review the vulnerability, fix it promptly, and reward you for your efforts.
This will enable us to review the vulnerability, fix it promptly, and reward you for your efforts.
If you have any questions about the process, contact security@chatwoot.com.
If you have any questions about the process, feel free to reach out to security@chatwoot.com.
Please try your best to describe a clear and realistic impact for your report, and please don't open any public issues on GitHub or social media; we're doing our best to respond through Huntr as quickly as possible.
> Note: Please use the email for questions related to the process. Disclosures should be done via [huntr.dev](https://huntr.dev/)
## Supported versions
| Version | Supported |
| ------- | -------------- |
| latest | ️✅ |
| <latest | |
## Out of scope
## Vulnerabilities we care about 🫣
> Note: Please do not perform testing against Chatwoot production services. Use a `self-hosted instance` to perform tests.
- Remote command execution
- SQL Injection
- Authentication bypass
- Privilege Escalation
- Cross-site scripting (XSS)
- Performing limited admin actions without authorization
- CSRF
Please do not perform testing against Chatwoot production services. Use a self hosted instance to perform tests.
You can learn more about our triaging process [here](https://www.chatwoot.com/docs/contributing-guide/security-reports).
We consider the following to be out of scope, though there may be exceptions.
## Non-Qualifying Vulnerabilities
We consider the following out of scope, though there may be exceptions.
- Missing HTTP security headers
- Self XSS
- HTTP Host Header XSS without working proof-of-concept
- Incomplete/Missing SPF/DKIM
- Reports from automated tools or scanners
- Theoretical attacks without proof of exploitability
- Social engineering
- Reflected file download
- Physical attacks
- Weak SSL/TLS/SSH algorithms or protocols
- Attacks involving physical access to a user's device or a device or network that's already seriously compromised (e.g., man-in-the-middle).
- The user attacks themselves
- Incomplete/Missing SPF/DKIM
- Denial of Service attacks
- Brute force attacks
- DNSSEC
- Social Engineering attacks
If you are not sure about the scope, please create a report.
If you are unsure about the scope, please create a [report](https://huntr.dev/repos/chatwoot/chatwoot/).
## Thanks

View file

@ -1 +1 @@
2.6.0
2.2.0

View file

@ -48,6 +48,7 @@
"size": "FREE"
}
},
"stack": "heroku-20",
"image": "heroku/ruby",
"addons": [ "heroku-redis", "heroku-postgresql"],
"buildpacks": [

View file

@ -25,7 +25,7 @@ class NotificationSubscriptionBuilder
end
def build_identifier_subscription
@identifier_subscription = user.notification_subscriptions.create(params.merge(identifier: identifier))
@identifier_subscription = user.notification_subscriptions.create!(params.merge(identifier: identifier))
end
def update_identifier_subscription

View file

@ -39,7 +39,7 @@ class Api::V1::Accounts::AgentsController < Api::V1::Accounts::BaseController
# TODO: move this to a builder and combine the save account user method into a builder
# ensure the account user association is also created in a single transaction
def create_user
return if @user
return @user.send_confirmation_instructions if @user
@user = User.create!(new_agent_params.slice(:email, :name, :password, :password_confirmation))
end

View file

@ -42,7 +42,8 @@ class Api::V1::Accounts::ArticlesController < Api::V1::Accounts::BaseController
def article_params
params.require(:article).permit(
:title, :content, :description, :position, :category_id, :author_id, :associated_article_id, :status
:title, :content, :description, :position, :category_id, :author_id, :associated_article_id, :status, meta: [:title, :description,
{ tags: [] }]
)
end

View file

@ -49,7 +49,7 @@ class Api::V1::Accounts::AutomationRulesController < Api::V1::Accounts::BaseCont
def clone
automation_rule = Current.account.automation_rules.find_by(id: params[:automation_rule_id])
new_rule = automation_rule.dup
new_rule.save
new_rule.save!
@automation_rule = new_rule
end

View file

@ -44,7 +44,7 @@ class Api::V1::Accounts::Channels::TwilioChannelsController < Api::V1::Accounts:
phone_number: phone_number,
medium: medium
)
@inbox = Current.account.inboxes.create(
@inbox = Current.account.inboxes.create!(
name: permitted_params[:name],
channel: @twilio_channel
)

View file

@ -135,7 +135,7 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController
inbox = Current.account.inboxes.find(params[:inbox_id])
source_id = params[:source_id] || SecureRandom.uuid
ContactInbox.create(contact: @contact, inbox: inbox, source_id: source_id)
ContactInbox.create!(contact: @contact, inbox: inbox, source_id: source_id)
end
def permitted_params

View file

@ -58,7 +58,8 @@ class Api::V1::Accounts::PortalsController < Api::V1::Accounts::BaseController
def portal_params
params.require(:portal).permit(
:account_id, :color, :custom_domain, :header_text, :homepage_link, :name, :page_title, :slug, :archived, config: { allowed_locales: [] }
:account_id, :color, :custom_domain, :header_text, :homepage_link, :name, :page_title, :slug, :archived, { config: [:default_locale,
{ allowed_locales: [] }] }
)
end

View file

@ -1,6 +1,7 @@
class Api::V1::Accounts::TeamMembersController < Api::V1::Accounts::BaseController
before_action :fetch_team
before_action :check_authorization
before_action :validate_member_id_params, only: [:create, :update, :destroy]
def index
@team_members = @team.team_members.map(&:user)
@ -45,4 +46,10 @@ class Api::V1::Accounts::TeamMembersController < Api::V1::Accounts::BaseControll
def fetch_team
@team = Current.account.teams.find(params[:team_id])
end
def validate_member_id_params
invalid_ids = params[:user_ids].map(&:to_i) - @team.account.user_ids
render json: { error: 'Invalid User IDs' }, status: :unauthorized and return if invalid_ids.present?
end
end

View file

@ -9,7 +9,7 @@ class Api::V1::Widget::ConversationsController < Api::V1::Widget::BaseController
ActiveRecord::Base.transaction do
process_update_contact
@conversation = create_conversation
conversation.messages.create(message_params)
conversation.messages.create!(message_params)
end
end
@ -59,7 +59,7 @@ class Api::V1::Widget::ConversationsController < Api::V1::Widget::BaseController
unless conversation.resolved?
conversation.status = :resolved
conversation.save
conversation.save!
end
head :ok
end

View file

@ -4,6 +4,7 @@ class DashboardController < ActionController::Base
before_action :set_global_config
around_action :switch_locale
before_action :ensure_installation_onboarding, only: [:index]
before_action :render_hc_if_custom_domain, only: [:index]
layout 'vueapp'
@ -37,6 +38,16 @@ class DashboardController < ActionController::Base
redirect_to '/installation/onboarding' if ::Redis::Alfred.get(::Redis::Alfred::CHATWOOT_INSTALLATION_ONBOARDING)
end
def render_hc_if_custom_domain
domain = request.host
return if domain == URI.parse(ENV.fetch('FRONTEND_URL', '')).host
@portal = Portal.find_by(custom_domain: domain)
return unless @portal
render 'public/api/v1/portals/show', layout: 'portal', portal: @portal and return
end
def app_config
{
APP_VERSION: Chatwoot.config[:version],

View file

@ -23,7 +23,7 @@ class DeviseOverrides::SessionsController < ::DeviseTokenAuth::SessionsControlle
def authenticate_resource_with_sso_token
@token = @resource.create_token
@resource.save
@resource.save!
sign_in(:user, @resource, store: false, bypass: false)
# invalidate the token after the user is signed in

View file

@ -1,6 +1,9 @@
class Public::Api::V1::Portals::ArticlesController < ApplicationController
before_action :set_portal
class Public::Api::V1::Portals::ArticlesController < PublicController
before_action :ensure_custom_domain_request, only: [:show, :index]
before_action :portal
before_action :set_category
before_action :set_article, only: [:show]
layout 'portal'
def index
@articles = @portal.articles
@ -12,14 +15,25 @@ class Public::Api::V1::Portals::ArticlesController < ApplicationController
private
def set_article
@article = @portal.articles.find(params[:id])
@article = @category.articles.find(params[:id])
@parsed_content = render_article_content(@article.content)
end
def set_portal
@portal = ::Portal.find_by!(slug: params[:portal_slug], archived: false)
def set_category
@category = @portal.categories.find_by!(slug: params[:category_slug])
end
def portal
@portal ||= Portal.find_by!(slug: params[:slug], archived: false)
end
def list_params
params.permit(:query)
end
def render_article_content(content)
# rubocop:disable Rails/OutputSafety
CommonMarker.render_html(content).html_safe
# rubocop:enable Rails/OutputSafety
end
end

View file

@ -1,6 +1,8 @@
class Public::Api::V1::Portals::CategoriesController < PublicController
before_action :set_portal
before_action :ensure_custom_domain_request, only: [:show, :index]
before_action :portal
before_action :set_category, only: [:show]
layout 'portal'
def index
@categories = @portal.categories
@ -11,10 +13,10 @@ class Public::Api::V1::Portals::CategoriesController < PublicController
private
def set_category
@category = @portal.categories.find_by!(slug: params[:slug])
@category = @portal.categories.find_by!(locale: params[:locale], slug: params[:category_slug])
end
def set_portal
@portal = ::Portal.find_by!(slug: params[:portal_slug], archived: false)
def portal
@portal ||= Portal.find_by!(slug: params[:slug], archived: false)
end
end

View file

@ -1,11 +1,13 @@
class Public::Api::V1::PortalsController < PublicController
before_action :set_portal
before_action :ensure_custom_domain_request, only: [:show]
before_action :portal
layout 'portal'
def show; end
private
def set_portal
@portal = ::Portal.find_by!(slug: params[:slug], archived: false)
def portal
@portal ||= Portal.find_by!(slug: params[:slug], archived: false)
end
end

View file

@ -3,4 +3,20 @@
class PublicController < ActionController::Base
include RequestExceptionHandler
skip_before_action :verify_authenticity_token
private
def ensure_custom_domain_request
domain = request.host
return if [URI.parse(ENV.fetch('FRONTEND_URL', '')).host, URI.parse(ENV.fetch('HELPCENTER_URL', '')).host].include?(domain)
@portal = ::Portal.find_by(custom_domain: domain)
return if @portal.present?
render json: {
error: "Domain: #{domain} is not registered with us. \
Please send us an email at support@chatwoot.com with the custom domain name and account API key"
}, status: :unauthorized and return
end
end

View file

@ -36,9 +36,15 @@ class SuperAdmin::AccountsController < SuperAdmin::ApplicationController
def resource_params
permitted_params = super
permitted_params[:limits] = permitted_params[:limits].to_h.compact
permitted_params[:selected_feature_flags] = params[:enabled_features].keys.map(&:to_sym) if params[:enabled_features].present?
permitted_params
end
# See https://administrate-prototype.herokuapp.com/customizing_controller_actions
# for more information
def seed
Internal::SeedAccountJob.perform_later(requested_resource)
redirect_back(fallback_location: [namespace, requested_resource], notice: 'Account seeding triggered')
end
end

View file

@ -44,12 +44,12 @@ class Twitter::CallbacksController < Twitter::BaseController
end
def create_inbox
twitter_profile = account.twitter_profiles.create(
twitter_profile = account.twitter_profiles.create!(
twitter_access_token: parsed_body['oauth_token'],
twitter_access_token_secret: parsed_body['oauth_token_secret'],
profile_id: parsed_body['user_id']
)
account.inboxes.create(
account.inboxes.create!(
name: parsed_body['screen_name'],
channel: twitter_profile
)

View file

@ -8,7 +8,15 @@ class AccountDashboard < Administrate::BaseDashboard
# which determines how the attribute is displayed
# on pages throughout the dashboard.
enterprise_attribute_types = ChatwootApp.enterprise? ? { limits: Enterprise::AccountLimitsField } : {}
enterprise_attribute_types = if ChatwootApp.enterprise?
{
limits: Enterprise::AccountLimitsField,
all_features: Enterprise::AccountFeaturesField
}
else
{}
end
ATTRIBUTE_TYPES = {
id: Field::Number,
name: Field::String,
@ -37,7 +45,7 @@ class AccountDashboard < Administrate::BaseDashboard
# SHOW_PAGE_ATTRIBUTES
# an array of attributes that will be displayed on the model's show page.
enterprise_show_page_attributes = ChatwootApp.enterprise? ? %i[limits] : []
enterprise_show_page_attributes = ChatwootApp.enterprise? ? %i[limits all_features] : []
SHOW_PAGE_ATTRIBUTES = (%i[
id
name
@ -52,7 +60,7 @@ class AccountDashboard < Administrate::BaseDashboard
# FORM_ATTRIBUTES
# an array of attributes that will be displayed
# on the model's form (`new` and `edit`) pages.
enterprise_form_attributes = ChatwootApp.enterprise? ? %i[limits] : []
enterprise_form_attributes = ChatwootApp.enterprise? ? %i[limits all_features] : []
FORM_ATTRIBUTES = (%i[
name
locale

View file

@ -2,6 +2,8 @@ require 'administrate/field/base'
class AvatarField < Administrate::Field::Base
def avatar_url
data.presence&.gsub('?d=404', '?d=mp')
return data.presence if data.presence
resource.is_a?(User) ? '/assets/administrate/user/avatar.png' : '/assets/administrate/bot/avatar.png'
end
end

View file

@ -0,0 +1,7 @@
require 'administrate/field/base'
class Enterprise::AccountFeaturesField < Administrate::Field::Base
def to_s
data
end
end

View file

@ -53,7 +53,7 @@ module Api::V1::InboxesHelper
rescue StandardError => e
raise StandardError, e.message
ensure
Rails.logger.error e if e.present?
ChatwootExceptionTracker.new(e).capture_exception if e.present?
end
def check_smtp_connection(channel_data, smtp)

View file

@ -21,6 +21,31 @@ class ArticlesAPI extends PortalsAPI {
if (category_slug) baseUrl += `&category_slug=${category_slug}`;
return axios.get(baseUrl);
}
getArticle({ id, portalSlug }) {
return axios.get(`${this.url}/${portalSlug}/articles/${id}`);
}
updateArticle({ portalSlug, articleId, articleObj }) {
return axios.patch(
`${this.url}/${portalSlug}/articles/${articleId}`,
articleObj
);
}
createArticle({ portalSlug, articleObj }) {
const { content, title, author_id, category_id } = articleObj;
return axios.post(`${this.url}/${portalSlug}/articles`, {
content,
title,
author_id,
category_id,
});
}
deleteArticle({ articleId, portalSlug }) {
return axios.delete(`${this.url}/${portalSlug}/articles/${articleId}`);
}
}
export default new ArticlesAPI();

View file

@ -15,8 +15,11 @@ class CategoriesAPI extends PortalsAPI {
return axios.post(`${this.url}/${portalSlug}/categories`, categoryObj);
}
update({ portalSlug, categoryObj }) {
return axios.patch(`${this.url}/${portalSlug}/categories`, categoryObj);
update({ portalSlug, categoryId, categoryObj }) {
return axios.patch(
`${this.url}/${portalSlug}/categories/${categoryId}`,
categoryObj
);
}
delete({ portalSlug, categoryId }) {

View file

@ -1,9 +1,18 @@
/* global axios */
import ApiClient from '../ApiClient';
class PortalsAPI extends ApiClient {
constructor() {
super('portals', { accountScoped: true });
}
updatePortal({ portalSlug, portalObj }) {
return axios.patch(`${this.url}/${portalSlug}`, portalObj);
}
deletePortal(portalSlug) {
return axios.delete(`${this.url}/${portalSlug}`);
}
}
export default PortalsAPI;

View file

@ -26,4 +26,41 @@ describe('#PortalAPI', () => {
);
});
});
describeWithAPIMock('API calls', context => {
it('#getArticle', () => {
articlesAPI.getArticle({
id: 1,
portalSlug: 'room-rental',
});
expect(context.axiosMock.get).toHaveBeenCalledWith(
'/api/v1/portals/room-rental/articles/1'
);
});
});
describeWithAPIMock('API calls', context => {
it('#updateArticle', () => {
articlesAPI.updateArticle({
articleId: 1,
portalSlug: 'room-rental',
articleObj: { title: 'Update shipping address' },
});
expect(context.axiosMock.patch).toHaveBeenCalledWith(
'/api/v1/portals/room-rental/articles/1',
{
title: 'Update shipping address',
}
);
});
});
describeWithAPIMock('API calls', context => {
it('#deleteArticle', () => {
articlesAPI.deleteArticle({
articleId: 1,
portalSlug: 'room-rental',
});
expect(context.axiosMock.delete).toHaveBeenCalledWith(
'/api/v1/portals/room-rental/articles/1'
);
});
});
});

View file

@ -370,7 +370,7 @@ $input-font-weight: $global-weight-normal;
$input-background: $white;
$input-background-focus: $white;
$input-background-disabled: $light-gray;
$input-border: 1px solid $color-border;
$input-border: 1px solid var(--s-200);
$input-border-focus: 1px solid lighten($primary-color, 15%);
$input-shadow: 0;
$input-shadow-focus: 0;

View file

@ -42,7 +42,6 @@
overflow: hidden;
}
.border-right {
border-right: 1px solid var(--color-border);
}
@ -66,3 +65,13 @@
display: flex;
justify-content: space-between;
}
.flex-end {
display: flex;
justify-content: end;
}
.flex-align-center {
align-items: center;
display: flex;
}

View file

@ -96,8 +96,8 @@
}
.multiselect__tags {
border: 1px solid $color-border;
border-color: $color-border;
border: 1px solid var(--s-200);
border-color: var(--s-200);
margin: 0;
min-height: 4.4rem;
padding-top: $zero;
@ -145,6 +145,7 @@
}
.sidebar-labels-wrap {
&.has-edited,
&:hover {
.multiselect {

View file

@ -91,10 +91,11 @@
font-size: $font-size-default;
line-height: 1;
padding-left: $space-medium;
}
.completed {
color: $success-color;
}
margin-left: $space-smaller;
}
p {

View file

@ -44,6 +44,52 @@ $default-button-height: 4.0rem;
padding-top: 0;
}
&.hollow {
border-color: var(--s-200);
color: var(--w-700);
&.secondary {
border-color: var(--s-200);
color: var(--s-700)
}
&.success {
border-color: var(--s-200);
color: var(--g-700)
}
&.alert {
border-color: var(--s-200);
color: var(--r-700)
}
&.warning {
border-color: var(--s-200);
color: var(--y-700)
}
&:hover {
background: var(--s-75);
border-color: var(--s-100);
&.secondary {
border-color: var(--s-100);
}
&.success {
border-color: var(--s-100);
}
&.alert {
border-color: var(--s-100);
}
&.warning {
border-color: var(--s-100);
}
}
}
// Smooth style
&.smooth {
@include button-style(var(--w-50), var(--w-100), var(--w-700));
@ -67,11 +113,12 @@ $default-button-height: 4.0rem;
}
&.clear {
&.warning {
color: var(--y-600);
}
&.button--only-icon:hover {
&:hover {
background: var(--w-50);
&.secondary {

View file

@ -85,7 +85,7 @@
.modal-footer {
@include flex;
@include flex-align($x: flex-start, $y: middle);
@include flex-align($x: flex-end, $y: middle);
padding: $space-small $zero;
button {

View file

@ -6,6 +6,9 @@
</h2>
<p v-if="headerContent" class="small-12 column wrap-content">
{{ headerContent }}
<span v-if="headerContentValue" class="content-value">
{{ headerContentValue }}
</span>
</p>
<slot />
</div>
@ -22,6 +25,10 @@ export default {
type: String,
default: '',
},
headerContentValue: {
type: String,
default: '',
},
headerImage: {
type: String,
default: '',
@ -32,5 +39,8 @@ export default {
<style scoped lang="scss">
.wrap-content {
word-wrap: break-word;
.content-value {
font-weight: var(--font-weight-bold);
}
}
</style>

View file

@ -11,8 +11,10 @@
@key-shortcut-modal="toggleKeyShortcutModal"
@open-notification-panel="openNotificationPanel"
/>
<div class="secondary-sidebar">
<secondary-sidebar
v-if="showSecondarySidebar"
:class="sidebarClassName"
:account-id="accountId"
:inboxes="inboxes"
:labels="labels"
@ -24,12 +26,12 @@
@add-label="showAddLabelPopup"
@toggle-accounts="toggleAccountModal"
/>
</div>
</aside>
</template>
<script>
import { mapGetters } from 'vuex';
import adminMixin from '../../mixins/isAdmin';
import { getSidebarItems } from './config/default-sidebar';
import alertMixin from 'shared/mixins/alertMixin';
@ -58,6 +60,10 @@ export default {
type: Boolean,
default: true,
},
sidebarClassName: {
type: String,
default: '',
},
},
data() {
return {
@ -74,6 +80,7 @@ export default {
inboxes: 'inboxes/getInboxes',
accountId: 'getCurrentAccountId',
currentRole: 'getCurrentRole',
isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount',
labels: 'labels/getLabelsOnSidebar',
teams: 'teams/getMyTeams',
}),
@ -102,9 +109,21 @@ export default {
},
primaryMenuItems() {
const menuItems = this.sideMenuConfig.primaryMenu;
return menuItems.filter(menuItem =>
menuItem.roles.includes(this.currentRole)
return menuItems.filter(menuItem => {
const isAvailableForTheUser = menuItem.roles.includes(this.currentRole);
if (!isAvailableForTheUser) {
return false;
}
if (menuItem.featureFlag) {
return this.isFeatureEnabledonAccount(
this.accountId,
menuItem.featureFlag
);
}
return true;
});
},
activeSecondaryMenu() {
const { secondaryMenu } = this.sideMenuConfig;
@ -214,6 +233,14 @@ export default {
width: 40rem;
}
}
.off-canvas-content.is-open-left {
transform: translateX(18.8rem);
}
.secondary-sidebar {
overflow-y: auto;
height: 100%;
}
.account-selector {
cursor: pointer;

View file

@ -33,6 +33,15 @@ const primaryMenuItems = accountId => [
toStateName: 'settings_account_campaigns',
roles: ['administrator'],
},
{
icon: 'library',
key: 'helpcenter',
label: 'HELP_CENTER.TITLE',
featureFlag: 'help_center',
toState: frontendURL(`accounts/${accountId}/portals`),
toStateName: 'list_all_portals',
roles: ['administrator'],
},
{
icon: 'settings',
key: 'settings',

View file

@ -13,8 +13,9 @@
<div v-if="showSwitchButton" class="account-context--switch-group">
<woot-button
variant="clear"
size="tiny"
icon="arrow-swap"
class="cursor-pointer"
class="switch-button"
@click="$emit('toggle-accounts')"
>
{{ $t('SIDEBAR.SWITCH') }}
@ -54,8 +55,7 @@ export default {
border: 1px solid var(--color-border);
font-size: var(--font-size-mini);
padding: var(--space-small);
margin-bottom: var(--space-small);
width: 100%;
margin: var(--space-small) var(--space-small) 0 var(--space-small);
position: relative;
&:hover {
@ -68,6 +68,10 @@ export default {
}
}
.switch-button {
margin-right: var(--space-small);
}
.account-context--switch-group {
--overlay-shadow: linear-gradient(
to right,

View file

@ -242,17 +242,33 @@ export default {
};
</script>
<style lang="scss" scoped>
@import '~dashboard/assets/scss/woot';
.secondary-menu {
display: flex;
flex-direction: column;
background: var(--white);
border-right: 1px solid var(--s-50);
height: 100%;
width: 19rem;
width: 20rem;
flex-shrink: 0;
overflow: hidden;
padding: var(--space-small);
overflow-y: hidden;
@include breakpoint(xlarge down) {
position: absolute;
}
@include breakpoint(xlarge up) {
position: unset;
}
&:hover {
overflow: auto;
overflow-y: hidden;
}
.menu {
padding: var(--space-small);
overflow-y: auto;
}
}
</style>

View file

@ -1,16 +1,19 @@
<template>
<li class="sidebar-item">
<div v-if="hasSubMenu" class="secondary-menu--wrap">
<span class="secondary-menu--title fs-small">
<span class="secondary-menu--header fs-small">
{{ $t(`SIDEBAR.${menuItem.label}`) }}
</span>
<div v-if="isHelpCenterSidebar" class="submenu-icons">
<div class="submenu-icon">
<fluent-icon icon="search" size="16" />
</div>
<div class="submenu-icon" @click="onClickOpen">
<woot-button
size="tiny"
variant="clear"
color-scheme="secondary"
class="submenu-icon"
@click="onClickOpen"
>
<fluent-icon icon="add" size="16" />
</div>
</woot-button>
</div>
</div>
<router-link
@ -217,13 +220,22 @@ export default {
.secondary-menu--wrap {
display: flex;
justify-content: space-between;
margin-top: var(--space-small);
}
.secondary-menu--header {
color: var(--s-700);
display: flex;
font-weight: var(--font-weight-bold);
line-height: var(--space-normal);
margin: var(--space-small) 0;
padding: 0 var(--space-small);
}
.secondary-menu--title {
color: var(--s-600);
display: flex;
font-weight: var(--font-weight-bold);
line-height: var(--space-two);
font-weight: var(--font-weight-medium);
line-height: var(--space-normal);
margin: var(--space-small) 0;
padding: 0 var(--space-small);
}
@ -235,6 +247,7 @@ export default {
padding: var(--space-small);
font-weight: var(--font-weight-medium);
border-radius: var(--border-radius-normal);
color: var(--s-700);
&:hover {
background: var(--s-25);
@ -326,19 +339,14 @@ export default {
align-items: center;
.submenu-icon {
padding: 0;
margin-left: var(--space-small);
color: var(--s-600);
&:hover {
cursor: pointer;
color: var(--w-500);
}
}
}
.empty-text {
color: var(--s-600);
color: var(--s-500);
font-size: var(--font-size-small);
margin: var(--space-smaller) 0;
margin: var(--space-smaller);
}
</style>

View file

@ -72,7 +72,9 @@ export default {
return this.color || getContrastingTextColor(this.bgColor);
},
labelClass() {
return `label ${this.colorScheme} ${this.small ? 'small' : ''}`;
return `label ${this.colorScheme} ${this.variant} ${
this.small ? 'small' : ''
}`;
},
labelStyle() {
if (this.bgColor) {
@ -146,6 +148,9 @@ export default {
a {
color: var(--w-900);
}
.label-color-dot {
background: var(--w-600);
}
}
&.secondary {
background: var(--s-100);
@ -154,6 +159,9 @@ export default {
a {
color: var(--s-900);
}
.label-color-dot {
background: var(--s-600);
}
}
&.success {
background: var(--g-100);
@ -162,6 +170,9 @@ export default {
a {
color: var(--g-900);
}
.label-color-dot {
background: var(--g-600);
}
}
&.alert {
background: var(--r-100);
@ -170,6 +181,9 @@ export default {
a {
color: var(--r-900);
}
.label-color-dot {
background: var(--r-600);
}
}
&.warning {
background: var(--y-100);
@ -178,6 +192,15 @@ export default {
a {
color: var(--y-900);
}
.label-color-dot {
background: var(--y-900);
}
}
&.smooth {
background: transparent;
border: 1px solid var(--s-75);
color: var(--s-800);
}
}

View file

@ -0,0 +1,88 @@
<template>
<span class="time-ago">
<span> {{ timeAgo }}</span>
</span>
</template>
<script>
const ZERO = 0;
const MINUTE_IN_MILLI_SECONDS = 60000;
const HOUR_IN_MILLI_SECONDS = MINUTE_IN_MILLI_SECONDS * 60;
const DAY_IN_MILLI_SECONDS = HOUR_IN_MILLI_SECONDS * 24;
import timeMixin from 'dashboard/mixins/time';
import { differenceInMilliseconds } from 'date-fns';
export default {
name: 'TimeAgo',
mixins: [timeMixin],
props: {
isAutoRefreshEnabled: {
type: Boolean,
default: true,
},
timestamp: {
type: [String, Date, Number],
default: '',
},
},
data() {
return {
timeAgo: '',
timer: null,
};
},
computed: {
refreshTime() {
const timeDiff = differenceInMilliseconds(
new Date(),
new Date(this.timestamp * 1000)
);
if (timeDiff > DAY_IN_MILLI_SECONDS) {
return DAY_IN_MILLI_SECONDS;
}
if (timeDiff > HOUR_IN_MILLI_SECONDS) {
return HOUR_IN_MILLI_SECONDS;
}
if (timeDiff > MINUTE_IN_MILLI_SECONDS) {
return MINUTE_IN_MILLI_SECONDS;
}
return ZERO;
},
},
mounted() {
this.timeAgo = this.dynamicTime(this.timestamp);
if (this.isAutoRefreshEnabled) {
this.createTimer();
}
},
beforeDestroy() {
this.clearTimer();
},
methods: {
createTimer() {
const refreshTime = this.refreshTime;
if (refreshTime > ZERO) {
this.timer = setTimeout(() => {
this.timeAgo = this.dynamicTime(this.timestamp);
this.createTimer();
}, refreshTime);
}
},
clearTimer() {
if (this.timer) {
clearTimeout(this.timer);
}
},
},
};
</script>
<style lang="scss" scoped>
.time-ago {
color: var(--b-600);
font-size: var(--font-size-micro);
font-weight: var(--font-weight-normal);
line-height: var(--space-normal);
margin-left: auto;
}
</style>

View file

@ -2,7 +2,7 @@
<transition-group
name="wizard-items"
tag="div"
class="wizard-box flex-child-shrink"
class="wizard-box"
:class="classObject"
>
<div
@ -11,12 +11,14 @@
class="item"
:class="{ active: isActive(item), over: isOver(item) }"
>
<h3>
<div class="flex-align-center">
<h3 class="text-truncate">
{{ item.title }}
</h3>
<span v-if="isOver(item)" class="completed">
<fluent-icon icon="checkmark" />
</span>
</h3>
</div>
<span class="step">
{{ items.indexOf(item) + 1 }}
</span>

View file

@ -14,7 +14,9 @@
:icon="icon"
:icon-size="iconSize"
/>
<span v-if="$slots.default" class="button__content"><slot /></span>
<span v-if="$slots.default" class="button__content">
<slot />
</span>
</button>
</template>
<script>

View file

@ -0,0 +1,30 @@
import TimeAgo from 'dashboard/components/ui/TimeAgo';
export default {
title: 'Components/TimeAgo',
component: TimeAgo,
argTypes: {
isAutoRefreshEnabled: {
control: {
type: 'boolean',
},
},
timestamp: {
control: {
type: 'text, date, number',
},
},
},
};
const Template = (args, { argTypes }) => ({
props: Object.keys(argTypes),
components: { TimeAgo },
template: '<time-ago v-bind="$props"></time-ago>',
});
export const TimeAgoView = Template.bind({});
TimeAgoView.args = {
timestamp: 1549843200,
isAutoRefreshEnabled: false,
};

View file

@ -38,6 +38,18 @@ export default {
return this.currentChat?.meta?.sender?.id;
},
},
mounted() {
window.onmessage = e => {
if (
typeof e.data !== 'string' ||
e.data !== 'chatwoot-dashboard-app:fetch-info'
) {
return;
}
this.onIframeLoad(0);
};
},
methods: {
onIframeLoad(index) {
const frameElement = document.getElementById(

View file

@ -26,8 +26,8 @@ export default {
</script>
<style lang="scss" scoped>
.page-top-banner {
border-bottom: 1px solid var(--color-border);
background: var(--color-background-light);
border-bottom: 1px solid var(--color-border-light);
background: var(--s-25);
padding: var(--space-normal) var(--space-large) 0;
}
</style>

View file

@ -14,7 +14,7 @@
>
<woot-button
size="small"
variant="clear"
variant="smooth"
color-scheme="secondary"
class-names="goto-first"
:is-disabled="hasFirstPage"
@ -29,7 +29,7 @@
</woot-button>
<woot-button
size="small"
variant="clear"
variant="smooth"
color-scheme="secondary"
:is-disabled="hasPrevPage"
@click="onPrevPage"
@ -38,7 +38,7 @@
</woot-button>
<woot-button
size="small"
variant="clear"
variant="smooth"
color-scheme="secondary"
@click.prevent
>
@ -46,7 +46,7 @@
</woot-button>
<woot-button
size="small"
variant="clear"
variant="smooth"
color-scheme="secondary"
:is-disabled="hasNextPage"
@click="onNextPage"
@ -55,7 +55,7 @@
</woot-button>
<woot-button
size="small"
variant="clear"
variant="smooth"
color-scheme="secondary"
class-names="goto-last"
:is-disabled="hasLastPage"

View file

@ -37,17 +37,6 @@
size="small"
/>
</file-upload>
<woot-button
v-if="enableRichEditor && !isOnPrivateNote"
v-tooltip.top-end="$t('CONVERSATION.REPLYBOX.TIP_FORMAT_ICON')"
icon="quote"
emoji="🖊️"
color-scheme="secondary"
variant="smooth"
size="small"
:title="$t('CONVERSATION.REPLYBOX.TIP_FORMAT_ICON')"
@click="toggleFormatMode"
/>
<woot-button
v-if="showAudioRecorderButton"
:icon="!isRecordingAudio ? 'microphone' : 'microphone-off'"
@ -128,15 +117,15 @@
<script>
import FileUpload from 'vue-upload-component';
import * as ActiveStorage from 'activestorage';
import {
hasPressedAltAndWKey,
hasPressedAltAndAKey,
} from 'shared/helpers/KeyboardHelpers';
import { hasPressedAltAndAKey } from 'shared/helpers/KeyboardHelpers';
import eventListenerMixins from 'shared/mixins/eventListenerMixins';
import uiSettingsMixin from 'dashboard/mixins/uiSettings';
import inboxMixin from 'shared/mixins/inboxMixin';
import { ALLOWED_FILE_TYPES } from 'shared/constants/messages';
import {
ALLOWED_FILE_TYPES,
ALLOWED_FILE_TYPES_FOR_TWILIO_WHATSAPP,
} from 'shared/constants/messages';
import { REPLY_EDITOR_MODES } from './constants';
export default {
@ -204,10 +193,6 @@ export default {
type: Boolean,
default: false,
},
setFormatMode: {
type: Function,
default: () => {},
},
isFormatMode: {
type: Boolean,
default: false,
@ -216,10 +201,6 @@ export default {
type: Boolean,
default: false,
},
enableRichEditor: {
type: Boolean,
default: false,
},
enterToSendEnabled: {
type: Boolean,
default: true,
@ -257,6 +238,9 @@ export default {
return this.showAudioRecorder && this.isRecordingAudio;
},
allowedFileTypes() {
if (this.isATwilioWhatsAppChannel) {
return ALLOWED_FILE_TYPES_FOR_TWILIO_WHATSAPP;
}
return ALLOWED_FILE_TYPES;
},
audioRecorderPlayStopIcon() {
@ -290,16 +274,10 @@ export default {
},
methods: {
handleKeyEvents(e) {
if (hasPressedAltAndWKey(e)) {
this.toggleFormatMode();
}
if (hasPressedAltAndAKey(e)) {
this.$refs.upload.$children[1].$el.click();
}
},
toggleFormatMode() {
this.setFormatMode(!this.isFormatMode);
},
toggleEnterToSend() {
this.$emit('toggleEnterToSend', !this.enterToSendEnabled);
},

View file

@ -87,7 +87,7 @@
</p>
<div class="conversation--meta">
<span class="timestamp">
{{ dynamicTime(chat.timestamp) }}
<time-ago :timestamp="chat.timestamp" />
</span>
<span class="unread">{{ unreadCount > 9 ? '9+' : unreadCount }}</span>
</div>
@ -123,6 +123,7 @@ import InboxName from '../InboxName';
import inboxMixin from 'shared/mixins/inboxMixin';
import ConversationContextMenu from './contextMenu/Index.vue';
import alertMixin from 'shared/mixins/alertMixin';
import timeAgo from 'dashboard/components/ui/TimeAgo';
const ATTACHMENT_ICONS = {
image: 'image',
@ -138,6 +139,7 @@ export default {
InboxName,
Thumbnail,
ConversationContextMenu,
timeAgo,
},
mixins: [

View file

@ -240,7 +240,7 @@ export default {
},
replyWindowBannerMessage() {
if (this.isAWhatsappChannel) {
if (this.isAWhatsAppChannel) {
return this.$t('CONVERSATION.TWILIO_WHATSAPP_CAN_REPLY');
}
if (this.isAPIInbox) {
@ -256,7 +256,7 @@ export default {
return this.$t('CONVERSATION.CANNOT_REPLY');
},
replyWindowLink() {
if (this.isAWhatsappChannel) {
if (this.isAWhatsAppChannel) {
return REPLY_POLICY.FACEBOOK;
}
if (!this.isAPIInbox) {
@ -265,7 +265,7 @@ export default {
return '';
},
replyWindowLinkText() {
if (this.isAWhatsappChannel) {
if (this.isAWhatsAppChannel) {
return this.$t('CONVERSATION.24_HOURS_WINDOW');
}
if (!this.isAPIInbox) {
@ -431,15 +431,15 @@ export default {
position: fixed;
left: unset;
position: absolute;
}
.emoji-dialog::before {
&::before {
transform: rotate(0deg);
left: 5px;
left: var(--space-half);
bottom: var(--space-minus-slab);
}
}
}
}
.sidebar-toggle__wrap {
display: flex;
justify-content: flex-end;

View file

@ -26,6 +26,7 @@
<emoji-input
v-if="showEmojiPicker"
v-on-clickaway="hideEmojiPicker"
:class="emojiDialogClassOnExpanedLayout"
:on-click="emojiOnClick"
/>
<reply-email-head
@ -106,10 +107,8 @@
:recording-audio-duration-text="recordingAudioDurationText"
:recording-audio-state="recordingAudioState"
:is-recording-audio="isRecordingAudio"
:set-format-mode="setFormatMode"
:is-on-private-note="isOnPrivateNote"
:is-format-mode="showRichContentEditor"
:enable-rich-editor="isRichEditorEnabled"
:enter-to-send-enabled="enterToSendEnabled"
:enable-multiple-file-upload="enableMultipleFileUpload"
:has-whatsapp-templates="hasWhatsappTemplates"
@ -144,7 +143,10 @@ import WootMessageEditor from 'dashboard/components/widgets/WootWriter/Editor';
import WootAudioRecorder from 'dashboard/components/widgets/WootWriter/AudioRecorder';
import messageFormatterMixin from 'shared/mixins/messageFormatterMixin';
import { checkFileSizeLimit } from 'shared/helpers/FileHelper';
import { MAXIMUM_FILE_UPLOAD_SIZE } from 'shared/constants/messages';
import {
MAXIMUM_FILE_UPLOAD_SIZE,
MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL,
} from 'shared/constants/messages';
import { BUS_EVENTS } from 'shared/constants/busEvents';
import WhatsappTemplates from './WhatsappTemplates/Modal.vue';
import {
@ -158,6 +160,7 @@ import inboxMixin from 'shared/mixins/inboxMixin';
import uiSettingsMixin from 'dashboard/mixins/uiSettings';
import { DirectUpload } from 'activestorage';
import { frontendURL } from '../../../helper/URLHelper';
import wootConstants from 'dashboard/constants';
export default {
components: {
@ -224,17 +227,10 @@ export default {
accountId: 'getCurrentAccountId',
}),
showRichContentEditor() {
if (this.isOnPrivateNote) {
if (this.isOnPrivateNote || this.isRichEditorEnabled) {
return true;
}
if (this.isRichEditorEnabled) {
const {
display_rich_content_editor: displayRichContentEditor,
} = this.uiSettings;
return displayRichContentEditor;
}
return false;
},
assignedAgent: {
@ -274,7 +270,7 @@ export default {
return !!this.uiSettings.enter_to_send_enabled;
},
isPrivate() {
if (this.currentChat.can_reply || this.isAWhatsappChannel) {
if (this.currentChat.can_reply || this.isAWhatsAppChannel) {
return this.isOnPrivateNote;
}
return true;
@ -321,7 +317,7 @@ export default {
if (this.isAFacebookInbox) {
return MESSAGE_MAX_LENGTH.FACEBOOK;
}
if (this.isAWhatsappChannel) {
if (this.isAWhatsAppChannel) {
return MESSAGE_MAX_LENGTH.TWILIO_WHATSAPP;
}
if (this.isASmsInbox) {
@ -338,7 +334,7 @@ export default {
return (
this.isAWebWidgetInbox ||
this.isAFacebookInbox ||
this.isAWhatsappChannel ||
this.isAWhatsAppChannel ||
this.isAPIInbox ||
this.isAnEmailChannel ||
this.isASmsInbox ||
@ -370,7 +366,7 @@ export default {
);
},
isRichEditorEnabled() {
return this.isAWebWidgetInbox || this.isAnEmailChannel;
return this.isAWebWidgetInbox || this.isAnEmailChannel || this.isAPIInbox;
},
showAudioRecorder() {
return !this.isOnPrivateNote && this.showFileUpload;
@ -385,6 +381,20 @@ export default {
const selectedTweet = this.selectedTweet || {};
return selectedTweet.id;
},
isOnExpandedLayout() {
const {
LAYOUT_TYPES: { CONDENSED },
} = wootConstants;
const {
conversation_display_type: conversationDisplayType = CONDENSED,
} = this.uiSettings;
return conversationDisplayType !== CONDENSED;
},
emojiDialogClassOnExpanedLayout() {
return this.isOnExpandedLayout && !this.popoutReplyBox
? 'emoji-dialog--expanded'
: '';
},
replyToUserLength() {
const selectedTweet = this.selectedTweet || {};
const {
@ -427,7 +437,7 @@ export default {
return;
}
if (canReply || this.isAWhatsappChannel) {
if (canReply || this.isAWhatsAppChannel) {
this.replyType = REPLY_EDITOR_MODES.REPLY;
} else {
this.replyType = REPLY_EDITOR_MODES.NOTE;
@ -550,6 +560,9 @@ export default {
}
const messagePayload = this.getMessagePayload(newMessage);
this.clearMessage();
if (!this.isPrivate) {
this.clearEmailField();
}
this.sendMessage(messagePayload);
this.hideEmojiPicker();
this.$emit('update:popoutReplyBox', false);
@ -583,7 +596,7 @@ export default {
setReplyMode(mode = REPLY_EDITOR_MODES.REPLY) {
const { can_reply: canReply } = this.currentChat;
if (canReply || this.isAWhatsappChannel) this.replyType = mode;
if (canReply || this.isAWhatsAppChannel) this.replyType = mode;
if (this.showRichContentEditor) {
if (this.isRecordingAudio) {
this.toggleAudioRecorder();
@ -598,9 +611,11 @@ export default {
clearMessage() {
this.message = '';
this.attachedFiles = [];
this.isRecordingAudio = false;
},
clearEmailField() {
this.ccEmails = '';
this.bccEmails = '';
this.isRecordingAudio = false;
},
toggleEmojiPicker() {
this.showEmojiPicker = !this.showEmojiPicker;
@ -610,6 +625,7 @@ export default {
this.isRecorderAudioStopped = !this.isRecordingAudio;
if (!this.isRecordingAudio) {
this.clearMessage();
this.clearEmailField();
}
},
toggleAudioRecorderPlayPause() {
@ -671,10 +687,14 @@ export default {
}
},
onDirectFileUpload(file) {
const MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE = this.isATwilioSMSChannel
? MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL
: MAXIMUM_FILE_UPLOAD_SIZE;
if (!file) {
return;
}
if (checkFileSizeLimit(file, MAXIMUM_FILE_UPLOAD_SIZE)) {
if (checkFileSizeLimit(file, MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE)) {
const upload = new DirectUpload(
file.file,
`/api/v1/accounts/${this.accountId}/conversations/${this.currentChat.id}/direct_uploads`,
@ -698,21 +718,24 @@ export default {
} else {
this.showAlert(
this.$t('CONVERSATION.FILE_SIZE_LIMIT', {
MAXIMUM_FILE_UPLOAD_SIZE,
MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE,
})
);
}
},
onIndirectFileUpload(file) {
const MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE = this.isATwilioSMSChannel
? MAXIMUM_FILE_UPLOAD_SIZE_TWILIO_SMS_CHANNEL
: MAXIMUM_FILE_UPLOAD_SIZE;
if (!file) {
return;
}
if (checkFileSizeLimit(file, MAXIMUM_FILE_UPLOAD_SIZE)) {
if (checkFileSizeLimit(file, MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE)) {
this.attachFile({ file });
} else {
this.showAlert(
this.$t('CONVERSATION.FILE_SIZE_LIMIT', {
MAXIMUM_FILE_UPLOAD_SIZE,
MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE,
})
);
}
@ -767,9 +790,6 @@ export default {
return messagePayload;
},
setFormatMode(value) {
this.updateUISettings({ display_rich_content_editor: value });
},
setCcEmails(value) {
this.bccEmails = value.bccEmails;
this.ccEmails = value.ccEmails;
@ -851,7 +871,18 @@ export default {
filter: drop-shadow(0px 4px 4px rgba(0, 0, 0, 0.08));
}
}
.emoji-dialog--expanded {
left: unset;
bottom: var(--space-jumbo);
position: absolute;
z-index: var(--z-index-normal);
&::before {
transform: rotate(0deg);
left: var(--space-half);
bottom: var(--space-minus-slab);
}
}
.message-signature {
margin-bottom: 0;

View file

@ -168,7 +168,7 @@ export default {
return (
this.isOutgoing &&
this.sourceId &&
(this.isAnEmailChannel || this.isAWhatsappChannel)
(this.isAnEmailChannel || this.isAWhatsAppChannel)
);
},
},

View file

@ -1,13 +1,22 @@
<template>
<modal :show.sync="show" :on-close="onClose">
<woot-modal-header :header-title="title" :header-content="message" />
<woot-modal-header
:header-title="title"
:header-content="message"
:header-content-value="messageValue"
/>
<div class="modal-footer delete-item">
<button class="alert button nice text-truncate" @click="onConfirm">
{{ confirmText }}
</button>
<button class="button clear text-truncate" @click="onClose">
<woot-button variant="clear" class="action-button" @click="onClose">
{{ rejectText }}
</button>
</woot-button>
<woot-button
color-scheme="alert"
class="action-button"
variant="smooth"
@click="onConfirm"
>
{{ confirmText }}
</woot-button>
</div>
</modal>
</template>
@ -25,8 +34,14 @@ export default {
onConfirm: { type: Function, default: () => {} },
title: { type: String, default: '' },
message: { type: String, default: '' },
messageValue: { type: String, default: '' },
confirmText: { type: String, default: '' },
rejectText: { type: String, default: '' },
},
};
</script>
<style lang="scss" scoped>
.action-button {
max-width: var(--space-giga);
}
</style>

View file

@ -65,12 +65,6 @@ export const SHORTCUT_KEYS = [
firstkey: 'Alt / ⌥',
secondKey: 'P',
},
{
id: 12,
label: 'TOGGLE_RICH_CONTENT_EDITOR',
firstkey: 'Alt / ⌥',
secondKey: 'W',
},
{
id: 13,
label: 'SWITCH_TO_REPLY',

View file

@ -12,6 +12,11 @@ export default {
SNOOZED: 'snoozed',
ALL: 'all',
},
ARTICLE_STATUS_TYPES: {
DRAFT: 0,
PUBLISH: 1,
ARCHIVE: 2,
},
LAYOUT_TYPES: {
CONDENSED: 'condensed',
EXPANDED: 'expanded',

View file

@ -0,0 +1,8 @@
export const getRandomColor = () => {
const letters = '0123456789ABCDEF';
let color = '#';
for (let i = 0; i < 6; i += 1) {
color += letters[Math.floor(Math.random() * 16)];
}
return color;
};

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "نشر",
"PREVIEW": "معاينة",
"ADD_TRANSLATION": "إضافة ترجمة",
"OPEN_SIDEBAR": "فتح الشريط الجانبي",
"CLOSE_SIDEBAR": "إغلاق الشريط الجانبي",
"SAVING": "حفظ المسودة...",
"SAVED": "تم حفظ المسودة"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "إنهاء"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "العودة",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "الاسم",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "الاسم مطلوب"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "إلغاء"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Finish"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "Back",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "Име",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "Name is required"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "Отмени"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Finish"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "Enrere",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "Nom",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "Name is required"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "Cancel·la"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Finish"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "Zpět",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "Název",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "Name is required"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "Zrušit"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Finish"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "Tilbage",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "Navn",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "Name is required"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "Annuller"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "Alle Artikel",
"PUBLISH_BUTTON": "Veröffentlichen",
"PREVIEW": "Vorschau",
"ADD_TRANSLATION": "Übersetzung hinzufügen",
"OPEN_SIDEBAR": "Seitenleiste öffnen",
"CLOSE_SIDEBAR": "Seitenleiste schließen",
"SAVING": "Entwurf speichern...",
"SAVED": "Entwurf gespeichert"
"SAVING": "Speichern...",
"SAVED": "Gespeichert"
},
"ARTICLE_SETTINGS": {
"TITLE": "Artikeleinstellungen",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Portal erstellen",
"SUB_TITLE": "Ein Hilfezentrum in Chatwoot wird als Portal bezeichnet. Sie können mehrere Portale und unterschiedliche Gebietsschemas für jedes Portal haben.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Abschließen"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "Zurück",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "Name",
"PLACEHOLDER": "Portalname",
"HELP_TEXT": "Der Name wird intern im öffentlich zugänglichen Portal verwendet",
"HELP_TEXT": "Der Name wird intern im öffentlich zugänglichen Portal verwendet.",
"ERROR": "Name wird benötigt"
},
"PAGE_TITLE": {
"LABEL": "Seitentitel",
"PLACEHOLDER": "Titel der Portalseite",
"HELP_TEXT": "Der Name wird im öffentlich zugänglichen Portal verwendet",
"ERROR": "Seitentitel ist erforderlich"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal-Slug für URLs",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Benutzerdefinierte Domain",
"PLACEHOLDER": "Benutzerdefinierte Domain des Portals",
"HELP_TEXT": "Nur hinzufügen, wenn Sie eine benutzerdefinierte Domain für Ihre Portale verwenden möchten",
"HELP_TEXT": "Nur hinzufügen, wenn Sie eine benutzerdefinierte Domain für Ihre Portale verwenden möchten.",
"ERROR": "Benutzerdefinierte Domäne ist erforderlich"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "Der Link, der verwendet wird, um vom Portal zur Startseite zurückzukehren.",
"ERROR": "Homepage-Link ist erforderlich"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Seitentitel",
"PLACEHOLDER": "Titel der Portalseite",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Seitentitel ist erforderlich"
},
"HEADER_TEXT": {
"LABEL": "Überschrift",
"PLACEHOLDER": "Portal-Header-Text",
"HELP_TEXT": "Portal-Header-Text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal-Kopfzeilentext ist erforderlich"
},
"BUTTONS": {
"CREATE": "Portal erstellen",
"CANCEL": "Stornieren"
},
"API": {
"SUCCESS_MESSAGE": "Portal erfolgreich erstellt.",
"ERROR_MESSAGE": "Das Portal konnte nicht erstellt werden. Versuchen Sie es nochmal."
"ERROR_MESSAGE_FOR_BASIC": "Das Portal konnte nicht erstellt werden. Versuchen Sie es nochmal.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Artikel wird geladen...",
"TITLE_PLACEHOLDER": "Artikeltitel kommt hier rein",
"CONTENT_PLACEHOLDER": "Schreiben Sie hier Ihren Artikel"
"CONTENT_PLACEHOLDER": "Schreiben Sie hier Ihren Artikel",
"API": {
"ERROR": "Fehler beim Speichern des Artikels"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Τέλος"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "Πίσω",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "Όνομα",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "Απαιτείται όνομα"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "Άκυρο"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -3,6 +3,7 @@
"NOT_AVAILABLE": "Not Available",
"EMAIL_ADDRESS": "Email Address",
"PHONE_NUMBER": "Phone number",
"IDENTIFIER": "Identifier",
"COPY_SUCCESSFUL": "Copied to clipboard successfully",
"COMPANY": "Company",
"LOCATION": "Location",

View file

@ -137,7 +137,7 @@
"ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully",
"ASSIGN_LABEL_FAILED": "Label assignment failed",
"CHANGE_TEAM": "Conversation team changed",
"FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit",
"FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit",
"MESSAGE_ERROR": "Unable to send this message, please try again later",
"SENT_BY": "Sent by:",
"BOT": "Bot",

View file

@ -18,13 +18,15 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"MOVE_TO_ARCHIVE_BUTTON": "Move to archived",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -63,6 +65,7 @@
},
"PORTAL": {
"HEADER": "Portals",
"DEFAULT": "Default",
"NEW_BUTTON": "New Portal",
"ACTIVE_BADGE": "active",
"CHOOSE_LOCALE_LABEL": "Choose a locale",
@ -83,7 +86,8 @@
"COUNT_LABEL": "articles",
"ADD": "Add locale",
"VISIT": "Visit site",
"SETTINGS": "Settings"
"SETTINGS": "Settings",
"DELETE": "Delete"
},
"PORTAL_CONFIG": {
"TITLE": "Portal Configurations",
@ -108,23 +112,102 @@
"DEFAULT_LOCALE": "Default"
}
}
},
"DELETE_PORTAL": {
"TITLE": "Delete portal",
"MESSAGE": "Are you sure you want to delete this portal",
"YES": "Yes, delete portal",
"NO": "No, keep portal",
"API": {
"DELETE_SUCCESS": "Portal deleted successfully",
"DELETE_ERROR": "Error while deleting portal"
}
}
},
"EDIT": {
"HEADER_TEXT": "Edit portal",
"TABS": {
"BASIC_SETTINGS": {
"TITLE": "Basic information"
},
"CUSTOMIZATION_SETTINGS": {
"TITLE": "Portal customization"
},
"CATEGORY_SETTINGS": {
"TITLE": "Categories"
},
"LOCALE_SETTINGS": {
"TITLE": "Locales"
}
},
"CATEGORIES": {
"TITLE": "Categories in",
"NEW_CATEGORY": "New category",
"TABLE": {
"NAME": "Name",
"DESCRIPTION": "Description",
"LOCALE": "Locale",
"ARTICLE_COUNT": "No. of articles",
"ACTION_BUTTON": {
"EDIT": "Edit category",
"DELETE": "Delete category"
},
"EMPTY_TEXT": "No categories found"
}
},
"EDIT_BASIC_INFO": {
"BUTTON_TEXT": "Update basic settings"
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Finish"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "Back",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "Name",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "Name is required"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +217,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +226,57 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"API": {
"SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.",
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
},
"ADD_LOCALE": {
"TITLE": "Add a new locale",
"SUB_TITLE": "This adds a new locale to your available translation list.",
"PORTAL": "Portal",
"LOCALE": {
"LABEL": "Locale",
"PLACEHOLDER": "Choose a locale",
"ERROR": "Locale is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CREATE": "Create locale",
"CANCEL": "Cancel"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"SUCCESS_MESSAGE": "Locale added successfully",
"ERROR_MESSAGE": "Unable to add locale. Try again."
}
},
"CHANGE_DEFAULT_LOCALE": {
"API": {
"SUCCESS_MESSAGE": "Default locale updated successfully",
"ERROR_MESSAGE": "Unable to update default locale. Try again."
}
},
"DELETE_LOCALE": {
"API": {
"SUCCESS_MESSAGE": "Locale removed from portal successfully",
"ERROR_MESSAGE": "Unable to remove locale from portal. Try again."
}
}
},
@ -175,8 +296,41 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"PUBLISH_ARTICLE": {
"API": {
"ERROR": "Error while publishing article",
"SUCCESS": "Article publishied successfully"
}
},
"ARCHIVE_ARTICLE": {
"API": {
"ERROR": "Error while archiving article",
"SUCCESS": "Article archived successfully"
}
},
"DELETE_ARTICLE": {
"MODAL": {
"CONFIRM": {
"TITLE": "Confirm Deletion",
"MESSAGE": "Are you sure to delete the article?",
"YES": "Yes, Delete",
"NO": "No, Keep it"
}
},
"API": {
"SUCCESS_MESSAGE": "Article deleted successfully",
"ERROR_MESSAGE": "Error while deleting article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings"
},
"SIDEBAR": {
"SEARCH": {
@ -214,6 +368,43 @@
"SUCCESS_MESSAGE": "Category created successfully",
"ERROR_MESSAGE": "Unable to create category"
}
},
"EDIT": {
"TITLE": "Edit a category",
"SUB_TITLE": "Editing a category will update the category in the public facing portal.",
"PORTAL": "Portal",
"LOCALE": "Locale",
"NAME": {
"LABEL": "Name",
"PLACEHOLDER": "Category name",
"HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.",
"ERROR": "Name is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Category slug for urls",
"HELP_TEXT": "app.chatwoot.com/portal/my-portal/en-US/categories/my-slug",
"ERROR": "Slug is required"
},
"DESCRIPTION": {
"LABEL": "Description",
"PLACEHOLDER": "Give a short description about the category.",
"ERROR": "Description is required"
},
"BUTTONS": {
"CREATE": "Update category",
"CANCEL": "Cancel"
},
"API": {
"SUCCESS_MESSAGE": "Category updated successfully",
"ERROR_MESSAGE": "Unable to update category"
}
},
"DELETE": {
"API": {
"SUCCESS_MESSAGE": "Category deleted successfully",
"ERROR_MESSAGE": "Unable to delete category"
}
}
}
}

View file

@ -193,6 +193,7 @@
"REPORTS_OVERVIEW": "Overview",
"FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services",
"HELP_CENTER": {
"TITLE": "Help Center (Beta)",
"ALL_ARTICLES": "All Articles",
"MY_ARTICLES": "My Articles",
"DRAFT": "Draft",
@ -253,7 +254,6 @@
"GO_TO_SETTINGS": "Go to Settings",
"SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status",
"SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note",
"TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor",
"SWITCH_TO_REPLY": "Switch to Reply",
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
},

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Finalizar"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "Atrás",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "Nombre",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "El nombre es requerido"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "Cancelar"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "همه مقالات",
"PUBLISH_BUTTON": "انتشار",
"PREVIEW": "پیش‌نمایش",
"ADD_TRANSLATION": "افزودن ترجمه",
"OPEN_SIDEBAR": "نوار کناری را باز کنید",
"CLOSE_SIDEBAR": "نوار کناری را ببندید",
"SAVING": "در حال ذخیره پیش‌نویس...",
"SAVED": "پیش‌نویس ذخیر شد"
"SAVING": "در حال ذخیره...",
"SAVED": "ذخیره شد"
},
"ARTICLE_SETTINGS": {
"TITLE": "تنظیمات مقاله",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "ایجاد پورتال",
"SUB_TITLE": "یک مرکز راهنمایی در Chatwoot به عنوان یک پورتال شناخته می‌شود. شما می‌توانید چندین پورتال، در هر قسمت متفاوتی داشته باشید.",
"CREATE_FLOW": [
{
"title": "اطلاعات مرکز راهنما",
"route": "new_portal_information",
"body": "اطلاعات اولیه در مورد پورتال",
"CREATE_BASIC_SETTING_BUTTON": "ایجاد تنظیمات اولیه پورتال"
},
{
"title": "سفارشی سازی مرکز راهنما",
"route": "portal_customization",
"body": "سفارشی کردن پورتال",
"UPDATE_PORTAL_BUTTON": "به‌روزرسانی تنظیمات پورتال"
},
{
"title": "هوراا ! 🎉",
"route": "portal_finish",
"body": "شما آماده‌اید!",
"FINISH": "پایان"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "بازگشت",
"BASIC_SETTINGS_PAGE": {
"HEADER": "ایجاد پورتال",
"TITLE": "اطلاعات مرکز راهنما",
"CREATE_BASIC_SETTING_BUTTON": "ایجاد تنظیمات اولیه پورتال"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "سفارشی سازی پورتال",
"TITLE": "سفارشی سازی مرکز راهنما",
"UPDATE_PORTAL_BUTTON": "به‌روزرسانی تنظیمات پورتال"
},
"FINISH_PAGE": {
"TITLE": "هوراا !🎉 شما آماده‌اید!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "نام",
"PLACEHOLDER": "نام پورتال",
"HELP_TEXT": "این نام به صورت داخلی در پورتال عمومی استفاده خواهد شد",
"HELP_TEXT": "این نام به صورت داخلی در پورتال عمومی استفاده خواهد شد.",
"ERROR": "نام الزامی است"
},
"PAGE_TITLE": {
"LABEL": "عنوان صفحه",
"PLACEHOLDER": "عنوان صفحه پورتال",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "عنوان صفحه الزامی است"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "دامنه سفارشی",
"PLACEHOLDER": "دامنه سفارشی پورتال",
"HELP_TEXT": "فقط اگر می‌خواهید از یک دامنه سفارشی برای پورتال‌های خود استفاده کنید، اضافه کنید",
"HELP_TEXT": "فقط اگر می‌خواهید از یک دامنه سفارشی برای پورتال‌های خود استفاده کنید، اضافه کنید.",
"ERROR": "دامنه سفارشی الزامی است"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "پیوند مورد استفاده برای بازگشت از پورتال به صفحه اصلی.",
"ERROR": "پیوند صفحه اصلی الزامی است"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "عنوان صفحه",
"PLACEHOLDER": "عنوان صفحه پورتال",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "عنوان صفحه الزامی است"
},
"HEADER_TEXT": {
"LABEL": "متن سرصفحه",
"PLACEHOLDER": "متن سرصفحه پورتال",
"HELP_TEXT": "متن سرصفحه پورتال",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "متن سرصفحه پورتال الزامی است"
},
"BUTTONS": {
"CREATE": "ایجاد پورتال",
"CANCEL": "انصراف"
},
"API": {
"SUCCESS_MESSAGE": "پورتال با موفقیت ایجاد شد.",
"ERROR_MESSAGE": "پورتال ایجاد نشد. دوباره امتحان کنید."
"ERROR_MESSAGE_FOR_BASIC": "پورتال ایجاد نشد. دوباره امتحان کنید.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "در حال بارگیری مقاله...",
"TITLE_PLACEHOLDER": "عنوان مقاله اینجاست",
"CONTENT_PLACEHOLDER": "مقاله خود را اینجا بنویسید"
"CONTENT_PLACEHOLDER": "مقاله خود را اینجا بنویسید",
"API": {
"ERROR": "خطا در هنگام ذخیره مقاله"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "مشکلی پیش آمد. لطفا دوباره تلاش کنید."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Finish"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "Takaisin",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "Nimi",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "Name is required"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "Peruuta"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Terminer"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "Précédent",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "Nom",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "Le nom est requis"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "Annuler"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Finish"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "חזור",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "שם",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "שם שדה חובה"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "ביטול"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Finish"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "Back",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "Name",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "Name is required"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "Cancel"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Befejezés"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "Vissza",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "Név",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "Name is required"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "Mégse"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Selesai"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "Kembali",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "Nama",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "Nama dibutuhkan"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "Batalkan"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "Tutti gli articoli",
"PUBLISH_BUTTON": "Pubblica",
"PREVIEW": "Anteprima",
"ADD_TRANSLATION": "Aggiungi traduzione",
"OPEN_SIDEBAR": "Apri barra laterale",
"CLOSE_SIDEBAR": "Chiudi barra laterale",
"SAVING": "Salvataggio bozza...",
"SAVED": "Bozza salvata"
"SAVING": "Salvataggio...",
"SAVED": "Salvato"
},
"ARTICLE_SETTINGS": {
"TITLE": "Impostazioni articolo",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Crea un portale",
"SUB_TITLE": "Un Centro Assistenza in Chatwoot è noto come portale. Puoi avere più portali e avere diverse lingue per ogni portale.",
"CREATE_FLOW": [
{
"title": "Informazioni del centro assistenza",
"route": "new_portal_information",
"body": "Informazioni di base sul portale",
"CREATE_BASIC_SETTING_BUTTON": "Crea impostazioni di base del portale"
},
{
"title": "Personalizzazione del centro assistenza",
"route": "portal_customization",
"body": "Personalizza portale",
"UPDATE_PORTAL_BUTTON": "Aggiorna impostazioni del portale"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "È tutto pronto!",
"FINISH": "Termina"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "Indietro",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Crea portale",
"TITLE": "Informazioni del centro assistenza",
"CREATE_BASIC_SETTING_BUTTON": "Crea impostazioni di base del portale"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Personalizzazione del portale",
"TITLE": "Personalizzazione del centro assistenza",
"UPDATE_PORTAL_BUTTON": "Aggiorna impostazioni del portale"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 È tutto configurato!",
"MESSAGE": "Ora puoi vedere questo portale creato sulla pagina di tutti i portali.",
"FINISH": "Vai a tutti i portali"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Carica logo",
"HELP_TEXT": "Questo logo verrà visualizzato nell'intestazione del portale."
},
"NAME": {
"LABEL": "Nome",
"PLACEHOLDER": "Nome del portale",
"HELP_TEXT": "Il nome sarà utilizzato nel portale pubblico rivolto internamente",
"HELP_TEXT": "Il nome sarà utilizzato nel portale pubblico rivolto internamente.",
"ERROR": "Il nome è obbligatorio"
},
"PAGE_TITLE": {
"LABEL": "Titolo pagina",
"PLACEHOLDER": "Titolo pagina del portale",
"HELP_TEXT": "Il nome verrà utilizzato nel portale pubblico",
"ERROR": "Il titolo della pagina è obbligatorio"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Slug portale per URLs",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Dominio personalizzato",
"PLACEHOLDER": "Dominio personalizzato del portale",
"HELP_TEXT": "Aggiungi solo se vuoi usare un dominio personalizzato per i tuoi portali",
"HELP_TEXT": "Aggiungi solo se vuoi usare un dominio personalizzato per i tuoi portali.",
"ERROR": "Dominio personalizzato richiesto"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "Il link utilizzato per tornare dal portale alla home page.",
"ERROR": "Il link della pagina iniziale è obbligatorio"
},
"THEME_COLOR": {
"LABEL": "Colore tema del portale",
"HELP_TEXT": "Questo colore verrà mostrato come colore del tema per il portale."
},
"PAGE_TITLE": {
"LABEL": "Titolo pagina",
"PLACEHOLDER": "Titolo pagina del portale",
"HELP_TEXT": "Il titolo della pagina verrà utilizzato nel portale pubblico.",
"ERROR": "Il titolo della pagina è obbligatorio"
},
"HEADER_TEXT": {
"LABEL": "Testo intestazione",
"PLACEHOLDER": "Testo intestazione del portale",
"HELP_TEXT": "Testo intestazione del portale",
"HELP_TEXT": "Il testo dell'intestazione del portale sarà utilizzato nel portale pubblico.",
"ERROR": "Il testo dell'intestazione del portale è obbligatorio"
},
"BUTTONS": {
"CREATE": "Crea portale",
"CANCEL": "annulla"
},
"API": {
"SUCCESS_MESSAGE": "Portale creato con successo.",
"ERROR_MESSAGE": "Impossibile creare il portale. Riprova."
"ERROR_MESSAGE_FOR_BASIC": "Impossibile creare il portale. Riprova.",
"ERROR_MESSAGE_FOR_UPDATE": "Impossibile aggiornare il portale. Riprova."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Caricamento articolo...",
"TITLE_PLACEHOLDER": "Il titolo dell'articolo va qui",
"CONTENT_PLACEHOLDER": "Scrivi qui il tuo articolo"
"CONTENT_PLACEHOLDER": "Scrivi qui il tuo articolo",
"API": {
"ERROR": "Errore durante il salvataggio dell'articolo"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Qualcosa è andato storto. Per favore, riprova."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Finish"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "戻る",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "名前",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "名前が必須です"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "キャンセル"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Finish"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "Back",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "Name",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "Name is required"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "Cancel"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "완료"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "뒤로",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "이름",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "Name is required"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "취소"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Finish"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "Back",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "Name",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "Name is required"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "Cancel"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -18,13 +18,14 @@
}
},
"EDIT_HEADER": {
"ALL_ARTICLES": "All Articles",
"PUBLISH_BUTTON": "Publish",
"PREVIEW": "Preview",
"ADD_TRANSLATION": "Add translation",
"OPEN_SIDEBAR": "Open sidebar",
"CLOSE_SIDEBAR": "Close sidebar",
"SAVING": "Draft saving...",
"SAVED": "Draft saved"
"SAVING": "Saving...",
"SAVED": "Saved"
},
"ARTICLE_SETTINGS": {
"TITLE": "Article Settings",
@ -111,20 +112,55 @@
}
},
"ADD": {
"TITLE": "Create a portal",
"SUB_TITLE": "A Help Center in Chatwoot is known as a portal. You can have multiple portals and can have different locales for each portal.",
"CREATE_FLOW": [
{
"title": "Help center information",
"route": "new_portal_information",
"body": "Basic information about portal",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
{
"title": "Help center customization",
"route": "portal_customization",
"body": "Customize portal",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
{
"title": "Voila! 🎉",
"route": "portal_finish",
"body": "You're all set!",
"FINISH": "Finish"
}
],
"CREATE_FLOW_PAGE": {
"BACK_BUTTON": "മടങ്ങിപ്പോവുക",
"BASIC_SETTINGS_PAGE": {
"HEADER": "Create Portal",
"TITLE": "Help center information",
"CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings"
},
"CUSTOMIZATION_PAGE": {
"HEADER": "Portal customisation",
"TITLE": "Help center customization",
"UPDATE_PORTAL_BUTTON": "Update portal settings"
},
"FINISH_PAGE": {
"TITLE": "Voila!🎉 You're all set up!",
"MESSAGE": "You can now see this created portal on your all portals page.",
"FINISH": "Go to all portals page"
}
},
"LOGO": {
"LABEL": "Logo",
"UPLOAD_BUTTON": "Upload logo",
"HELP_TEXT": "This logo will be displayed on the portal header."
},
"NAME": {
"LABEL": "പേര്",
"PLACEHOLDER": "Portal name",
"HELP_TEXT": "The name will be used in the public facing portal internally",
"HELP_TEXT": "The name will be used in the public facing portal internally.",
"ERROR": "നാമം ആവശ്യമാണ്"
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The name will be used in the public facing portal",
"ERROR": "Page title is required"
},
"SLUG": {
"LABEL": "Slug",
"PLACEHOLDER": "Portal slug for urls",
@ -134,7 +170,7 @@
"DOMAIN": {
"LABEL": "Custom Domain",
"PLACEHOLDER": "Portal custom domain",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals",
"HELP_TEXT": "Add only If you want to use a custom domain for your portals.",
"ERROR": "Custom Domain is required"
},
"HOME_PAGE_LINK": {
@ -143,19 +179,25 @@
"HELP_TEXT": "The link used to return from the portal to the home page.",
"ERROR": "Home Page Link is required"
},
"THEME_COLOR": {
"LABEL": "Portal theme color",
"HELP_TEXT": "This color will show as the theme color for the portal."
},
"PAGE_TITLE": {
"LABEL": "Page Title",
"PLACEHOLDER": "Portal page title",
"HELP_TEXT": "The page title will be used in the public facing portal.",
"ERROR": "Page title is required"
},
"HEADER_TEXT": {
"LABEL": "Header Text",
"PLACEHOLDER": "Portal header text",
"HELP_TEXT": "Portal header text",
"HELP_TEXT": "The Portal header text will be used in the public facing portal.",
"ERROR": "Portal header text is required"
},
"BUTTONS": {
"CREATE": "Create portal",
"CANCEL": "റദ്ദാക്കുക"
},
"API": {
"SUCCESS_MESSAGE": "Portal created successfully.",
"ERROR_MESSAGE": "Couldn't create the portal. Try again."
"ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.",
"ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again."
}
}
},
@ -175,8 +217,15 @@
}
},
"EDIT_ARTICLE": {
"LOADING": "Loading article...",
"TITLE_PLACEHOLDER": "Article title goes here",
"CONTENT_PLACEHOLDER": "Write your article here"
"CONTENT_PLACEHOLDER": "Write your article here",
"API": {
"ERROR": "Error while saving article"
}
},
"CREATE_ARTICLE": {
"ERROR_MESSAGE": "Something went wrong. Please try again."
},
"SIDEBAR": {
"SEARCH": {

View file

@ -0,0 +1,93 @@
{
"FILTER": {
"TITLE": "Filter Conversations",
"SUBTITLE": "Add filters below and hit 'Apply filters' to filter conversations.",
"ADD_NEW_FILTER": "Add Filter",
"FILTER_DELETE_ERROR": "You should have atleast one filter to save",
"SUBMIT_BUTTON_LABEL": "Apply filters",
"CANCEL_BUTTON_LABEL": "Cancel",
"CLEAR_BUTTON_LABEL": "Clear Filters",
"EMPTY_VALUE_ERROR": "Value is required",
"TOOLTIP_LABEL": "Filter conversations",
"QUERY_DROPDOWN_LABELS": {
"AND": "AND",
"OR": "OR"
},
"OPERATOR_LABELS": {
"equal_to": "Equal to",
"not_equal_to": "Not equal to",
"contains": "Contains",
"does_not_contain": "Does not contain",
"is_present": "Is present",
"is_not_present": "Is not present",
"is_greater_than": "Is greater than",
"is_less_than": "Is lesser than",
"days_before": "Is x days before"
},
"ATTRIBUTE_LABELS": {
"TRUE": "True",
"FALSE": "False"
},
"ATTRIBUTES": {
"STATUS": "Status",
"ASSIGNEE_NAME": "Assignee Name",
"INBOX_NAME": "Inbox Name",
"TEAM_NAME": "Team Name",
"CONVERSATION_IDENTIFIER": "Conversation Identifier",
"CAMPAIGN_NAME": "Campaign Name",
"LABELS": "Labels",
"BROWSER_LANGUAGE": "Browser Language",
"COUNTRY_NAME": "Country Name",
"REFERER_LINK": "Referer link",
"CUSTOM_ATTRIBUTE_LIST": "List",
"CUSTOM_ATTRIBUTE_TEXT": "Text",
"CUSTOM_ATTRIBUTE_NUMBER": "Number",
"CUSTOM_ATTRIBUTE_LINK": "Link",
"CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox",
"CREATED_AT": "Created At",
"LAST_ACTIVITY": "Last Activity"
},
"GROUPS": {
"STANDARD_FILTERS": "Standard Filters",
"ADDITIONAL_FILTERS": "Additional Filters",
"CUSTOM_ATTRIBUTES": "Custom Attributes"
},
"CUSTOM_VIEWS": {
"ADD": {
"TITLE": "Do you want to save this filter?",
"LABEL": "Name this filter",
"PLACEHOLDER": "Enter a name for this filter",
"ERROR_MESSAGE": "Name is required",
"SAVE_BUTTON": "Save filter",
"CANCEL_BUTTON": "Cancel",
"API_FOLDERS": {
"SUCCESS_MESSAGE": "Folder created successfully",
"ERROR_MESSAGE": "Error while creating folder"
},
"API_SEGMENTS": {
"SUCCESS_MESSAGE": "Segment created successfully",
"ERROR_MESSAGE": "Error while creating segment"
}
},
"DELETE": {
"DELETE_BUTTON": "Delete filter",
"MODAL": {
"CONFIRM": {
"TITLE": "Confirm Deletion",
"MESSAGE": "Are you sure to delete the filter ",
"YES": "Yes, Delete",
"NO": "No, Keep it"
}
},
"API_FOLDERS": {
"SUCCESS_MESSAGE": "Folder deleted successfully",
"ERROR_MESSAGE": "Error while deleting folder"
},
"API_SEGMENTS": {
"SUCCESS_MESSAGE": "Segment deleted successfully",
"ERROR_MESSAGE": "Error while deleting segment"
}
}
}
}
}

View file

@ -0,0 +1,113 @@
{
"AGENT_MGMT": {
"HEADER": "Agents",
"HEADER_BTN_TXT": "Add Agent",
"LOADING": "Fetching Agent List",
"SIDEBAR_TXT": "<p><b>Agents</b></p> <p> An <b>Agent</b> is a member of your Customer Support team. </p><p> Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account. </p><p> Click on <b>Add Agent</b> to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages. </p><p> Access to Chatwoot's features are based on following roles. </p><p> <b>Agent</b> - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.</p><p> <b>Administrator</b> - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.</p>",
"AGENT_TYPES": {
"ADMINISTRATOR": "Administrator",
"AGENT": "Agent"
},
"LIST": {
"404": "There are no agents associated to this account",
"TITLE": "Manage agents in your team",
"DESC": "You can add/remove agents to/in your team.",
"NAME": "Name",
"EMAIL": "EMAIL",
"STATUS": "Status",
"ACTIONS": "Actions",
"VERIFIED": "Verified",
"VERIFICATION_PENDING": "Verification Pending"
},
"ADD": {
"TITLE": "Add agent to your team",
"DESC": "You can add people who will be able to handle support for your inboxes.",
"CANCEL_BUTTON_TEXT": "Cancel",
"FORM": {
"NAME": {
"LABEL": "Agent Name",
"PLACEHOLDER": "Please enter a name of the agent"
},
"AGENT_TYPE": {
"LABEL": "Role",
"PLACEHOLDER": "Please select a role",
"ERROR": "Role is required"
},
"EMAIL": {
"LABEL": "Email Address",
"PLACEHOLDER": "Please enter an email address of the agent"
},
"SUBMIT": "Add Agent"
},
"API": {
"SUCCESS_MESSAGE": "Agent added successfully",
"EXIST_MESSAGE": "Agent email already in use, Please try another email address",
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"DELETE": {
"BUTTON_TEXT": "Delete",
"API": {
"SUCCESS_MESSAGE": "Agent deleted successfully",
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
},
"CONFIRM": {
"TITLE": "Confirm Deletion",
"MESSAGE": "Are you sure to delete ",
"YES": "Yes, Delete ",
"NO": "No, Keep "
}
},
"EDIT": {
"TITLE": "Edit agent",
"FORM": {
"NAME": {
"LABEL": "Agent Name",
"PLACEHOLDER": "Please enter a name of the agent"
},
"AGENT_TYPE": {
"LABEL": "Role",
"PLACEHOLDER": "Please select a role",
"ERROR": "Role is required"
},
"EMAIL": {
"LABEL": "Email Address",
"PLACEHOLDER": "Please enter an email address of the agent"
},
"SUBMIT": "Edit Agent"
},
"BUTTON_TEXT": "Edit",
"CANCEL_BUTTON_TEXT": "Cancel",
"API": {
"SUCCESS_MESSAGE": "Agent updated successfully",
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
},
"PASSWORD_RESET": {
"ADMIN_RESET_BUTTON": "Reset Password",
"ADMIN_SUCCESS_MESSAGE": "An email with reset password instructions has been sent to the agent",
"SUCCESS_MESSAGE": "Agent password reset successfully",
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"SEARCH": {
"NO_RESULTS": "No results found."
},
"MULTI_SELECTOR": {
"PLACEHOLDER": "None",
"TITLE": {
"AGENT": "Select agent",
"TEAM": "Select team"
},
"SEARCH": {
"NO_RESULTS": {
"AGENT": "No agents found",
"TEAM": "No teams found"
},
"PLACEHOLDER": {
"AGENT": "Search agents",
"TEAM": "Search teams"
}
}
}
}
}

View file

@ -0,0 +1,99 @@
{
"ATTRIBUTES_MGMT": {
"HEADER": "Custom Attributes",
"HEADER_BTN_TXT": "Add Custom Attribute",
"LOADING": "Fetching custom attributes",
"SIDEBAR_TXT": "<p><b>Custom Attributes</b> <p>A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc. <br /><br />For creating a Custom Attribute, just click on the <b>Add Custom Attribute.</b> You can also edit or delete an existing Custom Attribute by clicking on the Edit or Delete button.</p>",
"ADD": {
"TITLE": "Add Custom Attribute",
"SUBMIT": "Create",
"CANCEL_BUTTON_TEXT": "Cancel",
"FORM": {
"NAME": {
"LABEL": "Display Name",
"PLACEHOLDER": "Enter custom attribute display name",
"ERROR": "Name is required"
},
"DESC": {
"LABEL": "Description",
"PLACEHOLDER": "Enter custom attribute description",
"ERROR": "Description is required"
},
"MODEL": {
"LABEL": "Applies to",
"PLACEHOLDER": "Please select one",
"ERROR": "Model is required"
},
"TYPE": {
"LABEL": "Type",
"PLACEHOLDER": "Please select a type",
"ERROR": "Type is required",
"LIST": {
"LABEL": "List Values",
"PLACEHOLDER": "Please enter value and press enter key",
"ERROR": "Must have at least one value"
}
},
"KEY": {
"LABEL": "Key",
"PLACEHOLDER": "Enter custom attribute key",
"ERROR": "Key is required",
"IN_VALID": "Invalid key"
}
},
"API": {
"SUCCESS_MESSAGE": "Custom Attribute added successfully",
"ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later"
}
},
"DELETE": {
"BUTTON_TEXT": "Delete",
"API": {
"SUCCESS_MESSAGE": "Custom Attribute deleted successfully.",
"ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again."
},
"CONFIRM": {
"TITLE": "Are you sure want to delete - %{attributeName}",
"PLACE_HOLDER": "Please type {attributeName} to confirm",
"MESSAGE": "Deleting will remove the custom attribute",
"YES": "Delete ",
"NO": "Cancel"
}
},
"EDIT": {
"TITLE": "Edit Custom Attribute",
"UPDATE_BUTTON_TEXT": "Update",
"TYPE": {
"LIST": {
"LABEL": "List Values",
"PLACEHOLDER": "Please enter values and press enter key"
}
},
"API": {
"SUCCESS_MESSAGE": "Custom Attribute updated successfully",
"ERROR_MESSAGE": "There was an error updating custom attribute, please try again"
}
},
"TABS": {
"HEADER": "Custom Attributes",
"CONVERSATION": "Conversation",
"CONTACT": "Contact"
},
"LIST": {
"TABLE_HEADER": [
"Name",
"Description",
"Type",
"Key"
],
"BUTTONS": {
"EDIT": "Edit",
"DELETE": "Delete"
},
"EMPTY_RESULT": {
"404": "There are no custom attributes created",
"NOT_FOUND": "There are no custom attributes configured"
}
}
}
}

View file

@ -0,0 +1,116 @@
{
"AUTOMATION": {
"HEADER": "Automations",
"HEADER_BTN_TXT": "Add Automation Rule",
"LOADING": "Fetching automation rules",
"SIDEBAR_TXT": "<p><b>Automation Rules</b> <p>Automation can replace and automate existing processes that require manual effort. You can do many things with automation, including adding labels and assigning conversation to the best agent. So the team focuses on what they do best and spends more little time on manual tasks.</p>",
"ADD": {
"TITLE": "Add Automation Rule",
"SUBMIT": "Create",
"CANCEL_BUTTON_TEXT": "Cancel",
"FORM": {
"NAME": {
"LABEL": "Rule Name",
"PLACEHOLDER": "Enter rule name",
"ERROR": "Name is required"
},
"DESC": {
"LABEL": "Description",
"PLACEHOLDER": "Enter rule description",
"ERROR": "Description is required"
},
"EVENT": {
"LABEL": "Event",
"PLACEHOLDER": "Please select one",
"ERROR": "Event is required"
},
"CONDITIONS": {
"LABEL": "Conditions"
},
"ACTIONS": {
"LABEL": "Actions"
}
},
"CONDITION_BUTTON_LABEL": "Add Condition",
"ACTION_BUTTON_LABEL": "Add Action",
"API": {
"SUCCESS_MESSAGE": "Automation rule added successfully",
"ERROR_MESSAGE": "Could not able to create a automation rule, Please try again later"
}
},
"LIST": {
"TABLE_HEADER": [
"Name",
"Description",
"Active",
"Created on"
],
"404": "No automation rules found"
},
"DELETE": {
"TITLE": "Delete Automation Rule",
"SUBMIT": "Delete",
"CANCEL_BUTTON_TEXT": "Cancel",
"CONFIRM": {
"TITLE": "Confirm Deletion",
"MESSAGE": "Are you sure to delete ",
"YES": "Yes, Delete ",
"NO": "No, Keep "
},
"API": {
"SUCCESS_MESSAGE": "Automation rule deleted successfully",
"ERROR_MESSAGE": "Could not able to delete a automation rule, Please try again later"
}
},
"EDIT": {
"TITLE": "Edit Automation Rule",
"SUBMIT": "Update",
"CANCEL_BUTTON_TEXT": "Cancel",
"API": {
"SUCCESS_MESSAGE": "Automation rule updated successfully",
"ERROR_MESSAGE": "Could not update automation rule, Please try again later"
}
},
"CLONE": {
"TOOLTIP": "Clone",
"API": {
"SUCCESS_MESSAGE": "Automation cloned successfully",
"ERROR_MESSAGE": "Could not clone automation rule, Please try again later"
}
},
"FORM": {
"EDIT": "Edit",
"CREATE": "Create",
"DELETE": "Delete",
"CANCEL": "Cancel",
"RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below"
},
"CONDITION": {
"DELETE_MESSAGE": "You need to have atleast one condition to save"
},
"ACTION": {
"DELETE_MESSAGE": "You need to have atleast one action to save",
"TEAM_MESSAGE_INPUT_PLACEHOLDER": "Enter your message here",
"TEAM_DROPDOWN_PLACEHOLDER": "Select teams"
},
"TOGGLE": {
"ACTIVATION_TITLE": "Activate Automation Rule",
"DEACTIVATION_TITLE": "Deactivate Automation Rule",
"ACTIVATION_DESCRIPTION": "This action will activate the automation rule '{automationName}'. Are you sure you want to proceed?",
"DEACTIVATION_DESCRIPTION": "This action will deactivate the automation rule '{automationName}'. Are you sure you want to proceed?",
"ACTIVATION_SUCCESFUL": "Automation Rule Activated Successfully",
"DEACTIVATION_SUCCESFUL": "Automation Rule Deactivated Successfully",
"ACTIVATION_ERROR": "Could not Activate Automation, Please try again later",
"DEACTIVATION_ERROR": "Could not Deactivate Automation, Please try again later",
"CONFIRMATION_LABEL": "Yes",
"CANCEL_LABEL": "No"
},
"ATTACHMENT": {
"UPLOAD_ERROR": "Could not upload attachment, Please try again",
"LABEL_IDLE": "Upload Attachment",
"LABEL_UPLOADING": "Uploading...",
"LABEL_UPLOADED": "Succesfully Uploaded",
"LABEL_UPLOAD_FAILED": "Upload Failed"
}
}
}

View file

@ -0,0 +1,29 @@
{
"BULK_ACTION": {
"CONVERSATIONS_SELECTED": "%{conversationCount} conversations selected",
"AGENT_SELECT_LABEL": "Select Agent",
"ASSIGN_CONFIRMATION_LABEL": "Are you sure you want to assign %{conversationCount} %{conversationLabel} to",
"GO_BACK_LABEL": "Go back",
"ASSIGN_LABEL": "Assign",
"ASSIGN_AGENT_TOOLTIP": "Assign Agent",
"ASSIGN_SUCCESFUL": "Conversations assigned successfully",
"ASSIGN_FAILED": "Failed to assign conversations, please try again",
"RESOLVE_SUCCESFUL": "Conversations resolved successfully",
"RESOLVE_FAILED": "Failed to resolve conversations, please try again",
"ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.",
"AGENT_LIST_LOADING": "Loading Agents",
"UPDATE": {
"CHANGE_STATUS": "Change status",
"SNOOZE_UNTIL_NEXT_REPLY": "Snooze until next reply",
"UPDATE_SUCCESFUL": "Conversation status updated successfully.",
"UPDATE_FAILED": "Failed to update conversations, please try again"
},
"LABELS": {
"ASSIGN_LABELS": "Assign Labels",
"NO_LABELS_FOUND": "No labels found for",
"ASSIGN_SELECTED_LABELS": "Assign selected labels",
"ASSIGN_SUCCESFUL": "Labels assigned successfully",
"ASSIGN_FAILED": "Failed to assign labels, please try again"
}
}
}

View file

@ -0,0 +1,126 @@
{
"CAMPAIGN": {
"HEADER": "Campaigns",
"SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on <b>Add Campaign</b> to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.",
"HEADER_BTN_TXT": {
"ONE_OFF": "Create a one off campaign",
"ONGOING": "Create a ongoing campaign"
},
"ADD": {
"TITLE": "Create a campaign",
"DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.",
"CANCEL_BUTTON_TEXT": "Cancel",
"CREATE_BUTTON_TEXT": "Create",
"FORM": {
"TITLE": {
"LABEL": "Title",
"PLACEHOLDER": "Please enter the title of campaign",
"ERROR": "Title is required"
},
"SCHEDULED_AT": {
"LABEL": "Scheduled time",
"PLACEHOLDER": "Please select the time",
"CONFIRM": "Confirm",
"ERROR": "Scheduled time is required"
},
"AUDIENCE": {
"LABEL": "Audience",
"PLACEHOLDER": "Select the customer labels",
"ERROR": "Audience is required"
},
"INBOX": {
"LABEL": "Select Inbox",
"PLACEHOLDER": "Select Inbox",
"ERROR": "Inbox is required"
},
"MESSAGE": {
"LABEL": "Message",
"PLACEHOLDER": "Please enter the message of campaign",
"ERROR": "Message is required"
},
"SENT_BY": {
"LABEL": "Sent by",
"PLACEHOLDER": "Please select the the content of campaign",
"ERROR": "Sender is required"
},
"END_POINT": {
"LABEL": "URL",
"PLACEHOLDER": "Please enter the URL",
"ERROR": "Please enter a valid URL"
},
"TIME_ON_PAGE": {
"LABEL": "Time on page(Seconds)",
"PLACEHOLDER": "Please enter the time",
"ERROR": "Time on page is required"
},
"ENABLED": "Enable campaign",
"TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours",
"SUBMIT": "Add Campaign"
},
"API": {
"SUCCESS_MESSAGE": "Campaign created successfully",
"ERROR_MESSAGE": "There was an error. Please try again."
}
},
"DELETE": {
"BUTTON_TEXT": "Delete",
"CONFIRM": {
"TITLE": "Confirm Deletion",
"MESSAGE": "Are you sure to delete?",
"YES": "Yes, Delete ",
"NO": "No, Keep "
},
"API": {
"SUCCESS_MESSAGE": "Campaign deleted successfully",
"ERROR_MESSAGE": "Could not delete the campaign. Please try again later."
}
},
"EDIT": {
"TITLE": "Edit campaign",
"UPDATE_BUTTON_TEXT": "Update",
"API": {
"SUCCESS_MESSAGE": "Campaign updated successfully",
"ERROR_MESSAGE": "There was an error, please try again"
}
},
"LIST": {
"LOADING_MESSAGE": "Loading campaigns...",
"404": "There are no campaigns created for this inbox.",
"TABLE_HEADER": {
"TITLE": "Title",
"MESSAGE": "Message",
"INBOX": "Inbox",
"STATUS": "Status",
"SENDER": "Sender",
"URL": "URL",
"SCHEDULED_AT": "Scheduled time",
"TIME_ON_PAGE": "Time(Seconds)",
"CREATED_AT": "Created at"
},
"BUTTONS": {
"ADD": "Add",
"EDIT": "Edit",
"DELETE": "Delete"
},
"STATUS": {
"ENABLED": "Enabled",
"DISABLED": "Disabled",
"COMPLETED": "Completed",
"ACTIVE": "Active"
},
"SENDER": {
"BOT": "Bot"
}
},
"ONE_OFF": {
"HEADER": "One off campaigns",
"404": "There are no one off campaigns created",
"INBOXES_NOT_FOUND": "Please create an sms inbox and start adding campaigns"
},
"ONGOING": {
"HEADER": "Ongoing campaigns",
"404": "There are no ongoing campaigns created",
"INBOXES_NOT_FOUND": "Please create an website inbox and start adding campaigns"
}
}
}

View file

@ -0,0 +1,76 @@
{
"CANNED_MGMT": {
"HEADER": "Canned Responses",
"HEADER_BTN_TXT": "Add Canned Response",
"LOADING": "Fetching Canned Responses",
"SEARCH_404": "There are no items matching this query",
"SIDEBAR_TXT": "<p><b>Canned Responses</b> </p><p> Canned Responses are saved reply templates which can be used to quickly send out a reply to a conversation. </p><p> For creating a Canned Response, just click on the <b>Add Canned Response</b>. You can also edit or delete an existing Canned Response by clicking on the Edit or Delete button </p><p> Canned responses are used with the help of <b>Short Codes</b>. Agents can access canned responses while on a chat by typing <b>'/'</b> followed by the short code. </p>",
"LIST": {
"404": "There are no canned responses available in this account.",
"TITLE": "Manage canned responses",
"DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to tickets.",
"TABLE_HEADER": [
"Short Code",
"Content",
"Actions"
]
},
"ADD": {
"TITLE": "Add Canned Response",
"DESC": "Canned Responses are saved reply templates which can be used to quickly send out reply to conversation.",
"CANCEL_BUTTON_TEXT": "Cancel",
"FORM": {
"SHORT_CODE": {
"LABEL": "Short Code",
"PLACEHOLDER": "Please enter a short code",
"ERROR": "Short Code is required"
},
"CONTENT": {
"LABEL": "Content",
"PLACEHOLDER": "Please enter a content",
"ERROR": "Content is required"
},
"SUBMIT": "Submit"
},
"API": {
"SUCCESS_MESSAGE": "Canned Response added successfully",
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"EDIT": {
"TITLE": "Edit Canned Response",
"CANCEL_BUTTON_TEXT": "Cancel",
"FORM": {
"SHORT_CODE": {
"LABEL": "Short Code",
"PLACEHOLDER": "Please enter a shortcode",
"ERROR": "Short Code is required"
},
"CONTENT": {
"LABEL": "Content",
"PLACEHOLDER": "Please enter a content",
"ERROR": "Content is required"
},
"SUBMIT": "Submit"
},
"BUTTON_TEXT": "Edit",
"API": {
"SUCCESS_MESSAGE": "Canned Response updated successfully",
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
}
},
"DELETE": {
"BUTTON_TEXT": "Delete",
"API": {
"SUCCESS_MESSAGE": "Canned response deleted successfully",
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
},
"CONFIRM": {
"TITLE": "Confirm Deletion",
"MESSAGE": "Are you sure to delete ",
"YES": "Yes, Delete ",
"NO": "No, Keep "
}
}
}
}

View file

@ -0,0 +1,65 @@
{
"CHAT_LIST": {
"LOADING": "Fetching conversations",
"LOAD_MORE_CONVERSATIONS": "Load more conversations",
"EOF": "All conversations loaded 🎉",
"LIST": {
"404": "There are no active conversations in this group."
},
"TAB_HEADING": "Conversations",
"MENTION_HEADING": "Mentions",
"SEARCH": {
"INPUT": "Search for People, Chats, Saved Replies .."
},
"FILTER_ALL": "All",
"ASSIGNEE_TYPE_TABS": {
"me": "Mine",
"unassigned": "Unassigned",
"all": "All"
},
"CHAT_STATUS_FILTER_ITEMS": {
"open": {
"TEXT": "Open"
},
"resolved": {
"TEXT": "Resolved"
},
"pending": {
"TEXT": "Pending"
},
"snoozed": {
"TEXT": "Snoozed"
}
},
"ATTACHMENTS": {
"image": {
"CONTENT": "Picture message"
},
"audio": {
"CONTENT": "Audio message"
},
"video": {
"CONTENT": "Video message"
},
"file": {
"CONTENT": "File Attachment"
},
"location": {
"CONTENT": "Location"
},
"fallback": {
"CONTENT": "has shared a url"
}
},
"RECEIVED_VIA_EMAIL": "Received via email",
"VIEW_TWEET_IN_TWITTER": "View tweet in Twitter",
"REPLY_TO_TWEET": "Reply to this tweet",
"LINK_TO_STORY": "Go to instagram story",
"SENT": "Sent successfully",
"NO_MESSAGES": "No Messages",
"NO_CONTENT": "No content available",
"HIDE_QUOTED_TEXT": "Hide Quoted Text",
"SHOW_QUOTED_TEXT": "Show Quoted Text",
"MESSAGE_READ": "Read"
}
}

View file

@ -0,0 +1,346 @@
{
"CONTACT_PANEL": {
"NOT_AVAILABLE": "Not Available",
"EMAIL_ADDRESS": "Email Address",
"PHONE_NUMBER": "Phone number",
"COPY_SUCCESSFUL": "Copied to clipboard successfully",
"COMPANY": "Company",
"LOCATION": "Location",
"BROWSER_LANGUAGE": "Browser Language",
"CONVERSATION_TITLE": "Conversation Details",
"VIEW_PROFILE": "View Profile",
"BROWSER": "Browser",
"OS": "Operating System",
"INITIATED_FROM": "Initiated from",
"INITIATED_AT": "Initiated at",
"IP_ADDRESS": "IP Address",
"NEW_MESSAGE": "New message",
"CONVERSATIONS": {
"NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.",
"TITLE": "Previous Conversations"
},
"LABELS": {
"CONTACT": {
"TITLE": "Contact Labels",
"ERROR": "Couldn't update labels"
},
"CONVERSATION": {
"TITLE": "Conversation Labels",
"ADD_BUTTON": "Add Labels"
},
"LABEL_SELECT": {
"TITLE": "Add Labels",
"PLACEHOLDER": "Search labels",
"NO_RESULT": "No labels found"
}
},
"MERGE_CONTACT": "Merge contact",
"CONTACT_ACTIONS": "Contact actions",
"MUTE_CONTACT": "Mute Conversation",
"UNMUTE_CONTACT": "Unmute Conversation",
"MUTED_SUCCESS": "This conversation is muted for 6 hours",
"UNMUTED_SUCCESS": "This conversation is unmuted",
"SEND_TRANSCRIPT": "Send Transcript",
"EDIT_LABEL": "Edit",
"SIDEBAR_SECTIONS": {
"CUSTOM_ATTRIBUTES": "Custom Attributes",
"CONTACT_LABELS": "Contact Labels",
"PREVIOUS_CONVERSATIONS": "Previous Conversations"
}
},
"EDIT_CONTACT": {
"BUTTON_LABEL": "Edit Contact",
"TITLE": "Edit contact",
"DESC": "Edit contact details"
},
"CREATE_CONTACT": {
"BUTTON_LABEL": "New Contact",
"TITLE": "Create new contact",
"DESC": "Add basic information details about the contact."
},
"IMPORT_CONTACTS": {
"BUTTON_LABEL": "Import",
"TITLE": "Import Contacts",
"DESC": "Import contacts through a CSV file.",
"DOWNLOAD_LABEL": "Download a sample csv.",
"FORM": {
"LABEL": "CSV File",
"SUBMIT": "Import",
"CANCEL": "Cancel"
},
"SUCCESS_MESSAGE": "Contacts saved successfully",
"ERROR_MESSAGE": "There was an error, please try again"
},
"DELETE_NOTE": {
"CONFIRM": {
"TITLE": "Confirm Deletion",
"MESSAGE": "Are you want sure to delete this note?",
"YES": "Yes, Delete it",
"NO": "No, Keep it"
}
},
"DELETE_CONTACT": {
"BUTTON_LABEL": "Delete Contact",
"TITLE": "Delete contact",
"DESC": "Delete contact details",
"CONFIRM": {
"TITLE": "Confirm Deletion",
"MESSAGE": "Are you sure to delete ",
"YES": "Yes, Delete",
"NO": "No, Keep"
},
"API": {
"SUCCESS_MESSAGE": "Contact deleted successfully",
"ERROR_MESSAGE": "Could not delete contact. Please try again later."
}
},
"CONTACT_FORM": {
"FORM": {
"SUBMIT": "Submit",
"CANCEL": "Cancel",
"AVATAR": {
"LABEL": "Contact Avatar"
},
"NAME": {
"PLACEHOLDER": "Enter the full name of the contact",
"LABEL": "Full Name"
},
"BIO": {
"PLACEHOLDER": "Enter the bio of the contact",
"LABEL": "Bio"
},
"EMAIL_ADDRESS": {
"PLACEHOLDER": "Enter the email address of the contact",
"LABEL": "Email Address",
"DUPLICATE": "This email address is in use for another contact.",
"ERROR": "Please enter a valid email address."
},
"PHONE_NUMBER": {
"PLACEHOLDER": "Enter the phone number of the contact",
"LABEL": "Phone Number",
"HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]",
"ERROR": "Phone number should be either empty or of E.164 format",
"DUPLICATE": "This phone number is in use for another contact."
},
"LOCATION": {
"PLACEHOLDER": "Enter the location of the contact",
"LABEL": "Location"
},
"COMPANY_NAME": {
"PLACEHOLDER": "Enter the company name",
"LABEL": "Company Name"
},
"SOCIAL_PROFILES": {
"FACEBOOK": {
"PLACEHOLDER": "Enter the Facebook username",
"LABEL": "Facebook"
},
"TWITTER": {
"PLACEHOLDER": "Enter the Twitter username",
"LABEL": "Twitter"
},
"LINKEDIN": {
"PLACEHOLDER": "Enter the LinkedIn username",
"LABEL": "LinkedIn"
},
"GITHUB": {
"PLACEHOLDER": "Enter the Github username",
"LABEL": "Github"
}
}
},
"DELETE_AVATAR": {
"API": {
"SUCCESS_MESSAGE": "Contact avatar deleted successfully",
"ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later."
}
},
"SUCCESS_MESSAGE": "Contact saved successfully",
"ERROR_MESSAGE": "There was an error, please try again"
},
"NEW_CONVERSATION": {
"BUTTON_LABEL": "Start conversation",
"TITLE": "New conversation",
"DESC": "Start a new conversation by sending a new message.",
"NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.",
"FORM": {
"TO": {
"LABEL": "To"
},
"INBOX": {
"LABEL": "Inbox",
"ERROR": "Select an inbox"
},
"SUBJECT": {
"LABEL": "Subject",
"PLACEHOLDER": "Subject",
"ERROR": "Subject can't be empty"
},
"MESSAGE": {
"LABEL": "Message",
"PLACEHOLDER": "Write your message here",
"ERROR": "Message can't be empty"
},
"SUBMIT": "Send message",
"CANCEL": "Cancel",
"SUCCESS_MESSAGE": "Message sent!",
"GO_TO_CONVERSATION": "View",
"ERROR_MESSAGE": "Couldn't send! try again"
}
},
"CONTACTS_PAGE": {
"HEADER": "Contacts",
"FIELDS": "Contact fields",
"SEARCH_BUTTON": "Search",
"SEARCH_INPUT_PLACEHOLDER": "Search for contacts",
"FILTER_CONTACTS": "Filter",
"FILTER_CONTACTS_SAVE": "Save filter",
"FILTER_CONTACTS_DELETE": "Delete filter",
"LIST": {
"LOADING_MESSAGE": "Loading contacts...",
"404": "No contacts matches your search 🔍",
"NO_CONTACTS": "There are no available contacts",
"TABLE_HEADER": {
"NAME": "Name",
"PHONE_NUMBER": "Phone Number",
"CONVERSATIONS": "Conversations",
"LAST_ACTIVITY": "Last Activity",
"COUNTRY": "Country",
"CITY": "City",
"SOCIAL_PROFILES": "Social Profiles",
"COMPANY": "Company",
"EMAIL_ADDRESS": "Email Address"
},
"VIEW_DETAILS": "View details"
}
},
"CONTACT_PROFILE": {
"BACK_BUTTON": "Contacts",
"LOADING": "Loading contact profile..."
},
"REMINDER": {
"ADD_BUTTON": {
"BUTTON": "Add",
"TITLE": "Shift + Enter to create a task"
},
"FOOTER": {
"DUE_DATE": "Due date",
"LABEL_TITLE": "Set type"
}
},
"NOTES": {
"FETCHING_NOTES": "Fetching notes...",
"NOT_AVAILABLE": "There are no notes created for this contact",
"HEADER": {
"TITLE": "Notes"
},
"LIST": {
"LABEL": "added a note"
},
"ADD": {
"BUTTON": "Add",
"PLACEHOLDER": "Add a note",
"TITLE": "Shift + Enter to create a note"
},
"CONTENT_HEADER": {
"DELETE": "Delete note"
}
},
"EVENTS": {
"HEADER": {
"TITLE": "Activities"
},
"BUTTON": {
"PILL_BUTTON_NOTES": "notes",
"PILL_BUTTON_EVENTS": "events",
"PILL_BUTTON_CONVO": "conversations"
}
},
"CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Add attributes",
"BUTTON": "Add custom attribute",
"NOT_AVAILABLE": "There are no custom attributes available for this contact.",
"COPY_SUCCESSFUL": "Copied to clipboard successfully",
"ACTIONS": {
"COPY": "Copy attribute",
"DELETE": "Delete attribute",
"EDIT": "Edit attribute"
},
"ADD": {
"TITLE": "Create custom attribute",
"DESC": "Add custom information to this contact."
},
"FORM": {
"CREATE": "Add attribute",
"CANCEL": "Cancel",
"NAME": {
"LABEL": "Custom attribute name",
"PLACEHOLDER": "Eg: shopify id",
"ERROR": "Invalid custom attribute name"
},
"VALUE": {
"LABEL": "Attribute value",
"PLACEHOLDER": "Eg: 11901 "
},
"ADD": {
"TITLE": "Create new attribute ",
"SUCCESS": "Attribute added successfully",
"ERROR": "Unable to add attribute. Please try again later"
},
"UPDATE": {
"SUCCESS": "Attribute updated successfully",
"ERROR": "Unable to update attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Attribute deleted successfully",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
},
"ATTRIBUTE_TYPE": {
"LIST": {
"PLACEHOLDER": "Select value",
"SEARCH_INPUT_PLACEHOLDER": "Search value",
"NO_RESULT": "No result found"
}
}
},
"VALIDATIONS": {
"REQUIRED": "Valid value is required",
"INVALID_URL": "Invalid URL"
}
},
"MERGE_CONTACTS": {
"TITLE": "Merge contacts",
"DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact s attributes will take precedence.",
"PRIMARY": {
"TITLE": "Primary contact",
"HELP_LABEL": "To be kept"
},
"CHILD": {
"TITLE": "Contact to merge",
"PLACEHOLDER": "Search for a contact",
"HELP_LABEL": "To be deleted"
},
"SUMMARY": {
"TITLE": "Summary",
"DELETE_WARNING": "Contact of <strong>%{childContactName}</strong> will be deleted.",
"ATTRIBUTE_WARNING": "Contact details of <strong>%{childContactName}</strong> will be copied to <strong>%{primaryContactName}</strong>."
},
"SEARCH": {
"ERROR": "ERROR_MESSAGE"
},
"FORM": {
"SUBMIT": " Merge contacts",
"CANCEL": "Cancel",
"CHILD_CONTACT": {
"ERROR": "Select a child contact to merge"
},
"SUCCESS_MESSAGE": "Contact merged successfully",
"ERROR_MESSAGE": "Could not merge contacts, try again!"
}
}
}

View file

@ -0,0 +1,50 @@
{
"CONTACTS_FILTER": {
"TITLE": "Filter Contacts",
"SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.",
"ADD_NEW_FILTER": "Add Filter",
"CLEAR_ALL_FILTERS": "Clear All Filters",
"FILTER_DELETE_ERROR": "You should have atleast one filter to save",
"SUBMIT_BUTTON_LABEL": "Submit",
"CANCEL_BUTTON_LABEL": "Cancel",
"CLEAR_BUTTON_LABEL": "Clear Filters",
"EMPTY_VALUE_ERROR": "Value is required",
"TOOLTIP_LABEL": "Filter contacts",
"QUERY_DROPDOWN_LABELS": {
"AND": "AND",
"OR": "OR"
},
"OPERATOR_LABELS": {
"equal_to": "Equal to",
"not_equal_to": "Not equal to",
"contains": "Contains",
"does_not_contain": "Does not contain",
"is_present": "Is present",
"is_not_present": "Is not present",
"is_greater_than": "Is greater than",
"is_lesser_than": "Is lesser than",
"days_before": "Is x days before"
},
"ATTRIBUTES": {
"NAME": "Name",
"EMAIL": "Email",
"PHONE_NUMBER": "Phone number",
"IDENTIFIER": "Identifier",
"CITY": "City",
"COUNTRY": "Country",
"CUSTOM_ATTRIBUTE_LIST": "List",
"CUSTOM_ATTRIBUTE_TEXT": "Text",
"CUSTOM_ATTRIBUTE_NUMBER": "Number",
"CUSTOM_ATTRIBUTE_LINK": "Link",
"CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox",
"CREATED_AT": "Created At",
"LAST_ACTIVITY": "Last Activity",
"REFERER_LINK": "Referrer link"
},
"GROUPS": {
"STANDARD_FILTERS": "Standard Filters",
"ADDITIONAL_FILTERS": "Additional Filters",
"CUSTOM_ATTRIBUTES": "Custom Attributes"
}
}
}

View file

@ -0,0 +1,241 @@
{
"CONVERSATION": {
"SELECT_A_CONVERSATION": "Please select a conversation from left pane",
"404": "Sorry, we cannot find the conversation. Please try again",
"SWITCH_VIEW_LAYOUT": "Switch the layout",
"DASHBOARD_APP_TAB_MESSAGES": "Messages",
"UNVERIFIED_SESSION": "The identity of this user is not verified",
"NO_MESSAGE_1": "Uh oh! Looks like there are no messages from customers in your inbox.",
"NO_MESSAGE_2": " to send a message to your page!",
"NO_INBOX_1": "Hola! Looks like you haven't added any inboxes yet.",
"NO_INBOX_2": " to get started",
"NO_INBOX_AGENT": "Uh Oh! Looks like you are not part of any inbox. Please contact your administrator",
"SEARCH_MESSAGES": "Search for messages in conversations",
"SEARCH": {
"TITLE": "Search messages",
"RESULT_TITLE": "Search Results",
"LOADING_MESSAGE": "Crunching data...",
"PLACEHOLDER": "Type any text to search messages",
"NO_MATCHING_RESULTS": "No results found."
},
"UNREAD_MESSAGES": "Unread Messages",
"UNREAD_MESSAGE": "Unread Message",
"CLICK_HERE": "Click here",
"LOADING_INBOXES": "Loading inboxes",
"LOADING_CONVERSATIONS": "Loading Conversations",
"CANNOT_REPLY": "You cannot reply due to",
"24_HOURS_WINDOW": "24 hour message window restriction",
"NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?",
"ASSIGN_TO_ME": "Assign to me",
"TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to",
"TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hour message window restriction",
"SELECT_A_TWEET_TO_REPLY": "Please select a tweet to reply to.",
"REPLYING_TO": "You are replying to:",
"REMOVE_SELECTION": "Remove Selection",
"DOWNLOAD": "Download",
"UNKNOWN_FILE_TYPE": "Unknown File",
"UPLOADING_ATTACHMENTS": "Uploading attachments...",
"SUCCESS_DELETE_MESSAGE": "Message deleted successfully",
"FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again",
"NO_RESPONSE": "No response",
"RATING_TITLE": "Rating",
"FEEDBACK_TITLE": "Feedback",
"HEADER": {
"RESOLVE_ACTION": "Resolve",
"REOPEN_ACTION": "Reopen",
"OPEN_ACTION": "Open",
"OPEN": "More",
"CLOSE": "Close",
"DETAILS": "details",
"SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow",
"SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week",
"SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply"
},
"RESOLVE_DROPDOWN": {
"MARK_PENDING": "Mark as pending",
"SNOOZE": {
"TITLE": "Snooze until",
"NEXT_REPLY": "Next reply",
"TOMORROW": "Tomorrow",
"NEXT_WEEK": "Next week"
}
},
"CARD_CONTEXT_MENU": {
"PENDING": "Mark as pending",
"RESOLVED": "Mark as resolved",
"REOPEN": "Reopen conversation",
"SNOOZE": {
"TITLE": "Snooze",
"NEXT_REPLY": "Until next reply",
"TOMORROW": "Until tomorrow",
"NEXT_WEEK": "Until next week"
},
"ASSIGN_AGENT": "Assign agent",
"ASSIGN_LABEL": "Assign label",
"AGENTS_LOADING": "Loading agents...",
"ASSIGN_TEAM": "Assign team",
"API": {
"AGENT_ASSIGNMENT": {
"SUCCESFUL": "Conversation id %{conversationId} assigned to \"%{agentName}\"",
"FAILED": "Couldn't assign agent. Please try again."
},
"LABEL_ASSIGNMENT": {
"SUCCESFUL": "Assigned label #%{labelName} to conversation id %{conversationId}",
"FAILED": "Couldn't assign label. Please try again."
},
"TEAM_ASSIGNMENT": {
"SUCCESFUL": "Assigned team \"%{team}\" to conversation id %{conversationId}",
"FAILED": "Couldn't assign team. Please try again."
}
}
},
"FOOTER": {
"MESSAGE_SIGN_TOOLTIP": "Message signature",
"ENABLE_SIGN_TOOLTIP": "Enable signature",
"DISABLE_SIGN_TOOLTIP": "Disable signature",
"MSG_INPUT": "Shift + enter for new line. Start with '/' to select a Canned Response.",
"PRIVATE_MSG_INPUT": "Shift + enter for new line. This will be visible only to Agents",
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.",
"CLICK_HERE": "Click here to update"
},
"REPLYBOX": {
"REPLY": "Reply",
"PRIVATE_NOTE": "Private Note",
"SEND": "Send",
"CREATE": "Add Note",
"TWEET": "Tweet",
"TIP_FORMAT_ICON": "Show rich text editor",
"TIP_EMOJI_ICON": "Show emoji selector",
"TIP_ATTACH_ICON": "Attach files",
"TIP_AUDIORECORDER_ICON": "Record audio",
"TIP_AUDIORECORDER_PERMISSION": "Allow access to audio",
"TIP_AUDIORECORDER_ERROR": "Could not open the audio",
"ENTER_TO_SEND": "Enter to send",
"DRAG_DROP": "Drag and drop here to attach",
"START_AUDIO_RECORDING": "Start audio recording",
"STOP_AUDIO_RECORDING": "Stop audio recording",
"": "",
"EMAIL_HEAD": {
"ADD_BCC": "Add bcc",
"CC": {
"LABEL": "CC",
"PLACEHOLDER": "Emails separated by commas",
"ERROR": "Please enter valid email addresses"
},
"BCC": {
"LABEL": "BCC",
"PLACEHOLDER": "Emails separated by commas",
"ERROR": "Please enter valid email addresses"
}
}
},
"VISIBLE_TO_AGENTS": "Private Note: Only visible to you and your team",
"CHANGE_STATUS": "Conversation status changed",
"CHANGE_STATUS_FAILED": "Conversation status change failed",
"CHANGE_AGENT": "Conversation Assignee changed",
"CHANGE_AGENT_FAILED": "Assignee change failed",
"ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully",
"ASSIGN_LABEL_FAILED": "Label assignment failed",
"CHANGE_TEAM": "Conversation team changed",
"FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit",
"MESSAGE_ERROR": "Unable to send this message, please try again later",
"SENT_BY": "Sent by:",
"BOT": "Bot",
"SEND_FAILED": "Couldn't send message! Try again",
"TRY_AGAIN": "retry",
"ASSIGNMENT": {
"SELECT_AGENT": "Select Agent",
"REMOVE": "Remove",
"ASSIGN": "Assign"
},
"CONTEXT_MENU": {
"COPY": "Copy",
"DELETE": "Delete"
}
},
"EMAIL_TRANSCRIPT": {
"TITLE": "Send conversation transcript",
"DESC": "Send a copy of the conversation transcript to the specified email address",
"SUBMIT": "Submit",
"CANCEL": "Cancel",
"SEND_EMAIL_SUCCESS": "The chat transcript was sent successfully",
"SEND_EMAIL_ERROR": "There was an error, please try again",
"FORM": {
"SEND_TO_CONTACT": "Send the transcript to the customer",
"SEND_TO_AGENT": "Send the transcript to the assigned agent",
"SEND_TO_OTHER_EMAIL_ADDRESS": "Send the transcript to another email address",
"EMAIL": {
"PLACEHOLDER": "Enter an email address",
"ERROR": "Please enter a valid email address"
}
}
},
"ONBOARDING": {
"TITLE": "Hey 👋, Welcome to %{installationName}!",
"DESCRIPTION": "Thanks for signing up. We want you to get the most out of %{installationName}. Here are a few things you can do in %{installationName} to make the experience delightful.",
"READ_LATEST_UPDATES": "Read our latest updates",
"ALL_CONVERSATION": {
"TITLE": "All your conversations in one place",
"DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status."
},
"TEAM_MEMBERS": {
"TITLE": "Invite your team members",
"DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.",
"NEW_LINK": "Click here to invite a team member"
},
"INBOXES": {
"TITLE": "Connect Inboxes",
"DESCRIPTION": "Connect various channels through which your customers would be talking to you. It can be a website live-chat, your Facebook or Twitter page or even your WhatsApp number.",
"NEW_LINK": "Click here to create an inbox"
},
"LABELS": {
"TITLE": "Organize conversations with labels",
"DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.",
"NEW_LINK": "Click here to create tags"
}
},
"CONVERSATION_SIDEBAR": {
"ASSIGNEE_LABEL": "Assigned Agent",
"SELF_ASSIGN": "Assign to me",
"TEAM_LABEL": "Assigned Team",
"SELECT": {
"PLACEHOLDER": "None"
},
"ACCORDION": {
"CONTACT_DETAILS": "Contact Details",
"CONVERSATION_ACTIONS": "Conversation Actions",
"CONVERSATION_LABELS": "Conversation Labels",
"CONVERSATION_INFO": "Conversation Information",
"CONTACT_ATTRIBUTES": "Contact Attributes",
"PREVIOUS_CONVERSATION": "Previous Conversations"
}
},
"CONVERSATION_CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Create attribute",
"UPDATE": {
"SUCCESS": "Attribute updated successfully",
"ERROR": "Unable to update attribute. Please try again later"
},
"ADD": {
"TITLE": "Add",
"SUCCESS": "Attribute added successfully",
"ERROR": "Unable to add attribute. Please try again later"
},
"DELETE": {
"SUCCESS": "Attribute deleted successfully",
"ERROR": "Unable to delete attribute. Please try again later"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Add attributes",
"PLACEHOLDER": "Search attributes",
"NO_RESULT": "No attributes found"
}
},
"EMAIL_HEADER": {
"FROM": "From",
"TO": "To",
"BCC": "Bcc",
"CC": "Cc",
"SUBJECT": "Subject"
}
}

View file

@ -0,0 +1,6 @@
{
"CSAT": {
"TITLE": "Rate your conversation",
"PLACEHOLDER": "Tell us more..."
}
}

Some files were not shown because too many files have changed in this diff Show more