diff --git a/Gemfile b/Gemfile index 680a0738b..7533cf3cf 100644 --- a/Gemfile +++ b/Gemfile @@ -76,7 +76,7 @@ gem 'faraday_middleware-aws-sigv4' ##--- gems for server & infra configuration ---## gem 'dotenv-rails', '>= 3.0.0' gem 'foreman' -gem 'puma' +gem 'puma', '~> 7.2', '>= 7.2.1' gem 'vite_rails' # metrics on heroku gem 'barnes' diff --git a/Gemfile.lock b/Gemfile.lock index 0479393b0..ad2a96921 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -593,7 +593,7 @@ GEM sidekiq newrelic_rpm (9.6.0) base64 - nio4r (2.7.3) + nio4r (2.7.5) nokogiri (1.19.3) mini_portile2 (~> 2.8.2) racc (~> 1.4) @@ -682,7 +682,7 @@ GEM pry-rails (0.3.9) pry (>= 0.10.4) public_suffix (7.0.5) - puma (6.4.3) + puma (7.2.1) nio4r (~> 2.0) pundit (2.3.0) activesupport (>= 3.0.0) @@ -996,11 +996,13 @@ GEM activemodel (>= 3.2) mail (~> 2.5) version_gem (1.1.4) - vite_rails (3.0.17) - railties (>= 5.1, < 8) + vite_rails (3.10.0) + railties (>= 5.1, < 9) vite_ruby (~> 3.0, >= 3.2.2) - vite_ruby (3.8.0) + vite_ruby (3.10.2) dry-cli (>= 0.7, < 2) + logger (~> 1.6) + mutex_m rack-proxy (~> 0.6, >= 0.6.1) zeitwerk (~> 2.2) warden (1.2.9) @@ -1130,7 +1132,7 @@ DEPENDENCIES pgvector procore-sift pry-rails - puma + puma (~> 7.2, >= 7.2.1) pundit rack-attack (>= 6.7.0) rack-cors (= 2.0.0) diff --git a/VERSION_CW b/VERSION_CW index c412a4e2e..d2b9909a9 100644 --- a/VERSION_CW +++ b/VERSION_CW @@ -1 +1 @@ -4.14.0 +4.14.1 diff --git a/app/builders/messages/facebook/message_builder.rb b/app/builders/messages/facebook/message_builder.rb index 1f59deadb..24b6d9e70 100644 --- a/app/builders/messages/facebook/message_builder.rb +++ b/app/builders/messages/facebook/message_builder.rb @@ -92,10 +92,18 @@ class Messages::Facebook::MessageBuilder < Messages::Messenger::MessageBuilder def fallback_params(attachment) { fallback_title: attachment['title'], - external_url: attachment['url'] + external_url: attachment['url'] || attachment.dig('payload', 'url') } end + # Facebook shared posts point to page URLs, not downloadable media URLs. + # Keep this Facebook-only so Messenger/Instagram share attachments still use the parent media handling. + def normalize_file_type(type) + return :fallback if type.to_sym == :share + + super + end + def conversation_params { account_id: @inbox.account_id, diff --git a/app/builders/messages/message_builder.rb b/app/builders/messages/message_builder.rb index 7df72e14a..297e77fcc 100644 --- a/app/builders/messages/message_builder.rb +++ b/app/builders/messages/message_builder.rb @@ -13,6 +13,7 @@ class Messages::MessageBuilder @account = conversation.account @message_type = params[:message_type] || 'outgoing' @attachments = params[:attachments] + @is_voice_message = ActiveModel::Type::Boolean.new.cast(params[:is_voice_message]) @automation_rule = content_attributes&.dig(:automation_rule_id) return unless params.instance_of?(ActionController::Parameters) @@ -56,16 +57,25 @@ class Messages::MessageBuilder file: uploaded_attachment ) - attachment.file_type = if uploaded_attachment.is_a?(String) - file_type_by_signed_id( - uploaded_attachment - ) - else - file_type(uploaded_attachment&.content_type) - end + attachment.file_type = attachment_file_type(uploaded_attachment) + tag_voice_message(attachment) end end + def attachment_file_type(uploaded_attachment) + if uploaded_attachment.is_a?(String) + file_type_by_signed_id(uploaded_attachment) + else + file_type(uploaded_attachment&.content_type) + end + end + + def tag_voice_message(attachment) + return unless @is_voice_message && attachment.file_type == 'audio' + + attachment.meta = (attachment.meta || {}).merge('is_voice_message' => true) + end + def process_emails return unless @conversation.inbox&.inbox_type == 'Email' diff --git a/app/controllers/api/v1/accounts/instagram/authorizations_controller.rb b/app/controllers/api/v1/accounts/instagram/authorizations_controller.rb index 053c29731..116a31e85 100644 --- a/app/controllers/api/v1/accounts/instagram/authorizations_controller.rb +++ b/app/controllers/api/v1/accounts/instagram/authorizations_controller.rb @@ -11,7 +11,7 @@ class Api::V1::Accounts::Instagram::AuthorizationsController < Api::V1::Accounts enable_fb_login: '0', force_authentication: '1', response_type: 'code', - state: generate_instagram_token(Current.account.id) + state: generate_instagram_token(Current.account.id, params[:return_to]) } ) if redirect_url diff --git a/app/controllers/api/v1/accounts/microsoft/authorizations_controller.rb b/app/controllers/api/v1/accounts/microsoft/authorizations_controller.rb index a300b5f59..c65a3031d 100644 --- a/app/controllers/api/v1/accounts/microsoft/authorizations_controller.rb +++ b/app/controllers/api/v1/accounts/microsoft/authorizations_controller.rb @@ -6,8 +6,7 @@ class Api::V1::Accounts::Microsoft::AuthorizationsController < Api::V1::Accounts { redirect_uri: "#{base_url}/microsoft/callback", scope: scope, - state: state, - prompt: 'consent' + state: state } ) if redirect_url diff --git a/app/controllers/api/v1/accounts/oauth_authorization_controller.rb b/app/controllers/api/v1/accounts/oauth_authorization_controller.rb index feb218b59..7fbca86da 100644 --- a/app/controllers/api/v1/accounts/oauth_authorization_controller.rb +++ b/app/controllers/api/v1/accounts/oauth_authorization_controller.rb @@ -8,7 +8,15 @@ class Api::V1::Accounts::OauthAuthorizationController < Api::V1::Accounts::BaseC end def state - Current.account.to_sgid(expires_in: 15.minutes).to_s + # The sgid purpose doubles as a return hint: onboarding tags it so the callback + # can route the user back to inbox setup. The purpose is part of the signed + # payload (tamper-proof), and a non-onboarding request keeps the default + # purpose, leaving callers like Notion byte-identical. + Current.account.to_sgid(expires_in: 15.minutes, for: state_purpose).to_s + end + + def state_purpose + params[:return_to] == 'onboarding' ? 'onboarding' : 'default' end def base_url diff --git a/app/controllers/api/v1/accounts/onboardings_controller.rb b/app/controllers/api/v1/accounts/onboardings_controller.rb new file mode 100644 index 000000000..77c6245ea --- /dev/null +++ b/app/controllers/api/v1/accounts/onboardings_controller.rb @@ -0,0 +1,36 @@ +class Api::V1::Accounts::OnboardingsController < Api::V1::Accounts::BaseController + before_action :check_admin_authorization? + + def update + @account = Current.account + finalize = finalizing_account_details? + + @account.assign_attributes(account_params) + @account.custom_attributes.merge!(custom_attributes_params) + @account.custom_attributes.delete('onboarding_step') if finalize + @account.save! + + # TODO: re-enable when the help center generation UI is ready to surface progress + # Onboarding::HelpCenterCreationService.new(@account, Current.user).perform if finalize && website.present? + + render 'api/v1/accounts/update', format: :json + end + + private + + def finalizing_account_details? + @account.custom_attributes['onboarding_step'] == 'account_details' + end + + def website + custom_attributes_params[:website] + end + + def account_params + params.permit(:name, :locale) + end + + def custom_attributes_params + params.permit(:industry, :company_size, :timezone, :referral_source, :user_role, :website) + end +end diff --git a/app/controllers/api/v1/accounts/portals_controller.rb b/app/controllers/api/v1/accounts/portals_controller.rb index 770018e3c..c74c0ecfc 100644 --- a/app/controllers/api/v1/accounts/portals_controller.rb +++ b/app/controllers/api/v1/accounts/portals_controller.rb @@ -80,10 +80,15 @@ class Api::V1::Accounts::PortalsController < Api::V1::Accounts::BaseController :id, :color, :custom_domain, :header_text, :homepage_link, :name, :page_title, :slug, :archived, { config: [:default_locale, :layout, { allowed_locales: [] }, { draft_locales: [] }, - { social_profiles: %i[facebook x instagram linkedin youtube tiktok github whatsapp] }] } + { social_profiles: %i[facebook x instagram linkedin youtube tiktok github whatsapp] }, + { locale_translations: locale_translation_keys.index_with { %i[name page_title header_text] } }] } ) end + def locale_translation_keys + params.dig(:portal, :config, :locale_translations)&.keys || [] + end + def live_chat_widget_params permitted_params = params.permit(:inbox_id) return {} unless permitted_params.key?(:inbox_id) diff --git a/app/controllers/api/v1/accounts/tiktok/authorizations_controller.rb b/app/controllers/api/v1/accounts/tiktok/authorizations_controller.rb index 7c7320393..64bf38775 100644 --- a/app/controllers/api/v1/accounts/tiktok/authorizations_controller.rb +++ b/app/controllers/api/v1/accounts/tiktok/authorizations_controller.rb @@ -3,7 +3,7 @@ class Api::V1::Accounts::Tiktok::AuthorizationsController < Api::V1::Accounts::O def create redirect_url = Tiktok::AuthClient.authorize_url( - state: generate_tiktok_token(Current.account.id) + state: generate_tiktok_token(Current.account.id, params[:return_to]) ) if redirect_url diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 9f976f2f7..ce54225ba 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -58,7 +58,6 @@ class Api::V1::AccountsController < Api::BaseController @account.assign_attributes(account_params.slice(:name, :locale, :domain, :support_email)) @account.custom_attributes.merge!(custom_attributes_params) @account.settings.merge!(settings_params) - @account.custom_attributes.delete('onboarding_step') if @account.custom_attributes['onboarding_step'] == 'account_details' @account.custom_attributes['onboarding_step'] = 'invite_team' if @account.custom_attributes['onboarding_step'] == 'account_update' @account.save! end diff --git a/app/controllers/concerns/access_token_auth_helper.rb b/app/controllers/concerns/access_token_auth_helper.rb index b7fc14e74..fb52a8eeb 100644 --- a/app/controllers/concerns/access_token_auth_helper.rb +++ b/app/controllers/concerns/access_token_auth_helper.rb @@ -1,8 +1,9 @@ module AccessTokenAuthHelper BOT_ACCESSIBLE_ENDPOINTS = { - 'api/v1/accounts/conversations' => %w[toggle_status toggle_typing_status toggle_priority create update custom_attributes], + 'api/v1/accounts/conversations' => %w[show toggle_status toggle_typing_status toggle_priority create update custom_attributes], 'api/v1/accounts/conversations/messages' => ['create'], - 'api/v1/accounts/conversations/assignments' => ['create'] + 'api/v1/accounts/conversations/assignments' => ['create'], + 'api/v1/accounts/conversations/labels' => %w[index create] }.freeze def ensure_access_token diff --git a/app/controllers/instagram/callbacks_controller.rb b/app/controllers/instagram/callbacks_controller.rb index 4dc8ece1c..cd317363c 100644 --- a/app/controllers/instagram/callbacks_controller.rb +++ b/app/controllers/instagram/callbacks_controller.rb @@ -28,6 +28,8 @@ class Instagram::CallbacksController < ApplicationController @long_lived_token_response = exchange_for_long_lived_token(@response.token) inbox, already_exists = find_or_create_inbox + return redirect_to app_onboarding_inbox_setup_url(account_id: account_id) if return_to == 'onboarding' + if already_exists redirect_to app_instagram_inbox_settings_url(account_id: account_id, inbox_id: inbox.id) else @@ -149,6 +151,10 @@ class Instagram::CallbacksController < ApplicationController verify_instagram_token(params[:state]) end + def return_to + instagram_token_return_to(params[:state]) + end + def oauth_code params[:code] end diff --git a/app/controllers/microsoft/callbacks_controller.rb b/app/controllers/microsoft/callbacks_controller.rb index 2f07505fc..045789f75 100644 --- a/app/controllers/microsoft/callbacks_controller.rb +++ b/app/controllers/microsoft/callbacks_controller.rb @@ -14,4 +14,11 @@ class Microsoft::CallbacksController < OauthCallbackController def imap_address 'outlook.office365.com' end + + # Exchange Online's SMTP AUTH (XOAUTH2) rejects proxy addresses in the SASL `user=` field; + # it must match the token's UPN. `preferred_username` is the documented v2.0 claim; + # `upn` is the v1.0 fallback. + def imap_login_identity + users_data['preferred_username'] || users_data['upn'] || super + end end diff --git a/app/controllers/oauth_callback_controller.rb b/app/controllers/oauth_callback_controller.rb index be0fa5008..4a3d049a6 100644 --- a/app/controllers/oauth_callback_controller.rb +++ b/app/controllers/oauth_callback_controller.rb @@ -16,6 +16,8 @@ class OauthCallbackController < ApplicationController def handle_response inbox, already_exists = find_or_create_inbox + return redirect_to app_onboarding_inbox_setup_url(account_id: account.id) if return_to == 'onboarding' + if already_exists redirect_to app_email_inbox_settings_url(account_id: account.id, inbox_id: inbox.id) else @@ -44,7 +46,7 @@ class OauthCallbackController < ApplicationController def update_channel(channel_email) channel_email.update!({ - imap_login: users_data['email'], imap_address: imap_address, + imap_login: imap_login_identity, imap_address: imap_address, imap_port: '993', imap_enabled: true, provider: provider_name, provider_config: { @@ -55,6 +57,13 @@ class OauthCallbackController < ApplicationController }) end + # Identity used as the IMAP/SMTP login (SASL XOAUTH2 `user=` field). Defaults to the + # id_token's email claim; providers override when their server requires a different + # claim (e.g. Microsoft SMTP requires UPN). + def imap_login_identity + users_data['email'] + end + def provider_name raise NotImplementedError end @@ -81,10 +90,19 @@ class OauthCallbackController < ApplicationController decoded_token[0] end + # The sgid purpose carries the onboarding return hint (see + # OauthAuthorizationController#state). Try the onboarding purpose first — a match + # both resolves the account and records the return target — then fall back to the + # default purpose used by every other caller. def account_from_signed_id raise ActionController::BadRequest, 'Missing state variable' if params[:state].blank? - account = GlobalID::Locator.locate_signed(params[:state]) + if (account = GlobalID::Locator.locate_signed(params[:state], for: 'onboarding')) + @return_to = 'onboarding' + else + account = GlobalID::Locator.locate_signed(params[:state]) + end + raise 'Invalid or expired state' if account.nil? account @@ -94,6 +112,11 @@ class OauthCallbackController < ApplicationController @account ||= account_from_signed_id end + def return_to + account # resolving the sgid records which purpose matched + @return_to + end + # Fallback name, for when name field is missing from users_data def fallback_name users_data['email'].split('@').first.parameterize.titleize diff --git a/app/controllers/public/api/v1/portals/search_controller.rb b/app/controllers/public/api/v1/portals/search_controller.rb new file mode 100644 index 000000000..104741773 --- /dev/null +++ b/app/controllers/public/api/v1/portals/search_controller.rb @@ -0,0 +1,31 @@ +class Public::Api::V1::Portals::SearchController < Public::Api::V1::Portals::BaseController + before_action :ensure_custom_domain_request, only: [:index] + before_action :portal + before_action :set_portal_layout + before_action :set_view_variant + before_action :ensure_portal_feature_enabled + layout 'portal' + + def index + @query = params[:query].to_s.strip + @articles = @portal.articles.published.includes(:category).where(locale: params[:locale]) + + search_articles + + @articles = @articles.page(params[:page]).per(10) + end + + private + + def search_articles + @articles = @query.present? ? @articles.search(search_params) : @articles.none + end + + def search_params + params.permit(:query, :locale, :sort, :status, :page).tap do |permitted| + permitted[:query] = @query + end + end +end + +Public::Api::V1::Portals::SearchController.prepend_mod_with('Public::Api::V1::Portals::SearchController') diff --git a/app/controllers/public/api/v1/portals_controller.rb b/app/controllers/public/api/v1/portals_controller.rb index 63f44b052..57db11aec 100644 --- a/app/controllers/public/api/v1/portals_controller.rb +++ b/app/controllers/public/api/v1/portals_controller.rb @@ -9,7 +9,7 @@ class Public::Api::V1::PortalsController < Public::Api::V1::Portals::BaseControl layout 'portal' def show - @og_image_url = helpers.set_og_image_url('', @portal.header_text) + @og_image_url = helpers.set_og_image_url('', @portal.localized_value('header_text', @locale)) end def sitemap diff --git a/app/controllers/tiktok/callbacks_controller.rb b/app/controllers/tiktok/callbacks_controller.rb index e484905c3..20c0ee9c0 100644 --- a/app/controllers/tiktok/callbacks_controller.rb +++ b/app/controllers/tiktok/callbacks_controller.rb @@ -20,6 +20,8 @@ class Tiktok::CallbacksController < ApplicationController def process_successful_authorization inbox, already_exists = find_or_create_inbox + return redirect_to app_onboarding_inbox_setup_url(account_id: account_id) if return_to == 'onboarding' + if already_exists redirect_to app_tiktok_inbox_settings_url(account_id: account_id, inbox_id: inbox.id) else @@ -127,6 +129,10 @@ class Tiktok::CallbacksController < ApplicationController @account_id ||= verify_tiktok_token(params[:state]) end + def return_to + tiktok_token_return_to(params[:state]) + end + def account @account ||= Account.find(account_id) end diff --git a/app/drops/contact_drop.rb b/app/drops/contact_drop.rb index 1d450adb7..16240ec06 100644 --- a/app/drops/contact_drop.rb +++ b/app/drops/contact_drop.rb @@ -12,7 +12,7 @@ class ContactDrop < BaseDrop end def first_name - @obj.try(:name).try(:split).try(:first).try(:capitalize) if @obj.try(:name).try(:split).try(:size) > 1 + @obj.try(:name).try(:split).try(:first).try(:capitalize) end def last_name diff --git a/app/drops/user_drop.rb b/app/drops/user_drop.rb index cf6f1b6a1..83d5e2347 100644 --- a/app/drops/user_drop.rb +++ b/app/drops/user_drop.rb @@ -12,7 +12,7 @@ class UserDrop < BaseDrop end def first_name - @obj.try(:name).try(:split).try(:first).try(:capitalize) if @obj.try(:name).try(:split).try(:size).to_i > 1 + @obj.try(:name).try(:split).try(:first).try(:capitalize) end def last_name diff --git a/app/helpers/instagram/integration_helper.rb b/app/helpers/instagram/integration_helper.rb index 8ba57bf95..2f91eb6b0 100644 --- a/app/helpers/instagram/integration_helper.rb +++ b/app/helpers/instagram/integration_helper.rb @@ -4,21 +4,21 @@ module Instagram::IntegrationHelper # Generates a signed JWT token for Instagram integration # # @param account_id [Integer] The account ID to encode in the token + # @param return_to [String, nil] Optional onboarding return hint # @return [String, nil] The encoded JWT token or nil if client secret is missing - def generate_instagram_token(account_id) + def generate_instagram_token(account_id, return_to = nil) return if client_secret.blank? - JWT.encode(token_payload(account_id), client_secret, 'HS256') + JWT.encode(token_payload(account_id, return_to), client_secret, 'HS256') rescue StandardError => e Rails.logger.error("Failed to generate Instagram token: #{e.message}") nil end - def token_payload(account_id) - { - sub: account_id, - iat: Time.current.to_i - } + def token_payload(account_id, return_to = nil) + payload = { sub: account_id, iat: Time.current.to_i } + payload[:return_to] = return_to if return_to.present? + payload end # Verifies and decodes a Instagram JWT token @@ -28,7 +28,14 @@ module Instagram::IntegrationHelper def verify_instagram_token(token) return if token.blank? || client_secret.blank? - decode_token(token, client_secret) + decode_token(token, client_secret)&.dig('sub') + end + + # Reads the onboarding return hint from a Instagram JWT token, if present. + def instagram_token_return_to(token) + return if token.blank? || client_secret.blank? + + decode_token(token, client_secret)&.dig('return_to') end private @@ -41,7 +48,7 @@ module Instagram::IntegrationHelper JWT.decode(token, secret, true, { algorithm: 'HS256', verify_expiration: true - }).first['sub'] + }).first rescue StandardError => e Rails.logger.error("Unexpected error verifying Instagram token: #{e.message}") nil diff --git a/app/helpers/portal_helper.rb b/app/helpers/portal_helper.rb index 65166145c..0c993ec59 100644 --- a/app/helpers/portal_helper.rb +++ b/app/helpers/portal_helper.rb @@ -45,9 +45,16 @@ module PortalHelper theme.present? && theme != 'system' ? "?theme=#{theme}" : '' end + def portal_query_string(theme, is_plain_layout_enabled) + query_params = {} + query_params[:theme] = theme if theme.present? && theme != 'system' + query_params[:show_plain_layout] = true if is_plain_layout_enabled + query_params.present? ? "?#{query_params.to_query}" : '' + end + def generate_home_link(portal_slug, portal_locale, theme, is_plain_layout_enabled) if is_plain_layout_enabled - "/hc/#{portal_slug}/#{portal_locale}#{theme_query_string(theme)}" + "/hc/#{portal_slug}/#{portal_locale}#{portal_query_string(theme, is_plain_layout_enabled)}" else "/hc/#{portal_slug}/#{portal_locale}" end @@ -61,7 +68,7 @@ module PortalHelper is_plain_layout_enabled = params[:is_plain_layout_enabled] if is_plain_layout_enabled - "/hc/#{portal_slug}/#{category_locale}/categories/#{category_slug}#{theme_query_string(theme)}" + "/hc/#{portal_slug}/#{category_locale}/categories/#{category_slug}#{portal_query_string(theme, is_plain_layout_enabled)}" else "/hc/#{portal_slug}/#{category_locale}/categories/#{category_slug}" end @@ -69,7 +76,7 @@ module PortalHelper def generate_article_link(portal_slug, article_slug, theme, is_plain_layout_enabled) if is_plain_layout_enabled - "/hc/#{portal_slug}/articles/#{article_slug}#{theme_query_string(theme)}" + "/hc/#{portal_slug}/articles/#{article_slug}#{portal_query_string(theme, is_plain_layout_enabled)}" else "/hc/#{portal_slug}/articles/#{article_slug}" end diff --git a/app/helpers/super_admin/features.yml b/app/helpers/super_admin/features.yml index f21a97f78..6489d0194 100644 --- a/app/helpers/super_admin/features.yml +++ b/app/helpers/super_admin/features.yml @@ -34,6 +34,12 @@ disable_branding: enabled: <%= (ChatwootHub.pricing_plan != 'community') %> icon: 'icon-sailbot-fill' enterprise: true +voice_calls: + name: 'Voice Calls' + description: 'Enable voice calling capabilities for your agents and customers.' + enabled: <%= (ChatwootHub.pricing_plan != 'community') %> + icon: 'icon-voice-line' + enterprise: true # ------- Product Features ------- # help_center: diff --git a/app/helpers/tiktok/integration_helper.rb b/app/helpers/tiktok/integration_helper.rb index b2de4a092..7bc8bc4ab 100644 --- a/app/helpers/tiktok/integration_helper.rb +++ b/app/helpers/tiktok/integration_helper.rb @@ -2,11 +2,12 @@ module Tiktok::IntegrationHelper # Generates a signed JWT token for Tiktok integration # # @param account_id [Integer] The account ID to encode in the token + # @param return_to [String, nil] Optional onboarding return hint # @return [String, nil] The encoded JWT token or nil if client secret is missing - def generate_tiktok_token(account_id) + def generate_tiktok_token(account_id, return_to = nil) return if client_secret.blank? - JWT.encode(token_payload(account_id), client_secret, 'HS256') + JWT.encode(token_payload(account_id, return_to), client_secret, 'HS256') rescue StandardError => e Rails.logger.error("Failed to generate TikTok token: #{e.message}") nil @@ -19,7 +20,14 @@ module Tiktok::IntegrationHelper def verify_tiktok_token(token) return if token.blank? || client_secret.blank? - decode_token(token, client_secret) + decode_token(token, client_secret)&.dig('sub') + end + + # Reads the onboarding return hint from a Tiktok JWT token, if present. + def tiktok_token_return_to(token) + return if token.blank? || client_secret.blank? + + decode_token(token, client_secret)&.dig('return_to') end private @@ -28,18 +36,17 @@ module Tiktok::IntegrationHelper @client_secret ||= GlobalConfigService.load('TIKTOK_APP_SECRET', nil) end - def token_payload(account_id) - { - sub: account_id, - iat: Time.current.to_i - } + def token_payload(account_id, return_to = nil) + payload = { sub: account_id, iat: Time.current.to_i } + payload[:return_to] = return_to if return_to.present? + payload end def decode_token(token, secret) JWT.decode(token, secret, true, { algorithm: 'HS256', verify_expiration: true - }).first['sub'] + }).first rescue StandardError => e Rails.logger.error("Unexpected error verifying Tiktok token: #{e.message}") nil diff --git a/app/javascript/dashboard/api/channel/voice/twilioVoiceClient.js b/app/javascript/dashboard/api/channel/voice/twilioVoiceClient.js index 13f61a16c..14dd56ec9 100644 --- a/app/javascript/dashboard/api/channel/voice/twilioVoiceClient.js +++ b/app/javascript/dashboard/api/channel/voice/twilioVoiceClient.js @@ -48,6 +48,12 @@ class TwilioVoiceClient extends EventTarget { return !!this.activeConnection; } + setMuted(shouldMute) { + if (!this.activeConnection) return false; + this.activeConnection.mute(shouldMute); + return shouldMute; + } + endClientCall() { if (this.activeConnection) { this.activeConnection.disconnect(); diff --git a/app/javascript/dashboard/api/inbox/message.js b/app/javascript/dashboard/api/inbox/message.js index 8f294a0ee..06b85078e 100644 --- a/app/javascript/dashboard/api/inbox/message.js +++ b/app/javascript/dashboard/api/inbox/message.js @@ -12,6 +12,7 @@ export const buildCreatePayload = ({ bccEmails = '', toEmails = '', templateParams, + isVoiceMessage = false, }) => { let payload; if (files && files.length !== 0) { @@ -33,6 +34,9 @@ export const buildCreatePayload = ({ if (contentAttributes) { payload.append('content_attributes', JSON.stringify(contentAttributes)); } + if (isVoiceMessage) { + payload.append('is_voice_message', true); + } } else { payload = { content: message, @@ -64,6 +68,7 @@ class MessageApi extends ApiClient { bccEmails = '', toEmails = '', templateParams, + isVoiceMessage = false, }) { return axios({ method: 'post', @@ -78,6 +83,7 @@ class MessageApi extends ApiClient { bccEmails, toEmails, templateParams, + isVoiceMessage, }), }); } diff --git a/app/javascript/dashboard/api/onboarding.js b/app/javascript/dashboard/api/onboarding.js new file mode 100644 index 000000000..2bc098eef --- /dev/null +++ b/app/javascript/dashboard/api/onboarding.js @@ -0,0 +1,14 @@ +/* global axios */ +import ApiClient from './ApiClient'; + +class OnboardingAPI extends ApiClient { + constructor() { + super('onboarding', { accountScoped: true }); + } + + update(data) { + return axios.patch(this.url, data); + } +} + +export default new OnboardingAPI(); diff --git a/app/javascript/dashboard/api/specs/inbox/message.spec.js b/app/javascript/dashboard/api/specs/inbox/message.spec.js index 941f5c99c..84c0b9cf2 100644 --- a/app/javascript/dashboard/api/specs/inbox/message.spec.js +++ b/app/javascript/dashboard/api/specs/inbox/message.spec.js @@ -83,5 +83,29 @@ describe('#ConversationAPI', () => { template_params: undefined, }); }); + + it('appends is_voice_message when isVoiceMessage is true', () => { + const formPayload = buildCreatePayload({ + message: 'voice message', + echoId: 42, + isPrivate: false, + files: [new Blob(['audio-data'], { type: 'audio/ogg' })], + isVoiceMessage: true, + }); + expect(formPayload).toBeInstanceOf(FormData); + expect(formPayload.get('is_voice_message')).toEqual('true'); + }); + + it('does not append is_voice_message when isVoiceMessage is false', () => { + const formPayload = buildCreatePayload({ + message: 'regular audio', + echoId: 43, + isPrivate: false, + files: [new Blob(['audio-data'], { type: 'audio/ogg' })], + isVoiceMessage: false, + }); + expect(formPayload).toBeInstanceOf(FormData); + expect(formPayload.get('is_voice_message')).toBeNull(); + }); }); }); diff --git a/app/javascript/dashboard/components-next/Campaigns/CampaignCard/CampaignCard.vue b/app/javascript/dashboard/components-next/Campaigns/CampaignCard/CampaignCard.vue index 05507fc89..437933e5f 100644 --- a/app/javascript/dashboard/components-next/Campaigns/CampaignCard/CampaignCard.vue +++ b/app/javascript/dashboard/components-next/Campaigns/CampaignCard/CampaignCard.vue @@ -49,6 +49,7 @@ const emit = defineEmits(['edit', 'delete']); const { t } = useI18n(); const STATUS_COMPLETED = 'completed'; +const STATUS_PROCESSING = 'processing'; const { formatMessage } = useMessageFormatter(); @@ -68,9 +69,15 @@ const campaignStatus = computed(() => { : t('CAMPAIGN.LIVE_CHAT.CARD.STATUS.DISABLED'); } - return props.status === STATUS_COMPLETED - ? t('CAMPAIGN.SMS.CARD.STATUS.COMPLETED') - : t('CAMPAIGN.SMS.CARD.STATUS.SCHEDULED'); + if (props.status === STATUS_COMPLETED) { + return t('CAMPAIGN.SMS.CARD.STATUS.COMPLETED'); + } + + if (props.status === STATUS_PROCESSING) { + return t('CAMPAIGN.SMS.CARD.STATUS.PROCESSING'); + } + + return t('CAMPAIGN.SMS.CARD.STATUS.SCHEDULED'); }); const inboxName = computed(() => props.inbox?.name || ''); diff --git a/app/javascript/dashboard/components-next/Companies/CompaniesCard/CompaniesCard.vue b/app/javascript/dashboard/components-next/Companies/CompaniesCard/CompaniesCard.vue index fe4385bbb..d81b997c5 100644 --- a/app/javascript/dashboard/components-next/Companies/CompaniesCard/CompaniesCard.vue +++ b/app/javascript/dashboard/components-next/Companies/CompaniesCard/CompaniesCard.vue @@ -46,9 +46,8 @@ const formattedLastActivityAt = computed(() => { :src="avatarSource" class="shrink-0" :name="name" - :size="48" + :size="42" hide-offline-status - rounded-full />
diff --git a/app/javascript/dashboard/components-next/Companies/CompanyDetail/CompanyProfileCard.vue b/app/javascript/dashboard/components-next/Companies/CompanyDetail/CompanyProfileCard.vue index 1ffbf0c18..7615328ca 100644 --- a/app/javascript/dashboard/components-next/Companies/CompanyDetail/CompanyProfileCard.vue +++ b/app/javascript/dashboard/components-next/Companies/CompanyDetail/CompanyProfileCard.vue @@ -141,7 +141,6 @@ const handleUpdateCompany = async () => { :src="avatarSource" :size="72" :allow-upload="!isAvatarBusy" - rounded-full hide-offline-status @upload="handleAvatarUpload" @delete="handleAvatarDelete" diff --git a/app/javascript/dashboard/components-next/Contacts/ContactsCard/ContactsCard.vue b/app/javascript/dashboard/components-next/Contacts/ContactsCard/ContactsCard.vue index ba887b46f..50af6f0c0 100644 --- a/app/javascript/dashboard/components-next/Contacts/ContactsCard/ContactsCard.vue +++ b/app/javascript/dashboard/components-next/Contacts/ContactsCard/ContactsCard.vue @@ -124,10 +124,9 @@ const handleAvatarHover = isHovered => { @@ -997,10 +979,6 @@ useEmitter(BUS_EVENTS.INSERT_INTO_RICH_EDITOR, insertContentIntoEditor); @apply text-n-slate-11; } } - - ol li { - @apply list-item list-decimal; - } } } diff --git a/app/javascript/dashboard/components/widgets/WootWriter/utils/mp3ConversionUtils.js b/app/javascript/dashboard/components/widgets/WootWriter/utils/audioConversionUtils.js similarity index 85% rename from app/javascript/dashboard/components/widgets/WootWriter/utils/mp3ConversionUtils.js rename to app/javascript/dashboard/components/widgets/WootWriter/utils/audioConversionUtils.js index 3ae37911d..1b0884cbe 100644 --- a/app/javascript/dashboard/components/widgets/WootWriter/utils/mp3ConversionUtils.js +++ b/app/javascript/dashboard/components/widgets/WootWriter/utils/audioConversionUtils.js @@ -1,5 +1,7 @@ import lamejs from '@breezystack/lamejs'; +import { remuxWebmToOgg } from './webmOpusToOgg'; + const writeString = (view, offset, string) => { // eslint-disable-next-line no-plusplus for (let i = 0; i < string.length; i++) { @@ -139,6 +141,20 @@ export const convertAudio = async (inputBlob, outputFormat, bitrate = 128) => { audio = await convertToWav(inputBlob); } else if (outputFormat === 'audio/mp3') { audio = await convertToMp3(inputBlob, bitrate); + } else if (outputFormat === 'audio/ogg') { + const inputType = inputBlob.type.split(';')[0].trim(); + if (inputType === 'audio/webm' || inputType === 'video/webm') { + audio = await remuxWebmToOgg(inputBlob); + } else if (inputType === 'audio/ogg') { + audio = inputBlob; + } else { + // Browsers that record neither WebM nor OGG (e.g. Safari records + // audio/mp4) cannot produce OGG/Opus. Fall back to MP3 so the recording + // still sends as a regular audio message instead of failing. The caller + // keys the voice-note flag off the returned blob type, so an MP3 result + // is never mislabeled as an OGG/Opus voice note. + audio = await convertToMp3(inputBlob, bitrate); + } } else { throw new Error('Unsupported output format'); } diff --git a/app/javascript/dashboard/components/widgets/WootWriter/utils/webmOpusToOgg.js b/app/javascript/dashboard/components/widgets/WootWriter/utils/webmOpusToOgg.js new file mode 100644 index 000000000..6f8ca087a --- /dev/null +++ b/app/javascript/dashboard/components/widgets/WootWriter/utils/webmOpusToOgg.js @@ -0,0 +1,457 @@ +/* eslint-disable no-bitwise */ +/** + * WebM/Opus → OGG/Opus remuxer + * + * Chrome's MediaRecorder produces WebM containers even when + * `audio/ogg;codecs=opus` is requested. WhatsApp Cloud API requires + * proper OGG/Opus files for voice messages. + * + * This module extracts raw Opus packets from the WebM (EBML) container + * and repackages them into a valid OGG bitstream. The audio data itself + * is never re-encoded — only the container format changes. + * + * References: + * EBML (container for WebM): RFC 8794 — https://www.rfc-editor.org/rfc/rfc8794 + * Matroska/WebM elements: https://www.matroska.org/technical/elements.html + * OGG bitstream framing: RFC 3533 — https://www.rfc-editor.org/rfc/rfc3533 + * Opus codec: RFC 6716 — https://www.rfc-editor.org/rfc/rfc6716 + * Opus in OGG (OpusHead/Tags): RFC 7845 — https://www.rfc-editor.org/rfc/rfc7845 + */ + +// ======================== EBML / WebM parser ======================== + +const EBML_IDS = { + Segment: 0x18538067, + SegmentInfo: 0x1549a966, + Tracks: 0x1654ae6b, + TrackEntry: 0xae, + CodecPrivate: 0x63a2, + Audio: 0xe1, + SamplingFrequency: 0xb5, + Channels: 0x9f, + Cluster: 0x1f43b675, + Timecode: 0xe7, + SimpleBlock: 0xa3, + BlockGroup: 0xa0, + Block: 0xa1, +}; + +const MASTER_ELEMENTS = new Set([ + 0x1a45dfa3, // EBML header + EBML_IDS.Segment, + EBML_IDS.SegmentInfo, + EBML_IDS.Tracks, + EBML_IDS.TrackEntry, + EBML_IDS.Audio, + EBML_IDS.Cluster, + EBML_IDS.BlockGroup, +]); + +/** Read an EBML variable-length integer (data size). */ +function readVint(data, pos) { + if (pos >= data.length) return null; + const first = data[pos]; + if (first === 0) return null; + + let len = 1; + let mask = 0x80; + while (len <= 8 && !(first & mask)) { + len += 1; + mask >>= 1; + } + if (len > 8 || pos + len > data.length) return null; + + let value = first & (mask - 1); + for (let i = 1; i < len; i += 1) { + value = value * 256 + data[pos + i]; + } + return { value, length: len }; +} + +/** Read an EBML element ID (leading marker bits are kept). */ +function readElementId(data, pos) { + if (pos >= data.length) return null; + const first = data[pos]; + if (first === 0) return null; + + let len = 1; + let mask = 0x80; + while (len <= 4 && !(first & mask)) { + len += 1; + mask >>= 1; + } + if (len > 4 || pos + len > data.length) return null; + + let id = first; + for (let i = 1; i < len; i += 1) { + id = id * 256 + data[pos + i]; + } + return { id, length: len }; +} + +function readUintBE(data, offset, length) { + let v = 0; + for (let i = 0; i < length; i += 1) v = v * 256 + data[offset + i]; + return v; +} + +function readFloatBE(data, offset, length) { + if (length !== 4 && length !== 8) return NaN; + const buf = new ArrayBuffer(length); + const u8 = new Uint8Array(buf); + for (let i = 0; i < length; i += 1) u8[i] = data[offset + i]; + const view = new DataView(buf); + return length === 4 ? view.getFloat32(0) : view.getFloat64(0); +} + +/** Extract the raw Opus frame from a SimpleBlock / Block element. */ +function extractFrameFromBlock(data, offset, end) { + const trackVint = readVint(data, offset); + if (!trackVint) return null; + let pos = offset + trackVint.length; + + // int16 relative timecode (big-endian, signed) – skip + pos += 2; + // Flags byte – skip. Lacing (Xiph/EBML/fixed-size) is NOT supported; + // this assumes single-frame blocks as produced by MediaRecorder. + const flags = data[pos]; + const lacingBits = (flags >> 1) & 0x03; + if (lacingBits !== 0) { + // eslint-disable-next-line no-console + console.warn( + 'webmOpusToOgg: laced SimpleBlock detected (unsupported), frame may be invalid' + ); + } + pos += 1; + + if (pos >= end) return null; + return data.slice(pos, end); +} + +/** + * Walk the EBML tree and collect metadata + Opus frames. + * We only descend into master elements and only extract the fields we need. + */ +function parseWebM(buffer) { + const data = new Uint8Array(buffer); + const result = { + channels: 1, + sampleRate: 48000, + codecPrivate: null, + frames: [], + }; + + function walk(start, end) { + let pos = start; + while (pos < end) { + const idRes = readElementId(data, pos); + if (!idRes) break; + pos += idRes.length; + + const sizeRes = readVint(data, pos); + if (!sizeRes) break; + pos += sizeRes.length; + + // Handle "unknown size" (all-ones VINT) by treating it as the rest of the parent + // Use Math.pow instead of bit-shift to avoid 32-bit overflow for 5+ byte VINTs + const maxVint = 2 ** (7 * sizeRes.length) - 1; + const elEnd = + sizeRes.value === maxVint ? end : Math.min(pos + sizeRes.value, end); + + if (MASTER_ELEMENTS.has(idRes.id)) { + walk(pos, elEnd); + } else { + switch (idRes.id) { + case EBML_IDS.Channels: + result.channels = readUintBE(data, pos, sizeRes.value); + break; + case EBML_IDS.SamplingFrequency: + result.sampleRate = readFloatBE(data, pos, sizeRes.value); + break; + case EBML_IDS.CodecPrivate: + result.codecPrivate = data.slice(pos, elEnd); + break; + case EBML_IDS.SimpleBlock: + case EBML_IDS.Block: { + const frame = extractFrameFromBlock(data, pos, elEnd); + if (frame && frame.length > 0) result.frames.push(frame); + break; + } + default: + break; + } + } + pos = elEnd; + } + } + + walk(0, data.length); + return result; +} + +// ======================== OGG writer ======================== + +/** OGG CRC-32 table (polynomial 0x04C11DB7). */ +const CRC_TABLE = (() => { + const t = new Uint32Array(256); + for (let i = 0; i < 256; i += 1) { + let c = i << 24; + for (let j = 0; j < 8; j += 1) { + c = ((c << 1) ^ (c & 0x80000000 ? 0x04c11db7 : 0)) >>> 0; + } + t[i] = c; + } + return t; +})(); + +function oggCrc32(bytes) { + let crc = 0; + for (let i = 0; i < bytes.length; i += 1) { + crc = (CRC_TABLE[((crc >>> 24) ^ bytes[i]) & 0xff] ^ (crc << 8)) >>> 0; + } + return crc; +} + +/** + * Build one OGG page. + * + * @param {number} headerType 0x02 = BOS, 0x04 = EOS, 0x00 = normal + * @param {number} granulePosition 48 kHz sample count + * @param {number} serialNumber logical stream id + * @param {number} pageSeq page sequence counter + * @param {Uint8Array[]} packets one or more complete Opus packets + */ +function createOggPage( + headerType, + granulePosition, + serialNumber, + pageSeq, + packets +) { + // Build the lacing / segment table + const segTable = []; + let dataLen = 0; + packets.forEach(pkt => { + let rem = pkt.length; + while (rem >= 255) { + segTable.push(255); + rem -= 255; + } + segTable.push(rem); // final segment (0 when pkt.length is a multiple of 255) + dataLen += pkt.length; + }); + + const hdrLen = 27 + segTable.length; + const page = new Uint8Array(hdrLen + dataLen); + const dv = new DataView(page.buffer); + + // Capture pattern + page.set([0x4f, 0x67, 0x67, 0x53]); // "OggS" + page[4] = 0; // version + page[5] = headerType; + + // Granule position (int64 LE) + dv.setUint32(6, granulePosition & 0xffffffff, true); + dv.setUint32( + 10, + Math.floor(granulePosition / 0x100000000) & 0xffffffff, + true + ); + + dv.setUint32(14, serialNumber, true); // serial + dv.setUint32(18, pageSeq, true); // page sequence + dv.setUint32(22, 0, true); // CRC placeholder + + page[26] = segTable.length; + for (let i = 0; i < segTable.length; i += 1) page[27 + i] = segTable[i]; + + let off = hdrLen; + packets.forEach(pkt => { + page.set(pkt, off); + off += pkt.length; + }); + + // Fill in the CRC + dv.setUint32(22, oggCrc32(page), true); + return page; +} + +// ======================== Opus helpers ======================== + +/** Lookup table: frame duration in ms for each Opus TOC config index (0-31). */ +const OPUS_FRAME_MS = [ + 10, + 20, + 40, + 60, // 0-3 SILK NB + 10, + 20, + 40, + 60, // 4-7 SILK MB + 10, + 20, + 40, + 60, // 8-11 SILK WB + 10, + 20, // 12-13 Hybrid SWB + 10, + 20, // 14-15 Hybrid FB + 2.5, + 5, + 10, + 20, // 16-19 CELT NB + 2.5, + 5, + 10, + 20, // 20-23 CELT WB + 2.5, + 5, + 10, + 20, // 24-27 CELT SWB + 2.5, + 5, + 10, + 20, // 28-31 CELT FB +]; + +/** Return the total number of 48 kHz PCM samples represented by an Opus packet. */ +function opusPacketSamples(pkt) { + if (!pkt || pkt.length === 0) return 960; // default 20 ms + const toc = pkt[0]; + const config = (toc >> 3) & 0x1f; + const code = toc & 0x03; + + const samplesPerFrame = ((OPUS_FRAME_MS[config] || 20) * 48000) / 1000; + let frameCount; + if (code <= 1) frameCount = code + 1; + else if (code === 2) frameCount = 2; + else frameCount = pkt.length >= 2 ? pkt[1] & 0x3f : 1; + + return samplesPerFrame * frameCount; +} + +function buildOpusHead(channels, sampleRate, preSkip) { + const buf = new Uint8Array(19); + const dv = new DataView(buf.buffer); + buf.set(new TextEncoder().encode('OpusHead')); + buf[8] = 1; // version + buf[9] = channels; + dv.setUint16(10, preSkip, true); + dv.setUint32(12, sampleRate, true); + dv.setInt16(16, 0, true); // output gain + buf[18] = 0; // channel mapping family + return buf; +} + +function buildOpusTags() { + const vendor = new TextEncoder().encode('chatwoot'); + const buf = new Uint8Array(8 + 4 + vendor.length + 4); + const dv = new DataView(buf.buffer); + buf.set(new TextEncoder().encode('OpusTags')); + dv.setUint32(8, vendor.length, true); + buf.set(vendor, 12); + dv.setUint32(12 + vendor.length, 0, true); // 0 user comments + return buf; +} + +// ======================== Public API ======================== + +const MAX_FRAMES_PER_PAGE = 50; // ~1 s at 20 ms/frame +const MAX_SEGMENTS_PER_PAGE = 255; + +/** + * Remux a WebM/Opus blob into an OGG/Opus blob. + * If the input is already OGG (starts with "OggS"), it is returned as-is. + * + * @param {Blob} webmBlob + * @returns {Promise} OGG/Opus blob + */ +export async function remuxWebmToOgg(webmBlob) { + const buffer = await webmBlob.arrayBuffer(); + const bytes = new Uint8Array(buffer); + + // Already OGG? Return unchanged. + if ( + bytes.length >= 4 && + bytes[0] === 0x4f && + bytes[1] === 0x67 && + bytes[2] === 0x67 && + bytes[3] === 0x53 + ) { + return webmBlob; + } + + const { channels, sampleRate, codecPrivate, frames } = parseWebM(buffer); + if (frames.length === 0) { + throw new Error('No Opus frames found in WebM input'); + } + + // Extract pre-skip from the WebM CodecPrivate (which IS the OpusHead) + let preSkip = 312; + if (codecPrivate && codecPrivate.length >= 12) { + const magic = new TextDecoder().decode(codecPrivate.slice(0, 8)); + if (magic === 'OpusHead') { + preSkip = new DataView( + codecPrivate.buffer, + codecPrivate.byteOffset, + codecPrivate.length + ).getUint16(10, true); + } + } + + const serial = (Math.random() * 0x100000000) >>> 0; + let pageSeq = 0; + const pages = []; + + // Page 0 – OpusHead (BOS) + pages.push( + createOggPage(0x02, 0, serial, pageSeq, [ + buildOpusHead(channels, sampleRate, preSkip), + ]) + ); + pageSeq += 1; + + // Page 1 – OpusTags + pages.push(createOggPage(0x00, 0, serial, pageSeq, [buildOpusTags()])); + pageSeq += 1; + + // Audio pages + let granule = 0; + let idx = 0; + + while (idx < frames.length) { + const packets = []; + let segs = 0; + + while (idx < frames.length && packets.length < MAX_FRAMES_PER_PAGE) { + const pkt = frames[idx]; + // createOggPage always appends a terminating lacing value, so a packet + // spans floor(len/255)+1 segments (including the extra 0 when len is an + // exact multiple of 255). Math.ceil would undercount those cases. + const pktSegs = Math.floor(pkt.length / 255) + 1; + if (segs + pktSegs > MAX_SEGMENTS_PER_PAGE && packets.length > 0) break; + + packets.push(pkt); + segs += pktSegs; + granule += opusPacketSamples(pkt); + idx += 1; + } + + const isLast = idx >= frames.length; + pages.push( + createOggPage(isLast ? 0x04 : 0x00, granule, serial, pageSeq, packets) + ); + pageSeq += 1; + } + + // Concatenate pages into a single buffer + const total = pages.reduce((s, p) => s + p.length, 0); + const out = new Uint8Array(total); + let off = 0; + pages.forEach(p => { + out.set(p, off); + off += p.length; + }); + + return new Blob([out], { type: 'audio/ogg' }); +} diff --git a/app/javascript/dashboard/components/widgets/conversation/ConversationHeader.vue b/app/javascript/dashboard/components/widgets/conversation/ConversationHeader.vue index b48930401..ccd1a8aae 100644 --- a/app/javascript/dashboard/components/widgets/conversation/ConversationHeader.vue +++ b/app/javascript/dashboard/components/widgets/conversation/ConversationHeader.vue @@ -124,7 +124,6 @@ const copyConversationId = async () => { :size="32" :status="currentContact.availability_status" hide-offline-status - rounded-full />
{ if (this.globalConfig.directUploadsEnabled) { messagePayload.files.push(attachment.blobSignedId); + if (attachment.isVoiceMessage) { + messagePayload.isVoiceMessage = true; + } } else { messagePayload.files.push(attachment.resource.file); } @@ -1215,7 +1226,7 @@ export default { this.hasRecordedAudio = false; // Only clear the recorded audio when we click toggle button. this.attachedFiles = this.attachedFiles.filter( - file => !file?.isRecordedAudio + file => !file?.isVoiceMessage ); }, toggleEditorSize() { @@ -1293,6 +1304,7 @@ export default { :audio-record-format="audioRecordFormat" @recorder-progress-changed="onRecordProgressChanged" @finish-record="onFinishRecorder" + @record-error="onRecordError" @play="recordingAudioState = 'playing'" @pause="recordingAudioState = 'paused'" /> diff --git a/app/javascript/dashboard/components/widgets/conversation/advancedFilterItems/index.js b/app/javascript/dashboard/components/widgets/conversation/advancedFilterItems/index.js index 2c3c2fd13..06ff259f0 100644 --- a/app/javascript/dashboard/components/widgets/conversation/advancedFilterItems/index.js +++ b/app/javascript/dashboard/components/widgets/conversation/advancedFilterItems/index.js @@ -46,6 +46,14 @@ const filterTypes = [ filterOperators: OPERATOR_TYPES_2, attributeModel: 'standard', }, + { + attributeKey: 'contact_id', + attributeI18nKey: 'CONTACT', + inputType: 'search_select', + dataType: 'number', + filterOperators: OPERATOR_TYPES_1, + attributeModel: 'standard', + }, { attributeKey: 'display_id', attributeI18nKey: 'CONVERSATION_IDENTIFIER', @@ -133,6 +141,10 @@ export const filterAttributeGroups = [ key: 'team_id', i18nKey: 'TEAM_NAME', }, + { + key: 'contact_id', + i18nKey: 'CONTACT', + }, { key: 'display_id', i18nKey: 'CONVERSATION_IDENTIFIER', diff --git a/app/javascript/dashboard/composables/spec/index.spec.js b/app/javascript/dashboard/composables/spec/index.spec.js index dc1016af8..12ea16139 100644 --- a/app/javascript/dashboard/composables/spec/index.spec.js +++ b/app/javascript/dashboard/composables/spec/index.spec.js @@ -10,10 +10,12 @@ vi.mock('shared/helpers/mitt', () => ({ vi.mock('dashboard/helper/AnalyticsHelper/index', async importOriginal => { const actual = await importOriginal(); - actual.default = { - track: vi.fn(), + return { + ...actual, + default: { + track: vi.fn(), + }, }; - return actual; }); describe('useTrack', () => { diff --git a/app/javascript/dashboard/composables/spec/useCaptain.spec.js b/app/javascript/dashboard/composables/spec/useCaptain.spec.js index 3932813fe..a29ef967e 100644 --- a/app/javascript/dashboard/composables/spec/useCaptain.spec.js +++ b/app/javascript/dashboard/composables/spec/useCaptain.spec.js @@ -16,10 +16,12 @@ vi.mock('vue-i18n'); vi.mock('dashboard/api/captain/tasks'); vi.mock('dashboard/helper/AnalyticsHelper/index', async importOriginal => { const actual = await importOriginal(); - actual.default = { - track: vi.fn(), + return { + ...actual, + default: { + track: vi.fn(), + }, }; - return actual; }); vi.mock('dashboard/helper/AnalyticsHelper/events', () => ({ CAPTAIN_EVENTS: { diff --git a/app/javascript/dashboard/composables/spec/useFacebookPageConnect.spec.js b/app/javascript/dashboard/composables/spec/useFacebookPageConnect.spec.js new file mode 100644 index 000000000..5d9edb993 --- /dev/null +++ b/app/javascript/dashboard/composables/spec/useFacebookPageConnect.spec.js @@ -0,0 +1,148 @@ +import { useFacebookPageConnect } from '../useFacebookPageConnect'; +import { useMapGetter } from 'dashboard/composables/store'; +import ChannelApi from 'dashboard/api/channels'; +import { setupFacebookSdk } from 'dashboard/routes/dashboard/settings/inbox/channels/whatsapp/utils'; + +vi.mock('dashboard/composables/store', () => ({ useMapGetter: vi.fn() })); +vi.mock('dashboard/api/channels', () => ({ + default: { fetchFacebookPages: vi.fn() }, +})); +vi.mock( + 'dashboard/routes/dashboard/settings/inbox/channels/whatsapp/utils', + () => ({ setupFacebookSdk: vi.fn() }) +); + +const flushPromises = () => + new Promise(resolve => { + setTimeout(resolve, 0); + }); + +const createDeferred = () => { + let resolve; + let reject; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; +}; + +const ACCOUNT_ID = 42; +const PAGES = [ + { id: 'p1', name: 'Page One', access_token: 'page-token-1' }, + { id: 'p2', name: 'Page Two', access_token: 'page-token-2', exists: true }, +]; + +const pagesResponse = { + data: { data: { page_details: PAGES, user_access_token: 'long-token' } }, +}; + +// FB.login invokes its callback with the given response. +const stubLogin = response => { + window.FB = { login: vi.fn(callback => callback(response)) }; +}; + +const connected = { + status: 'connected', + authResponse: { accessToken: 'user-token' }, +}; + +describe('useFacebookPageConnect', () => { + beforeEach(() => { + vi.clearAllMocks(); + window.chatwootConfig = { fbAppId: 'fb-app', fbApiVersion: 'v22.0' }; + useMapGetter.mockReturnValue({ value: ACCOUNT_ID }); + setupFacebookSdk.mockResolvedValue(); + ChannelApi.fetchFacebookPages.mockResolvedValue(pagesResponse); + stubLogin(connected); + }); + + it('resolves the user token and pages on a connected login', async () => { + const { loginAndFetchPages } = useFacebookPageConnect(); + + await expect(loginAndFetchPages()).resolves.toEqual({ + userAccessToken: 'long-token', + pages: PAGES, + }); + expect(setupFacebookSdk).toHaveBeenCalledWith('fb-app', 'v22.0'); + expect(ChannelApi.fetchFacebookPages).toHaveBeenCalledWith( + 'user-token', + ACCOUNT_ID + ); + expect(window.FB.login).toHaveBeenCalledWith(expect.any(Function), { + scope: expect.stringContaining('pages_show_list'), + }); + }); + + it('resolves null when the user is not authorized', async () => { + stubLogin({ status: 'not_authorized' }); + const { loginAndFetchPages } = useFacebookPageConnect(); + + await expect(loginAndFetchPages()).resolves.toBeNull(); + expect(ChannelApi.fetchFacebookPages).not.toHaveBeenCalled(); + }); + + it('resolves null on an unknown login status', async () => { + stubLogin({ status: 'unknown' }); + const { loginAndFetchPages } = useFacebookPageConnect(); + + await expect(loginAndFetchPages()).resolves.toBeNull(); + }); + + it('rejects when fetching pages fails', async () => { + ChannelApi.fetchFacebookPages.mockRejectedValue(new Error('fetch failed')); + const { loginAndFetchPages } = useFacebookPageConnect(); + + await expect(loginAndFetchPages()).rejects.toThrow('fetch failed'); + }); + + it('rejects when the SDK fails to load', async () => { + const error = new Error('script load failed'); + error.name = 'ScriptLoaderError'; + setupFacebookSdk.mockRejectedValue(error); + const { loginAndFetchPages } = useFacebookPageConnect(); + + await expect(loginAndFetchPages()).rejects.toThrow('script load failed'); + }); + + it('ignores a second call while a run is in flight', async () => { + const pending = createDeferred(); + ChannelApi.fetchFacebookPages.mockReturnValue(pending.promise); + + const { loginAndFetchPages } = useFacebookPageConnect(); + const first = loginAndFetchPages(); + const second = loginAndFetchPages(); + + await expect(second).resolves.toBeNull(); + + pending.resolve(pagesResponse); + await first; + expect(window.FB.login).toHaveBeenCalledTimes(1); + }); + + it('toggles isAuthenticating across a run', async () => { + const pending = createDeferred(); + ChannelApi.fetchFacebookPages.mockReturnValue(pending.promise); + + const { isAuthenticating, loginAndFetchPages } = useFacebookPageConnect(); + expect(isAuthenticating.value).toBe(false); + + const result = loginAndFetchPages(); + await flushPromises(); + expect(isAuthenticating.value).toBe(true); + + pending.resolve(pagesResponse); + await result; + expect(isAuthenticating.value).toBe(false); + }); + + it('preloads the SDK once and reuses it for login', async () => { + const { preloadSdk, loginAndFetchPages } = useFacebookPageConnect(); + + preloadSdk(); + preloadSdk(); + await loginAndFetchPages(); + + expect(setupFacebookSdk).toHaveBeenCalledTimes(1); + }); +}); diff --git a/app/javascript/dashboard/composables/spec/useWhatsappEmbeddedSignup.spec.js b/app/javascript/dashboard/composables/spec/useWhatsappEmbeddedSignup.spec.js new file mode 100644 index 000000000..1efbad8a2 --- /dev/null +++ b/app/javascript/dashboard/composables/spec/useWhatsappEmbeddedSignup.spec.js @@ -0,0 +1,208 @@ +import { useWhatsappEmbeddedSignup } from '../useWhatsappEmbeddedSignup'; +import { + setupFacebookSdk, + initWhatsAppEmbeddedSignup, + createMessageHandler, +} from 'dashboard/routes/dashboard/settings/inbox/channels/whatsapp/utils'; + +vi.mock( + 'dashboard/routes/dashboard/settings/inbox/channels/whatsapp/utils', + () => ({ + setupFacebookSdk: vi.fn(), + initWhatsAppEmbeddedSignup: vi.fn(), + createMessageHandler: vi.fn(), + isValidBusinessData: vi.fn(data => + Boolean(data && data.business_id && data.waba_id) + ), + }) +); + +const flushPromises = () => + new Promise(resolve => { + setTimeout(resolve, 0); + }); + +const createDeferred = () => { + let resolve; + let reject; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; +}; + +const VALID_BUSINESS = { + business_id: 'biz-1', + waba_id: 'waba-1', + phone_number_id: 'phone-1', +}; + +describe('useWhatsappEmbeddedSignup', () => { + // The mocked createMessageHandler captures the callback the composable + // registers, so tests can simulate Meta's WA_EMBEDDED_SIGNUP postMessages + // directly without the window-event + origin plumbing (that is covered by + // the utils' own tests). + let signupCallback; + let registeredListener; + + const emit = data => signupCallback(data); + + beforeEach(() => { + vi.clearAllMocks(); + + window.chatwootConfig = { + whatsappAppId: 'app-id', + whatsappConfigurationId: 'config-id', + whatsappApiVersion: 'v22.0', + }; + + setupFacebookSdk.mockResolvedValue(); + createMessageHandler.mockImplementation(callback => { + signupCallback = callback; + registeredListener = () => {}; + return registeredListener; + }); + }); + + it('resolves credentials when the auth code arrives before the business data', async () => { + initWhatsAppEmbeddedSignup.mockResolvedValue('auth-code'); + + const { runEmbeddedSignup } = useWhatsappEmbeddedSignup(); + const result = runEmbeddedSignup(); + + await flushPromises(); // SDK setup + FB.login resolve the code first + emit({ event: 'FINISH', data: VALID_BUSINESS }); + + await expect(result).resolves.toEqual({ + code: 'auth-code', + business_id: 'biz-1', + waba_id: 'waba-1', + phone_number_id: 'phone-1', + }); + expect(setupFacebookSdk).toHaveBeenCalledWith('app-id', 'v22.0'); + expect(initWhatsAppEmbeddedSignup).toHaveBeenCalledWith('config-id'); + }); + + it('resolves credentials when the business data arrives before the auth code', async () => { + const code = createDeferred(); + initWhatsAppEmbeddedSignup.mockReturnValue(code.promise); + + const { runEmbeddedSignup } = useWhatsappEmbeddedSignup(); + const result = runEmbeddedSignup(); + + // Business data lands first, while FB.login is still pending. + emit({ + event: 'FINISH_WHATSAPP_BUSINESS_APP_ONBOARDING', + data: VALID_BUSINESS, + }); + code.resolve('late-code'); + + await expect(result).resolves.toEqual({ + code: 'late-code', + business_id: 'biz-1', + waba_id: 'waba-1', + phone_number_id: 'phone-1', + }); + }); + + it('defaults phone_number_id to an empty string when absent', async () => { + initWhatsAppEmbeddedSignup.mockResolvedValue('auth-code'); + + const { runEmbeddedSignup } = useWhatsappEmbeddedSignup(); + const result = runEmbeddedSignup(); + + await flushPromises(); + emit({ + event: 'FINISH', + data: { business_id: 'biz-1', waba_id: 'waba-1' }, + }); + + await expect(result).resolves.toMatchObject({ phone_number_id: '' }); + }); + + it('resolves null when FB.login is cancelled', async () => { + initWhatsAppEmbeddedSignup.mockRejectedValue(new Error('Login cancelled')); + + const { runEmbeddedSignup } = useWhatsappEmbeddedSignup(); + + await expect(runEmbeddedSignup()).resolves.toBeNull(); + }); + + it('resolves null on a CANCEL event', async () => { + initWhatsAppEmbeddedSignup.mockReturnValue(createDeferred().promise); + + const { runEmbeddedSignup } = useWhatsappEmbeddedSignup(); + const result = runEmbeddedSignup(); + + emit({ event: 'CANCEL' }); + + await expect(result).resolves.toBeNull(); + }); + + it('rejects with the Meta error message on an error event', async () => { + initWhatsAppEmbeddedSignup.mockReturnValue(createDeferred().promise); + + const { runEmbeddedSignup } = useWhatsappEmbeddedSignup(); + const result = runEmbeddedSignup(); + + emit({ event: 'error', error_message: 'WABA not eligible' }); + + await expect(result).rejects.toThrow('WABA not eligible'); + }); + + it('rejects when the business data is invalid', async () => { + initWhatsAppEmbeddedSignup.mockReturnValue(createDeferred().promise); + + const { runEmbeddedSignup } = useWhatsappEmbeddedSignup(); + const result = runEmbeddedSignup(); + + emit({ event: 'FINISH', data: { business_id: 'biz-1' } }); // no waba_id + + await expect(result).rejects.toThrow('Invalid business data'); + }); + + it('rejects when the SDK or login fails for a non-cancel reason', async () => { + initWhatsAppEmbeddedSignup.mockRejectedValue(new Error('popup blocked')); + + const { runEmbeddedSignup } = useWhatsappEmbeddedSignup(); + + await expect(runEmbeddedSignup()).rejects.toThrow('popup blocked'); + }); + + it('ignores a second call while a run is in flight', async () => { + initWhatsAppEmbeddedSignup.mockResolvedValue('auth-code'); + + const { runEmbeddedSignup } = useWhatsappEmbeddedSignup(); + const first = runEmbeddedSignup(); + const second = runEmbeddedSignup(); + + await expect(second).resolves.toBeNull(); + + // Let the first run finish so it doesn't leak into the next test. + await flushPromises(); + emit({ event: 'FINISH', data: VALID_BUSINESS }); + await first; + + expect(setupFacebookSdk).toHaveBeenCalledTimes(1); + }); + + it('toggles isAuthenticating and removes the listener once settled', async () => { + initWhatsAppEmbeddedSignup.mockResolvedValue('auth-code'); + const removeSpy = vi.spyOn(window, 'removeEventListener'); + + const { isAuthenticating, runEmbeddedSignup } = useWhatsappEmbeddedSignup(); + expect(isAuthenticating.value).toBe(false); + + const result = runEmbeddedSignup(); + expect(isAuthenticating.value).toBe(true); + + await flushPromises(); + emit({ event: 'FINISH', data: VALID_BUSINESS }); + await result; + + expect(isAuthenticating.value).toBe(false); + expect(removeSpy).toHaveBeenCalledWith('message', registeredListener); + removeSpy.mockRestore(); + }); +}); diff --git a/app/javascript/dashboard/composables/useAccount.js b/app/javascript/dashboard/composables/useAccount.js index 5a8441d33..c6149044f 100644 --- a/app/javascript/dashboard/composables/useAccount.js +++ b/app/javascript/dashboard/composables/useAccount.js @@ -52,6 +52,10 @@ export function useAccount() { }); }; + const finishOnboarding = async data => { + await store.dispatch('accounts/finishOnboarding', data); + }; + return { accountId, route, @@ -61,5 +65,6 @@ export function useAccount() { isCloudFeatureEnabled, isOnChatwootCloud, updateAccount, + finishOnboarding, }; } diff --git a/app/javascript/dashboard/composables/useFacebookPageConnect.js b/app/javascript/dashboard/composables/useFacebookPageConnect.js new file mode 100644 index 000000000..46a177d58 --- /dev/null +++ b/app/javascript/dashboard/composables/useFacebookPageConnect.js @@ -0,0 +1,81 @@ +import { ref } from 'vue'; +import { useMapGetter } from 'dashboard/composables/store'; +import ChannelApi from 'dashboard/api/channels'; +import { setupFacebookSdk } from 'dashboard/routes/dashboard/settings/inbox/channels/whatsapp/utils'; + +// Page-management + messaging scopes required to list pages and create a +// Channel::FacebookPage inbox (mirrors the standalone settings flow). +const FB_PAGE_SCOPES = + 'pages_manage_metadata,business_management,pages_messaging,instagram_basic,pages_show_list,pages_read_engagement,instagram_manage_messages'; + +// Headless half of the Facebook Page connect flow: load the Meta SDK, run +// FB.login for page scopes, and fetch the user's pages. The caller owns the +// page-picker UI and the channel creation, because choosing a page is an +// interactive step (a user can manage several pages). +// +// Split into preloadSdk() + loginAndFetchPages() for popup safety: FB.login +// opens a popup and needs the click's transient activation. Preloading the SDK +// when the picker opens means the click-time `await` resolves within that +// activation window; a cold load resolves on the script's `load` task seconds +// later, after activation has expired, and the popup gets blocked. +export function useFacebookPageConnect() { + const accountId = useMapGetter('getCurrentAccountId'); + const isAuthenticating = ref(false); + + let sdkSetupPromise = null; + + // Idempotent — call this when the picker UI opens. A failed load clears the + // cache so a later attempt can retry instead of being stuck on a rejection. + const preloadSdk = () => { + if (!sdkSetupPromise) { + sdkSetupPromise = setupFacebookSdk( + window.chatwootConfig?.fbAppId, + window.chatwootConfig?.fbApiVersion + ).catch(error => { + sdkSetupPromise = null; + throw error; + }); + } + return sdkSetupPromise; + }; + + // FB.login never rejects; resolve the user access token on success and null + // for any other status (closed popup, not_authorized, unknown). + const login = () => + new Promise(resolve => { + window.FB.login( + response => { + resolve( + response.status === 'connected' + ? response.authResponse?.accessToken || null + : null + ); + }, + { scope: FB_PAGE_SCOPES } + ); + }); + + // Resolves { userAccessToken, pages } on success, null when the user cancels, + // and rejects on SDK-load or page-fetch failure (the caller maps it to UI). + const loginAndFetchPages = async () => { + if (isAuthenticating.value) return null; + isAuthenticating.value = true; + try { + await preloadSdk(); + const token = await login(); + if (!token) return null; + + const response = await ChannelApi.fetchFacebookPages( + token, + accountId.value + ); + const { page_details: pages, user_access_token: userAccessToken } = + response.data.data; + return { userAccessToken, pages }; + } finally { + isAuthenticating.value = false; + } + }; + + return { isAuthenticating, preloadSdk, loginAndFetchPages }; +} diff --git a/app/javascript/dashboard/composables/useWhatsappEmbeddedSignup.js b/app/javascript/dashboard/composables/useWhatsappEmbeddedSignup.js new file mode 100644 index 000000000..ead9c6d84 --- /dev/null +++ b/app/javascript/dashboard/composables/useWhatsappEmbeddedSignup.js @@ -0,0 +1,96 @@ +import { ref } from 'vue'; +import { + setupFacebookSdk, + initWhatsAppEmbeddedSignup, + createMessageHandler, + isValidBusinessData, +} from 'dashboard/routes/dashboard/settings/inbox/channels/whatsapp/utils'; + +// Drives Meta's WhatsApp embedded-signup popup (Facebook JS SDK). FB.login() +// resolves an auth `code` while the WABA identifiers (waba_id, phone_number_id) +// arrive separately over a postMessage event — order isn't guaranteed, so we +// hold both and resolve once both are present. +// +// `runEmbeddedSignup` returns the signup credentials; the caller exchanges them +// for an inbox via `inboxes/createWhatsAppEmbeddedSignup` and owns its own UX +// (alerts, navigation, etc). Resolves `null` when the user cancels the popup; +// rejects on SDK load or signup errors. The window listener is scoped to a +// single run, so this is safe to call from anywhere without lifecycle wiring. +export function useWhatsappEmbeddedSignup() { + const isAuthenticating = ref(false); + + const runEmbeddedSignup = () => { + if (isAuthenticating.value) return Promise.resolve(null); + isAuthenticating.value = true; + + return new Promise((resolve, reject) => { + let authCode = null; + let businessData = null; + let settled = false; + let messageHandler; + + const settle = (fn, value) => { + if (settled) return; + settled = true; + window.removeEventListener('message', messageHandler); + isAuthenticating.value = false; + fn(value); + }; + + // Both the auth code and the business data arrive asynchronously and in + // no fixed order; only resolve once we're holding both. + const resolveIfReady = () => { + if (!authCode || !businessData) return; + settle(resolve, { + code: authCode, + business_id: businessData.business_id, + waba_id: businessData.waba_id, + phone_number_id: businessData.phone_number_id || '', + }); + }; + + messageHandler = createMessageHandler(data => { + if ( + data.event === 'FINISH' || + data.event === 'FINISH_WHATSAPP_BUSINESS_APP_ONBOARDING' + ) { + if (!isValidBusinessData(data.data)) { + settle(reject, new Error('Invalid business data')); + return; + } + businessData = data.data; + resolveIfReady(); + } else if (data.event === 'CANCEL') { + settle(resolve, null); + } else if (data.event === 'error') { + settle(reject, new Error(data.error_message || 'Signup error')); + } + }); + + window.addEventListener('message', messageHandler); + + (async () => { + try { + await setupFacebookSdk( + window.chatwootConfig?.whatsappAppId, + window.chatwootConfig?.whatsappApiVersion + ); + authCode = await initWhatsAppEmbeddedSignup( + window.chatwootConfig?.whatsappConfigurationId + ); + resolveIfReady(); + } catch (error) { + // FB.login() rejects with 'Login cancelled' when the user dismisses + // the popup — treat it as a cancel rather than an error. + if (error.message === 'Login cancelled') { + settle(resolve, null); + } else { + settle(reject, error); + } + } + })(); + }); + }; + + return { isAuthenticating, runEmbeddedSignup }; +} diff --git a/app/javascript/dashboard/constants/editor.js b/app/javascript/dashboard/constants/editor.js index 378d303b4..5f4fe0e03 100644 --- a/app/javascript/dashboard/constants/editor.js +++ b/app/javascript/dashboard/constants/editor.js @@ -14,6 +14,7 @@ export const FORMATTING = { 'link', 'bulletList', 'orderedList', + 'imageUpload', 'undo', 'redo', ], @@ -30,6 +31,7 @@ export const FORMATTING = { 'strike', 'bulletList', 'orderedList', + 'imageUpload', 'undo', 'redo', ], @@ -263,23 +265,3 @@ export const MARKDOWN_PATTERNS = [ ], }, ]; - -// Editor image resize options for Message Editor -export const MESSAGE_EDITOR_IMAGE_RESIZES = [ - { - name: 'Small', - height: '24px', - }, - { - name: 'Medium', - height: '48px', - }, - { - name: 'Large', - height: '72px', - }, - { - name: 'Original Size', - height: 'auto', - }, -]; diff --git a/app/javascript/dashboard/helper/customViewsHelper.js b/app/javascript/dashboard/helper/customViewsHelper.js index c837ce613..f1e750353 100644 --- a/app/javascript/dashboard/helper/customViewsHelper.js +++ b/app/javascript/dashboard/helper/customViewsHelper.js @@ -37,6 +37,13 @@ export const getValuesName = (values, list, idKey, nameKey) => { }; }; +const getValuesForContact = (values, contacts) => ({ + id: values[0], + name: + contacts?.find(contact => contact.id === values[0])?.name || + `Contact #${values[0]}`, +}); + export const getValuesForStatus = values => { return values.map(value => ({ id: value, name: value })); }; @@ -84,6 +91,7 @@ export const getValuesForFilter = (filter, params) => { campaigns, labels, priority, + contacts, } = params; switch (attribute_key) { case 'status': @@ -94,6 +102,8 @@ export const getValuesForFilter = (filter, params) => { return getValuesName(values, inboxes, 'id', 'name'); case 'team_id': return getValuesName(values, teams, 'id', 'name'); + case 'contact_id': + return getValuesForContact(values, contacts); case 'campaign_id': return getValuesName(values, campaigns, 'id', 'title'); case 'labels': diff --git a/app/javascript/dashboard/helper/editorHelper.js b/app/javascript/dashboard/helper/editorHelper.js index e4330b332..32f56172a 100644 --- a/app/javascript/dashboard/helper/editorHelper.js +++ b/app/javascript/dashboard/helper/editorHelper.js @@ -379,31 +379,6 @@ export const findNodeToInsertImage = (editorState, fileUrl) => { }; }; -/** - * Set URL with query and size. - * - * @param {Object} selectedImageNode - The current selected node. - * @param {Object} size - The size to set. - * @param {Object} editorView - The editor view. - */ -export function setURLWithQueryAndSize(selectedImageNode, size, editorView) { - if (selectedImageNode) { - // Create and apply the transaction - const tr = editorView.state.tr.setNodeMarkup( - editorView.state.selection.from, - null, - { - src: selectedImageNode.src, - height: size.height, - } - ); - - if (tr.docChanged) { - editorView.dispatch(tr); - } - } -} - /** * Strips unsupported markdown formatting from content based on the editor schema. * This ensures canned responses with rich formatting can be inserted into channels diff --git a/app/javascript/dashboard/helper/portalHelper.js b/app/javascript/dashboard/helper/portalHelper.js index 33a2a822a..89f13f8cd 100644 --- a/app/javascript/dashboard/helper/portalHelper.js +++ b/app/javascript/dashboard/helper/portalHelper.js @@ -159,6 +159,13 @@ export const LOCALE_MENU_ITEMS = { value: 'publish', icon: 'i-lucide-eye', }, + customizeContent: { + label: + 'HELP_CENTER.LOCALES_PAGE.LOCALE_CARD.DROPDOWN_MENU.CUSTOMIZE_CONTENT', + action: 'customize-content', + value: 'customize-content', + icon: 'i-lucide-pencil', + }, delete: { label: 'HELP_CENTER.LOCALES_PAGE.LOCALE_CARD.DROPDOWN_MENU.DELETE', action: 'delete', @@ -172,20 +179,28 @@ const disableLocaleMenuItems = menuItems => export const buildLocaleMenuItems = ({ isDefault, isDraft }) => { if (isDefault) { - return disableLocaleMenuItems([ - LOCALE_MENU_ITEMS.makeDefault, - LOCALE_MENU_ITEMS.moveToDraft, - LOCALE_MENU_ITEMS.delete, - ]); + return [ + ...disableLocaleMenuItems([ + LOCALE_MENU_ITEMS.makeDefault, + LOCALE_MENU_ITEMS.moveToDraft, + ]), + LOCALE_MENU_ITEMS.customizeContent, + ...disableLocaleMenuItems([LOCALE_MENU_ITEMS.delete]), + ]; } if (isDraft) { - return [LOCALE_MENU_ITEMS.publishLocale, LOCALE_MENU_ITEMS.delete]; + return [ + LOCALE_MENU_ITEMS.publishLocale, + LOCALE_MENU_ITEMS.customizeContent, + LOCALE_MENU_ITEMS.delete, + ]; } return [ LOCALE_MENU_ITEMS.makeDefault, LOCALE_MENU_ITEMS.moveToDraft, + LOCALE_MENU_ITEMS.customizeContent, LOCALE_MENU_ITEMS.delete, ]; }; diff --git a/app/javascript/dashboard/helper/specs/customViewsHelper.spec.js b/app/javascript/dashboard/helper/specs/customViewsHelper.spec.js index 0709c4e8d..e5d6b8de6 100644 --- a/app/javascript/dashboard/helper/specs/customViewsHelper.spec.js +++ b/app/javascript/dashboard/helper/specs/customViewsHelper.spec.js @@ -273,6 +273,41 @@ describe('customViewsHelper', () => { }; expect(generateValuesForEditCustomViews(filter, params)).toEqual('1'); }); + + it('returns contact name for contact filters when contact is available', () => { + const filter = { + attribute_key: 'contact_id', + filter_operator: 'equal_to', + values: [123], + }; + const params = { + contacts: [{ id: 123, name: 'John Doe' }], + filterTypes: advancedFilterTypes, + allCustomAttributes: [], + }; + + expect(generateValuesForEditCustomViews(filter, params)).toEqual({ + id: 123, + name: 'John Doe', + }); + }); + + it('returns fallback contact display value when contact is not available', () => { + const filter = { + attribute_key: 'contact_id', + filter_operator: 'equal_to', + values: [123], + }; + const params = { + filterTypes: advancedFilterTypes, + allCustomAttributes: [], + }; + + expect(generateValuesForEditCustomViews(filter, params)).toEqual({ + id: 123, + name: 'Contact #123', + }); + }); }); describe('#generateCustomAttributesInputType', () => { diff --git a/app/javascript/dashboard/helper/specs/editorHelper.spec.js b/app/javascript/dashboard/helper/specs/editorHelper.spec.js index 00d1e83d4..7d32f63e0 100644 --- a/app/javascript/dashboard/helper/specs/editorHelper.spec.js +++ b/app/javascript/dashboard/helper/specs/editorHelper.spec.js @@ -16,7 +16,6 @@ import { insertAtCursor, removeSignature, replaceSignature, - setURLWithQueryAndSize, stripInlineBase64Images, stripUnsupportedFormatting, stripUnsupportedMarkdown, @@ -653,71 +652,6 @@ describe('findNodeToInsertImage', () => { }); }); -describe('setURLWithQueryAndSize', () => { - let selectedNode; - let editorView; - - beforeEach(() => { - selectedNode = { - setAttribute: vi.fn(), - }; - - const tr = { - setNodeMarkup: vi.fn().mockReturnValue({ - docChanged: true, - }), - }; - - const state = { - selection: { from: 0 }, - tr, - }; - - editorView = { - state, - dispatch: vi.fn(), - }; - }); - - it('updates the URL with the given size and updates the editor view', () => { - const size = { height: '20px' }; - - setURLWithQueryAndSize(selectedNode, size, editorView); - - // Check if the editor view is updated - expect(editorView.dispatch).toHaveBeenCalledTimes(1); - }); - - it('updates the URL with the given size and updates the editor view with original size', () => { - const size = { height: 'auto' }; - - setURLWithQueryAndSize(selectedNode, size, editorView); - - // Check if the editor view is updated - expect(editorView.dispatch).toHaveBeenCalledTimes(1); - }); - - it('does not update the editor view if the document has not changed', () => { - editorView.state.tr.setNodeMarkup = vi.fn().mockReturnValue({ - docChanged: false, - }); - - const size = { height: '20px' }; - - setURLWithQueryAndSize(selectedNode, size, editorView); - - // Check if the editor view dispatch was not called - expect(editorView.dispatch).not.toHaveBeenCalled(); - }); - - it('does not perform any operations if selectedNode is not provided', () => { - setURLWithQueryAndSize(null, { height: '20px' }, editorView); - - // Ensure the dispatch method wasn't called - expect(editorView.dispatch).not.toHaveBeenCalled(); - }); -}); - describe('getContentNode', () => { let mockEditorView; diff --git a/app/javascript/dashboard/helper/specs/filterQueryGenerator.spec.js b/app/javascript/dashboard/helper/specs/filterQueryGenerator.spec.js index 723ab8ef4..7585ad159 100644 --- a/app/javascript/dashboard/helper/specs/filterQueryGenerator.spec.js +++ b/app/javascript/dashboard/helper/specs/filterQueryGenerator.spec.js @@ -64,4 +64,25 @@ describe('#filterQueryGenerator', () => { filterQueryGenerator(testData).payload.every(i => Array.isArray(i.values)) ).toBe(true); }); + + it('serializes a selected contact object to contact id', () => { + const result = filterQueryGenerator([ + { + attribute_key: 'contact_id', + filter_operator: 'equal_to', + values: { id: 123, name: 'Jane Doe' }, + query_operator: 'and', + }, + ]); + + expect(result).toMatchObject({ + payload: [ + { + attribute_key: 'contact_id', + filter_operator: 'equal_to', + values: [123], + }, + ], + }); + }); }); diff --git a/app/javascript/dashboard/helper/specs/portalHelper.spec.js b/app/javascript/dashboard/helper/specs/portalHelper.spec.js index 631714095..e8d200518 100644 --- a/app/javascript/dashboard/helper/specs/portalHelper.spec.js +++ b/app/javascript/dashboard/helper/specs/portalHelper.spec.js @@ -74,37 +74,40 @@ describe('PortalHelper', () => { }); describe('buildLocaleMenuItems', () => { - it('returns disabled actions for the default locale', () => { + it('disables other actions but keeps customize enabled for the default locale', () => { + const items = buildLocaleMenuItems({ isDefault: true, isDraft: false }); + const customize = items.find(item => item.action === 'customize-content'); + + expect(customize).toBeTruthy(); + expect(customize.disabled).toBeFalsy(); expect( - buildLocaleMenuItems({ - isDefault: true, - isDraft: false, - }) - ).toEqual( - expect.arrayContaining([ - expect.objectContaining({ action: 'change-default', disabled: true }), - expect.objectContaining({ action: 'move-to-draft', disabled: true }), - expect.objectContaining({ action: 'delete', disabled: true }), - ]) - ); + items + .filter(item => item.action !== 'customize-content') + .every(item => item.disabled) + ).toBe(true); }); - it('returns publish and delete actions for draft locales', () => { + it('returns publish, customize, and delete actions for draft locales', () => { expect( buildLocaleMenuItems({ isDefault: false, isDraft: true, }).map(({ action }) => action) - ).toEqual(['publish-locale', 'delete']); + ).toEqual(['publish-locale', 'customize-content', 'delete']); }); - it('returns default, draft, and delete actions for live locales', () => { + it('returns default, draft, customize, and delete actions for live locales', () => { expect( buildLocaleMenuItems({ isDefault: false, isDraft: false, }).map(({ action }) => action) - ).toEqual(['change-default', 'move-to-draft', 'delete']); + ).toEqual([ + 'change-default', + 'move-to-draft', + 'customize-content', + 'delete', + ]); }); }); }); diff --git a/app/javascript/dashboard/i18n/locale/am/bulkActions.json b/app/javascript/dashboard/i18n/locale/am/bulkActions.json index 2472a9288..6b922bc7b 100644 --- a/app/javascript/dashboard/i18n/locale/am/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/am/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "None", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select team", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/am/campaign.json b/app/javascript/dashboard/i18n/locale/am/campaign.json index 10366e79e..55de22367 100644 --- a/app/javascript/dashboard/i18n/locale/am/campaign.json +++ b/app/javascript/dashboard/i18n/locale/am/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "በሂደት ላይ", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "በሂደት ላይ", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/am/components.json b/app/javascript/dashboard/i18n/locale/am/components.json index a75d35b08..3ee865a89 100644 --- a/app/javascript/dashboard/i18n/locale/am/components.json +++ b/app/javascript/dashboard/i18n/locale/am/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/am/contact.json b/app/javascript/dashboard/i18n/locale/am/contact.json index 329a29569..aa025f30c 100644 --- a/app/javascript/dashboard/i18n/locale/am/contact.json +++ b/app/javascript/dashboard/i18n/locale/am/contact.json @@ -20,6 +20,8 @@ "CALL": "ደውል", "CALL_INITIATED": "ለእውነተኛው እውቀት መደወል እየተከናወነ ነው…", "CALL_FAILED": "ጥሪውን መጀመር አልቻልንም። እባክዎ ደግመው ይሞክሩ።.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "የድምፅ ኢንቦክስ ይምረጡ" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "መለያዎችን መሰጠት", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "መለያዎች በተሳካ ሁኔታ ተመዝግበዋል።.", "ASSIGN_LABELS_FAILED": "መለያዎችን ማስመዝገብ አልተሳካም", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "ለተመረጡት እውነተኛዎች የሚያክሉትን መለያዎች ይምረጡ።.", "NO_LABELS_FOUND": "እስካሁን መለያዎች አልተገኙም።.", "SELECTED_COUNT": "{count} ተመርጧል", diff --git a/app/javascript/dashboard/i18n/locale/am/conversation.json b/app/javascript/dashboard/i18n/locale/am/conversation.json index 3cfaeb3a7..a6803eae1 100644 --- a/app/javascript/dashboard/i18n/locale/am/conversation.json +++ b/app/javascript/dashboard/i18n/locale/am/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", "NO_RESPONSE": "No response", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "ተፈትኗል", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Drag and drop here to attach", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/am/helpCenter.json b/app/javascript/dashboard/i18n/locale/am/helpCenter.json index f40b2b7f0..ef480e1ee 100644 --- a/app/javascript/dashboard/i18n/locale/am/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/am/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "እቅድ", "ARCHIVE": "አርክቭ", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Delete", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Delete", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "ቅንብር አርትዕ" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "አስወግድ" + }, + "SAVE": "ለውጦች አስቀምጥ" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "ፖርታል በተሳካ ሁኔታ ተፈጥሯል", diff --git a/app/javascript/dashboard/i18n/locale/am/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/am/inboxMgmt.json index dbc8ba1f1..3f784dc92 100644 --- a/app/javascript/dashboard/i18n/locale/am/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/am/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "ከMeta ጋር በመረጋገጥ ላይ ነው", "WAITING_FOR_BUSINESS_INFO": "እባክዎ በMeta መስኮት ውስጥ የንግድ ቅንብር ያርኩ...", "PROCESSING": "የWhatsApp ቢዝነስ መለያዎን እየተዘጋጀ ነው", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Facebook SDK እየተጫነ ነው...", "CANCELLED": "የWhatsApp ምዝገባ ተሰርዟል", "SUCCESS_TITLE": "የWhatsApp ቢዝነስ መለያ ተገናኝቷል!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "ማረጋገጫ አልተጠናቀቀም። ሂደቱን እባክዎ ዳግም ይጀምሩ።.", "SUCCESS_FALLBACK": "የWhatsApp የንግድ መለያ በተሳካ ሁኔታ ተቋቋመ", "MANUAL_FALLBACK": "ቁጥርዎ ከWhatsApp Business Platform (API) ጋር ከተገናኘ እና ወይም እርስዎ የቴክኖሎጂ አቅራቢ ከሆኑ እና የእርስዎን ቁጥር በራስዎ ሲያስገቡ፣ እባክዎ የ{link} ሂደትን ይጠቀሙ", - "MANUAL_LINK_TEXT": "የእጅ ማቀናበሪያ ሂደት" + "MANUAL_LINK_TEXT": "የእጅ ማቀናበሪያ ሂደት", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "WhatsApp ቻናሉን ማስቀመጥ አልተቻለም" @@ -465,6 +467,10 @@ "TITLE": "ዋትስአፕ", "DESCRIPTION": "በWhatsApp ላይ ደንበኞችዎን ድጋፍ ያድርጉ" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "ኢሜይል", "DESCRIPTION": "ከGmail, Outlook ወይም ከሌሎች አቅራቢዎች ጋር ያገናኙ" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "የቦት ቅንብሮች", "ACCOUNT_HEALTH": "የመለያ ጤና", "CSAT": "የደንበኞች ደህንነት ግምገማ (CSAT)", - "VOICE": "ድምጽ" + "VOICE": "ድምጽ", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "የቻናል ቅድሚያዎች", "WIDGET_FEATURES": "የዊጅት ባህሪያት", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "ከWhatsApp መልእክት አብነቶች እጅግ በእጅ ማስተካከል ለእንደገና የሚገኙ አብነቶችን ያዘምኑ።.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "አብነቶችን ያዘምኑ", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "የአብነት ማስተካከያ በተሳካ ሁኔታ ተጀምሯል። ለማዘመን ጥቂት ደቂቃዎች ሊወስድ ይችላል።.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "የቀደም ቻት ቅጥያ ቅንብሮችን አዘምን" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/am/integrations.json b/app/javascript/dashboard/i18n/locale/am/integrations.json index e26adaa52..8af05114c 100644 --- a/app/javascript/dashboard/i18n/locale/am/integrations.json +++ b/app/javascript/dashboard/i18n/locale/am/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "እውቂያ ተፈጥሯል", "CONTACT_UPDATED": "እውቂያ ተሻሽሏል", "CONVERSATION_TYPING_ON": "ውይይት ማስተካከያ በተጠቃሚ ላይ ነው", - "CONVERSATION_TYPING_OFF": "ውይይት ማስተካከያ ከተጠቃሚ ላይ አልተጠቀሰም" + "CONVERSATION_TYPING_OFF": "ውይይት ማስተካከያ ከተጠቃሚ ላይ አልተጠቀሰም", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/ar/bulkActions.json b/app/javascript/dashboard/i18n/locale/ar/bulkActions.json index d894fb3ce..d436e35fb 100644 --- a/app/javascript/dashboard/i18n/locale/ar/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/ar/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} المحادثات المحددة", - "AGENT_SELECT_LABEL": "اختر وكيل", - "ASSIGN_CONFIRMATION_LABEL": "هل أنت متأكد من أنك تريد تعيين {conversationCount} {conversationLabel} إلى", - "UNASSIGN_CONFIRMATION_LABEL": "هل أنت متأكد من إلغاء تعيين {conversationCount} {conversationLabel}؟", - "GO_BACK_LABEL": "العودة للخلف", - "ASSIGN_LABEL": "تكليف", "NONE": "لا شيء", "CLEAR_SELECTION": "مسح", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "تم تسوية المحادثات بنجاح.", "RESOLVE_FAILED": "فشل في حل المحادثات، يرجى المحاولة مرة أخرى.", "ALL_CONVERSATIONS_SELECTED_ALERT": "المحادثات المرئية في هذه الصفحة هي المحددة فقط.", - "AGENT_LIST_LOADING": "جاري جلب الوكلاء", "UPDATE": { "CHANGE_STATUS": "تغيير الحالة", "SNOOZE_UNTIL": "تأجيل", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "إضافة وسم", - "NO_LABELS_FOUND": "لم يتم العثور على تصنيفات", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "تعيين التسميات المحددة", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "تم تعيين التسميات بنجاح.", - "ASSIGN_FAILED": "فشل في تعيين التسميات ، الرجاء المحاولة مرة أخرى." + "ASSIGN_FAILED": "فشل في تعيين التسميات ، الرجاء المحاولة مرة أخرى.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "اختر فريق", "NONE": "لا شيء", - "NO_TEAMS_AVAILABLE": "لا توجد فرق مضافة إلى هذا الحساب حتى الآن.", - "ASSIGN_SELECTED_TEAMS": "تعيين فريق محدد.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "تم تعيين الفرق بنجاح.", diff --git a/app/javascript/dashboard/i18n/locale/ar/campaign.json b/app/javascript/dashboard/i18n/locale/ar/campaign.json index 0af3565b3..3d274c437 100644 --- a/app/javascript/dashboard/i18n/locale/ar/campaign.json +++ b/app/javascript/dashboard/i18n/locale/ar/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "مكتمل", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "مكتمل", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/ar/components.json b/app/javascript/dashboard/i18n/locale/ar/components.json index 9944f9f47..62ad85d93 100644 --- a/app/javascript/dashboard/i18n/locale/ar/components.json +++ b/app/javascript/dashboard/i18n/locale/ar/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/ar/contact.json b/app/javascript/dashboard/i18n/locale/ar/contact.json index 14b2e4f0d..f5db01558 100644 --- a/app/javascript/dashboard/i18n/locale/ar/contact.json +++ b/app/javascript/dashboard/i18n/locale/ar/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "جار الاتصال بجهة الاتصال…", "CALL_FAILED": "تعذر بدء المكالمة. الرجاء المحاولة مرة أخرى.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "تعيين التسميات", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "تم تعيين التسميات بنجاح.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/ar/conversation.json b/app/javascript/dashboard/i18n/locale/ar/conversation.json index 1bb427f7d..1794227c8 100644 --- a/app/javascript/dashboard/i18n/locale/ar/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ar/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "هذه الرسالة غير مدعومة، يمكنك مشاهدة هذه الرسالة على تطبيق فيسبوك (Messenger).", "UNSUPPORTED_MESSAGE_INSTAGRAM": "هذه الرسالة غير مدعومة، يمكنك عرض هذه الرسالة على تطبيق Instagram.", "UNSUPPORTED_MESSAGE_TIKTOK": "هذه الرسالة غير مدعومة. يمكنك مشاهدة هذه الرسالة على تطبيق TikTok.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "تم حذف الرسالة بنجاح", "FAIL_DELETE_MESSSAGE": "تعذر حذف الرسالة! حاول مرة أخرى", "NO_RESPONSE": "لا توجد استجابة", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "انضم إلى المكالمة" + "JOIN_CALL": "انضم إلى المكالمة", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "حل المحادثة", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "تأجيل حتى الغد", "SNOOZED_UNTIL_NEXT_WEEK": "تأجيل حتى الأسبوع القادم", "SNOOZED_UNTIL_NEXT_REPLY": "تأجيل حتى الرد التالي", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "تسجيل الصوت", "TIP_AUDIORECORDER_PERMISSION": "السماح بالوصول إلى الصوت", "TIP_AUDIORECORDER_ERROR": "تعذر فتح الصوت", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "اسحب و أسقط هنا للإرفاق", "START_AUDIO_RECORDING": "بدء التسجيل الصوتي", "STOP_AUDIO_RECORDING": "إيقاف التسجيل الصوتي", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "لم يتم الرد بعد", "HANDLED_IN_ANOTHER_TAB": "يتم التعامل معها في علامة تبويب أخرى", "REJECT_CALL": "رفض", + "DISMISS_CALL": "تجاهل", "JOIN_CALL": "انضم إلى المكالمة", - "END_CALL": "إنهاء المكالمة" + "END_CALL": "إنهاء المكالمة", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/ar/helpCenter.json b/app/javascript/dashboard/i18n/locale/ar/helpCenter.json index 66dbd8e12..5289aa444 100644 --- a/app/javascript/dashboard/i18n/locale/ar/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ar/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "مسودة", "ARCHIVE": "Archive", "TRANSLATE": "ترجم", + "MOVE_TO_CATEGORY": "الفئة", "DELETE": "حذف", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "حذف", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "المظهر", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "حذف" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "تم إنشاء البوابة بنجاح", diff --git a/app/javascript/dashboard/i18n/locale/ar/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ar/inboxMgmt.json index 2f314baa6..6acb48cfc 100644 --- a/app/javascript/dashboard/i18n/locale/ar/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ar/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "لم نتمكن من حفظ قناة واتساب" @@ -465,6 +467,10 @@ "TITLE": "واتساب", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "البريد الإلكتروني", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "اعدادات البوت", "ACCOUNT_HEALTH": "Account Health", "CSAT": "تقييم رضاء العملاء", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/ar/integrations.json b/app/javascript/dashboard/i18n/locale/ar/integrations.json index 6d875fbcf..2b2dfcef9 100644 --- a/app/javascript/dashboard/i18n/locale/ar/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ar/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact created", "CONTACT_UPDATED": "Contact updated", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/az/bulkActions.json b/app/javascript/dashboard/i18n/locale/az/bulkActions.json index 1f56b6ab3..e05829612 100644 --- a/app/javascript/dashboard/i18n/locale/az/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/az/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "Heç biri", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select team", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/az/campaign.json b/app/javascript/dashboard/i18n/locale/az/campaign.json index 10366e79e..78db922d1 100644 --- a/app/javascript/dashboard/i18n/locale/az/campaign.json +++ b/app/javascript/dashboard/i18n/locale/az/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/az/components.json b/app/javascript/dashboard/i18n/locale/az/components.json index a75d35b08..3ee865a89 100644 --- a/app/javascript/dashboard/i18n/locale/az/components.json +++ b/app/javascript/dashboard/i18n/locale/az/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/az/contact.json b/app/javascript/dashboard/i18n/locale/az/contact.json index aa19205cb..acf103ceb 100644 --- a/app/javascript/dashboard/i18n/locale/az/contact.json +++ b/app/javascript/dashboard/i18n/locale/az/contact.json @@ -20,6 +20,8 @@ "CALL": "Zəng et", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} seçildi", diff --git a/app/javascript/dashboard/i18n/locale/az/conversation.json b/app/javascript/dashboard/i18n/locale/az/conversation.json index 0fc8203c5..eff53867c 100644 --- a/app/javascript/dashboard/i18n/locale/az/conversation.json +++ b/app/javascript/dashboard/i18n/locale/az/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "Bu mesaj dəstəklənmir. Bu mesajı Facebook Messenger tətbiqində görə bilərsiniz.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "Bu mesaj dəstəklənmir. Bu mesajı Instagram tətbiqində görə bilərsiniz.", "UNSUPPORTED_MESSAGE_TIKTOK": "Bu mesaj dəstəklənmir. Bu mesajı TikTok tətbiqində görə bilərsiniz.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Mesaj uğurla silindi", "FAIL_DELETE_MESSSAGE": "Mesajı silmək mümkün olmadı! Yenidən cəhd edin", "NO_RESPONSE": "Cavab yoxdur", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Gedən zəng", "CALL_IN_PROGRESS": "Zəng davam edir", "NO_ANSWER": "Cavab yoxdur", + "NO_ANSWER_OUTBOUND_LABEL": "Cavab yoxdur", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Qeyri-işlək zəng", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Zəng bitdi", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Hələ cavab verilməyib", + "CALLING": "Calling…", "THEY_ANSWERED": "Onlar cavab verdi", "YOU_ANSWERED": "Siz cavab verdiniz", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Zəngə qoşul" + "JOIN_CALL": "Zəngə qoşul", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Həll et", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Sabaha qədər təxirə salındı", "SNOOZED_UNTIL_NEXT_WEEK": "Gələn həftəyə qədər təxirə salındı", "SNOOZED_UNTIL_NEXT_REPLY": "Növbəti cavaba qədər təxirə salındı", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Səs yaz", "TIP_AUDIORECORDER_PERMISSION": "Səsə girişə icazə ver", "TIP_AUDIORECORDER_ERROR": "Səsi açmaq mümkün olmadı", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Qoşmaq üçün buraya sürükləyin və buraxın", "START_AUDIO_RECORDING": "Səs yazısını başla", "STOP_AUDIO_RECORDING": "Səs yazısını dayandırın", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Hələ cavab verilməyib", "HANDLED_IN_ANOTHER_TAB": "Başqa sekmədə işlənir", "REJECT_CALL": "İmtina et", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Zəngə qoşul", - "END_CALL": "Zəngi bitir" + "END_CALL": "Zəngi bitir", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/az/helpCenter.json b/app/javascript/dashboard/i18n/locale/az/helpCenter.json index bbd8d72a6..eefb0c8da 100644 --- a/app/javascript/dashboard/i18n/locale/az/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/az/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Qaralama", "ARCHIVE": "Archive", "TRANSLATE": "Tərcümə et", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Delete", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Delete", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Sil" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal created successfully", diff --git a/app/javascript/dashboard/i18n/locale/az/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/az/inboxMgmt.json index e96e12942..28af6066e 100644 --- a/app/javascript/dashboard/i18n/locale/az/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/az/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Meta ilə autentifikasiya olunur", "WAITING_FOR_BUSINESS_INFO": "Zəhmət olmasa Meta pəncərəsində biznes quraşdırmasını tamamlayın...", "PROCESSING": "WhatsApp Biznes Hesabınızı quraşdırırıq", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Facebook SDK yüklənir...", "CANCELLED": "WhatsApp Qeydiyyatı ləğv edildi", "SUCCESS_TITLE": "WhatsApp Biznes Hesabı Qoşuldu!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Autentifikasiya tamamlanmadı. Zəhmət olmasa prosesi yenidən başladın.", "SUCCESS_FALLBACK": "WhatsApp Biznes Hesabı uğurla konfiqurasiya edildi", "MANUAL_FALLBACK": "Əgər nömrəniz artıq WhatsApp Business Platformasına (API) qoşulubsa və ya texnoloji təminatçı olaraq öz nömrənizi əlavə edirsinizsə, zəhmət olmasa {link} prosesindən istifadə edin", - "MANUAL_LINK_TEXT": "əl ilə qurma prosesi" + "MANUAL_LINK_TEXT": "əl ilə qurma prosesi", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "WhatsApp kanalını yadda saxlaya bilmədik" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Müştərilərinizi WhatsApp-da dəstəkləyin" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Elektron Poçt", "DESCRIPTION": "Gmail, Outlook və ya digər təminatçılarla qoşulun" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot Konfiqurasiyası", "ACCOUNT_HEALTH": "Hesabın sağlamlığı", "CSAT": "CSAT", - "VOICE": "Səs" + "VOICE": "Səs", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Kanal üstünlükləri", "WIDGET_FEATURES": "Widget xüsusiyyətləri", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Mövcud şablonlarınızı yeniləmək üçün WhatsApp-dan mesaj şablonlarını əl ilə sinxronlaşdırın.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Şablonları sinxronlaşdır", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Şablonların sinxronizasiyası uğurla başlandı. Yenilənməsi bir neçə dəqiqə çəkə bilər.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Pre Chat Form Parametrlərini Yeniləyin" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/az/integrations.json b/app/javascript/dashboard/i18n/locale/az/integrations.json index 71b974565..be0b09003 100644 --- a/app/javascript/dashboard/i18n/locale/az/integrations.json +++ b/app/javascript/dashboard/i18n/locale/az/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Əlaqə yaradıldı", "CONTACT_UPDATED": "Əlaqə yeniləndi", "CONVERSATION_TYPING_ON": "Söhbət Yazılır", - "CONVERSATION_TYPING_OFF": "Söhbət Yazması Söndürülüb" + "CONVERSATION_TYPING_OFF": "Söhbət Yazması Söndürülüb", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/bg/bulkActions.json b/app/javascript/dashboard/i18n/locale/bg/bulkActions.json index 9d6ce07b6..24ef578dd 100644 --- a/app/javascript/dashboard/i18n/locale/bg/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/bg/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Изберете агент", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "None", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "Няма намерени етикети", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Изберете екип", "NONE": "Нито един", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/bg/campaign.json b/app/javascript/dashboard/i18n/locale/bg/campaign.json index 49a61ee5a..c7b65800f 100644 --- a/app/javascript/dashboard/i18n/locale/bg/campaign.json +++ b/app/javascript/dashboard/i18n/locale/bg/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Завършено", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Завършено", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/bg/components.json b/app/javascript/dashboard/i18n/locale/bg/components.json index 12e3ed232..19a7801ef 100644 --- a/app/javascript/dashboard/i18n/locale/bg/components.json +++ b/app/javascript/dashboard/i18n/locale/bg/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/bg/contact.json b/app/javascript/dashboard/i18n/locale/bg/contact.json index ed7277b9c..8d35e6b3a 100644 --- a/app/javascript/dashboard/i18n/locale/bg/contact.json +++ b/app/javascript/dashboard/i18n/locale/bg/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/bg/conversation.json b/app/javascript/dashboard/i18n/locale/bg/conversation.json index b2e3ff3ad..43b582b2f 100644 --- a/app/javascript/dashboard/i18n/locale/bg/conversation.json +++ b/app/javascript/dashboard/i18n/locale/bg/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", "NO_RESPONSE": "No response", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Resolve", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Drag and drop here to attach", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/bg/helpCenter.json b/app/javascript/dashboard/i18n/locale/bg/helpCenter.json index 7f3117eb0..fbb944c92 100644 --- a/app/javascript/dashboard/i18n/locale/bg/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/bg/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Draft", "ARCHIVE": "Archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Изтрий", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Изтрий", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Remove" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal created successfully", diff --git a/app/javascript/dashboard/i18n/locale/bg/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/bg/inboxMgmt.json index f39d20f7f..2867f4db2 100644 --- a/app/javascript/dashboard/i18n/locale/bg/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/bg/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot Configuration", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/bg/integrations.json b/app/javascript/dashboard/i18n/locale/bg/integrations.json index 40295bf85..419aba43e 100644 --- a/app/javascript/dashboard/i18n/locale/bg/integrations.json +++ b/app/javascript/dashboard/i18n/locale/bg/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact created", "CONTACT_UPDATED": "Contact updated", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/bn/bulkActions.json b/app/javascript/dashboard/i18n/locale/bn/bulkActions.json index 3476a0a4d..d62a07e35 100644 --- a/app/javascript/dashboard/i18n/locale/bn/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/bn/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "কিছুই না", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select team", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/bn/campaign.json b/app/javascript/dashboard/i18n/locale/bn/campaign.json index 10366e79e..51231c958 100644 --- a/app/javascript/dashboard/i18n/locale/bn/campaign.json +++ b/app/javascript/dashboard/i18n/locale/bn/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "প্রক্রিয়াধীন", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "প্রক্রিয়াধীন", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/bn/components.json b/app/javascript/dashboard/i18n/locale/bn/components.json index a75d35b08..3ee865a89 100644 --- a/app/javascript/dashboard/i18n/locale/bn/components.json +++ b/app/javascript/dashboard/i18n/locale/bn/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/bn/contact.json b/app/javascript/dashboard/i18n/locale/bn/contact.json index 385530464..88ff31edc 100644 --- a/app/javascript/dashboard/i18n/locale/bn/contact.json +++ b/app/javascript/dashboard/i18n/locale/bn/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/bn/conversation.json b/app/javascript/dashboard/i18n/locale/bn/conversation.json index 26658903b..f79713081 100644 --- a/app/javascript/dashboard/i18n/locale/bn/conversation.json +++ b/app/javascript/dashboard/i18n/locale/bn/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "এই বার্তাটি সমর্থিত নয়। আপনি Facebook Messenger অ্যাপে এই বার্তাটি দেখতে পারেন।", "UNSUPPORTED_MESSAGE_INSTAGRAM": "এই বার্তাটি সমর্থিত নয়। আপনি Instagram অ্যাপে এই বার্তাটি দেখতে পারেন।", "UNSUPPORTED_MESSAGE_TIKTOK": "এই বার্তাটি সমর্থিত নয়। TikTok অ্যাপে এই বার্তাটি দেখতে পারেন।", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "বার্তা সফলভাবে মুছে ফেলা হয়েছে", "FAIL_DELETE_MESSSAGE": "বার্তা মুছে ফেলা যায়নি! আবার চেষ্টা করুন", "NO_RESPONSE": "কোনো উত্তর নেই", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "আউটগোয়িং কল", "CALL_IN_PROGRESS": "কল চলছে", "NO_ANSWER": "উত্তর নেই", + "NO_ANSWER_OUTBOUND_LABEL": "উত্তর নেই", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "মিসড কল", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "কল শেষ হয়েছে", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "এখনও উত্তর পাওয়া যায়নি", + "CALLING": "Calling…", "THEY_ANSWERED": "তারা উত্তর দিয়েছে", "YOU_ANSWERED": "আপনি উত্তর দিয়েছেন", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "কলে যোগ দিন" + "JOIN_CALL": "কলে যোগ দিন", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "সমাধান করুন", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "আগামীকাল পর্যন্ত স্থগিত", "SNOOZED_UNTIL_NEXT_WEEK": "পরবর্তী সপ্তাহ পর্যন্ত স্থগিত", "SNOOZED_UNTIL_NEXT_REPLY": "পরবর্তী উত্তর পর্যন্ত স্থগিত", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "অডিও রেকর্ড করুন", "TIP_AUDIORECORDER_PERMISSION": "অডিও অ্যাক্সেসের অনুমতি দিন", "TIP_AUDIORECORDER_ERROR": "অডিও খোলা যায়নি", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "সংযুক্ত করতে এখানে ড্র্যাগ ও ড্রপ করুন", "START_AUDIO_RECORDING": "অডিও রেকর্ডিং শুরু করুন", "STOP_AUDIO_RECORDING": "অডিও রেকর্ডিং বন্ধ করুন", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "এখনও উত্তর পাওয়া যায়নি", "HANDLED_IN_ANOTHER_TAB": "অন্য ট্যাবে পরিচালিত হচ্ছে", "REJECT_CALL": "প্রত্যাখ্যান করুন", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "কলে যোগ দিন", - "END_CALL": "কল শেষ করুন" + "END_CALL": "কল শেষ করুন", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/bn/helpCenter.json b/app/javascript/dashboard/i18n/locale/bn/helpCenter.json index 797386cc1..129a91b01 100644 --- a/app/javascript/dashboard/i18n/locale/bn/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/bn/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "খসড়া", "ARCHIVE": "আর্কাইভ", "TRANSLATE": "অনুবাদ করুন", + "MOVE_TO_CATEGORY": "Category", "DELETE": "মুছে ফেলুন", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "মুছে ফেলুন", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "কনফিগারেশন সম্পাদনা করুন" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "সরান" + }, + "SAVE": "পরিবর্তন সংরক্ষণ করুন" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "পোর্টাল সফলভাবে তৈরি হয়েছে", diff --git a/app/javascript/dashboard/i18n/locale/bn/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/bn/inboxMgmt.json index 049273ab6..9446eee8b 100644 --- a/app/javascript/dashboard/i18n/locale/bn/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/bn/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Meta-র সাথে প্রমাণীকরণ চলছে", "WAITING_FOR_BUSINESS_INFO": "অনুগ্রহ করে Meta উইন্ডোতে ব্যবসার সেটআপ সম্পন্ন করুন...", "PROCESSING": "আপনার WhatsApp Business Account সেটআপ করা হচ্ছে", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Facebook SDK লোড হচ্ছে...", "CANCELLED": "WhatsApp সাইনআপ বাতিল করা হয়েছে", "SUCCESS_TITLE": "WhatsApp Business Account সংযুক্ত হয়েছে!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "প্রমাণীকরণ সম্পন্ন হয়নি। অনুগ্রহ করে প্রক্রিয়াটি পুনরায় শুরু করুন।.", "SUCCESS_FALLBACK": "WhatsApp Business Account সফলভাবে কনফিগার করা হয়েছে", "MANUAL_FALLBACK": "আপনার নম্বর যদি ইতিমধ্যে WhatsApp Business Platform (API)-এর সাথে সংযুক্ত থাকে, অথবা আপনি যদি নিজস্ব নম্বর অনবোর্ড করতে টেক প্রোভাইডার হন, তাহলে অনুগ্রহ করে {link} ফ্লো ব্যবহার করুন", - "MANUAL_LINK_TEXT": "ম্যানুয়াল সেটআপ ফ্লো" + "MANUAL_LINK_TEXT": "ম্যানুয়াল সেটআপ ফ্লো", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "আমরা WhatsApp চ্যানেল সংরক্ষণ করতে পারিনি" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "WhatsApp-এ আপনার গ্রাহকদের সহায়তা দিন" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "ইমেইল", "DESCRIPTION": "Gmail, Outlook, অথবা অন্যান্য প্রদানকারীর সাথে সংযোগ করুন" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "বট কনফিগারেশন", "ACCOUNT_HEALTH": "অ্যাকাউন্টের স্বাস্থ্য", "CSAT": "CSAT", - "VOICE": "ভয়েস" + "VOICE": "ভয়েস", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "চ্যানেল পছন্দসমূহ", "WIDGET_FEATURES": "উইজেট ফিচারসমূহ", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "আপনার উপলব্ধ টেমপ্লেট আপডেট করতে WhatsApp থেকে মেসেজ টেমপ্লেটগুলো ম্যানুয়ালি সিঙ্ক করুন।.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "টেমপ্লেট সিঙ্ক করুন", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "টেমপ্লেট সিঙ্ক সফলভাবে শুরু হয়েছে। আপডেট হতে কয়েক মিনিট সময় লাগতে পারে।.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "প্রি-চ্যাট ফর্ম সেটিংস আপডেট করুন" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/bn/integrations.json b/app/javascript/dashboard/i18n/locale/bn/integrations.json index d3cac1501..bcadf8389 100644 --- a/app/javascript/dashboard/i18n/locale/bn/integrations.json +++ b/app/javascript/dashboard/i18n/locale/bn/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "যোগাযোগ তৈরি হয়েছে", "CONTACT_UPDATED": "যোগাযোগ আপডেট হয়েছে", "CONVERSATION_TYPING_ON": "কথোপকথন টাইপিং চালু আছে", - "CONVERSATION_TYPING_OFF": "কথোপকথন টাইপিং বন্ধ আছে" + "CONVERSATION_TYPING_OFF": "কথোপকথন টাইপিং বন্ধ আছে", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/ca/bulkActions.json b/app/javascript/dashboard/i18n/locale/ca/bulkActions.json index dae8ef3c2..a4713996a 100644 --- a/app/javascript/dashboard/i18n/locale/ca/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/ca/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} converses seleccionades", - "AGENT_SELECT_LABEL": "Seleccionar Agent", - "ASSIGN_CONFIRMATION_LABEL": "Estas segur d'assignar {conversationCount} {conversationLabel} a", - "UNASSIGN_CONFIRMATION_LABEL": "Estàs segur de desassignar {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Torna", - "ASSIGN_LABEL": "Assignar", "NONE": "Ningú", "CLEAR_SELECTION": "Neteja", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Les converses s'han resolt correctament.", "RESOLVE_FAILED": "No s'han pogut resoldre les converses. Torna-ho a provar.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Les converses visibles en aquesta pàgina només estan seleccionades.", - "AGENT_LIST_LOADING": "S'estan carregant els agents", "UPDATE": { "CHANGE_STATUS": "Canvia l'estat", "SNOOZE_UNTIL": "Posposat", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assignar etiquetes", - "NO_LABELS_FOUND": "No s'han trobat etiquetes", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assigna les etiquetes seleccionades", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "L'etiqueta s'ha assignat correctament.", - "ASSIGN_FAILED": "No s'han pogut assignar les etiquetes. Torna-ho a provar." + "ASSIGN_FAILED": "No s'han pogut assignar les etiquetes. Torna-ho a provar.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Selecciona equip", "NONE": "Ningú", - "NO_TEAMS_AVAILABLE": "Encara no hi ha cap equip afegit a aquest compte.", - "ASSIGN_SELECTED_TEAMS": "Assigna l'equip seleccionat.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Equips assignats correctament.", diff --git a/app/javascript/dashboard/i18n/locale/ca/campaign.json b/app/javascript/dashboard/i18n/locale/ca/campaign.json index fa192101e..1686f5c1e 100644 --- a/app/javascript/dashboard/i18n/locale/ca/campaign.json +++ b/app/javascript/dashboard/i18n/locale/ca/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completat", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completat", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/ca/components.json b/app/javascript/dashboard/i18n/locale/ca/components.json index 3b0e062fd..2f29110f4 100644 --- a/app/javascript/dashboard/i18n/locale/ca/components.json +++ b/app/javascript/dashboard/i18n/locale/ca/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/ca/contact.json b/app/javascript/dashboard/i18n/locale/ca/contact.json index c27684817..7cff15bb7 100644 --- a/app/javascript/dashboard/i18n/locale/ca/contact.json +++ b/app/javascript/dashboard/i18n/locale/ca/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "L'etiqueta s'ha assignat correctament.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/ca/conversation.json b/app/javascript/dashboard/i18n/locale/ca/conversation.json index abe1bbc0e..b9c75f2c4 100644 --- a/app/javascript/dashboard/i18n/locale/ca/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ca/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "Aquest missatge no està suportat. Pots veure aquest missatge a l'aplicació Facebook Messenger.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "Aquest missatge no està suportat. Pots veure aquest missatge a l'aplicació d'Instagram.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "El missatge s'ha suprimit correctament", "FAIL_DELETE_MESSSAGE": "No s'ha pogut suprimir el missatge! Torna-ho a provar", "NO_RESPONSE": "Sense resposta", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Resoldre", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Posposat fins demà", "SNOOZED_UNTIL_NEXT_WEEK": "Posposat fins a la setmana vinent", "SNOOZED_UNTIL_NEXT_REPLY": "Posposat fins a la següent resposta", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Gravar àudio", "TIP_AUDIORECORDER_PERMISSION": "Permet l'accés a l'àudio", "TIP_AUDIORECORDER_ERROR": "No s'ha pogut obrir l'àudio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Arrossega i deixa anar aquí per adjuntar-lo", "START_AUDIO_RECORDING": "Inicia la gravació d'àudio", "STOP_AUDIO_RECORDING": "Atura la gravació d'àudio", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Descartar", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/ca/helpCenter.json b/app/javascript/dashboard/i18n/locale/ca/helpCenter.json index 7e9f32942..5453c8e74 100644 --- a/app/javascript/dashboard/i18n/locale/ca/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ca/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Esborrany", "ARCHIVE": "Archive", "TRANSLATE": "Tradueix", + "MOVE_TO_CATEGORY": "Categoria", "DELETE": "Esborrar", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Esborrar", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Aparença", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Suprimeix" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal creat correctament", diff --git a/app/javascript/dashboard/i18n/locale/ca/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ca/inboxMgmt.json index 43209268a..e29814a00 100644 --- a/app/javascript/dashboard/i18n/locale/ca/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ca/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "No hem pogut desar el canal WhatsApp" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Correu electrònic", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Configuracions del bot", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Actualitza la configuració del formulari de xat prèvia" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/ca/integrations.json b/app/javascript/dashboard/i18n/locale/ca/integrations.json index c83ca86e8..360c3c6bf 100644 --- a/app/javascript/dashboard/i18n/locale/ca/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ca/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contacte creat", "CONTACT_UPDATED": "Contacte actualitzat", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/cs/bulkActions.json b/app/javascript/dashboard/i18n/locale/cs/bulkActions.json index 0d5b98d1d..0330986df 100644 --- a/app/javascript/dashboard/i18n/locale/cs/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/cs/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Vybrat agenta", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Přiřadit", "NONE": "Nic", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "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": "Načítání agentů", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Odložit", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Vybrat tým", "NONE": "Nic", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/cs/campaign.json b/app/javascript/dashboard/i18n/locale/cs/campaign.json index 69f849a34..2d7efdefd 100644 --- a/app/javascript/dashboard/i18n/locale/cs/campaign.json +++ b/app/javascript/dashboard/i18n/locale/cs/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/cs/components.json b/app/javascript/dashboard/i18n/locale/cs/components.json index 76de71d16..2caba589c 100644 --- a/app/javascript/dashboard/i18n/locale/cs/components.json +++ b/app/javascript/dashboard/i18n/locale/cs/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/cs/contact.json b/app/javascript/dashboard/i18n/locale/cs/contact.json index 86ce1668f..c66408198 100644 --- a/app/javascript/dashboard/i18n/locale/cs/contact.json +++ b/app/javascript/dashboard/i18n/locale/cs/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/cs/conversation.json b/app/javascript/dashboard/i18n/locale/cs/conversation.json index 0fd81f5d5..09d1c5408 100644 --- a/app/javascript/dashboard/i18n/locale/cs/conversation.json +++ b/app/javascript/dashboard/i18n/locale/cs/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Zpráva byla úspěšně smazána", "FAIL_DELETE_MESSSAGE": "Zpráva se nepodařilo odstranit! Zkuste to znovu", "NO_RESPONSE": "Bez odpovědi", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Vyřešit", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Odloženo do zítřka", "SNOOZED_UNTIL_NEXT_WEEK": "Odloženo do příštího týdne", "SNOOZED_UNTIL_NEXT_REPLY": "Odloženo do další odpovědi", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Nahrát zvuk", "TIP_AUDIORECORDER_PERMISSION": "Povolit přístup ke zvuku", "TIP_AUDIORECORDER_ERROR": "Zvuk se nepodařilo otevřít", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Přetažením sem připojíte", "START_AUDIO_RECORDING": "Spustit nahrávání zvuku", "STOP_AUDIO_RECORDING": "Zastavit nahrávání zvuku", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/cs/helpCenter.json b/app/javascript/dashboard/i18n/locale/cs/helpCenter.json index e620ce5d8..7f9405422 100644 --- a/app/javascript/dashboard/i18n/locale/cs/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/cs/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Koncept", "ARCHIVE": "Archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Vymazat", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Vymazat", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Odebrat" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal created successfully", diff --git a/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json index 6b36d0eff..2f43b809f 100644 --- a/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "E-mailová adresa", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot Configuration", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/cs/integrations.json b/app/javascript/dashboard/i18n/locale/cs/integrations.json index 163c58052..f26b6d5bc 100644 --- a/app/javascript/dashboard/i18n/locale/cs/integrations.json +++ b/app/javascript/dashboard/i18n/locale/cs/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact created", "CONTACT_UPDATED": "Contact updated", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/da/bulkActions.json b/app/javascript/dashboard/i18n/locale/da/bulkActions.json index a0947c74f..fdf3ff597 100644 --- a/app/javascript/dashboard/i18n/locale/da/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/da/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} samtaler valgt", - "AGENT_SELECT_LABEL": "Vælg agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Gå tilbage", - "ASSIGN_LABEL": "Tildel", "NONE": "Ingen", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Samtaler løst med succes.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Samtaler synlig på denne side er kun valgt.", - "AGENT_LIST_LOADING": "Indlæser agenter", "UPDATE": { "CHANGE_STATUS": "Skift status", "SNOOZE_UNTIL": "Udsæt", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "Ingen labels fundet", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Tildel valgte etiketter", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Etiketter tildelt med succes.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Vælg hold", "NONE": "Ingen", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Tildel det valgte team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/da/campaign.json b/app/javascript/dashboard/i18n/locale/da/campaign.json index 03cb62904..bda82c798 100644 --- a/app/javascript/dashboard/i18n/locale/da/campaign.json +++ b/app/javascript/dashboard/i18n/locale/da/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Afsluttet", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Afsluttet", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/da/components.json b/app/javascript/dashboard/i18n/locale/da/components.json index aa566d5c6..d42be12a5 100644 --- a/app/javascript/dashboard/i18n/locale/da/components.json +++ b/app/javascript/dashboard/i18n/locale/da/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/da/contact.json b/app/javascript/dashboard/i18n/locale/da/contact.json index d900a6f59..0423dfac1 100644 --- a/app/javascript/dashboard/i18n/locale/da/contact.json +++ b/app/javascript/dashboard/i18n/locale/da/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Tildel Etiketter", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Etiketter tildelt med succes.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/da/conversation.json b/app/javascript/dashboard/i18n/locale/da/conversation.json index 26253212f..3e959a0c4 100644 --- a/app/javascript/dashboard/i18n/locale/da/conversation.json +++ b/app/javascript/dashboard/i18n/locale/da/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Besked slettet", "FAIL_DELETE_MESSSAGE": "Kunne ikke slette beskeden! Prøv igen", "NO_RESPONSE": "Intet svar", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Løs", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Udsat til i morgen", "SNOOZED_UNTIL_NEXT_WEEK": "Udsat indtil næste uge", "SNOOZED_UNTIL_NEXT_REPLY": "Udsat indtil næste svar", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Optag lyd", "TIP_AUDIORECORDER_PERMISSION": "Tillad adgang til lyd", "TIP_AUDIORECORDER_ERROR": "Kunne ikke åbne lyden", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Træk og slip her for at vedhæfte", "START_AUDIO_RECORDING": "Start lydoptagelse", "STOP_AUDIO_RECORDING": "Stop lydoptagelse", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/da/helpCenter.json b/app/javascript/dashboard/i18n/locale/da/helpCenter.json index 360d3f081..e641bd74d 100644 --- a/app/javascript/dashboard/i18n/locale/da/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/da/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Kladde", "ARCHIVE": "Archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Kategori", "DELETE": "Slet", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Slet", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Fjern" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal oprettet", diff --git a/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json index c77da592f..f672656da 100644 --- a/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Vi kunne ikke gemme WhatsApp-kanalen" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "E-mail", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot konfiguration", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/da/integrations.json b/app/javascript/dashboard/i18n/locale/da/integrations.json index 04d430620..6e11fc565 100644 --- a/app/javascript/dashboard/i18n/locale/da/integrations.json +++ b/app/javascript/dashboard/i18n/locale/da/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact created", "CONTACT_UPDATED": "Contact updated", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/de/bulkActions.json b/app/javascript/dashboard/i18n/locale/de/bulkActions.json index ccfe8f0d3..64ffeef2e 100644 --- a/app/javascript/dashboard/i18n/locale/de/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/de/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} Konversationen ausgewählt", - "AGENT_SELECT_LABEL": "Agent auswählen", - "ASSIGN_CONFIRMATION_LABEL": "Sind Sie sicher, {conversationCount} {conversationLabel} zuzuweisen", - "UNASSIGN_CONFIRMATION_LABEL": "Möchten Sie die Zuweisung von {conversationCount} {conversationLabel} wirklich aufheben?", - "GO_BACK_LABEL": "Zurück", - "ASSIGN_LABEL": "Zuordnen", "NONE": "Keine", "CLEAR_SELECTION": "Leeren", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Konversationen erfolgreich gelöst.", "RESOLVE_FAILED": "Konversationen konnten nicht gelöst werden. Bitte versuchen Sie es erneut.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Nur auf dieser Seite sichtbaren Konversationen sind ausgewählt.", - "AGENT_LIST_LOADING": "Agenten werden geladen", "UPDATE": { "CHANGE_STATUS": "Status ändern", "SNOOZE_UNTIL": "Erinnern", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Labels zuweisen", - "NO_LABELS_FOUND": "Keine Labels gefunden", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Ausgewählte Labels zuweisen", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels erfolgreich zugewiesen.", - "ASSIGN_FAILED": "Labels konnten nicht zugewiesen werden. Bitte versuchen Sie es erneut." + "ASSIGN_FAILED": "Labels konnten nicht zugewiesen werden. Bitte versuchen Sie es erneut.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Team auswählen", "NONE": "Keine", - "NO_TEAMS_AVAILABLE": "Es wurden noch keine Teams zu diesem Konto hinzugefügt.", - "ASSIGN_SELECTED_TEAMS": "Ausgewähltes Team zuweisen.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams erfolgreich zugewiesen.", diff --git a/app/javascript/dashboard/i18n/locale/de/campaign.json b/app/javascript/dashboard/i18n/locale/de/campaign.json index 053b5b276..27e9cfeb1 100644 --- a/app/javascript/dashboard/i18n/locale/de/campaign.json +++ b/app/javascript/dashboard/i18n/locale/de/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Erledigt", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Erledigt", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/de/components.json b/app/javascript/dashboard/i18n/locale/de/components.json index 8a8387204..9a02af04c 100644 --- a/app/javascript/dashboard/i18n/locale/de/components.json +++ b/app/javascript/dashboard/i18n/locale/de/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/de/contact.json b/app/javascript/dashboard/i18n/locale/de/contact.json index 893bb273a..f1f06d269 100644 --- a/app/javascript/dashboard/i18n/locale/de/contact.json +++ b/app/javascript/dashboard/i18n/locale/de/contact.json @@ -20,6 +20,8 @@ "CALL": "Anruf", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Spracheingang wählen" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Labels zuweisen", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels erfolgreich zugewiesen.", "ASSIGN_LABELS_FAILED": "Fehler beim Zuweisen der Labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Wählen Sie die Labels aus, die zu den ausgewählten Kontakten hinzugefügt werden sollen.", "NO_LABELS_FOUND": "Noch keine Labels vorhanden.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/de/conversation.json b/app/javascript/dashboard/i18n/locale/de/conversation.json index 48cdb6bb0..e370d3873 100644 --- a/app/javascript/dashboard/i18n/locale/de/conversation.json +++ b/app/javascript/dashboard/i18n/locale/de/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "Diese Nachricht wird nicht unterstützt. Sie können diese Nachricht in der Facebook-Messenger-App sehen.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "Diese Nachricht wird nicht unterstützt. Sie können diese Nachricht in der Instagram-App sehen.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Nachricht erfolgreich gelöscht", "FAIL_DELETE_MESSSAGE": "Nachricht konnte nicht gelöscht werden! Versuchen Sie es erneut", "NO_RESPONSE": "Keine Antwort", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Ausgehender Anruf", "CALL_IN_PROGRESS": "Anruf läuft", "NO_ANSWER": "Keine Antwort", + "NO_ANSWER_OUTBOUND_LABEL": "Keine Antwort", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Entgangener Anruf", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Anruf beendet", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Noch nicht beantwortet", + "CALLING": "Calling…", "THEY_ANSWERED": "Sie antworteten", "YOU_ANSWERED": "Sie haben beantwortet", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Fall schließen", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Schlummern bis morgen", "SNOOZED_UNTIL_NEXT_WEEK": "Schlummern bis nächste Woche", "SNOOZED_UNTIL_NEXT_REPLY": "Schlummern bis zur nächsten Antwort", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Audio aufzeichnen", "TIP_AUDIORECORDER_PERMISSION": "Zugriff auf Audio zulassen", "TIP_AUDIORECORDER_ERROR": "Audio konnte nicht geöffnet werden", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Zum Anhängen hierher ziehen und ablegen", "START_AUDIO_RECORDING": "Audioaufzeichnung starten", "STOP_AUDIO_RECORDING": "Audioaufzeichnung stoppen", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Noch nicht beantwortet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Verwerfen", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/de/helpCenter.json b/app/javascript/dashboard/i18n/locale/de/helpCenter.json index f34c83337..4d416885d 100644 --- a/app/javascript/dashboard/i18n/locale/de/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/de/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Entwürfe", "ARCHIVE": "Archive", "TRANSLATE": "Übersetzen", + "MOVE_TO_CATEGORY": "Kategorie", "DELETE": "Löschen", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Löschen", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Darstellung", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Entfernen" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal erfolgreich erstellt", diff --git a/app/javascript/dashboard/i18n/locale/de/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/de/inboxMgmt.json index 2f7b503ba..4d5f5f71d 100644 --- a/app/javascript/dashboard/i18n/locale/de/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/de/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentifizierung nicht abgeschlossen. Bitte starte den Prozess neu.", "SUCCESS_FALLBACK": "WhatsApp Business Account wurde erfolgreich konfiguriert", "MANUAL_FALLBACK": "Wenn Ihre Nummer bereits mit der WhatsApp Business Plattform (API) verbunden ist, oder wenn Sie als Technologieanbieter Ihre eigene Nummer an Bord haben, verwenden Sie bitte den {link} Flow", - "MANUAL_LINK_TEXT": "Manueller Einrichtungsablauf" + "MANUAL_LINK_TEXT": "Manueller Einrichtungsablauf", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Wir konnten den WhatsApp-Kanal nicht speichern" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "E-Mail", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot-Konfiguration", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Pre Chat Einstellungen aktualisieren" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/de/integrations.json b/app/javascript/dashboard/i18n/locale/de/integrations.json index be2430820..6c0f93bee 100644 --- a/app/javascript/dashboard/i18n/locale/de/integrations.json +++ b/app/javascript/dashboard/i18n/locale/de/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Kontakt erstellt", "CONTACT_UPDATED": "Kontakt aktualisiert", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/el/bulkActions.json b/app/javascript/dashboard/i18n/locale/el/bulkActions.json index 309b88c9e..5bb3d1df8 100644 --- a/app/javascript/dashboard/i18n/locale/el/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/el/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} σινομιλίες επιλέχθηκαν", - "AGENT_SELECT_LABEL": "Επιλογή πράκτορα", - "ASSIGN_CONFIRMATION_LABEL": "Είσαστε σίγουροι ότι θέλετε να αντιστοιχίσετε {conversationCount} {conversationLabel} στον", - "UNASSIGN_CONFIRMATION_LABEL": "Είσαστε σίγουροι ότι θέλετε να αφαιρέσετε την αντιστοίχιση {conversationCount} {conversationLabel} στον;", - "GO_BACK_LABEL": "Πίσω", - "ASSIGN_LABEL": "Αντιστοίχιση", "NONE": "Κανένα", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Οι σινομιλίες επιλύθηκαν επιτυχώς.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Επιλέχθηκαν μόνο οι σινομιλίες που φαίνονται στην σελίδα.", - "AGENT_LIST_LOADING": "Φόρτωση πρακτόρων", "UPDATE": { "CHANGE_STATUS": "Αλλαγή κατάστασης", "SNOOZE_UNTIL": "Αναβολή", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "Δεν βρέθηκαν ετικέτες", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Ανάθεση επιλεγμένων ετικετών", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Επιτυχής ανάθεση ετικετών.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Επιλογή ομάδας", "NONE": "Κανένα", - "NO_TEAMS_AVAILABLE": "Δεν έχουν προστεθεί ομάδες σε αυτόν τον λογαριασμό ακόμα.", - "ASSIGN_SELECTED_TEAMS": "Ανάθεση επιλεγμένης ομάδας.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/el/campaign.json b/app/javascript/dashboard/i18n/locale/el/campaign.json index 3d0e6b062..f3f5aadd5 100644 --- a/app/javascript/dashboard/i18n/locale/el/campaign.json +++ b/app/javascript/dashboard/i18n/locale/el/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Ολοκληρώθηκε", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Ολοκληρώθηκε", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/el/components.json b/app/javascript/dashboard/i18n/locale/el/components.json index 90cbbbded..28c48d8dc 100644 --- a/app/javascript/dashboard/i18n/locale/el/components.json +++ b/app/javascript/dashboard/i18n/locale/el/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/el/contact.json b/app/javascript/dashboard/i18n/locale/el/contact.json index 5508e2d64..677cd5e4e 100644 --- a/app/javascript/dashboard/i18n/locale/el/contact.json +++ b/app/javascript/dashboard/i18n/locale/el/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Ανάθεση Ετικετών", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Επιτυχής ανάθεση ετικετών.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/el/conversation.json b/app/javascript/dashboard/i18n/locale/el/conversation.json index 51efa7bc4..206bc68ab 100644 --- a/app/javascript/dashboard/i18n/locale/el/conversation.json +++ b/app/javascript/dashboard/i18n/locale/el/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Το μήνυμα διαγράφηκε επιτυχώς", "FAIL_DELETE_MESSSAGE": "Δεν ήταν δυνατή η διαγραφή μηνύματος! Προσπαθήστε ξανά", "NO_RESPONSE": "Καμία ανταπόκριση", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Επίλυση", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Αναβλήθηκε μέχρι αύριο", "SNOOZED_UNTIL_NEXT_WEEK": "Αναβολή έως την επόμενη εβδομάδα", "SNOOZED_UNTIL_NEXT_REPLY": "Αναβολή έως την επόμενη απάντηση", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Εγγραφή ήχου", "TIP_AUDIORECORDER_PERMISSION": "Να επιτρέπεται η πρόσβαση στον ήχο", "TIP_AUDIORECORDER_ERROR": "Αδυναμία ανοίγματος ήχου", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Σύρετε και αφήστε εδώ για επισύναψη", "START_AUDIO_RECORDING": "Έναρξη ηχογράφησης", "STOP_AUDIO_RECORDING": "Διακοπή ηχογράφησης", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/el/helpCenter.json b/app/javascript/dashboard/i18n/locale/el/helpCenter.json index bdf939212..1e3b5de1e 100644 --- a/app/javascript/dashboard/i18n/locale/el/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/el/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Πρόχειρο", "ARCHIVE": "Archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Κατηγορία", "DELETE": "Διαγραφή", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Διαγραφή", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Διαγραφή" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Ο φάκελος δημιουργήθηκε με επιτυχία", diff --git a/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json index 3381c1eee..516f5c6d6 100644 --- a/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Δεν ήμασταν σε θέση να αποθηκεύσουμε το κανάλι WhatsApp" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Ρυθμίσεις Bot", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/el/integrations.json b/app/javascript/dashboard/i18n/locale/el/integrations.json index 296f40520..6f2f46697 100644 --- a/app/javascript/dashboard/i18n/locale/el/integrations.json +++ b/app/javascript/dashboard/i18n/locale/el/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact created", "CONTACT_UPDATED": "Contact updated", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/en/advancedFilters.json b/app/javascript/dashboard/i18n/locale/en/advancedFilters.json index a991cb25b..89143c62a 100644 --- a/app/javascript/dashboard/i18n/locale/en/advancedFilters.json +++ b/app/javascript/dashboard/i18n/locale/en/advancedFilters.json @@ -19,6 +19,8 @@ "OR": "OR" }, "INPUT_PLACEHOLDER": "Enter value", + "CONTACT_SEARCH_PLACEHOLDER": "Search contacts", + "CONTACT_FALLBACK": "Contact #{id}", "OPERATOR_LABELS": { "equal_to": "Equal to", "not_equal_to": "Not equal to", @@ -49,6 +51,7 @@ "ASSIGNEE_NAME": "Assignee name", "INBOX_NAME": "Inbox name", "TEAM_NAME": "Team name", + "CONTACT": "Contact", "CONVERSATION_IDENTIFIER": "Conversation identifier", "CAMPAIGN_NAME": "Campaign name", "LABELS": "Labels", diff --git a/app/javascript/dashboard/i18n/locale/en/campaign.json b/app/javascript/dashboard/i18n/locale/en/campaign.json index 10366e79e..78db922d1 100644 --- a/app/javascript/dashboard/i18n/locale/en/campaign.json +++ b/app/javascript/dashboard/i18n/locale/en/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/en/conversation.json b/app/javascript/dashboard/i18n/locale/en/conversation.json index daf49ab59..3eb83fd31 100644 --- a/app/javascript/dashboard/i18n/locale/en/conversation.json +++ b/app/javascript/dashboard/i18n/locale/en/conversation.json @@ -231,7 +231,9 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Drag and drop here to attach", + "IMAGE_UPLOAD_SUCCESS": "Image uploaded successfully", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", "COPILOT_THINKING": "Copilot is thinking", diff --git a/app/javascript/dashboard/i18n/locale/en/helpCenter.json b/app/javascript/dashboard/i18n/locale/en/helpCenter.json index 9faa9f340..dfaec8119 100644 --- a/app/javascript/dashboard/i18n/locale/en/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/en/helpCenter.json @@ -700,9 +700,27 @@ "MAKE_DEFAULT": "Make default", "MOVE_TO_DRAFT": "Move to draft", "PUBLISH_LOCALE": "Publish locale", + "CUSTOMIZE_CONTENT": "Localize content", "DELETE": "Delete" } }, + "CONTENT_DIALOG": { + "TITLE": "Localize content", + "DESCRIPTION": "Set values specific to this locale. Anything left blank falls back to the default locale.", + "NAME": { + "LABEL": "Name" + }, + "PAGE_TITLE": { + "LABEL": "Page title" + }, + "HEADER_TEXT": { + "LABEL": "Header text" + }, + "API": { + "SUCCESS_MESSAGE": "Locale content updated successfully", + "ERROR_MESSAGE": "Unable to update locale content. Try again." + } + }, "ADD_LOCALE_DIALOG": { "TITLE": "Add a new locale", "DESCRIPTION": "Select the language in which this article will be written. This will be added to your list of translations, and you can add more later.", diff --git a/app/javascript/dashboard/i18n/locale/es/bulkActions.json b/app/javascript/dashboard/i18n/locale/es/bulkActions.json index d27708e72..b8840aecf 100644 --- a/app/javascript/dashboard/i18n/locale/es/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/es/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversaciones seleccionadas", - "AGENT_SELECT_LABEL": "Seleccionar agente", - "ASSIGN_CONFIRMATION_LABEL": "¿Está seguro que desea asignar {conversationCount} {conversationLabel} a", - "UNASSIGN_CONFIRMATION_LABEL": "¿Está seguro de desasignar {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Volver", - "ASSIGN_LABEL": "Asignar", "NONE": "Ninguna", "CLEAR_SELECTION": "Limpiar", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversaciones resueltas con éxito.", "RESOLVE_FAILED": "Error al resolver las conversaciones, inténtelo de nuevo.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Las conversaciones visibles en esta página sólo están seleccionadas.", - "AGENT_LIST_LOADING": "Cargando agentes", "UPDATE": { "CHANGE_STATUS": "Cambiar estado", "SNOOZE_UNTIL": "Posponer", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Asignar etiqueta", - "NO_LABELS_FOUND": "No se encontraron etiquetas", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Asignar etiquetas seleccionadas", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Etiquetas asignadas correctamente.", - "ASSIGN_FAILED": "Error al asignar etiquetas, inténtalo de nuevo." + "ASSIGN_FAILED": "Error al asignar etiquetas, inténtalo de nuevo.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Seleccionar equipo", "NONE": "Ninguna", - "NO_TEAMS_AVAILABLE": "Todavía no hay equipos añadidos a esta cuenta.", - "ASSIGN_SELECTED_TEAMS": "Asignar equipo seleccionado.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Equipos asignados correctamente.", diff --git a/app/javascript/dashboard/i18n/locale/es/campaign.json b/app/javascript/dashboard/i18n/locale/es/campaign.json index ff7bcce65..038d50d38 100644 --- a/app/javascript/dashboard/i18n/locale/es/campaign.json +++ b/app/javascript/dashboard/i18n/locale/es/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completado", "SCHEDULED": "Programado" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completado", "SCHEDULED": "Programado" }, diff --git a/app/javascript/dashboard/i18n/locale/es/components.json b/app/javascript/dashboard/i18n/locale/es/components.json index f588a7602..cebd9a390 100644 --- a/app/javascript/dashboard/i18n/locale/es/components.json +++ b/app/javascript/dashboard/i18n/locale/es/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/es/contact.json b/app/javascript/dashboard/i18n/locale/es/contact.json index 8142671dd..8978dc0c8 100644 --- a/app/javascript/dashboard/i18n/locale/es/contact.json +++ b/app/javascript/dashboard/i18n/locale/es/contact.json @@ -20,6 +20,8 @@ "CALL": "Llamar", "CALL_INITIATED": "Llamando al contacto…", "CALL_FAILED": "No se puede iniciar la llamada. Por favor, inténtelo de nuevo.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Seleccionar un buzón de entrada" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Asignar etiquetas", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Etiquetas asignadas correctamente.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/es/conversation.json b/app/javascript/dashboard/i18n/locale/es/conversation.json index 2418a1392..cb0e2df70 100644 --- a/app/javascript/dashboard/i18n/locale/es/conversation.json +++ b/app/javascript/dashboard/i18n/locale/es/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "Este mensaje no es compatible. Puedes ver este mensaje en la aplicación de Facebook Messenger.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "Este mensaje no es compatible. Puedes ver este mensaje en la aplicación de Instagram.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Mensaje eliminado correctamente", "FAIL_DELETE_MESSSAGE": "¡No se pudo eliminar el mensaje! Inténtalo de nuevo", "NO_RESPONSE": "No hay respuesta", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Unirse a la llamada" + "JOIN_CALL": "Unirse a la llamada", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Resolver", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Pospuesto hasta mañana", "SNOOZED_UNTIL_NEXT_WEEK": "Pospuesto hasta la próxima semana", "SNOOZED_UNTIL_NEXT_REPLY": "Posponer hasta la siguiente respuesta", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Grabar audio", "TIP_AUDIORECORDER_PERMISSION": "Permitir el acceso a audio", "TIP_AUDIORECORDER_ERROR": "No se pudo abrir el audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Arrastra y suelta aquí para adjuntar", "START_AUDIO_RECORDING": "Iniciar grabación de audio", "STOP_AUDIO_RECORDING": "Detener grabación de audio", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Atendido en otra pestaña", "REJECT_CALL": "Rechazar", + "DISMISS_CALL": "Descartar", "JOIN_CALL": "Unirse a la llamada", - "END_CALL": "Terminar llamada" + "END_CALL": "Terminar llamada", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/es/helpCenter.json b/app/javascript/dashboard/i18n/locale/es/helpCenter.json index 9dbf7d92c..4b13441ee 100644 --- a/app/javascript/dashboard/i18n/locale/es/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/es/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Borrador", "ARCHIVE": "Archive", "TRANSLATE": "Traducir", + "MOVE_TO_CATEGORY": "Categoría", "DELETE": "Eliminar", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Eliminar", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Apariencia", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Eliminar" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal creado correctamente", diff --git a/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json index 980aa606e..1138e4abf 100644 --- a/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "No pudimos guardar el canal de WhatsApp" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "E-mail", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Configuración del bot", "ACCOUNT_HEALTH": "Account Health", "CSAT": "Encuestas de Satisfacción", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Actualizar configuración de Formulario de Chat" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/es/integrations.json b/app/javascript/dashboard/i18n/locale/es/integrations.json index f6c9ed63c..c04f79403 100644 --- a/app/javascript/dashboard/i18n/locale/es/integrations.json +++ b/app/javascript/dashboard/i18n/locale/es/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contacto creado", "CONTACT_UPDATED": "Contacto actualizado", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/et/bulkActions.json b/app/javascript/dashboard/i18n/locale/et/bulkActions.json index 2170173f2..ed302714d 100644 --- a/app/javascript/dashboard/i18n/locale/et/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/et/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "Mitte ükski", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select team", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/et/campaign.json b/app/javascript/dashboard/i18n/locale/et/campaign.json index 10366e79e..e407de04f 100644 --- a/app/javascript/dashboard/i18n/locale/et/campaign.json +++ b/app/javascript/dashboard/i18n/locale/et/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Töötlemisel", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Töötlemisel", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/et/components.json b/app/javascript/dashboard/i18n/locale/et/components.json index a75d35b08..3ee865a89 100644 --- a/app/javascript/dashboard/i18n/locale/et/components.json +++ b/app/javascript/dashboard/i18n/locale/et/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/et/contact.json b/app/javascript/dashboard/i18n/locale/et/contact.json index db03757ef..4400ac26e 100644 --- a/app/javascript/dashboard/i18n/locale/et/contact.json +++ b/app/javascript/dashboard/i18n/locale/et/contact.json @@ -20,6 +20,8 @@ "CALL": "Helista", "CALL_INITIATED": "Helistatakse kontaktile…", "CALL_FAILED": "Kõne alustamine ebaõnnestus. Palun proovi uuesti.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Vali häälpostkast" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Märgendite määramine", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Märgendid määrati edukalt.", "ASSIGN_LABELS_FAILED": "Märgendite määramine ebaõnnestus", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Valige sildid, mida soovite valitud kontaktidele lisada.", "NO_LABELS_FOUND": "Silte pole veel saadaval.", "SELECTED_COUNT": "{count} valitud", diff --git a/app/javascript/dashboard/i18n/locale/et/conversation.json b/app/javascript/dashboard/i18n/locale/et/conversation.json index e8f04d96d..16923b08c 100644 --- a/app/javascript/dashboard/i18n/locale/et/conversation.json +++ b/app/javascript/dashboard/i18n/locale/et/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "See sõnum ei ole toetatud. Sa saad seda vaadata Facebook Messenger rakenduses.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "See sõnum ei ole toetatud. Sa saad seda vaadata Instagram rakenduses.", "UNSUPPORTED_MESSAGE_TIKTOK": "See sõnum ei ole toetatud. Sa saad seda vaadata TikTok rakenduses.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Sõnum kustutati edukalt", "FAIL_DELETE_MESSSAGE": "Sõnumit ei õnnestunud kustutada! Proovi uuesti", "NO_RESPONSE": "Vastust pole", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Väljaminev kõne", "CALL_IN_PROGRESS": "Kõne käib", "NO_ANSWER": "Vastamata", + "NO_ANSWER_OUTBOUND_LABEL": "Vastamata", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Vastamata kõne", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Kõne lõppenud", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Veel vastamata", + "CALLING": "Calling…", "THEY_ANSWERED": "Nad vastasid", "YOU_ANSWERED": "Sa vastasid", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Liitu kõnega" + "JOIN_CALL": "Liitu kõnega", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Lahenda", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Edasilükatud homseni", "SNOOZED_UNTIL_NEXT_WEEK": "Edasilükatud järgmise nädalani", "SNOOZED_UNTIL_NEXT_REPLY": "Edasilükatud järgmise vastuseni", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Salvesta heli", "TIP_AUDIORECORDER_PERMISSION": "Luba juurdepääs helile", "TIP_AUDIORECORDER_ERROR": "Heli avamine ebaõnnestus", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Lohista siia manusena lisamiseks", "START_AUDIO_RECORDING": "Alusta heli salvestamist", "STOP_AUDIO_RECORDING": "Peata heli salvestamine", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Veel ei ole vastatud", "HANDLED_IN_ANOTHER_TAB": "Käsitletakse teises vahekaardis", "REJECT_CALL": "Keeldu", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Liitu kõnega", - "END_CALL": "Lõpeta kõne" + "END_CALL": "Lõpeta kõne", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/et/helpCenter.json b/app/javascript/dashboard/i18n/locale/et/helpCenter.json index fbe78738a..fd4e98413 100644 --- a/app/javascript/dashboard/i18n/locale/et/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/et/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Mustand", "ARCHIVE": "Arhiveeri", "TRANSLATE": "Tõlgi", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Delete", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Delete", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Muuda seadistust" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Eemalda" + }, + "SAVE": "Salvesta muudatused" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portaal loodud edukalt", diff --git a/app/javascript/dashboard/i18n/locale/et/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/et/inboxMgmt.json index b3a509860..16b86dcae 100644 --- a/app/javascript/dashboard/i18n/locale/et/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/et/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "WhatsAppi kanalit ei õnnestunud salvestada" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Boti seadistamine", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Hääl" + "VOICE": "Hääl", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Uuenda vestluse-eelse vormi seadeid" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/et/integrations.json b/app/javascript/dashboard/i18n/locale/et/integrations.json index 54b71051a..a65ce7301 100644 --- a/app/javascript/dashboard/i18n/locale/et/integrations.json +++ b/app/javascript/dashboard/i18n/locale/et/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Kontakt loodud", "CONTACT_UPDATED": "Kontakt uuendatud", "CONVERSATION_TYPING_ON": "Vestluses kirjutamise alustamine", - "CONVERSATION_TYPING_OFF": "Vestluses kirjutamise lõpetamine" + "CONVERSATION_TYPING_OFF": "Vestluses kirjutamise lõpetamine", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/fa/bulkActions.json b/app/javascript/dashboard/i18n/locale/fa/bulkActions.json index 876d88f0f..deaf2245d 100644 --- a/app/javascript/dashboard/i18n/locale/fa/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/fa/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} گفتگو انتخاب شده است", - "AGENT_SELECT_LABEL": "انتخاب اپراتور", - "ASSIGN_CONFIRMATION_LABEL": "آیا مطمئن هستید که به {conversationCount} {conversationLabel} اختصاص می‌دهید", - "UNASSIGN_CONFIRMATION_LABEL": "آیا مطمئنید که {conversationCount} {conversationLabel} را می‌خواهید اختصاص را لغو کنید؟", - "GO_BACK_LABEL": "بازگشت", - "ASSIGN_LABEL": "اختصاص دادن", "NONE": "هیچکدام", "CLEAR_SELECTION": "پاک کردن", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "گفتگو با موفقیت حل شد.", "RESOLVE_FAILED": "گفتگو حل نشد، لطفا دوباره امتحان کنید.", "ALL_CONVERSATIONS_SELECTED_ALERT": "گفتگوهای قابل مشاهده در این صفحه فقط انتخاب می‌شوند.", - "AGENT_LIST_LOADING": "بارگذاری ایجنت ها", "UPDATE": { "CHANGE_STATUS": "تغییر وضعیت", "SNOOZE_UNTIL": "به تعویق انداختن", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "برچسب اختصاص دهید", - "NO_LABELS_FOUND": "هیچ برچسبی یافت نشد", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "اختصاص برچسب‌های انتخاب شده", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "برچسب‌ها با موفقیت اختصاص یافتند.", - "ASSIGN_FAILED": "اختصاص برچسب‌ به صورت موفق انجام نشد، لطفا دوباره امتحان کنید." + "ASSIGN_FAILED": "اختصاص برچسب‌ به صورت موفق انجام نشد، لطفا دوباره امتحان کنید.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "انتخاب تیم", "NONE": "هیچکدام", - "NO_TEAMS_AVAILABLE": "هنوز هیچ تیمی به این حساب کاربری اضافه نشده است.", - "ASSIGN_SELECTED_TEAMS": "اختصاص تیم انتخاب شده.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/fa/campaign.json b/app/javascript/dashboard/i18n/locale/fa/campaign.json index da401f57e..f4a2fab90 100644 --- a/app/javascript/dashboard/i18n/locale/fa/campaign.json +++ b/app/javascript/dashboard/i18n/locale/fa/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "تکمیل شد", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "تکمیل شد", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/fa/companies.json b/app/javascript/dashboard/i18n/locale/fa/companies.json index 654b9fc39..91b7f1fad 100644 --- a/app/javascript/dashboard/i18n/locale/fa/companies.json +++ b/app/javascript/dashboard/i18n/locale/fa/companies.json @@ -80,7 +80,7 @@ "DESCRIPTION": "Search for an existing contact and link it to this company.", "SEARCH_PLACEHOLDER": "جستجوی مخاطبین...", "INITIAL": "Start typing to search contacts.", - "EMPTY": "No contacts found.", + "EMPTY": "هیچ مخاطبی پیدا نشد.", "CONFIRM_TITLE": "Link contact", "CONFIRM_DESCRIPTION": "Confirm the company and contact before linking them.", "COMPANY_LABEL": "شرکت", diff --git a/app/javascript/dashboard/i18n/locale/fa/components.json b/app/javascript/dashboard/i18n/locale/fa/components.json index cab63a405..2681c35a3 100644 --- a/app/javascript/dashboard/i18n/locale/fa/components.json +++ b/app/javascript/dashboard/i18n/locale/fa/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/fa/contact.json b/app/javascript/dashboard/i18n/locale/fa/contact.json index 2a42fb278..57e6c5488 100644 --- a/app/javascript/dashboard/i18n/locale/fa/contact.json +++ b/app/javascript/dashboard/i18n/locale/fa/contact.json @@ -20,6 +20,8 @@ "CALL": "تماس", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "اختصاص برچسب‌ها", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "برچسب‌ها با موفقیت اختصاص یافتند.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/fa/conversation.json b/app/javascript/dashboard/i18n/locale/fa/conversation.json index cdd3733be..b965cf4dd 100644 --- a/app/javascript/dashboard/i18n/locale/fa/conversation.json +++ b/app/javascript/dashboard/i18n/locale/fa/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "این پیام پشتیبانی نمی شود. می توانید این پیام را در برنامه فیس بوک مسنجر مشاهده کنید.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "این پیام پشتیبانی نمی شود. می توانید این پیام را در برنامه اینستاگرام مشاهده کنید.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "پیام با موفقیت حذف شد", "FAIL_DELETE_MESSSAGE": "پیام حذف نشد! دوباره امتحان کنید", "NO_RESPONSE": "بدون پاسخ", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "نمایش کمتر" }, "HEADER": { "RESOLVE_ACTION": "حل شد", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "تا فردا به تعویق افتاد", "SNOOZED_UNTIL_NEXT_WEEK": "تا هفته آینده به تعویق افتاد", "SNOOZED_UNTIL_NEXT_REPLY": "تا پاسخ بعدی به تعویق افتاد", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "ضبط صدا", "TIP_AUDIORECORDER_PERMISSION": "اجازه دسترسی به صدا", "TIP_AUDIORECORDER_ERROR": "صدا را نمی‌توان باز کند", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "برای ضمیمه کردن درگ و درآپ کنید", "START_AUDIO_RECORDING": "در حال شروع ضبط صدا", "STOP_AUDIO_RECORDING": "در حال توقف ضبط صدا", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "نادیده بگیر", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { @@ -367,16 +389,16 @@ "MACROS": "ماکروها", "LINEAR_ISSUES": "Linked Linear Issues", "SHOPIFY_ORDERS": "Shopify Orders", - "SHARED_FILES": "Attachments" + "SHARED_FILES": "پیوست‌ها" }, "SHARED_FILES": { "EMPTY": "No attachments yet", - "DOWNLOAD": "Download file", + "DOWNLOAD": "دریافت پرونده", "DOWNLOAD_ERROR": "Could not download the file. Please try again.", "MEDIA_HEADING": "Media", - "FILES_HEADING": "Files", + "FILES_HEADING": "پرونده‌ها", "VIEW_ALL": "مشاهده همه", - "SHOW_LESS": "Show less", + "SHOW_LESS": "نمایش کمتر", "MORE_COUNT": "+{count}", "UNTITLED_FILE": "Untitled file" }, diff --git a/app/javascript/dashboard/i18n/locale/fa/helpCenter.json b/app/javascript/dashboard/i18n/locale/fa/helpCenter.json index 7d4966529..e2ce47b87 100644 --- a/app/javascript/dashboard/i18n/locale/fa/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/fa/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "پیش‌نویس", "ARCHIVE": "Archive", "TRANSLATE": "ترجمه", + "MOVE_TO_CATEGORY": "دسته‌بندی", "DELETE": "حذف", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "حذف", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "ظاهری", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "حذف" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "پورتال با موفقیت ایجاد شد", diff --git a/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json index d3447414f..479e8a4b8 100644 --- a/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "ما نتوانستیم کانال WhatsApp را ذخیره کنیم" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "ایمیل", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "پیکربندی ربات", "ACCOUNT_HEALTH": "Account Health", "CSAT": "رضایت مشتری", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "به‌روزرسانی تنظیمات فرم قبل از گفتگو" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/fa/integrations.json b/app/javascript/dashboard/i18n/locale/fa/integrations.json index 796985aaf..d81daa580 100644 --- a/app/javascript/dashboard/i18n/locale/fa/integrations.json +++ b/app/javascript/dashboard/i18n/locale/fa/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "مخاطب ایجاد شد", "CONTACT_UPDATED": "مخاطب به‌روزرسانی شد", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/fi/bulkActions.json b/app/javascript/dashboard/i18n/locale/fi/bulkActions.json index d7a05e6f6..6ff1b217a 100644 --- a/app/javascript/dashboard/i18n/locale/fi/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/fi/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Mene takaisin", - "ASSIGN_LABEL": "Delegoi", "NONE": "None", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select team", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/fi/campaign.json b/app/javascript/dashboard/i18n/locale/fi/campaign.json index 18db3657f..45679751a 100644 --- a/app/javascript/dashboard/i18n/locale/fi/campaign.json +++ b/app/javascript/dashboard/i18n/locale/fi/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/fi/components.json b/app/javascript/dashboard/i18n/locale/fi/components.json index d7dc18f5c..ef02db5c6 100644 --- a/app/javascript/dashboard/i18n/locale/fi/components.json +++ b/app/javascript/dashboard/i18n/locale/fi/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/fi/contact.json b/app/javascript/dashboard/i18n/locale/fi/contact.json index dcbf58344..ac8d32016 100644 --- a/app/javascript/dashboard/i18n/locale/fi/contact.json +++ b/app/javascript/dashboard/i18n/locale/fi/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/fi/conversation.json b/app/javascript/dashboard/i18n/locale/fi/conversation.json index f5017d16e..8dcc36570 100644 --- a/app/javascript/dashboard/i18n/locale/fi/conversation.json +++ b/app/javascript/dashboard/i18n/locale/fi/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", "NO_RESPONSE": "No response", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Ratkaise", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Drag and drop here to attach", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/fi/helpCenter.json b/app/javascript/dashboard/i18n/locale/fi/helpCenter.json index 02ba84edd..3da9cffb1 100644 --- a/app/javascript/dashboard/i18n/locale/fi/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/fi/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Draft", "ARCHIVE": "Archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Poista", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Poista", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Poista" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal created successfully", diff --git a/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json index c2ddfdb71..acd660eb0 100644 --- a/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Sähköposti", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot Configuration", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/fi/integrations.json b/app/javascript/dashboard/i18n/locale/fi/integrations.json index ff721724a..b990f68e1 100644 --- a/app/javascript/dashboard/i18n/locale/fi/integrations.json +++ b/app/javascript/dashboard/i18n/locale/fi/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact created", "CONTACT_UPDATED": "Contact updated", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/fr/bulkActions.json b/app/javascript/dashboard/i18n/locale/fr/bulkActions.json index 59d3e3c91..3d875a01b 100644 --- a/app/javascript/dashboard/i18n/locale/fr/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/fr/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations sélectionnées", - "AGENT_SELECT_LABEL": "Sélectionner un agent", - "ASSIGN_CONFIRMATION_LABEL": "Êtes-vous sûr de vouloir assigner {conversationCount} {conversationLabel} à", - "UNASSIGN_CONFIRMATION_LABEL": "Êtes-vous sûr de vouloir retirer l'affectation de {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Retour", - "ASSIGN_LABEL": "Assigner", "NONE": "Aucun", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations résolues avec succès.", "RESOLVE_FAILED": "Impossible de résoudre les conversations, veuillez réessayer.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Sont uniquement sélectionnées les conversations visibles sur cette page.", - "AGENT_LIST_LOADING": "Chargement des agents", "UPDATE": { "CHANGE_STATUS": "Changer le statut", "SNOOZE_UNTIL": "Reporter", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assigner une étiquette", - "NO_LABELS_FOUND": "Aucune étiquette trouvée", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assigner les étiquettes sélectionnées", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Étiquettes attribuées avec succès.", - "ASSIGN_FAILED": "Impossible d'attribuer les étiquettes, veuillez réessayer." + "ASSIGN_FAILED": "Impossible d'attribuer les étiquettes, veuillez réessayer.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Sélectionner une équipe", "NONE": "Aucun", - "NO_TEAMS_AVAILABLE": "Aucune équipe n'a encore été ajoutée à ce compte.", - "ASSIGN_SELECTED_TEAMS": "Assigner à l'équipe sélectionnée.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/fr/campaign.json b/app/javascript/dashboard/i18n/locale/fr/campaign.json index b2bbede32..92756bff7 100644 --- a/app/javascript/dashboard/i18n/locale/fr/campaign.json +++ b/app/javascript/dashboard/i18n/locale/fr/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Terminé", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Terminé", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/fr/components.json b/app/javascript/dashboard/i18n/locale/fr/components.json index 53ebf3b1a..68028416e 100644 --- a/app/javascript/dashboard/i18n/locale/fr/components.json +++ b/app/javascript/dashboard/i18n/locale/fr/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/fr/contact.json b/app/javascript/dashboard/i18n/locale/fr/contact.json index b0fbf700b..cefa7d0af 100644 --- a/app/javascript/dashboard/i18n/locale/fr/contact.json +++ b/app/javascript/dashboard/i18n/locale/fr/contact.json @@ -20,6 +20,8 @@ "CALL": "Appel", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choisir une boîte de réception vocale" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assigner des étiquettes", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Étiquettes attribuées avec succès.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/fr/conversation.json b/app/javascript/dashboard/i18n/locale/fr/conversation.json index 2451b4a49..8a5df6eb5 100644 --- a/app/javascript/dashboard/i18n/locale/fr/conversation.json +++ b/app/javascript/dashboard/i18n/locale/fr/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "Ce message n'est pas pris en charge. Vous pouvez voir ce message sur l'application Facebook Messenger.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "Ce message n'est pas pris en charge. Vous pouvez voir ce message sur l'application Instagram.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Le message a bien été supprimé", "FAIL_DELETE_MESSSAGE": "Impossible de supprimer le message ! Veuillez réessayez", "NO_RESPONSE": "Pas de réponse", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Appel sortant", "CALL_IN_PROGRESS": "Appel en cours", "NO_ANSWER": "Pas de réponse", + "NO_ANSWER_OUTBOUND_LABEL": "Pas de réponse", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Appel manqué", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Appel terminé", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Pas encore répondu", + "CALLING": "Calling…", "THEY_ANSWERED": "Il a répondu", "YOU_ANSWERED": "Vous avez répondu", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Résoudre", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Reporté jusqu'à demain", "SNOOZED_UNTIL_NEXT_WEEK": "Reporté jusqu'à la semaine prochaine", "SNOOZED_UNTIL_NEXT_REPLY": "Reporté jusqu'à la prochaine réponse", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Enregistrer l'audio", "TIP_AUDIORECORDER_PERMISSION": "Autoriser l'accès à l'audio", "TIP_AUDIORECORDER_ERROR": "Impossible d'ouvrir l'audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Glissez et déposez ici pour lier", "START_AUDIO_RECORDING": "Démarrer l'enregistrement audio", "STOP_AUDIO_RECORDING": "Arrêter l'enregistrement audio", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Pas encore répondu", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Rejeter", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/fr/helpCenter.json b/app/javascript/dashboard/i18n/locale/fr/helpCenter.json index 57f2d6245..80eac8126 100644 --- a/app/javascript/dashboard/i18n/locale/fr/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/fr/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Brouillon", "ARCHIVE": "Archive", "TRANSLATE": "Traduire", + "MOVE_TO_CATEGORY": "Catégorie", "DELETE": "Supprimer", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Supprimer", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Apparence", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Supprimer" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Le portail a été créé avec succès", diff --git a/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json index 1fd73270c..f90a67fa8 100644 --- a/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/fr/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Nous n'avons pas pu enregistrer le canal WhatsApp" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "Appel WhatsApp", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Courriel", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Configuration du bot", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Mettre à jour les paramètres du formulaire de pré-chat" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/fr/integrations.json b/app/javascript/dashboard/i18n/locale/fr/integrations.json index 6fcf86fc0..557365f36 100644 --- a/app/javascript/dashboard/i18n/locale/fr/integrations.json +++ b/app/javascript/dashboard/i18n/locale/fr/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact créé", "CONTACT_UPDATED": "Contact mis à jour", "CONVERSATION_TYPING_ON": "Saisie de conversation activée", - "CONVERSATION_TYPING_OFF": "Saisie de conversation désactivée" + "CONVERSATION_TYPING_OFF": "Saisie de conversation désactivée", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/fr/onboarding.json b/app/javascript/dashboard/i18n/locale/fr/onboarding.json index b3ab630eb..3aa5f93e9 100644 --- a/app/javascript/dashboard/i18n/locale/fr/onboarding.json +++ b/app/javascript/dashboard/i18n/locale/fr/onboarding.json @@ -1,26 +1,26 @@ { "ONBOARDING_NEXT": { - "GREETING": "Hello {name}!", - "SUBTITLE": "Please review the following details", - "YOUR_DETAILS": "Your details", + "GREETING": "Bonjour {name} !", + "SUBTITLE": "Veuillez vérifier les informations suivantes", + "YOUR_DETAILS": "Vos informations", "COMPANY_DETAILS": "Company details", "FIELDS": { "EMAIL": "Courriel", - "YOUR_ROLE": "Your Role", + "YOUR_ROLE": "Votre rôle", "WEBSITE": "Site internet", "LANGUAGE": "Langue", "TIMEZONE": "Fuseau horaire", - "COMPANY_SIZE": "Company Size", - "INDUSTRY": "Industry", + "COMPANY_SIZE": "Taille de l'entreprise", + "INDUSTRY": "Secteur d'activité", "REFERRAL_SOURCE": "Where did you find us?" }, "PLACEHOLDERS": { - "SELECT_ROLE": "Select your role", - "ENTER_WEBSITE": "www.example.com", - "SELECT_LANGUAGE": "Select language", + "SELECT_ROLE": "Sélectionnez votre rôle", + "ENTER_WEBSITE": "www.exemple.fr", + "SELECT_LANGUAGE": "Sélectionner la langue", "SELECT_TIMEZONE": "Sélectionnez le fuseau horaire", - "SELECT_COMPANY_SIZE": "Select company size", - "SELECT_INDUSTRY": "Select industry", + "SELECT_COMPANY_SIZE": "Sélectionnez la taille de l'entreprise", + "SELECT_INDUSTRY": "Sélectionnez un secteur d'activité", "SELECT_REFERRAL_SOURCE": "Select source" }, "EMAIL_VERIFIED": "Email verified", @@ -28,7 +28,7 @@ "CONTINUE": "Continue", "SAVING": "Enregistrement en cours...", "VALIDATION_ERROR": "Please fill in all required fields", - "SUCCESS": "Details saved successfully", + "SUCCESS": "Les informations ont été enregistrées avec succès", "ERROR": "Could not save details. Please try again." } } diff --git a/app/javascript/dashboard/i18n/locale/he/bulkActions.json b/app/javascript/dashboard/i18n/locale/he/bulkActions.json index 2678e646f..b0d6e3f46 100644 --- a/app/javascript/dashboard/i18n/locale/he/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/he/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} שיחות נבחרו", - "AGENT_SELECT_LABEL": "בחר נציג", - "ASSIGN_CONFIRMATION_LABEL": "האם אתה בטוח שברצונך לשייך {conversationCount} {conversationLabel} ל-", - "UNASSIGN_CONFIRMATION_LABEL": "האם אתה בטוח שברצונך לבטל שיוך {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "חזור", - "ASSIGN_LABEL": "שייך", "NONE": "כלום", "CLEAR_SELECTION": "נקה", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "שיחה טופלה בהצלחה.", "RESOLVE_FAILED": "הסגירה של השיחות נכשלה. אנא נסה שוב.", "ALL_CONVERSATIONS_SELECTED_ALERT": "השיחות הנבחרות הן המוצגות בדף זה בלבד.", - "AGENT_LIST_LOADING": "טוען סוכנים", "UPDATE": { "CHANGE_STATUS": "שנה סטאטוס", "SNOOZE_UNTIL": "נודניק", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "הקצה תוויות", - "NO_LABELS_FOUND": "לא נמצאו תוויות", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "שייך תוויות נבחרות", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "תוויות שוייכו בהצלחה.", - "ASSIGN_FAILED": "ההקצאה של התוויות נכשלה. אנא נסה שוב." + "ASSIGN_FAILED": "ההקצאה של התוויות נכשלה. אנא נסה שוב.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "בחר קבוצה", "NONE": "כלום", - "NO_TEAMS_AVAILABLE": "לא קיימות קבוצות להוספה.", - "ASSIGN_SELECTED_TEAMS": "שייך קבוצה.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "הצוותים הוקצו בהצלחה.", diff --git a/app/javascript/dashboard/i18n/locale/he/campaign.json b/app/javascript/dashboard/i18n/locale/he/campaign.json index 45f4a3af9..11c1d639f 100644 --- a/app/javascript/dashboard/i18n/locale/he/campaign.json +++ b/app/javascript/dashboard/i18n/locale/he/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "מעבד", "COMPLETED": "הושלם", "SCHEDULED": "מתוזמן" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "מעבד", "COMPLETED": "הושלם", "SCHEDULED": "מתוזמן" }, diff --git a/app/javascript/dashboard/i18n/locale/he/components.json b/app/javascript/dashboard/i18n/locale/he/components.json index 87ba64827..636caa1b0 100644 --- a/app/javascript/dashboard/i18n/locale/he/components.json +++ b/app/javascript/dashboard/i18n/locale/he/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/he/contact.json b/app/javascript/dashboard/i18n/locale/he/contact.json index b886ebd44..4203d154b 100644 --- a/app/javascript/dashboard/i18n/locale/he/contact.json +++ b/app/javascript/dashboard/i18n/locale/he/contact.json @@ -20,6 +20,8 @@ "CALL": "התקשר", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "בחר תיבת דואר קולי" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "הקצה תוויות", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "תוויות שוייכו בהצלחה.", "ASSIGN_LABELS_FAILED": "ההקצאה של התוויות נכשלה", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "בחר את התוויות שברצונך להוסיף לאנשי הקשר שנבחרו.", "NO_LABELS_FOUND": "אין עדיין תוויות זמינות.", "SELECTED_COUNT": "{count} נבחרו", diff --git a/app/javascript/dashboard/i18n/locale/he/conversation.json b/app/javascript/dashboard/i18n/locale/he/conversation.json index 8cb92ed12..0ce06cd72 100644 --- a/app/javascript/dashboard/i18n/locale/he/conversation.json +++ b/app/javascript/dashboard/i18n/locale/he/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "הודעה זו אינה נתמכת. תוכל לצפות בהודעה זו באפליקציית Facebook Messenger.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "הודעה זו אינה נתמכת. תוכל לצפות בהודעה זו באפליקציית Instagram.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "ההודעה נמחקה בהצלחה", "FAIL_DELETE_MESSSAGE": "לא ניתן למחוק את ההודעה! נסה שוב", "NO_RESPONSE": "אין תגובה", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "שיחה יוצאת", "CALL_IN_PROGRESS": "שיחה מתבצעת", "NO_ANSWER": "אין מענה", + "NO_ANSWER_OUTBOUND_LABEL": "אין מענה", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "שיחה שלא נענתה", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "השיחה הסתיימה", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "עדיין לא נענה", + "CALLING": "Calling…", "THEY_ANSWERED": "הם ענו", "YOU_ANSWERED": "אתה ענית", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "פתרון", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "נמנם עד מחר", "SNOOZED_UNTIL_NEXT_WEEK": "נמנם עד שבוע הבא", "SNOOZED_UNTIL_NEXT_REPLY": "נמנם עד תגובה הבאה", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "הקלט אודיו", "TIP_AUDIORECORDER_PERMISSION": "אפשר גישה לאודיו", "TIP_AUDIORECORDER_ERROR": "לא יכול לפתוח אודיו", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "גרור ושחרר כאן להוספת קובץ מצורף", "START_AUDIO_RECORDING": "התחל הקלטת אודיו", "STOP_AUDIO_RECORDING": "עצור הקלטת אודיו", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "עדיין לא נענה", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "סגור", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/he/helpCenter.json b/app/javascript/dashboard/i18n/locale/he/helpCenter.json index 98b3abe97..e1e793f92 100644 --- a/app/javascript/dashboard/i18n/locale/he/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/he/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "טיוטה", "ARCHIVE": "ארכיון", "TRANSLATE": "תרגום", + "MOVE_TO_CATEGORY": "קטגוריה", "DELETE": "מחק", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "מחק", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "ערוך הגדרה" }, + "LAYOUT_CONTENT": { + "HEADER": "מראה", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "הסר" + }, + "SAVE": "שמור שינויים" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "הפורטל נוצר בהצלחה", diff --git a/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json index 47182e2a8..64e5f9a6c 100644 --- a/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "מאמת עם Meta", "WAITING_FOR_BUSINESS_INFO": "אנא השלם את הגדרת העסק בחלון Meta...", "PROCESSING": "מגדיר את חשבון WhatsApp העסקי שלך", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "טוען SDK של Facebook...", "CANCELLED": "הרשמת WhatsApp בוטלה", "SUCCESS_TITLE": "חשבון WhatsApp עסקי מחובר!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "האימות לא הושלם. אנא הפעל מחדש את התהליך.", "SUCCESS_FALLBACK": "חשבון WhatsApp עסקי הוגדר בהצלחה", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "זרימת הגדרה ידנית" + "MANUAL_LINK_TEXT": "זרימת הגדרה ידנית", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "לא הצלחנו לשמור את ערוץ הוואטסאפ" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "תמוך בלקוחות שלך ב-WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "אימייל", "DESCRIPTION": "התחבר עם Gmail, Outlook או ספקים אחרים" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "הגדרות בוט", "ACCOUNT_HEALTH": "תקינות חשבון", "CSAT": "CSAT", - "VOICE": "קול" + "VOICE": "קול", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "סנכרן תבניות הודעות מ-WhatsApp באופן ידני כדי לעדכן את התבניות הזמינות שלך.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "סנכרן תבניות", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "סנכרון התבניות הופעל בהצלחה. העדכון עשוי להימשך כמה דקות.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "עדכון הגדרות טופס טרום צ'אט" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/he/integrations.json b/app/javascript/dashboard/i18n/locale/he/integrations.json index 9c0cb4661..420882e16 100644 --- a/app/javascript/dashboard/i18n/locale/he/integrations.json +++ b/app/javascript/dashboard/i18n/locale/he/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "צור קשר", "CONTACT_UPDATED": "איש קשר עודכן", "CONVERSATION_TYPING_ON": "הקלדה בשיחה מופעלת", - "CONVERSATION_TYPING_OFF": "הקלדה בשיחה מושבתת" + "CONVERSATION_TYPING_OFF": "הקלדה בשיחה מושבתת", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/hi/bulkActions.json b/app/javascript/dashboard/i18n/locale/hi/bulkActions.json index 2472a9288..6b922bc7b 100644 --- a/app/javascript/dashboard/i18n/locale/hi/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/hi/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "None", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select team", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/hi/campaign.json b/app/javascript/dashboard/i18n/locale/hi/campaign.json index 2582d37b2..f1a3397f2 100644 --- a/app/javascript/dashboard/i18n/locale/hi/campaign.json +++ b/app/javascript/dashboard/i18n/locale/hi/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/hi/components.json b/app/javascript/dashboard/i18n/locale/hi/components.json index ea7ea6eb5..fd9f092a5 100644 --- a/app/javascript/dashboard/i18n/locale/hi/components.json +++ b/app/javascript/dashboard/i18n/locale/hi/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/hi/contact.json b/app/javascript/dashboard/i18n/locale/hi/contact.json index 94471638e..93ff820eb 100644 --- a/app/javascript/dashboard/i18n/locale/hi/contact.json +++ b/app/javascript/dashboard/i18n/locale/hi/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/hi/conversation.json b/app/javascript/dashboard/i18n/locale/hi/conversation.json index a06d91b81..509afd4e7 100644 --- a/app/javascript/dashboard/i18n/locale/hi/conversation.json +++ b/app/javascript/dashboard/i18n/locale/hi/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", "NO_RESPONSE": "No response", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Resolve", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Drag and drop here to attach", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/hi/helpCenter.json b/app/javascript/dashboard/i18n/locale/hi/helpCenter.json index 28663c015..f80deb4fb 100644 --- a/app/javascript/dashboard/i18n/locale/hi/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/hi/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Draft", "ARCHIVE": "Archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Delete", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Delete", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Remove" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal created successfully", diff --git a/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json index a1fcd201b..3b3bdfa93 100644 --- a/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/hi/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot Configuration", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/hi/integrations.json b/app/javascript/dashboard/i18n/locale/hi/integrations.json index 60c98f202..0438ba3d1 100644 --- a/app/javascript/dashboard/i18n/locale/hi/integrations.json +++ b/app/javascript/dashboard/i18n/locale/hi/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact created", "CONTACT_UPDATED": "Contact updated", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/hr/bulkActions.json b/app/javascript/dashboard/i18n/locale/hr/bulkActions.json index 63153e70d..79165bced 100644 --- a/app/javascript/dashboard/i18n/locale/hr/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/hr/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "None", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select team", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/hr/campaign.json b/app/javascript/dashboard/i18n/locale/hr/campaign.json index f7323f219..d14359d7f 100644 --- a/app/javascript/dashboard/i18n/locale/hr/campaign.json +++ b/app/javascript/dashboard/i18n/locale/hr/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/hr/components.json b/app/javascript/dashboard/i18n/locale/hr/components.json index e43d0f95e..d3aa278ec 100644 --- a/app/javascript/dashboard/i18n/locale/hr/components.json +++ b/app/javascript/dashboard/i18n/locale/hr/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/hr/contact.json b/app/javascript/dashboard/i18n/locale/hr/contact.json index 3c0e33891..25609fce2 100644 --- a/app/javascript/dashboard/i18n/locale/hr/contact.json +++ b/app/javascript/dashboard/i18n/locale/hr/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/hr/conversation.json b/app/javascript/dashboard/i18n/locale/hr/conversation.json index f58308997..a268b80c6 100644 --- a/app/javascript/dashboard/i18n/locale/hr/conversation.json +++ b/app/javascript/dashboard/i18n/locale/hr/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", "NO_RESPONSE": "No response", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Resolve", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Drag and drop here to attach", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/hr/helpCenter.json b/app/javascript/dashboard/i18n/locale/hr/helpCenter.json index 80ad350ee..6d7a9b027 100644 --- a/app/javascript/dashboard/i18n/locale/hr/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/hr/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Skica", "ARCHIVE": "Archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Kategorija", "DELETE": "Izbriši", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Izbriši", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Izbriši" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal created successfully", diff --git a/app/javascript/dashboard/i18n/locale/hr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hr/inboxMgmt.json index 4386d2915..abb3e7433 100644 --- a/app/javascript/dashboard/i18n/locale/hr/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/hr/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot Configuration", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/hr/integrations.json b/app/javascript/dashboard/i18n/locale/hr/integrations.json index e78752c67..d35941385 100644 --- a/app/javascript/dashboard/i18n/locale/hr/integrations.json +++ b/app/javascript/dashboard/i18n/locale/hr/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact created", "CONTACT_UPDATED": "Contact updated", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/hu/bulkActions.json b/app/javascript/dashboard/i18n/locale/hu/bulkActions.json index b132a0e56..0b4c4e0f4 100644 --- a/app/javascript/dashboard/i18n/locale/hu/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/hu/bulkActions.json @@ -1,15 +1,10 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Ügynök kiválasztása", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Visszaugrás", - "ASSIGN_LABEL": "Hozzárendelés", "NONE": "Nincs", - "CLEAR_SELECTION": "Clear", - "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", - "UNASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", + "CLEAR_SELECTION": "Kijelölés törlése", + "ASSIGN_AGENT_CONFIRMATION_LABEL": "Biztosan hozzárendeled a kijelölt {n} beszélgetést ehhez az ügyintézőhöz: {agentName}? | Biztosan hozzárendeled a kijelölt {n} beszélgetést ehhez az ügyintézőhöz: {agentName}?", + "UNASSIGN_AGENT_CONFIRMATION_LABEL": "Biztosan megszünteted a kijelölt {n} beszélgetés ügyintézői hozzárendelését? | Biztosan megszünteted a kijelölt {n} beszélgetés ügyintézői hozzárendelését?", "YES": "Igen", "CANCEL": "Mégse", "SEARCH_INPUT_PLACEHOLDER": "Keresés", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Beszélgetés sikeresen megoldva.", "RESOLVE_FAILED": "Nem sikerült megoldani a beszélgetéseket. Kérjük, próbálja újra.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Csak a kiválasztott beszélgetések láthatóak ezen az oldalon.", - "AGENT_LIST_LOADING": "Ügynökök betöltése", "UPDATE": { "CHANGE_STATUS": "Státusz változtatása", "SNOOZE_UNTIL": "Halasztás", @@ -33,18 +27,18 @@ }, "LABELS": { "ASSIGN_LABELS": "Címkék hozzárendelése", - "NO_LABELS_FOUND": "Nem találtunk címkét", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Válogatott címkék hozzárendelése", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Címkék hozzárendelése sikeres.", - "ASSIGN_FAILED": "Nem sikerült címkéket hozzárendelni. Kérjük, próbálja újra." + "ASSIGN_FAILED": "Nem sikerült címkéket hozzárendelni. Kérjük, próbálja újra.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Csapat kiválasztása", "NONE": "Nincs", - "NO_TEAMS_AVAILABLE": "Ebben a fiókban még nincs csapat létrehozva.", - "ASSIGN_SELECTED_TEAMS": "Válogatott csapatok hozzárendelése.", - "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", - "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", + "ASSIGN_TEAM_CONFIRMATION_LABEL": "Biztosan hozzárendeled a kijelölt {n} beszélgetést ehhez a csapathoz: {teamName}? | Biztosan hozzárendeled a kijelölt {n} beszélgetést ehhez a csapathoz: {teamName}?", + "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Biztosan megszünteted a kijelölt {n} beszélgetés csapathoz rendelését? | Biztosan megszünteted a kijelölt {n} beszélgetés csapathoz rendelését?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", "ASSIGN_FAILED": "Nem sikerült csapatot kijelölni. Kérjük, próbálja újra." } diff --git a/app/javascript/dashboard/i18n/locale/hu/campaign.json b/app/javascript/dashboard/i18n/locale/hu/campaign.json index 0f0df48f2..486673acd 100644 --- a/app/javascript/dashboard/i18n/locale/hu/campaign.json +++ b/app/javascript/dashboard/i18n/locale/hu/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Lezárt", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Lezárt", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/hu/companies.json b/app/javascript/dashboard/i18n/locale/hu/companies.json index fa8306fc0..534cb98a2 100644 --- a/app/javascript/dashboard/i18n/locale/hu/companies.json +++ b/app/javascript/dashboard/i18n/locale/hu/companies.json @@ -23,80 +23,80 @@ "UNNAMED": "Unnamed Company", "CONTACTS_COUNT": "{n} contact | {n} contacts", "ACTIONS": { - "CREATE": "Add company" + "CREATE": "Cég létrehozása" }, "CREATE": { - "TITLE": "Add company details", + "TITLE": "Cég létrehozása", "ACTIONS": { - "SAVE": "Add company" + "SAVE": "Cég létrehozása" }, "MESSAGES": { - "SUCCESS": "Company created.", - "ERROR": "Could not create the company." + "SUCCESS": "A cég sikeresen létrehozva.", + "ERROR": "Nem sikerült létrehozni a céget." } }, "DETAIL": { - "LOADING": "Loading company details...", + "LOADING": "Cég részleteinek betöltése...", "EMPTY_STATE": { - "TITLE": "Company not found", - "SUBTITLE": "This company may have been removed or is no longer available in this account." + "TITLE": "Cég nem található", + "SUBTITLE": "Ez a cég lehet, hogy eltávolításra került, vagy már nem elérhető ebben a fiókban." }, "SIDEBAR": { "TABS": { - "ATTRIBUTES": "Attributes", + "ATTRIBUTES": "Tulajdonságok", "CONTACTS": "Kontaktok", - "HISTORY": "History", + "HISTORY": "Előzmények", "NOTES": "Megjegyzések" } }, "HISTORY": { - "EMPTY": "No conversations found for this company's contacts yet." + "EMPTY": "Nincsenek beszélgetések a cég ügyfeleihez kapcsolódóan." }, "NOTES": { - "EMPTY": "No notes found for this company's contacts yet." + "EMPTY": "Nincsenek megjegyzések a cég ügyfeleihez kapcsolódóan." }, "ATTRIBUTES": { "SEARCH_PLACEHOLDER": "Tulajdonságok keresése...", - "EMPTY_STATE": "There are no company custom attributes configured yet.", - "NO_ATTRIBUTES": "No matching attributes found.", - "UNUSED_ATTRIBUTES": "{count} unused attribute | {count} unused attributes", + "EMPTY_STATE": "A cégnek még nincsenek egyedi tulajdonságai.", + "NO_ATTRIBUTES": "Nincs találat a tulajdonságok között.", + "UNUSED_ATTRIBUTES": "{count} nem használt tulajdonság | {count} nem használt tulajdonság", "MESSAGES": { - "UPDATE_SUCCESS": "Company attribute updated.", - "UPDATE_ERROR": "Could not update company attribute.", - "DELETE_SUCCESS": "Company attribute removed.", - "DELETE_ERROR": "Could not remove company attribute." + "UPDATE_SUCCESS": "Cég tulajdonsága frissítve.", + "UPDATE_ERROR": "Nem sikerült frissíteni a cég tulajdonságát.", + "DELETE_SUCCESS": "Cég tulajdonsága eltávolítva.", + "DELETE_ERROR": "Nem sikerült eltávolítani a cég tulajdonságát." } }, "CONTACTS": { "LOADING": "Kontaktok betöltése...", - "EMPTY": "No contacts are linked to this company yet.", - "UNNAMED_CONTACT": "Unnamed contact", + "EMPTY": "Ehhez a céghez még nincsenek ügyfelek kapcsolva.", + "UNNAMED_CONTACT": "Név nélküli ügyfél", "ACTIONS": { - "ADD": "Add contact", - "REMOVE": "Remove contact" + "ADD": "Ügyfél hozzáadása", + "REMOVE": "Ügyfél eltávolítása" }, "DIALOGS": { "ADD": { - "DESCRIPTION": "Search for an existing contact and link it to this company.", - "SEARCH_PLACEHOLDER": "Search contacts...", - "INITIAL": "Start typing to search contacts.", - "EMPTY": "No contacts found.", - "CONFIRM_TITLE": "Link contact", - "CONFIRM_DESCRIPTION": "Confirm the company and contact before linking them.", + "DESCRIPTION": "Keress a meglévő ügyfelek között, és csatold őket ehhez a céghez.", + "SEARCH_PLACEHOLDER": "Ügyfelek keresése...", + "INITIAL": "Kezdj el gépelni az ügyfelek kereséséhez.", + "EMPTY": "Nem találhatók ügyfelek.", + "CONFIRM_TITLE": "Ügyfél csatolása", + "CONFIRM_DESCRIPTION": "Erősítsd meg a cég és az ügyfél csatolását.", "COMPANY_LABEL": "Cég", "CONTACT_LABEL": "Kontakt", - "CURRENT_COMPANY": "Currently linked to {companyName}", - "ADD": "Link contact", + "CURRENT_COMPANY": "Jelenlegi cég: {companyName}", + "ADD": "Csatolás", "CANCEL": "Mégse" } }, "MESSAGES": { - "ADD_SUCCESS": "Contact linked to company.", - "ADD_ERROR": "Could not link contact to company.", - "REASSIGN_SUCCESS": "Contact reassigned to company.", - "REASSIGN_ERROR": "Could not reassign contact to company.", - "REMOVE_SUCCESS": "Contact removed from company.", - "REMOVE_ERROR": "Could not remove contact from company." + "ADD_SUCCESS": "Ügyfél csatolva a céghez.", + "ADD_ERROR": "Nem sikerült csatolni az ügyfelet a céghez.", + "REASSIGN_SUCCESS": "Ügyfél újra hozzárendelve a céghez.", + "REASSIGN_ERROR": "Nem sikerült újra hozzárendelni az ügyfelet a céghez.", + "REMOVE_SUCCESS": "Ügyfél eltávolítva a cégtől.", + "REMOVE_ERROR": "Nem sikerült eltávolítani az ügyfelet a cégtől." } }, "AVATAR": { @@ -104,19 +104,19 @@ "UPLOAD_SUCCESS": "Company avatar updated.", "UPLOAD_ERROR": "Could not update the company avatar.", "DELETE_SUCCESS": "Company avatar removed.", - "DELETE_ERROR": "Could not remove the company avatar." + "DELETE_ERROR": "Nem sikerült eltávolítani a cég profilképét." }, "PROFILE": { - "TITLE": "Edit company details", - "CREATED_AT": "Created {date}", - "LAST_ACTIVE": "Last active {date}", - "DESCRIPTION_PLACEHOLDER": "Add a short description for this company", + "TITLE": "Cég részleteinek szerkesztése", + "CREATED_AT": "Létrehozás dátuma: {date}", + "LAST_ACTIVE": "Utolsó aktivitás: {date}", + "DESCRIPTION_PLACEHOLDER": "Adj hozzá egy rövid leírást ehhez a céghez", "ACTIONS": { - "SAVE": "Update company" + "SAVE": "Cég frissítése" }, "MESSAGES": { - "UPDATE_SUCCESS": "Company updated.", - "UPDATE_ERROR": "Could not update the company." + "UPDATE_SUCCESS": "Cég frissítve.", + "UPDATE_ERROR": "Nem sikerült frissíteni a céget." }, "FIELDS": { "NAME": "Név", @@ -124,16 +124,16 @@ } }, "DELETE": { - "SECTION_TITLE": "Danger zone", - "SECTION_DESCRIPTION": "Delete this company and unlink its contacts. The contacts will remain in the account.", - "BUTTON": "Delete company", - "TITLE": "Delete company?", - "DESCRIPTION": "This will remove the company and unlink all associated contacts. Contacts themselves will be preserved.", - "DESCRIPTION_WITH_NAME": "This will remove {companyName} and unlink all associated contacts. Contacts themselves will be preserved.", - "CONFIRM": "Delete company", + "SECTION_TITLE": "Veszélyzóna", + "SECTION_DESCRIPTION": "Töröld ezt a céget, és válaszd le a kapcsolódó ügyfeleket. Az ügyfelek megmaradnak a fiókban.", + "BUTTON": "Cég törlése", + "TITLE": "Cég törlése?", + "DESCRIPTION": "Ez eltávolítja a céget, és leválaszt minden kapcsolódó ügyfelet. Az ügyfelek megmaradnak.", + "DESCRIPTION_WITH_NAME": "Ez eltávolítja a '{companyName}' céget, és leválaszt minden kapcsolódó ügyfelet. Az ügyfelek megmaradnak.", + "CONFIRM": "Cég törlése", "MESSAGES": { - "SUCCESS": "Company deleted.", - "ERROR": "Could not delete the company." + "SUCCESS": "Cég törölve.", + "ERROR": "Nem sikerült törölni a céget." } } }, diff --git a/app/javascript/dashboard/i18n/locale/hu/components.json b/app/javascript/dashboard/i18n/locale/hu/components.json index 5fd99eaed..5feb395bf 100644 --- a/app/javascript/dashboard/i18n/locale/hu/components.json +++ b/app/javascript/dashboard/i18n/locale/hu/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/hu/contact.json b/app/javascript/dashboard/i18n/locale/hu/contact.json index 5f231cfc4..3a88e7793 100644 --- a/app/javascript/dashboard/i18n/locale/hu/contact.json +++ b/app/javascript/dashboard/i18n/locale/hu/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Cimke hozzáadása", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Címkék hozzárendelése sikeres.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/hu/conversation.json b/app/javascript/dashboard/i18n/locale/hu/conversation.json index ad794fb78..7e68e6b40 100644 --- a/app/javascript/dashboard/i18n/locale/hu/conversation.json +++ b/app/javascript/dashboard/i18n/locale/hu/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "Ez az üzenet nem támogatott. Ezt az üzenetet a Facebook Messenger alkalmazásban tekintheti meg.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "Ez az üzenet nem támogatott. Ezt az üzenetet az Instagram alkalmazásban tekintheti meg.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Üzenet törölve", "FAIL_DELETE_MESSSAGE": "Nem tudtad törölni az üzenetet! Próbáld újra", "NO_RESPONSE": "Nincs válasz", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Kevesebb mutatása" }, "HEADER": { "RESOLVE_ACTION": "Megoldva", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Halasztás holnapig", "SNOOZED_UNTIL_NEXT_WEEK": "Halasztás jövő hétig", "SNOOZED_UNTIL_NEXT_REPLY": "Halasztás következő válaszig", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Hangfelvétel", "TIP_AUDIORECORDER_PERMISSION": "Hozzáférés megadása a hangfelvételhez", "TIP_AUDIORECORDER_ERROR": "Nem sikerült megnyitni a hangfelvételt", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Helyezd ide a csatolmányt", "START_AUDIO_RECORDING": "Hangfelvétel indítása", "STOP_AUDIO_RECORDING": "Hangfelvétel leállítása", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Elutasítás", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { @@ -376,7 +398,7 @@ "MEDIA_HEADING": "Media", "FILES_HEADING": "Files", "VIEW_ALL": "Összes megtekintése", - "SHOW_LESS": "Show less", + "SHOW_LESS": "Kevesebb mutatása", "MORE_COUNT": "+{count}", "UNTITLED_FILE": "Untitled file" }, diff --git a/app/javascript/dashboard/i18n/locale/hu/helpCenter.json b/app/javascript/dashboard/i18n/locale/hu/helpCenter.json index 8d3690c07..78388171c 100644 --- a/app/javascript/dashboard/i18n/locale/hu/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/hu/helpCenter.json @@ -582,39 +582,42 @@ } }, "BULK_TRANSLATE": { - "TITLE": "Translate article | Translate {count} articles", - "DESCRIPTION": "Translate the selected article to another language. | Translate the selected articles to another language.", - "LOCALE_LABEL": "Target language", - "LOCALE_PLACEHOLDER": "Select a language", - "CATEGORY_LABEL": "Target category", - "CATEGORY_PLACEHOLDER": "Select a category", - "OPTIONAL": "(optional)", + "TITLE": "Bejegyzés lefordítása | {count} bejegyzés lefordítása", + "DESCRIPTION": "Fordítsd le a kiválasztott bejegyzést egy másik nyelvre. | Fordítsd le a kiválasztott bejegyzéseket egy másik nyelvre.", + "LOCALE_LABEL": "Célnyelv", + "LOCALE_PLACEHOLDER": "Válassz nyelvet", + "CATEGORY_LABEL": "Célkategória", + "CATEGORY_PLACEHOLDER": "Válassz kategóriát", + "OPTIONAL": "(opcionális)", "CONFIRM": "Fordítás", - "SELECT_ALL": "Select all ({count})", - "SELECTED_COUNT": "{count} selected", - "CLEAR_SELECTION": "Clear selection", + "SELECT_ALL": "Összes kijelölése ({count})", + "SELECTED_COUNT": "{count} kijelölve", + "CLEAR_SELECTION": "Kijelölés törlése", "TRANSLATE_BUTTON": "Fordítás", - "CONFIRM_OVERWRITE": "Overwrite and translate", - "DUPLICATE_WARNING": "A translation already exists for this article in the selected language. | Translations already exist for {count} articles in the selected language.", - "DUPLICATE_CONFIRM_HINT": "Click translate again to overwrite the existing translation.", + "CONFIRM_OVERWRITE": "Felülírás és lefordítás", + "DUPLICATE_WARNING": "Ehhez a bejegyzéshez már létezik fordítás a kiválasztott nyelven. | {count} bejegyzéshez már létezik fordítás a kiválasztott nyelven.", + "DUPLICATE_CONFIRM_HINT": "Kattints a 'Lefordítás' gombra ismét a meglévő fordítás felülírásához.", "API": { - "SUCCESS_MESSAGE": "Translation in progress. The article will appear as a draft once ready.", - "ERROR_MESSAGE": "Failed to start translation. Please try again." + "SUCCESS_MESSAGE": "A fordítás folyamatban van. A bejegyzés elkészülés után piszkozatként fog megjelenni.", + "ERROR_MESSAGE": "Nem sikerült elindítani a fordítást. Kérlek, próbáld újra." } }, "BULK_ACTIONS": { "PUBLISH": "Publikálás", "DRAFT": "Vázlat", - "ARCHIVE": "Archive", + "ARCHIVE": "Archiválás", "TRANSLATE": "Fordítás", + "MOVE_TO_CATEGORY": "Kategória", "DELETE": "Törlés", - "STATUS_SUCCESS": "Articles updated successfully", - "STATUS_ERROR": "Failed to update articles", - "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", - "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", + "STATUS_SUCCESS": "A bejegyzések sikeresen frissítve", + "STATUS_ERROR": "Nem sikerült frissíteni a bejegyzéseket", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", + "DELETE_CONFIRM_TITLE": "Bejegyzés törlése | {count} bejegyzés törlése", + "DELETE_CONFIRM_DESCRIPTION": "Ez véglegesen törli a kiválasztott bejegyzést. Ez a művelet nem vonható vissza. | Ez véglegesen törli a kijelölt {count} bejegyzést. Ez a művelet nem vonható vissza.", "DELETE_CONFIRM": "Törlés", - "DELETE_SUCCESS": "Articles deleted successfully", - "DELETE_ERROR": "Failed to delete articles" + "DELETE_SUCCESS": "A bejegyzések sikeresen törölve", + "DELETE_ERROR": "Nem sikerült törölni a bejegyzéseket" } }, "CATEGORY_PAGE": { @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Megjelenés", + "DESCRIPTION": "Válaszd ki az elrendezést, amely a legjobban megfelel a céljaidnak.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Klasszikus", + "DESCRIPTION": "Barátságos kezdőlap kereséssel és kiemelt témákkal." + }, + "SIDEBAR": { + "TITLE": "Dokumentáció", + "DESCRIPTION": "Egymás melletti navigáció, amely minden útmutatót egy kattintásnyira tart." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Közösségi hivatkozások", + "DESCRIPTION": "Add meg az egyes hálózatok felhasználónevét, és a súgóközpont elkészíti a teljes hivatkozást. A dokumentációs elrendezés láblécében jelenik meg.", + "PLACEHOLDER": "felhasználónév", + "ADD": "Közösségi hivatkozás hozzáadása", + "REMOVE": "Eltávolítás" + }, + "SAVE": "Módosítások mentése" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portál sikeresen létrehozva", diff --git a/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json index f24f9e40c..8f778b771 100644 --- a/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/hu/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Nem tudtuk elmenteni a WhatsApp csatornát" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "E-mail", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot konfiguráció", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Csevegés előtti űrlap beállításainak frissítése" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/hu/integrations.json b/app/javascript/dashboard/i18n/locale/hu/integrations.json index 36b4668fb..0750b809e 100644 --- a/app/javascript/dashboard/i18n/locale/hu/integrations.json +++ b/app/javascript/dashboard/i18n/locale/hu/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Kontakt létrehozva", "CONTACT_UPDATED": "Kontakt frissítve", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/hu/macros.json b/app/javascript/dashboard/i18n/locale/hu/macros.json index 04d1a9207..117061b66 100644 --- a/app/javascript/dashboard/i18n/locale/hu/macros.json +++ b/app/javascript/dashboard/i18n/locale/hu/macros.json @@ -71,7 +71,7 @@ "LABEL": "Nyilvános", "DESCRIPTION": "Ez a makró nyilvánosan elérhető minden ügynök számára ebben a fiókban.", "CREATE_DISABLED_DESCRIPTION": "Only administrators can create public macros.", - "EDIT_DISABLED_DESCRIPTION": "Only administrators can edit public macros." + "EDIT_DISABLED_DESCRIPTION": "Csak adminisztrátorok tudnak publikus makrókat szerkeszteni." }, "PERSONAL": { "LABEL": "Privát", diff --git a/app/javascript/dashboard/i18n/locale/hu/onboarding.json b/app/javascript/dashboard/i18n/locale/hu/onboarding.json index bb6f1fe68..1eff9d57e 100644 --- a/app/javascript/dashboard/i18n/locale/hu/onboarding.json +++ b/app/javascript/dashboard/i18n/locale/hu/onboarding.json @@ -1,34 +1,34 @@ { "ONBOARDING_NEXT": { - "GREETING": "Hello {name}!", - "SUBTITLE": "Please review the following details", - "YOUR_DETAILS": "Your details", - "COMPANY_DETAILS": "Company details", + "GREETING": "Szia {name}!", + "SUBTITLE": "Ellenőrizd az alábbi adatokat", + "YOUR_DETAILS": "Adataid", + "COMPANY_DETAILS": "Cégadatok", "FIELDS": { "EMAIL": "E-mail", - "YOUR_ROLE": "Your Role", + "YOUR_ROLE": "Szerepköröd", "WEBSITE": "Honlap", "LANGUAGE": "Nyelv", "TIMEZONE": "Időzóna", - "COMPANY_SIZE": "Company Size", - "INDUSTRY": "Industry", - "REFERRAL_SOURCE": "Where did you find us?" + "COMPANY_SIZE": "Cégméret", + "INDUSTRY": "Iparág", + "REFERRAL_SOURCE": "Hol találtál ránk?" }, "PLACEHOLDERS": { - "SELECT_ROLE": "Select your role", + "SELECT_ROLE": "Válassz szerepkört", "ENTER_WEBSITE": "www.example.com", - "SELECT_LANGUAGE": "Select language", + "SELECT_LANGUAGE": "Válassz nyelvet", "SELECT_TIMEZONE": "Időzóna kiválasztása", - "SELECT_COMPANY_SIZE": "Select company size", - "SELECT_INDUSTRY": "Select industry", - "SELECT_REFERRAL_SOURCE": "Select source" + "SELECT_COMPANY_SIZE": "Válassz cégméretet", + "SELECT_INDUSTRY": "Válassz iparágat", + "SELECT_REFERRAL_SOURCE": "Válassz forrást" }, - "EMAIL_VERIFIED": "Email verified", - "SETTING_UP": "Setting up your account...", - "CONTINUE": "Continue", + "EMAIL_VERIFIED": "E-mail cím megerősítve", + "SETTING_UP": "A fiókod beállítása...", + "CONTINUE": "Folytatás", "SAVING": "Mentés...", - "VALIDATION_ERROR": "Please fill in all required fields", - "SUCCESS": "Details saved successfully", - "ERROR": "Could not save details. Please try again." + "VALIDATION_ERROR": "Töltsd ki az összes kötelező mezőt", + "SUCCESS": "Az adatok sikeresen mentve", + "ERROR": "Nem sikerült menteni az adatokat. Próbáld újra." } } diff --git a/app/javascript/dashboard/i18n/locale/hy/bulkActions.json b/app/javascript/dashboard/i18n/locale/hy/bulkActions.json index bfed485ca..c6f9648a3 100644 --- a/app/javascript/dashboard/i18n/locale/hy/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/hy/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "Չկա", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select team", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/hy/campaign.json b/app/javascript/dashboard/i18n/locale/hy/campaign.json index 10366e79e..4b15adb0b 100644 --- a/app/javascript/dashboard/i18n/locale/hy/campaign.json +++ b/app/javascript/dashboard/i18n/locale/hy/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Ընթացքի մեջ է", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Ընթացքի մեջ է", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/hy/components.json b/app/javascript/dashboard/i18n/locale/hy/components.json index a75d35b08..3ee865a89 100644 --- a/app/javascript/dashboard/i18n/locale/hy/components.json +++ b/app/javascript/dashboard/i18n/locale/hy/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/hy/contact.json b/app/javascript/dashboard/i18n/locale/hy/contact.json index 5770e6ffd..702b355eb 100644 --- a/app/javascript/dashboard/i18n/locale/hy/contact.json +++ b/app/javascript/dashboard/i18n/locale/hy/contact.json @@ -20,6 +20,8 @@ "CALL": "Զանգ", "CALL_INITIATED": "Զանգը սկսվում է…", "CALL_FAILED": "Չհաջողվեց սկսել զանգը։ Խնդրում ենք փորձել կրկին։", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Ընտրեք ձայնային մուտքագրման արկղը" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Նշումներ նշանակել", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Նշումները հաջողությամբ նշանակվեցին։", "ASSIGN_LABELS_FAILED": "Հնարավոր չեղավ նշանակել պիտակները", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "Դեռ պիտակներ չկան։", "SELECTED_COUNT": "{count} ընտրված", diff --git a/app/javascript/dashboard/i18n/locale/hy/conversation.json b/app/javascript/dashboard/i18n/locale/hy/conversation.json index ca2494dc6..e4f4b6f43 100644 --- a/app/javascript/dashboard/i18n/locale/hy/conversation.json +++ b/app/javascript/dashboard/i18n/locale/hy/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Հաղորդագրությունը հաջողությամբ ջնջվեց", "FAIL_DELETE_MESSSAGE": "Չհաջողվեց ջնջել հաղորդագրությունը։ Փորձեք կրկին", "NO_RESPONSE": "Պատասխան չկա", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Փակել", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Հետաձգված է մինչև վաղը", "SNOOZED_UNTIL_NEXT_WEEK": "Հետաձգված է մինչև հաջորդ շաբաթ", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Քաշեք և գցեք այստեղ կցելու համար", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/hy/helpCenter.json b/app/javascript/dashboard/i18n/locale/hy/helpCenter.json index 080b0abe7..648634a48 100644 --- a/app/javascript/dashboard/i18n/locale/hy/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/hy/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Սևագիր", "ARCHIVE": "Արխիվ", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Delete", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Delete", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Խմբագրել կազմաձևը" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Հեռացնել" + }, + "SAVE": "Պահպանել փոփոխությունները" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Պորտալը հաջողությամբ ստեղծվեց", diff --git a/app/javascript/dashboard/i18n/locale/hy/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/hy/inboxMgmt.json index 8acc1b540..71169f92c 100644 --- a/app/javascript/dashboard/i18n/locale/hy/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/hy/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Վավերացում Meta-ի հետ", "WAITING_FOR_BUSINESS_INFO": "Խնդրում ենք լրացնել բիզնեսի կարգավորումը Meta պատուհանում...", "PROCESSING": "Ձեր WhatsApp Business հաշվի կարգավորումը", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Բեռնում է Facebook SDK-ն...", "CANCELLED": "WhatsApp գրանցումը չեղարկվեց", "SUCCESS_TITLE": "WhatsApp Business հաշիվը միացված է։", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Հաստատումը չի ավարտվել։ Խնդրում ենք սկսել գործընթացը նորից։", "SUCCESS_FALLBACK": "WhatsApp Business հաշիվը հաջողությամբ կարգավորվել է", "MANUAL_FALLBACK": "Եթե ձեր համարը արդեն միացված է WhatsApp Business Platform (API)-ին, կամ եթե դուք տեխնոլոգիական մատակարար եք, որը միացնում է իր սեփական համարը, խնդրում ենք օգտագործել {link} ընթացքը", - "MANUAL_LINK_TEXT": "ձեռնարկային կարգավորման ընթացք" + "MANUAL_LINK_TEXT": "ձեռնարկային կարգավորման ընթացք", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Չհաջողվեց պահպանել WhatsApp ալիքը" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Աջակցեք ձեր հաճախորդներին WhatsApp-ում" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Էլ. փոստ", "DESCRIPTION": "Կապվեք Gmail-ի, Outlook-ի կամ այլ մատակարարների հետ" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Բոտի կարգավորումներ", "ACCOUNT_HEALTH": "Հաշվի առողջություն", "CSAT": "CSAT", - "VOICE": "Ձայն" + "VOICE": "Ձայն", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Անվճարների նախապատվություններ", "WIDGET_FEATURES": "Վիջեթի հնարավորություններ", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Ձեռնարկաբար համաժամեցրեք հաղորդագրությունների տիպերը WhatsApp-ից՝ ձեր հասանելի տիպերը թարմացնելու համար։", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Համաժամեցնել տիպերը", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Տիպերի համաժամացումը հաջողությամբ սկսվեց։ Թարմացումը կարող է տևել մի քանի րոպե։", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Թարմացնել նախազրույցի ձևի կարգավորումները" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/hy/integrations.json b/app/javascript/dashboard/i18n/locale/hy/integrations.json index cb5e74f53..0dc4b0570 100644 --- a/app/javascript/dashboard/i18n/locale/hy/integrations.json +++ b/app/javascript/dashboard/i18n/locale/hy/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Կոնտակտ ստեղծվեց", "CONTACT_UPDATED": "Կոնտակտը թարմացվեց", "CONVERSATION_TYPING_ON": "Զրույցի տպագրություն ակտիվ է", - "CONVERSATION_TYPING_OFF": "Զրույցի տպագրություն անջատված է" + "CONVERSATION_TYPING_OFF": "Զրույցի տպագրություն անջատված է", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/id/bulkActions.json b/app/javascript/dashboard/i18n/locale/id/bulkActions.json index 3d3ec9b10..7e7a9ab77 100644 --- a/app/javascript/dashboard/i18n/locale/id/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/id/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} percakapan dipilih", - "AGENT_SELECT_LABEL": "Pilih Agen", - "ASSIGN_CONFIRMATION_LABEL": "Apakah Anda yakin ingin menugaskan {conversationCount} {conversationLabel} kepada", - "UNASSIGN_CONFIRMATION_LABEL": "Apakah Anda yakin ingin melepaskan penugasan dari {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Kembali", - "ASSIGN_LABEL": "Tugaskan", "NONE": "Tidak ada", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Percakapan berhasil diselesaikan.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Percakapan yang terlihat di halaman ini hanya yang dipilih.", - "AGENT_LIST_LOADING": "Sedang memuat agen", "UPDATE": { "CHANGE_STATUS": "Ubah status", "SNOOZE_UNTIL": "Tunda", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "Tidak ada label", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Tugaskan label terpilih", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Label berhasil ditugaskan.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Pilih tim", "NONE": "Tidak ada", - "NO_TEAMS_AVAILABLE": "Belum ada tim yang ditambahkan ke akun ini.", - "ASSIGN_SELECTED_TEAMS": "Tugaskan tim terpilih.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/id/campaign.json b/app/javascript/dashboard/i18n/locale/id/campaign.json index bae264a62..6faebd197 100644 --- a/app/javascript/dashboard/i18n/locale/id/campaign.json +++ b/app/javascript/dashboard/i18n/locale/id/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Selesai", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Selesai", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/id/components.json b/app/javascript/dashboard/i18n/locale/id/components.json index e3c2a8b39..8c5e64738 100644 --- a/app/javascript/dashboard/i18n/locale/id/components.json +++ b/app/javascript/dashboard/i18n/locale/id/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/id/contact.json b/app/javascript/dashboard/i18n/locale/id/contact.json index 9733708b8..e95a529b0 100644 --- a/app/javascript/dashboard/i18n/locale/id/contact.json +++ b/app/javascript/dashboard/i18n/locale/id/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Tugaskan Label", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Label berhasil ditugaskan.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/id/conversation.json b/app/javascript/dashboard/i18n/locale/id/conversation.json index 8b37405e9..e69d656da 100644 --- a/app/javascript/dashboard/i18n/locale/id/conversation.json +++ b/app/javascript/dashboard/i18n/locale/id/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Pesan berhasil dihapus", "FAIL_DELETE_MESSSAGE": "Tidak dapat menghapus pesan! Coba lagi", "NO_RESPONSE": "Tidak ada respon", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Menyelesaikan", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Ditunda hingga besok", "SNOOZED_UNTIL_NEXT_WEEK": "Ditunda hingga minggu depan", "SNOOZED_UNTIL_NEXT_REPLY": "Ditunda hingga balasan selanjutnya", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Rekam audio", "TIP_AUDIORECORDER_PERMISSION": "Izinkan akses ke audio", "TIP_AUDIORECORDER_ERROR": "Tidak dapat membuka audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Seret dan letakkan di sini untuk melampirkan", "START_AUDIO_RECORDING": "Mulai merekam audio", "STOP_AUDIO_RECORDING": "Berhenti merekam audio", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Tutup", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/id/helpCenter.json b/app/javascript/dashboard/i18n/locale/id/helpCenter.json index 212d8ddf2..827bfe632 100644 --- a/app/javascript/dashboard/i18n/locale/id/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/id/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Draf", "ARCHIVE": "Archive", "TRANSLATE": "Terjemahkan", + "MOVE_TO_CATEGORY": "Kategori", "DELETE": "Hapus", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Hapus", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Hapus" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal berhasil dibuat", diff --git a/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json index fd8a173ee..e0929b473 100644 --- a/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/id/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Kami tidak dapat menyimpan saluran WhatsApp" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Konfigurasi Bot", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Perbarui Pengaturan Formulir Pra Obrolan" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/id/integrations.json b/app/javascript/dashboard/i18n/locale/id/integrations.json index 97b48856f..0d12f77a0 100644 --- a/app/javascript/dashboard/i18n/locale/id/integrations.json +++ b/app/javascript/dashboard/i18n/locale/id/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Kontak dibuat", "CONTACT_UPDATED": "Kontak diperbarui", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/is/bulkActions.json b/app/javascript/dashboard/i18n/locale/is/bulkActions.json index 5d63efd82..08eeaf66e 100644 --- a/app/javascript/dashboard/i18n/locale/is/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/is/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} samtöl valin", - "AGENT_SELECT_LABEL": "Velja þjónustufulltrúa", - "ASSIGN_CONFIRMATION_LABEL": "Ertu viss um að úthluta {conversationCount} {conversationLabel} á", - "UNASSIGN_CONFIRMATION_LABEL": "Ertu viss um að hætta við úthlutun {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Úthluta", "NONE": "Enginn", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Samtöl sem sjást á þessari síðu eru aðeins valin.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "Engar merkingar fundust", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Velja teymi", "NONE": "Enginn", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/is/campaign.json b/app/javascript/dashboard/i18n/locale/is/campaign.json index 0b3d92de4..9e12d7d4c 100644 --- a/app/javascript/dashboard/i18n/locale/is/campaign.json +++ b/app/javascript/dashboard/i18n/locale/is/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/is/components.json b/app/javascript/dashboard/i18n/locale/is/components.json index 1a4ab4455..d610aba4a 100644 --- a/app/javascript/dashboard/i18n/locale/is/components.json +++ b/app/javascript/dashboard/i18n/locale/is/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/is/contact.json b/app/javascript/dashboard/i18n/locale/is/contact.json index d730278a9..cd92ed805 100644 --- a/app/javascript/dashboard/i18n/locale/is/contact.json +++ b/app/javascript/dashboard/i18n/locale/is/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/is/conversation.json b/app/javascript/dashboard/i18n/locale/is/conversation.json index 7d778ad84..3c99a01b6 100644 --- a/app/javascript/dashboard/i18n/locale/is/conversation.json +++ b/app/javascript/dashboard/i18n/locale/is/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Skilaboðum eytt", "FAIL_DELETE_MESSSAGE": "Gat ekki eytt skilaboðum! Reynið aftur", "NO_RESPONSE": "Ekkert svar", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Resolve", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Taka upp hljóð", "TIP_AUDIORECORDER_PERMISSION": "Leyfa aðgang að hljóði", "TIP_AUDIORECORDER_ERROR": "Tókst ekki að opna hljóðið", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Dragðu og slepptu viðhenginu hingað", "START_AUDIO_RECORDING": "Hefja hljóðupptöku", "STOP_AUDIO_RECORDING": "Stoppa hljóðupptöku", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/is/helpCenter.json b/app/javascript/dashboard/i18n/locale/is/helpCenter.json index 5af9550e1..88f7830c5 100644 --- a/app/javascript/dashboard/i18n/locale/is/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/is/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Draft", "ARCHIVE": "Archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Eyða", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Eyða", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Fjarlægja" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal created successfully", diff --git a/app/javascript/dashboard/i18n/locale/is/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/is/inboxMgmt.json index be71aea86..11a47f468 100644 --- a/app/javascript/dashboard/i18n/locale/is/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/is/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Við gátum ekki vistað WhatsApp rásina" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Tölvupóstfang", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot stillingar", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/is/integrations.json b/app/javascript/dashboard/i18n/locale/is/integrations.json index 2d4b9bf16..23a65ea4a 100644 --- a/app/javascript/dashboard/i18n/locale/is/integrations.json +++ b/app/javascript/dashboard/i18n/locale/is/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact created", "CONTACT_UPDATED": "Contact updated", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/it/bulkActions.json b/app/javascript/dashboard/i18n/locale/it/bulkActions.json index ab3f73690..0399afad0 100644 --- a/app/javascript/dashboard/i18n/locale/it/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/it/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversazioni selezionate", - "AGENT_SELECT_LABEL": "Seleziona un operatore", - "ASSIGN_CONFIRMATION_LABEL": "Sei sicuro di voler assegnare {conversationCount} {conversationLabel} a", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Torna indietro", - "ASSIGN_LABEL": "Assegna", "NONE": "Nessuno", "CLEAR_SELECTION": "Rimuovi", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Sei sicuro di voler assegnare {n} conversazione a {agentName}? | Sei sicuro di voler assegnare {n} conversazioni a {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversazioni risolte correttamente.", "RESOLVE_FAILED": "Impossibile risolvere le conversazioni. Riprova.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Solo le conversazioni visibili in questa pagina sono selezionate.", - "AGENT_LIST_LOADING": "Caricamento operatori", "UPDATE": { "CHANGE_STATUS": "Cambia stato", "SNOOZE_UNTIL": "Posticipa", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assegna etichette", - "NO_LABELS_FOUND": "Nessuna etichetta trovata", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assegna etichette selezeionate", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Etichette assegnate correttamente.", - "ASSIGN_FAILED": "Impossibile assegnare le etichette. Riprova." + "ASSIGN_FAILED": "Impossibile assegnare le etichette. Riprova.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Seleziona team", "NONE": "Nessuno", - "NO_TEAMS_AVAILABLE": "Non ci sono ancora team aggiunti a questo account.", - "ASSIGN_SELECTED_TEAMS": "Assegna team selezionato.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Sei sicuro di voler assegnare {n} conversazione a {teamName}? | Sei sicuro di voler assegnare {n} conversazioni a {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Sei sicuro di voler disassegnare {n} conversazione? | Sei sicuro di voler disassegnare {n} conversazioni?", "ASSIGN_SUCCESFUL": "Team assegnati con successo.", diff --git a/app/javascript/dashboard/i18n/locale/it/campaign.json b/app/javascript/dashboard/i18n/locale/it/campaign.json index 9831fe823..0b42e5b73 100644 --- a/app/javascript/dashboard/i18n/locale/it/campaign.json +++ b/app/javascript/dashboard/i18n/locale/it/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Elaborazione", "COMPLETED": "Completata", "SCHEDULED": "Programmata" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Elaborazione", "COMPLETED": "Completata", "SCHEDULED": "Programmata" }, diff --git a/app/javascript/dashboard/i18n/locale/it/components.json b/app/javascript/dashboard/i18n/locale/it/components.json index e44c5b92c..bb2aafe5e 100644 --- a/app/javascript/dashboard/i18n/locale/it/components.json +++ b/app/javascript/dashboard/i18n/locale/it/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/it/contact.json b/app/javascript/dashboard/i18n/locale/it/contact.json index a5fc3aaa3..504b8e877 100644 --- a/app/javascript/dashboard/i18n/locale/it/contact.json +++ b/app/javascript/dashboard/i18n/locale/it/contact.json @@ -20,6 +20,8 @@ "CALL": "Chiama", "CALL_INITIATED": "Chiamando il contatto…", "CALL_FAILED": "Impossibile avviare la chiamata. Riprova.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Clicca per modificare", "VOICE_INBOX_PICKER": { "TITLE": "Scegli una inbox vocale" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assegna Etichette", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Etichette assegnate correttamente.", "ASSIGN_LABELS_FAILED": "Assegnazione delle etichette non riuscita", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Selezionare le etichette da aggiungere ai contatti selezionati.", "NO_LABELS_FOUND": "Nessuna etichetta disponibile.", "SELECTED_COUNT": "{count} selezionate", diff --git a/app/javascript/dashboard/i18n/locale/it/conversation.json b/app/javascript/dashboard/i18n/locale/it/conversation.json index e725f37b1..663e1e902 100644 --- a/app/javascript/dashboard/i18n/locale/it/conversation.json +++ b/app/javascript/dashboard/i18n/locale/it/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "Questo messaggio non è supportato. Puoi visualizzare questo messaggio sull'app Facebook Messenger.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "Questo messaggio non è supportato. Puoi visualizzare questo messaggio sull'app Instagram.", "UNSUPPORTED_MESSAGE_TIKTOK": "Questo messaggio non è supportato. Puoi visualizzare questo messaggio sull'app TikTok.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Messaggio eliminato con successo", "FAIL_DELETE_MESSSAGE": "Impossibile eliminare il messaggio! Riprova", "NO_RESPONSE": "Nessuna risposta", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Chiamata in uscita", "CALL_IN_PROGRESS": "Chiamata in corso", "NO_ANSWER": "Nessuna risposta", + "NO_ANSWER_OUTBOUND_LABEL": "Nessuna risposta", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Chiamata persa", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Chiamata terminata", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Non ancora risposta", + "CALLING": "Calling…", "THEY_ANSWERED": "Hanno risposto", "YOU_ANSWERED": "Hai risposto", "AGENT_ANSWERED": "{agentName} ha risposto", - "JOIN_CALL": "Entra nella chiamata" + "JOIN_CALL": "Entra nella chiamata", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Mostra meno" }, "HEADER": { "RESOLVE_ACTION": "Risolvi", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Posticipata fino a domani", "SNOOZED_UNTIL_NEXT_WEEK": "Posticipata fino alla prossima settimana", "SNOOZED_UNTIL_NEXT_REPLY": "Posticipata fino alla prossima risposta", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Registra audio", "TIP_AUDIORECORDER_PERMISSION": "Consenti l'accesso all'audio", "TIP_AUDIORECORDER_ERROR": "Impossibile aprire l'audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Trascina qui per allegare", "START_AUDIO_RECORDING": "Avvia registrazione audio", "STOP_AUDIO_RECORDING": "Interrompi registrazione audio", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Non ancora risposta", "HANDLED_IN_ANOTHER_TAB": "Gestita in un'altra scheda", "REJECT_CALL": "Rifiuta", + "DISMISS_CALL": "Ignora", "JOIN_CALL": "Entra nella chiamata", - "END_CALL": "Termina chiamata" + "END_CALL": "Termina chiamata", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/it/helpCenter.json b/app/javascript/dashboard/i18n/locale/it/helpCenter.json index 71fcfe9f8..e2ebb85d5 100644 --- a/app/javascript/dashboard/i18n/locale/it/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/it/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Bozza", "ARCHIVE": "Archivia", "TRANSLATE": "Traduci", + "MOVE_TO_CATEGORY": "Categoria", "DELETE": "Elimina", "STATUS_SUCCESS": "Articoli aggiornati correttamente", "STATUS_ERROR": "Impossibile aggiornare gli articoli", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Elimina articolo | Elimina {count} articoli", "DELETE_CONFIRM_DESCRIPTION": "Questo eliminerà definitivamente l'articolo selezionato. Questa azione non può essere annullata. | Questo eliminerà definitivamente {count} articoli selezionati. Questa azione non può essere annullata.", "DELETE_CONFIRM": "Elimina", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Modifica configurazione" }, + "LAYOUT_CONTENT": { + "HEADER": "Aspetto", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Rimuovi" + }, + "SAVE": "Salva modifiche" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portale creato con successo", diff --git a/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json index ea13b8328..cbe0960a3 100644 --- a/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/it/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Autenticazione con Meta", "WAITING_FOR_BUSINESS_INFO": "Completa la configurazione aziendale nella finestra Meta...", "PROCESSING": "Configurazione del tuo account WhatsApp Business", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Caricamento del Facebook SDK...", "CANCELLED": "Registrazione WhatsApp annullata", "SUCCESS_TITLE": "Account WhatsApp Business connesso!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Autenticazione non completata. Riavvia il processo.", "SUCCESS_FALLBACK": "Account WhatsApp Business è stato configurato con successo", "MANUAL_FALLBACK": "Se il tuo numero è già connesso alla WhatsApp Business Platform (API), o se sei un provider tecnologico, si prega di utilizzare il {link}", - "MANUAL_LINK_TEXT": "flow di registrazione manuale" + "MANUAL_LINK_TEXT": "flow di registrazione manuale", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Impossibile salvare il canale WhatsApp" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Supporta i tuoi clienti su WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "Chiamata WhatsApp", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "Connettiti con Gmail, Outlook, o altri provider" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Configurazione Bot", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voce" + "VOICE": "Voce", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Le chiamate vocali richiedono credenziali API di Twilio. Queste vengono usate per generare token per le connessioni voce." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "Vorremmo chiamarti riguardo alla tua conversazione." + } + }, "CHANNEL_PREFERENCES": "Preferenze Canali", "WIDGET_FEATURES": "Funzionalità Widget", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Sincronizza manualmente i modelli di messaggi da WhatsApp per aggiornare i modelli disponibili.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sincronizza Modelli", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Sincronizzazione modelli iniziata. Potrebbe volerci qualche minuto per aggiornare.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Aggiorna le Impostazioni del Modulo Pre Chat" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/it/integrations.json b/app/javascript/dashboard/i18n/locale/it/integrations.json index 6bf686914..96f6bd0c0 100644 --- a/app/javascript/dashboard/i18n/locale/it/integrations.json +++ b/app/javascript/dashboard/i18n/locale/it/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contatto creato", "CONTACT_UPDATED": "Contatto aggiornato", "CONVERSATION_TYPING_ON": "Digitazione conversazione attiva", - "CONVERSATION_TYPING_OFF": "Digitazione conversazione disattiva" + "CONVERSATION_TYPING_OFF": "Digitazione conversazione disattiva", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/ja/bulkActions.json b/app/javascript/dashboard/i18n/locale/ja/bulkActions.json index ccba7d563..942b5d298 100644 --- a/app/javascript/dashboard/i18n/locale/ja/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/ja/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} 件の会話が選択されました", - "AGENT_SELECT_LABEL": "担当者を選択", - "ASSIGN_CONFIRMATION_LABEL": "{conversationCount} 件の{conversationLabel}を割り当てますか?", - "UNASSIGN_CONFIRMATION_LABEL": "{conversationCount} 件の{conversationLabel}の割り当てを解除しますか?", - "GO_BACK_LABEL": "戻る", - "ASSIGN_LABEL": "割り当て", "NONE": "なし", "CLEAR_SELECTION": "クリア", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "会話が正常に解決されました。", "RESOLVE_FAILED": "会話の解決に失敗しました。再試行してください。", "ALL_CONVERSATIONS_SELECTED_ALERT": "このページに表示されている会話のみが選択されています。", - "AGENT_LIST_LOADING": "担当者を読み込み中", "UPDATE": { "CHANGE_STATUS": "ステータスを変更", "SNOOZE_UNTIL": "スヌーズ", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "ラベルを割り当てる", - "NO_LABELS_FOUND": "ラベルが見つかりません", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "選択したラベルを割り当てる", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "ラベルが正常に割り当てられました。", - "ASSIGN_FAILED": "ラベルの割り当てに失敗しました。再試行してください。" + "ASSIGN_FAILED": "ラベルの割り当てに失敗しました。再試行してください。", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "チームを選択", "NONE": "該当なし", - "NO_TEAMS_AVAILABLE": "このアカウントにはまだチームが追加されていません。", - "ASSIGN_SELECTED_TEAMS": "選択したチームを割り当てる", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "チームが正常に割り当てられました。", diff --git a/app/javascript/dashboard/i18n/locale/ja/campaign.json b/app/javascript/dashboard/i18n/locale/ja/campaign.json index 608e66664..3bedca6ba 100644 --- a/app/javascript/dashboard/i18n/locale/ja/campaign.json +++ b/app/javascript/dashboard/i18n/locale/ja/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "完了", "SCHEDULED": "スケジュール済み" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "完了", "SCHEDULED": "スケジュール済み" }, diff --git a/app/javascript/dashboard/i18n/locale/ja/components.json b/app/javascript/dashboard/i18n/locale/ja/components.json index 4b7f15413..b6b732e87 100644 --- a/app/javascript/dashboard/i18n/locale/ja/components.json +++ b/app/javascript/dashboard/i18n/locale/ja/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/ja/contact.json b/app/javascript/dashboard/i18n/locale/ja/contact.json index c206cd3b9..763edb81b 100644 --- a/app/javascript/dashboard/i18n/locale/ja/contact.json +++ b/app/javascript/dashboard/i18n/locale/ja/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "ラベルが正常に割り当てられました。", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/ja/conversation.json b/app/javascript/dashboard/i18n/locale/ja/conversation.json index c8c585b2e..793f00cc8 100644 --- a/app/javascript/dashboard/i18n/locale/ja/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ja/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "このメッセージはサポートされていません。Facebook Messengerでこのメッセージを表示できます。", "UNSUPPORTED_MESSAGE_INSTAGRAM": "このメッセージはサポートされていません。このメッセージは Instagram で表示できます。", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "メッセージの削除に成功", "FAIL_DELETE_MESSSAGE": "メッセージを削除できませんでした!もう一度お試しください", "NO_RESPONSE": "返信なし", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "解決する", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "明日までスヌーズしました", "SNOOZED_UNTIL_NEXT_WEEK": "来週までスヌーズ", "SNOOZED_UNTIL_NEXT_REPLY": "次の返信までうたた寝。", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "音声を録音", "TIP_AUDIORECORDER_PERMISSION": "音声アクセスを許可", "TIP_AUDIORECORDER_ERROR": "音声を開けませんでした", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "添付するにはここにドラッグ&ドロップ", "START_AUDIO_RECORDING": "音声録音を開始", "STOP_AUDIO_RECORDING": "音声録音を停止", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "閉じる", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/ja/helpCenter.json b/app/javascript/dashboard/i18n/locale/ja/helpCenter.json index 9f3cf0fc4..0ef035f64 100644 --- a/app/javascript/dashboard/i18n/locale/ja/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ja/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "下書き", "ARCHIVE": "アーカイブ", "TRANSLATE": "翻訳", + "MOVE_TO_CATEGORY": "カテゴリ", "DELETE": "削除", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "削除", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "設定を編集" }, + "LAYOUT_CONTENT": { + "HEADER": "外観", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "削除" + }, + "SAVE": "変更を保存" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "ポータルが正常に作成されました", diff --git a/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json index 5ae18a793..34834bf90 100644 --- a/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ja/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "WhatsAppチャンネルを保存できませんでした" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Eメール", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "ボット設定", "ACCOUNT_HEALTH": "Account Health", "CSAT": "顧客満足度", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "プレチャットフォーム設定を更新する" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/ja/integrations.json b/app/javascript/dashboard/i18n/locale/ja/integrations.json index 4074a8d5a..27a67a84b 100644 --- a/app/javascript/dashboard/i18n/locale/ja/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ja/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "連絡先が作成されました", "CONTACT_UPDATED": "連絡先が更新されました", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/ka/bulkActions.json b/app/javascript/dashboard/i18n/locale/ka/bulkActions.json index 2472a9288..6b922bc7b 100644 --- a/app/javascript/dashboard/i18n/locale/ka/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/ka/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "None", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select team", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/ka/campaign.json b/app/javascript/dashboard/i18n/locale/ka/campaign.json index 10366e79e..4977afe06 100644 --- a/app/javascript/dashboard/i18n/locale/ka/campaign.json +++ b/app/javascript/dashboard/i18n/locale/ka/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "მუშავდება", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "მუშავდება", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/ka/components.json b/app/javascript/dashboard/i18n/locale/ka/components.json index a75d35b08..3ee865a89 100644 --- a/app/javascript/dashboard/i18n/locale/ka/components.json +++ b/app/javascript/dashboard/i18n/locale/ka/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/ka/contact.json b/app/javascript/dashboard/i18n/locale/ka/contact.json index 0f1af9ccf..6658c299f 100644 --- a/app/javascript/dashboard/i18n/locale/ka/contact.json +++ b/app/javascript/dashboard/i18n/locale/ka/contact.json @@ -20,6 +20,8 @@ "CALL": "დარეკვა", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "აირჩიეთ ხმოვანი საფოსტო ყუთი" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/ka/conversation.json b/app/javascript/dashboard/i18n/locale/ka/conversation.json index 6b699292e..fbb860750 100644 --- a/app/javascript/dashboard/i18n/locale/ka/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ka/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", "NO_RESPONSE": "No response", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "გამავალი ზარი", "CALL_IN_PROGRESS": "ზარი მიმდინარეობს", "NO_ANSWER": "პასუხი არ არის", + "NO_ANSWER_OUTBOUND_LABEL": "პასუხი არ არის", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "გამოტოვებული ზარი", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "ზარი დასრულდა", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "ჯერ არ უპასუხიათ", + "CALLING": "Calling…", "THEY_ANSWERED": "მათ უპასუხეს", "YOU_ANSWERED": "თქვენ უპასუხეთ", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Resolve", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Drag and drop here to attach", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "ჯერ არ უპასუხიათ", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/ka/helpCenter.json b/app/javascript/dashboard/i18n/locale/ka/helpCenter.json index c4797cdca..6b885b115 100644 --- a/app/javascript/dashboard/i18n/locale/ka/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ka/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "სავარაუდო", "ARCHIVE": "არქივი", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Delete", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Delete", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "კონფიგურაციის რედაქტირება" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "წაშლა" + }, + "SAVE": "ცვლილებების შენახვა" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "პორტალი წარმატებით შეიქმნა", diff --git a/app/javascript/dashboard/i18n/locale/ka/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ka/inboxMgmt.json index 00458729b..2aa0ad39e 100644 --- a/app/javascript/dashboard/i18n/locale/ka/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ka/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "ავტორიზაცია Meta-სთან", "WAITING_FOR_BUSINESS_INFO": "გთხოვთ დაასრულოთ ბიზნესის დაყენება Meta ფანჯარაში...", "PROCESSING": "თქვენი WhatsApp Business ანგარიშის დაყენება", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Facebook SDK-ის ჩატვირთვა...", "CANCELLED": "WhatsApp რეგისტრაცია გაუქმდა", "SUCCESS_TITLE": "WhatsApp ბიზნეს ანგარიში დაკავშირებულია!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "ავტორიზაცია არ დასრულებულა. გთხოვთ, დაიწყეთ პროცესი თავიდან.", "SUCCESS_FALLBACK": "WhatsApp Business ანგარიში წარმატებით კონფიგურირებულია", "MANUAL_FALLBACK": "თუ თქვენი ნომერი უკვე დაკავშირებულია WhatsApp Business Platform (API)-სთან, ან თუ თქვენ ტექნიკური მიმწოდებელი ხართ და საკუთარ ნომერს ამატებთ, გთხოვთ გამოიყენოთ {link} პროცესი", - "MANUAL_LINK_TEXT": "მანუალური დაყენების პროცესი" + "MANUAL_LINK_TEXT": "მანუალური დაყენების პროცესი", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "ვერ შევძელით WhatsApp არხის შენახვა" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "მხარდაჭერა თქვენი მომხმარებლებისთვის WhatsApp-ზე" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "დაკავშირება Gmail, Outlook ან სხვა მიმწოდებლებთან" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "ბოტის კონფიგურაცია", "ACCOUNT_HEALTH": "ანგარიშის ჯანმრთელობა", "CSAT": "CSAT", - "VOICE": "ხმოვანი" + "VOICE": "ხმოვანი", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "არხის პარამეტრები", "WIDGET_FEATURES": "ვიჯეტის ფუნქციები", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "ხელით სინქრონიზაცია WhatsApp-ისგან, რათა განაახლოთ ხელმისაწვდომი შაბლონები.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "შაბლონების სინქრონიზაცია", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "შაბლონების სინქრონიზაცია წარმატებით დაიწყო. განახლება შეიძლება რამდენიმე წუთი გაგრძელდეს.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "განაახლეთ წინასწარი ჩატის ფორმის პარამეტრები" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/ka/integrations.json b/app/javascript/dashboard/i18n/locale/ka/integrations.json index 74b2cdd83..78471d977 100644 --- a/app/javascript/dashboard/i18n/locale/ka/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ka/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "კონტაქტი შექმნილია", "CONTACT_UPDATED": "კონტაქტი განახლებულია", "CONVERSATION_TYPING_ON": "ჩეთის აკრეფის ჩართვა", - "CONVERSATION_TYPING_OFF": "ჩეთის აკრეფის გამორთვა" + "CONVERSATION_TYPING_OFF": "ჩეთის აკრეფის გამორთვა", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/ko/bulkActions.json b/app/javascript/dashboard/i18n/locale/ko/bulkActions.json index b72c87b86..84f61e22d 100644 --- a/app/javascript/dashboard/i18n/locale/ko/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/ko/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount}개의 대화가 선택되었습니다", - "AGENT_SELECT_LABEL": "에이전트 선택", - "ASSIGN_CONFIRMATION_LABEL": "{conversationCount}개의 {conversationLabel}을(를) 배정하시겠습니까?", - "UNASSIGN_CONFIRMATION_LABEL": "{conversationCount}개의 {conversationLabel} 배정을 해제하시겠습니까?", - "GO_BACK_LABEL": "뒤로 가기", - "ASSIGN_LABEL": "배정", "NONE": "없음", "CLEAR_SELECTION": "초기화", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "대화가 성공적으로 해결되었습니다.", "RESOLVE_FAILED": "대화 해결에 실패했습니다. 다시 시도하십시오.", "ALL_CONVERSATIONS_SELECTED_ALERT": "이 페이지에 표시된 대화만 선택되었습니다.", - "AGENT_LIST_LOADING": "에이전트 로딩 중", "UPDATE": { "CHANGE_STATUS": "상태 변경", "SNOOZE_UNTIL": "일시 중지", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "라벨 배정", - "NO_LABELS_FOUND": "라벨을 찾을 수 없습니다", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "선택한 라벨 배정", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "라벨이 성공적으로 배정되었습니다.", - "ASSIGN_FAILED": "라벨 배정에 실패했습니다. 다시 시도하십시오." + "ASSIGN_FAILED": "라벨 배정에 실패했습니다. 다시 시도하십시오.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "팀 선택", "NONE": "없음", - "NO_TEAMS_AVAILABLE": "이 계정에 추가된 팀이 없습니다.", - "ASSIGN_SELECTED_TEAMS": "선택한 팀 배정", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "팀이 성공적으로 배정되었습니다.", diff --git a/app/javascript/dashboard/i18n/locale/ko/campaign.json b/app/javascript/dashboard/i18n/locale/ko/campaign.json index f6680d01a..5ab9ebf83 100644 --- a/app/javascript/dashboard/i18n/locale/ko/campaign.json +++ b/app/javascript/dashboard/i18n/locale/ko/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "처리 중", "COMPLETED": "완료됨", "SCHEDULED": "예약됨" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "처리 중", "COMPLETED": "완료됨", "SCHEDULED": "예약됨" }, diff --git a/app/javascript/dashboard/i18n/locale/ko/components.json b/app/javascript/dashboard/i18n/locale/ko/components.json index d25d205fd..ebe221409 100644 --- a/app/javascript/dashboard/i18n/locale/ko/components.json +++ b/app/javascript/dashboard/i18n/locale/ko/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/ko/contact.json b/app/javascript/dashboard/i18n/locale/ko/contact.json index d4a9c8c27..aee9df6c3 100644 --- a/app/javascript/dashboard/i18n/locale/ko/contact.json +++ b/app/javascript/dashboard/i18n/locale/ko/contact.json @@ -20,6 +20,8 @@ "CALL": "통화", "CALL_INITIATED": "연락처에 전화 거는 중...", "CALL_FAILED": "통화를 시작할 수 없습니다. 다시 시도하십시오.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "음성 받은 메시지함 선택" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "라벨 배정", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "라벨이 성공적으로 배정되었습니다.", "ASSIGN_LABELS_FAILED": "라벨 배정에 실패했습니다", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "선택한 연락처에 추가할 라벨을 선택하십시오.", "NO_LABELS_FOUND": "사용 가능한 라벨이 없습니다.", "SELECTED_COUNT": "{count}개 선택됨", diff --git a/app/javascript/dashboard/i18n/locale/ko/conversation.json b/app/javascript/dashboard/i18n/locale/ko/conversation.json index 00ec0ed52..3f61ebf6c 100644 --- a/app/javascript/dashboard/i18n/locale/ko/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ko/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "이 메시지는 지원되지 않습니다. Facebook Messenger 앱에서 이 메시지를 확인할 수 있습니다.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "이 메시지는 지원되지 않습니다. Instagram 앱에서 이 메시지를 확인할 수 있습니다.", "UNSUPPORTED_MESSAGE_TIKTOK": "이 메시지는 지원되지 않습니다. TikTok 앱에서 이 메시지를 확인할 수 있습니다.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "메시지가 성공적으로 삭제되었습니다", "FAIL_DELETE_MESSSAGE": "메시지를 삭제할 수 없습니다! 다시 시도해 주십시오.", "NO_RESPONSE": "응답 없음", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "발신 전화", "CALL_IN_PROGRESS": "통화 중", "NO_ANSWER": "응답 없음", + "NO_ANSWER_OUTBOUND_LABEL": "응답 없음", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "부재중 전화", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "통화 종료", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "아직 응답하지 않았습니다", + "CALLING": "Calling…", "THEY_ANSWERED": "상대방이 응답했습니다", "YOU_ANSWERED": "귀하가 응답했습니다", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "통화 참가" + "JOIN_CALL": "통화 참가", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "해결함", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "내일까지 일시 중지", "SNOOZED_UNTIL_NEXT_WEEK": "다음 주까지 일시 중지", "SNOOZED_UNTIL_NEXT_REPLY": "다음 답장까지 일시 중지", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "오디오 녹음", "TIP_AUDIORECORDER_PERMISSION": "오디오 접근 허용", "TIP_AUDIORECORDER_ERROR": "오디오를 열 수 없습니다", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "여기에 드래그 앤 드롭하여 첨부하십시오", "START_AUDIO_RECORDING": "오디오 녹음 시작", "STOP_AUDIO_RECORDING": "오디오 녹음 중지", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "아직 응답하지 않았습니다", "HANDLED_IN_ANOTHER_TAB": "다른 탭에서 처리 중입니다", "REJECT_CALL": "거부", + "DISMISS_CALL": "닫기", "JOIN_CALL": "통화 참가", - "END_CALL": "통화 종료" + "END_CALL": "통화 종료", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/ko/helpCenter.json b/app/javascript/dashboard/i18n/locale/ko/helpCenter.json index 99b7ce3a2..3e2499f48 100644 --- a/app/javascript/dashboard/i18n/locale/ko/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ko/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "임시 저장", "ARCHIVE": "보관", "TRANSLATE": "번역", + "MOVE_TO_CATEGORY": "카테고리", "DELETE": "삭제", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "삭제", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "설정 수정" }, + "LAYOUT_CONTENT": { + "HEADER": "외관", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "제거" + }, + "SAVE": "변경사항 저장" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "포털이 성공적으로 생성되었습니다", diff --git a/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json index f0e5d3b7a..798ec0cc2 100644 --- a/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ko/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Meta로 인증 중", "WAITING_FOR_BUSINESS_INFO": "Meta 창에서 비즈니스 설정을 완료하십시오...", "PROCESSING": "WhatsApp Business 계정을 설정하는 중", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Facebook SDK를 로드하는 중...", "CANCELLED": "WhatsApp 가입이 취소되었습니다", "SUCCESS_TITLE": "WhatsApp Business 계정이 연결되었습니다!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "인증이 완료되지 않았습니다. 프로세스를 다시 시작하십시오.", "SUCCESS_FALLBACK": "WhatsApp Business 계정이 성공적으로 구성되었습니다", "MANUAL_FALLBACK": "번호가 이미 WhatsApp Business Platform (API)에 연결되어 있거나, 자체 번호를 온보딩하는 기술 공급자인 경우 {link}을 사용하십시오", - "MANUAL_LINK_TEXT": "수동 설정 플로우" + "MANUAL_LINK_TEXT": "수동 설정 플로우", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "WhatsApp 채널을 저장할 수 없습니다." @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "WhatsApp으로 고객 지원" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "이메일", "DESCRIPTION": "Gmail, Outlook 또는 기타 공급자와 연결" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "봇 구성", "ACCOUNT_HEALTH": "계정 상태", "CSAT": "CSAT", - "VOICE": "음성" + "VOICE": "음성", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "채널 환경설정", "WIDGET_FEATURES": "위젯 기능", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "WhatsApp에서 메시지 템플릿을 수동으로 동기화하여 사용 가능한 템플릿을 업데이트하십시오.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "템플릿 동기화", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "템플릿 동기화가 성공적으로 시작되었습니다. 업데이트되기까지 몇 분 정도 걸릴 수 있습니다.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "대화 전 설문 설정 업데이트" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/ko/integrations.json b/app/javascript/dashboard/i18n/locale/ko/integrations.json index 3bbbe0c01..03cae815a 100644 --- a/app/javascript/dashboard/i18n/locale/ko/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ko/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "연락처 생성됨", "CONTACT_UPDATED": "연락처 업데이트됨", "CONVERSATION_TYPING_ON": "대화 입력 중", - "CONVERSATION_TYPING_OFF": "대화 입력 중지" + "CONVERSATION_TYPING_OFF": "대화 입력 중지", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/lt/bulkActions.json b/app/javascript/dashboard/i18n/locale/lt/bulkActions.json index 058de8470..f901d9b4e 100644 --- a/app/javascript/dashboard/i18n/locale/lt/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/lt/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "Pasirinkta pokalbių: {conversationCount}", - "AGENT_SELECT_LABEL": "Pasirinkti agentą", - "ASSIGN_CONFIRMATION_LABEL": "Ar tikrai priskirsite {conversationCount} {conversationLabel}", - "UNASSIGN_CONFIRMATION_LABEL": "Ar tikrai atšauksite priskyrimą {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Grįžti", - "ASSIGN_LABEL": "Priskirti", "NONE": "Nėra", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Pokalbio išspręstas sėkmingai.", "RESOLVE_FAILED": "Nepavyko išspręsti pokalbių. Bandykite dar kartą.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Pasirinkti šiame puslapyje matomi pokalbiai.", - "AGENT_LIST_LOADING": "Agentai užkraunami", "UPDATE": { "CHANGE_STATUS": "Pakeisti būseną", "SNOOZE_UNTIL": "Atidėti", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Priskirti etiketes", - "NO_LABELS_FOUND": "Etikečių nerasta", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Priskirti pažymėtas etiketes", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Etiketės sėkmingai priskirtos.", - "ASSIGN_FAILED": "Nepavyko priskirti etikečių. Prašau, pabandykite dar kartą." + "ASSIGN_FAILED": "Nepavyko priskirti etikečių. Prašau, pabandykite dar kartą.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Pasirinkite komandą", "NONE": "Nėra", - "NO_TEAMS_AVAILABLE": "Šioje paskyroje nėra pridėtų komandų.", - "ASSIGN_SELECTED_TEAMS": "Priskirti pažymėtą komandą.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/lt/campaign.json b/app/javascript/dashboard/i18n/locale/lt/campaign.json index 5df017718..b0d0158ea 100644 --- a/app/javascript/dashboard/i18n/locale/lt/campaign.json +++ b/app/javascript/dashboard/i18n/locale/lt/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Užbaigta", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Užbaigta", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/lt/components.json b/app/javascript/dashboard/i18n/locale/lt/components.json index 9fbe67cba..ee0f021e6 100644 --- a/app/javascript/dashboard/i18n/locale/lt/components.json +++ b/app/javascript/dashboard/i18n/locale/lt/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/lt/contact.json b/app/javascript/dashboard/i18n/locale/lt/contact.json index 79c593828..0e1d8b2b9 100644 --- a/app/javascript/dashboard/i18n/locale/lt/contact.json +++ b/app/javascript/dashboard/i18n/locale/lt/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Skambinama kontaktui...", "CALL_FAILED": "Nepavyko pradėti skambučio. Bandykite dar kartą.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Priskirti etiketes", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Etiketės sėkmingai priskirtos.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/lt/conversation.json b/app/javascript/dashboard/i18n/locale/lt/conversation.json index 515597bd4..8ad1059c1 100644 --- a/app/javascript/dashboard/i18n/locale/lt/conversation.json +++ b/app/javascript/dashboard/i18n/locale/lt/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "Ši žinutė nepalaikoma. Jūs galite peržiūrėti šią žinutę Facebook Messenger programėlėje.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "Ši žinutė nepalaikoma. Jūs galite peržiūrėti šią žinutę Instagram programėlėje.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Pranešimas ištrintas sėkmingai", "FAIL_DELETE_MESSSAGE": "Nepavyko ištrinti pranešimo! Bandykite dar kartą", "NO_RESPONSE": "Nėra atsakymo", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Išspręsti", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Atidėta iki rytojaus", "SNOOZED_UNTIL_NEXT_WEEK": "Atidėta iki kitos savaitės", "SNOOZED_UNTIL_NEXT_REPLY": "Atidėta iki kito atsakymo", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Įrašyti audio", "TIP_AUDIORECORDER_PERMISSION": "Leisti prieiti prie audio", "TIP_AUDIORECORDER_ERROR": "Nepavyko atidaryti audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Norėdami pridėti, vilkite ir numeskite čia", "START_AUDIO_RECORDING": "Pradėti audio įrašymą", "STOP_AUDIO_RECORDING": "Baigti audio įrašymą", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Atsisakyti", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/lt/helpCenter.json b/app/javascript/dashboard/i18n/locale/lt/helpCenter.json index f777a14e5..8c3cadefd 100644 --- a/app/javascript/dashboard/i18n/locale/lt/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/lt/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Ruošinys", "ARCHIVE": "Archive", "TRANSLATE": "Išversti", + "MOVE_TO_CATEGORY": "Kategorija", "DELETE": "Ištrinti", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Ištrinti", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Išvaizda", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Pašalinti" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portalas sukurtas sėkmingai", diff --git a/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json index 80bacc325..a43cd2152 100644 --- a/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Mes negalėjome išsaugoti WhatsApp kanalo" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "El. paštas", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Boto konfiguracija", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Atnaujinkite išankstinio pokalbio internetu formos nustatymus" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/lt/integrations.json b/app/javascript/dashboard/i18n/locale/lt/integrations.json index ee9bd0a1b..96e53d997 100644 --- a/app/javascript/dashboard/i18n/locale/lt/integrations.json +++ b/app/javascript/dashboard/i18n/locale/lt/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Sukurtas kontaktas", "CONTACT_UPDATED": "Kontaktas atnaujintas", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/lv/bulkActions.json b/app/javascript/dashboard/i18n/locale/lv/bulkActions.json index 792648295..536d79877 100644 --- a/app/javascript/dashboard/i18n/locale/lv/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/lv/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "Izvēlētas {conversationCount} sarunas", - "AGENT_SELECT_LABEL": "Izvēlieties aģentu", - "ASSIGN_CONFIRMATION_LABEL": "Vai patiešām vēlaties piesaistīt {conversationCount} {conversationLabel} pie", - "UNASSIGN_CONFIRMATION_LABEL": "Vai patiešām vēlaties atsaistīt {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Atgriezties", - "ASSIGN_LABEL": "Piešķirt", "NONE": "Nav", "CLEAR_SELECTION": "Notīrīt", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Sarunas ir veiksmīgi atrisinātas.", "RESOLVE_FAILED": "Neizdevās atrisināt sarunas. Lūdzu mēģiniet vēlreiz.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Šajā lapā redzamās sarunas ir tikai izvēlētas.", - "AGENT_LIST_LOADING": "Notiek aģentu ielāde", "UPDATE": { "CHANGE_STATUS": "Mainīt statusu", "SNOOZE_UNTIL": "Atlikt", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Piešķirt etiķetes", - "NO_LABELS_FOUND": "Etiķetes nav atrastas", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Piešķirt izvēlētās etiķetes", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Etiķetes ir veiksmīgi piešķirtas.", - "ASSIGN_FAILED": "Neizdevās piešķirt etiķetes. Lūdzu mēģiniet vēlreiz." + "ASSIGN_FAILED": "Neizdevās piešķirt etiķetes. Lūdzu mēģiniet vēlreiz.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Izvēlieties komandu", "NONE": "Nav", - "NO_TEAMS_AVAILABLE": "Šim kontam vēl nav pievienota neviena komanda.", - "ASSIGN_SELECTED_TEAMS": "Piešķirt izvēlēto komandu.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Komandas ir veiksmīgi piešķirtas.", diff --git a/app/javascript/dashboard/i18n/locale/lv/campaign.json b/app/javascript/dashboard/i18n/locale/lv/campaign.json index ed0189250..e9cf6309b 100644 --- a/app/javascript/dashboard/i18n/locale/lv/campaign.json +++ b/app/javascript/dashboard/i18n/locale/lv/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Pabeigts", "SCHEDULED": "Plānots" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Pabeigts", "SCHEDULED": "Plānots" }, diff --git a/app/javascript/dashboard/i18n/locale/lv/components.json b/app/javascript/dashboard/i18n/locale/lv/components.json index 869838135..df6244948 100644 --- a/app/javascript/dashboard/i18n/locale/lv/components.json +++ b/app/javascript/dashboard/i18n/locale/lv/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/lv/contact.json b/app/javascript/dashboard/i18n/locale/lv/contact.json index 4c9e37cfe..07ff92143 100644 --- a/app/javascript/dashboard/i18n/locale/lv/contact.json +++ b/app/javascript/dashboard/i18n/locale/lv/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Piešķirt Etiķetes", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Etiķetes ir veiksmīgi piešķirtas.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "Atlasīti {count}", diff --git a/app/javascript/dashboard/i18n/locale/lv/conversation.json b/app/javascript/dashboard/i18n/locale/lv/conversation.json index 3998f71ac..8d1e4ed8e 100644 --- a/app/javascript/dashboard/i18n/locale/lv/conversation.json +++ b/app/javascript/dashboard/i18n/locale/lv/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "Šis ziņojums netiek atbalstīts. Šo ziņojumu Jūs varat apskatīt lietotnē Facebook Messenger.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "Šis ziņojums netiek atbalstīts. Šo ziņojumu Jūs varat apskatīt lietotnē Instagram.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Ziņojums veiksmīgi izdzēsts", "FAIL_DELETE_MESSSAGE": "Nevarēja izdzēst ziņojumu! Mēģiniet vēlreiz", "NO_RESPONSE": "Nav atbildes", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Atrisināt", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Atlikts līdz rītdienai", "SNOOZED_UNTIL_NEXT_WEEK": "Atlikts līdz nākamajai nedēļai", "SNOOZED_UNTIL_NEXT_REPLY": "Atlikts līdz nākamajai atbildei", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Ierakstīt audio", "TIP_AUDIORECORDER_PERMISSION": "Atļaut piekļuvi pie audio", "TIP_AUDIORECORDER_ERROR": "Nevarēja atvērt audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Velciet un nometiet šeit, lai pievienotu", "START_AUDIO_RECORDING": "Sākt audio ierakstīšanu", "STOP_AUDIO_RECORDING": "Apturēt audio ierakstīšanu", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Atcelt", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/lv/helpCenter.json b/app/javascript/dashboard/i18n/locale/lv/helpCenter.json index 97d06ab92..818994fd0 100644 --- a/app/javascript/dashboard/i18n/locale/lv/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/lv/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Melnraksts", "ARCHIVE": "Arhīvs", "TRANSLATE": "Tulkot", + "MOVE_TO_CATEGORY": "Kategorija", "DELETE": "Dzēst", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Dzēst", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Rediģēt konfigurāciju" }, + "LAYOUT_CONTENT": { + "HEADER": "Izskats", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Noņemt" + }, + "SAVE": "Saglabāt izmaiņas" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portāls ir veiksmīgi izveidots", diff --git a/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json index b3a5807e9..5eaa00103 100644 --- a/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Mēs nevarējām saglabāt WhatsApp kanālu" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "E-pasts", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Robota Konfigurācija", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Atjaunināt pirms-tērzēšanas veidlapas iestatījumus" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/lv/integrations.json b/app/javascript/dashboard/i18n/locale/lv/integrations.json index 64676ee3c..0ea682111 100644 --- a/app/javascript/dashboard/i18n/locale/lv/integrations.json +++ b/app/javascript/dashboard/i18n/locale/lv/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Kontaktpersona izveidota", "CONTACT_UPDATED": "Kontaktpersona atjaunināta", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/ml/bulkActions.json b/app/javascript/dashboard/i18n/locale/ml/bulkActions.json index 5dad22415..47c6c7a73 100644 --- a/app/javascript/dashboard/i18n/locale/ml/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/ml/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "ഏജന്റിനെ തിരഞ്ഞെടുക്കുക", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "നിയോഗിക്കുക", "NONE": "None", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "ലേബലുകളൊന്നും കണ്ടെത്തിയില്ല", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "ടീം തിരഞ്ഞെടുക്കുക", "NONE": "ഒന്നുമില്ല", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/ml/campaign.json b/app/javascript/dashboard/i18n/locale/ml/campaign.json index 492ce80ff..d2cec0e86 100644 --- a/app/javascript/dashboard/i18n/locale/ml/campaign.json +++ b/app/javascript/dashboard/i18n/locale/ml/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "പൂർത്തിയാക്കി", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "പൂർത്തിയാക്കി", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/ml/components.json b/app/javascript/dashboard/i18n/locale/ml/components.json index 262dec2fe..54177eb35 100644 --- a/app/javascript/dashboard/i18n/locale/ml/components.json +++ b/app/javascript/dashboard/i18n/locale/ml/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/ml/contact.json b/app/javascript/dashboard/i18n/locale/ml/contact.json index 9240a4cdc..54cd3b7ad 100644 --- a/app/javascript/dashboard/i18n/locale/ml/contact.json +++ b/app/javascript/dashboard/i18n/locale/ml/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/ml/conversation.json b/app/javascript/dashboard/i18n/locale/ml/conversation.json index 89b65cd53..d4cd56854 100644 --- a/app/javascript/dashboard/i18n/locale/ml/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ml/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", "NO_RESPONSE": "No response", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "പരിഹരിക്കുക", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Drag and drop here to attach", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/ml/helpCenter.json b/app/javascript/dashboard/i18n/locale/ml/helpCenter.json index 2ad6fdb6e..b4594ce6b 100644 --- a/app/javascript/dashboard/i18n/locale/ml/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ml/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Draft", "ARCHIVE": "Archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "ഇല്ലാതാക്കുക", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "ഇല്ലാതാക്കുക", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "നീക്കം ചെയ്യുക" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal created successfully", diff --git a/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json index c483970eb..3869e919e 100644 --- a/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ml/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Meta-യുമായി പ്രാമാണീകരിക്കുന്നു", "WAITING_FOR_BUSINESS_INFO": "ദയവായി Meta വിൻഡോയിൽ ബിസിനസ് ക്രമീകരണം പൂർത്തിയാക്കുക...", "PROCESSING": "നിങ്ങളുടെ WhatsApp ബിസിനസ് അക്കൗണ്ട് ക്രമീകരിക്കുന്നു", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Facebook SDK ലോഡിംഗ്...", "CANCELLED": "WhatsApp സൈൻഅപ്പ് റദ്ദാക്കി", "SUCCESS_TITLE": "WhatsApp ബിസിനസ് അക്കൗണ്ട് ബന്ധിപ്പിച്ചു!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "അധികാരപത്രം പൂർത്തിയാക്കിയിട്ടില്ല. ദയവായി പ്രക്രിയ വീണ്ടും ആരംഭിക്കുക.", "SUCCESS_FALLBACK": "WhatsApp ബിസിനസ് അക്കൗണ്ട് വിജയകരമായി ക്രമീകരിച്ചു", "MANUAL_FALLBACK": "നിങ്ങളുടെ നമ്പർ ഇതിനകം WhatsApp ബിസിനസ് പ്ലാറ്റ്ഫോം (API) യുമായി ബന്ധിപ്പിച്ചിട്ടുണ്ടെങ്കിൽ, അല്ലെങ്കിൽ നിങ്ങൾ ഒരു ടെക് പ്രൊവൈഡറായി നിങ്ങളുടെ സ്വന്തം നമ്പർ ഓൺബോർഡ് ചെയ്യുകയാണെങ്കിൽ, ദയവായി {link} ഫ്ലോ ഉപയോഗിക്കുക", - "MANUAL_LINK_TEXT": "മാനുവൽ സെറ്റപ്പ് ഫ്ലോ" + "MANUAL_LINK_TEXT": "മാനുവൽ സെറ്റപ്പ് ഫ്ലോ", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "ഞങ്ങൾ WhatsApp ചാനൽ സേവ് ചെയ്യാൻ കഴിഞ്ഞില്ല" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "WhatsApp-ൽ നിങ്ങളുടെ ഉപഭോക്താക്കളെ പിന്തുണയ്ക്കുക" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "ഇമെയിൽ", "DESCRIPTION": "Gmail, Outlook, അല്ലെങ്കിൽ മറ്റ് പ്രൊവൈഡർമാരുമായി കണക്ട് ചെയ്യുക" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "ബോട്ട് ക്രമീകരണം", "ACCOUNT_HEALTH": "അക്കൗണ്ട് ആരോഗ്യ നില", "CSAT": "CSAT", - "VOICE": "വോയ്സ്" + "VOICE": "വോയ്സ്", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "ചാനൽ മുൻഗണനകൾ", "WIDGET_FEATURES": "വിഡ്ജറ്റ് സവിശേഷതകൾ", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "നിങ്ങളുടെ ലഭ്യമായ ടെംപ്ലേറ്റുകൾ അപ്ഡേറ്റ് ചെയ്യാൻ WhatsApp-ൽ നിന്ന് സന്ദേശ ടെംപ്ലേറ്റുകൾ മാനുവലായി സമന്വയിപ്പിക്കുക.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "ടെംപ്ലേറ്റുകൾ സമന്വയിപ്പിക്കുക", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "ടെംപ്ലേറ്റുകൾ സമന്വയം വിജയകരമായി ആരംഭിച്ചു. അപ്ഡേറ്റ് ചെയ്യാൻ കുറച്ച് മിനിറ്റുകൾ എടുക്കാം.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "പ്രീ ചാറ്റ് ഫോമിന്റെ ക്രമീകരണങ്ങൾ അപ്ഡേറ്റ് ചെയ്യുക" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/ml/integrations.json b/app/javascript/dashboard/i18n/locale/ml/integrations.json index 711959a0f..f862e89ab 100644 --- a/app/javascript/dashboard/i18n/locale/ml/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ml/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "ബന്ധപ്പെടൽ സൃഷ്ടിച്ചു", "CONTACT_UPDATED": "ബന്ധപ്പെടൽ അപ്ഡേറ്റ് ചെയ്തു", "CONVERSATION_TYPING_ON": "സംഭാഷണം ടൈപ്പിംഗ് ഓൺ", - "CONVERSATION_TYPING_OFF": "സംവാദം ടൈപ്പിംഗ് ഓഫ്" + "CONVERSATION_TYPING_OFF": "സംവാദം ടൈപ്പിംഗ് ഓഫ്", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/ms/bulkActions.json b/app/javascript/dashboard/i18n/locale/ms/bulkActions.json index 95b313287..08f2c63ec 100644 --- a/app/javascript/dashboard/i18n/locale/ms/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/ms/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Pilih ejen", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "Tiada", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Pilih pasukan", "NONE": "Tiada", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/ms/campaign.json b/app/javascript/dashboard/i18n/locale/ms/campaign.json index d73da4622..6e925ff36 100644 --- a/app/javascript/dashboard/i18n/locale/ms/campaign.json +++ b/app/javascript/dashboard/i18n/locale/ms/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Sedang Diproses", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Sedang Diproses", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/ms/components.json b/app/javascript/dashboard/i18n/locale/ms/components.json index cae53a75c..815db3f80 100644 --- a/app/javascript/dashboard/i18n/locale/ms/components.json +++ b/app/javascript/dashboard/i18n/locale/ms/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/ms/contact.json b/app/javascript/dashboard/i18n/locale/ms/contact.json index d004a6e3c..161429452 100644 --- a/app/javascript/dashboard/i18n/locale/ms/contact.json +++ b/app/javascript/dashboard/i18n/locale/ms/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/ms/conversation.json b/app/javascript/dashboard/i18n/locale/ms/conversation.json index 052de0559..450f1d88c 100644 --- a/app/javascript/dashboard/i18n/locale/ms/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ms/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "Mesej ini tidak disokong. Anda boleh melihat mesej ini di aplikasi Facebook Messenger.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "Mesej ini tidak disokong. Anda boleh melihat mesej ini di aplikasi Instagram.", "UNSUPPORTED_MESSAGE_TIKTOK": "Mesej ini tidak disokong. Anda boleh melihat mesej ini di aplikasi TikTok.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Mesej berjaya dipadam", "FAIL_DELETE_MESSSAGE": "Tidak dapat memadam mesej! Sila cuba lagi", "NO_RESPONSE": "Tiada respons", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Panggilan keluar", "CALL_IN_PROGRESS": "Panggilan sedang berlangsung", "NO_ANSWER": "Tiada jawapan", + "NO_ANSWER_OUTBOUND_LABEL": "Tiada jawapan", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Panggilan terlepas", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Panggilan tamat", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Belum dijawab", + "CALLING": "Calling…", "THEY_ANSWERED": "Mereka menjawab", "YOU_ANSWERED": "Anda menjawab", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Sertai panggilan" + "JOIN_CALL": "Sertai panggilan", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Selesaikan", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Ditangguhkan sehingga esok", "SNOOZED_UNTIL_NEXT_WEEK": "Ditangguhkan sehingga minggu depan", "SNOOZED_UNTIL_NEXT_REPLY": "Ditangguhkan sehingga balasan seterusnya", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Rakam audio", "TIP_AUDIORECORDER_PERMISSION": "Benarkan akses ke audio", "TIP_AUDIORECORDER_ERROR": "Tidak dapat membuka audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Seret dan lepaskan di sini untuk melampirkan", "START_AUDIO_RECORDING": "Mula rakaman audio", "STOP_AUDIO_RECORDING": "Hentikan rakaman audio", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Belum dijawab", "HANDLED_IN_ANOTHER_TAB": "Sedang diuruskan di tab lain", "REJECT_CALL": "Tolak", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Sertai panggilan", - "END_CALL": "Tamatkan panggilan" + "END_CALL": "Tamatkan panggilan", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/ms/helpCenter.json b/app/javascript/dashboard/i18n/locale/ms/helpCenter.json index 13e893119..4b1da6590 100644 --- a/app/javascript/dashboard/i18n/locale/ms/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ms/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Draf", "ARCHIVE": "Arkib", "TRANSLATE": "Terjemah", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Padamkan", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Padamkan", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Sunting konfigurasi" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Padam" + }, + "SAVE": "Simpan perubahan" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal berjaya dibuat", diff --git a/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json index d459b814c..dfd586a29 100644 --- a/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Pengesahan tidak selesai. Sila mulakan semula proses.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "aliran tetapan manual" + "MANUAL_LINK_TEXT": "aliran tetapan manual", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Emel", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Konfigurasi Bot", "ACCOUNT_HEALTH": "Kesihatan Akaun", "CSAT": "CSAT", - "VOICE": "Suara" + "VOICE": "Suara", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Keutamaan Saluran", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Penyelarasan templat berjaya dimulakan. Ia mungkin mengambil masa beberapa minit untuk dikemas kini.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Kemas kini Tetapan Borang Pra Sembang" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/ms/integrations.json b/app/javascript/dashboard/i18n/locale/ms/integrations.json index 99b6d1580..3cca29ddb 100644 --- a/app/javascript/dashboard/i18n/locale/ms/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ms/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Kenalan dicipta", "CONTACT_UPDATED": "Kenalan dikemas kini", "CONVERSATION_TYPING_ON": "Perbualan Mengetik Aktif", - "CONVERSATION_TYPING_OFF": "Perbualan Mengetik Tidak Aktif" + "CONVERSATION_TYPING_OFF": "Perbualan Mengetik Tidak Aktif", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/ne/bulkActions.json b/app/javascript/dashboard/i18n/locale/ne/bulkActions.json index 77d41d9b3..7002ff610 100644 --- a/app/javascript/dashboard/i18n/locale/ne/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/ne/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "कुनै छैन", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select team", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/ne/campaign.json b/app/javascript/dashboard/i18n/locale/ne/campaign.json index 10366e79e..d7e5dfe3f 100644 --- a/app/javascript/dashboard/i18n/locale/ne/campaign.json +++ b/app/javascript/dashboard/i18n/locale/ne/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "प्रक्रिया हुँदैछ", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "प्रक्रिया हुँदैछ", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/ne/components.json b/app/javascript/dashboard/i18n/locale/ne/components.json index a75d35b08..3ee865a89 100644 --- a/app/javascript/dashboard/i18n/locale/ne/components.json +++ b/app/javascript/dashboard/i18n/locale/ne/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/ne/contact.json b/app/javascript/dashboard/i18n/locale/ne/contact.json index 2d7821199..566a2161e 100644 --- a/app/javascript/dashboard/i18n/locale/ne/contact.json +++ b/app/javascript/dashboard/i18n/locale/ne/contact.json @@ -20,6 +20,8 @@ "CALL": "कल गर्नुहोस्", "CALL_INITIATED": "सम्पर्कलाई कल गर्दै…", "CALL_FAILED": "फोन कल सुरु गर्न सकिएन। कृपया फेरि प्रयास गर्नुहोस्।", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "भ्वाइस इन्बक्स छान्नुहोस्" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "लेबलहरू तोक्नुहोस्", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "लेबलहरू सफलतापूर्वक असाइन गरियो।", "ASSIGN_LABELS_FAILED": "लेबलहरू तोक्न असफल भयो", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "चयनित सम्पर्कहरूमा थप्न चाहनुभएको लेबलहरू छान्नुहोस्।", "NO_LABELS_FOUND": "अहिलेसम्म कुनै लेबलहरू उपलब्ध छैनन्।", "SELECTED_COUNT": "{count} चयन गरियो", diff --git a/app/javascript/dashboard/i18n/locale/ne/conversation.json b/app/javascript/dashboard/i18n/locale/ne/conversation.json index e4e25a554..706834290 100644 --- a/app/javascript/dashboard/i18n/locale/ne/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ne/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "यो सन्देश समर्थन गरिएको छैन। तपाईं यो सन्देश Facebook Messenger एपमा हेर्न सक्नुहुन्छ।", "UNSUPPORTED_MESSAGE_INSTAGRAM": "यो सन्देश समर्थन गरिएको छैन। तपाईं यो सन्देश Instagram एपमा हेर्न सक्नुहुन्छ।", "UNSUPPORTED_MESSAGE_TIKTOK": "यो सन्देश समर्थन गरिएको छैन। तपाईंले यो सन्देश TikTok एपमा हेर्न सक्नुहुन्छ।", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "सन्देश सफलतापूर्वक मेटाइयो", "FAIL_DELETE_MESSSAGE": "सन्देश मेटाउन सकिएन! फेरि प्रयास गर्नुहोस्", "NO_RESPONSE": "कुनै प्रतिक्रिया छैन", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "जाने कल", "CALL_IN_PROGRESS": "कल जारी छ", "NO_ANSWER": "उत्तर छैन", + "NO_ANSWER_OUTBOUND_LABEL": "उत्तर छैन", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "छुटेको कल", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "कल समाप्त भयो", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "अझै जवाफ दिइएको छैन", + "CALLING": "Calling…", "THEY_ANSWERED": "उनीहरूले जवाफ दिए", "YOU_ANSWERED": "तपाईंले जवाफ दिनुभयो", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "कलमा सामेल हुनुहोस्" + "JOIN_CALL": "कलमा सामेल हुनुहोस्", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "समाधान गर्नुहोस्", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "भोलिसम्म सुताइएको", "SNOOZED_UNTIL_NEXT_WEEK": "अर्को हप्ता सम्म सुताइएको", "SNOOZED_UNTIL_NEXT_REPLY": "अर्को जवाफ सम्म सुताइएको", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "अडियो रेकर्ड गर्नुहोस्", "TIP_AUDIORECORDER_PERMISSION": "अडियो पहुँच अनुमति दिनुहोस्", "TIP_AUDIORECORDER_ERROR": "अडियो खोल्न सकिएन", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "यहाँ तान्नुहोस् र छोड्नुहोस् संलग्न गर्न", "START_AUDIO_RECORDING": "अडियो रेकर्डिङ सुरु गर्नुहोस्", "STOP_AUDIO_RECORDING": "अडियो रेकर्डिङ रोक्नुहोस्", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "अझै जवाफ दिइएको छैन", "HANDLED_IN_ANOTHER_TAB": "अर्को ट्याबमा ह्यान्डल भइरहेको छ", "REJECT_CALL": "अस्वीकार गर्नुहोस्", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "कलमा सामेल हुनुहोस्", - "END_CALL": "कल समाप्त गर्नुहोस्" + "END_CALL": "कल समाप्त गर्नुहोस्", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/ne/helpCenter.json b/app/javascript/dashboard/i18n/locale/ne/helpCenter.json index 2da7108b9..c0bac7a54 100644 --- a/app/javascript/dashboard/i18n/locale/ne/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ne/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "ड्राफ्ट", "ARCHIVE": "अभिलेख", "TRANSLATE": "अनुवाद गर्नुहोस्", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Delete", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Delete", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "कन्फिगरेसन सम्पादन गर्नुहोस्" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "हटाउनुहोस्" + }, + "SAVE": "परिवर्तनहरू बचत गर्नुहोस्" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "पोर्टल सफलतापूर्वक सिर्जना गरियो", diff --git a/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json index dd29826c2..65c1c2719 100644 --- a/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ne/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Meta सँग प्रमाणिकरण हुँदैछ", "WAITING_FOR_BUSINESS_INFO": "कृपया Meta विन्डोमा व्यवसाय सेटअप पूरा गर्नुहोस्...", "PROCESSING": "तपाईंको WhatsApp व्यवसाय खाता सेटअप गर्दै", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Facebook SDK लोड हुँदैछ...", "CANCELLED": "WhatsApp साइनअप रद्द गरियो", "SUCCESS_TITLE": "WhatsApp व्यवसाय खाता जडान भयो!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "प्रमाणिकरण पूरा भएन। कृपया प्रक्रिया पुनः सुरु गर्नुहोस्।", "SUCCESS_FALLBACK": "WhatsApp व्यवसाय खाता सफलतापूर्वक कन्फिगर गरियो", "MANUAL_FALLBACK": "यदि तपाईंको नम्बर पहिले नै WhatsApp व्यवसाय प्लेटफर्म (API) सँग जडान गरिएको छ, वा तपाईं प्रविधि प्रदायक हुनुहुन्छ र आफ्नो नम्बर अनबोर्ड गर्दै हुनुहुन्छ भने, कृपया {link} प्रवाह प्रयोग गर्नुहोस्", - "MANUAL_LINK_TEXT": "म्यानुअल सेटअप प्रवाह" + "MANUAL_LINK_TEXT": "म्यानुअल सेटअप प्रवाह", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "हामी WhatsApp च्यानल सुरक्षित गर्न सकेनौं" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "WhatsApp मा तपाईंका ग्राहकहरूलाई समर्थन गर्नुहोस्" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "इमेल", "DESCRIPTION": "Gmail, Outlook वा अन्य प्रदायकहरूसँग जडान गर्नुहोस्" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "बोट कन्फिगरेसन", "ACCOUNT_HEALTH": "खाता स्वास्थ्य", "CSAT": "CSAT", - "VOICE": "भ्वाइस" + "VOICE": "भ्वाइस", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "च्यानल प्राथमिकता", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "तपाईंका उपलब्ध टेम्प्लेटहरू अपडेट गर्न WhatsApp बाट म्यानुअली सन्देश टेम्प्लेटहरू समक्रमण गर्नुहोस्।", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "टेम्प्लेटहरू समक्रमण गर्नुहोस्", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "टेम्प्लेटहरू समक्रमण सफलतापूर्वक सुरु भयो। अपडेट हुन केही मिनेट लाग्न सक्छ।", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "पूर्व-च्याट फारम सेटिङहरू अपडेट गर्नुहोस्।" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/ne/integrations.json b/app/javascript/dashboard/i18n/locale/ne/integrations.json index d369fd8db..8838fa3eb 100644 --- a/app/javascript/dashboard/i18n/locale/ne/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ne/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "सम्पर्क सिर्जना भयो", "CONTACT_UPDATED": "सम्पर्क अपडेट गरियो", "CONVERSATION_TYPING_ON": "कुराकानी टाइप गर्दै छ", - "CONVERSATION_TYPING_OFF": "कुराकानी टाइप गर्दै छैन" + "CONVERSATION_TYPING_OFF": "कुराकानी टाइप गर्दै छैन", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/nl/bulkActions.json b/app/javascript/dashboard/i18n/locale/nl/bulkActions.json index 9ce607cac..93942db0f 100644 --- a/app/javascript/dashboard/i18n/locale/nl/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/nl/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} gesprekken geselecteerd", - "AGENT_SELECT_LABEL": "Selecteer agent", - "ASSIGN_CONFIRMATION_LABEL": "Weet u zeker dat u {conversationCount} {conversationLabel} wilt toewijzen aan", - "UNASSIGN_CONFIRMATION_LABEL": "Weet u zeker dat u {conversationCount} {conversationLabel} wilt ontkoppelen?", - "GO_BACK_LABEL": "Ga terug", - "ASSIGN_LABEL": "Toewijzen", "NONE": "Geen", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Gesprekken succesvol opgehaald.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Gesprekken die op deze pagina zichtbaar zijn, zijn alleen geselecteerd.", - "AGENT_LIST_LOADING": "Agents worden geladen", "UPDATE": { "CHANGE_STATUS": "Status wijzigen", "SNOOZE_UNTIL": "Sluimeren", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Labels toewijzen", - "NO_LABELS_FOUND": "Geen labels gevonden", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Geselecteerde labels toewijzen", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels met succes toegewezen.", - "ASSIGN_FAILED": "Toewijzen van labels mislukt, probeer het opnieuw." + "ASSIGN_FAILED": "Toewijzen van labels mislukt, probeer het opnieuw.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Selecteer team", "NONE": "Geen", - "NO_TEAMS_AVAILABLE": "Er zijn nog geen teams toegevoegd aan dit account.", - "ASSIGN_SELECTED_TEAMS": "Geselecteerde team toewijzen.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/nl/campaign.json b/app/javascript/dashboard/i18n/locale/nl/campaign.json index dec753f13..d30786560 100644 --- a/app/javascript/dashboard/i18n/locale/nl/campaign.json +++ b/app/javascript/dashboard/i18n/locale/nl/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/nl/components.json b/app/javascript/dashboard/i18n/locale/nl/components.json index 1dcb747e2..23bbe0d26 100644 --- a/app/javascript/dashboard/i18n/locale/nl/components.json +++ b/app/javascript/dashboard/i18n/locale/nl/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/nl/contact.json b/app/javascript/dashboard/i18n/locale/nl/contact.json index b1aa25574..07f5139c5 100644 --- a/app/javascript/dashboard/i18n/locale/nl/contact.json +++ b/app/javascript/dashboard/i18n/locale/nl/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Label toewijzen", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels met succes toegewezen.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/nl/conversation.json b/app/javascript/dashboard/i18n/locale/nl/conversation.json index 83553e320..31aeb37a7 100644 --- a/app/javascript/dashboard/i18n/locale/nl/conversation.json +++ b/app/javascript/dashboard/i18n/locale/nl/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Bericht succesvol verwijderd", "FAIL_DELETE_MESSSAGE": "Kon bericht niet verwijderen! Probeer het opnieuw", "NO_RESPONSE": "Geen reactie", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Oplossen", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozed tot morgen", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed tot volgende week", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed tot volgende antwoord", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Audio opnemen", "TIP_AUDIORECORDER_PERMISSION": "Sta toegang tot audio toe", "TIP_AUDIORECORDER_ERROR": "Geluid kon niet worden geopend", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Sleep hierheen om toe te voegen", "START_AUDIO_RECORDING": "Start audio-opname", "STOP_AUDIO_RECORDING": "Stop audio-opname", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Negeer", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/nl/helpCenter.json b/app/javascript/dashboard/i18n/locale/nl/helpCenter.json index e14763f34..0cb2a8342 100644 --- a/app/javascript/dashboard/i18n/locale/nl/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/nl/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Draft", "ARCHIVE": "Archive", "TRANSLATE": "Vertaal", + "MOVE_TO_CATEGORY": "Categorie", "DELETE": "Verwijderen", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Verwijderen", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Weergave", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Verwijderen" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal created successfully", diff --git a/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json index abdbb47ee..5e901d3b9 100644 --- a/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/nl/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "E-mailadres", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot Configuration", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/nl/integrations.json b/app/javascript/dashboard/i18n/locale/nl/integrations.json index 05766e58e..ad144e284 100644 --- a/app/javascript/dashboard/i18n/locale/nl/integrations.json +++ b/app/javascript/dashboard/i18n/locale/nl/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact aangemaakt", "CONTACT_UPDATED": "Contact aangemaakt", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/no/bulkActions.json b/app/javascript/dashboard/i18n/locale/no/bulkActions.json index 9aea1df66..b73d23f16 100644 --- a/app/javascript/dashboard/i18n/locale/no/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/no/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Velg agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Tildel", "NONE": "None", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Velg gruppe", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/no/campaign.json b/app/javascript/dashboard/i18n/locale/no/campaign.json index b0ac970f0..d0665209a 100644 --- a/app/javascript/dashboard/i18n/locale/no/campaign.json +++ b/app/javascript/dashboard/i18n/locale/no/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/no/components.json b/app/javascript/dashboard/i18n/locale/no/components.json index d8ecb89ab..bbee4d708 100644 --- a/app/javascript/dashboard/i18n/locale/no/components.json +++ b/app/javascript/dashboard/i18n/locale/no/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/no/contact.json b/app/javascript/dashboard/i18n/locale/no/contact.json index 205ab67b8..36b0c84c1 100644 --- a/app/javascript/dashboard/i18n/locale/no/contact.json +++ b/app/javascript/dashboard/i18n/locale/no/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/no/conversation.json b/app/javascript/dashboard/i18n/locale/no/conversation.json index a973a0c84..cb6b2f431 100644 --- a/app/javascript/dashboard/i18n/locale/no/conversation.json +++ b/app/javascript/dashboard/i18n/locale/no/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", "NO_RESPONSE": "No response", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Løs", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Drag and drop here to attach", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/no/helpCenter.json b/app/javascript/dashboard/i18n/locale/no/helpCenter.json index c39867e15..0ed9ed17a 100644 --- a/app/javascript/dashboard/i18n/locale/no/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/no/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Draft", "ARCHIVE": "Archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Slett", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Slett", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Fjern" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal created successfully", diff --git a/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json index b59a61dcb..3bc48e51d 100644 --- a/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/no/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "E-post", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot Configuration", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/no/integrations.json b/app/javascript/dashboard/i18n/locale/no/integrations.json index 190f0ad4c..07a8fc085 100644 --- a/app/javascript/dashboard/i18n/locale/no/integrations.json +++ b/app/javascript/dashboard/i18n/locale/no/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact created", "CONTACT_UPDATED": "Contact updated", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/pl/bulkActions.json b/app/javascript/dashboard/i18n/locale/pl/bulkActions.json index 11de057a2..c2cdd7df9 100644 --- a/app/javascript/dashboard/i18n/locale/pl/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/pl/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} wybranych rozmów", - "AGENT_SELECT_LABEL": "Wybierz konsultanta", - "ASSIGN_CONFIRMATION_LABEL": "Czy na pewno chcesz przypisać {conversationCount} {conversationLabel} do", - "UNASSIGN_CONFIRMATION_LABEL": "Czy na pewno chcesz odwołać przypisanie {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Powróć", - "ASSIGN_LABEL": "Przypisz", "NONE": "Brak", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Rozmowy zostały pomyślnie zakończone.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Zaznaczone rozmowy widoczne na tej stronie.", - "AGENT_LIST_LOADING": "Ładowanie agentów", "UPDATE": { "CHANGE_STATUS": "Zmień status", "SNOOZE_UNTIL": "Uśpij", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "Brak wyników", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Przypisz wybrane etykiety", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Etykiety zostały pomyślnie przypisane.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Wybierz zespół", "NONE": "Brak", - "NO_TEAMS_AVAILABLE": "Na tym koncie nie dodano jeszcze żadnych zespołów.", - "ASSIGN_SELECTED_TEAMS": "Przypisz wybrany zespół.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/pl/campaign.json b/app/javascript/dashboard/i18n/locale/pl/campaign.json index 657223244..122099cde 100644 --- a/app/javascript/dashboard/i18n/locale/pl/campaign.json +++ b/app/javascript/dashboard/i18n/locale/pl/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Zakończone", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Zakończone", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/pl/components.json b/app/javascript/dashboard/i18n/locale/pl/components.json index 053a2bf54..8ba2c3668 100644 --- a/app/javascript/dashboard/i18n/locale/pl/components.json +++ b/app/javascript/dashboard/i18n/locale/pl/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/pl/contact.json b/app/javascript/dashboard/i18n/locale/pl/contact.json index 78333d35d..128ffb4ff 100644 --- a/app/javascript/dashboard/i18n/locale/pl/contact.json +++ b/app/javascript/dashboard/i18n/locale/pl/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Przypisz etykiety", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Etykiety zostały pomyślnie przypisane.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/pl/conversation.json b/app/javascript/dashboard/i18n/locale/pl/conversation.json index d8bafa0e9..d7767fcdf 100644 --- a/app/javascript/dashboard/i18n/locale/pl/conversation.json +++ b/app/javascript/dashboard/i18n/locale/pl/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Wiadomość usunięta pomyślnie", "FAIL_DELETE_MESSSAGE": "Nie można usunąć wiadomości! Spróbuj ponownie", "NO_RESPONSE": "Brak odpowiedzi", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Rozwiąż", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Uśpij do jutra", "SNOOZED_UNTIL_NEXT_WEEK": "Uśpione do następnego tygodnia", "SNOOZED_UNTIL_NEXT_REPLY": "Uśpione do następnej odpowiedzi", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Nagrywaj audio", "TIP_AUDIORECORDER_PERMISSION": "Zezwól na dostęp do dźwięku", "TIP_AUDIORECORDER_ERROR": "Nie można otworzyć dźwięku", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Przeciągnij i upuść tutaj, aby dołączyć", "START_AUDIO_RECORDING": "Rozpocznij nagrywanie audio", "STOP_AUDIO_RECORDING": "Zatrzymaj nagrywanie audio", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Odrzuć", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/pl/helpCenter.json b/app/javascript/dashboard/i18n/locale/pl/helpCenter.json index 1f81b2fa4..b775a08b8 100644 --- a/app/javascript/dashboard/i18n/locale/pl/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/pl/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Szkic", "ARCHIVE": "Archive", "TRANSLATE": "Przetłumacz", + "MOVE_TO_CATEGORY": "Kategoria", "DELETE": "Usuń", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Usuń", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Usuń" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal utworzony pomyślnie", diff --git a/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json index 3006452c1..0602b35c1 100644 --- a/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/pl/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Nie udało się zapisać kanału WhatsApp" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "E-mail", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Konfiguracja bota", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Aktualizacja ustawień formularza czatu wstępnego" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/pl/integrations.json b/app/javascript/dashboard/i18n/locale/pl/integrations.json index 2a9b55026..6ab571321 100644 --- a/app/javascript/dashboard/i18n/locale/pl/integrations.json +++ b/app/javascript/dashboard/i18n/locale/pl/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Utworzenie kontaktu", "CONTACT_UPDATED": "Aktualizacja kontaktu", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/pt/bulkActions.json b/app/javascript/dashboard/i18n/locale/pt/bulkActions.json index 12ad9423a..f6289e1c1 100644 --- a/app/javascript/dashboard/i18n/locale/pt/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/pt/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversas selecionadas", - "AGENT_SELECT_LABEL": "Escolher agente", - "ASSIGN_CONFIRMATION_LABEL": "Tem a certeza que pretende atribuir {conversationCount} {conversationLabel} a", - "UNASSIGN_CONFIRMATION_LABEL": "Tem a certeza que pretende remover a atribuição de {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Voltar", - "ASSIGN_LABEL": "Atribuir", "NONE": "Nenhuma", "CLEAR_SELECTION": "Limpar", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversas resolvidas com sucesso.", "RESOLVE_FAILED": "Falha ao resolver conversas. Por favor, tente novamente.", "ALL_CONVERSATIONS_SELECTED_ALERT": "As conversas visíveis nesta página estão apenas selecionadas.", - "AGENT_LIST_LOADING": "A carregar agentes", "UPDATE": { "CHANGE_STATUS": "Alterar estado", "SNOOZE_UNTIL": "Adiar", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Atribuir etiquetas", - "NO_LABELS_FOUND": "Nenhuma etiqueta encontrada", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Atribuir etiquetas selecionadas", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Etiquetas atribuídas com sucesso.", - "ASSIGN_FAILED": "Falha ao atribuir etiquetas. Por favor, tente novamente." + "ASSIGN_FAILED": "Falha ao atribuir etiquetas. Por favor, tente novamente.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Escolher equipa", "NONE": "Nenhuma", - "NO_TEAMS_AVAILABLE": "Não há equipas nesta conta.", - "ASSIGN_SELECTED_TEAMS": "Atribuir equipa selecionada.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Equipas atribuídas.", diff --git a/app/javascript/dashboard/i18n/locale/pt/campaign.json b/app/javascript/dashboard/i18n/locale/pt/campaign.json index 6a007e9b7..25e8cc065 100644 --- a/app/javascript/dashboard/i18n/locale/pt/campaign.json +++ b/app/javascript/dashboard/i18n/locale/pt/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Concluída", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Concluída", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/pt/components.json b/app/javascript/dashboard/i18n/locale/pt/components.json index 396df5d48..9565bd6b2 100644 --- a/app/javascript/dashboard/i18n/locale/pt/components.json +++ b/app/javascript/dashboard/i18n/locale/pt/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/pt/contact.json b/app/javascript/dashboard/i18n/locale/pt/contact.json index 09d66b265..8f1320b67 100644 --- a/app/javascript/dashboard/i18n/locale/pt/contact.json +++ b/app/javascript/dashboard/i18n/locale/pt/contact.json @@ -20,6 +20,8 @@ "CALL": "Chamada", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Atribuir etiquetas", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Etiquetas atribuídas com sucesso.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/pt/conversation.json b/app/javascript/dashboard/i18n/locale/pt/conversation.json index 578adb793..3d9c0a44b 100644 --- a/app/javascript/dashboard/i18n/locale/pt/conversation.json +++ b/app/javascript/dashboard/i18n/locale/pt/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "Esta mensagem não é suportada. Pode ver esta mensagem na app Facebook Messenger.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "Esta mensagem não é suportada. Pode ver esta mensagem na app do Instagram.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Mensagem apagada com sucesso", "FAIL_DELETE_MESSSAGE": "Não foi possível apagar a mensagem! Por favor, tente novamente", "NO_RESPONSE": "Sem resposta", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Resolver", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Adiada até amanhã", "SNOOZED_UNTIL_NEXT_WEEK": "Adiada até a próxima semana", "SNOOZED_UNTIL_NEXT_REPLY": "Adiada até à próxima resposta", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Gravar áudio", "TIP_AUDIORECORDER_PERMISSION": "Permitir acesso ao áudio", "TIP_AUDIORECORDER_ERROR": "Não foi possível abrir o áudio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Arrastar e soltar aqui para anexar", "START_AUDIO_RECORDING": "Iniciar gravação de áudio", "STOP_AUDIO_RECORDING": "Parar gravação de áudio", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Descartar", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/pt/helpCenter.json b/app/javascript/dashboard/i18n/locale/pt/helpCenter.json index 269c91738..f7a08aa54 100644 --- a/app/javascript/dashboard/i18n/locale/pt/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/pt/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Rascunho", "ARCHIVE": "Archive", "TRANSLATE": "Traduzir", + "MOVE_TO_CATEGORY": "Categoria", "DELETE": "Excluir", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Excluir", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Aparência", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Excluir" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal criado com sucesso", diff --git a/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json index 58bfefaa5..a76b2acfa 100644 --- a/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/pt/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Não foi possível gravar o canal do WhatsApp" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "E-mail", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Configuração do bot", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voz" + "VOICE": "Voz", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Atualizar configurações do formulário pré-chat" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/pt/integrations.json b/app/javascript/dashboard/i18n/locale/pt/integrations.json index 41fe0cf5a..3db1d60af 100644 --- a/app/javascript/dashboard/i18n/locale/pt/integrations.json +++ b/app/javascript/dashboard/i18n/locale/pt/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contacto criado", "CONTACT_UPDATED": "Contacto atualizado", "CONVERSATION_TYPING_ON": "Conversa: a escrever", - "CONVERSATION_TYPING_OFF": "Conversa: a escrever desligada" + "CONVERSATION_TYPING_OFF": "Conversa: a escrever desligada", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/bulkActions.json b/app/javascript/dashboard/i18n/locale/pt_BR/bulkActions.json index d8c372466..0ec37a322 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversas selecionadas", - "AGENT_SELECT_LABEL": "Selecionar agente", - "ASSIGN_CONFIRMATION_LABEL": "Você tem certeza que quer atribuir {conversationCount} {conversationLabel} para", - "UNASSIGN_CONFIRMATION_LABEL": "Você tem certeza que quer remover a atribuição de {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Voltar atrás", - "ASSIGN_LABEL": "Atribua", "NONE": "Nenhuma", "CLEAR_SELECTION": "Limpar", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Tem certeza de que deseja atribuir {n} conversa para {agentName}? | Tem certeza de que deseja atribuir {n} conversas para {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversas resolvidas com sucesso.", "RESOLVE_FAILED": "Falha ao resolver conversas. Por favor, tente novamente.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversas visíveis nesta página só estão selecionadas.", - "AGENT_LIST_LOADING": "Carregando agentes", "UPDATE": { "CHANGE_STATUS": "Alterar status", "SNOOZE_UNTIL": "Adiar", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Atribuir rótulo", - "NO_LABELS_FOUND": "Nenhuma etiqueta encontrada", + "REMOVE_LABELS": "Remover etiquetas", "ASSIGN_SELECTED_LABELS": "Atribuir etiquetas selecionadas", + "REMOVE_SELECTED_LABELS": "Remover etiquetas selecionadas", "ASSIGN_SUCCESFUL": "Rótulos atribuídos com sucesso.", - "ASSIGN_FAILED": "Falha ao atribuir etiquetas. Por favor, tente novamente." + "ASSIGN_FAILED": "Falha ao atribuir etiquetas. Por favor, tente novamente.", + "REMOVE_SUCCESFUL": "Etiquetas removidas com sucesso.", + "REMOVE_FAILED": "Falha ao remover etiquetas. Por favor, tente novamente." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Selecionar time", "NONE": "Nenhum", - "NO_TEAMS_AVAILABLE": "Ainda não há times adicionados a esta conta.", - "ASSIGN_SELECTED_TEAMS": "Atribuir time selecionado.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Tem certeza de que deseja atribuir {n} conversa ao time {teamName}? | Tem certeza de que deseja atribuir {n} conversas ao time {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Tem certeza de que deseja remover a atribuição de {n} conversa? | Tem certeza de que deseja remover a atribuição de {n} conversas?", "ASSIGN_SUCCESFUL": "Times atribuídos com sucesso.", diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/campaign.json b/app/javascript/dashboard/i18n/locale/pt_BR/campaign.json index c1637a4d4..740cb2545 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/campaign.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processando", "COMPLETED": "Concluído", "SCHEDULED": "Agendada" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processando", "COMPLETED": "Concluído", "SCHEDULED": "Agendada" }, diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/components.json b/app/javascript/dashboard/i18n/locale/pt_BR/components.json index 485cf6ad0..bcc44413b 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/components.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Imagem" } } diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/contact.json b/app/javascript/dashboard/i18n/locale/pt_BR/contact.json index c9b5cd942..a4b168805 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/contact.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/contact.json @@ -20,6 +20,8 @@ "CALL": "Chamada", "CALL_INITIATED": "Efetuando chamada…", "CALL_FAILED": "Não foi possível iniciar a chamada. Tente novamente.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Solicitação de permissão de chamada enviada ao contato. Tente novamente após a aceitação.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Uma solicitação de permissão de chamada já foi enviada recentemente. Tente novamente após o contato aceitar.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Escolha uma caixa de entrada de voz" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Atribuir rótulo", + "REMOVE_LABELS": "Remover Etiquetas", "ASSIGN_LABELS_SUCCESS": "Rótulos atribuídos com sucesso.", "ASSIGN_LABELS_FAILED": "Falha ao atribuir etiquetas", + "REMOVE_LABELS_SUCCESS": "Etiquetas removidas com sucesso.", + "REMOVE_LABELS_FAILED": "Falha ao remover etiquetas", "DESCRIPTION": "Selecione as etiquetas que deseja adicionar aos contatos selecionados.", "NO_LABELS_FOUND": "Nenhuma etiqueta disponível ainda.", "SELECTED_COUNT": "{count} selecionado", diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json b/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json index ecd158e16..8a6702eaa 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "Esta mensagem não é suportada. Você pode ver esta mensagem no aplicativo Facebook Messenger.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "Esta mensagem não é suportada. Você pode ver esta mensagem no aplicativo do Instagram.", "UNSUPPORTED_MESSAGE_TIKTOK": "Esta mensagem não é compatível. Você pode visualizá-la no aplicativo do TikTok.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "Esta mensagem não é suportada. Você pode visualizar esta mensagem no aplicativo do WhatsApp.", "SUCCESS_DELETE_MESSAGE": "Mensagem excluída com sucesso", "FAIL_DELETE_MESSSAGE": "Não foi possível excluir a mensagem! Tente novamente", "NO_RESPONSE": "Sem resposta", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Chamada realizada", "CALL_IN_PROGRESS": "Chamada em andamento", "NO_ANSWER": "Sem resposta", + "NO_ANSWER_OUTBOUND_LABEL": "Sem resposta", + "NO_ANSWER_OUTBOUND_SUBTEXT": "O contato não atendeu", "MISSED_CALL": "Chamada perdida", + "MISSED_CALL_INBOUND_SUBTEXT": "Nenhum atendente atendeu", + "MISSED_CALL_DECLINED_BY": "Recusado por {agentName}", "CALL_ENDED": "Chamada encerrada", + "HANDLED_BY": "Atendido por {agentName}", "NOT_ANSWERED_YET": "Ainda não respondido", + "CALLING": "Chamando…", "THEY_ANSWERED": "Eles responderam", "YOU_ANSWERED": "Você respondeu", "AGENT_ANSWERED": "{agentName} respondeu", - "JOIN_CALL": "Entrar na chamada" + "JOIN_CALL": "Entrar na chamada", + "CALL_BACK": "Retornar chamada", + "TRANSCRIPT_SHOW_MORE": "Ver mais", + "TRANSCRIPT_SHOW_LESS": "Mostrar menos" }, "HEADER": { "RESOLVE_ACTION": "Resolver", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Adiado até amanhã", "SNOOZED_UNTIL_NEXT_WEEK": "Adiada até a próxima semana", "SNOOZED_UNTIL_NEXT_REPLY": "Adiado até a próxima resposta", + "WHATSAPP_CALL": "Iniciar chamada no WhatsApp", + "WHATSAPP_CALL_FAILED": "Não foi possível iniciar a chamada no WhatsApp.", + "VOICE_CALL": "Iniciar chamada", + "VOICE_CALL_FAILED": "Não foi possível iniciar a chamada.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Solicitação de permissão de chamada enviada ao contato. Tente novamente após a aceitação.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Uma solicitação de permissão de chamada já foi enviada recentemente. Tente novamente após o contato aceitar.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Gravar áudio", "TIP_AUDIORECORDER_PERMISSION": "Permitir acesso ao áudio", "TIP_AUDIORECORDER_ERROR": "Não foi possível abrir o áudio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Arraste e solte aqui para anexar", "START_AUDIO_RECORDING": "Iniciar gravação de áudio", "STOP_AUDIO_RECORDING": "Parar gravação de áudio", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Ainda não respondido", "HANDLED_IN_ANOTHER_TAB": "Sendo atendida em outra aba", "REJECT_CALL": "Recusar", + "DISMISS_CALL": "Recusar", "JOIN_CALL": "Entrar na chamada", - "END_CALL": "Encerrar chamada" + "END_CALL": "Encerrar chamada", + "MUTE": "Silenciar microfone", + "UNMUTE": "Desilenciar microfone", + "VIEW_CHAT_HISTORY": "Ver histórico da conversa", + "GO_TO_CONVERSATION": "Ir para a conversa" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/helpCenter.json b/app/javascript/dashboard/i18n/locale/pt_BR/helpCenter.json index 6448cf209..558651b9f 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Rascunho", "ARCHIVE": "Arquivar", "TRANSLATE": "Traduzir", + "MOVE_TO_CATEGORY": "Categoria", "DELETE": "Excluir", "STATUS_SUCCESS": "Artigos atualizados com sucesso", "STATUS_ERROR": "Falha ao atualizar artigos", + "CATEGORY_SUCCESS": "Artigos movidos com sucesso", + "CATEGORY_ERROR": "Falha ao mover artigos", "DELETE_CONFIRM_TITLE": "Excluir artigo | Excluir {count} artigos", "DELETE_CONFIRM_DESCRIPTION": "Isto irá apagar o artigo selecionado permanentemente. Esta ação não pode ser desfeita. | Isso irá apagar permanentemente {count} artigos selecionados. Esta ação não pode ser desfeita.", "DELETE_CONFIRM": "Excluir", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Alterar configuração" }, + "LAYOUT_CONTENT": { + "HEADER": "Tema", + "DESCRIPTION": "Escolha o leiaute adequado à leitura de seus visitantes.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Clássico", + "DESCRIPTION": "Uma página inicial acolhedora com busca e tópicos em destaque." + }, + "SIDEBAR": { + "TITLE": "Documentação", + "DESCRIPTION": "Navegação lado a lado que mantém todos os guias a um clique de distância." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Links sociais", + "DESCRIPTION": "Adicione o identificador de cada rede e sua central de ajuda criará o link completo automaticamente. Exibido no rodapé do leiaute da documentação.", + "PLACEHOLDER": "@usuario", + "ADD": "Adicionar link social", + "REMOVE": "Excluir" + }, + "SAVE": "Salvar Alterações" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal criado com sucesso", diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json index d8ab81b0c..4331fade0 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Autenticando com Meta", "WAITING_FOR_BUSINESS_INFO": "Por favor, complete a configuração do negócio na janela da Meta...", "PROCESSING": "Configurando sua conta do WhatsApp Business", + "ENABLING_CALLING": "Ativando chamadas do WhatsApp no seu número…", "LOADING_SDK": "Carregando SDK do Facebook...", "CANCELLED": "O cadastro do WhatsApp foi cancelado", "SUCCESS_TITLE": "Conta do WhatsApp Business conectada!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Autenticação não concluída. Por favor, reinicie o processo.", "SUCCESS_FALLBACK": "A conta do WhatsApp Business foi configurada com sucesso", "MANUAL_FALLBACK": "Se o seu número já estiver conectado à Plataforma WhatsApp Business (API) ou se você for um provedor de tecnologia integrando o seu próprio número, use o fluxo de {link}", - "MANUAL_LINK_TEXT": "fluxo de configuração manual" + "MANUAL_LINK_TEXT": "fluxo de configuração manual", + "CALLING_ENABLE_FAILED": "Sua caixa de entrada do WhatsApp está pronta, mas as chamadas de voz não puderam ser ativadas — este número ainda não está cadastrado na API de Chamadas do WhatsApp Business. Entre em contato com a Meta ou com seu provedor de soluções WhatsApp Business para realizar o cadastro e, depois, ative as chamadas nas configurações de Chamadas da caixa de entrada." }, "API": { "ERROR_MESSAGE": "Não foi possível salvar o canal do WhatsApp" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Atenda seus clientes no WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "Chamada do WhatsApp", + "DESCRIPTION": "Receba chamadas de voz no seu número do WhatsApp" + }, "EMAIL": { "TITLE": "E-mail", "DESCRIPTION": "Conectar com Gmail, Outlook ou outros provedores" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Configuração do Bot", "ACCOUNT_HEALTH": "Saúde da conta", "CSAT": "CSAT", - "VOICE": "Voz" + "VOICE": "Voz", + "CALLS": "Chamadas" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Chamada de voz requer credenciais de chave da API Twilio. Elas são usadas para gerar tokens para conexões de voz do agente." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Ativar chamadas do WhatsApp", + "DESCRIPTION": "Permita que os atendentes recebam e realizem chamadas do WhatsApp Cloud nesta caixa de entrada. Os clientes poderão ligar diretamente para este número comercial pelo WhatsApp." + }, + "ENABLE_FAILED": "As chamadas de voz não puderam ser ativadas para este número — ele ainda não está cadastrado na API de Chamadas do WhatsApp Business. Entre em contato com a Meta ou com seu provedor de soluções WhatsApp Business para realizar o cadastro e tente novamente depois.", + "PHONE_NUMBER": { + "LABEL": "Número de telefone comercial", + "HELP_TEXT": "Número do WhatsApp para o qual os clientes poderão ligar." + }, + "HOW_IT_WORKS": { + "LABEL": "Como funciona", + "DESCRIPTION": "As chamadas são realizadas ponto a ponto entre o navegador do atendente e a Meta — nenhuma credencial adicional é necessária. Certifique-se de que o navegador do atendente tenha permissão para usar o microfone neste site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Mensagem de solicitação de permissão de chamada", + "HELP_TEXT": "Exibido ao contato quando ele ainda não consentiu em receber chamadas. Deixe em branco para usar a mensagem padrão.", + "PLACEHOLDER": "Gostaríamos de ligar para você em relação à sua conversa." + } + }, "CHANNEL_PREFERENCES": "Preferências do Canal", "WIDGET_FEATURES": "Recursos do widget", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Sincronize manualmente os modelos de mensagens do WhatsApp para atualizar seus modelos disponíveis.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sincronizar Modelos", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Sincronização de modelos iniciada com sucesso. Pode demorar alguns minutos para atualizar.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Ativar chamadas de voz", + "DESCRIPTION": "Permita que os atendentes iniciem e recebam chamadas de voz do WhatsApp nesta caixa de entrada. Disponível apenas para canais do WhatsApp Cloud com cadastro incorporado e permissão de chamadas concedida pela Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Atualizar configurações do Formulário Pre Chat" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/integrationApps.json b/app/javascript/dashboard/i18n/locale/pt_BR/integrationApps.json index a42b3be4f..6fb63c738 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/integrationApps.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/integrationApps.json @@ -46,7 +46,7 @@ "PLACEHOLDER": "Selecionar caixa de entrada" }, "SUBMIT": "Criar", - "VALIDATING_OPENAI": "Validating with OpenAI...", + "VALIDATING_OPENAI": "Validando com a OpenAI...", "CANCEL": "Cancelar" }, "API": { diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/integrations.json b/app/javascript/dashboard/i18n/locale/pt_BR/integrations.json index b08d05c5a..900c4cce3 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/integrations.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contato criado", "CONTACT_UPDATED": "Contato atualizado", "CONVERSATION_TYPING_ON": "Status de Digitação ativado", - "CONVERSATION_TYPING_OFF": "Status de Digitação desativado" + "CONVERSATION_TYPING_OFF": "Status de Digitação desativado", + "INBOX_UPDATED": "Caixa de entrada atualizada" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/ro/bulkActions.json b/app/javascript/dashboard/i18n/locale/ro/bulkActions.json index 396b5b5b0..c4d2d45f3 100644 --- a/app/javascript/dashboard/i18n/locale/ro/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/ro/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversații selectate", - "AGENT_SELECT_LABEL": "Selectați agentul", - "ASSIGN_CONFIRMATION_LABEL": "Sigur doriți să atribuiți {conversationCount} {conversationLabel} la", - "UNASSIGN_CONFIRMATION_LABEL": "Sigur doriți să anulați atribuirea a {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Mergeți înapoi", - "ASSIGN_LABEL": "Atribuiți", "NONE": "Nimic", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversațiile au fost rezolvate.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversațiile vizibile pe această pagină sunt doar selectate.", - "AGENT_LIST_LOADING": "Se încarcă agenții", "UPDATE": { "CHANGE_STATUS": "Schimbați statusul", "SNOOZE_UNTIL": "Amânați", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "Nu s-au găsit etichete", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Atribuiți etichetele selectate", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Etichete atribuite cu succes.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Selectați echipa", "NONE": "Nimic", - "NO_TEAMS_AVAILABLE": "Nu există încă echipe adăugate la acest cont.", - "ASSIGN_SELECTED_TEAMS": "Atribuirea echipei selectate.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/ro/campaign.json b/app/javascript/dashboard/i18n/locale/ro/campaign.json index 0508e042b..09111f1fe 100644 --- a/app/javascript/dashboard/i18n/locale/ro/campaign.json +++ b/app/javascript/dashboard/i18n/locale/ro/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Finalizată", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Finalizată", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/ro/components.json b/app/javascript/dashboard/i18n/locale/ro/components.json index 324ee7cfc..13bfe1930 100644 --- a/app/javascript/dashboard/i18n/locale/ro/components.json +++ b/app/javascript/dashboard/i18n/locale/ro/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/ro/contact.json b/app/javascript/dashboard/i18n/locale/ro/contact.json index 4c2c842b6..5ceb50f26 100644 --- a/app/javascript/dashboard/i18n/locale/ro/contact.json +++ b/app/javascript/dashboard/i18n/locale/ro/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Atribuiți etichete", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Etichete atribuite cu succes.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/ro/conversation.json b/app/javascript/dashboard/i18n/locale/ro/conversation.json index ac6def97c..a2679e6ac 100644 --- a/app/javascript/dashboard/i18n/locale/ro/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ro/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Mesaj şters cu succes", "FAIL_DELETE_MESSSAGE": "Mesajul nu a putut fi șters! Încercați din nou", "NO_RESPONSE": "Niciun răspuns", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Rezolvă", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Amânat până mâine", "SNOOZED_UNTIL_NEXT_WEEK": "Amânat până săptămâna viitoare", "SNOOZED_UNTIL_NEXT_REPLY": "Amânat până la următorul răspuns", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Înregistrare audio", "TIP_AUDIORECORDER_PERMISSION": "Permiteți accesul la audio", "TIP_AUDIORECORDER_ERROR": "Nu s-a putut deschide audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Trageți și plasați aici pentru atașare", "START_AUDIO_RECORDING": "Pornirea înregistrării audio", "STOP_AUDIO_RECORDING": "Mesaj audio", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/ro/helpCenter.json b/app/javascript/dashboard/i18n/locale/ro/helpCenter.json index 85771bfb6..a2f04e3d6 100644 --- a/app/javascript/dashboard/i18n/locale/ro/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ro/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Ciornă", "ARCHIVE": "Archive", "TRANSLATE": "Traduceți", + "MOVE_TO_CATEGORY": "Categorie", "DELETE": "Şterge", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Şterge", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Elimină" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portalul a fost creat", diff --git a/app/javascript/dashboard/i18n/locale/ro/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ro/inboxMgmt.json index 94a6ab812..4919eb398 100644 --- a/app/javascript/dashboard/i18n/locale/ro/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ro/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Nu am reușit să salvăm canalul WhatsApp" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "E-mail", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Configurarea botului", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Actualizarea setărilor formularului pre-chat" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/ro/integrations.json b/app/javascript/dashboard/i18n/locale/ro/integrations.json index c1426486d..c74eddd30 100644 --- a/app/javascript/dashboard/i18n/locale/ro/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ro/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Persoană de contact creată", "CONTACT_UPDATED": "Persoană de contact actualizată", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/ru/bulkActions.json b/app/javascript/dashboard/i18n/locale/ru/bulkActions.json index da44dc3a0..cf105278c 100644 --- a/app/javascript/dashboard/i18n/locale/ru/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/ru/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} бесед выбрано", - "AGENT_SELECT_LABEL": "Выбрать агента", - "ASSIGN_CONFIRMATION_LABEL": "Вы уверены, что хотите назначить {conversationCount} {conversationLabel}", - "UNASSIGN_CONFIRMATION_LABEL": "Вы уверены, что хотите отменить назначение {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Вернуться", - "ASSIGN_LABEL": "Назначить", "NONE": "Ничего", "CLEAR_SELECTION": "Сбросить", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Вы уверены, что вы хотите назначить разговор {n} для {agentName}? | Вы уверены, что хотите назначить {n} разговоры {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Беседы успешно завершены.", "RESOLVE_FAILED": "Не удалось завершить диалоги, попробуйте еще раз.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Выбраны только беседы, видимые на этой странице.", - "AGENT_LIST_LOADING": "Загрузка агентов", "UPDATE": { "CHANGE_STATUS": "Изменить статус", "SNOOZE_UNTIL": "Отложено", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Назначить метки", - "NO_LABELS_FOUND": "Метки не найдены", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Назначить выбранные метки", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Метки успешно назначены.", - "ASSIGN_FAILED": "Не удалось назначить метки, пожалуйста, попробуйте снова." + "ASSIGN_FAILED": "Не удалось назначить метки, пожалуйста, попробуйте снова.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Выберите команду", "NONE": "Ничего", - "NO_TEAMS_AVAILABLE": "Нет команд, добавленных в этот аккаунт.", - "ASSIGN_SELECTED_TEAMS": "Назначить выбранную команду.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Вы уверены, что вы хотите назначить разговор {n} для {teamName}? | Вы уверены, что хотите назначить {n} разговоры {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Вы уверены, что хотите отменить назначение разговора {n}? | Вы уверены, что хотите отменить назначение разговоров {n}?", "ASSIGN_SUCCESFUL": "Команды успешно назначены.", diff --git a/app/javascript/dashboard/i18n/locale/ru/campaign.json b/app/javascript/dashboard/i18n/locale/ru/campaign.json index 68671933d..4d76c5abc 100644 --- a/app/javascript/dashboard/i18n/locale/ru/campaign.json +++ b/app/javascript/dashboard/i18n/locale/ru/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Обрабатывается", "COMPLETED": "Выполнено", "SCHEDULED": "Запланировано" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Обрабатывается", "COMPLETED": "Выполнено", "SCHEDULED": "Запланировано" }, diff --git a/app/javascript/dashboard/i18n/locale/ru/components.json b/app/javascript/dashboard/i18n/locale/ru/components.json index e6970f6ba..398276901 100644 --- a/app/javascript/dashboard/i18n/locale/ru/components.json +++ b/app/javascript/dashboard/i18n/locale/ru/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/ru/contact.json b/app/javascript/dashboard/i18n/locale/ru/contact.json index 10c51cf98..49645ea4b 100644 --- a/app/javascript/dashboard/i18n/locale/ru/contact.json +++ b/app/javascript/dashboard/i18n/locale/ru/contact.json @@ -20,6 +20,8 @@ "CALL": "Вызов", "CALL_INITIATED": "Вызов контакта…", "CALL_FAILED": "Не удалось начать вызов. Повторите попытку.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Выберите голосовую почту" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Назначить метки", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Метки успешно назначены.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "Выбрано {count}", diff --git a/app/javascript/dashboard/i18n/locale/ru/conversation.json b/app/javascript/dashboard/i18n/locale/ru/conversation.json index 88faa9870..a868b746d 100644 --- a/app/javascript/dashboard/i18n/locale/ru/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ru/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "Это сообщение не поддерживается. Вы можете просмотреть это сообщение в приложении Facebook Messenger.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "Это сообщение не поддерживается. Вы можете просмотреть это сообщение в приложении Instagram.", "UNSUPPORTED_MESSAGE_TIKTOK": "Это сообщение не поддерживается. Вы можете просмотреть это сообщение в приложении TikTok.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Сообщение успешно удалено", "FAIL_DELETE_MESSSAGE": "Не удалось удалить сообщение! Попробуйте еще раз", "NO_RESPONSE": "Нет ответа", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Исходящий звонок", "CALL_IN_PROGRESS": "Идёт звонок", "NO_ANSWER": "Нет ответа", + "NO_ANSWER_OUTBOUND_LABEL": "Нет ответа", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Контакт не взял трубку", "MISSED_CALL": "Пропущенный звонок", + "MISSED_CALL_INBOUND_SUBTEXT": "Агенты не взяли трубку", + "MISSED_CALL_DECLINED_BY": "Агент {agentName} отменил звонок", "CALL_ENDED": "Звонок завершен", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Пока нет ответа", + "CALLING": "Звонок…", "THEY_ANSWERED": "Они ответили", "YOU_ANSWERED": "Вы ответили", "AGENT_ANSWERED": "{agentName} ответил", - "JOIN_CALL": "Присоединиться к звонку" + "JOIN_CALL": "Присоединиться к звонку", + "CALL_BACK": "Перезвонить", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Показать меньше" }, "HEADER": { "RESOLVE_ACTION": "Завершить", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Отложено до завтра", "SNOOZED_UNTIL_NEXT_WEEK": "Отложено до следующей недели", "SNOOZED_UNTIL_NEXT_REPLY": "Отложить до следующего ответа", + "WHATSAPP_CALL": "Начать звонок WhatsApp", + "WHATSAPP_CALL_FAILED": "Не удалось начать вызов Whatsapp.", + "VOICE_CALL": "Начать звонок", + "VOICE_CALL_FAILED": "Не получается начать звонок.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Запросите разрешение на звонок у контакта. Попробуйте снова после получения разрешения.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Запросите разрешение на звонок у контакта. Попробуйте снова после получения разрешения.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Записать аудио", "TIP_AUDIORECORDER_PERMISSION": "Разрешить доступ к аудио", "TIP_AUDIORECORDER_ERROR": "Не удалось открыть аудио", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Перетащите сюда, чтобы прикрепить", "START_AUDIO_RECORDING": "Начать запись аудио", "STOP_AUDIO_RECORDING": "Остановить запись аудио", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Пока нет ответа", "HANDLED_IN_ANOTHER_TAB": "Обрабатывается в другой вкладке", "REJECT_CALL": "Отклонить", + "DISMISS_CALL": "Отклонить", "JOIN_CALL": "Присоединиться к звонку", - "END_CALL": "Завершить звонок" + "END_CALL": "Завершить звонок", + "MUTE": "Выключить микрофон", + "UNMUTE": "Включить микрофон", + "VIEW_CHAT_HISTORY": "Посмотреть историю чата", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/ru/helpCenter.json b/app/javascript/dashboard/i18n/locale/ru/helpCenter.json index 34fffd4a7..25f82d516 100644 --- a/app/javascript/dashboard/i18n/locale/ru/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ru/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Черновик", "ARCHIVE": "Архив", "TRANSLATE": "Перевести", + "MOVE_TO_CATEGORY": "Категория", "DELETE": "Удалить", "STATUS_SUCCESS": "Статьи успешно обновлены", "STATUS_ERROR": "Ошибка обновления статей", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Удаление статьи | Удалить статьи {count}", "DELETE_CONFIRM_DESCRIPTION": "Это действие будет окончательно удалено выбранной статьи. Это действие не может быть отменено. | Это действие будет окончательно удалено {count} выбранных статей. Это действие нельзя отменить.", "DELETE_CONFIRM": "Удалить", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Изменить конфигурацию" }, + "LAYOUT_CONTENT": { + "HEADER": "Образец", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Удалить" + }, + "SAVE": "Сохранить изменения" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Портал создан успешно", diff --git a/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json index 2aede55ea..0f10f4684 100644 --- a/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Аутентификация с помощью Meta", "WAITING_FOR_BUSINESS_INFO": "Пожалуйста, завершите настройку бизнеса в окне Meta...", "PROCESSING": "Настройте свой WhatsApp Business аккаунт", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Загрузка Facebook SDK...", "CANCELLED": "Регистрация WhatsApp была отменена", "SUCCESS_TITLE": "Аккаунт WhatsApp Business был подключен!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Аутентификация не завершена. Пожалуйста, перезапустите процесс.", "SUCCESS_FALLBACK": "Аккаунт WhatsApp Business был успешно настроен", "MANUAL_FALLBACK": "Если ваш номер уже подключен к WhatsApp Business Platform (API), или, если вы используете технологический провайдер, используйте ссылку {link} ", - "MANUAL_LINK_TEXT": "для ручной настройки" + "MANUAL_LINK_TEXT": "для ручной настройки", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Не удалось сохранить канал WhatsApp" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Поддержка ваших клиентов через WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp звонок", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "Подключить Gmail, Outlook, или других провайдеров" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Конфигурация бота", "ACCOUNT_HEALTH": "Здоровье аккаунта", "CSAT": "CSAT", - "VOICE": "Голосовая связь" + "VOICE": "Голосовая связь", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Голосовой вызов требует учетные данные Twilio API Key. Они используются для генерации токенов для голосовых подключений агентов." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "Мы хотели бы позвонить Вам по поводу Вашего разговора." + } + }, "CHANNEL_PREFERENCES": "Настройки канала", "WIDGET_FEATURES": "Функции виджета", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Вручную синхронизируйте шаблоны сообщений из WhatsApp, чтобы обновить доступные шаблоны.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Синхронизировать шаблоны", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Синхронизация шаблонов успешно запущена. Обновление может занять несколько минут.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Обновить настройки формы для чата" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/ru/integrations.json b/app/javascript/dashboard/i18n/locale/ru/integrations.json index 297b87453..c58f87d1c 100644 --- a/app/javascript/dashboard/i18n/locale/ru/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ru/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Контакт создан", "CONTACT_UPDATED": "Контакт обновлен", "CONVERSATION_TYPING_ON": "Печатание во время разговора включено", - "CONVERSATION_TYPING_OFF": "Печатание во время разговора выключено" + "CONVERSATION_TYPING_OFF": "Печатание во время разговора выключено", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/sh/bulkActions.json b/app/javascript/dashboard/i18n/locale/sh/bulkActions.json index 58bac30cb..35d913852 100644 --- a/app/javascript/dashboard/i18n/locale/sh/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/sh/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "Nijedan", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select team", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/sh/campaign.json b/app/javascript/dashboard/i18n/locale/sh/campaign.json index 10366e79e..78db922d1 100644 --- a/app/javascript/dashboard/i18n/locale/sh/campaign.json +++ b/app/javascript/dashboard/i18n/locale/sh/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/sh/components.json b/app/javascript/dashboard/i18n/locale/sh/components.json index a75d35b08..3ee865a89 100644 --- a/app/javascript/dashboard/i18n/locale/sh/components.json +++ b/app/javascript/dashboard/i18n/locale/sh/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/sh/contact.json b/app/javascript/dashboard/i18n/locale/sh/contact.json index aedc7728c..79bd872b9 100644 --- a/app/javascript/dashboard/i18n/locale/sh/contact.json +++ b/app/javascript/dashboard/i18n/locale/sh/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/sh/conversation.json b/app/javascript/dashboard/i18n/locale/sh/conversation.json index 3d4f2573b..0fdac9cd5 100644 --- a/app/javascript/dashboard/i18n/locale/sh/conversation.json +++ b/app/javascript/dashboard/i18n/locale/sh/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Poruka uspešno obrisana", "FAIL_DELETE_MESSSAGE": "Nije moguće obrisati poruku! Pokušajte ponovo", "NO_RESPONSE": "Nema odgovora", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Reši", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Odloženo do sutra", "SNOOZED_UNTIL_NEXT_WEEK": "Odloženo do sledeće nedelje", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Prevucite ovde za dodavanje", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/sh/helpCenter.json b/app/javascript/dashboard/i18n/locale/sh/helpCenter.json index e555aac69..2afac34aa 100644 --- a/app/javascript/dashboard/i18n/locale/sh/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/sh/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Nacrt", "ARCHIVE": "Arhiviraj", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Delete", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Delete", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Ukloni" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal created successfully", diff --git a/app/javascript/dashboard/i18n/locale/sh/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sh/inboxMgmt.json index c4c5cc769..bdee453dc 100644 --- a/app/javascript/dashboard/i18n/locale/sh/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sh/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Autentifikacija s Meta", "WAITING_FOR_BUSINESS_INFO": "Molimo dovršite postavljanje poslovanja u Meta prozoru...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Autentifikacija nije dovršena. Molimo ponovno pokrenite proces.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "postupak ručne postavke" + "MANUAL_LINK_TEXT": "postupak ručne postavke", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "E-pošta", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Konfiguracija bota", "ACCOUNT_HEALTH": "Zdravlje računa", "CSAT": "CSAT", - "VOICE": "Glas" + "VOICE": "Glas", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Postavke kanala", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/sh/integrations.json b/app/javascript/dashboard/i18n/locale/sh/integrations.json index d8fe9fa2f..788ef8e5a 100644 --- a/app/javascript/dashboard/i18n/locale/sh/integrations.json +++ b/app/javascript/dashboard/i18n/locale/sh/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Kontakt kreiran", "CONTACT_UPDATED": "Kontakt ažuriran", "CONVERSATION_TYPING_ON": "Tipkanje u razgovoru uključeno", - "CONVERSATION_TYPING_OFF": "Tipkanje u razgovoru isključeno" + "CONVERSATION_TYPING_OFF": "Tipkanje u razgovoru isključeno", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/sk/bulkActions.json b/app/javascript/dashboard/i18n/locale/sk/bulkActions.json index 45e2b9fc2..d181aa2fc 100644 --- a/app/javascript/dashboard/i18n/locale/sk/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/sk/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Vybrať agenta", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "Žiadne", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "Žiadne označenia neboli nájdené", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Vybrať tím", "NONE": "Žiadne", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/sk/campaign.json b/app/javascript/dashboard/i18n/locale/sk/campaign.json index 93742a3c6..de2ec67dd 100644 --- a/app/javascript/dashboard/i18n/locale/sk/campaign.json +++ b/app/javascript/dashboard/i18n/locale/sk/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/sk/components.json b/app/javascript/dashboard/i18n/locale/sk/components.json index 1e6f15a8f..745fbcc13 100644 --- a/app/javascript/dashboard/i18n/locale/sk/components.json +++ b/app/javascript/dashboard/i18n/locale/sk/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/sk/contact.json b/app/javascript/dashboard/i18n/locale/sk/contact.json index d2cbf5d42..b8efbaaca 100644 --- a/app/javascript/dashboard/i18n/locale/sk/contact.json +++ b/app/javascript/dashboard/i18n/locale/sk/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/sk/conversation.json b/app/javascript/dashboard/i18n/locale/sk/conversation.json index 8607defca..8010f662d 100644 --- a/app/javascript/dashboard/i18n/locale/sk/conversation.json +++ b/app/javascript/dashboard/i18n/locale/sk/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Správa bola úspešne odstránená", "FAIL_DELETE_MESSSAGE": "Správu sa nepodarilo vymazať! Skúste to znova", "NO_RESPONSE": "Žiadna odpoveď", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Vyriešiť", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Odložené do zajtra", "SNOOZED_UNTIL_NEXT_WEEK": "Odložené do ďalšieho týždňa", "SNOOZED_UNTIL_NEXT_REPLY": "Odložené do ďalšej odpovede", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Potiahnite sem na pripojenie", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/sk/helpCenter.json b/app/javascript/dashboard/i18n/locale/sk/helpCenter.json index add2d5e48..b2a0d3f9b 100644 --- a/app/javascript/dashboard/i18n/locale/sk/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/sk/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Draft", "ARCHIVE": "Archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Vymazať", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Vymazať", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Remove" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal created successfully", diff --git a/app/javascript/dashboard/i18n/locale/sk/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sk/inboxMgmt.json index 6bedff0ac..9c13e2903 100644 --- a/app/javascript/dashboard/i18n/locale/sk/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sk/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot Configuration", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/sk/integrations.json b/app/javascript/dashboard/i18n/locale/sk/integrations.json index 20e07960d..23f8b1acf 100644 --- a/app/javascript/dashboard/i18n/locale/sk/integrations.json +++ b/app/javascript/dashboard/i18n/locale/sk/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact created", "CONTACT_UPDATED": "Contact updated", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/sl/bulkActions.json b/app/javascript/dashboard/i18n/locale/sl/bulkActions.json index 2472a9288..6b922bc7b 100644 --- a/app/javascript/dashboard/i18n/locale/sl/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/sl/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "None", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select team", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/sl/campaign.json b/app/javascript/dashboard/i18n/locale/sl/campaign.json index 3c1294a86..cc14ec839 100644 --- a/app/javascript/dashboard/i18n/locale/sl/campaign.json +++ b/app/javascript/dashboard/i18n/locale/sl/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Obdelava", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Obdelava", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/sl/components.json b/app/javascript/dashboard/i18n/locale/sl/components.json index e330bd328..3f07c73f5 100644 --- a/app/javascript/dashboard/i18n/locale/sl/components.json +++ b/app/javascript/dashboard/i18n/locale/sl/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/sl/contact.json b/app/javascript/dashboard/i18n/locale/sl/contact.json index 63b9a388a..268130bc3 100644 --- a/app/javascript/dashboard/i18n/locale/sl/contact.json +++ b/app/javascript/dashboard/i18n/locale/sl/contact.json @@ -20,6 +20,8 @@ "CALL": "Pokliči", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Klica ni bilo mogoče začeti. Poskusite znova.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Izberi glasovni predal" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Dodeli oznake", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Oznake so bile uspešno dodeljene.", "ASSIGN_LABELS_FAILED": "Dodeljevanje oznak ni uspelo", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Izberite oznake, ki jih želite dodati izbranim stikom.", "NO_LABELS_FOUND": "Še ni na voljo nobenih oznak.", "SELECTED_COUNT": "{count} izbranih", diff --git a/app/javascript/dashboard/i18n/locale/sl/conversation.json b/app/javascript/dashboard/i18n/locale/sl/conversation.json index 31c410270..ee8ab9116 100644 --- a/app/javascript/dashboard/i18n/locale/sl/conversation.json +++ b/app/javascript/dashboard/i18n/locale/sl/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", "NO_RESPONSE": "No response", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Resolve", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Drag and drop here to attach", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/sl/helpCenter.json b/app/javascript/dashboard/i18n/locale/sl/helpCenter.json index b32e9e99d..61e1b5ba2 100644 --- a/app/javascript/dashboard/i18n/locale/sl/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/sl/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Osnutek", "ARCHIVE": "Arhiviraj", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Kategorija", "DELETE": "Delete", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Delete", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Uredi konfiguracijo" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Odstrani" + }, + "SAVE": "Shrani spremembe" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal je bil uspešno ustvarjen", diff --git a/app/javascript/dashboard/i18n/locale/sl/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sl/inboxMgmt.json index 4285f543d..9b5579c29 100644 --- a/app/javascript/dashboard/i18n/locale/sl/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sl/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Avtorizacija pri Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Nastavljam vaš WhatsApp poslovni račun", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "Registracija WhatsApp je bila preklicana", "SUCCESS_TITLE": "Poslovni račun WhatsApp je povezan!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "Če je vaša številka že povezana s platformo WhatsApp Business (API), ali če ste tehnični ponudnik, ki vključuje svojo številko, uporabite {link} postopek", - "MANUAL_LINK_TEXT": "ročni postopek nastavitve" + "MANUAL_LINK_TEXT": "ročni postopek nastavitve", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Nismo mogli shraniti WhatsApp kanala" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Podprite svoje stranke na WhatsAppu" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "E-pošta", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot Configuration", "ACCOUNT_HEALTH": "Zdravje računa", "CSAT": "CSAT", - "VOICE": "Glas" + "VOICE": "Glas", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Nastavitve kanala", "WIDGET_FEATURES": "Funkcije pripomočka", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Ročno sinhronizirajte predloge sporočil iz WhatsApp, da posodobite razpoložljive predloge.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sinhroniziraj predloge", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Sinhronizacija predlog uspešno začeta. Posodobitev lahko traja nekaj minut.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Posodobi nastavitve obrazca pred klepetom" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/sl/integrations.json b/app/javascript/dashboard/i18n/locale/sl/integrations.json index 5f43707c2..245860920 100644 --- a/app/javascript/dashboard/i18n/locale/sl/integrations.json +++ b/app/javascript/dashboard/i18n/locale/sl/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Kontakt ustvarjen", "CONTACT_UPDATED": "Kontakt posodobljen", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/sq/bulkActions.json b/app/javascript/dashboard/i18n/locale/sq/bulkActions.json index 2472a9288..6b922bc7b 100644 --- a/app/javascript/dashboard/i18n/locale/sq/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/sq/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "None", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select team", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/sq/campaign.json b/app/javascript/dashboard/i18n/locale/sq/campaign.json index d4785a15e..f975f37a3 100644 --- a/app/javascript/dashboard/i18n/locale/sq/campaign.json +++ b/app/javascript/dashboard/i18n/locale/sq/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Në përpunim", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Në përpunim", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/sq/components.json b/app/javascript/dashboard/i18n/locale/sq/components.json index 2ca971a95..e34fb408a 100644 --- a/app/javascript/dashboard/i18n/locale/sq/components.json +++ b/app/javascript/dashboard/i18n/locale/sq/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/sq/contact.json b/app/javascript/dashboard/i18n/locale/sq/contact.json index 97ca50b75..521d69672 100644 --- a/app/javascript/dashboard/i18n/locale/sq/contact.json +++ b/app/javascript/dashboard/i18n/locale/sq/contact.json @@ -20,6 +20,8 @@ "CALL": "Telefono", "CALL_INITIATED": "Duke thirrur kontaktin…", "CALL_FAILED": "Nuk mund të fillohet thirrja. Ju lutemi provoni përsëri.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Zgjidhni një inbox të zërit" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Cakto Etiketa", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Etiketat u caktuan me sukses.", "ASSIGN_LABELS_FAILED": "Dështoi caktimi i etiketave", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Zgjidhni etiketat që dëshironi të shtoni te kontaktet e zgjedhura.", "NO_LABELS_FOUND": "Nuk ka etiketa të disponueshme ende.", "SELECTED_COUNT": "{count} i/e zgjedhur", diff --git a/app/javascript/dashboard/i18n/locale/sq/conversation.json b/app/javascript/dashboard/i18n/locale/sq/conversation.json index 8c9d27da0..593b6413b 100644 --- a/app/javascript/dashboard/i18n/locale/sq/conversation.json +++ b/app/javascript/dashboard/i18n/locale/sq/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", "NO_RESPONSE": "No response", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Zgjidh", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Drag and drop here to attach", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/sq/helpCenter.json b/app/javascript/dashboard/i18n/locale/sq/helpCenter.json index 28dc8b141..507ee7945 100644 --- a/app/javascript/dashboard/i18n/locale/sq/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/sq/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Draft", "ARCHIVE": "Arkivo", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Delete", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Delete", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Ndrysho konfigurimin" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Hiq" + }, + "SAVE": "Ruaj ndryshimet" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portali u krijua me sukses", diff --git a/app/javascript/dashboard/i18n/locale/sq/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sq/inboxMgmt.json index d460526c3..d28896636 100644 --- a/app/javascript/dashboard/i18n/locale/sq/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sq/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Ju lutem përfundoni konfigurimin e biznesit në dritaren Meta...", "PROCESSING": "Po konfigurohet llogaria juaj e biznesit në WhatsApp", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "procesi i konfigurimit manual" + "MANUAL_LINK_TEXT": "procesi i konfigurimit manual", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Konfigurimi i Botit", "ACCOUNT_HEALTH": "Shëndeti i Llogarisë", "CSAT": "CSAT", - "VOICE": "Zë" + "VOICE": "Zë", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Preferencat e kanalit", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sinkronizo shabllonet", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Sinkronizimi i modeleve u nis me sukses. Mund të duhen disa minuta për t'u përditësuar.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Përditëso Cilësimet e Formularit Para Bisedës" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/sq/integrations.json b/app/javascript/dashboard/i18n/locale/sq/integrations.json index 0140c428b..21eac5300 100644 --- a/app/javascript/dashboard/i18n/locale/sq/integrations.json +++ b/app/javascript/dashboard/i18n/locale/sq/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Kontakti u krijua", "CONTACT_UPDATED": "Kontakti u përditësua", "CONVERSATION_TYPING_ON": "Shkrimi në bisedë aktiv", - "CONVERSATION_TYPING_OFF": "Shkrimi në bisedë i çaktivizuar" + "CONVERSATION_TYPING_OFF": "Shkrimi në bisedë i çaktivizuar", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/sr/bulkActions.json b/app/javascript/dashboard/i18n/locale/sr/bulkActions.json index 216988dd9..2d07d490f 100644 --- a/app/javascript/dashboard/i18n/locale/sr/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/sr/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} razgovora je izabrano", - "AGENT_SELECT_LABEL": "Izaberite agenta", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Povratak", - "ASSIGN_LABEL": "Dodeli", "NONE": "Niko", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Razgovor je uspešno rešen.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Jedino razgovori na ovoj stranici su izabrani.", - "AGENT_LIST_LOADING": "Učitavanje agenata", "UPDATE": { "CHANGE_STATUS": "Promeni status", "SNOOZE_UNTIL": "Odloži", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "Oznake nisu pronađene", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Dodeli izabrane oznake", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Oznake su uspešno dodeljene.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Izaberite tim", "NONE": "Niko", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/sr/campaign.json b/app/javascript/dashboard/i18n/locale/sr/campaign.json index 29771b645..f54200b25 100644 --- a/app/javascript/dashboard/i18n/locale/sr/campaign.json +++ b/app/javascript/dashboard/i18n/locale/sr/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Završeno", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Završeno", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/sr/components.json b/app/javascript/dashboard/i18n/locale/sr/components.json index 9d0c49978..e56bc100d 100644 --- a/app/javascript/dashboard/i18n/locale/sr/components.json +++ b/app/javascript/dashboard/i18n/locale/sr/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/sr/contact.json b/app/javascript/dashboard/i18n/locale/sr/contact.json index c07b3d008..734ee43a3 100644 --- a/app/javascript/dashboard/i18n/locale/sr/contact.json +++ b/app/javascript/dashboard/i18n/locale/sr/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Dodeli oznake", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Oznake su uspešno dodeljene.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/sr/conversation.json b/app/javascript/dashboard/i18n/locale/sr/conversation.json index 571b96db3..c1e8dc3b5 100644 --- a/app/javascript/dashboard/i18n/locale/sr/conversation.json +++ b/app/javascript/dashboard/i18n/locale/sr/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Poruka je uspešno obrisana", "FAIL_DELETE_MESSSAGE": "Nije bilo moguće obrisati poruku! Pokušajte ponovo", "NO_RESPONSE": "Nema odgovora", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Reši", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Odloženo do sutra", "SNOOZED_UNTIL_NEXT_WEEK": "Odloženo do sledeće nedelje", "SNOOZED_UNTIL_NEXT_REPLY": "Odloženo do sledećeg odgovora", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Snimi zvuk", "TIP_AUDIORECORDER_PERMISSION": "Dozvoli pristup zvuku", "TIP_AUDIORECORDER_ERROR": "Nije moguće pristupiti zvuku", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Prevuci i pusti za dodavanje", "START_AUDIO_RECORDING": "Pokreni snimanje zvuka", "STOP_AUDIO_RECORDING": "Zaustavi snimanje zvuka", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/sr/helpCenter.json b/app/javascript/dashboard/i18n/locale/sr/helpCenter.json index ccedf07f6..698732737 100644 --- a/app/javascript/dashboard/i18n/locale/sr/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/sr/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Nacrt", "ARCHIVE": "Archive", "TRANSLATE": "Prevedi", + "MOVE_TO_CATEGORY": "Kategorija", "DELETE": "Izbriši", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Izbriši", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Ukloni" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal je uspešno napravljen", diff --git a/app/javascript/dashboard/i18n/locale/sr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sr/inboxMgmt.json index a237f2498..b0e2bb5b3 100644 --- a/app/javascript/dashboard/i18n/locale/sr/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sr/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Nisamo uspeli da sačuvamo WhatsApp kanal" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "E-pošta", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot Configuration", "ACCOUNT_HEALTH": "Account Health", "CSAT": "Izveštaj o zadovoljstvu", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/sr/integrations.json b/app/javascript/dashboard/i18n/locale/sr/integrations.json index 657873708..e6008c006 100644 --- a/app/javascript/dashboard/i18n/locale/sr/integrations.json +++ b/app/javascript/dashboard/i18n/locale/sr/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact created", "CONTACT_UPDATED": "Contact updated", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/sv/bulkActions.json b/app/javascript/dashboard/i18n/locale/sv/bulkActions.json index 96331b821..871c0b15b 100644 --- a/app/javascript/dashboard/i18n/locale/sv/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/sv/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Välj agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Tilldela", "NONE": "None", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "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": "Laddar agenter", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooza", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "Inga etiketter hittades", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Välj team", "NONE": "Inget", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/sv/campaign.json b/app/javascript/dashboard/i18n/locale/sv/campaign.json index aee8889d3..6fa6f7da1 100644 --- a/app/javascript/dashboard/i18n/locale/sv/campaign.json +++ b/app/javascript/dashboard/i18n/locale/sv/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/sv/components.json b/app/javascript/dashboard/i18n/locale/sv/components.json index b39180a8c..3b1812c65 100644 --- a/app/javascript/dashboard/i18n/locale/sv/components.json +++ b/app/javascript/dashboard/i18n/locale/sv/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/sv/contact.json b/app/javascript/dashboard/i18n/locale/sv/contact.json index 99e96c3ca..0479bb741 100644 --- a/app/javascript/dashboard/i18n/locale/sv/contact.json +++ b/app/javascript/dashboard/i18n/locale/sv/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/sv/conversation.json b/app/javascript/dashboard/i18n/locale/sv/conversation.json index ff9b46845..479b23707 100644 --- a/app/javascript/dashboard/i18n/locale/sv/conversation.json +++ b/app/javascript/dashboard/i18n/locale/sv/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "Detta meddelande stöds inte. Du kan se detta meddelande på Facebook Messenger-appen.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "Detta meddelande stöds inte. Du kan se detta meddelande på Instagram-appen.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Meddelandet har tagits bort", "FAIL_DELETE_MESSSAGE": "Det gick inte att ta bort meddelande! Försök igen", "NO_RESPONSE": "Inget svar", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Lös", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozad till imorgon", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozad till nästa vecka", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozad till nästa svar", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Spela in ljud", "TIP_AUDIORECORDER_PERMISSION": "Tillåt åtkomst till ljud", "TIP_AUDIORECORDER_ERROR": "Kunde inte öppna ljudet", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Dra och släpp hit för att bifoga", "START_AUDIO_RECORDING": "Starta ljudinspelning", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/sv/helpCenter.json b/app/javascript/dashboard/i18n/locale/sv/helpCenter.json index ff65f5e76..cd66d0342 100644 --- a/app/javascript/dashboard/i18n/locale/sv/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/sv/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Draft", "ARCHIVE": "Archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Radera", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Radera", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Radera" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal created successfully", diff --git a/app/javascript/dashboard/i18n/locale/sv/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/sv/inboxMgmt.json index 141d0840d..c14066d02 100644 --- a/app/javascript/dashboard/i18n/locale/sv/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sv/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Vi kunde inte spara WhatsApp-kanalen" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "E-post", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot Configuration", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/sv/integrations.json b/app/javascript/dashboard/i18n/locale/sv/integrations.json index 7a4853244..e3043a81f 100644 --- a/app/javascript/dashboard/i18n/locale/sv/integrations.json +++ b/app/javascript/dashboard/i18n/locale/sv/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact created", "CONTACT_UPDATED": "Contact updated", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/ta/bulkActions.json b/app/javascript/dashboard/i18n/locale/ta/bulkActions.json index cdea2cfd6..b81bb2d9f 100644 --- a/app/javascript/dashboard/i18n/locale/ta/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/ta/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "None", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select team", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/ta/campaign.json b/app/javascript/dashboard/i18n/locale/ta/campaign.json index 98a6844f9..e67aced19 100644 --- a/app/javascript/dashboard/i18n/locale/ta/campaign.json +++ b/app/javascript/dashboard/i18n/locale/ta/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/ta/components.json b/app/javascript/dashboard/i18n/locale/ta/components.json index 25fc68896..6cb105c26 100644 --- a/app/javascript/dashboard/i18n/locale/ta/components.json +++ b/app/javascript/dashboard/i18n/locale/ta/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/ta/contact.json b/app/javascript/dashboard/i18n/locale/ta/contact.json index b94d18cee..2521f0c04 100644 --- a/app/javascript/dashboard/i18n/locale/ta/contact.json +++ b/app/javascript/dashboard/i18n/locale/ta/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/ta/conversation.json b/app/javascript/dashboard/i18n/locale/ta/conversation.json index 1a0061fbf..43c7937d0 100644 --- a/app/javascript/dashboard/i18n/locale/ta/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ta/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", "NO_RESPONSE": "No response", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "தீர்", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Drag and drop here to attach", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/ta/helpCenter.json b/app/javascript/dashboard/i18n/locale/ta/helpCenter.json index 825348f9f..91537b04c 100644 --- a/app/javascript/dashboard/i18n/locale/ta/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ta/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Draft", "ARCHIVE": "Archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Delete", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Delete", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "நீக்கு" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal created successfully", diff --git a/app/javascript/dashboard/i18n/locale/ta/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ta/inboxMgmt.json index ee4d87f6e..c3fcf92ef 100644 --- a/app/javascript/dashboard/i18n/locale/ta/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ta/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "WhatsApp சேனல் சேமிக்க முடியவில்லை" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "இமெயில்", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "பாட் அமைப்பு", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "முன் உரையாடல் படிவ அமைப்புகளை புதுப்பிக்கவும்" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/ta/integrations.json b/app/javascript/dashboard/i18n/locale/ta/integrations.json index a5d2e5131..33909fe59 100644 --- a/app/javascript/dashboard/i18n/locale/ta/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ta/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "தொடர்பு உருவாக்கப்பட்டது", "CONTACT_UPDATED": "தொடர்பு புதுப்பிக்கப்பட்டது", "CONVERSATION_TYPING_ON": "உரையாடல் தட்டச்சு செய்கிறது", - "CONVERSATION_TYPING_OFF": "உரையாடல் தட்டச்சு நிறுத்தப்பட்டது" + "CONVERSATION_TYPING_OFF": "உரையாடல் தட்டச்சு நிறுத்தப்பட்டது", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/th/bulkActions.json b/app/javascript/dashboard/i18n/locale/th/bulkActions.json index 45ea549ad..b38995c02 100644 --- a/app/javascript/dashboard/i18n/locale/th/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/th/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "เลือกพนักงาน", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "มอบหมาย", "NONE": "ไม่มี", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "ไม่พบหัวข้อ", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "เลือกทีม", "NONE": "ไม่มี", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/th/campaign.json b/app/javascript/dashboard/i18n/locale/th/campaign.json index 8f3156023..cdd373e50 100644 --- a/app/javascript/dashboard/i18n/locale/th/campaign.json +++ b/app/javascript/dashboard/i18n/locale/th/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "เสร็จสิ้น", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "เสร็จสิ้น", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/th/components.json b/app/javascript/dashboard/i18n/locale/th/components.json index 56ab9c8a8..9676ff802 100644 --- a/app/javascript/dashboard/i18n/locale/th/components.json +++ b/app/javascript/dashboard/i18n/locale/th/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/th/contact.json b/app/javascript/dashboard/i18n/locale/th/contact.json index ddfe7705a..da9b4d480 100644 --- a/app/javascript/dashboard/i18n/locale/th/contact.json +++ b/app/javascript/dashboard/i18n/locale/th/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/th/conversation.json b/app/javascript/dashboard/i18n/locale/th/conversation.json index 508b03c04..e0bb4d12e 100644 --- a/app/javascript/dashboard/i18n/locale/th/conversation.json +++ b/app/javascript/dashboard/i18n/locale/th/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "ลบข้อความสำเร็จเเล้ว", "FAIL_DELETE_MESSSAGE": "ไม่สามารถลบข้อความได้ โปรดลองใหม่อีกครั้ง", "NO_RESPONSE": "ไม่มีการตอบกลับ", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "เสร็จสิ้น", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "พักการสนทนาจนถึงพรุ่งนี้", "SNOOZED_UNTIL_NEXT_WEEK": "พักการสนทนาจนถึงสัปดาห์หน้า", "SNOOZED_UNTIL_NEXT_REPLY": "พักการสนทนาจนกว่าจะมีการตอบกลับถัดไป", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "บันทึกเสียง", "TIP_AUDIORECORDER_PERMISSION": "ให้สิทธิ์เข้าถึงการใช้งานเสียง", "TIP_AUDIORECORDER_ERROR": "ไม่สามารถเปิดการใช้งานเสียงได้", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "ลากเเละปล่อยที่นี่เพื่อเพิ่ม", "START_AUDIO_RECORDING": "เริ่มบันทึกเสียง", "STOP_AUDIO_RECORDING": "หยุดบันทึกเสียง", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/th/helpCenter.json b/app/javascript/dashboard/i18n/locale/th/helpCenter.json index 5d1004d82..2a30dd993 100644 --- a/app/javascript/dashboard/i18n/locale/th/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/th/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "โครงร่าง", "ARCHIVE": "Archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "ลบ", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "ลบ", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "ลบรูปภาพ" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal created successfully", diff --git a/app/javascript/dashboard/i18n/locale/th/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/th/inboxMgmt.json index 20e77be9e..89660ba78 100644 --- a/app/javascript/dashboard/i18n/locale/th/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/th/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "เราไม่สามารถบันทึกช่องทาง WhatsApp ได้" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "อีเมล์", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot Configuration", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/th/integrations.json b/app/javascript/dashboard/i18n/locale/th/integrations.json index 9ab2c2f21..ef4dd7a8c 100644 --- a/app/javascript/dashboard/i18n/locale/th/integrations.json +++ b/app/javascript/dashboard/i18n/locale/th/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact created", "CONTACT_UPDATED": "Contact updated", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/tl/bulkActions.json b/app/javascript/dashboard/i18n/locale/tl/bulkActions.json index 2472a9288..6b922bc7b 100644 --- a/app/javascript/dashboard/i18n/locale/tl/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/tl/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "None", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select team", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/tl/campaign.json b/app/javascript/dashboard/i18n/locale/tl/campaign.json index 10366e79e..afbc9423d 100644 --- a/app/javascript/dashboard/i18n/locale/tl/campaign.json +++ b/app/javascript/dashboard/i18n/locale/tl/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Pinoproseso", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Pinoproseso", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/tl/components.json b/app/javascript/dashboard/i18n/locale/tl/components.json index a75d35b08..3ee865a89 100644 --- a/app/javascript/dashboard/i18n/locale/tl/components.json +++ b/app/javascript/dashboard/i18n/locale/tl/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/tl/contact.json b/app/javascript/dashboard/i18n/locale/tl/contact.json index 59d189bdb..398a1e751 100644 --- a/app/javascript/dashboard/i18n/locale/tl/contact.json +++ b/app/javascript/dashboard/i18n/locale/tl/contact.json @@ -20,6 +20,8 @@ "CALL": "Tawagan", "CALL_INITIATED": "Tinutawagan ang kontak…", "CALL_FAILED": "Hindi masimulan ang tawag. Pakisubukang muli.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Pumili ng voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Magtalaga ng mga label", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Matagumpay na naitalaga ang mga label.", "ASSIGN_LABELS_FAILED": "Nabigong italaga ang mga label", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Piliin ang mga label na nais mong idagdag sa mga napiling contact.", "NO_LABELS_FOUND": "Walang magagamit na mga label pa.", "SELECTED_COUNT": "{count} napili", diff --git a/app/javascript/dashboard/i18n/locale/tl/conversation.json b/app/javascript/dashboard/i18n/locale/tl/conversation.json index bce62180c..b8dd7852f 100644 --- a/app/javascript/dashboard/i18n/locale/tl/conversation.json +++ b/app/javascript/dashboard/i18n/locale/tl/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", "NO_RESPONSE": "Walang tugon", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Tapusin", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Drag and drop here to attach", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/tl/helpCenter.json b/app/javascript/dashboard/i18n/locale/tl/helpCenter.json index c0b43025f..744e14c70 100644 --- a/app/javascript/dashboard/i18n/locale/tl/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/tl/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Burador", "ARCHIVE": "I-archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Delete", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Delete", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "I-edit ang configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Alisin" + }, + "SAVE": "I-save ang mga pagbabago" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Matagumpay na nalikha ang portal", diff --git a/app/javascript/dashboard/i18n/locale/tl/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/tl/inboxMgmt.json index 3c4981932..8cb35d098 100644 --- a/app/javascript/dashboard/i18n/locale/tl/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/tl/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Nag-a-authenticate sa Meta", "WAITING_FOR_BUSINESS_INFO": "Pakipunan ang setup ng negosyo sa Meta window...", "PROCESSING": "Isinasagawa ang pagsasaayos ng iyong WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Naglo-load ng Facebook SDK...", "CANCELLED": "Kinansela ang WhatsApp Signup", "SUCCESS_TITLE": "Nakakonekta na ang WhatsApp Business Account!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Hindi natapos ang authentication. Pakisubukang muli ang proseso.", "SUCCESS_FALLBACK": "Matagumpay na na-configure ang WhatsApp Business Account", "MANUAL_FALLBACK": "Kung ang iyong numero ay konektado na sa WhatsApp Business Platform (API), o kung ikaw ay isang tech provider na nag-o-onboard ng sarili mong numero, mangyaring gamitin ang {link} flow", - "MANUAL_LINK_TEXT": "manwal na setup flow" + "MANUAL_LINK_TEXT": "manwal na setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Hindi namin naisave ang WhatsApp channel" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Suportahan ang iyong mga customer sa WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "Ikonekta gamit ang Gmail, Outlook, o iba pang provider" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Pag-configure ng Bot", "ACCOUNT_HEALTH": "Kalusugan ng Account", "CSAT": "CSAT", - "VOICE": "Boses" + "VOICE": "Boses", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Mga Kagustuhan sa Channel", "WIDGET_FEATURES": "Mga tampok ng widget", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manu-manong i-sync ang mga message template mula sa WhatsApp upang i-update ang iyong mga available na template.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "I-sync ang Mga Template", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Matagumpay na sinimulan ang pag-sync ng mga template. Maaaring tumagal ng ilang minuto bago ma-update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "I-update ang Mga Setting ng Pre Chat Form" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/tl/integrations.json b/app/javascript/dashboard/i18n/locale/tl/integrations.json index a65d144d6..1306dd923 100644 --- a/app/javascript/dashboard/i18n/locale/tl/integrations.json +++ b/app/javascript/dashboard/i18n/locale/tl/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Nalikha ang kontak", "CONTACT_UPDATED": "Na-update ang contact", "CONVERSATION_TYPING_ON": "Nagsusulat sa Pag-uusap On", - "CONVERSATION_TYPING_OFF": "Nagsusulat sa Pag-uusap Off" + "CONVERSATION_TYPING_OFF": "Nagsusulat sa Pag-uusap Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/tr/bulkActions.json b/app/javascript/dashboard/i18n/locale/tr/bulkActions.json index 9c63f1b8a..3b8d4ad7a 100644 --- a/app/javascript/dashboard/i18n/locale/tr/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/tr/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} konuşma seçildi", - "AGENT_SELECT_LABEL": "Temsilci seçin", - "ASSIGN_CONFIRMATION_LABEL": "{conversationCount} {conversationLabel} atanacak. Emin misiniz?", - "UNASSIGN_CONFIRMATION_LABEL": "{conversationCount} {conversationLabel} atanmamış yapılacak. Emin misiniz?", - "GO_BACK_LABEL": "Geri git", - "ASSIGN_LABEL": "Atama yap", "NONE": "Hiç", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Görüşmeler başarıyla çözüldü.", "RESOLVE_FAILED": "Görüşmeler çözülürken bir hata oluştu. Lütfen tekrar deneyin.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Bu sayfada yalnızca seçili konuşmalar gösterilmektedir.", - "AGENT_LIST_LOADING": "Temsilciler Yükleniyor", "UPDATE": { "CHANGE_STATUS": "Durumu değiştir", "SNOOZE_UNTIL": "Sustur", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Etiket atama", - "NO_LABELS_FOUND": "Etiket bulunamadı", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Seçili etiketleri atama", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Etiketler başarıyla atandı.", - "ASSIGN_FAILED": "Etiketler atanırken bir hata oluştu. Lütfen tekrar deneyin." + "ASSIGN_FAILED": "Etiketler atanırken bir hata oluştu. Lütfen tekrar deneyin.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Takım seçin", "NONE": "Hiçbiri", - "NO_TEAMS_AVAILABLE": "Bu hesaba henüz eklenmiş takımlar yok.", - "ASSIGN_SELECTED_TEAMS": "Seçili takımları atama", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/tr/campaign.json b/app/javascript/dashboard/i18n/locale/tr/campaign.json index 58f9100e6..2e52a88a3 100644 --- a/app/javascript/dashboard/i18n/locale/tr/campaign.json +++ b/app/javascript/dashboard/i18n/locale/tr/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "İşleniyor", "COMPLETED": "Tamamlandı", "SCHEDULED": "Planlanmış" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "İşleniyor", "COMPLETED": "Tamamlandı", "SCHEDULED": "Planlanmış" }, diff --git a/app/javascript/dashboard/i18n/locale/tr/components.json b/app/javascript/dashboard/i18n/locale/tr/components.json index f9fcb5680..ff66b351b 100644 --- a/app/javascript/dashboard/i18n/locale/tr/components.json +++ b/app/javascript/dashboard/i18n/locale/tr/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/tr/contact.json b/app/javascript/dashboard/i18n/locale/tr/contact.json index acabd8a54..481e09958 100644 --- a/app/javascript/dashboard/i18n/locale/tr/contact.json +++ b/app/javascript/dashboard/i18n/locale/tr/contact.json @@ -20,6 +20,8 @@ "CALL": "Ara", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Sesli gelen kutusu seçin" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Etiketler başarıyla atandı.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/tr/conversation.json b/app/javascript/dashboard/i18n/locale/tr/conversation.json index 0ddb7f6c2..9ed15c840 100644 --- a/app/javascript/dashboard/i18n/locale/tr/conversation.json +++ b/app/javascript/dashboard/i18n/locale/tr/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "Bu mesaj desteklenmiyor. Bu mesajı Facebook Messenger uygulamasında görüntüleyebilirsiniz.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "Bu mesaj desteklenmiyor. Bu mesajı Instagram uygulamasında görüntüleyebilirsiniz.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Mesaj başarıyla silindi", "FAIL_DELETE_MESSSAGE": "Mesaj silinemiyor. Tekrar deneyin", "NO_RESPONSE": "Cevap Yok", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Giden arama", "CALL_IN_PROGRESS": "Arama devam ediyor", "NO_ANSWER": "Yanıt yok", + "NO_ANSWER_OUTBOUND_LABEL": "Yanıt yok", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Cevapsız arama", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Arama sona erdi", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Henüz yanıtlanmadı", + "CALLING": "Calling…", "THEY_ANSWERED": "Onlar yanıtladı", "YOU_ANSWERED": "Siz yanıtladınız", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Çözüldü", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "yarına ertelendi", "SNOOZED_UNTIL_NEXT_WEEK": "Önümüzdeki haftaya ertelendi", "SNOOZED_UNTIL_NEXT_REPLY": "Bir sonraki yanıta kadar ertelendi", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Ses kaydet", "TIP_AUDIORECORDER_PERMISSION": "Mikrofon erişimine izin ver", "TIP_AUDIORECORDER_ERROR": "Mikrofon açılamadı", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Eklemek için buraya sürükleyip bırakın", "START_AUDIO_RECORDING": "Ses kaydına başla", "STOP_AUDIO_RECORDING": "Ses kaydını durdur", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Henüz yanıtlanmadı", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Kapat", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/tr/helpCenter.json b/app/javascript/dashboard/i18n/locale/tr/helpCenter.json index 7acf118f8..d962faee8 100644 --- a/app/javascript/dashboard/i18n/locale/tr/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/tr/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Taslak", "ARCHIVE": "Arşiv", "TRANSLATE": "Çevir", + "MOVE_TO_CATEGORY": "Kategori", "DELETE": "Sil", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Sil", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Görünüm", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Kaldır" + }, + "SAVE": "Değişiklikleri Kaydet" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal başarıyla oluşturuldu", diff --git a/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json index 8515fdddb..b22148386 100644 --- a/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Meta ile kimlik doğrulama", "WAITING_FOR_BUSINESS_INFO": "Lütfen Meta penceresinde işletme kurulumunu tamamlayın...", "PROCESSING": "WhatsApp Business Hesabınızı kurma", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Facebook SDK yükleniyor...", "CANCELLED": "WhatsApp Kaydı iptal edildi", "SUCCESS_TITLE": "WhatsApp Business Hesabı Bağlandı!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Kimlik doğrulama tamamlanmadı. Lütfen işlemi yeniden başlatın.", "SUCCESS_FALLBACK": "WhatsApp Business Hesabı başarıyla yapılandırıldı", "MANUAL_FALLBACK": "Numaranız zaten WhatsApp Business Platformuna (API) bağlıysa veya kendi numaranızı ekleyen bir teknoloji sağlayıcısıysanız, lütfen {link} akışını kullanın", - "MANUAL_LINK_TEXT": "manuel kurulum akışı" + "MANUAL_LINK_TEXT": "manuel kurulum akışı", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "WhatsApp kanalını kaydedemedik" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Müşterilerinize WhatsApp üzerinden destek sağlayın" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "E-Posta", "DESCRIPTION": "Gmail, Outlook veya diğer sağlayıcılarla bağlantı kurun" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot Yapılandırma", "ACCOUNT_HEALTH": "Hesap Sağlığı", "CSAT": "CSAT", - "VOICE": "Ses" + "VOICE": "Ses", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "WhatsApp'tan mesaj şablonlarını manuel olarak senkronize ederek mevcut şablonlarınızı güncelleyin.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Şablonları Senkronize Et", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Şablon senkronizasyonu başarıyla başlatıldı. Güncellenmesi birkaç dakika sürebilir.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Sohbet Öncesi Form Ayarlarını Güncelleme" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/tr/integrations.json b/app/javascript/dashboard/i18n/locale/tr/integrations.json index 5e8214448..483bf0ae4 100644 --- a/app/javascript/dashboard/i18n/locale/tr/integrations.json +++ b/app/javascript/dashboard/i18n/locale/tr/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Kişi Oluşturuldu", "CONTACT_UPDATED": "Kişi Güncellendi", "CONVERSATION_TYPING_ON": "Konuşmada Yazıyor Açık", - "CONVERSATION_TYPING_OFF": "Konuşmada Yazıyor Kapalı" + "CONVERSATION_TYPING_OFF": "Konuşmada Yazıyor Kapalı", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/uk/bulkActions.json b/app/javascript/dashboard/i18n/locale/uk/bulkActions.json index 7d52b4336..425847d6a 100644 --- a/app/javascript/dashboard/i18n/locale/uk/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/uk/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "Обрано {conversationCount} розмов", - "AGENT_SELECT_LABEL": "Виберіть агента", - "ASSIGN_CONFIRMATION_LABEL": "Ви впевнені, що хочете призначити {conversationCount} {conversationLabel} до", - "UNASSIGN_CONFIRMATION_LABEL": "Ви впевнені, що хочете скасувати призначення {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Повернутися назад", - "ASSIGN_LABEL": "Призначити", "NONE": "Нічого", "CLEAR_SELECTION": "Очистити", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Ви впевнені, що хочете призначити {n} діалог агенту {agentName}? | Ви впевнені, що хочете призначити {n} діалогів агенту {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Розмови успішно закриті.", "RESOLVE_FAILED": "Не вдалося закрити розмови, будь ласка, спробуйте ще раз.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Розмови, які відображаються на цій сторінці, обрані.", - "AGENT_LIST_LOADING": "Завантаження агентів", "UPDATE": { "CHANGE_STATUS": "Змінити статус", "SNOOZE_UNTIL": "Відкласти", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Призначити мітки", - "NO_LABELS_FOUND": "Міток не знайдено", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Призначити вибрані мітки", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Мітки додано успішно.", - "ASSIGN_FAILED": "Не вдалося призначити мітки, будь ласка, спробуйте ще раз." + "ASSIGN_FAILED": "Не вдалося призначити мітки, будь ласка, спробуйте ще раз.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Виберіть команду", "NONE": "Нiчого", - "NO_TEAMS_AVAILABLE": "Цей акаунт ще не доданий до жодної команди.", - "ASSIGN_SELECTED_TEAMS": "Призначити обрану команду.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Ви впевнені, що хочете призначити {n} діалог команді {teamName}? | Ви впевнені, що хочете призначити {n} діалогів команді {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Ви впевнені, що хочете відкріпити {n} діалог? | Ви впевнені, що хочете відкріпити {n} діалогів?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/uk/campaign.json b/app/javascript/dashboard/i18n/locale/uk/campaign.json index 77a5cb6b5..fc382830e 100644 --- a/app/javascript/dashboard/i18n/locale/uk/campaign.json +++ b/app/javascript/dashboard/i18n/locale/uk/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Завершено", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Завершено", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/uk/components.json b/app/javascript/dashboard/i18n/locale/uk/components.json index b6be5d520..7725b1d7c 100644 --- a/app/javascript/dashboard/i18n/locale/uk/components.json +++ b/app/javascript/dashboard/i18n/locale/uk/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/uk/contact.json b/app/javascript/dashboard/i18n/locale/uk/contact.json index bcf717055..6b3e14fce 100644 --- a/app/javascript/dashboard/i18n/locale/uk/contact.json +++ b/app/javascript/dashboard/i18n/locale/uk/contact.json @@ -20,6 +20,8 @@ "CALL": "Дзвінок", "CALL_INITIATED": "Викликаємо контакт…", "CALL_FAILED": "Не можливо розпочати виклик. Будь ласка, спробуйте пізніше.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Оберіть голосову теку" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Призначити мітки", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Мітки додано успішно.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/uk/conversation.json b/app/javascript/dashboard/i18n/locale/uk/conversation.json index 67078b5ef..d73463852 100644 --- a/app/javascript/dashboard/i18n/locale/uk/conversation.json +++ b/app/javascript/dashboard/i18n/locale/uk/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "Це повідомлення не підтримується. Ви можете переглянути це повідомлення у додатку Facebook Messenger", "UNSUPPORTED_MESSAGE_INSTAGRAM": "Це повідомлення не підтримується. Ви можете переглянути це повідомлення у додатку Instagram.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Повідомлення успішно видалено", "FAIL_DELETE_MESSSAGE": "Не вдалося видалити повідомлення! Спробуйте ще раз", "NO_RESPONSE": "Немає відповіді", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Доєднатися до виклику" + "JOIN_CALL": "Доєднатися до виклику", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Вирішити", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Відкладено до завтра", "SNOOZED_UNTIL_NEXT_WEEK": "Відкладено до наступного тижня", "SNOOZED_UNTIL_NEXT_REPLY": "Відкладено до наступної відповіді", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Записати аудіо", "TIP_AUDIORECORDER_PERMISSION": "Надати доступ до аудіо", "TIP_AUDIORECORDER_ERROR": "Не вдалося відкрити аудіо", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Перетягніть сюди, щоб прикріпити", "START_AUDIO_RECORDING": "Почати аудіозапис", "STOP_AUDIO_RECORDING": "Зупинити аудіозапис", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Оброблюється в іншій вкладці", "REJECT_CALL": "Відхилити", + "DISMISS_CALL": "Відхилити", "JOIN_CALL": "Доєднатися до виклику", - "END_CALL": "Завершити виклик" + "END_CALL": "Завершити виклик", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/uk/helpCenter.json b/app/javascript/dashboard/i18n/locale/uk/helpCenter.json index 481633b52..afdaf5429 100644 --- a/app/javascript/dashboard/i18n/locale/uk/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/uk/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Чернетка", "ARCHIVE": "Archive", "TRANSLATE": "Перекласти", + "MOVE_TO_CATEGORY": "Категорія", "DELETE": "Видалити", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Видалити", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Оформлення", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Видалити" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Портал успішно створено", diff --git a/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json index 1095cc585..7744f4086 100644 --- a/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Ми не змогли зберегти канал WhatsApp" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Налаштування бота", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Оновити параметри форми чату" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/uk/integrations.json b/app/javascript/dashboard/i18n/locale/uk/integrations.json index e757374e7..47dbe3596 100644 --- a/app/javascript/dashboard/i18n/locale/uk/integrations.json +++ b/app/javascript/dashboard/i18n/locale/uk/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Контакт створено", "CONTACT_UPDATED": "Контакт оновлено", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/ur/bulkActions.json b/app/javascript/dashboard/i18n/locale/ur/bulkActions.json index 4c0b3c814..b29f61328 100644 --- a/app/javascript/dashboard/i18n/locale/ur/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/ur/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "ایجنٹ منتخب کریں۔", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "None", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "کوئی لیبل نہیں ملے", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "ٹیم منتخب کریں۔", "NONE": "کوئی نہیں۔", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/ur/campaign.json b/app/javascript/dashboard/i18n/locale/ur/campaign.json index 19ce5145d..20b61806c 100644 --- a/app/javascript/dashboard/i18n/locale/ur/campaign.json +++ b/app/javascript/dashboard/i18n/locale/ur/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/ur/components.json b/app/javascript/dashboard/i18n/locale/ur/components.json index f4e30558b..3e2cf157a 100644 --- a/app/javascript/dashboard/i18n/locale/ur/components.json +++ b/app/javascript/dashboard/i18n/locale/ur/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/ur/contact.json b/app/javascript/dashboard/i18n/locale/ur/contact.json index bc5c59ec0..332eb01a4 100644 --- a/app/javascript/dashboard/i18n/locale/ur/contact.json +++ b/app/javascript/dashboard/i18n/locale/ur/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/ur/conversation.json b/app/javascript/dashboard/i18n/locale/ur/conversation.json index 5c99eb959..4be843ba0 100644 --- a/app/javascript/dashboard/i18n/locale/ur/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ur/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "پیغام کامیابی سے حذف ہو گیا۔", "FAIL_DELETE_MESSSAGE": "پیغام کو حذف نہیں کیا جا سکا! دوبارہ کوشش کریں", "NO_RESPONSE": "کوئی ردعمل نہیں", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "حل کریں۔", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Drag and drop here to attach", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/ur/helpCenter.json b/app/javascript/dashboard/i18n/locale/ur/helpCenter.json index cc0aa10a1..529f4983f 100644 --- a/app/javascript/dashboard/i18n/locale/ur/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ur/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Draft", "ARCHIVE": "Archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "حذف کریں۔", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "حذف کریں۔", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Remove" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Portal created successfully", diff --git a/app/javascript/dashboard/i18n/locale/ur/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ur/inboxMgmt.json index 5d27e5a6a..592705323 100644 --- a/app/javascript/dashboard/i18n/locale/ur/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ur/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Bot Configuration", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/ur/integrations.json b/app/javascript/dashboard/i18n/locale/ur/integrations.json index 48ecc3941..00294e4e7 100644 --- a/app/javascript/dashboard/i18n/locale/ur/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ur/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact created", "CONTACT_UPDATED": "Contact updated", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/bulkActions.json b/app/javascript/dashboard/i18n/locale/ur_IN/bulkActions.json index 2472a9288..6b922bc7b 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign {conversationCount} {conversationLabel} to", - "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", "NONE": "None", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", "SNOOZE_UNTIL": "Snooze", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "No labels found", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Assign selected labels", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Labels assigned successfully.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select team", "NONE": "None", - "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/campaign.json b/app/javascript/dashboard/i18n/locale/ur_IN/campaign.json index 10366e79e..71615e4a2 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/campaign.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "عملدرآمد ہو رہا ہے", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "عملدرآمد ہو رہا ہے", "COMPLETED": "Completed", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/components.json b/app/javascript/dashboard/i18n/locale/ur_IN/components.json index a75d35b08..3ee865a89 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/components.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/contact.json b/app/javascript/dashboard/i18n/locale/ur_IN/contact.json index 36074609c..a45e3518d 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/contact.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Assign Labels", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Labels assigned successfully.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/conversation.json b/app/javascript/dashboard/i18n/locale/ur_IN/conversation.json index e28213805..740d1aedb 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", "NO_RESPONSE": "No response", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Resolve", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Record audio", "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Drag and drop here to attach", "START_AUDIO_RECORDING": "Start audio recording", "STOP_AUDIO_RECORDING": "Stop audio recording", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/helpCenter.json b/app/javascript/dashboard/i18n/locale/ur_IN/helpCenter.json index 817b3347d..9f1c8c03d 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "مسودہ", "ARCHIVE": "محفوظ کریں", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Category", "DELETE": "Delete", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Delete", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "ترتیب میں ترمیم کریں" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "ہٹائیں" + }, + "SAVE": "تبدیلیاں محفوظ کریں" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "پورٹل کامیابی سے بنایا گیا", diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ur_IN/inboxMgmt.json index 18a18c3a1..a6f9ead24 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "میٹا کے ساتھ تصدیق ہو رہی ہے", "WAITING_FOR_BUSINESS_INFO": "براہ کرم میٹا ونڈو میں بزنس سیٹ اپ مکمل کریں...", "PROCESSING": "آپ کا واٹس ایپ بزنس اکاؤنٹ سیٹ اپ کیا جا رہا ہے", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Facebook SDK لوڈ ہو رہا ہے...", "CANCELLED": "واٹس ایپ سائن اپ منسوخ کر دیا گیا", "SUCCESS_TITLE": "واٹس ایپ بزنس اکاؤنٹ کنیکٹ ہو گیا!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "تصدیق مکمل نہیں ہوئی۔ براہ کرم عمل دوبارہ شروع کریں۔", "SUCCESS_FALLBACK": "واٹس ایپ بزنس اکاؤنٹ کامیابی سے ترتیب دیا گیا ہے", "MANUAL_FALLBACK": "اگر آپ کا نمبر پہلے ہی واٹس ایپ بزنس پلیٹ فارم (API) سے منسلک ہے، یا اگر آپ ایک ٹیک فراہم کنندہ ہیں جو اپنا نمبر آن بورڈ کر رہے ہیں، تو براہ کرم {link} فلو استعمال کریں", - "MANUAL_LINK_TEXT": "دستی سیٹ اپ کا عمل" + "MANUAL_LINK_TEXT": "دستی سیٹ اپ کا عمل", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "ہم WhatsApp چینل محفوظ کرنے میں ناکام رہے" @@ -465,6 +467,10 @@ "TITLE": "واٹس ایپ", "DESCRIPTION": "اپنے صارفین کی واٹس ایپ پر مدد کریں" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "ای میل", "DESCRIPTION": "Gmail، Outlook، یا دیگر فراہم کنندگان کے ساتھ کنیکٹ کریں" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "بوٹ کی ترتیب", "ACCOUNT_HEALTH": "اکاؤنٹ کی صحت", "CSAT": "CSAT", - "VOICE": "وائس" + "VOICE": "وائس", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "اپنے دستیاب ٹیمپلیٹس کو اپ ڈیٹ کرنے کے لیے واٹس ایپ سے میسج ٹیمپلیٹس کو دستی طور پر ہم آہنگ کریں۔", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "ٹیمپلیٹس کو ہم آہنگ کریں", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "ٹیمپلیٹس کی ہم آہنگی کامیابی سے شروع ہو گئی ہے۔ اپ ڈیٹ ہونے میں چند منٹ لگ سکتے ہیں۔", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "پری چیٹ فارم کی ترتیبات کو اپ ڈیٹ کریں" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/integrations.json b/app/javascript/dashboard/i18n/locale/ur_IN/integrations.json index 30e847011..2b1e36338 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "رابطہ بنایا گیا", "CONTACT_UPDATED": "رابطہ اپ ڈیٹ ہوا", "CONVERSATION_TYPING_ON": "گفتگو میں ٹائپنگ آن", - "CONVERSATION_TYPING_OFF": "گفتگو میں ٹائپنگ آف" + "CONVERSATION_TYPING_OFF": "گفتگو میں ٹائپنگ آف", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/vi/bulkActions.json b/app/javascript/dashboard/i18n/locale/vi/bulkActions.json index 2a00f8304..e5f4b49b6 100644 --- a/app/javascript/dashboard/i18n/locale/vi/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/vi/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "{conversationCount} cuộc hội thoại đã được chọn", - "AGENT_SELECT_LABEL": "Chọn thành viên", - "ASSIGN_CONFIRMATION_LABEL": "Bạn có chắc chắn để chỉ định {conversationCount} {conversationLabel} tới", - "UNASSIGN_CONFIRMATION_LABEL": "Bạn có chắc chắn hủy chỉ định {conversationCount} {conversationLabel}?", - "GO_BACK_LABEL": "Trở về", - "ASSIGN_LABEL": "Gán", "NONE": "Không có", "CLEAR_SELECTION": "Clear", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "Cuộc hội thoại đã được giải quyết thành công.", "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Chỉ những cuộc hội thoại hiển thị trên trang này mới có thể được chọn.", - "AGENT_LIST_LOADING": "Đang tải điện thoại viên", "UPDATE": { "CHANGE_STATUS": "Thay đổi trạng thái", "SNOOZE_UNTIL": "Báo lại", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "Assign labels", - "NO_LABELS_FOUND": "Không tìm thấy nhãn", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "Gán các nhãn đã chọn", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "Các nhãn được gán thành công.", - "ASSIGN_FAILED": "Failed to assign labels. Please try again." + "ASSIGN_FAILED": "Failed to assign labels. Please try again.", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Chọn nhóm", "NONE": "Không có", - "NO_TEAMS_AVAILABLE": "Chưa có nhóm nào được thêm vào tài khoản này.", - "ASSIGN_SELECTED_TEAMS": "Chỉ định nhóm đã chọn.", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "Teams assigned successfully.", diff --git a/app/javascript/dashboard/i18n/locale/vi/campaign.json b/app/javascript/dashboard/i18n/locale/vi/campaign.json index 4db98e679..1fe5c47ad 100644 --- a/app/javascript/dashboard/i18n/locale/vi/campaign.json +++ b/app/javascript/dashboard/i18n/locale/vi/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Hoàn tất", "SCHEDULED": "Scheduled" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "Processing", "COMPLETED": "Hoàn tất", "SCHEDULED": "Scheduled" }, diff --git a/app/javascript/dashboard/i18n/locale/vi/components.json b/app/javascript/dashboard/i18n/locale/vi/components.json index 53dfdd0cc..b972cbb27 100644 --- a/app/javascript/dashboard/i18n/locale/vi/components.json +++ b/app/javascript/dashboard/i18n/locale/vi/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/vi/contact.json b/app/javascript/dashboard/i18n/locale/vi/contact.json index ef1825b41..aaaaaae94 100644 --- a/app/javascript/dashboard/i18n/locale/vi/contact.json +++ b/app/javascript/dashboard/i18n/locale/vi/contact.json @@ -20,6 +20,8 @@ "CALL": "Call", "CALL_INITIATED": "Calling the contact…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "Choose a voice inbox" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "Gán nhãn", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "Các nhãn được gán thành công.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} selected", diff --git a/app/javascript/dashboard/i18n/locale/vi/conversation.json b/app/javascript/dashboard/i18n/locale/vi/conversation.json index 5318c3979..ca100bb22 100644 --- a/app/javascript/dashboard/i18n/locale/vi/conversation.json +++ b/app/javascript/dashboard/i18n/locale/vi/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.", "UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "Tin nhắn được xoá thành công", "FAIL_DELETE_MESSSAGE": "Không thể xoá tin nhắn! Thử lại", "NO_RESPONSE": "Không có phản hồi", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "Outgoing call", "CALL_IN_PROGRESS": "Call in progress", "NO_ANSWER": "No answer", + "NO_ANSWER_OUTBOUND_LABEL": "No answer", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "Missed call", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "Call ended", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "Not answered yet", + "CALLING": "Calling…", "THEY_ANSWERED": "They answered", "YOU_ANSWERED": "You answered", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "Giải quyết", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "Tạm dừng đến ngày mai", "SNOOZED_UNTIL_NEXT_WEEK": "Tạm dừng đến tuần sau", "SNOOZED_UNTIL_NEXT_REPLY": "Tạm dừng đến khi có phản hồi", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "Ghi âm thanh", "TIP_AUDIORECORDER_PERMISSION": "Cho phép truy cập ghi âm", "TIP_AUDIORECORDER_ERROR": "Không thể mở bản ghi âm", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "Kéo thả vào đây để đính kèm", "START_AUDIO_RECORDING": "Bắt đầu ghi âm", "STOP_AUDIO_RECORDING": "Dừng ghi âm", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "Not answered yet", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "Dismiss", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/vi/helpCenter.json b/app/javascript/dashboard/i18n/locale/vi/helpCenter.json index 75bf9d415..944d5ede7 100644 --- a/app/javascript/dashboard/i18n/locale/vi/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/vi/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "Nháp", "ARCHIVE": "Archive", "TRANSLATE": "Translate", + "MOVE_TO_CATEGORY": "Loại", "DELETE": "Xoá", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "Xoá", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "Edit configuration" }, + "LAYOUT_CONTENT": { + "HEADER": "Appearance", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "Xoá" + }, + "SAVE": "Save changes" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "Cổng thông tin được tạo thành công", diff --git a/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json index 564b76168..00e15289a 100644 --- a/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "Loading Facebook SDK...", "CANCELLED": "WhatsApp Signup was cancelled", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "manual setup flow" + "MANUAL_LINK_TEXT": "manual setup flow", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "Chúng tôi không thể lưu kênh WhatsApp" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "Support your customers on WhatsApp" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "Connect with Gmail, Outlook, or other providers" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "Cấu hình Bot", "ACCOUNT_HEALTH": "Account Health", "CSAT": "CSAT", - "VOICE": "Voice" + "VOICE": "Voice", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "Sync Templates", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "Update Pre Chat Form Settings" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/vi/integrations.json b/app/javascript/dashboard/i18n/locale/vi/integrations.json index 48c1e236f..816b6d328 100644 --- a/app/javascript/dashboard/i18n/locale/vi/integrations.json +++ b/app/javascript/dashboard/i18n/locale/vi/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "Contact created", "CONTACT_UPDATED": "Contact updated", "CONVERSATION_TYPING_ON": "Conversation Typing On", - "CONVERSATION_TYPING_OFF": "Conversation Typing Off" + "CONVERSATION_TYPING_OFF": "Conversation Typing Off", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/bulkActions.json b/app/javascript/dashboard/i18n/locale/zh_CN/bulkActions.json index 14adf13b6..63b92acbe 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "已选择 {conversationCount} 个对话", - "AGENT_SELECT_LABEL": "选择客服代表", - "ASSIGN_CONFIRMATION_LABEL": "您确定要将 {conversationCount} 个 {conversationLabel} 分配给", - "UNASSIGN_CONFIRMATION_LABEL": "您确定要取消分配 {conversationCount} 个 {conversationLabel} 吗?", - "GO_BACK_LABEL": "返回", - "ASSIGN_LABEL": "分配", "NONE": "啥都没有", "CLEAR_SELECTION": "清除", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "成功将对话标记为已解决.", "RESOLVE_FAILED": "解决对话失败。请再试一次。", "ALL_CONVERSATIONS_SELECTED_ALERT": "仅选择了此页面上可见的对话。", - "AGENT_LIST_LOADING": "正在加载客服代表", "UPDATE": { "CHANGE_STATUS": "更改状态", "SNOOZE_UNTIL": "推迟", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "分配标签", - "NO_LABELS_FOUND": "未找到标签", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "分配指定的标签", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "已成功分配标签.", - "ASSIGN_FAILED": "分配标签失败。请再试一次。" + "ASSIGN_FAILED": "分配标签失败。请再试一次。", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "选择团队", "NONE": "啥都没有", - "NO_TEAMS_AVAILABLE": "此帐户尚未添加团队。", - "ASSIGN_SELECTED_TEAMS": "分配选定的团队。", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "团队分配成功。", diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/campaign.json b/app/javascript/dashboard/i18n/locale/zh_CN/campaign.json index 8e7527f36..96fdd5cc3 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/campaign.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "处理中", "COMPLETED": "已完成", "SCHEDULED": "已计划" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "处理中", "COMPLETED": "已完成", "SCHEDULED": "已计划" }, diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/components.json b/app/javascript/dashboard/i18n/locale/zh_CN/components.json index 1546eb740..fd09cdb84 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/components.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/contact.json b/app/javascript/dashboard/i18n/locale/zh_CN/contact.json index 478878853..8508692d5 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/contact.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/contact.json @@ -20,6 +20,8 @@ "CALL": "呼叫", "CALL_INITIATED": "正在接通…", "CALL_FAILED": "Unable to start the call. Please try again.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "Click to edit", "VOICE_INBOX_PICKER": { "TITLE": "选择一个语音收件箱" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "分配标签", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "已成功分配标签.", "ASSIGN_LABELS_FAILED": "Failed to assign labels", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "Select the labels you want to add to the selected contacts.", "NO_LABELS_FOUND": "No labels available yet.", "SELECTED_COUNT": "{count} 已选择", diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/conversation.json b/app/javascript/dashboard/i18n/locale/zh_CN/conversation.json index d5a2c792d..3ff4fdd2e 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/conversation.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "不支持此消息。您可以在 Facebook Messenger 应用上查看此消息。", "UNSUPPORTED_MESSAGE_INSTAGRAM": "不支持此消息。您可以在 Instagram 应用上查看此消息。", "UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "已成功删除消息", "FAIL_DELETE_MESSSAGE": "无法删除消息,请重试!", "NO_RESPONSE": "无响应", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "已拨出电话", "CALL_IN_PROGRESS": "呼叫进行中", "NO_ANSWER": "无应答", + "NO_ANSWER_OUTBOUND_LABEL": "无应答", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "未接来电", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "通话结束", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "尚未回复", + "CALLING": "Calling…", "THEY_ANSWERED": "对方已回复", "YOU_ANSWERED": "你已回复", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "Join call" + "JOIN_CALL": "Join call", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "已解决", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "推迟到明天", "SNOOZED_UNTIL_NEXT_WEEK": "推迟到下周", "SNOOZED_UNTIL_NEXT_REPLY": "推迟至下一个回复", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "第一响应时间 {status}", "NRT": "净响应时间 {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "录制音频", "TIP_AUDIORECORDER_PERMISSION": "允许访问音频", "TIP_AUDIORECORDER_ERROR": "无法打开音频", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "拖放到此处添加附件", "START_AUDIO_RECORDING": "开始录音", "STOP_AUDIO_RECORDING": "停止录音", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "尚未回复", "HANDLED_IN_ANOTHER_TAB": "Being handled in another tab", "REJECT_CALL": "Reject", + "DISMISS_CALL": "取消", "JOIN_CALL": "Join call", - "END_CALL": "End call" + "END_CALL": "End call", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/helpCenter.json b/app/javascript/dashboard/i18n/locale/zh_CN/helpCenter.json index 95700269f..adf8bdf07 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "草稿", "ARCHIVE": "归档", "TRANSLATE": "翻译", + "MOVE_TO_CATEGORY": "类别", "DELETE": "删除", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "删除", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "编辑配置" }, + "LAYOUT_CONTENT": { + "HEADER": "外观", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "删除" + }, + "SAVE": "保存更改" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "门户创建成功", diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json index 08ba76bfb..e29dd5cb9 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "Authenticating with Meta", "WAITING_FOR_BUSINESS_INFO": "Please complete business setup in the Meta window...", "PROCESSING": "Setting up your WhatsApp Business Account", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "加载 Facebook SDK...", "CANCELLED": "WhatsApp 注册已取消", "SUCCESS_TITLE": "WhatsApp Business Account Connected!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "Authentication not completed. Please restart the process.", "SUCCESS_FALLBACK": "WhatsApp Business Account has been successfully configured", "MANUAL_FALLBACK": "If your number is already connected to the WhatsApp Business Platform (API), or if you’re a tech provider onboarding your own number, please use the {link} flow", - "MANUAL_LINK_TEXT": "手动设置流程" + "MANUAL_LINK_TEXT": "手动设置流程", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "我们无法保存 WhatsApp 通道" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "在 WhatsApp 上回应您的客户" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "连接到 Gmail、Outlook,或其他提供商" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "机器人配置", "ACCOUNT_HEALTH": "Account Health", "CSAT": "客户满意度", - "VOICE": "语音" + "VOICE": "语音", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "Channel Preferences", "WIDGET_FEATURES": "Widget features", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "Manually sync message templates from WhatsApp to update your available templates.", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "同步模板", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "Templates sync initiated successfully. It may take a couple of minutes to update.", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "更新预聊天表单设置" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/integrations.json b/app/javascript/dashboard/i18n/locale/zh_CN/integrations.json index 8d40ea6ae..66191b450 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/integrations.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "联系人已创建", "CONTACT_UPDATED": "联系人已更新", "CONVERSATION_TYPING_ON": "对话输入开启", - "CONVERSATION_TYPING_OFF": "对话输入关闭" + "CONVERSATION_TYPING_OFF": "对话输入关闭", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/bulkActions.json b/app/javascript/dashboard/i18n/locale/zh_TW/bulkActions.json index 8600e1453..378f331c5 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/bulkActions.json @@ -1,11 +1,6 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "已選擇 {conversationCount} 個對話", - "AGENT_SELECT_LABEL": "選擇客服", - "ASSIGN_CONFIRMATION_LABEL": "您確定要將 {conversationCount} 個{conversationLabel}指派給", - "UNASSIGN_CONFIRMATION_LABEL": "您確定要取消指派 {conversationCount} 個{conversationLabel}嗎?", - "GO_BACK_LABEL": "返回", - "ASSIGN_LABEL": "指派", "NONE": "無", "CLEAR_SELECTION": "清除", "ASSIGN_AGENT_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {agentName}? | Are you sure you want to assign {n} conversations to {agentName}?", @@ -20,7 +15,6 @@ "RESOLVE_SUCCESFUL": "對話已成功標記為已解決。", "RESOLVE_FAILED": "解決對話失敗,請再試一次。", "ALL_CONVERSATIONS_SELECTED_ALERT": "僅選擇了此頁面上可見的對話。", - "AGENT_LIST_LOADING": "正在載入客服列表", "UPDATE": { "CHANGE_STATUS": "變更狀態", "SNOOZE_UNTIL": "擱置", @@ -33,16 +27,16 @@ }, "LABELS": { "ASSIGN_LABELS": "指派標籤", - "NO_LABELS_FOUND": "找不到標籤", + "REMOVE_LABELS": "Remove labels", "ASSIGN_SELECTED_LABELS": "指派已選標籤", + "REMOVE_SELECTED_LABELS": "Remove selected labels", "ASSIGN_SUCCESFUL": "標籤指派成功。", - "ASSIGN_FAILED": "指派標籤失敗,請再試一次。" + "ASSIGN_FAILED": "指派標籤失敗,請再試一次。", + "REMOVE_SUCCESFUL": "Labels removed successfully.", + "REMOVE_FAILED": "Failed to remove labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "選擇團隊", "NONE": "無", - "NO_TEAMS_AVAILABLE": "此帳戶尚未新增任何團隊。", - "ASSIGN_SELECTED_TEAMS": "指派已選團隊。", "ASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to assign {n} conversation to {teamName}? | Are you sure you want to assign {n} conversations to {teamName}?", "UNASSIGN_TEAM_CONFIRMATION_LABEL": "Are you sure you want to unassign {n} conversation? | Are you sure you want to unassign {n} conversations?", "ASSIGN_SUCCESFUL": "團隊指派成功。", diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/campaign.json b/app/javascript/dashboard/i18n/locale/zh_TW/campaign.json index 427bd03ee..1a3cb96b6 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/campaign.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/campaign.json @@ -88,6 +88,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "處理中", "COMPLETED": "已完成", "SCHEDULED": "已排程" }, @@ -146,6 +147,7 @@ }, "CARD": { "STATUS": { + "PROCESSING": "處理中", "COMPLETED": "已完成", "SCHEDULED": "已排程" }, diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/components.json b/app/javascript/dashboard/i18n/locale/zh_TW/components.json index 14834a200..1f5f39050 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/components.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/components.json @@ -63,6 +63,7 @@ "CODE": "Code", "BULLET_LIST": "Bullet List", "ORDERED_LIST": "Ordered List", - "TABLE": "Table" + "TABLE": "Table", + "IMAGE": "Image" } } diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/contact.json b/app/javascript/dashboard/i18n/locale/zh_TW/contact.json index 9b02b785b..a7848de4c 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/contact.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/contact.json @@ -20,6 +20,8 @@ "CALL": "通話", "CALL_INITIATED": "正在撥打聯絡人電話…", "CALL_FAILED": "無法撥打電話,請稍後再試。", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "CLICK_TO_EDIT": "點擊以編輯", "VOICE_INBOX_PICKER": { "TITLE": "選擇語音收件匣" @@ -583,8 +585,11 @@ }, "CONTACTS_BULK_ACTIONS": { "ASSIGN_LABELS": "指派標籤", + "REMOVE_LABELS": "Remove Labels", "ASSIGN_LABELS_SUCCESS": "標籤已成功指派。", "ASSIGN_LABELS_FAILED": "指派標籤失敗", + "REMOVE_LABELS_SUCCESS": "Labels removed successfully.", + "REMOVE_LABELS_FAILED": "Failed to remove labels", "DESCRIPTION": "選擇您要新增到所選聯絡人的標籤。", "NO_LABELS_FOUND": "尚無可用的標籤。", "SELECTED_COUNT": "已選取 {count} 個", diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/conversation.json b/app/javascript/dashboard/i18n/locale/zh_TW/conversation.json index 783c9a541..9501312d7 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/conversation.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/conversation.json @@ -62,6 +62,7 @@ "UNSUPPORTED_MESSAGE_FACEBOOK": "此訊息不受支援。您可以在 Facebook Messenger 應用程式中檢視此訊息。", "UNSUPPORTED_MESSAGE_INSTAGRAM": "此訊息不受支援。您可以在 Instagram 應用程式中檢視此訊息。", "UNSUPPORTED_MESSAGE_TIKTOK": "此訊息不受支援。您可以在 TikTok 應用程式中檢視此訊息。", + "UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.", "SUCCESS_DELETE_MESSAGE": "已成功刪除訊息", "FAIL_DELETE_MESSSAGE": "無法刪除訊息!請再試一次", "NO_RESPONSE": "無回應", @@ -79,13 +80,22 @@ "OUTGOING_CALL": "撥出電話", "CALL_IN_PROGRESS": "通話中", "NO_ANSWER": "未接聽", + "NO_ANSWER_OUTBOUND_LABEL": "未接聽", + "NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up", "MISSED_CALL": "未接來電", + "MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up", + "MISSED_CALL_DECLINED_BY": "Declined by {agentName}", "CALL_ENDED": "通話結束", + "HANDLED_BY": "Handled by {agentName}", "NOT_ANSWERED_YET": "尚未接聽", + "CALLING": "Calling…", "THEY_ANSWERED": "對方已接聽", "YOU_ANSWERED": "您已接聽", "AGENT_ANSWERED": "{agentName} answered", - "JOIN_CALL": "加入通話" + "JOIN_CALL": "加入通話", + "CALL_BACK": "Call back", + "TRANSCRIPT_SHOW_MORE": "Show more", + "TRANSCRIPT_SHOW_LESS": "Show less" }, "HEADER": { "RESOLVE_ACTION": "解決", @@ -100,6 +110,12 @@ "SNOOZED_UNTIL_TOMORROW": "延後至明天", "SNOOZED_UNTIL_NEXT_WEEK": "延後至下週", "SNOOZED_UNTIL_NEXT_REPLY": "延後至下次回覆", + "WHATSAPP_CALL": "Start WhatsApp call", + "WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.", + "VOICE_CALL": "Start call", + "VOICE_CALL_FAILED": "Could not start the call.", + "WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.", + "WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.", "SLA_STATUS": { "FRT": "FRT {status}", "NRT": "NRT {status}", @@ -215,6 +231,7 @@ "TIP_AUDIORECORDER_ICON": "錄製音訊", "TIP_AUDIORECORDER_PERMISSION": "允許存取音訊", "TIP_AUDIORECORDER_ERROR": "無法開啟音訊", + "AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.", "DRAG_DROP": "拖放至此處以附加檔案", "START_AUDIO_RECORDING": "開始錄音", "STOP_AUDIO_RECORDING": "停止錄音", @@ -299,8 +316,13 @@ "NOT_ANSWERED_YET": "尚未接聽", "HANDLED_IN_ANOTHER_TAB": "正在另一個分頁中處理", "REJECT_CALL": "拒接", + "DISMISS_CALL": "關閉", "JOIN_CALL": "加入通話", - "END_CALL": "結束通話" + "END_CALL": "結束通話", + "MUTE": "Mute mic", + "UNMUTE": "Unmute mic", + "VIEW_CHAT_HISTORY": "View chat history", + "GO_TO_CONVERSATION": "Go to conversation thread" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/helpCenter.json b/app/javascript/dashboard/i18n/locale/zh_TW/helpCenter.json index 5d68d982f..ca899905c 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/helpCenter.json @@ -607,9 +607,12 @@ "DRAFT": "草稿", "ARCHIVE": "封存", "TRANSLATE": "翻譯", + "MOVE_TO_CATEGORY": "類別", "DELETE": "刪除", "STATUS_SUCCESS": "Articles updated successfully", "STATUS_ERROR": "Failed to update articles", + "CATEGORY_SUCCESS": "Articles moved successfully", + "CATEGORY_ERROR": "Failed to move articles", "DELETE_CONFIRM_TITLE": "Delete article | Delete {count} articles", "DELETE_CONFIRM_DESCRIPTION": "This will permanently delete the selected article. This action cannot be undone. | This will permanently delete {count} selected articles. This action cannot be undone.", "DELETE_CONFIRM": "刪除", @@ -866,6 +869,28 @@ }, "EDIT_CONFIGURATION": "編輯設定" }, + "LAYOUT_CONTENT": { + "HEADER": "外觀", + "DESCRIPTION": "Pick the layout that fits how your visitors read.", + "LAYOUT": { + "CLASSIC": { + "TITLE": "Classic", + "DESCRIPTION": "A welcoming home page with search and featured topics." + }, + "SIDEBAR": { + "TITLE": "Documentation", + "DESCRIPTION": "Side-by-side navigation that keeps every guide a click away." + } + }, + "SOCIAL_LINKS": { + "HEADER": "Social links", + "DESCRIPTION": "Add the handle for each network and your help center builds the full link. Shown in the documentation layout footer.", + "PLACEHOLDER": "handle", + "ADD": "Add social link", + "REMOVE": "移除" + }, + "SAVE": "儲存變更" + }, "API": { "CREATE_PORTAL": { "SUCCESS_MESSAGE": "入口建立成功", diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/zh_TW/inboxMgmt.json index 49d0a5081..c21756e36 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/inboxMgmt.json @@ -308,6 +308,7 @@ "AUTH_PROCESSING": "正在透過 Meta 進行驗證", "WAITING_FOR_BUSINESS_INFO": "請在 Meta 視窗中完成商業設定...", "PROCESSING": "正在設定您的 WhatsApp Business 帳號", + "ENABLING_CALLING": "Enabling WhatsApp Calling on your number…", "LOADING_SDK": "正在載入 Facebook SDK...", "CANCELLED": "WhatsApp 註冊已取消", "SUCCESS_TITLE": "WhatsApp Business 帳號已連接!", @@ -317,7 +318,8 @@ "AUTH_NOT_COMPLETED": "驗證未完成。請重新開始流程。", "SUCCESS_FALLBACK": "WhatsApp Business 帳號已成功設定", "MANUAL_FALLBACK": "如果您的號碼已連接到 WhatsApp Business Platform(API),或者您是正在接入自己號碼的技術供應商,請使用 {link}", - "MANUAL_LINK_TEXT": "手動設定流程" + "MANUAL_LINK_TEXT": "手動設定流程", + "CALLING_ENABLE_FAILED": "Your WhatsApp inbox is ready, but voice calling couldn't be turned on — this number isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then turn calling on from the inbox's Calls settings." }, "API": { "ERROR_MESSAGE": "無法儲存 WhatsApp 頻道" @@ -465,6 +467,10 @@ "TITLE": "WhatsApp", "DESCRIPTION": "透過 WhatsApp 為客戶提供支援" }, + "WHATSAPP_CALL": { + "TITLE": "WhatsApp Call", + "DESCRIPTION": "Take voice calls on your WhatsApp number" + }, "EMAIL": { "TITLE": "Email", "DESCRIPTION": "連結 Gmail、Outlook 或其他供應商" @@ -637,7 +643,8 @@ "BOT_CONFIGURATION": "機器人設定", "ACCOUNT_HEALTH": "帳號健康狀態", "CSAT": "CSAT", - "VOICE": "語音" + "VOICE": "語音", + "CALLS": "Calls" }, "VOICE_CONFIGURATION": { "ENABLE_VOICE": { @@ -648,6 +655,26 @@ "DESCRIPTION": "Voice calling requires Twilio API Key credentials. These are used to generate tokens for agent voice connections." } }, + "WHATSAPP_CALLING": { + "ENABLE": { + "LABEL": "Enable WhatsApp Calling", + "DESCRIPTION": "Allow agents to receive and place WhatsApp Cloud calls on this inbox. Customers can call this business number directly from WhatsApp." + }, + "ENABLE_FAILED": "Voice calling couldn't be turned on for this number — it isn't enrolled in the WhatsApp Business Calling API yet. Reach out to Meta or your WhatsApp Business Solution Provider to onboard it, then try again.", + "PHONE_NUMBER": { + "LABEL": "Business phone number", + "HELP_TEXT": "WhatsApp number that customers will call." + }, + "HOW_IT_WORKS": { + "LABEL": "How it works", + "DESCRIPTION": "Calls are placed peer-to-peer between the agent's browser and Meta — no extra credentials are required. Make sure the agent's browser has microphone permission for this site." + }, + "PERMISSION_REQUEST_BODY": { + "LABEL": "Call permission request message", + "HELP_TEXT": "Shown to the contact when they haven't yet consented to receive calls. Leave blank to use the default.", + "PLACEHOLDER": "We would like to call you regarding your conversation." + } + }, "CHANNEL_PREFERENCES": "頻道偏好設定", "WIDGET_FEATURES": "小工具功能", "ACCOUNT_HEALTH": { @@ -800,6 +827,10 @@ "WHATSAPP_TEMPLATES_SYNC_SUBHEADER": "手動從 WhatsApp 同步訊息範本以更新可用範本。", "WHATSAPP_TEMPLATES_SYNC_BUTTON": "同步範本", "WHATSAPP_TEMPLATES_SYNC_SUCCESS": "範本同步已啟動。可能需要幾分鐘才能更新完成。", + "WHATSAPP_CALLING_ENABLED": { + "LABEL": "Enable voice calling", + "DESCRIPTION": "Allow agents to start and receive WhatsApp voice calls on this inbox. Available only on embedded-signup WhatsApp Cloud channels with calling permission granted by Meta." + }, "UPDATE_PRE_CHAT_FORM_SETTINGS": "更新聊天前表單設定" }, "HELP_CENTER": { diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/integrations.json b/app/javascript/dashboard/i18n/locale/zh_TW/integrations.json index 213268f07..ff9422d88 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/integrations.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/integrations.json @@ -57,7 +57,8 @@ "CONTACT_CREATED": "聯絡人已建立", "CONTACT_UPDATED": "聯絡人已更新", "CONVERSATION_TYPING_ON": "對話正在輸入", - "CONVERSATION_TYPING_OFF": "對話停止輸入" + "CONVERSATION_TYPING_OFF": "對話停止輸入", + "INBOX_UPDATED": "Inbox updated" } }, "NAME": { diff --git a/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfo.vue b/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfo.vue index a27b308b0..9cb6cea3d 100644 --- a/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfo.vue +++ b/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfo.vue @@ -188,7 +188,6 @@ export default { :status="contact.availability_status" :size="48" hide-offline-status - rounded-full />
diff --git a/app/javascript/dashboard/routes/dashboard/onboarding/Index.vue b/app/javascript/dashboard/routes/dashboard/onboarding/Index.vue index 592672462..3a1d65bc6 100644 --- a/app/javascript/dashboard/routes/dashboard/onboarding/Index.vue +++ b/app/javascript/dashboard/routes/dashboard/onboarding/Index.vue @@ -28,7 +28,7 @@ import { const { t } = useI18n(); const router = useRouter(); const store = useStore(); -const { accountId, currentAccount, updateAccount } = useAccount(); +const { accountId, currentAccount, finishOnboarding } = useAccount(); const { enabledLanguages } = useConfig(); const currentUser = useMapGetter('getCurrentUser'); @@ -195,6 +195,12 @@ const handleWebsiteEnter = () => { websiteInput.value?.blur(); }; +const normalizeWebsiteUrl = raw => { + const trimmed = (raw || '').trim(); + if (!trimmed) return ''; + return /^https?:\/\//i.test(trimmed) ? trimmed : `https://${trimmed}`; +}; + const handleSubmit = async () => { // Block submit while enrichment is still running so users can't bypass // the form with empty values — the controller would otherwise clear @@ -211,9 +217,27 @@ const handleSubmit = async () => { return; } + // Detect which enrichable fields the user actually edited *before* + // normalizing — otherwise an untouched auto-filled domain + // (acme.com -> https://acme.com) compares unequal against the raw snapshot + // and gets falsely reported as changed, skewing onboarding telemetry. + const init = initialValues.value; + const enrichableFields = { + website: website.value, + company_size: companySize.value, + industry: industry.value, + }; + const fieldsChanged = Object.entries(enrichableFields) + .filter(([key, val]) => val !== init[key]) + .map(([key]) => key); + + // Persist with a scheme so downstream consumers (Firecrawl, portal + // homepage_link) get a fully-qualified URL regardless of what the user typed. + website.value = normalizeWebsiteUrl(website.value); + isSubmitting.value = true; try { - await updateAccount({ + await finishOnboarding({ name: accountName.value, locale: locale.value, website: website.value, @@ -224,20 +248,11 @@ const handleSubmit = async () => { user_role: userRole.value, }); - const init = initialValues.value; - const enrichableFields = { - website: website.value, - company_size: companySize.value, - industry: industry.value, - }; - useTrack(ONBOARDING_EVENTS.ACCOUNT_DETAILS_COMPLETED, { has_enriched_data: Boolean( currentAccount.value?.custom_attributes?.brand_info ), - fields_changed: Object.entries(enrichableFields) - .filter(([key, val]) => val !== init[key]) - .map(([key]) => key), + fields_changed: fieldsChanged, user_role: userRole.value, company_size: companySize.value, industry: industry.value, diff --git a/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Facebook.vue b/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Facebook.vue index 39e0df818..d08c7e607 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Facebook.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Facebook.vue @@ -1,20 +1,16 @@