diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 92d7238d..ae2f7e02 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -4,11 +4,11 @@ class AccountsController < ApplicationController LOCALE_OPTIONS = { 'en-US' => 'English (United States)', 'en-GB' => 'English (United Kingdom)', - 'fr-FR' => 'French (France)', - 'es-ES' => 'Spanish (Spain)', - 'pt-PT' => 'Portuguese (Portugal)', - 'de-DE' => 'German (Germany)', - 'it-IT' => 'Italian (Italy)' + 'fr-FR' => 'Français', + 'es-ES' => 'Español', + 'pt-PT' => 'Português', + 'de-DE' => 'Deutsch', + 'it-IT' => 'Italiano' }.freeze before_action :load_account diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 4727550d..970c9d94 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -8,6 +8,7 @@ class ApplicationController < ActionController::Base check_authorization unless: :devise_controller? + before_action :set_locale before_action :sign_in_for_demo, if: -> { Docuseal.demo? } before_action :maybe_redirect_to_setup, unless: :signed_in? before_action :authenticate_user!, unless: :devise_controller? @@ -51,6 +52,17 @@ class ApplicationController < ActionController::Base private + def set_locale + I18n.locale = + if Rails.env.development? && params[:locale].present? + params[:locale] + elsif current_user && current_account.locale.present? + current_account.locale.to_sym + else + I18n.default_locale + end + end + def with_browser_locale(&) locale = params[:lang].presence locale ||= request.env['HTTP_ACCEPT_LANGUAGE'].to_s[BROWSER_LOCALE_REGEXP].to_s diff --git a/app/controllers/esign_settings_controller.rb b/app/controllers/esign_settings_controller.rb index bc739024..18a27da7 100644 --- a/app/controllers/esign_settings_controller.rb +++ b/app/controllers/esign_settings_controller.rb @@ -56,7 +56,7 @@ class EsignSettingsController < ApplicationController save_new_cert!(@encrypted_config, @cert_record) - redirect_to settings_esign_path, notice: I18n.t('certificate_has_been_successfully_added_') + redirect_to settings_esign_path, notice: I18n.t('certificate_has_been_successfully_added') rescue OpenSSL::PKCS12::PKCS12Error => e Rollbar.error(e) if defined?(Rollbar) diff --git a/app/javascript/application.js b/app/javascript/application.js index bdc4d93d..8434e415 100644 --- a/app/javascript/application.js +++ b/app/javascript/application.js @@ -150,7 +150,8 @@ safeRegisterElement('import-list', class extends HTMLElement { this.app = createApp(ImportList, { template: JSON.parse(this.dataset.template), multitenant: this.dataset.multitenant === 'true', - authenticityToken: document.querySelector('meta[name="csrf-token"]')?.content + authenticityToken: document.querySelector('meta[name="csrf-token"]')?.content, + i18n: JSON.parse(this.dataset.i18n || '{}') }) this.app.mount(this.appElem) diff --git a/app/javascript/application.scss b/app/javascript/application.scss index b29a6bf8..eaf2f469 100644 --- a/app/javascript/application.scss +++ b/app/javascript/application.scss @@ -51,10 +51,6 @@ button[disabled] .enabled { @apply input input-bordered bg-white; } -.base-input-slim { - @apply input input-bordered bg-white h-10; -} - .base-textarea { @apply textarea textarea-bordered bg-white rounded-3xl; } diff --git a/app/javascript/submission_form/completed.vue b/app/javascript/submission_form/completed.vue index 67edd700..14d648f4 100644 --- a/app/javascript/submission_form/completed.vue +++ b/app/javascript/submission_form/completed.vue @@ -222,7 +222,7 @@ export default { this.downloadUrls(urls) } } else { - alert('Failed to download files') + alert(this.t('failed_to_download_files')) } }) }, diff --git a/app/javascript/submission_form/form.vue b/app/javascript/submission_form/form.vue index 25e5f2e5..21b7cd97 100644 --- a/app/javascript/submission_form/form.vue +++ b/app/javascript/submission_form/form.vue @@ -1207,7 +1207,7 @@ export default { }) }).catch(error => { if (error?.message === 'Image too small') { - alert('Signature is too small - please redraw.') + alert(this.t('signature_is_too_small_please_redraw')) } else { console.log(error) } diff --git a/app/javascript/template_builder/builder.vue b/app/javascript/template_builder/builder.vue index 8f28f547..f51bc350 100644 --- a/app/javascript/template_builder/builder.vue +++ b/app/javascript/template_builder/builder.vue @@ -418,7 +418,7 @@ import MobileFields from './mobile_fields' import { IconPlus, IconUsersPlus, IconDeviceFloppy, IconChevronDown, IconEye, IconWritingSign, IconInnerShadowTop, IconInfoCircle, IconAdjustments } from '@tabler/icons-vue' import { v4 } from 'uuid' import { ref, computed } from 'vue' -import { en as i18nEn } from './i18n' +import * as i18n from './i18n' export default { name: 'TemplateBuilder', @@ -679,6 +679,9 @@ export default { computed: { selectedAreaRef: () => ref(), fieldsDragFieldRef: () => ref(), + language () { + return this.locale.split('-')[0].toLowerCase() + }, defaultDateFormat () { const isUsBrowser = Intl.DateTimeFormat().resolvedOptions().locale.endsWith('-US') const isUsTimezone = new Intl.DateTimeFormat('en-US', { timeZoneName: 'short' }).format(new Date()).match(/\s(?:CST|CDT|PST|PDT|EST|EDT)$/) @@ -786,7 +789,7 @@ export default { document.activeElement.blur() }, t (key) { - return this.i18n[key] || i18nEn[key] || key + return this.i18n[key] || i18n[this.language]?.[key] || i18n.en[key] || key }, removePendingFields () { this.template.fields = this.template.fields.filter((f) => { @@ -1451,7 +1454,7 @@ export default { if (!this.template.fields.length) { e.preventDefault() - alert('Please draw fields to prepare the document.') + alert(this.t('please_draw_fields_to_prepare_the_document')) } else { const submitterWithoutFields = this.template.submitters.find((submitter) => !this.template.fields.some((f) => f.submitter_uuid === submitter.uuid)) @@ -1459,7 +1462,7 @@ export default { if (submitterWithoutFields) { e.preventDefault() - alert(`Please add fields for the ${submitterWithoutFields.name}. Or, remove the ${submitterWithoutFields.name} if not needed.`) + alert(this.t('please_add_fields_for_the_submitter_name_or_remove_the_submitter_name_if_not_needed').replaceAll('{submitter_name}', submitterWithoutFields.name)) } } }, @@ -1475,13 +1478,13 @@ export default { } if (!this.template.fields.length) { - alert('Please draw fields to prepare the document.') + alert(this.t('please_draw_fields_to_prepare_the_document')) } else { const submitterWithoutFields = this.template.submitters.find((submitter) => !this.template.fields.some((f) => f.submitter_uuid === submitter.uuid)) if (submitterWithoutFields) { - alert(`Please add fields for the ${submitterWithoutFields.name}. Or, remove the ${submitterWithoutFields.name} if not needed.`) + alert(this.t('please_add_fields_for_the_submitter_name_or_remove_the_submitter_name_if_not_needed').replaceAll('{submitter_name}', submitterWithoutFields.name)) } else { this.isSaving = true diff --git a/app/javascript/template_builder/conditions_modal.vue b/app/javascript/template_builder/conditions_modal.vue index d934f864..16e78697 100644 --- a/app/javascript/template_builder/conditions_modal.vue +++ b/app/javascript/template_builder/conditions_modal.vue @@ -200,7 +200,7 @@ export default { }, validateSaveAndClose () { if (!this.withConditions) { - return alert('Available only in Pro') + return alert(this.t('available_only_in_pro')) } if (this.conditions.find((f) => f.field_uuid)) { diff --git a/app/javascript/template_builder/dropzone.vue b/app/javascript/template_builder/dropzone.vue index 3fffab65..4136e6fe 100644 --- a/app/javascript/template_builder/dropzone.vue +++ b/app/javascript/template_builder/dropzone.vue @@ -105,7 +105,7 @@ export default { this.upload() } else { - alert('Only PDF and images are supported.') + alert(this.t('only_pdf_and_images_are_supported')) } } } diff --git a/app/javascript/template_builder/fields.vue b/app/javascript/template_builder/fields.vue index 68fc4344..b59ca71c 100644 --- a/app/javascript/template_builder/fields.vue +++ b/app/javascript/template_builder/fields.vue @@ -137,7 +137,7 @@ v-else-if="type == 'phone' && (fieldTypes.length === 0 || fieldTypes.includes(type))" class="tooltip tooltip-bottom flex" :class="{'tooltip-bottom-end': withPayment, 'tooltip-bottom': !withPayment }" - data-tip="Unlock SMS-verified phone number field with paid plan. Use text field for phone numbers without verification." + :data-tip="t('unlock_sms_verified_phone_number_field_with_paid_plan_use_text_field_for_phone_numbers_without_verification')" > diff --git a/app/javascript/template_builder/formula_modal.vue b/app/javascript/template_builder/formula_modal.vue index 2f35e762..b77e8487 100644 --- a/app/javascript/template_builder/formula_modal.vue +++ b/app/javascript/template_builder/formula_modal.vue @@ -195,7 +195,7 @@ export default { }, validateSaveAndClose () { if (!this.withFormula) { - return alert('Available only in Pro') + return alert(this.t('available_only_in_pro')) } const normalizedFormula = this.normalizeFormula(this.formula) diff --git a/app/javascript/template_builder/i18n.js b/app/javascript/template_builder/i18n.js index 610e3b6b..dab8a6ba 100644 --- a/app/javascript/template_builder/i18n.js +++ b/app/javascript/template_builder/i18n.js @@ -104,6 +104,15 @@ const en = { field: 'Field', group: 'Group', draw_a_text_field_on_the_page_with_a_mouse: 'Draw a text field on the page with a mouse', + drag_and_drop_any_other_field_type_on_the_page: 'Drag & drop any other field type on the page', + click_on_the_field_type_above_to_start_drawing_it: 'Click on the field type above to start drawing it', + please_draw_fields_to_prepare_the_document: 'Please draw fields to prepare the document.', + only_pdf_and_images_are_supported: 'Only PDF and images are supported.', + unlock_sms_verified_phone_number_field_with_paid_plan_use_text_field_for_phone_numbers_without_verification: 'Unlock SMS-verified phone number field with paid plan. Use text field for phone numbers without verification.', + available_only_in_pro: 'Available only in Pro', + failed_to_download_files: 'Failed to download files', + signature_is_too_small_please_redraw: 'Signature is too small - please redraw.', + please_add_fields_for_the_submitter_name_or_remove_the_submitter_name_if_not_needed: 'Please add fields for the {submitter_name}. Or, remove the {submitter_name} if not needed.', draw_field: 'Draw {field} Field', replace: 'Replace', uploading_: 'Uploading...', @@ -128,4 +137,699 @@ const en = { learn_more: 'Learn more' } -export { en } +const es = { + editable: 'Editable', + search_field: 'Campo de búsqueda', + field_not_found: 'Campo no encontrado', + clear: 'Borrar', + type_value: 'Escriba valor', + align: 'Alinear', + add_all_required_fields_to_continue: 'Agregar todos los campos requeridos para continuar', + uploaded_pdf_contains_form_fields_keep_or_remove_them: 'El PDF cargado tiene campos. ¿Mantenerlos o eliminarlos?', + keep: 'Mantener', + left: 'Izquierda', + heading: 'Encabezado', + validation: 'Validación', + add_blank_page: 'Agregar página en blanco', + right: 'Derecha', + center: 'Centro', + with_logo: 'Con logotipo', + description: 'Descripción', + signing_date: 'Fecha de Firma', + display_title: 'Título de visualización', + unchecked: 'No marcado', + price: 'Precio', + equal: 'Igual', + not_equal: 'No es igual', + contains: 'Contiene', + does_not_contain: 'No contiene', + not_empty: 'No vacío', + empty: 'Vacío', + select_field_: 'Seleccionar campo...', + select_value_: 'Seleccionar valor...', + remove_condition: 'Eliminar condición', + add_condition: 'Agregar condición', + condition: 'Condición', + formula: 'Fórmula', + edit: 'Editar', + settings: 'Configuración', + up: 'Arriba', + down: 'Abajo', + set_signing_date: 'Establecer fecha de firma', + are_you_sure: '¿Estás seguro?', + sign_yourself: 'Firma tú mismo', + checked: 'Seleccionado', + send: 'Enviar', + remove: 'Eliminar', + save: 'Guardar', + cancel: 'Cancelar', + or_add_field_without_drawing: 'O añadir campo sin dibujar', + draw_field_on_the_document: 'Dibujar campo {field} en el documento', + click_to_upload: 'Haz clic para cargar', + or_drag_and_drop_files: 'o arrastra y suelta archivos', + uploading: 'Subiendo', + processing_: 'Procesando...', + add_pdf_documents_or_images: 'Agregar documentos PDF o imágenes', + add_documents_or_images: 'Agregar documentos o imágenes', + required: 'Requerido', + default_value: 'Valor predeterminado', + format: 'Formato', + read_only: 'Solo lectura', + page: 'Página', + draw_new_area: 'Dibujar nueva área', + copy_to_all_pages: 'Copiar a todas las páginas', + add_option: 'Agregar opción', + option: 'Opción', + first_party: 'Primera Parte', + second_party: 'Segunda Parte', + third_party: 'Tercera Parte', + fourth_party: 'Cuarta Parte', + fifth_party: 'Quinta Parte', + sixth_party: 'Sexta Parte', + seventh_party: 'Séptima Parte', + eighth_party: 'Octava Parte', + ninth_party: 'Novena Parte', + tenth_party: 'Décima Parte', + eleventh_party: 'Undécimo Partido', + twelfth_party: 'Duodécimo Partido', + thirteenth_party: 'Decimotercer Partido', + fourteenth_party: 'Catorceavo Partido', + fifteenth_party: 'Quinceavo Partido', + sixteenth_party: 'Dieciséisavo Partido', + seventeenth_party: 'Diecisieteavo Partido', + eighteenth_party: 'Dieciochoavo Partido', + nineteenth_party: 'Decimonovena Fiesta', + twentieth_party: 'Vigésima Fiesta', + draw: 'Dibujar', + add: 'Agregar', + text: 'Texto', + signature: 'Firma', + initials: 'Iniciales', + date: 'Fecha', + number: 'Número', + image: 'Imagen', + file: 'Archivo', + select: 'Seleccionar', + checkbox: 'Casilla', + multiple: 'Múltiple', + field: 'Campo', + group: 'Grupo', + radio: 'Radio', + cells: 'Celdas', + stamp: 'Sello', + payment: 'Pago', + phone: 'Teléfono', + draw_a_text_field_on_the_page_with_a_mouse: 'Dibujar un campo de texto en la página con el mouse', + drag_and_drop_any_other_field_type_on_the_page: 'Arrastra y suelta cualquier otro tipo de campo en la página', + click_on_the_field_type_above_to_start_drawing_it: 'Haz clic en el tipo de campo de arriba para comenzar a dibujarlo', + please_draw_fields_to_prepare_the_document: 'Por favor, dibuja los campos para preparar el documento.', + only_pdf_and_images_are_supported: 'Solo se admiten PDF e imágenes.', + unlock_sms_verified_phone_number_field_with_paid_plan_use_text_field_for_phone_numbers_without_verification: 'Desbloquea el campo de número de teléfono verificado por SMS con un plan pago. Usa el campo de texto para números de teléfono sin verificación.', + available_only_in_pro: 'Disponible solo en Pro', + failed_to_download_files: 'Error al descargar los archivos', + signature_is_too_small_please_redraw: 'La firma es demasiado pequeña. Por favor, dibújala de nuevo.', + please_add_fields_for_the_submitter_name_or_remove_the_submitter_name_if_not_needed: 'Por favor, añade campos para {submitter_name} o elimina {submitter_name} si no es necesario.', + draw_field: 'Dibujar campo {field}', + replace: 'Reemplazar', + uploading_: 'Subiendo...', + add_document: 'Subir', + any: 'Cualquier', + drawn: 'Dibujado', + typed: 'Escrito', + none: 'Ninguno', + ssn: 'SSN', + ein: 'EIN', + email: 'Correo electrónico', + url: 'URL', + zip: 'ZIP', + custom: 'Personalizado', + numbers_only: 'Solo números', + letters_only: 'Solo letras', + regexp_validation: 'Validación de expresión regular', + enter_pdf_password: 'Ingrese la contraseña del PDF', + wrong_password: 'Contraseña incorrecta', + currency: 'Moneda', + save_and_preview: 'Guardar y previsualizar', + preferences: 'Preferencias', + available_in_pro: 'Disponible en Pro', + some_fields_are_missing_in_the_formula: 'Faltan algunos campos en la fórmula.', + learn_more: 'Aprende más' +} + +const it = { + editable: 'Modificabile', + search_field: 'Campo di ricerca', + field_not_found: 'Campo non trovato', + clear: 'Cancella', + align: 'Allinea', + add_all_required_fields_to_continue: 'Aggiungi tutti i campi obbligatori per continuare', + uploaded_pdf_contains_form_fields_keep_or_remove_them: 'Il PDF caricato contiene campi del modulo. Mantenerli o rimuoverli?', + keep: 'Mantieni', + left: 'Sinistra', + heading: 'Intestazione', + validation: 'Validazione', + add_blank_page: 'Aggiungi pagina vuota', + right: 'Destra', + center: 'Centro', + description: 'Descrizione', + display_title: 'Mostra titolo', + with_logo: 'Con logo', + unchecked: 'Non selezionato', + price: 'Prezzo', + type_value: 'Inserisci valore', + equal: 'Uguale', + not_equal: 'Non uguale', + contains: 'Contiene', + does_not_contain: 'Non contiene', + not_empty: 'Non vuoto', + empty: 'Vuoto', + select_field_: 'Seleziona campo...', + select_value_: 'Seleziona valore...', + remove_condition: 'Rimuovi condizione', + add_condition: 'Aggiungi condizione', + are_you_sure: 'Sei sicuro?', + sign_yourself: 'Firma te stesso', + set_signing_date: 'Imposta data di firma', + signing_date: 'Data di firma', + send: 'Invia', + remove: 'Rimuovi', + edit: 'Modifica', + settings: 'Impostazioni', + up: 'Su', + down: 'Giù', + checked: 'Selezionato', + save: 'Salva', + cancel: 'Annulla', + any: 'Qualsiasi', + drawn: 'Disegnato', + formula: 'Formula', + typed: 'Digitato', + draw_field_on_the_document: 'Disegna il campo {field} sul documento', + click_to_upload: 'Clicca per caricare', + or_drag_and_drop_files: 'o trascina e rilascia i file', + uploading: 'Caricamento in corso', + processing_: 'Elaborazione...', + add_pdf_documents_or_images: 'Aggiungi documenti PDF o immagini', + add_documents_or_images: 'Aggiungi documenti o immagini', + required: 'Obbligatorio', + default_value: 'Valore predefinito', + format: 'Formato', + read_only: 'Sola lettura', + page: 'Pagina', + draw_new_area: 'Disegna nuova area', + copy_to_all_pages: 'Copia in tutte le pagine', + add_option: 'Aggiungi opzione', + option: 'Opzione', + condition: 'Condizione', + first_party: 'Prima parte', + second_party: 'Seconda parte', + third_party: 'Terza parte', + fourth_party: 'Quarta parte', + fifth_party: 'Quinta parte', + sixth_party: 'Sesta parte', + seventh_party: 'Settima parte', + eighth_party: 'Ottava parte', + ninth_party: 'Nona parte', + tenth_party: 'Decima parte', + eleventh_party: 'Undicesima parte', + twelfth_party: 'Dodicesima parte', + thirteenth_party: 'Tredicesima parte', + fourteenth_party: 'Quattordicesima parte', + fifteenth_party: 'Quindicesima parte', + sixteenth_party: 'Sedicesima parte', + seventeenth_party: 'Diciassettesima parte', + eighteenth_party: 'Diciottesima parte', + nineteenth_party: 'Diciannovesima parte', + twentieth_party: 'Ventesima parte', + draw: 'Disegna', + add: 'Aggiungi', + or_add_field_without_drawing: 'Oppure aggiungi campo senza disegno', + text: 'Testo', + number: 'Numero', + signature: 'Firma', + initials: 'Iniziali', + date: 'Data', + image: 'Immagine', + file: 'File', + select: 'Seleziona', + checkbox: 'Casella di controllo', + multiple: 'Multiplo', + radio: 'Radio', + cells: 'Celle', + stamp: 'Timbro', + payment: 'Pagamento', + phone: 'Telefono', + field: 'Campo', + group: 'Gruppo', + draw_a_text_field_on_the_page_with_a_mouse: 'Disegna un campo di testo sulla pagina con il mouse', + drag_and_drop_any_other_field_type_on_the_page: 'Trascina e rilascia qualsiasi altro tipo di campo sulla pagina', + click_on_the_field_type_above_to_start_drawing_it: 'Clicca sul tipo di campo sopra per iniziare a disegnarlo', + please_draw_fields_to_prepare_the_document: 'Per favore, disegna i campi per preparare il documento.', + only_pdf_and_images_are_supported: 'Sono supportati solo PDF e immagini.', + unlock_sms_verified_phone_number_field_with_paid_plan_use_text_field_for_phone_numbers_without_verification: 'Sblocca il campo numero di telefono verificato tramite SMS con un piano a pagamento. Usa il campo di testo per numeri di telefono senza verifica.', + available_only_in_pro: 'Disponibile solo in Pro', + failed_to_download_files: 'Impossibile scaricare i file', + signature_is_too_small_please_redraw: 'La firma è troppo piccola. Ridisegnala per favore.', + please_add_fields_for_the_submitter_name_or_remove_the_submitter_name_if_not_needed: 'Aggiungi campi per {submitter_name} o rimuovi {submitter_name} se non necessario.', + draw_field: 'Disegna il campo {field}', + replace: 'Sostituisci', + uploading_: 'Caricamento in corso...', + add_document: 'Aggiungi', + none: 'Nessuno', + ssn: 'SSN', + ein: 'EIN', + email: 'Email', + url: 'URL', + zip: 'CAP', + custom: 'Personalizzato', + numbers_only: 'Solo numeri', + letters_only: 'Solo lettere', + regexp_validation: 'Validazione regexp', + enter_pdf_password: 'Inserisci password PDF', + wrong_password: 'Password errata', + currency: 'Valuta', + save_and_preview: 'Salva e Anteprima', + preferences: 'Preferenze', + available_in_pro: 'Disponibile in Pro', + some_fields_are_missing_in_the_formula: 'Alcuni campi mancano nella formula.', + learn_more: 'Scopri di più' +} + +const pt = { + editable: 'Editável', + search_field: 'Campo de busca', + field_not_found: 'Campo não encontrado', + clear: 'Limpar', + type_value: 'Digite valor', + add_all_required_fields_to_continue: 'Adicione todos os campos obrigatórios para continuar', + uploaded_pdf_contains_form_fields_keep_or_remove_them: 'O PDF carregado contém campos. Manter ou removê-los?', + keep: 'Manter', + align: 'Alinhar', + left: 'Esquerda', + heading: 'Cabeçalho', + validation: 'Validação', + add_blank_page: 'Adicionar página em branco', + right: 'Direita', + center: 'Centro', + with_logo: 'Com logotipo', + description: 'Descrição', + display_title: 'Título de exibição', + signing_date: 'Data da Assinatura', + unchecked: 'Não marcado', + price: 'Preço', + equal: 'Igual', + not_equal: 'Não é igual', + contains: 'Contém', + does_not_contain: 'Não contém', + not_empty: 'Não vazio', + empty: 'Vazio', + add_condition: 'Adicionar condição', + select_field_: 'Selecionar campo...', + select_value_: 'Selecionar valor...', + remove_condition: 'Remover condição', + condition: 'Condição', + formula: 'Fórmula', + edit: 'Editar', + settings: 'Configurações', + up: 'Para cima', + down: 'Para baixo', + set_signing_date: 'Definir data de assinatura', + are_you_sure: 'Tem certeza?', + sign_yourself: 'Assine você mesmo', + checked: 'Marcado', + send: 'Enviar', + remove: 'Remover', + save: 'Salvar', + cancel: 'Cancelar', + or_add_field_without_drawing: 'Ou adicione campo sem desenhar', + draw_field_on_the_document: 'Desenhar campo {field} no documento', + click_to_upload: 'Clique para enviar', + or_drag_and_drop_files: 'ou arraste e solte arquivos', + uploading: 'Carregando', + processing_: 'Processando...', + add_pdf_documents_or_images: 'Adicionar documentos PDF ou imagens', + add_documents_or_images: 'Adicionar documentos ou imagens', + required: 'Obrigatório', + default_value: 'Valor padrão', + format: 'Formato', + read_only: 'Somente leitura', + page: 'Página', + draw_new_area: 'Desenhar nova área', + copy_to_all_pages: 'Copiar para todas as páginas', + add_option: 'Adicionar opção', + option: 'Opção', + first_party: 'Primeira Parte', + second_party: 'Segunda Parte', + third_party: 'Terceira Parte', + fourth_party: 'Quarta Parte', + fifth_party: 'Quinta Parte', + sixth_party: 'Sexta Parte', + seventh_party: 'Sétima Parte', + eighth_party: 'Oitava Parte', + ninth_party: 'Nona Parte', + tenth_party: 'Décima Parte', + eleventh_party: 'Décima Primeira Parte', + twelfth_party: 'Décima Segunda Parte', + thirteenth_party: 'Décima Terceira Parte', + fourteenth_party: 'Décima Quarta Parte', + fifteenth_party: 'Décima Quinta Parte', + sixteenth_party: 'Décima Sexta Parte', + seventeenth_party: 'Décima Sétima Parte', + eighteenth_party: 'Décima Oitava Parte', + nineteenth_party: 'Décima Nona Parte', + twentieth_party: 'Vigésima Parte', + draw: 'Desenhar', + add: 'Adicionar', + text: 'Texto', + signature: 'Assinatura', + initials: 'Rúbrica', + date: 'Data', + number: 'Número', + image: 'Imagem', + file: 'Arquivo', + select: 'Selecionar', + checkbox: 'Caixa', + field: 'Campo', + group: 'Grupo', + multiple: 'Múltiplo', + radio: 'Rádio', + cells: 'Células', + stamp: 'Carimbo', + payment: 'Pagamento', + phone: 'Telefone', + draw_a_text_field_on_the_page_with_a_mouse: 'Desenhar um campo de texto na página com o mouse', + drag_and_drop_any_other_field_type_on_the_page: 'Arraste e solte qualquer outro tipo de campo na página', + click_on_the_field_type_above_to_start_drawing_it: 'Clique no tipo de campo acima para começar a desenhá-lo', + please_draw_fields_to_prepare_the_document: 'Por favor, desenhe os campos para preparar o documento.', + only_pdf_and_images_are_supported: 'Apenas PDFs e imagens são suportados.', + unlock_sms_verified_phone_number_field_with_paid_plan_use_text_field_for_phone_numbers_without_verification: 'Desbloqueie o campo de número de telefone verificado por SMS com um plano pago. Use o campo de texto para números de telefone sem verificação.', + available_only_in_pro: 'Disponível apenas no Pro', + failed_to_download_files: 'Falha ao baixar arquivos', + signature_is_too_small_please_redraw: 'A assinatura é muito pequena. Por favor, redesenhe.', + please_add_fields_for_the_submitter_name_or_remove_the_submitter_name_if_not_needed: 'Adicione campos para {submitter_name} ou remova {submitter_name} se não for necessário.', + draw_field: 'Desenhar campo {field}', + replace: 'Substituir', + uploading_: 'Carregando...', + add_document: 'Enviar', + any: 'Qualquer', + drawn: 'Desenhado', + typed: 'Digitado', + none: 'Nenhum', + ssn: 'SSN', + ein: 'EIN', + email: 'Email', + url: 'URL', + zip: 'ZIP', + custom: 'Personalizado', + numbers_only: 'Somente números', + letters_only: 'Somente letras', + regexp_validation: 'Validação de expressão regular', + enter_pdf_password: 'Digite a senha do PDF', + wrong_password: 'Senha incorreta', + currency: 'Moeda', + save_and_preview: 'Salvar e Pré-visualizar', + preferences: 'Preferências', + available_in_pro: 'Disponível no Pro', + some_fields_are_missing_in_the_formula: 'Faltam alguns campos na fórmula.', + learn_more: 'Saiba mais' +} + +const fr = { + editable: 'Éditable', + search_field: 'Champ de recherche', + field_not_found: 'Champ non trouvé', + clear: 'Effacer', + type_value: 'Tapez la valeur', + add_all_required_fields_to_continue: 'Ajoutez tous les champs obligatoires pour continuer', + uploaded_pdf_contains_form_fields_keep_or_remove_them: 'Le PDF téléchargé contient des champs. Les conserver ou les supprimer?', + keep: 'Conserver', + align: 'Aligner', + left: 'Gauche', + heading: 'En-tête', + validation: 'Validation', + add_blank_page: 'Ajouter une page blanche', + right: 'Droite', + add_condition: 'Ajouter une condition', + center: 'Centre', + with_logo: 'Avec logo', + description: 'Description', + display_title: "Titre d'affichage", + unchecked: 'Non coché', + price: 'Prix', + equal: 'Égal', + not_equal: 'Non égal', + contains: 'Contient', + signing_date: 'Date de signature', + does_not_contain: 'Ne contient pas', + not_empty: 'Non vide', + empty: 'Vide', + select_field_: 'Sélectionner un champ...', + select_value_: 'Sélectionner une valeur...', + remove_condition: 'Supprimer la condition', + condition: 'Condition', + formula: 'Formule', + edit: 'Éditer', + settings: 'Paramètres', + up: 'Haut', + down: 'Bas', + set_signing_date: 'Définir la date de signature', + are_you_sure: 'Êtes-vous sûr ?', + sign_yourself: 'Signez-vous', + checked: 'Coché', + send: 'Envoyer', + remove: 'Supprimer', + save: 'Enregistrer', + cancel: 'Annuler', + draw_field_on_the_document: 'Dessinez le champ {field} sur le document', + click_to_upload: 'Cliquez pour télécharger', + or_drag_and_drop_files: 'ou faites glisser-déposer des fichiers', + uploading: 'Téléchargement en cours', + processing_: 'Traitement en cours...', + add_pdf_documents_or_images: 'Ajoutez des documents PDF ou des images', + add_documents_or_images: 'Ajoutez des documents ou des images', + required: 'Requis', + default_value: 'Valeur par défaut', + format: 'Format', + read_only: 'Lecture seule', + page: 'Page', + draw_new_area: 'Dessiner une nouvelle zone', + copy_to_all_pages: 'Copier sur toutes les pages', + add_option: 'Ajouter une option', + option: 'Option', + first_party: 'Première partie', + second_party: 'Deuxième partie', + third_party: 'Troisième partie', + fourth_party: 'Quatrième partie', + fifth_party: 'Cinquième partie', + sixth_party: 'Sixième partie', + seventh_party: 'Septième partie', + eighth_party: 'Huitième partie', + ninth_party: 'Neuvième partie', + tenth_party: 'Dixième partie', + eleventh_party: 'Onzième Parti', + twelfth_party: 'Douzième Parti', + thirteenth_party: 'Treizième Parti', + fourteenth_party: 'Quatorzième Parti', + fifteenth_party: 'Quinzième Parti', + sixteenth_party: 'Seizième Parti', + seventeenth_party: 'Dix-septième Parti', + eighteenth_party: 'Dix-huitième Parti', + nineteenth_party: 'Dix-Neuvième Fête', + twentieth_party: 'Vingtième Fête', + draw: 'Dessiner', + add: 'Ajouter', + or_add_field_without_drawing: 'Ou ajoutez un champ sans dessiner', + text: 'Texte', + signature: 'Signature', + initials: 'Initiales', + date: 'Date', + number: 'Numéro', + image: 'Image', + file: 'Fichier', + select: 'Choisir', + checkbox: 'Coche', + multiple: 'Multiple', + radio: 'Radio', + cells: 'Cellules', + stamp: 'Tampon', + payment: 'Paiement', + phone: 'Téléphone', + field: 'Champ', + group: 'Groupe', + draw_a_text_field_on_the_page_with_a_mouse: 'Dessinez un champ texte sur la page avec une souris', + drag_and_drop_any_other_field_type_on_the_page: 'Glissez et déposez tout autre type de champ sur la page', + click_on_the_field_type_above_to_start_drawing_it: 'Cliquez sur le type de champ ci-dessus pour commencer à le dessiner', + please_draw_fields_to_prepare_the_document: 'Veuillez dessiner les champs pour préparer le document.', + only_pdf_and_images_are_supported: 'Seuls les PDF et les images sont pris en charge.', + unlock_sms_verified_phone_number_field_with_paid_plan_use_text_field_for_phone_numbers_without_verification: 'Débloquez le champ de numéro de téléphone vérifié par SMS avec un plan payant. Utilisez un champ texte pour les numéros de téléphone sans vérification.', + available_only_in_pro: 'Disponible uniquement en Pro', + failed_to_download_files: 'Échec du téléchargement des fichiers', + signature_is_too_small_please_redraw: 'La signature est trop petite. Veuillez la redessiner.', + please_add_fields_for_the_submitter_name_or_remove_the_submitter_name_if_not_needed: 'Veuillez ajouter des champs pour {submitter_name} ou retirer {submitter_name} si ce n\'est pas nécessaire.', + draw_field: 'Dessiner le champ {field}', + replace: 'Remplacer', + uploading_: 'Téléchargement en cours...', + add_document: 'Télécharger', + any: 'Tout', + drawn: 'Dessiné', + typed: 'Tapé', + none: 'Aucun', + ssn: 'SSN', + ein: 'EIN', + email: 'E-mail', + url: 'URL', + zip: 'ZIP', + custom: 'Personnalisé', + numbers_only: 'Chiffres uniquement', + letters_only: 'Lettres uniquement', + regexp_validation: 'Validation par expression régulière', + enter_pdf_password: 'Entrez le mot de passe PDF', + wrong_password: 'Mot de passe incorrect', + currency: 'Devise', + save_and_preview: 'Enregistrer et prévisualiser', + preferences: 'Préférences', + available_in_pro: 'Disponible en version Pro', + some_fields_are_missing_in_the_formula: 'Certains champs manquent dans la formule.', + learn_more: 'En savoir plus' +} + +const de = { + editable: 'Bearbeitbar', + search_field: 'Suchfeld', + field_not_found: 'Feld nicht gefunden', + clear: 'Löschen', + type_value: 'Wert eingeben', + add_all_required_fields_to_continue: 'Fügen Sie alle erforderlichen Felder hinzu, um fortzufahren', + uploaded_pdf_contains_form_fields_keep_or_remove_them: 'Das hochgeladene PDF enthält Formularfelder. Behalten oder entfernen?', + keep: 'Behalten', + align: 'Ausrichten', + left: 'Links', + heading: 'Überschrift', + validation: 'Validierung', + add_blank_page: 'Leere Seite hinzufügen', + right: 'Rechts', + add_condition: 'Bedingung hinzufügen', + center: 'Zentriert', + with_logo: 'Mit Logo', + description: 'Beschreibung', + display_title: 'Anzeigetitel', + unchecked: 'Nicht überprüft', + price: 'Preis', + equal: 'Gleich', + not_equal: 'Ungleich', + contains: 'Enthält', + does_not_contain: 'Enthält nicht', + not_empty: 'Nicht leer', + empty: 'Leer', + signing_date: 'Signaturdatum', + select_field_: 'Feld auswählen...', + select_value_: 'Wert auswählen...', + remove_condition: 'Bedingung entfernen', + condition: 'Bedingung', + formula: 'Formel', + edit: 'Bearbeiten', + settings: 'Einstellungen', + up: 'Nach oben', + down: 'Nach unten', + set_signing_date: 'Unterschriftdatum festlegen', + are_you_sure: 'Bist du sicher?', + sign_yourself: 'Unterschreiben Sie selbst', + checked: 'Ausgewählt', + send: 'Senden', + remove: 'Entfernen', + save: 'Speichern', + cancel: 'Abbrechen', + draw_field_on_the_document: 'Feld {field} auf dem Dokument zeichnen', + click_to_upload: 'Klicken Sie zum Hochladen', + or_drag_and_drop_files: 'oder Dateien hierher ziehen', + uploading: 'Hochladen', + processing_: 'Verarbeitung...', + add_pdf_documents_or_images: 'PDF-Dokumente oder Bilder hinzufügen', + add_documents_or_images: 'Dokumente oder Bilder hinzufügen', + required: 'Erforderlich', + default_value: 'Standardwert', + format: 'Format', + read_only: 'Nur lesen', + page: 'Seite', + draw_new_area: 'Neuen Bereich zeichnen', + copy_to_all_pages: 'Auf alle Seiten kopieren', + add_option: 'Option hinzufügen', + option: 'Option', + first_party: 'Erste Partei', + second_party: 'Zweite Partei', + third_party: 'Dritte Partei', + fourth_party: 'Vierte Partei', + fifth_party: 'Fünfte Partei', + sixth_party: 'Sechste Partei', + seventh_party: 'Siebte Partei', + eighth_party: 'Achte Partei', + ninth_party: 'Neunte Partei', + tenth_party: 'Zehnte Partei', + eleventh_party: 'Elfte Partei', + twelfth_party: 'Zwölfte Partei', + thirteenth_party: 'Dreizehnte Partei', + fourteenth_party: 'Vierzehnte Partei', + fifteenth_party: 'Fünfzehnte Partei', + sixteenth_party: 'Sechzehnte Partei', + seventeenth_party: 'Siebzehnte Partei', + eighteenth_party: 'Achtzehnte Partei', + nineteenth_party: 'Neunzehnte Party', + twentieth_party: 'Zwanzigste Party', + draw: 'Zeichnen', + add: 'Hinzufügen', + or_add_field_without_drawing: 'Oder Feld ohne Zeichnung hinzufügen', + text: 'Text', + signature: 'Unterschrift', + initials: 'Initialen', + date: 'Datum', + number: 'Nummer', + image: 'Bild', + file: 'Datei', + select: 'Auswählen', + checkbox: 'Checkbox', + multiple: 'Mehrere', + radio: 'Radio', + cells: 'Zellen', + stamp: 'Stempel', + payment: 'Zahlung', + phone: 'Telefon', + field: 'Feld', + group: 'Gruppe', + draw_a_text_field_on_the_page_with_a_mouse: 'Textfeld auf der Seite mit der Maus zeichnen', + drag_and_drop_any_other_field_type_on_the_page: 'Ziehe und lasse einen anderen Feldtyp auf die Seite fallen', + click_on_the_field_type_above_to_start_drawing_it: 'Klicke auf den Feldtyp oben, um mit dem Zeichnen zu beginnen', + please_draw_fields_to_prepare_the_document: 'Bitte zeichne Felder, um das Dokument vorzubereiten.', + only_pdf_and_images_are_supported: 'Nur PDFs und Bilder werden unterstützt.', + unlock_sms_verified_phone_number_field_with_paid_plan_use_text_field_for_phone_numbers_without_verification: 'Schalte das SMS-verifizierte Telefonnummernfeld mit einem kostenpflichtigen Plan frei. Verwende das Textfeld für Telefonnummern ohne Verifizierung.', + available_only_in_pro: 'Nur in Pro verfügbar', + failed_to_download_files: 'Fehler beim Herunterladen der Dateien', + signature_is_too_small_please_redraw: 'Die Unterschrift ist zu klein. Bitte erneut zeichnen.', + please_add_fields_for_the_submitter_name_or_remove_the_submitter_name_if_not_needed: 'Bitte füge Felder für {submitter_name} hinzu oder entferne {submitter_name}, falls nicht erforderlich.', + draw_field: 'Feld {field} zeichnen', + replace: 'Ersetzen', + uploading_: 'Hochladen...', + add_document: 'Hochladen', + any: 'Jede', + drawn: 'Gezeichnet', + typed: 'Getippt', + none: 'Keine', + ssn: 'SSN', + ein: 'EIN', + email: 'E-Mail', + url: 'URL', + zip: 'ZIP', + custom: 'Benutzerdefiniert', + numbers_only: 'Nur Zahlen', + letters_only: 'Nur Buchstaben', + regexp_validation: 'Regulärer Ausdruck Überprüfung', + enter_pdf_password: 'Geben Sie das PDF-Passwort ein', + wrong_password: 'Falsches Passwort', + currency: 'Währung', + save_and_preview: 'Speichern und Vorschau', + preferences: 'Einstellungen', + available_in_pro: 'In Pro verfügbar', + some_fields_are_missing_in_the_formula: 'Einige Felder fehlen in der Formel.', + learn_more: 'Erfahren Sie mehr' +} + +export { en, es, it, pt, fr, de } diff --git a/app/javascript/template_builder/import_list.vue b/app/javascript/template_builder/import_list.vue index ff2d0e85..d426e957 100644 --- a/app/javascript/template_builder/import_list.vue +++ b/app/javascript/template_builder/import_list.vue @@ -3,7 +3,7 @@
@@ -36,10 +36,10 @@
- Recipient field + {{ t('recipient_field') }}
- Spreadsheet column + {{ t('spreadsheet_column') }}
- Select Field + {{ t('select_field') }}