/**
 * Copyright (c) 2022 - present TinyVue Authors.
 * Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.
 *
 * Use of this source code is governed by an MIT-style license.
 *
 * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
 * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
 * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
 *
 */
export default {
  'en-US': 'English',
  'zh-CN': '中文',
  'zh-TW': '中国台湾',
  hello: 'Hello {name}',
  code: 'en-US',
  yes: 'Yes',
  no: 'No',
  ui: {
    numeric: {
      equalTo: 'Equal to',
      notEqualTo: 'Not equal to',
      moreThan: 'More than',
      moreThanOrEqualTo: 'More than or equal to',
      lessThan: 'Less than',
      lessThanOrEqualTo: 'Less than or equal to',
      empty: 'Empty',
      nonEmpty: 'Non-empty'
    },
    wizard: {
      previousStep: 'LastStep',
      nextStep: 'NextStep',
      save: 'Save',
      submit: 'Submit'
    },
    linkMenu: {
      title: 'news',
      placeholder: 'Please enter keywords to filter...',
      sure: 'Determine',
      cancel: 'cancel'
    },
    todoList: {
      add: 'Add',
      placeholder: 'please input your todo things'
    },
    alert: {
      error: 'Error',
      info: 'Info',
      success: 'Success',
      title: 'Message notification',
      warning: 'Warning'
    },
    amount: {
      currency: 'Currency',
      amount: 'Amount',
      date: 'Date',
      equalTo: 'Equal to',
      notEqualTo: 'Not equal to',
      moreThan: 'More than',
      moreThanOrEqualTo: 'More than or equal to',
      lessThan: 'Less than',
      lessThanOrEqualTo: 'Less than or equal to',
      empty: 'Empty',
      nonEmpty: 'Non-empty'
    },
    base: {
      all: 'All',
      cancel: 'Cancel',
      confirm: 'OK',
      delete: 'Delete',
      edit: 'Edit',
      more: 'More',
      reset: 'Reset',
      clear: 'Clear',
      comma: ','
    },
    button: {
      cancel: 'Cancel',
      confirm: 'Confirm'
    },
    buttonMessage: {
      cancel: 'Cancel',
      confirm: 'Confirm'
    },
    cell: {
      placeholder: 'Select'
    },
    cascader: {
      noMatch: 'No matching data',
      loading: 'Loading',
      placeholder: 'Select',
      noData: 'No data'
    },
    chart: {
      auxiliary: 'Auxiliary',
      emptyText: 'No Data',
      kName: 'Day K',
      other: 'Other',
      summation: 'Summation',
      total: 'Total',
      value: 'Value'
    },
    colorSelectPanel: {
      confirm: 'Ok',
      cancel: 'Cancel',
      predefine: 'Predefine Color',
      history: 'History',
      empty: 'Empty'
    },
    creditCardForm: {
      submit: 'Submit'
    },
    crop: {
      cropImage: 'crop image',
      croppedImage: 'Post-Crop Image'
    },
    datepicker: {
      clear: 'Clear',
      cancel: 'Cancel',
      endDate: 'End Date',
      confirm: 'OK',
      month: 'month',
      endTime: 'End Time',
      month2: 'February',
      month1: 'January',
      month4: 'April',
      month3: 'March',
      month6: 'June',
      month5: 'May',
      month8: 'August',
      month7: 'July',
      month10: 'October',
      month9: 'September',
      month12: 'December',
      month11: 'November',
      months: {
        feb: 'Feb',
        jan: 'Jan',
        apr: 'Apr',
        mar: 'Mar',
        jun: 'Jun',
        may: 'May',
        aug: 'Aug',
        jul: 'Jul',
        oct: 'Oct',
        sep: 'Sep',
        dec: 'Dec',
        nov: 'Nov'
      },
      nextYear: 'Next Year',
      nextMonth: 'Next Month',
      prevMonth: 'Previous Month',
      now: 'Now',
      selectDate: 'Select date',
      prevYear: 'Previous Year',
      startDate: 'Start Date',
      selectTime: 'Select time',
      today: 'Today',
      currentMonth: 'Current Month',
      startTime: 'Start Time',
      week: 'week',
      weeks: {
        mon: 'Mon',
        sun: 'Sun',
        wed: 'Wed',
        tue: 'Tue',
        thu: 'Thu',
        sat: 'Sat',
        fri: 'Fri'
      },
      timezone: 'selecting a timezone',
      year: '',
      to: 'to',
      yearMonth: '{year} / {month}',
      yearMonthDay: '{year} / {month} / {day}'
    },
    richTextEditor: {
      bold: 'bold',
      italic: 'italic',
      link: 'link',
      unlink: 'unlink',
      highlight: 'high light',
      underline: 'underline',
      strike: 'strike',
      subscript: 'subscript',
      superscript: 'superscript',
      code: 'code',
      unorderedlist: 'unorderedlist',
      orderedlist: 'orderedlist',
      taskList: 'taskList',
      quote: 'quote',
      codeBlock: 'code block',
      formatClear: 'format clear',
      nodeDelete: 'node delete',
      undo: 'undo',
      redo: 'redo',
      left: 'left',
      center: 'center',
      right: 'right',
      fontSize: 'font size',
      lineHeight: 'line height',
      hBox: 'h box',
      img: 'img',
      color: 'color',
      table: 'table',
      backgroundColor: 'backgroundColor'
    },
    calendar: {
      showType: {
        year: 'year'
      }
    },
    dept: {
      code: 'Code',
      company: 'Company',
      dept1: 'First Level Department',
      dept2: 'Second Level Department',
      dept3: 'Third Level Department',
      dept4: 'Fourth Level Department',
      dept5: 'Fifth Level Department',
      dept6: 'Sixth Level Department',
      dept7: 'Seventh Level Department',
      dept8: 'Eighth Level Department',
      input: 'Input Dept Code or Name is available',
      name: 'Name',
      search: 'Quick Search',
      selected: 'Selected'
    },
    detailpage: {
      saveButtonText: 'Confirm',
      cancelButtonText: 'Cancel',
      localTips: 'Cannot hide all',
      localTitle: 'Data',
      valueTitle: 'Click to hide',
      labelTitle: 'Title',
      dialogTitle: 'Personalized title'
    },
    dialogBox: {
      confirm: 'confirm',
      cancel: 'cancel'
    },
    load: {
      dot: 'Loading'
    },
    exception: {
      build: 'Building',
      busy: 'The network is busy. Please wait',
      noperm: 'Not find the page',
      weaknet: 'Poor network performance',
      pcview: 'View the file on the PC',
      nodata: 'Get some rest',
      create: 'Create',
      provide: 'Provided by the TINY Team DEV',
      nodatamf: 'No data',
      nopermmf: 'No access',
      weaknetmf: 'Network anomaly',
      noresult: 'No result',
      nonews: 'No latest news',
      pagenoperm: '403:No access',
      pageweaknet: 'Network anomaly',
      pagenothing: '404:The page you visited does not exist',
      pageservererror: '500:Server exception'
    },
    fileUpload: {
      largefile: ' is too large and will be uploaded in segments. Please wait.',
      folder: ' has more than five layers of folders. The file will not be uploaded',
      init: 'Service error. Please try again.',
      token: 'Perform EDM authentication first and obtain the token',
      exceed: 'The file size exceeds the limit of {maxSize}.',
      largeFile: 'The file size exceeds the upper limit by 2 GB !!',
      fileSize: 'The file size is lower than the limit of {minSize}{sizeUnit}',
      deleteTip: 'Press delete to remove',
      downloadFile: 'DownLoad file',
      previewFile: 'Preview file',
      updateFile: 'Update file',
      reUploadFile: 'refresh upload file',
      cancelFile: 'Cancel Upload',
      deleteFile: 'Delete file',
      empty: 'is empty!',
      kiaScanTip:
        'Sorry, unable to download. Please pass the KIA test first to download a file using public network. Current document is being checked by the KIA, Please wait a while then redownload.',
      fileNameExceeds: 'exceeds 255 characters. Please change the file name.',
      fileName: 'The file name',
      calcHash: 'Document is calculating encryption',
      uploadFile: 'Upload file',
      downloadAll: 'Download all',
      onlySupport: 'Only support {type} file',
      fileNotLessThan: 'The size of single file cannot be less than ',
      fileNotMoreThan: 'The size of single file cannot be more than ',
      notSupport: 'The format (.{format}) is not allowed.',
      notSupportNoSuffix: 'Files without suffixes are not supported currently',
      notSupportSpecialCharacters: 'The file name contains special characters, please rename the file and upload again',
      attachment: 'Attachment',
      uploadList: 'Upload List',
      numberExceed: 'The number of files exceeds the limit of {number}',
      numberLimit: 'Maximum upload of {number} files.',
      encryptDialogTitle: 'Watermark and encryption settings',
      addWatermark: 'Add Watermark',
      encrypted: 'Encrypted',
      docPreview: 'Document Preview',
      networkError: 'Network Error',
      pictureNetworkError: 'Network error, upload failed',
      reUploadTip: '{number} files failed to upload!'
    },
    uploadList: {
      pictureUploading: 'Picture uploading',
      uploadFailed: 'Upload failed',
      uploading: 'Uploading',
      download: 'Download',
      reUpload: 'Re-upload',
      delete: 'Delete',
      noAttachments: 'No attachments',
      cancel: 'Cancel',
      preview: 'Preview',
      releaseAndUpload: 'Release the mouse and upload the file',
      dragOrClickImport: 'Drag the file here, or click Import',
      shoot: 'Shoot',
      selectFromAlbum: 'Select from album',
      uploadFailedAndReupload: 'Upload failed, click to reupload'
    },
    upload: {
      addPicture: 'Add picture',
      addAudio: 'Add audio',
      addVideo: 'Add video'
    },
    grid: {
      dataUnchanged: 'Data unchanged!',
      deleteSelectRecord: 'Are you sure you want to delete the selected record?',
      emptyText: 'No Data',
      error: {
        cellEditRender: 'The renderer cell-render and edit-render cannot be used together.',
        delGetAllRecords: 'The function getAllRecords is deprecated, please use getRecordset.',
        delGetRecords: 'The function getRecords is deprecated, please use getData.',
        delLabel: 'The property label is deprecated, please use title.',
        delProp: 'The property prop is deprecated, please use field.',
        delRevert: 'The function revert is deprecated, please use revertData.',
        groupFixed: 'If grouping headers are used, fixed columns must be on the left and right sides.',
        notDelete: 'delete method not exist.',
        notMouse: 'Horizontal virtual scrolling does not support mouse-config.',
        notQuery: 'query method not exist.',
        notResizable: 'Horizontal virtual scrolling does not support resizable.',
        notSave: 'save method not exist.',
        reqModule: 'require {{name}} module.',
        rowIdEmpty: 'The property row-id is not allowed to be empty.',
        scrollOriginal: 'Virtual scrolling can only export source data, please set original=true.',
        scrollYHeight: 'You must set the height or max-height to enable virtual scrolling.',
        toolbarId: 'Toolbar must have a unique id',
        treeFixedExpand: 'The fixed columns of the tree structure conflict with the expanded row.',
        treeInsert: 'The tree structure does not support insert operations.',
        treeRemove: 'The tree structure does not support remove operations.',
        unableInsert: 'Unable to insert to the specified location.',
        dargSelf: 'Self dragging is not allowed.',
        dargFixed: 'Fixed columns cannot be dragged.',
        remoteMethod: '"remoteMethod" needs to be set for remote storage for personalized template management.',
        remoteSelectedMethod:
          '"remoteSelectedMethod" needs to be set for remote storage for personalized template management.',
        chainCallError: 'There is a syntax error in the default slot for the column, please check.',
        renderParamError: 'Expect to configure a rendering method for generating a VNode.',
        classComponentError: 'Class component rendering error.'
      },
      filter: {
        allFilter: 'All',
        allSelect: '(All)',
        endDate: 'End Date',
        startDate: 'Start Date',
        dateTips: 'Please enter at least one date',
        clear: 'Clear Current Filter',
        clearAll: 'Clear All Filters',
        confirmFilter: 'OK',
        empty: 'Is Empty',
        emptyText: 'No Data',
        equal: 'Equal',
        include: 'Include',
        prefix: 'Starts With',
        resetFilter: 'Reset',
        unempty: 'Is not Empty'
      },
      individuation: {
        cancelBtn: 'Cancel',
        colConfigs: {
          asc: 'Ascending',
          desc: 'Descending',
          frozenLeft: 'Frozen on the left',
          frozenRight: 'Frozen on the right',
          invisible: 'Invisible',
          unsorted: 'No sortting',
          unfrozen: 'Unfrozen',
          visible: 'Visible',
          unfreeze: 'Unfrozen',
          unsort: 'Unsort'
        },
        toolbar: {
          set: 'Set',
          selected: 'Selected',
          freeze: 'Freeze',
          sort: 'Sort',
          clear: 'Clear',
          search: 'Search',
          all: 'All'
        },
        columnSet: 'Column Setting',
        overwriteSave: 'Overwrite Save',
        saveAs: 'Save as',
        saveTemplate: 'Save Template',
        selectTemplate: 'Select Template',
        hideMsg: 'Leave one column to show at least.',
        maxFreezeNumMsg: 'Maxium number of frozen columns is 6',
        defaultTemplateName:
          'Please enter a name, if not filled in, it will be generated by the system according to time',
        reserveTemplateName: 'If the name is not filled in, the previous name will be retained',
        resetBtn: 'Reset',
        saveBtn: 'OK',
        hideAll: 'Hide All',
        showAll: 'Show All',
        tabs: {
          base: {
            title: 'Base Setting',
            tips: 'Click the icon to set personalized.'
          },
          other: {
            allDataSort: 'Remote Data Sorting',
            currPageSort: 'Current Page Data Sorting',
            pageSize: 'Page Size',
            title: 'Other Setting',
            tips: 'Settings for Sorting and Pagesize.',
            sortType: 'Sorting Type'
          }
        },
        title: 'Personalized Settings',
        switchtitle: 'Template Management',
        switchsave: 'Save configuration',
        switchlabel: 'List:',
        switchapply: 'Apply',
        switchedit: 'Edit',
        switchdel: 'Delete',
        switchconfirm: 'Confirm',
        switchonlytemp: 'Save as template only',
        switchtempapply: 'Save as template and use',
        switchtempoverwrite: 'Overwrite template and use',
        switchdelcon: 'Are you sure to delete this template?',
        switchdelyes: 'Yes',
        switchdelno: 'No',
        switchapplycon: 'Are you sure to use this template?'
      },
      removeSelectRecord: 'Are you sure you want to remove the selected record?',
      saveSuccess: 'Save successfully.',
      selectOneRecord: 'Please choose at least one piece of record!',
      isSaveMsg: 'There are change records, do you want to save them?'
    },
    hrapprover: {
      approver: 'Approver',
      noapprover: 'There is no approver',
      noselected: 'Select one record!',
      remark: 'Remarks'
    },
    imageViewer: {
      loadErrorAlt: 'Load Error',
      save: 'Save picture',
      del: 'Delete Picture',
      thumbnail: 'Thumbnail',
      menu: 'Menu',
      hide: 'Hide Sidebar',
      show: 'Show Sidebar'
    },
    navMenu: {
      moreText: 'more'
    },
    logout: {
      in: 'Login',
      out: 'Logout'
    },
    page: {
      goto: 'Go to',
      item: '',
      next: 'Next',
      page: 'Records/Page',
      pageClassifier: '',
      pagesize: 'Records/Page',
      prev: 'Prev',
      total: 'Total ',
      totals: 'Total: ',
      jump: 'Go to',
      hundredThousand: '100K+',
      million: '1M+',
      tenMillion: '10M+',
      loadingTotals: 'Loading Totals...'
    },
    popeditor: {
      cancel: 'Cancel',
      confirm: 'OK',
      historyLists: 'History options',
      reset: 'Reset',
      search: 'Search',
      selectionLists: 'Selected Items',
      sourceLists: 'Available Items',
      title: 'Select',
      filterNode: 'input text to filter node'
    },
    popupload: {
      fileName: 'File Name',
      fileSize: 'File Size',
      fileStatus: 'File Status',
      dialogTitle: 'File Upload',
      cancelButtonText: 'Cancel',
      tipsFileText: 'upload hints',
      uploadError: 'Upload failure!',
      uploadButtonText: 'select file',
      uploadSuccess: 'Upload Success!',
      saveButtonText: 'Click To Upload',
      uploadsButtonText: 'select files',
      errorTypeTips: 'Upload file type mismatch',
      errorSizeTips: 'Upload file size exceeds limit',
      limitUploadFileType: 'Upload file type is limited to',
      limitUploadFileNumber: 'Limit the number of uploaded files to',
      limitUploadFileSize: 'The size of the uploaded file does not exceed',
      errorNumTips: 'The number of uploaded files exceeds the limit. The operation has been cancelled'
    },
    rate: {
      level: {
        average: 'Average',
        excellent: 'Excellent',
        fair: 'Fair',
        good: 'Good',
        poor: 'Poor'
      }
    },
    select: {
      loading: 'Loading',
      noData: 'No data',
      noMatch: 'No matching data',
      placeholder: 'Select',
      pleaseSearch: 'Please search',
      search: 'Search',
      selected: 'Selected',
      selectedNum: '{num} selected',
      noSearchData: 'No search results. Please try again',
      add: 'Add'
    },
    search: {
      placeholder: 'search'
    },
    signature: {
      confirm: 'Confirm',
      rewrite: 'Rewrite',
      cancel: 'Cancel',
      tips: 'Please sign by hand',
      resign: 'Resign',
      placeholder: 'Please sign here (required)'
    },
    tabs: {
      moreItem: 'more'
    },
    tag: {
      add: 'Add'
    },
    toggleMenu: {
      placeholder: 'please input filter content'
    },
    treeMenu: {
      placeholder: 'please input filter content'
    },
    transfer: {
      filterPlaceholder: 'Enter keyword',
      hasCheckedFormat: '{checked}/{total} checked',
      noData: 'No data',
      noMatch: 'No matching data',
      noCheckedFormat: '{total} items',
      titles: ['List 1', 'List 2']
    },
    tree: {
      loading: 'Loading',
      emptyText: 'No data',
      switchText: 'check easily',
      edit: 'Edit',
      delete: 'Delete',
      addChild: 'Add Child',
      deleteTip: 'Data will be permanently deleted, are you sure you want to proceed with the deletion?',
      preserveSubnodeTip: 'This node have child nodes, Would you like to preserve the data of the child nodes?',
      preserveSubnodeData: "To preserve child nodes' data.",
      newNodeTitle: 'Add Child Nodes'
    },
    usercard: {
      address: 'Address',
      collapse: 'Collapse',
      department: 'Department',
      email: 'email',
      employeeId: 'Employee ID',
      'employee_id': 'Employee ID',
      empno: 'Employee Number',
      expand: 'Expand',
      fax: 'Fax',
      internal: 'Internal',
      manager: 'Manager',
      mobile: 'Mobile',
      other: 'Other',
      phone: 'Telephone',
      timezone: 'Time zone',
      title: 'User information: {0}',
      travelcode: 'Travel code',
      viop: 'VIOP',
      zipcode: 'Postal Code'
    },
    richText: {
      bold: 'Bold',
      italic: 'Tilt',
      underline: 'Underline',
      header: 'Paragraph Format',
      strike: 'Delete Line',
      blockquote: 'Block Reference',
      codeBlock: 'Insert Code Segment',
      size: 'Font Size',
      listOrdered: 'No. List',
      listBullet: 'Project List',
      header1: 'H1',
      header2: 'H2',
      align: 'Alignment Mode',
      color: 'Font Color',
      background: 'Background Color',
      image: 'Image',
      video: 'Video',
      link: 'Add Link',
      formula: 'Insert Function',
      clean: 'Clear Format',
      indent1: 'Indent To The Left',
      indent2: 'Indent To The Right',
      pickerLabel: 'Title Size',
      headerPicker1: 'Title 1',
      headerPicker2: 'Title 2',
      headerPicker3: 'Title 3',
      headerPicker4: 'Title 4',
      headerPicker5: 'Title 5',
      headerPicker6: 'Title 6',
      normal: 'Normal',
      sizeSmall: 'Small',
      sizeLarge: 'Large',
      sizeHuge: 'Super Large Size',
      alignPicker1: 'Align To The Left',
      alignPicker2: 'Align In The Center',
      alignPicker3: 'Align To The Right',
      alignPicker4: 'Align The Two Ends',
      subScript: 'Subscript',
      superScript: 'Superscript',
      directionRTL: 'Right To Left',
      font: 'Font',
      file: 'File',
      betterTable: 'Table',
      fullscreen: 'Fullscreen',
      insertColumnRight: 'Insert Column Right',
      insertColumnLeft: 'Insert Column Left',
      insertRowUp: 'Insert Row Up',
      insertRowDown: 'Insert Row Down',
      mergeCells: 'Merge Cells',
      unmergeCells: 'Split Cells',
      deleteColumn: 'Delete Current Column',
      deleteRow: 'Delete Current Row',
      deleteTable: 'Delete Table',
      colorPicker: 'Background Color',
      placeholder: 'Insert text here...',
      maxLength: 'Text Length exceeds the Limit, max Length config is '
    },
    steps: {
      done: 'Completed',
      doing: 'Ongoing',
      wait: 'Waiting'
    },
    actionSheet: {
      cancel: 'Cancel'
    },
    image: {
      loadFail: 'Loading failed'
    },
    miniPicker: {
      cancel: 'Cancel',
      confirm: 'Confirm'
    },
    pullRefresh: {
      pullingDown: 'Pull down to refresh',
      pullingUp: 'Pull up to refresh',
      pulling: 'Pull down to refresh',
      loosing: 'Release to refresh',
      success: 'Refresh success',
      failed: 'Refresh failed',
      noMore: 'There is no more'
    },
    currency: {
      defaultCurrency: 'Default currency',
      setDefault: 'Set as default',
      chooseCurrency: 'Choose currency'
    },
    calendarBar: {
      week: { 0: 'SUN', 1: 'MON', 2: 'TUE', 3: 'WED', 4: 'THU', 5: 'FRI', 6: 'SAT' },
      year: 'Year %s',
      yearMonth: '%m %y',
      month: {
        1: 'January',
        2: 'February',
        3: 'March',
        4: 'April',
        5: 'May',
        6: 'June',
        7: 'July',
        8: 'August',
        9: 'September',
        10: 'October',
        11: 'November',
        12: 'December'
      },
      monthAbbr: {
        1: 'Jan',
        2: 'Feb',
        3: 'Mar',
        4: 'Apr',
        5: 'May',
        6: 'Jun',
        7: 'Jul',
        8: 'Aug',
        9: 'Sept',
        10: 'Oct',
        11: 'Nov',
        12: 'Dec'
      }
    },
    calendarView: {
      week: { 0: 'SUN', 1: 'MON', 2: 'TUE', 3: 'WED', 4: 'THU', 5: 'FRI', 6: 'SAT' },
      weekDays: { 0: 'SUN', 1: 'MON', 2: 'TUE', 3: 'WED', 4: 'THU', 5: 'FRI', 6: 'SAT' },
      backToday: 'back to today',
      new: 'New',
      noSchedule: 'No Schedule',
      year: 'year',
      month: 'month',
      dateFormat: 'yyyy-MM'
    },
    selectedBox: {
      select: 'Selected (%s)',
      allSelect: 'All selected (%s)',
      clear: 'Clear'
    },
    record: {
      record: 'Record',
      cancel: 'Cancel',
      confirm: 'Confirm',
      clickToStartRecording: 'Click to start recording',
      clickToResumeRecording: 'Click to resume recording'
    },
    dialogSelect: {
      treeSearch: 'Enter a keyword and press Enter'
    }
  },
  validation: {
    array: {
      len: 'must be exactly %s in length',
      min: 'cannot be less than %s in length',
      max: 'cannot be greater than %s in length',
      range: 'must be between %s and %s in length'
    },
    date: {
      format: 'date %s is invalid for format %s',
      invalid: 'date %s is invalid',
      parse: 'date could not be parsed, %s is invalid '
    },
    default: 'Validation error on field %s',
    enum: 'must be one of %s',
    number: {
      len: '%s must equal %s',
      min: '%s cannot be less than %s',
      max: '%s cannot be greater than %s',
      range: '%s must be between %s and %s'
    },
    pattern: {
      mismatch: 'value %s does not match pattern %s'
    },
    required: 'required',
    string: {
      len: '%s must be exactly %s characters',
      min: '%s must be at least %s characters',
      max: '%s cannot be longer than %s characters',
      range: '%s must be between %s and %s characters'
    },
    types: {
      acceptFile: 'not a valid %s',
      acceptImg: 'not a valid %s',
      array: 'not an %s',
      boolean: 'not a %s',
      date: 'not a %s',
      dateTime: 'not a valid %s',
      dateYM: 'not a valid %s',
      dateYMD: 'not a valid %s',
      digits: 'not a valid %s',
      email: 'not a valid %s',
      fileSize: 'not a valid %s',
      float: 'not a %s',
      hex: 'not a valid %s',
      integer: 'not an %s',
      longDateTime: 'not a valid %s',
      method: 'not a %s (function)',
      number: 'not a %s',
      object: 'not an %s',
      regexp: 'not a valid %s',
      specialch: 'not a valid %s',
      specialch2: 'not a valid %s',
      speczh: 'not a valid %s',
      string: 'not a %s',
      time: 'not a valid %s',
      url: 'not a valid %s',
      version: 'not a valid %s'
    },
    whitespace: 'cannot be empty'
  }
} as any
