Browse Source

Merge branch 'develop' into fix/gui-v2-misc

pull/3051/head
Wing-Kam Wong 2 years ago
parent
commit
df446d8fe1
  1. 17
      packages/nc-gui-v2/components/cell/DatePicker.vue
  2. 17
      packages/nc-gui-v2/components/cell/DateTimePicker.vue
  3. 21
      packages/nc-gui-v2/components/cell/TimePicker.vue
  4. 9
      packages/nc-gui-v2/components/cell/Url.vue
  5. 19
      packages/nc-gui-v2/components/cell/YearPicker.vue
  6. 24
      packages/nc-gui-v2/components/smartsheet-column/EditOrAdd.vue
  7. 12
      packages/nc-gui-v2/components/smartsheet-header/Cell.vue
  8. 11
      packages/nc-gui-v2/components/smartsheet-header/VirtualCell.vue
  9. 87
      packages/nc-gui-v2/components/smartsheet-toolbar/MoreActions.vue
  10. 1
      packages/nc-gui-v2/components/smartsheet-toolbar/ShareView.vue
  11. 2
      packages/nc-gui-v2/components/smartsheet/Cell.vue
  12. 1534
      packages/nc-gui-v2/components/smartsheet/Form.vue
  13. 2
      packages/nc-gui-v2/components/smartsheet/Gallery.vue
  14. 2
      packages/nc-gui-v2/components/smartsheet/Grid.vue
  15. 10
      packages/nc-gui-v2/components/smartsheet/Toolbar.vue
  16. 4
      packages/nc-gui-v2/components/smartsheet/expanded-form/index.vue
  17. 1
      packages/nc-gui-v2/components/smartsheet/sidebar/MenuTop.vue
  18. 2
      packages/nc-gui-v2/components/tabs/auth/UserManagement.vue
  19. 6
      packages/nc-gui-v2/components/tabs/auth/user-management/ShareBase.vue
  20. 20
      packages/nc-gui-v2/components/virtual-cell/BelongsTo.vue
  21. 4
      packages/nc-gui-v2/components/virtual-cell/ManyToMany.vue
  22. 20
      packages/nc-gui-v2/components/virtual-cell/components/ListChildItems.vue
  23. 18
      packages/nc-gui-v2/composables/useColumnCreateStore.ts
  24. 3
      packages/nc-gui-v2/composables/useExpandedFormStore.ts
  25. 7
      packages/nc-gui-v2/composables/useGridViewColumnWidth.ts
  26. 6
      packages/nc-gui-v2/composables/useLTARStore.ts
  27. 36
      packages/nc-gui-v2/composables/useMetas.ts
  28. 23
      packages/nc-gui-v2/composables/useTabs.ts
  29. 36
      packages/nc-gui-v2/composables/useViewColumns.ts
  30. 55
      packages/nc-gui-v2/composables/useViewData.ts
  31. 28
      packages/nc-gui-v2/composables/useViewFilters.ts
  32. 3
      packages/nc-gui-v2/composables/useViewSorts.ts
  33. 8
      packages/nc-gui-v2/composables/useViews.ts
  34. 8
      packages/nc-gui-v2/context/index.ts
  35. 522
      packages/nc-gui-v2/lang/ar.json
  36. 522
      packages/nc-gui-v2/lang/bn.json
  37. 7
      packages/nc-gui-v2/lang/da.json
  38. 7
      packages/nc-gui-v2/lang/de.json
  39. 7
      packages/nc-gui-v2/lang/en.json
  40. 9
      packages/nc-gui-v2/lang/es.json
  41. 5
      packages/nc-gui-v2/lang/fa.json
  42. 7
      packages/nc-gui-v2/lang/fi.json
  43. 9
      packages/nc-gui-v2/lang/fr.json
  44. 522
      packages/nc-gui-v2/lang/hi.json
  45. 7
      packages/nc-gui-v2/lang/hr.json
  46. 7
      packages/nc-gui-v2/lang/id.json
  47. 7
      packages/nc-gui-v2/lang/it_IT.json
  48. 25
      packages/nc-gui-v2/lang/iw.json
  49. 5
      packages/nc-gui-v2/lang/ja.json
  50. 7
      packages/nc-gui-v2/lang/ko.json
  51. 7
      packages/nc-gui-v2/lang/lv.json
  52. 7
      packages/nc-gui-v2/lang/nl.json
  53. 7
      packages/nc-gui-v2/lang/no.json
  54. 7
      packages/nc-gui-v2/lang/pl.json
  55. 7
      packages/nc-gui-v2/lang/pt.json
  56. 7
      packages/nc-gui-v2/lang/pt_BR.json
  57. 6
      packages/nc-gui-v2/lang/ru.json
  58. 7
      packages/nc-gui-v2/lang/sl.json
  59. 7
      packages/nc-gui-v2/lang/sv.json
  60. 7
      packages/nc-gui-v2/lang/th.json
  61. 7
      packages/nc-gui-v2/lang/tr.json
  62. 7
      packages/nc-gui-v2/lang/uk.json
  63. 7
      packages/nc-gui-v2/lang/vi.json
  64. 5
      packages/nc-gui-v2/lang/zh_CN.json
  65. 5
      packages/nc-gui-v2/lang/zh_HK.json
  66. 5
      packages/nc-gui-v2/lang/zh_TW.json
  67. 2
      packages/nc-gui-v2/utils/urlUtils.ts
  68. 52
      packages/nocodb-sdk/src/lib/Api.ts
  69. 2
      packages/nocodb/src/lib/models/User.ts
  70. 37
      packages/nocodb/src/lib/models/View.ts
  71. 123
      scripts/sdk/swagger.json
  72. 2
      scripts/sdk/templates/http-clients/axios-http-client.eta
  73. 4
      scripts/sdk/templates/http-clients/fetch-http-client.eta

17
packages/nc-gui-v2/components/cell/DatePicker.vue

@ -5,6 +5,7 @@ import { ColumnInj, ReadonlyInj } from '~/context'
interface Props {
modelValue: string | null
}
const { modelValue } = defineProps<Props>()
const emit = defineEmits(['update:modelValue'])
@ -39,6 +40,18 @@ const localState = $computed({
}
},
})
const open = ref(false)
const randomClass = `picker_${Math.floor(Math.random() * 99999)}`
watch(
open,
(next) => {
if (next) {
onClickOutside(document.querySelector(`.${randomClass}`)! as HTMLDivElement, () => (open.value = false))
}
},
{ flush: 'post' },
)
</script>
<template>
@ -50,7 +63,9 @@ const localState = $computed({
:placeholder="isDateInvalid ? 'Invalid date' : !readOnlyMode ? 'Select date' : ''"
:allow-clear="!readOnlyMode"
:input-read-only="true"
:open="readOnlyMode ? false : undefined"
:dropdown-class-name="randomClass"
:open="readOnlyMode ? false : open"
@click="open = !open"
>
<template #suffixIcon></template>
</a-date-picker>

17
packages/nc-gui-v2/components/cell/DateTimePicker.vue

@ -41,6 +41,19 @@ const localState = $computed({
}
},
})
const open = ref(false)
const randomClass = `picker_${Math.floor(Math.random() * 99999)}`
watch(
open,
(next) => {
if (next) {
onClickOutside(document.querySelector(`.${randomClass}`)! as HTMLDivElement, () => (open.value = false))
}
},
{ flush: 'post' },
)
</script>
<template>
@ -53,7 +66,9 @@ const localState = $computed({
:placeholder="isDateInvalid ? 'Invalid date' : !readOnlyMode ? 'Select date and time' : ''"
:allow-clear="!readOnlyMode"
:input-read-only="true"
:open="readOnlyMode ? false : undefined"
:dropdown-class-name="randomClass"
:open="readOnlyMode ? false : open"
@click="open = !open"
>
<template #suffixIcon></template>
</a-date-picker>

21
packages/nc-gui-v2/components/cell/TimePicker.vue

@ -1,9 +1,10 @@
<script setup lang="ts">
import { onClickOutside } from '@vueuse/core'
import dayjs from 'dayjs'
import { ReadonlyInj } from '~/context'
interface Props {
modelValue: string | null
modelValue?: string | null
}
const { modelValue } = defineProps<Props>()
@ -50,6 +51,19 @@ const localState = $computed({
}
},
})
const open = ref(false)
const randomClass = `picker_${Math.floor(Math.random() * 99999)}`
watch(
open,
(next) => {
if (next) {
onClickOutside(document.querySelector(`.${randomClass}`)! as HTMLDivElement, () => (open.value = false))
}
},
{ flush: 'post' },
)
</script>
<template>
@ -64,7 +78,10 @@ const localState = $computed({
:placeholder="isTimeInvalid ? 'Invalid time' : !readOnlyMode ? 'Select time' : ''"
:allow-clear="!readOnlyMode"
:input-read-only="true"
:open="readOnlyMode ? false : undefined"
:open="readOnlyMode ? false : open"
:dropdown-class-name="randomClass"
@click="open = !open"
@ok="open = !open"
>
<template #suffixIcon></template>
</a-time-picker>

9
packages/nc-gui-v2/components/cell/Url.vue

@ -27,12 +27,19 @@ const vModel = computed({
const isValid = computed(() => value && isValidURL(value))
const url = computed<string | null>(() => {
if (!value || !isValidURL(value)) return null
/** add url scheme if missing */
if (/^https?:\/\//.test(value)) return value
return `https://${value}`
})
const focus: VNodeRef = (el) => (el as HTMLInputElement)?.focus()
</script>
<template>
<input v-if="editEnabled" :ref="focus" v-model="vModel" class="outline-none" @blur="editEnabled = false" />
<nuxt-link v-else-if="isValid" class="py-2 underline hover:opacity-75" :to="value || ''" target="_blank">{{ value }}</nuxt-link>
<nuxt-link v-else-if="isValid" class="py-2 underline hover:opacity-75" :to="url" target="_blank">{{ value }} </nuxt-link>
<span v-else>{{ value }}</span>
</template>

19
packages/nc-gui-v2/components/cell/YearPicker.vue

@ -1,4 +1,5 @@
<script setup lang="ts">
import { onClickOutside } from '@vueuse/core'
import dayjs from 'dayjs'
import { ReadonlyInj } from '~/context'
@ -39,6 +40,19 @@ const localState = $computed({
}
},
})
const open = ref(false)
const randomClass = `picker_${Math.floor(Math.random() * 99999)}`
watch(
open,
(next) => {
if (next) {
onClickOutside(document.querySelector(`.${randomClass}`)! as HTMLDivElement, () => (open.value = false))
}
},
{ flush: 'post' },
)
</script>
<template>
@ -50,7 +64,10 @@ const localState = $computed({
:placeholder="isYearInvalid ? 'Invalid year' : !readOnlyMode ? 'Select year' : ''"
:allow-clear="!readOnlyMode"
:input-read-only="true"
:open="readOnlyMode ? false : undefined"
:open="readOnlyMode ? false : open"
:dropdown-class-name="randomClass"
@click="open = !open"
@change="open = !open"
>
<template #suffixIcon></template>
</a-date-picker>

24
packages/nc-gui-v2/components/smartsheet-column/EditOrAdd.vue

@ -13,7 +13,7 @@ interface Props {
const { editColumnDropdown } = defineProps<Props>()
const emit = defineEmits(['cancel'])
const emit = defineEmits(['cancel', 'submit'])
const meta = inject(MetaInj)
const reloadDataTrigger = inject(ReloadViewDataHookInj)
const advancedOptions = ref(false)
@ -43,10 +43,11 @@ const uiTypesOptions = computed<typeof uiTypes>(() => {
]
})
const reloadMetaAndData = () => {
const reloadMetaAndData = async () => {
emit('cancel')
getMeta(meta?.value.id as string, true)
await getMeta(meta?.value.id as string, true)
reloadDataTrigger?.trigger()
emit('submit')
}
function onCancel() {
@ -59,7 +60,11 @@ function onCancel() {
async function onSubmit() {
await addOrUpdate(reloadMetaAndData)
advancedOptions.value = false
// add delay to complete the minimize transition
setTimeout(() => {
advancedOptions.value = false
}, 500)
}
// create column meta if it's a new column
@ -102,15 +107,10 @@ if (!formState.value?.column_name) {
<template>
<div class="min-w-[350px] w-max max-h-[95vh] bg-white shadow p-4 overflow-auto" @click.stop>
<a-form v-model="formState" name="column-create-or-edit" layout="vertical">
<a-form-item :label="$t('labels.columnName')" v-bind="validateInfos.column_name">
<a-input
ref="antInput"
v-model:value="formState.column_name"
size="small"
class="nc-column-name-input"
@input="onAlter(8)"
/>
<a-form-item :label="$t('labels.columnName')" v-bind="validateInfos.title">
<a-input ref="antInput" v-model:value="formState.title" size="small" class="nc-column-name-input" @input="onAlter(8)" />
</a-form-item>
<a-form-item
v-if="!(editColumnDropdown && !!onlyNameUpdateOnEditColumns.find((col) => col === formState.uidt))"
:label="$t('labels.columnType')"

12
packages/nc-gui-v2/components/smartsheet-header/Cell.vue

@ -5,13 +5,16 @@ import { inject, toRef } from 'vue'
import { ColumnInj, IsFormInj, MetaInj } from '~/context'
import { useProvideColumnCreateStore } from '#imports'
const props = defineProps<{ column: ColumnType & { meta: any }; hideMenu?: boolean }>()
const column = toRef(props, 'column')
const props = defineProps<{ column: ColumnType & { meta: any }; required: boolean; hideMenu?: boolean }>()
const hideMenu = toRef(props, 'hideMenu')
provide(ColumnInj, column)
const meta = inject(MetaInj)
const isForm = inject(IsFormInj, false)
const isForm = inject(IsFormInj, ref(false))
const column = toRef(props, 'column')
provide(ColumnInj, column)
// instantiate column update store
useProvideColumnCreateStore(meta as Ref<TableType>, column)
@ -21,6 +24,7 @@ useProvideColumnCreateStore(meta as Ref<TableType>, column)
<div class="flex align-center w-full">
<SmartsheetHeaderCellIcon v-if="column" />
<span v-if="column" class="name" style="white-space: nowrap" :title="column.title">{{ column.title }}</span>
<span v-if="(column.rqd && !column.cdf) || required" class="text-red-500">&nbsp;*</span>
<template v-if="!hideMenu">
<div class="flex-1" />

11
packages/nc-gui-v2/components/smartsheet-header/VirtualCell.vue

@ -5,14 +5,16 @@ import type { Ref } from 'vue'
import { ColumnInj, IsFormInj, MetaInj } from '~/context'
import { provide, toRef, useMetas, useProvideColumnCreateStore } from '#imports'
const props = defineProps<{ column: ColumnType & { meta: any }; hideMenu?: boolean }>()
const props = defineProps<{ column: ColumnType & { meta: any }; hideMenu?: boolean; required: boolean }>()
const column = toRef(props, 'column')
const hideMenu = toRef(props, 'hideMenu')
provide(ColumnInj, column)
const { metas } = useMetas()
const meta = inject(MetaInj)
const isForm = inject(IsFormInj, false)
const isForm = inject(IsFormInj, ref(false))
const { isLookup, isBt, isRollup, isMm, isHm, isFormula } = useVirtualCell(column)
@ -78,19 +80,20 @@ useProvideColumnCreateStore(meta as Ref<TableType>, column)
</script>
<template>
<div class="d-flex align-center">
<div class="d-flex align-center w-full">
<!-- <v-tooltip bottom>
<template #activator="{ on }">
todo: bring tooltip
-->
<SmartsheetHeaderVirtualCellIcon v-if="column" />
<a-tooltip placement="bottom">
<template #title>
{{ tooltipMsg }}
</template>
<span class="name" style="white-space: nowrap" :title="column.title"> {{ column.title }}</span>
</a-tooltip>
<span v-if="column.rqd" class="error--text text--lighten-1">&nbsp;*</span>
<span v-if="column.rqd || required" class="text-red-500">&nbsp;*</span>
<!-- <span class="caption" v-html="tooltipMsg" /> -->

87
packages/nc-gui-v2/components/smartsheet-toolbar/MoreActions.vue

@ -1,7 +1,8 @@
<script lang="ts" setup>
import * as XLSX from 'xlsx'
import { ExportTypes } from 'nocodb-sdk'
import { notification } from 'ant-design-vue'
import FileSaver from 'file-saver'
import { notification } from 'ant-design-vue'
import { useNuxtApp } from '#app'
import { useProject } from '#imports'
import { ActiveViewInj, MetaInj } from '~/context'
@ -15,9 +16,18 @@ import MdiViewListIcon from '~icons/mdi/view-list-outline'
const sharedViewListDlg = ref(false)
// todo : replace with inject
const publicViewId = null
// TODO: pending for shared view
// interface Props {
// publicViewId?: string
// queryParams?: Record<string, any>
// reqPayload?: Record<string, any>
// }
// const { publicViewId, queryParams, reqPayload } = defineProps<Props>()
const { project } = useProject()
const { $api } = useNuxtApp()
@ -30,57 +40,59 @@ const showWebhookDrawer = ref(false)
const quickImportDialog = ref(false)
const exportCsv = async () => {
const exportFile = async (exportType: ExportTypes.EXCEL | ExportTypes.CSV) => {
let offset = 0
let c = 1
const responseType = exportType === ExportTypes.EXCEL ? 'base64' : 'blob'
try {
while (!isNaN(offset) && offset > -1) {
let res
if (publicViewId) {
/* res = await this.$api.public.csvExport(this.publicViewId, ExportTypes.CSV, {
responseType: 'blob',
query: {
fields:
this.queryParams &&
this.queryParams.fieldsOrder &&
this.queryParams.fieldsOrder.filter(c => this.queryParams.showFields[c]),
offset,
sortArrJson: JSON.stringify(
this.reqPayload &&
this.reqPayload.sorts &&
this.reqPayload.sorts.map(({ fk_column_id, direction }) => ({
direction,
fk_column_id,
}))
),
filterArrJson: JSON.stringify(this.reqPayload && this.reqPayload.filters),
},
headers: {
'xc-password': this.reqPayload && this.reqPayload.password,
},
});
*/
// TODO: pending for shared view
// const { data, headers } = await $api.public.csvExport(publicViewId, exportType, {
// format: responseType,
// query: {
// fields:
// queryParams && queryParams.fieldsOrder && queryParams.fieldsOrder.filter((c: number) => queryParams.showFields[c]),
// offset,
// sortArrJson: JSON.stringify(
// reqPayload &&
// reqPayload.sorts &&
// reqPayload.sorts.map(({ fk_column_id, direction }) => ({
// direction,
// fk_column_id,
// })),
// ),
// filterArrJson: JSON.stringify(reqPayload && reqPayload.filters),
// },
// headers: {
// 'xc-password': reqPayload && reqPayload.password,
// },
// } as Record<string, any>)
} else {
res = await $api.dbViewRow.export(
'noco',
project?.value.title as string,
meta?.value.title as string,
selectedView?.value.title as string,
ExportTypes.CSV,
exportType,
{
responseType: 'blob',
responseType,
query: {
offset,
},
} as any,
)
}
const { data } = res
offset = +res.headers['nc-export-offset']
const blob = new Blob([data], { type: 'text/plain;charset=utf-8' })
FileSaver.saveAs(blob, `${meta?.value.title}_exported_${c++}.csv`)
const { data, headers } = res
if (exportType === ExportTypes.EXCEL) {
const workbook = XLSX.read(data, { type: 'base64' })
XLSX.writeFile(workbook, `${meta?.value.title}_exported_${c++}.xlsx`)
} else if (exportType === ExportTypes.CSV) {
const blob = new Blob([data], { type: 'text/plain;charset=utf-8' })
FileSaver.saveAs(blob, `${meta?.value.title}_exported_${c++}.csv`)
}
offset = +headers['nc-export-offset']
if (offset > -1) {
notification.info({
message: 'Downloading more files',
@ -113,11 +125,16 @@ const exportCsv = async () => {
<template #overlay>
<div class="bg-white shadow">
<div>
<div class="nc-menu-item" @click="exportCsv">
<div class="nc-menu-item" @click="exportFile(ExportTypes.CSV)">
<MdiDownloadIcon />
<!-- Download as CSV -->
{{ $t('activity.downloadCSV') }}
</div>
<div class="nc-menu-item" @click="exportFile(ExportTypes.EXCEL)">
<MdiDownloadIcon />
<!-- Download as XLSX -->
{{ $t('activity.downloadExcel') }}
</div>
<div class="nc-menu-item" @click="quickImportDialog = true">
<MdiUploadIcon />
<!-- Upload CSV -->

1
packages/nc-gui-v2/components/smartsheet-toolbar/ShareView.vue

@ -67,7 +67,6 @@ async function saveAllowCSVDownload() {
try {
const meta = shared.value.meta && typeof shared.value.meta === 'string' ? JSON.parse(shared.value.meta) : shared.value.meta
// todo: update swagger
await $api.dbViewShare.update(shared.value.id, {
meta,
} as any)

2
packages/nc-gui-v2/components/smartsheet/Cell.vue

@ -53,7 +53,7 @@ const isAutoSaved = $computed(() => {
})
const isManualSaved = $computed(() => {
return [UITypes.Currency, UITypes.Year, UITypes.Time, UITypes.Duration].includes(column?.value?.uidt as UITypes)
return [UITypes.Currency, UITypes.Duration].includes(column?.value?.uidt as UITypes)
})
const vModel = computed({

1534
packages/nc-gui-v2/components/smartsheet/Form.vue

File diff suppressed because it is too large Load Diff

2
packages/nc-gui-v2/components/smartsheet/Gallery.vue

@ -13,7 +13,7 @@ const view = inject(ActiveViewInj)
const { loadData, paginationData, formattedData: data, loadGalleryData, galleryData, changePage } = useViewData(meta, view as any)
provide(IsFormInj, false)
provide(IsFormInj, ref(false))
provide(IsGridInj, false)
provide(PaginationDataInj, paginationData)
provide(ChangePageInj, changePage)

2
packages/nc-gui-v2/components/smartsheet/Grid.vue

@ -82,7 +82,7 @@ const { loadGridViewColumns, updateWidth, resizingColWidth, resizingCol } = useG
onMounted(loadGridViewColumns)
provide(IsFormInj, false)
provide(IsFormInj, ref(false))
provide(IsGridInj, true)
provide(PaginationDataInj, paginationData)
provide(ChangePageInj, changePage)

10
packages/nc-gui-v2/components/smartsheet/Toolbar.vue

@ -6,17 +6,17 @@ const { isGrid, isForm } = useSmartsheetStoreOrThrow()
<template>
<div class="nc-table-toolbar w-full py-1 flex gap-1 items-center" style="z-index: 7">
<SmartsheetToolbarSearchData class="flex-shrink" />
<SmartsheetToolbarSearchData v-if="isGrid" class="flex-shrink" />
<SmartsheetToolbarFieldsMenu :show-system-fields="false" />
<SmartsheetToolbarFieldsMenu v-if="isGrid" :show-system-fields="false" />
<SmartsheetToolbarColumnFilterMenu />
<SmartsheetToolbarColumnFilterMenu v-if="isGrid" />
<SmartsheetToolbarSortListMenu />
<SmartsheetToolbarSortListMenu v-if="isGrid" />
<SmartsheetToolbarShareView v-if="isForm || isGrid" />
<SmartsheetToolbarMoreActions />
<SmartsheetToolbarMoreActions v-if="isGrid" />
<div class="flex-1" />
</div>

4
packages/nc-gui-v2/components/smartsheet/expanded-form/index.vue

@ -33,7 +33,7 @@ const row = toRef(props, 'row')
const state = toRef(props, 'state')
const meta = toRef(props, 'meta')
const _fields = computedInject(FieldsInj, (_fields) => {
const fields = computedInject(FieldsInj, (_fields) => {
if (props.useMetaFields) {
return meta.value.columns ?? []
}
@ -59,7 +59,7 @@ if (props.loadRow) {
useProvideSmartsheetStore(ref({}) as any, meta)
provide(IsFormInj, true)
provide(IsFormInj, ref(true))
// accept as a prop
// const row: Row = { row: {}, rowMeta: {}, oldRow: {} }

1
packages/nc-gui-v2/components/smartsheet/sidebar/MenuTop.vue

@ -151,7 +151,6 @@ async function onRename(view: ViewType) {
}
try {
// todo typing issues, order and id do not exist on all members of ViewTypes (Kanban, Gallery, Form, Grid)
await api.dbView.update(view.id!, {
title: view.title,
order: view.order,

2
packages/nc-gui-v2/components/tabs/auth/UserManagement.vue

@ -38,7 +38,7 @@ const loadUsers = async (page = currentPage, limit = currentLimit) => {
if (!project.value?.id) return
// TODO: Types of api is not correct
const response = await $api.auth.projectUserList(project.value?.id, {
const response: any = await $api.auth.projectUserList(project.value?.id, {
query: {
limit,
offset: searchText.value.length === 0 ? (page - 1) * limit : 0,

6
packages/nc-gui-v2/components/tabs/auth/user-management/ShareBase.vue

@ -30,8 +30,7 @@ const loadBase = async () => {
try {
if (!project.value.id) return
// todo: result is missing roles in return-type
const res: any = await $api.project.sharedBaseGet(project.value.id)
const res = await $api.project.sharedBaseGet(project.value.id)
base = {
uuid: res.uuid,
url: res.url,
@ -48,8 +47,7 @@ const createShareBase = async (role = ShareBaseRole.Viewer) => {
try {
if (!project.value.id) return
// todo: returns void?
const res: any = await $api.project.sharedBaseUpdate(project.value.id, {
const res = await $api.project.sharedBaseUpdate(project.value.id, {
roles: role,
})

20
packages/nc-gui-v2/components/virtual-cell/BelongsTo.vue

@ -4,7 +4,9 @@ import type { Ref } from 'vue'
import ItemChip from './components/ItemChip.vue'
import ListItems from './components/ListItems.vue'
import { inject, ref, useProvideLTARStore, useSmartsheetRowStoreOrThrow } from '#imports'
import { CellValueInj, ColumnInj, ReloadViewDataHookInj, RowInj } from '~/context'
import { ActiveCellInj, CellValueInj, ColumnInj, ReloadViewDataHookInj, RowInj } from '~/context'
import MdiArrowExpand from '~icons/mdi/arrow-expand'
import MdiPlus from '~icons/mdi/plus'
const column = inject(ColumnInj)
@ -14,7 +16,7 @@ const cellValue = inject(CellValueInj, ref<any>(null))
const row = inject(RowInj)
const active = false
const active = inject(ActiveCellInj)
const listItemsDlg = ref(false)
@ -28,6 +30,8 @@ const { loadRelatedTableMeta, relatedTablePrimaryValueProp, unlink } = useProvid
await loadRelatedTableMeta()
const addIcon = computed(() => (cellValue?.value ? MdiArrowExpand : MdiPlus))
const value = computed(() => {
if (cellValue?.value) {
return cellValue?.value
@ -54,7 +58,8 @@ const unlinkRef = async (rec: Record<string, any>) => {
</template>
</div>
<div class="flex-1 flex justify-end gap-1 min-h-[30px] align-center">
<MdiArrowExpand
<component
:is="addIcon"
class="text-sm nc-action-icon text-gray-500/50 hover:text-gray-500 select-none group-hover:(text-gray-500)"
@click="listItemsDlg = true"
/>
@ -63,12 +68,15 @@ const unlinkRef = async (rec: Record<string, any>) => {
</div>
</template>
<style scoped>
<style scoped lang="scss">
.nc-action-icon {
@apply hidden cursor-pointer;
}
.chips-wrapper:hover .nc-action-icon {
@apply inline-block;
.chips-wrapper:hover,
.chips-wrapper.active {
.nc-action-icon {
@apply inline-block;
}
}
</style>

4
packages/nc-gui-v2/components/virtual-cell/ManyToMany.vue

@ -66,9 +66,9 @@ const unlinkRef = async (rec: Record<string, any>) => {
<template v-if="!isForm">
<div class="chips flex align-center img-container flex-grow hm-items flex-nowrap min-w-0 overflow-hidden">
<template v-if="cells">
<ItemChip v-for="(cell, i) of cells" :key="i" :item="ch" :value="cell.value" @unlink="unlinkRef(cell.item)" />
<ItemChip v-for="(cell, i) of cells" :key="i" :item="cell.item" :value="cell.value" @unlink="unlinkRef(cell.item)" />
<span v-if="value?.length === 10" class="caption pointer ml-1 grey--text" @click="childListDlg = true">more... </span>
<span v-if="cells?.length === 10" class="caption pointer ml-1 grey--text" @click="childListDlg = true">more... </span>
</template>
</div>

20
packages/nc-gui-v2/components/virtual-cell/components/ListChildItems.vue

@ -1,14 +1,14 @@
<script lang="ts" setup>
import { Modal } from 'ant-design-vue'
import type { ColumnType } from 'nocodb-sdk'
import { useLTARStoreOrThrow, useSmartsheetRowStoreOrThrow, useVModel, watch } from '#imports'
import { computed, useLTARStoreOrThrow, useSmartsheetRowStoreOrThrow, useVModel, watch } from '#imports'
import { ColumnInj, IsFormInj } from '~/context'
const props = defineProps<{ modelValue?: boolean }>()
const emit = defineEmits(['update:modelValue', 'attachRecord'])
const vModel = useVModel(props, 'modelValue', emit)
const isForm = inject(IsFormInj, false)
const isForm = inject(IsFormInj, ref(false))
const column = inject(ColumnInj)
const {
@ -25,11 +25,15 @@ const {
const { isNew, state, removeLTARRef } = useSmartsheetRowStoreOrThrow()
watch([vModel, isForm], (nextVal) => {
if (nextVal[0] || nextVal[1]) {
loadChildrenList()
}
})
watch(
[vModel, isForm],
(nextVal) => {
if (nextVal[0] || nextVal[1]) {
loadChildrenList()
}
},
{ immediate: true },
)
const unlinkRow = async (row: Record<string, any>) => {
if (isNew.value) {
@ -41,7 +45,7 @@ const unlinkRow = async (row: Record<string, any>) => {
}
const container = computed(() =>
isForm
isForm?.value
? h('div', {
class: 'w-full p-2',
})

18
packages/nc-gui-v2/composables/useColumnCreateStore.ts

@ -33,15 +33,14 @@ const [useProvideColumnCreateStore, useColumnCreateStore] = createInjectionState
title: 'title',
uidt: UITypes.SingleLineText,
...(column?.value || {}),
// todo: swagger json update - include meta
meta: (column?.value as any)?.meta || {},
meta: column?.value?.meta || {},
})
const additionalValidations = ref<Record<string, any>>({})
const validators = computed(() => {
return {
column_name: [
title: [
{
required: true,
message: 'Column name is required',
@ -86,6 +85,7 @@ const [useProvideColumnCreateStore, useColumnCreateStore] = createInjectionState
const generateNewColumnMeta = () => {
setAdditionalValidations({})
formState.value = { meta: {}, ...sqlUi.value.getNewColumn((meta.value?.columns?.length || 0) + 1) }
formState.value.title = formState.value.title || formState.value.column_name
}
const onUidtOrIdTypeChange = () => {
@ -172,7 +172,7 @@ const [useProvideColumnCreateStore, useColumnCreateStore] = createInjectionState
if (cdf) formState.value.cdf = formState.value.cdf || null
}
const addOrUpdate = async (onSuccess: () => {}) => {
const addOrUpdate = async (onSuccess: () => void) => {
try {
console.log(formState, validators)
if (!(await validate())) return
@ -185,7 +185,7 @@ const [useProvideColumnCreateStore, useColumnCreateStore] = createInjectionState
try {
formState.value.table_name = meta.value.table_name
formState.value.title = formState.value.column_name
// formState.value.title = formState.value.column_name
if (column?.value) {
await $api.dbTableColumn.update(column?.value?.id as string, formState.value)
notification.success({
@ -212,7 +212,7 @@ const [useProvideColumnCreateStore, useColumnCreateStore] = createInjectionState
message: 'Column created',
})
}
onSuccess()
onSuccess?.()
} catch (e: any) {
notification.error({
message: await extractSdkResponseErrorMsg(e),
@ -220,6 +220,12 @@ const [useProvideColumnCreateStore, useColumnCreateStore] = createInjectionState
}
}
/** set column name same as title which is actual name in db */
watch(
() => formState.value?.title,
(newTitle) => (formState.value.column_name = newTitle),
)
return {
formState,
resetFields,

3
packages/nc-gui-v2/composables/useExpandedFormStore.ts

@ -84,9 +84,8 @@ const [useProvideExpandedFormStore, useExpandedFormStore] = useInjectionState((m
await api.utils.commentRow({
fk_model_id: meta.value?.id as string,
row_id: rowId,
// todo: swagger type correction
description: comment.value,
} as any)
})
comment.value = ''
message.success('Comment added successfully')

7
packages/nc-gui-v2/composables/useGridViewColumnWidth.ts

@ -4,7 +4,6 @@ import type { Ref } from 'vue'
import { useMetas } from './useMetas'
import { useUIPermission } from './useUIPermission'
// todo: update swagger
export function useGridViewColumnWidth(view: Ref<(GridType & { id?: string }) | undefined>) {
const { css, load: loadCss, unload: unloadCss } = useStyleTag('')
const { isUIAllowed } = useUIPermission()
@ -18,8 +17,7 @@ export function useGridViewColumnWidth(view: Ref<(GridType & { id?: string }) |
const columns = computed<ColumnType[]>(() => metas?.value?.[(view?.value as any)?.fk_model_id as string]?.columns)
watch(
// todo : update type in swagger
() => [gridViewCols, resizingCol, resizingColWidth, columns],
[gridViewCols, resizingCol, resizingColWidth],
() => {
let style = ''
for (const c of columns?.value || []) {
@ -49,6 +47,9 @@ export function useGridViewColumnWidth(view: Ref<(GridType & { id?: string }) |
loadCss()
}
/** when columns changes(create/delete) reload grid columns */
watch(columns, loadGridViewColumns)
const updateWidth = (id: string, width: string) => {
if (gridViewCols?.value?.[id]) {
gridViewCols.value[id].width = width

6
packages/nc-gui-v2/composables/useLTARStore.ts

@ -94,14 +94,13 @@ const [useProvideLTARStore, useLTARStore] = useInjectionState(
rowId.value,
colOptions.type as 'mm' | 'hm',
column?.value?.title,
// todo: swagger type correction
{
limit: childrenExcludedListPagination.size,
offset: childrenExcludedListPagination.size * (childrenExcludedListPagination.page - 1),
where:
childrenExcludedListPagination.query &&
`(${relatedTablePrimaryValueProp.value},like,${childrenExcludedListPagination.query})`,
} as any,
},
)
}
} catch (e: any) {
@ -123,12 +122,11 @@ const [useProvideLTARStore, useLTARStore] = useInjectionState(
rowId.value,
colOptions.type as 'mm' | 'hm',
column?.value?.title,
// todo: swagger type correction
{
limit: childrenListPagination.size,
offset: childrenListPagination.size * (childrenListPagination.page - 1),
where: childrenListPagination.query && `(${relatedTablePrimaryValueProp.value},like,${childrenListPagination.query})`,
} as any,
},
)
} catch (e: any) {
notification.error({

36
packages/nc-gui-v2/composables/useMetas.ts

@ -1,3 +1,4 @@
import type { WatchStopHandle } from 'vue'
import type { TableInfoType, TableType } from 'nocodb-sdk'
import { useProject } from './useProject'
import { useNuxtApp, useState } from '#app'
@ -7,24 +8,55 @@ export function useMetas() {
const { tables } = useProject()
const metas = useState<{ [idOrTitle: string]: TableType | any }>('metas', () => ({}))
const loadingState = useState<Record<string, boolean>>('metas-loading-state', () => ({}))
const getMeta = async (tableIdOrTitle: string, force = false): Promise<TableType | TableInfoType | null> => {
if (!force && metas.value[tableIdOrTitle as string]) return metas.value[tableIdOrTitle as string]
if (!force && metas.value[tableIdOrTitle]) return metas.value[tableIdOrTitle]
const modelId = (tables.value.find((t) => t.title === tableIdOrTitle || t.id === tableIdOrTitle) || {}).id
if (!modelId) {
console.warn(`Table '${tableIdOrTitle}' is not found in the table list`)
return null
}
const model = await $api.dbTable.read(modelId)
/** wait until loading is finished if requesting same meta */
if (!force) {
await new Promise((resolve) => {
let unwatch: WatchStopHandle
const timeout = setTimeout(() => {
unwatch?.()
clearTimeout(timeout)
resolve(null)
}, 20000)
unwatch = watch(
() => loadingState.value[modelId],
(isLoading) => {
if (!isLoading) {
clearTimeout(timeout)
resolve(null)
unwatch?.()
}
},
{ immediate: true },
)
})
if (metas.value[modelId]) return metas.value[modelId]
}
loadingState.value[modelId] = true
const model = await $api.dbTable.read(modelId)
metas.value = {
...metas.value,
[model.id!]: model,
[model.title]: model,
}
loadingState.value[modelId] = false
return model
}

23
packages/nc-gui-v2/composables/useTabs.ts

@ -61,15 +61,7 @@ export function useTabs() {
const tab = tabs.value[index]
if (!tab) return
switch (tab.type) {
case TabType.TABLE:
return navigateTo(`/nc/${route.params.projectId}/table/${tab?.title}${tab.viewTitle ? `/${tab.viewTitle}` : ''}`)
case TabType.VIEW:
return navigateTo(`/nc/${route.params.projectId}/view/${tab?.title}${tab.viewTitle ? `/${tab.viewTitle}` : ''}`)
case TabType.AUTH:
return navigateTo(`/nc/${route.params.projectId}/auth`)
}
return navigateToTab(tab)
}
},
})
@ -101,12 +93,23 @@ export function useTabs() {
if (newTabIndex === -1) {
await navigateTo(`/nc/${route.params.projectId}`)
} else {
await navigateTo(`/nc/${route.params.projectId}/table/${tabs.value?.[newTabIndex]?.title}`)
await navigateToTab(tabs.value?.[newTabIndex])
}
}
tabs.value.splice(index, 1)
}
function navigateToTab(tab: TabItem) {
switch (tab.type) {
case TabType.TABLE:
return navigateTo(`/nc/${route.params.projectId}/table/${tab?.title}${tab.viewTitle ? `/${tab.viewTitle}` : ''}`)
case TabType.VIEW:
return navigateTo(`/nc/${route.params.projectId}/view/${tab?.title}${tab.viewTitle ? `/${tab.viewTitle}` : ''}`)
case TabType.AUTH:
return navigateTo(`/nc/${route.params.projectId}/auth`)
}
}
const updateTab = (key: number | Partial<TabItem>, newTabItemProps: Partial<TabItem>) => {
const tab = typeof key === 'number' ? tabs.value[key] : tabs.value.find(getPredicate(key))
if (tab) {

36
packages/nc-gui-v2/composables/useViewColumns.ts

@ -1,11 +1,11 @@
import { isSystemColumn } from 'nocodb-sdk'
import type { ColumnType, FormType, GalleryType, GridType, TableType } from 'nocodb-sdk'
import type { ColumnType, TableType, ViewType } from 'nocodb-sdk'
import { watch } from 'vue'
import type { ComputedRef, Ref } from 'vue'
import { useNuxtApp } from '#app'
export function useViewColumns(
view: Ref<(GridType | FormType | GalleryType) & { id?: string }> | undefined,
view: Ref<ViewType> | undefined,
meta: ComputedRef<TableType>,
isPublic = false,
reloadData?: () => void,
@ -58,14 +58,30 @@ export function useViewColumns(
}
}
const showAll = async () => {
if (view?.value?.id) await $api.dbView.showAllColumn(view.value.id)
const showAll = async (ignoreIds?: any) => {
if (view?.value?.id) {
if (ignoreIds) {
await $api.dbView.showAllColumn(view.value.id, {
ignoreIds,
})
} else {
await $api.dbView.showAllColumn(view.value.id)
}
}
await loadViewColumns()
reloadData?.()
}
const hideAll = async () => {
if (view?.value?.id) await $api.dbView.hideAllColumn(view.value.id)
const hideAll = async (ignoreIds?: any) => {
if (view?.value?.id) {
if (ignoreIds) {
await $api.dbView.hideAllColumn(view.value.id, {
ignoreIds,
})
} else {
await $api.dbView.hideAllColumn(view.value.id)
}
}
await loadViewColumns()
reloadData?.()
@ -94,16 +110,14 @@ export function useViewColumns(
const showSystemFields = computed({
get() {
// todo: update swagger
return (view?.value as any)?.show_system_fields || false
return view?.value?.show_system_fields || false
},
set(v) {
set(v: boolean) {
if (view?.value?.id) {
$api.dbView
.update(view.value.id, {
// todo: update swagger
show_system_fields: v,
} as any)
})
.finally(() => reloadData?.())
;(view.value as any).show_system_fields = v
}

55
packages/nc-gui-v2/composables/useViewData.ts

@ -1,4 +1,4 @@
import type { Api, PaginatedType, TableType, ViewType } from 'nocodb-sdk'
import type { Api, FormType, GalleryType, PaginatedType, TableType, ViewType } from 'nocodb-sdk'
import type { ComputedRef, Ref } from 'vue'
import { notification } from 'ant-design-vue'
import { useNuxtApp } from '#app'
@ -35,6 +35,8 @@ export function useViewData(
const paginationData = ref<PaginatedType>({ page: 1, pageSize: 25 })
const aggCommentCount = ref<Record<string, number>>({})
const galleryData = ref<GalleryType | undefined>(undefined)
const formColumnData = ref<FormType | undefined>(undefined)
const formViewData = ref<FormType | undefined>(undefined)
const { project } = useProject()
const { $api } = useNuxtApp()
@ -285,6 +287,53 @@ export function useViewData(
syncCount()
}
const loadFormView = async () => {
if (!viewMeta?.value?.id) return
try {
const { columns, ...view } = (await $api.dbView.formRead(viewMeta.value.id)) as Record<string, any>
const fieldById = columns.reduce(
(o: Record<string, any>, f: Record<string, any>) => ({
...o,
[f.fk_column_id]: f,
}),
{},
)
let order = 1
formViewData.value = view
formColumnData.value = meta?.value?.columns
?.map((c: Record<string, any>) => ({
...c,
fk_column_id: c.id,
fk_view_id: viewMeta.value.id,
...(fieldById[c.id] ? fieldById[c.id] : {}),
order: (fieldById[c.id] && fieldById[c.id].order) || order++,
id: fieldById[c.id] && fieldById[c.id].id,
}))
.sort((a: Record<string, any>, b: Record<string, any>) => a.order - b.order) as Record<string, any>
} catch (e: any) {
return notification.error({
message: 'Failed to set form data',
description: await extractSdkResponseErrorMsg(e),
})
}
}
const updateFormView = async (view: FormType | undefined) => {
try {
if (!viewMeta?.value?.id || !view) return
await $api.dbView.formUpdate(viewMeta.value.id, view)
} catch (e: any) {
return notification.error({
message: 'Failed to update form view',
description: await extractSdkResponseErrorMsg(e),
})
}
}
return {
loadData,
paginationData,
@ -301,6 +350,10 @@ export function useViewData(
syncCount,
galleryData,
loadGalleryData,
loadFormView,
formColumnData,
formViewData,
updateFormView,
aggCommentCount,
loadAggCommentsCount,
}

28
packages/nc-gui-v2/composables/useViewFilters.ts

@ -1,19 +1,20 @@
import type { FilterType, GalleryType, GridType, KanbanType } from 'nocodb-sdk'
import type { FilterType, ViewType } from 'nocodb-sdk'
import type { ComputedRef, Ref } from 'vue'
import { useNuxtApp, useUIPermission } from '#imports'
import { useMetas } from '~/composables/useMetas'
export function useViewFilters(
view: Ref<(GridType | KanbanType | GalleryType) & { id?: string }> | undefined,
view: Ref<ViewType> | undefined,
parentId?: string,
autoApply?: ComputedRef<boolean>,
reloadData?: () => void,
shared = false,
) {
// todo: update swagger
const filters = ref<(FilterType & { status?: 'update' | 'delete' | 'create'; parentId?: string })[]>([])
const { $api } = useNuxtApp()
const { isUIAllowed } = useUIPermission()
const { metas } = useMetas()
const loadFilters = async () => {
if (parentId) {
@ -77,11 +78,10 @@ export function useViewFilters(
fk_parent_id: parentId,
})
} else {
// todo: return type correction
filters.value[i] = (await $api.dbTableFilter.create(view?.value?.id as string, {
filters.value[i] = await $api.dbTableFilter.create(view?.value?.id as string, {
...filter,
fk_parent_id: parentId,
})) as any
})
}
reloadData?.()
}
@ -106,5 +106,21 @@ export function useViewFilters(
await saveOrUpdate(filters.value[index], index, true)
}
/** on column delete reload filters, identify by checking columns count */
watch(
() => {
if (!view?.value || !metas?.value?.[view?.value?.fk_model_id as string]) {
return 0
}
return metas?.value?.[view?.value?.fk_model_id as string]?.columns?.length || 0
},
async (nextColsLength, oldColsLength) => {
if (nextColsLength < oldColsLength) {
await loadFilters()
}
},
)
return { filters, loadFilters, sync, deleteFilter, saveOrUpdate, addFilter, addFilterGroup }
}

3
packages/nc-gui-v2/composables/useViewSorts.ts

@ -12,8 +12,7 @@ export function useViewSorts(
const loadSorts = async () => {
if (!view?.value) return
// todo: api correction
sorts.value = ((await $api.dbTableSort.list(view?.value?.id as string)) as any)?.sorts?.list as any[]
sorts.value = ((await $api.dbTableSort.list(view?.value?.id as string)) as any)?.sorts?.list
}
const saveOrUpdate = async (sort: SortType, i: number) => {

8
packages/nc-gui-v2/composables/useViews.ts

@ -1,18 +1,18 @@
import type { FormType, GalleryType, GridType, KanbanType, TableType } from 'nocodb-sdk'
import type { TableType, ViewType } from 'nocodb-sdk'
import type { MaybeRef } from '@vueuse/core'
import { useNuxtApp } from '#app'
export function useViews(meta: MaybeRef<TableType | undefined>) {
let views = $ref<(GridType | FormType | KanbanType | GalleryType)[]>([])
let views = $ref<ViewType[]>([])
const { $api } = useNuxtApp()
const loadViews = async () => {
const _meta = unref(meta)
if (_meta && _meta.id) {
const response = (await $api.dbView.list(_meta.id)).list as any[]
const response = (await $api.dbView.list(_meta.id)).list
if (response) {
views = response.sort((a, b) => a.order - b.order)
views = response.sort((a, b) => a.order! - b.order!)
}
}
}

8
packages/nc-gui-v2/context/index.ts

@ -1,4 +1,4 @@
import type { ColumnType, FormType, GalleryType, GridType, KanbanType, TableType } from 'nocodb-sdk'
import type { ColumnType, TableType, ViewType } from 'nocodb-sdk'
import type { ComputedRef, InjectionKey, Ref } from 'vue'
import type { EventHook } from '@vueuse/core'
import type { useViewData } from '#imports'
@ -14,15 +14,15 @@ export const TabMetaInj: InjectionKey<ComputedRef<TabItem>> = Symbol('tab-meta-i
export const PaginationDataInj: InjectionKey<ReturnType<typeof useViewData>['paginationData']> =
Symbol('pagination-data-injection')
export const ChangePageInj: InjectionKey<ReturnType<typeof useViewData>['changePage']> = Symbol('pagination-data-injection')
export const IsFormInj: InjectionKey<boolean> = Symbol('is-form-injection')
export const IsFormInj: InjectionKey<Ref<boolean>> = Symbol('is-form-injection')
export const IsGridInj: InjectionKey<boolean> = Symbol('is-grid-injection')
export const IsLockedInj: InjectionKey<boolean> = Symbol('is-locked-injection')
export const CellValueInj: InjectionKey<Ref<any>> = Symbol('cell-value-injection')
export const ActiveViewInj: InjectionKey<Ref<GridType | FormType | KanbanType | GalleryType>> = Symbol('active-view-injection')
export const ActiveViewInj: InjectionKey<Ref<ViewType>> = Symbol('active-view-injection')
export const ReadonlyInj: InjectionKey<any> = Symbol('readonly-injection')
export const ReloadViewDataHookInj: InjectionKey<EventHook<void>> = Symbol('reload-view-data-injection')
export const FieldsInj: InjectionKey<Ref<any[]>> = Symbol('fields-injection')
export const ViewListInj: InjectionKey<Ref<(GridType | FormType | KanbanType | GalleryType)[]>> = Symbol('view-list-injection')
export const ViewListInj: InjectionKey<Ref<ViewType[]>> = Symbol('view-list-injection')
export const RightSidebarInj: InjectionKey<Ref<boolean>> = Symbol('right-sidebar-injection')
export const EditModeInj: InjectionKey<ComputedRef<boolean>> = Symbol('edit-mode-injection')

522
packages/nc-gui-v2/lang/ar.json

@ -0,0 +1,522 @@
{
"general": {
"home": "الرئيسية",
"load": "تحميل",
"open": "فتح",
"close": "إغلاق",
"yes": "نعم",
"no": "لا",
"ok": "حسنا",
"and": "و",
"or": "أو",
"add": "أضف",
"edit": "تحرير",
"remove": "إزالة",
"save": "حفظ",
"cancel": "إلغاء",
"submit": "إرسال",
"create": "إنشاء",
"insert": "إدراج",
"delete": "حذف",
"update": "تحديث",
"rename": "إعادة تسمية",
"reload": "تحديث",
"reset": "إعادة تعيين",
"install": "تثبيت",
"show": "عرض",
"hide": "إخفاء",
"showAll": "عرض الكل",
"hideAll": "إخفاء الكل",
"showMore": "عرض المزيد",
"showOptions": "إظهار الخيارات",
"hideOptions": "إخفاء الخيارات",
"showMenu": "إظهار القائمة",
"hideMenu": "إخفاء القائمة",
"addAll": "أضف الكل",
"removeAll": "إزالة الكل",
"signUp": "سجل",
"signIn": "تسجيل الدخول",
"signOut": "تسجيل الخروج",
"required": "مطلوب",
"preferred": "المفضل",
"mandatory": "إلزامي",
"loading": "تحميل ...",
"title": "العنوان",
"upload": "رفع",
"download": "تحميل",
"default": "افتراضي",
"more": "المزيد",
"less": "أقل",
"event": "حدث",
"condition": "شرط",
"after": "بعد",
"before": "قبل",
"search": "البحث",
"notification": "إشعار",
"reference": "مرجع",
"function": "وظيفة"
},
"objects": {
"project": "مشروع",
"projects": "مشاريعي",
"table": "جدول",
"tables": "جداول",
"field": "حقل",
"fields": "حقول",
"column": "عمود",
"columns": "أعمدة",
"page": "صفحة",
"pages": "صفحات",
"record": "سجل",
"records": "سجلات",
"webhook": "خطاف",
"webhooks": "الخطافات",
"view": "عرض",
"views": "مشاهدات",
"viewType": {
"grid": "شبكة",
"gallery": "معرض صور",
"form": "نموذج",
"kanban": "كانبان",
"calendar": "تقويم"
},
"user": "مستخدم",
"users": "مستخدمين",
"role": "دور",
"roles": "أدوار",
"roleType": {
"owner": "مالك",
"creator": "منشيء",
"editor": "محرر",
"commenter": "معلق",
"viewer": "مشاهد"
}
},
"datatype": {
"ID": "هوية",
"ForeignKey": "مفتاح خارجي",
"SingleLineText": "نص سطر واحد",
"LongText": "نص طويل",
"Attachment": "مرفق",
"Checkbox": "خانة اختيار",
"MultiSelect": "اختيار متعدد",
"SingleSelect": "اختيار واحد",
"Collaborator": "متعاون",
"Date": "تاريخ",
"Year": "سنة",
"Time": "وقت",
"PhoneNumber": "هاتف",
"Email": "بريد إلكتروني",
"URL": "URL",
"Number": "عدد",
"Decimal": "عشري",
"Currency": "عملة",
"Percent": "نسبة مؤية",
"Duration": "مدة",
"Rating": "تقييم",
"Formula": "معادلة",
"Rollup": "جمع البيانات",
"Count": "العد",
"Lookup": "مشاهدة بيانات",
"DateTime": "تاريخ وقت",
"CreateTime": "إنشاء وقت",
"LastModifiedTime": "وقت آخر تعديل",
"AutoNumber": "عدد تلقائي",
"Barcode": "رمز",
"Button": "أيقونة",
"Password": "كلمة مرور",
"relationProperties": {
"noAction": "لا يوجد إجراء",
"cascade": "تتالي",
"restrict": "تقييد",
"setNull": "تعيين فارغ",
"setDefault": "تعيين افتراضي"
}
},
"filterOperation": {
"isEqual": "يساوي",
"isNotEqual": "لا يساوي",
"isLike": "هو مثل",
"isNot like": "ليس مثل",
"isEmpty": "فارغ",
"isNotEmpty": "ليس فارغ",
"isNull": "is null",
"isNotNull": "is not null"
},
"title": {
"newProj": "مشروع جديد",
"myProject": "مشاريعي",
"formTitle": "عنوان النموذج",
"collabView": "عرض تعاوني",
"lockedView": "عرض مغلق",
"personalView": "عرض شخصي",
"appStore": "متجر التطبيقات",
"teamAndAuth": "الفريق والمصادقة",
"rolesUserMgmt": "الأدوار وإدارة المستخدمين",
"userMgmt": "إدارة المستخدمين",
"apiTokenMgmt": "إدارة رموز API",
"rolesMgmt": "إدارة الأدوار",
"projMeta": "البيانات الوصفية للمشروع",
"metaMgmt": "إدارة ميتا",
"metadata": "البيانات الوصفية",
"exportImportMeta": "تصدير / استيراد Metadata",
"uiACL": "إدارة الوصل لـ UI",
"metaOperations": "عمليات البيانات الوصفية",
"audit": "تدقيق",
"auditLogs": "سجل التدقيق",
"sqlMigrations": "مهاجر SQL",
"dbCredentials": "بيانات اعتماد قاعدة البيانات",
"advancedParameters": "طبقة المقابس الآمنة والمعلمات المتقدمة",
"headCreateProject": "إنشاء مشروع | نوكودب",
"headLogin": "تسجيل الدخول | نوكودب",
"resetPassword": "إعادة تعيين كلمة المرور",
"teamAndSettings": "الفريق والإعدادات",
"apiDocs": "مستندات API",
"importFromAirtable": "استيراد من Airtable"
},
"labels": {
"notifyVia": "إعلام عبر",
"projName": "اسم المشروع",
"tableName": "اسم الجدول",
"viewName": "عرض الاسم",
"viewLink": "عرض الرابط",
"columnName": "اسم العمود",
"columnType": "نوع العمود",
"roleName": "اسم الدور",
"roleDescription": "وصف الدور",
"databaseType": "اكتب في قاعدة البيانات",
"lengthValue": "الطول / القيمة",
"dbType": "نوع قاعدة البيانات",
"sqliteFile": "ملف SQLite",
"hostAddress": "عنوان المضيف",
"port": "رقم المنفذ",
"username": "اسم المستخدم",
"password": "كلمة المرور",
"schemaName": "اسم المخطط",
"action": "إجراء",
"actions": "إجراءات",
"operation": "عملية",
"operationType": "نوع العملية",
"operationSubType": "نوع العملية الفرعية",
"description": "وصف",
"authentication": "مصادقة",
"token": "Token",
"where": "أين",
"cache": "ذاكرة التخزين المؤقت",
"chat": "دردشة",
"email": "البريد الالكتروني",
"storage": "التخزين",
"uiAcl": "UI-ACL",
"models": "نماذج",
"syncState": "حالة المزامنة",
"created": "إنشاء",
"sqlOutput": "إخراج SQL",
"addOption": "إضافة خيار",
"aggregateFunction": "وظيفة التجميع",
"database": "قاعدة البيانات",
"dbCreateIfNotExists": "قاعدة البيانات: إنشاء إذا لم يكن موجودا",
"clientKey": "مفتاح العميل",
"clientCert": "شهادة العميل",
"serverCA": "خادم CA",
"requriedCa": "مطلوب-CA",
"requriedIdentity": "مطلوب-الهوية",
"inflection": {
"tableName": "انعطاف-اسم الجدول",
"columnName": "انعطاف-اسم العمود"
},
"community": {
"starUs1": "نجمه",
"starUs2": "نحن على Github",
"bookDemo": "احجز ديمو مجاني",
"getAnswered": "احصل على إجابات لأسئلتك",
"joinDiscord": "انضم إلى Discord",
"joinCommunity": "انضم إلى مجتمع NocoDB",
"joinReddit": "انضم إلى /r/NocodB",
"followNocodb": "تابع NocoDB"
},
"docReference": "مرجع الوثيقة",
"selectUserRole": "حدد دور المستخدم",
"childTable": "جدول فرعي",
"childColumn": "عمود فرعي",
"onUpdate": "عند التحديث",
"onDelete": "عند الحذف"
},
"activity": {
"createProject": "إنشاء مشروع",
"importProject": "استيراد مشروع",
"searchProject": "البحث عن مشروع",
"editProject": "تحرير المشروع",
"stopProject": "وقف المشروع",
"startProject": "بدء المشروع",
"restartProject": "إعادة تشغيل المشروع",
"deleteProject": "حذف المشروع",
"refreshProject": "تحديث المشاريع",
"saveProject": "حفظ المشروع",
"createProjectExtended": {
"extDB": "إنشاء عن طريق ربط <br> قاعدة بيانات خارجية",
"excel": "إنشاء مشروع من Excel",
"template": "إنشاء مشروع من قالب"
},
"OkSaveProject": "موافق وحفظ المشروع",
"upgrade": {
"available": "ترقية متوفرة",
"releaseNote": "ملاحظات الإصدار",
"howTo": "كيفية الترقية ؟"
},
"translate": "مساعدة ترجمة",
"account": {
"authToken": "نسخ Auth Token",
"swagger": "مستند Swagger APIs",
"projInfo": "نسخ معلومات المشروع",
"themes": "مظاهر"
},
"sort": "فرز",
"addSort": "إضافة خيار فرز",
"filter": "تصفية",
"addFilter": "إضافة تصفية",
"share": "مشاركة",
"shareBase": {
"disable": "تعطيل قاعدة مشتركة",
"enable": "أي شخص لديه الرابط",
"link": "رابط قاعدة مشتركة"
},
"invite": "دعوة",
"inviteMore": "دعوة المزيد",
"inviteTeam": "دعوة فريق",
"inviteToken": "رمز دعوة",
"newUser": "مستخدم جديد",
"editUser": "تحرير مستخدم",
"deleteUser": "إزالة المستخدم من المشروع",
"resendInvite": "إعادة إرسال دعوة البريد الإلكتروني",
"copyInviteURL": "نسخ رابط الدعوة",
"newRole": "دور جديد",
"reloadRoles": "إعادة تحميل الأدوار",
"nextPage": "الصفحة التالية",
"prevPage": "الصفحة السابقة",
"nextRecord": "السجل التالي",
"previousRecord": "السجل السابق",
"copyApiURL": "نسخ رابط API",
"createTable": "إنشاء جدول",
"refreshTable": "تحديث الجدول",
"renameTable": "إعادة تسمية الجدول",
"deleteTable": "حذف الجدول",
"addField": "إضافة حقل جديد إلى هذا الجدول",
"setPrimary": "تعيين كقيمة أساسية",
"addRow": "إضافة صف جديد",
"saveRow": "حفظ الصف",
"insertRow": "إدراج صف جديد",
"deleteRow": "حذف الصف",
"deleteSelectedRow": "حذف الصفوف المحددة",
"importExcel": "استيراد Excel",
"importCSV": "استيراد CSV",
"downloadCSV": "تحميل كـ CSV",
"uploadCSV": "رفع كـ CSV",
"import": "استيراد",
"importMetadata": "استيراد البيانات الوصفية",
"exportMetadata": "تصدير البيانات الوصفية",
"clearMetadata": "مسح البيانات الوصفية",
"exportToFile": "تصدير إلى ملف",
"changePwd": "تغيير كلمة المرور",
"createView": "إنشاء طريقة عرض",
"shareView": "مشاركة عرض",
"listSharedView": "قائمة العرض المشتركة",
"ListView": "قائمة المشاهدات",
"copyView": "نسخ العرض",
"renameView": "إعادة تسمية عرض",
"deleteView": "حذف العرض",
"createGrid": "إنشاء عرض الشبكة",
"createGallery": "إنشاء عرض المعرض",
"createCalendar": "إنشاء عرض التقويم",
"createKanban": "إنشاء عرض كانبان",
"createForm": "إنشاء عرض النموذج",
"showSystemFields": "إظهار حقول النظام",
"copyUrl": "نسخ الرابط",
"openTab": "افتح علامة تبويب جديدة",
"iFrame": "انسخ كود HTML القابل للتضمين",
"addWebhook": "إضافة Webhook جديد",
"newToken": "إضافة Token جديد",
"exportZip": "تصدير الرمز البريدي",
"importZip": "استيراد الرمز البريدي",
"metaSync": "مزامنة الآن",
"settings": "الإعدادات",
"previewAs": "معاينة كـ",
"resetReview": "إعادة تعيين المعاينة",
"testDbConn": "اختبار اتصال قاعدة البيانات",
"removeDbFromEnv": "إزالة قاعدة البيانات من البيئة",
"editConnJson": "تحرير اتصال جسون",
"sponsorUs": "ادعمنا",
"sendEmail": "ارسل بريد الكتروني"
},
"tooltip": {
"saveChanges": "حفظ التغييرات",
"xcDB": "إنشاء مشروع جديد",
"extDB": "يدعم MySQL ، PostgreSQL ، SQL Server و SQLite",
"apiRest": "يمكن الوصول إليها عبر REST APIs",
"apiGQL": "يمكن الوصول إليها عبر GraphQL APIs",
"theme": {
"dark": "أنها لا تأتي باللون الأسود (^⇧B)",
"light": "هل تأتي باللون الأسود ؟ (^⇧B)"
},
"addTable": "إضافة جدول جديد",
"inviteMore": "دعوة المزيد من المستخدمين",
"toggleNavDraw": "تبديل درج التنقل",
"reloadApiToken": "إعادة تحميل رموز API",
"generateNewApiToken": "إنشاء رمز API جديد",
"addRole": "إضافة دور جديد",
"reloadList": "تحديث القائمة",
"metaSync": "مزامنة البيانات الوصفية",
"sqlMigration": "إعادة تحميل المهاجر",
"updateRestart": "التحديث وإعادة التشغيل",
"cancelReturn": "إلغاء والعودة",
"exportMetadata": "تصدير جميع البيانات الوصفية من الجداول الوصفية إلى الدليل الوصفي.",
"importMetadata": "استيراد كافة البيانات الوصفية من الدليل الوصفي إلى الجداول الوصفية.",
"clearMetadata": "امسح جميع البيانات الوصفية من جداول التعريف.",
"clientKey": "اختر .الملف الرئيسي",
"clientCert": "اختر .ملف الشهادة",
"clientCA": "حدد ملف CA"
},
"placeholder": {
"projName": "أدخل اسم المشروع",
"password": {
"enter": "أدخل كلمة المرور",
"current": "كلمة المرور الحالية",
"new": "كلمة مرور جديدة",
"save": "حفظ كلمة المرور",
"confirm": "تأكيد كلمة المرور الجديدة"
},
"searchProjectTree": "جداول البحث",
"searchFields": "حقول البحث",
"searchColumn": "بحث {بحث} عمود",
"searchApps": "تطبيقات البحث",
"searchModels": "نماذج البحث",
"noItemsFound": "لم يتم العثور على عناصر",
"defaultValue": "القيمة الافتراضية",
"filterByEmail": "تصفية عن طريق البريد الإلكتروني"
},
"msg": {
"info": {
"footerInfo": "الصفوف لكل صفحة",
"upload": "حدد الملف المراد رفعه",
"upload_sub": "أو سحب وإسقاط الملف",
"excelSupport": "المدعومة: .xls, .xlsx, .xlsm, .ods, .ots",
"excelURL": "أدخل رابط ملف Excel",
"csvURL": "أدخل رابط ملف CSV",
"footMsg": "# من الصفوف لتحليل لاستنتاج نوع البيانات",
"excelImport": "sheet(s) قابل للاستيراد",
"exportMetadata": "هل تريد تصدير البيانات الوصفية من الجداول الوصفية؟",
"importMetadata": "هل تريد استيراد البيانات الوصفية من الجداول الوصفية؟",
"clearMetadata": "هل تريد مسح البيانات الوصفية من الجداول الوصفية؟",
"projectEmptyMessage": "ابدأ بإنشاء مشروع جديد",
"stopProject": "هل تريد إيقاف المشروع؟",
"startProject": "هل تريد أن تبدأ المشروع؟",
"restartProject": "هل تريد إعادة تشغيل المشروع؟",
"deleteProject": "هل تريد حذف المشروع؟",
"shareBasePrivate": "إنشاء قاعدة للقراءة فقط قابلة للمشاركة بشكل عام",
"shareBasePublic": "يمكن لأي شخص لديه الرابط على الانترنت مشاهدته",
"userInviteNoSMTP": "يبدو أنك لم تقم بتكوين الارسال بعد! يرجى نسخ رابط الدعوة أعلاه وإرساله إلى",
"dragDropHide": "سحب وإسقاط الحقول هنا لإخفاء",
"formInput": "أدخل تسمية إدخال علامة",
"formHelpText": "أضف نص المساعدة",
"onlyCreator": "مرئية فقط للمنشيء",
"formDesc": "إضافة وصف النموذج",
"beforeEnablePwd": "تقييد الوصول بكلمة مرور",
"afterEnablePwd": "الوصول مقيد بكلمة مرور",
"privateLink": "تتم مشاركة هذا العرض عبر رابط خاص",
"privateLinkAdditionalInfo": "يمكن للأشخاص الذين لديهم رابط خاص رؤية الخلايا المرئية فقط في طريقة العرض هذه",
"afterFormSubmitted": "بعد تقديم النموذج",
"apiOptions": "الوصول للمشروع عبر",
"submitAnotherForm": "إظهار زر 'إرسال نموذج آخر'",
"showBlankForm": "إظهار نموذج فارغ بعد 5 ثوان",
"emailForm": "راسلني بالبريد عبر",
"showSysFields": "إظهار حقول النظام",
"filterAutoApply": "تطبيق تلقائي",
"showMessage": "اعرض هذه الرسالة",
"viewNotShared": "لم تتم مشاركة العرض الحالي!",
"showAllViews": "عرض جميع المشاهدات المشتركة لهذا الجدول",
"collabView": "يمكن للمتعاونين الذين لديهم أذونات تحرير أو أعلى تغيير تكوين العرض.",
"lockedView": "لا يمكن لأحد تحرير تكوين العرض حتى يتم إلغاء قفله.",
"personalView": "فقط يمكنك تحرير تكوين العرض. يتم إخفاء طريقة العرض الشخصية للمتعاونين الآخرين بشكل افتراضي.",
"ownerDesc": "يمكن إضافة / إزالة المنشئين. وتحرير كامل هياكل قاعدة البيانات والحقول.",
"creatorDesc": "يمكن تحرير كامل هيكل قاعدة البيانات والقيم.",
"editorDesc": "يمكن تحرير السجلات ولكن لا يمكن تغيير بنية قاعدة البيانات/الحقول.",
"commenterDesc": "يمكن العرض والتعليق على السجلات ولكن لا يمكن تحرير أي شيء",
"viewerDesc": "يمكن عرض السجلات ولكن لا يمكن تحرير أي شيء",
"addUser": "إضافة مستخدم جديد",
"staticRoleInfo": "لا يمكن تحرير الأدوار المحددة للنظام",
"exportZip": "تصدير مشروع ميتا لملف مضغوط وتحميله",
"importZip": "استيراد مشروع ميتا لملف مضغوط وإعادة التشغيل.",
"importText": "استيراد مشروع nocoDB عن طريق رفع ملف مضغوط",
"metaNoChange": "لم يتم تحديد أي تغيير",
"sqlMigration": "سيتم إنشاء عمليات ترحيل المخطط تلقائيا. إنشاء جدول وتحديث هذه الصفحة.",
"dbConnectionStatus": "التحقق من صحة البيئة",
"dbConnected": "كان الاتصال ناجحا",
"notifications": {
"no_new": "لا إخطارات جديدة",
"clear": "واضح"
},
"sponsor": {
"header": "يمكنك مساعدتنا!",
"message": "نحن فريق صغير يعمل بدوام كامل لجعل NocoDB مفتوح المصدر. ونحن نعتقد أن أداة مثل NocoDB يجب أن تكون متاحة بحرية لكل من يريد حل مشكله على شبكة الإنترنت."
},
"loginMsg": "تسجيل الدخول إلى NocoDB",
"passwordRecovery": {
"message_1": "يرجى تقديم عنوان البريد الإلكتروني الذي استخدمته عند التسجيل.",
"message_2": "سوف نرسل لك رسالة بريد إلكتروني تحتوي على رابط لإعادة تعيين كلمة المرور الخاصة بك.",
"success": "يرجى التحقق من بريدك الإلكتروني لإعادة تعيين كلمة المرور"
},
"signUp": {
"superAdmin": "سوف تكون'المشرف سوبر'",
"alreadyHaveAccount": "لديك حساب بالفعل ؟",
"workEmail": "أدخل بريدك الإلكتروني للعمل",
"enterPassword": "أدخل كلمة المرور",
"forgotPassword": "نسيت كلمة المرور ؟",
"dontHaveAccount": "ليس لديك حساب ؟"
},
"addView": {
"grid": "إضافة عرض الشبكة",
"gallery": "إضافة عرض المعرض",
"form": "إضافة عرض النموذج",
"kanban": "إضافة عرض كانبان",
"calendar": "إضافة طريقة عرض التقويم"
},
"tablesMetadataInSync": "تزامن البيانات الوصفية للجداول",
"addMultipleUsers": "يمكنك إضافة أكثر من فاصلة (,) لفصل الإيميلات",
"enterTableName": "أدخل اسم الجدول",
"addDefaultColumns": "إضافة الأعمدة الافتراضية",
"tableNameInDb": "اسم الجدول كما تم حفظه في قاعدة البيانات"
},
"error": {
"searchProject": "البحث عن {بحث} لم يتم العثور على نتائج",
"invalidChar": "حرف غير صالح في مسار المجلد.",
"invalidDbCredentials": "بيانات اعتماد قاعدة بيانات غير صالحة.",
"unableToConnectToDb": "غير قادر على الاتصال بقاعدة البيانات ، يرجى التحقق من قاعدة البيانات الخاصة بك.",
"userDoesntHaveSufficientPermission": "المستخدم غير موجود أو لديه إذن كاف لإنشاء مخطط.",
"dbConnectionStatus": "معلمات قاعدة البيانات غير صالحة",
"dbConnectionFailed": "فشل الاتصال:",
"signUpRules": {
"emailReqd": "البريد الالكتروني مطلوب",
"emailInvalid": "يجب أن يكون البريد الإلكتروني صالحا",
"passwdRequired": "كلمة المرور مطلوبة",
"passwdLength": "يجب أن تكون كلمة المرور الخاصة بك 8 أحرف على الأقل",
"passwdMismatch": "كلمات المرور غير متطابقة"
}
},
"toast": {
"exportMetadata": "تصدير البيانات الوصفية للمشروع بنجاح",
"importMetadata": "البيانات الوصفية للمشروع تم استيرادها بنجاح",
"clearMetadata": "مسح البيانات الوصفية للمشروع بنجاح",
"stopProject": "توقف المشروع بنجاح",
"startProject": "بدأ المشروع بنجاح",
"restartProject": "إعادة تشغيل المشروع بنجاح",
"deleteProject": "تم حذف المشروع بنجاح",
"authToken": "تم نسخ رمز المصادقة للحافظة",
"projInfo": "تم نسخ معلومات المشروع للحافظة",
"inviteUrlCopy": "تم نسخ رابط الدعوة للحافظة",
"createView": "تم إنشاء العرض بنجاح",
"formEmailSMTP": "يرجى تفعيل SMTP لتمكين إشعار البريد الإلكتروني",
"collabView": "تحولت بنجاح إلى عرض تعاوني",
"lockedView": "تم التبديل بنجاح إلى العرض المقفل",
"futureRelease": "قريبا!"
}
}
}

522
packages/nc-gui-v2/lang/bn.json

@ -0,0 +1,522 @@
{
"general": {
"home": "বি",
"load": "ভর",
"open": "খ",
"close": "বনধ",
"yes": "হ",
"no": "ন",
"ok": "ঠিক আছ",
"and": "এব",
"or": "ব",
"add": "যগ করন",
"edit": "সমদন",
"remove": "অপসরণ",
"save": "সরকষণ",
"cancel": "বিল",
"submit": "জমিন",
"create": "সি",
"insert": "Insert",
"delete": "ম",
"update": "হলনদ",
"rename": "নম পরিবরতন",
"reload": "পনরড",
"reset": "রিট",
"install": "ইনসটল করন",
"show": "শ",
"hide": "লন",
"showAll": "সব দও",
"hideAll": "সব লও",
"showMore": "আরন",
"showOptions": "বিকলপগিন",
"hideOptions": "বিকলপগিন",
"showMenu": "মন",
"hideMenu": "মন",
"addAll": "সব যগ কর",
"removeAll": "সব মন",
"signUp": "নিবনধন করন",
"signIn": "সইন ইন করন",
"signOut": "সইন আউট",
"required": "পরযজন",
"preferred": "পছনদসই",
"mandatory": "বযতলক",
"loading": "লড হচ ...",
"title": "শিম",
"upload": "আপলড করন",
"download": "ডউনলড করন",
"default": "Default",
"more": "আরও",
"less": "কম",
"event": "ঘটন",
"condition": "অবস",
"after": "পর",
"before": "আগ",
"search": "Search",
"notification": "বিঞপি",
"reference": "পরসঙগ",
"function": "নিিট করম"
},
"objects": {
"project": "পরকলপ",
"projects": "পরকলপ",
"table": "টিল",
"tables": "টিল",
"field": "কর",
"fields": "কর",
"column": "কলম",
"columns": "কলম",
"page": "প",
"pages": "পি",
"record": "রকরড",
"records": "রকরড",
"webhook": "Webhook",
"webhooks": "ওযবহকস",
"view": "দন",
"views": "ভিউ",
"viewType": {
"grid": "গিড",
"gallery": "গ",
"form": "ফরম",
"kanban": "কনবন",
"calendar": "কর"
},
"user": "বযবহরক",
"users": "বযবহরক",
"role": "ভি",
"roles": "ভি",
"roleType": {
"owner": "মিক",
"creator": "সরষ",
"editor": "সমদক",
"commenter": "মনতবযক",
"viewer": "দরশক"
}
},
"datatype": {
"ID": "আইডি",
"ForeignKey": "বিি",
"SingleLineText": "একক লইন পয",
"LongText": "দঘ পয",
"Attachment": "সি",
"Checkbox": "চকবকস",
"MultiSelect": "মিিচন করন",
"SingleSelect": "একক নিচন",
"Collaborator": "সহয",
"Date": "তিখ",
"Year": "বছর",
"Time": "সময",
"PhoneNumber": "ফন নমবর",
"Email": "ইমল",
"URL": "Url",
"Number": "স",
"Decimal": "দশমিক",
"Currency": "ম",
"Percent": "শতশ",
"Duration": "সমযল",
"Rating": "রি",
"Formula": "সর",
"Rollup": "রলআপ",
"Count": "গণন",
"Lookup": "খ",
"DateTime": "তিখ সময",
"CreateTime": "সমযি করন",
"LastModifiedTime": "শষ পরিবরিত সময",
"AutoNumber": "অট নমবর",
"Barcode": "বরকড",
"Button": "বম",
"Password": "পসওযড",
"relationProperties": {
"noAction": "No Action",
"cascade": "Cascade",
"restrict": "र",
"setNull": "NULL সট করন",
"setDefault": "ডিফলট সট করন"
}
},
"filterOperation": {
"isEqual": "সমন",
"isNotEqual": "সমন নয",
"isLike": "মত হয",
"isNot like": "পছনদ হয",
"isEmpty": "খি",
"isNotEmpty": "খি",
"isNull": "নল",
"isNotNull": "নল নয"
},
"title": {
"newProj": "নতন পরকলপ",
"myProject": "আমর পরকলপ",
"formTitle": "ফরম শিম",
"collabView": "সহয দরশন",
"lockedView": "লক ভিউ",
"personalView": "বযকিগত দয",
"appStore": "অপ সর",
"teamAndAuth": "দল ও আথ",
"rolesUserMgmt": "ভি এবযবহরক পরিলন",
"userMgmt": "বযবহরক পরিলন",
"apiTokenMgmt": "এপিআই টন পরিলন",
"rolesMgmt": "ভি পরিলন",
"projMeta": "পরকলপ ম",
"metaMgmt": "ম পরিলন",
"metadata": "ম",
"exportImportMeta": "রফতি / আমদি",
"uiACL": "UI অস কনল",
"metaOperations": "ম অপশনস",
"audit": "নি",
"auditLogs": "হিবনির বিবরণ",
"sqlMigrations": "এসকিউএল মইগশন",
"dbCredentials": "ডস শপতর",
"advancedParameters": "এসএসএল এব উননত পরিি",
"headCreateProject": "পরকলপ তি করন | নকডিি",
"headLogin": "লগ ইন | নকডিি",
"resetPassword": "আপনর পসওযড পনরট করন",
"teamAndSettings": "দল এবিস",
"apiDocs": "API Docs",
"importFromAirtable": "এযরটবল থ আমদি করন"
},
"labels": {
"notifyVia": "এর মযম অবহিত করন",
"projName": "পরকলর নম",
"tableName": "Table name",
"viewName": "নম দন",
"viewLink": "লিক দন",
"columnName": "কলর নম",
"columnType": "কলম পরকর",
"roleName": "নমভি",
"roleDescription": "ভি বরণন",
"databaseType": "ডস টইপ করন",
"lengthValue": "দয/ মন",
"dbType": "ডস পরকর",
"sqliteFile": "সইট ফইল",
"hostAddress": "হট ঠি",
"port": "পট নর",
"username": "বযবহরকর নম",
"password": "পসওযড",
"schemaName": "সির নম",
"action": "করম",
"actions": "কি",
"operation": "অপশন",
"operationType": "অপশন টইপ",
"operationSubType": "অপশন সব-টইপ",
"description": "বরণন",
"authentication": "পরমকরণ",
"token": "টন",
"where": "ক",
"cache": "ক",
"chat": "চট",
"email": "ই-মইল",
"storage": "সজ",
"uiAcl": "UI-ACL",
"models": "মডল",
"syncState": "সিক সট",
"created": "তি",
"sqlOutput": "এসকিউএল আউটপট",
"addOption": "বিকলপ যগ করন",
"aggregateFunction": "সমগিক ফশন",
"database": "তথযশ",
"dbCreateIfNotExists": "ডস: উপসিত নকলি করন",
"clientKey": "কট ক",
"clientCert": "কট সট",
"serverCA": "সর সিএ",
"requriedCa": "পরযজন-সিএ",
"requriedIdentity": "পরযজন-পরিচয",
"inflection": {
"tableName": "পরতিছবি - টির নম",
"columnName": "পরতিছবি - কলর নম"
},
"community": {
"starUs1": "ত",
"starUs2": "আমর গি",
"bookDemo": "একটিিক করন",
"getAnswered": "আপনর পরশর উততর পন",
"joinDiscord": "ডিসকরগ দিন",
"joinCommunity": "NocoDB কমিউনিিগ দিন",
"joinReddit": "/r/NocoDB-এ যগ দিন",
"followNocodb": "NocoDB অনসরণ করন"
},
"docReference": "Document Reference",
"selectUserRole": "বযবহরকর ভিিচন করন",
"childTable": "Child table",
"childColumn": "Child column",
"onUpdate": "আপড",
"onDelete": "ডিিটএ"
},
"activity": {
"createProject": "পরকলপ তি করন",
"importProject": "আমদিরকলপ",
"searchProject": "অনসনন পরকলপ",
"editProject": "পরকলপ সমদন করন",
"stopProject": "পরকলপ বনধ করন",
"startProject": "পরকলপ শ করন",
"restartProject": "পরকলপ পনর করন",
"deleteProject": "পরকলপ মন",
"refreshProject": "রিশ পরকলপগি",
"saveProject": "সরকষণ পরকলপ",
"createProjectExtended": {
"extDB": "একটিিক ড <br> সত করি করন",
"excel": "একল থরকলপ তি করন",
"template": "টমপট থরকলপ তি করন"
},
"OkSaveProject": "ঠিক আছ এবরকলপ সরকষণ করন",
"upgrade": {
"available": "পরত উননত সকরণ",
"releaseNote": "অবহতি পতর",
"howTo": "কি আপগড করবন?"
},
"translate": "অনদ করত সহ করন",
"account": {
"authToken": "অনিি আথ টন",
"swagger": "সর এপিস ডক",
"projInfo": "পরকলর তথয অনিি করন",
"themes": "থিম"
},
"sort": "সন",
"addSort": "সর বিকলপ যত করন",
"filter": "ছকনি",
"addFilter": "ফির যত করন",
"share": "শর",
"shareBase": {
"disable": "ভগ করস অকষম করন",
"enable": "লিক সহ যউ",
"link": "ভগ করস লিক"
},
"invite": "আমনরণ",
"inviteMore": "আরও আমনরণ",
"inviteTeam": "দলক আমনরণ করন",
"inviteToken": "টনক আমনরণ করন",
"newUser": "নতন বযবহরক",
"editUser": "বযবহরক সমদন করন",
"deleteUser": "পরকলপ থযবহরক সরন",
"resendInvite": "आमरण ईमल द",
"copyInviteURL": "অনিি ইউআরএল আমনরণ করন",
"newRole": "নতন ভি",
"reloadRoles": "পনরড ভি",
"nextPage": "পরবর",
"prevPage": "আগর প",
"nextRecord": "পরবরকরড",
"previousRecord": "পববরকরড",
"copyApiURL": "অনিি এপিআই ইউআরএল",
"createTable": "টিল তি",
"refreshTable": "টিল রিশ",
"renameTable": "টিল নম পরিবরতন",
"deleteTable": "टबल मि",
"addField": "এই টি নতন কর যত করন",
"setPrimary": "পথমিক মন হিট করন",
"addRow": "নতন সিত করন",
"saveRow": "সিরকষণ করন",
"insertRow": "নতন সিন",
"deleteRow": "সিন",
"deleteSelectedRow": "নিিত সিিন",
"importExcel": "একল আমদি করন",
"importCSV": "Import CSV",
"downloadCSV": "সিএসভিিউনলড করন",
"uploadCSV": "সিএসভি আপলড করন",
"import": "আমদি",
"importMetadata": "আমদি",
"exportMetadata": "রফতি",
"clearMetadata": "পরির ম",
"exportToFile": "ফইল রফতি",
"changePwd": "পসওযড পরিবরতন করন",
"createView": "একটিয তি করন",
"shareView": "শর ভিউ",
"listSharedView": "ভগ করিউ তি",
"ListView": "ভিউ তি",
"copyView": "অনিিন",
"renameView": "ভিউ নমকরণ",
"deleteView": "দয মন",
"createGrid": "গিড ভিউ তি করন",
"createGallery": "গিউ তি করন",
"createCalendar": "কর ভিউ তি করন",
"createKanban": "কনবন ভিউ তি করন",
"createForm": "ফরম ভিউ তি করন",
"showSystemFields": "সিম করগিন",
"copyUrl": "কপি ইউআরএল",
"openTab": "নতন টব খন",
"iFrame": "এমডযয এইচটিএমএল কড অনিি করন",
"addWebhook": "নতন ওযবহক যত করন",
"newToken": "নতন টন যত করন",
"exportZip": "রফতিিপ",
"importZip": "আমদিিপ",
"metaSync": "এখন সিক",
"settings": "সিস",
"previewAs": "পবরপ হি",
"resetReview": "পবরপ পনরট করন",
"testDbConn": "টট ডস সগ",
"removeDbFromEnv": "পরিশ থস সরন",
"editConnJson": "সগ json সমদন",
"sponsorUs": "আমর সপনসর",
"sendEmail": "ইমইল পন"
},
"tooltip": {
"saveChanges": "परिवरतनरकित कर",
"xcDB": "একটি নতন পরকলপ তি করন",
"extDB": "মইএসকিউএল, পটগসকিউএল, এসকিউএল সর এব এসকিউএলইট সমরথন কর",
"apiRest": "REST API এর মযমসযয",
"apiGQL": "গফকিউএল এপিআইযর মযমসযয",
"theme": {
"dark": "এটি আস (^⇧b)",
"light": "এটি আস? (^⇧b)"
},
"addTable": "নতন টিল যত করন",
"inviteMore": "আরও বযবহরকর আমনরণ করন",
"toggleNavDraw": "টগল নিশন ডরযর",
"reloadApiToken": "এপিআই টনগিনরড করন",
"generateNewApiToken": "নতন এপিআই টন তি করন",
"addRole": "নতন ভিত করন",
"reloadList": "পনরড তি",
"metaSync": "সিক ম",
"sqlMigration": "সতর পনরড",
"updateRestart": "আপডট এবনর করন",
"cancelReturn": "বিল এবি",
"exportMetadata": "মিলগিিটরি সমসত ম রফতি করন।",
"importMetadata": "মিটরিিলগি সমসত ম আমদি করন।",
"clearMetadata": "মিলগি সমসত মফ করন।",
"clientKey": ".key ফইল নিচন করন",
"clientCert": ".cert ফইল নিচন করন",
"clientCA": "সিএ ফইল নিচন করন"
},
"placeholder": {
"projName": "পরকলর নম লিন",
"password": {
"enter": "পসওযড লিন",
"current": "বরতমন পসওযড",
"new": "নতন পসওযড",
"save": "পসওযড সরকষণ",
"confirm": "নিিত কর নতন গপননমবর"
},
"searchProjectTree": "টিল অনসনন করন",
"searchFields": "কর অনসনন করন",
"searchColumn": "অনসনন {অনসনন} কলম",
"searchApps": "অনসনন অিশন",
"searchModels": "অনসনন মডল",
"noItemsFound": "কনও আইটম পওযি",
"defaultValue": "ডিফলট মন",
"filterByEmail": "ই-মইল দির"
},
"msg": {
"info": {
"footerInfo": "পরতিি",
"upload": "আপলড করতইল নিচন করন",
"upload_sub": "অথবইল ট আনন",
"excelSupport": "সমরিত: .xls, .xlsx, .xlsm, .ods, .ots",
"excelURL": "একল ফইল ইউআরএল লিন",
"csvURL": "CSV ফইলর URL লিন",
"footMsg": "# সিির জনয ডইপটি অনন করতস",
"excelImport": "শট (গি) আমদির জনয উপলবধ",
"exportMetadata": "আপনিিিলগি রফতি করতন?",
"importMetadata": "আপনিিিলগি আমদি করতন?",
"clearMetadata": "আপনিিিলগিফ করতন?",
"projectEmptyMessage": "একটি নতন পরকলপ তি কর করন",
"stopProject": "আপনিিরকলপটি বনধ করতন?",
"startProject": "আপনিিরকলপটি করতন?",
"restartProject": "আপনিিরকলপটিনর করতন?",
"deleteProject": "আপনিিরকলপটিছতন?",
"shareBasePrivate": "সরবজননভগযয পঠনযয বস উতপনন করন",
"shareBasePublic": "এই লিকটি সহ ইনরনউ দখতন",
"userInviteNoSMTP": "দ মন হচ আপনি এখনও মর কনফির করন নি! উপরর আমনরণ লিকটি অনিি করন এব এটিরণ করন",
"dragDropHide": "লর জনয এখ আনন এবরপ করন",
"formInput": "ফরম ইনপট লল পরবশ করন",
"formHelpText": "কি সহয যত করন",
"onlyCreator": "কবল সরষর কযমন",
"formDesc": "ফরম বরণনগ করন",
"beforeEnablePwd": "একটিসওযড দিস সবদধ করন",
"afterEnablePwd": "অস পসওযড সবদধ",
"privateLink": "এই ভিউটি একটিযকিগত লির মযমগ কর হয",
"privateLinkAdditionalInfo": "বযকিগত লিকযত লবল এই দষগিযমন দখত",
"afterFormSubmitted": "ফরম জমওযর পর",
"apiOptions": "মযমস পরকলপ",
"submitAnotherForm": "অনয ফরম জমিন' বমটিন",
"showBlankForm": "5 সড পর একটি ফরম দন",
"emailForm": "আম ইমল করন",
"showSysFields": "সিম করগিন",
"filterAutoApply": "অটরযগ",
"showMessage": "এই বিন",
"viewNotShared": "বরতমন ভিউ ভগ কর হয!",
"showAllViews": "এই টির সমসত ভগ কর দরশন দন",
"collabView": "সমদন অনমতি উচচতর সহ সহযিউ কনফিশন পরিবরতন করত।",
"lockedView": "এটি আনলক ন হওয পরযনত কউ ভিউ কনফিশন সমদন করত।",
"personalView": "কবলমর আপনিিউ কনফিশন সমদন করতন। অনয সহযর বযকিগত মতমত ডিফলটর।",
"ownerDesc": "সরষত/অপসরণ করতন। এব সমণ সমদনস সকচর এবরগি।",
"creatorDesc": "ডস ক এবনগি সমণর সমদন করত।",
"editorDesc": "রকরডগি সমদন করত তবস/করগির ক পরিবরতন করত।",
"commenterDesc": "রকরডগিখত এব মনতবয করত তবি সমদন করত",
"viewerDesc": "রকরডগিখত তবি সমদন করত",
"addUser": "নতন বযবহরকত করন",
"staticRoleInfo": "সিম সিত ভি সমদন কর",
"exportZip": "জিপ ফইল এবউনলরকলপ ম রফতি করন।",
"importZip": "পরকলপ মিপ ফইল আমদি করন এবনর করন।",
"importText": "মিপ ফইল আপলড করকডিিরকলপটি আমদি করন",
"metaNoChange": "কনও পরিবরতন চিিত কর হযি",
"sqlMigration": "সিইগশনগিবযিি কর হব। একটিিল তি করন এব এই পিিশ করন।",
"dbConnectionStatus": "পরিশ বধ",
"dbConnected": "সগ সফল ছিল",
"notifications": {
"no_new": "কনও নতন বিঞপিই",
"clear": "সপষট"
},
"sponsor": {
"header": "আপনি আমর সয করতন!",
"message": "আমরিি ওপন সস করর জনয প সমযজ করছি এমন একটির দল। আমরিস করিিির মত একটি সরঞম ইনরনরতিি সমস সমনক অব উপলবধ হওয উচিত।"
},
"loginMsg": "Nocodb এ লগ ইন করন",
"passwordRecovery": {
"message_1": "আপনিইন আপ করর সময দয কর আপনি ইমল ঠিিযবহর করন ত সরবরহ করন।",
"message_2": "আমর আপনর পসওযডটিনরট করত একটিিক সহ একটি ইমল পরণ করব।",
"success": "পসওযডটিনরট করত আপনর ইমলটি পর করন"
},
"signUp": {
"superAdmin": "আপনি 'সর অডমিন' হবন",
"alreadyHaveAccount": "ইতিমধ একটি সদসযপদ আছ ?",
"workEmail": "আপনর কর ইমল লিন",
"enterPassword": "আপনর পসওযড লিন",
"forgotPassword": "আপনিিসওযড ভন ?",
"dontHaveAccount": "অউনট নই?"
},
"addView": {
"grid": "গিড ভিউ যত করন",
"gallery": "গিউ যত করন",
"form": "ফরম ভিউ যগ করন",
"kanban": "কনবন ভিউ যত করন",
"calendar": "কর ভিউ যত করন"
},
"tablesMetadataInSync": "টির মিক কর আছ",
"addMultipleUsers": "आप एकिक COMMA (,) द अलग ईमल जड़ सकत",
"enterTableName": "টির নম লিন",
"addDefaultColumns": "ডিফলট কলম যগ করন",
"tableNameInDb": "ডরকিত টির নম"
},
"error": {
"searchProject": "আপনর অনসনন {search} এর জনয কনও ফলফল পওযি",
"invalidChar": "ফর পথ অবধ চরির।",
"invalidDbCredentials": "অবধ ডস শপতরগি।",
"unableToConnectToDb": "ডর সগ করত অকষম, অনরহ কর পর করন আপনর ডস আপ আছ।",
"userDoesntHaveSufficientPermission": "বযবহরকর অসিব নই বিি করর জনয পরত অনমতিই।",
"dbConnectionStatus": "অবধ ডস পরিি",
"dbConnectionFailed": "সগ বিিন:",
"signUpRules": {
"emailReqd": "ই-মইল পরযজন",
"emailInvalid": "ইমল বধ হত হব",
"passwdRequired": "পসওযড পরযজন",
"passwdLength": "আপনর পসওযড অবশযই কমপক 8 টি অকষর হত হব",
"passwdMismatch": "পসওযড মিলছ"
}
},
"toast": {
"exportMetadata": "পরকলপ ম সফলভ রফতি কর",
"importMetadata": "পরকলপ ম সফলভ আমদি কর",
"clearMetadata": "পরকলপ ম সফলভফ কর",
"stopProject": "পরকলপ সফলভ বনধ",
"startProject": "পরকলপ সফলভ হযিল",
"restartProject": "পরকলপ সফলভনর হয",
"deleteProject": "পরকলপ সফলভ হয",
"authToken": "কিপব AUTH টন ক কপি কর হয়",
"projInfo": "কিপবরজট সমবন তথয কপি কর হয়",
"inviteUrlCopy": "আমণরণর url কিপব কপি কর হয়",
"createView": "দয সফলভি কর হয",
"formEmailSMTP": "ইমল বিঞপি সকষম করর জনয দয করপ স এসএমটিিগইনটি সকি করন",
"collabView": "সফলভ সহযিউতইচ কর",
"lockedView": "সফলভ লক ভিউতইচ কর",
"futureRelease": "শরই আসছ!"
}
}
}

7
packages/nc-gui-v2/lang/da.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL Output.",
"addOption": "Tilføj option",
"aggregateFunction": "Aggregate Function.",
"database": "Database",
"dbCreateIfNotExists": "DATABASE: Opret, hvis ikke eksisterer",
"clientKey": "Klientnøgle",
"clientCert": "Klient cert.",
@ -310,6 +309,7 @@
"importExcel": "Import Excel.",
"importCSV": "Import CSV.",
"downloadCSV": "Download som CSV.",
"downloadExcel": "Download som XLSX.",
"uploadCSV": "Upload CSV.",
"import": "Importere",
"importMetadata": "Import metadata.",
@ -413,7 +413,7 @@
"deleteProject": "Ønsker du at slette projektet?",
"shareBasePrivate": "Generer offentligt delbart readonly base",
"shareBasePublic": "Enhver på internettet med dette link kan se",
"userInviteNoSMTP": "Ser ud som om du ikke har konfigureret mailer endnu! Kopier venligst ovenstående invitation link og send det til",
"userInviteNoSMTP": "Ser ud som om du ikke har konfigureret mailer endnu!\nKopier venligst ovenstående invitation link og send det til",
"dragDropHide": "Træk og slip felter her for at skjule",
"formInput": "Indtast formularindgangsmærke",
"formHelpText": "Tilføj nogle hjælpetekst",
@ -497,8 +497,7 @@
"emailReqd": "E-mail er påkrævet",
"emailInvalid": "E-mail skal være gyldig",
"passwdRequired": "adgangskode er påkrævet",
"passwdLength": "Din adgangskode skal være mindst 8 tegn",
"passwdMismatch": "Kodeordene er ikke ens"
"passwdLength": "Din adgangskode skal være mindst 8 tegn"
}
},
"toast": {

7
packages/nc-gui-v2/lang/de.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL-Ausgabe",
"addOption": "Option hinzufügen",
"aggregateFunction": "Globale Funktion",
"database": "Datenbank",
"dbCreateIfNotExists": "Datenbank: Erstellen, falls nicht vorhanden",
"clientKey": "Client-Schlüssel",
"clientCert": "Client Cert",
@ -310,6 +309,7 @@
"importExcel": "Import Excel",
"importCSV": "Import CSV",
"downloadCSV": "Download als CSV",
"downloadExcel": "Download als XLSX",
"uploadCSV": "Hochladen CSV",
"import": "Importieren",
"importMetadata": "Metadaten importieren",
@ -413,7 +413,7 @@
"deleteProject": "Möchten Sie das Projekt löschen?",
"shareBasePrivate": "Öffentlich freigegebene Nur-Lese-Datenbank generieren",
"shareBasePublic": "Für Jeden im Internet mit diesem Link sichtbar",
"userInviteNoSMTP": "Es sieht so aus, als hätten Sie den Mailer noch nicht konfiguriert! Bitte kopieren Sie den obigen Einladungs-Link und senden Sie ihn an",
"userInviteNoSMTP": "Es sieht so aus, als hätten Sie den Mailer noch nicht konfiguriert! \\ n Bitte kopieren Sie den obigen Einladungs-Link und senden Sie ihn an",
"dragDropHide": "Ziehen Sie die Felder hierher, um sie zu verstecken",
"formInput": "Formularbezeichnung eingeben",
"formHelpText": "Einen Hilfs-Text hinzufügen",
@ -497,8 +497,7 @@
"emailReqd": "E-Mail ist erforderlich",
"emailInvalid": "Email muß gültig sein",
"passwdRequired": "Passwort ist erforderlich",
"passwdLength": "Ihr Passwort muß mindestens 8 Zeichen haben",
"passwdMismatch": "Passwörter stimmen nicht überein"
"passwdLength": "Ihr Passwort muß mindestens 8 Zeichen haben"
}
},
"toast": {

7
packages/nc-gui-v2/lang/en.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL Output",
"addOption": "Add option",
"aggregateFunction": "Aggregate function",
"database": "Database",
"dbCreateIfNotExists": "Database : create if not exists",
"clientKey": "Client Key",
"clientCert": "Client Cert",
@ -310,6 +309,7 @@
"importExcel": "Import Excel",
"importCSV": "Import CSV",
"downloadCSV": "Download as CSV",
"downloadExcel": "Download as XLSX",
"uploadCSV": "Upload CSV",
"import": "Import",
"importMetadata": "Import Metadata",
@ -413,7 +413,7 @@
"deleteProject": "Do you want to delete the project?",
"shareBasePrivate": "Generate publicly shareable readonly base",
"shareBasePublic": "Anyone on the internet with this link can view",
"userInviteNoSMTP": "Looks like you have not configured mailer yet! Please copy above invite link and send it to",
"userInviteNoSMTP": "Looks like you have not configured mailer yet!\nPlease copy above invite link and send it to",
"dragDropHide": "Drag and drop fields here to hide",
"formInput": "Enter form input label",
"formHelpText": "Add some help text",
@ -497,8 +497,7 @@
"emailReqd": "E-mail is required",
"emailInvalid": "E-mail must be valid",
"passwdRequired": "Password is required",
"passwdLength": "You password must be atleast 8 characters",
"passwdMismatch": "Passwords do not match"
"passwdLength": "You password must be atleast 8 characters"
}
},
"toast": {

9
packages/nc-gui-v2/lang/es.json

@ -12,7 +12,7 @@
"add": "Agregar",
"edit": "Editar",
"remove": "Eliminar",
"save": "Salvar",
"save": "Guardar",
"cancel": "Cancelar",
"submit": "Enviar",
"create": "Crear",
@ -213,7 +213,6 @@
"sqlOutput": "Salida SQL",
"addOption": "Añadir opción",
"aggregateFunction": "Función agregada",
"database": "Base de datos",
"dbCreateIfNotExists": "Base de datos : Crear si no existe",
"clientKey": "Clave de Cliente",
"clientCert": "Certificado de Cliente",
@ -310,6 +309,7 @@
"importExcel": "Importar Excel",
"importCSV": "Import CSV",
"downloadCSV": "Descargar como CSV",
"downloadExcel": "Descargar como XLSX",
"uploadCSV": "Subir CSV",
"import": "Importar",
"importMetadata": "Importar metadatos",
@ -413,7 +413,7 @@
"deleteProject": "¿Quieres eliminar el proyecto?",
"shareBasePrivate": "Generar una base de sólo lectura compartible públicamente",
"shareBasePublic": "Cualquier persona en Internet con este enlace puede ver",
"userInviteNoSMTP": "¡Parece que aún no has configurado Mailer! Por favor, copia el link de invitación de arriba y envíalo a",
"userInviteNoSMTP": "¡Parece que aún no has configurado Mailer!\nPor favor, copia el link de invitación de arriba y envíalo a",
"dragDropHide": "Arrastra y suelta los campos a ocultar aquí",
"formInput": "Ingrese la etiqueta de entrada del formulario",
"formHelpText": "Añade algo de texto de ayuda",
@ -497,8 +497,7 @@
"emailReqd": "E-mail requerido",
"emailInvalid": "E-mail debe ser correcto",
"passwdRequired": "Contraseña requerida",
"passwdLength": "Tu contraseña debe tener al menos 8 carácteres",
"passwdMismatch": "Las contraseñas no coinciden"
"passwdLength": "Tu contraseña debe tener al menos 8 carácteres"
}
},
"toast": {

5
packages/nc-gui-v2/lang/fa.json

@ -213,7 +213,6 @@
"sqlOutput": "خروجی SQL",
"addOption": "افزودن گزینه",
"aggregateFunction": "تابع جمع",
"database": "بخش پایگاه داده",
"dbCreateIfNotExists": "پایگاه داده: ایجاد در صورت عدم وجود",
"clientKey": "کلید Client",
"clientCert": "گواهینامه Client",
@ -310,6 +309,7 @@
"importExcel": "وارد کردن فایل Excel",
"importCSV": "Import CSV",
"downloadCSV": "دانلود بهعنوان CSV",
"downloadXLSX": "دانلود بهعنوان XLSX",
"uploadCSV": "بارگذاری CSV",
"import": "وارد کردن",
"importMetadata": "وارد کردن فراداده",
@ -497,8 +497,7 @@
"emailReqd": "پست الکترونیکی مورد نیاز است",
"emailInvalid": "پست الکترونیکی باید معتبر باشد",
"passwdRequired": "کلمه عبور مورد نیاز است",
"passwdLength": "کلمه عبور شما باید حداقل 8 کاراکتر داشته باشد",
"passwdMismatch": "رمزهای ورود مطابقت ندارند"
"passwdLength": "کلمه عبور شما باید حداقل 8 کاراکتر داشته باشد"
}
},
"toast": {

7
packages/nc-gui-v2/lang/fi.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL-lähtö",
"addOption": "Lisää vaihtoehto",
"aggregateFunction": "Kokonaistoiminto",
"database": "Tietokanta",
"dbCreateIfNotExists": "Tietokanta: Luo jos ei ole olemassa",
"clientKey": "Asiakasnäppäin",
"clientCert": "Asiakassuhde",
@ -310,6 +309,7 @@
"importExcel": "Tuonti excel",
"importCSV": "Import CSV",
"downloadCSV": "Lataa CSV",
"downloadXLSX": "Lataa XLSX",
"uploadCSV": "Lataa CSV",
"import": "Tuonti",
"importMetadata": "Tuo metatieto",
@ -413,7 +413,7 @@
"deleteProject": "Haluatko poistaa projektin?",
"shareBasePrivate": "Luo julkisesti jakattava Readonly Base",
"shareBasePublic": "Jokainen Internetissä tällä linkillä voi tarkastella",
"userInviteNoSMTP": "Näyttää siltä, ettet ole määrittänyt sähköpostia! Kopioi yllä kutsun linkki ja lähetä se",
"userInviteNoSMTP": "Näyttää siltä, ettet ole määrittänyt sähköpostia!\nKopioi yllä kutsun linkki ja lähetä se",
"dragDropHide": "Vedä ja pudota kentät täällä piiloutumaan",
"formInput": "Anna lomakkeen syöttömerkki",
"formHelpText": "Lisää joitain ohjeita",
@ -497,8 +497,7 @@
"emailReqd": "Sähköposti vaaditaan",
"emailInvalid": "Sähköpostin on oltava voimassa",
"passwdRequired": "salasana tarvitaan",
"passwdLength": "Salasanan on oltava vähintään 8 merkkiä",
"passwdMismatch": "Salasanat eivät täsmää"
"passwdLength": "Salasanan on oltava vähintään 8 merkkiä"
}
},
"toast": {

9
packages/nc-gui-v2/lang/fr.json

@ -213,7 +213,6 @@
"sqlOutput": "Sortie SQL",
"addOption": "Ajouter une option",
"aggregateFunction": "Fonction agrégée",
"database": "Base de données",
"dbCreateIfNotExists": "Base de données : la créer si elle n'existe pas",
"clientKey": "Clé client",
"clientCert": "Certificat client",
@ -230,7 +229,7 @@
"bookDemo": "Planifier une démonstration gratuite",
"getAnswered": "Obtenir des réponses à vos questions",
"joinDiscord": "Rejoindre le serveur Discord",
"joinCommunity": "Join NocoDB Community",
"joinCommunity": "Rejoindre la communauté NocoDB",
"joinReddit": "Rejoindre /r/NocoDB",
"followNocodb": "Suivre NocoDB"
},
@ -310,6 +309,7 @@
"importExcel": "Importer depuis Excel",
"importCSV": "Import CSV",
"downloadCSV": "Télécharger comme CSV",
"downloadExcel": "Télécharger comme XLSX",
"uploadCSV": "Téléverser un CSV",
"import": "Importer",
"importMetadata": "Importer les métadonnées",
@ -413,7 +413,7 @@
"deleteProject": "Voulez-vous supprimer le projet ?",
"shareBasePrivate": "Générer une base partagée en lecture seule",
"shareBasePublic": "Toute personne avec ce lien peut consulter",
"userInviteNoSMTP": "On dirait que vous n'avez pas encore configuré Mailer!\\nMerci de copier-coller le lien d'invitation ci-dessous et l'envoyer à",
"userInviteNoSMTP": "On dirait que vous n'avez pas encore configuré Mailer! \\ n Merci de copier-coller le lien d'invitation ci-dessous et l'envoyer à",
"dragDropHide": "Glisser et déposer des champs ici pour les masquer",
"formInput": "Entrer le libellé du formulaire",
"formHelpText": "Ajouter un texte d'aide",
@ -497,8 +497,7 @@
"emailReqd": "Adresse mail requise",
"emailInvalid": "L'adresse mail doit être valide",
"passwdRequired": "Mot de passe requis",
"passwdLength": "Votre mot de passe doit contenir au moins 8 caractères",
"passwdMismatch": "Les mots de passe ne correspondent pas"
"passwdLength": "Votre mot de passe doit contenir au moins 8 caractères"
}
},
"toast": {

522
packages/nc-gui-v2/lang/hi.json

@ -0,0 +1,522 @@
{
"general": {
"home": "घर",
"load": "भर",
"open": "खआ",
"close": "बद करन",
"yes": "ह",
"no": "नह",
"ok": "ठक ह",
"and": "और",
"or": "य",
"add": "ज",
"edit": "सदन करन",
"remove": "हट",
"save": "बच",
"cancel": "रदद करन",
"submit": "परसत करन",
"create": "सजन करन",
"insert": "Insert",
"delete": "मि",
"update": "अदयतन",
"rename": "नम बदल",
"reload": "पड कर",
"reset": "रट",
"install": "सित करन",
"show": "परदरशन",
"hide": "छि",
"showAll": "सब दि",
"hideAll": "सभि",
"showMore": "और दिओ",
"showOptions": "विकलप दि",
"hideOptions": "विकलप छि",
"showMenu": "मिओ",
"hideMenu": "मि",
"addAll": "सभ",
"removeAll": "सभ हट",
"signUp": "सइन अप कर",
"signIn": "सइन इन कर",
"signOut": "सइन आउट",
"required": "आवशयक",
"preferred": "पस",
"mandatory": "अनिय",
"loading": "लड ह रह ...",
"title": "शषक",
"upload": "डलन",
"download": "निलन",
"default": "Default",
"more": "ज",
"less": "कम",
"event": "घटन",
"condition": "शरत",
"after": "बद म",
"before": "पहल",
"search": "ख",
"notification": "सित कर",
"reference": "सदरभ",
"function": "समह"
},
"objects": {
"project": "परिजन",
"projects": "परिजन",
"table": "मज",
"tables": "टबल",
"field": "खत",
"fields": "खत",
"column": "कलम",
"columns": "कलम",
"page": "पठ",
"pages": "प",
"record": "अभिख",
"records": "अभिख",
"webhook": "Webhook",
"webhooks": "Webhooks",
"view": "रय",
"views": "वि",
"viewType": {
"grid": "जल",
"gallery": "गलर",
"form": "परपतर",
"kanban": "Kanban",
"calendar": "पग"
},
"user": "उपयगकर",
"users": "उपयगकर",
"role": "भि",
"roles": "भि",
"roleType": {
"owner": "स",
"creator": "बन",
"editor": "सदक",
"commenter": "टिपणर",
"viewer": "दरशक"
}
},
"datatype": {
"ID": "पहचन",
"ForeignKey": "वि",
"SingleLineText": "एकल पिठ",
"LongText": "लठ",
"Attachment": "अनरकि",
"Checkbox": "चक बस",
"MultiSelect": "बह चयन",
"SingleSelect": "एकल चयन",
"Collaborator": "सहय",
"Date": "दिक",
"Year": "सल",
"Time": "समय",
"PhoneNumber": "फन नबर",
"Email": "ईमल",
"URL": "यआरएल",
"Number": "स",
"Decimal": "दशमलव",
"Currency": "म",
"Percent": "परतिशत",
"Duration": "अवधि",
"Rating": "रिग",
"Formula": "सर",
"Rollup": "जमन",
"Count": "गिनत करन",
"Lookup": "द",
"DateTime": "दिक और समय",
"CreateTime": "निण क समय",
"LastModifiedTime": "अिम सित समय",
"AutoNumber": "वहन नबर",
"Barcode": "बरकड",
"Button": "बटन",
"Password": "पसवरड",
"relationProperties": {
"noAction": "No Action",
"cascade": "Cascade",
"restrict": "र",
"setNull": "Set NULL",
"setDefault": "Set Default"
}
},
"filterOperation": {
"isEqual": "बरबर ह",
"isNotEqual": "समन नह",
"isLike": "क समन ह",
"isNot like": "पसद नह",
"isEmpty": "ख",
"isNotEmpty": "ख नह",
"isNull": "शय ह",
"isNotNull": "निररथक नह"
},
"title": {
"newProj": "नयम",
"myProject": "म परिजन",
"formTitle": "परपतर शषक",
"collabView": "सहयमक दय",
"lockedView": "बद दय",
"personalView": "वयकिगत दिण",
"appStore": "ऐप सर",
"teamAndAuth": "टम और पिक",
"rolesUserMgmt": "भि और उपयगकररबधन",
"userMgmt": "उपयगकररबधन",
"apiTokenMgmt": "एपआई टकन परबधन",
"rolesMgmt": "भिरबधन",
"projMeta": "पट म",
"metaMgmt": "मरबधन",
"metadata": "म",
"exportImportMeta": "नित म",
"uiACL": "UI Access Control",
"metaOperations": "मलन",
"audit": "अषण",
"auditLogs": "हिब सि",
"sqlMigrations": "SQL परवसन",
"dbCredentials": "डस सख",
"advancedParameters": "SSL और उननत पटर",
"headCreateProject": "पट बन | नडब",
"headLogin": "लग इन | नडब",
"resetPassword": "अपनसवरड रट कर",
"teamAndSettings": "दल एविस",
"apiDocs": "API Docs",
"importFromAirtable": "Import From Airtable"
},
"labels": {
"notifyVia": "Notify Via",
"projName": "परिजनम",
"tableName": "Table name",
"viewName": "नम द",
"viewLink": "लिक द",
"columnName": "आम नम",
"columnType": "सभ परकर",
"roleName": "भिम",
"roleDescription": "भििवरण",
"databaseType": "डस मइप कर",
"lengthValue": "लई/ मय",
"dbType": "डस परकर",
"sqliteFile": "Sqlite फइल",
"hostAddress": "मन क पत",
"port": "पट स",
"username": "उपयगकरम",
"password": "पसवरड",
"schemaName": "Schema name",
"action": "गतििि",
"actions": "करवई",
"operation": "सलन",
"operationType": "परचलन परकर",
"operationSubType": "परचलन उप-परकर",
"description": "विवरण",
"authentication": "परमकरण",
"token": "टकन",
"where": "कह",
"cache": "कश",
"chat": "बत करन",
"email": "ईमल",
"storage": "भरण",
"uiAcl": "UI-ACL",
"models": "मडल",
"syncState": "सिक अवस",
"created": "बन",
"sqlOutput": "SQL आउटपट",
"addOption": "विकलप ज",
"aggregateFunction": "कल समह",
"database": "डस",
"dbCreateIfNotExists": "डस: बन यदिद नह",
"clientKey": "गहक क",
"clientCert": "गहक परमण पतर",
"serverCA": "सरवर सए",
"requriedCa": "आवशयक सए",
"requriedIdentity": "अपित-पहचन",
"inflection": {
"tableName": "विभकि - तिम",
"columnName": "विभकि - सभ नम"
},
"community": {
"starUs1": "सि",
"starUs2": "हम GitHub पर",
"bookDemo": "एक मत डक कर",
"getAnswered": "अपन सव जवब द",
"joinDiscord": "डिड मिल ह",
"joinCommunity": "NocoDB क समय स",
"joinReddit": "/r/NocoDB म",
"followNocodb": "NocoDB स"
},
"docReference": "Document Reference",
"selectUserRole": "Select User Role",
"childTable": "Child table",
"childColumn": "Child column",
"onUpdate": "On Update",
"onDelete": "On Delete"
},
"activity": {
"createProject": "पट बन",
"importProject": "आयत परिजन",
"searchProject": "खज परिजन",
"editProject": "पट सित कर",
"stopProject": "बद पट",
"startProject": "पट श कर",
"restartProject": "पट कनरभ करन",
"deleteProject": "पट हट",
"refreshProject": "तस",
"saveProject": "परिजनरकित कर",
"createProjectExtended": {
"extDB": "बहरस स <br> कनट करक बन",
"excel": "एकल सट बन",
"template": "टपलट सट बन"
},
"OkSaveProject": "ठक ह और पट सह",
"upgrade": {
"available": "अपगड उपलबद ह",
"releaseNote": "रिज नस",
"howTo": "अपगड क कर?"
},
"translate": "अनद करन मदद कर",
"account": {
"authToken": "किक टकन",
"swagger": "सगर एपआईएस डक",
"projInfo": "कट जनक",
"themes": "विषय"
},
"sort": "करम स लग",
"addSort": "सट विकलप ज",
"filter": "फिटर",
"addFilter": "फिटर ज",
"share": "शयर करन",
"shareBase": {
"disable": "स आधर अकषम कर",
"enable": "कई भयकििसकस लिक ह",
"link": "स आधर लिक"
},
"invite": "आमित करन",
"inviteMore": "अधिक आमित कर",
"inviteTeam": "टम क आमित कर",
"inviteToken": "टकन क आमित कर",
"newUser": "नय उपयगकर",
"editUser": "यजर कित कर",
"deleteUser": "परिजन उपयगकरि",
"resendInvite": "आमरण ईमल द",
"copyInviteURL": "क आमित URL",
"newRole": "नयि",
"reloadRoles": "पड भि",
"nextPage": "अगलठ",
"prevPage": "पिछलठ",
"nextRecord": "अगलिड",
"previousRecord": "पिछलिड",
"copyApiURL": "API URL क कर",
"createTable": "ति बन",
"refreshTable": "टबलस रिश",
"renameTable": "तिम",
"deleteTable": "टबल मि",
"addField": "इस ति नयड ज",
"setPrimary": "पथमिक मय कप मट कर",
"addRow": "नई पि",
"saveRow": "पि सह",
"insertRow": "नई पि",
"deleteRow": "पि हट",
"deleteSelectedRow": "चयनित पि हट",
"importExcel": "आयत एकल",
"importCSV": "Import CSV",
"downloadCSV": "CSV कप मउनलड कर",
"uploadCSV": "CSV अपलड कर",
"import": "आयत",
"importMetadata": "आयत म",
"exportMetadata": "नित म",
"clearMetadata": "सपषट म",
"exportToFile": "फइल कित",
"changePwd": "पसवरड बदल",
"createView": "एक दय बन",
"shareView": "शयर दय",
"listSharedView": "सय स",
"ListView": "दय स",
"copyView": "परतिििय",
"renameView": "नम बदल",
"deleteView": "डिट व",
"createGrid": "गिड व बन",
"createGallery": "गलरय बन",
"createCalendar": "कडर दय बन",
"createKanban": "कनबन व बन",
"createForm": "फम व बन",
"showSystemFields": "सिटम फड दि",
"copyUrl": "यआरएल क कर",
"openTab": "नयब ख",
"iFrame": "एमबल HTML कड क कर",
"addWebhook": "नयबहक ज",
"newToken": "नयकन ज",
"exportZip": "नित जिप",
"importZip": "आयत जिप",
"metaSync": "अभिक कर",
"settings": "समजन",
"previewAs": "कप मवलकन",
"resetReview": "रट पवलकन",
"testDbConn": "परषण डस कनशन",
"removeDbFromEnv": "परवरण सस नि",
"editConnJson": "कनशन JSON सित कर",
"sponsorUs": "हमित कर",
"sendEmail": "ईमल भ"
},
"tooltip": {
"saveChanges": "परिवरतनरकित कर",
"xcDB": "एक नयट बन",
"extDB": "MySQL, PostgreSQL, SQL सरवर और SQLite क समरथन करत",
"apiRest": "रट एपआई कयम सलभ",
"apiGQL": "गफकल एपआई कयम सलभ",
"theme": {
"dark": "यह कग म आत (^⇧B)",
"light": "क यह कग म आत? (^⇧b)"
},
"addTable": "नई ति",
"inviteMore": "अधिक उपयगकर आमित कर",
"toggleNavDraw": "निशन दरज कगल कर",
"reloadApiToken": "एपआई टकन कड कर",
"generateNewApiToken": "नय एपआई टकन उतपनन कर",
"addRole": "नई भि",
"reloadList": "पड स",
"metaSync": "सिक म",
"sqlMigration": "पनरित पलयन",
"updateRestart": "अदयतन और पनरभ कर",
"cancelReturn": "रदद कर और वपस ल",
"exportMetadata": "मबल स सभििित कर।",
"importMetadata": "मििबल तक सभ आयत कर।",
"clearMetadata": "मबल स सभफ कर।",
"clientKey": ".Key फइल क चयन कर",
"clientCert": ".Cert फइल क चयन कर",
"clientCA": "सए फइल क चयन कर"
},
"placeholder": {
"projName": "पट नम दरज कर",
"password": {
"enter": "पसवरड दरज कर",
"current": "वरतमन पसवरड",
"new": "नयसवरड",
"save": "पसवरड क बचओ",
"confirm": "नए पसवरड कि कर"
},
"searchProjectTree": "खज टबल",
"searchFields": "खज फड",
"searchColumn": "खज {खज} कलम",
"searchApps": "खज एपिशन",
"searchModels": "खज मडल",
"noItemsFound": "कछ नहि",
"defaultValue": "डिट मन",
"filterByEmail": "ई-मल दिटर"
},
"msg": {
"info": {
"footerInfo": "परतिठ पि",
"upload": "अपलड करनिए फइल क चयन कर",
"upload_sub": "यग एड डप फइल",
"excelSupport": "समरित: .xls, .xlsx, .xlsm, .ods, .ots",
"excelURL": "Excel फइल URL दरज कर",
"csvURL": "csv फइल क url दरज कर",
"footMsg": "# पिन डइप करनिए पस करनिए",
"excelImport": "शट आयत किए उपलबध ह",
"exportMetadata": "क आप मबल सित करनहत?",
"importMetadata": "क आप मबल स आयत करनहत?",
"clearMetadata": "क आप मबल सफ करनहत?",
"projectEmptyMessage": "एक नई परिजन बनकर आरभ कर",
"stopProject": "क आप परिजनकनहत?",
"startProject": "क आप पट श करनहत?",
"restartProject": "क आप परिजनिर स करनहत?",
"deleteProject": "क आप परिजन हटहत?",
"shareBasePrivate": "सवजनिक रप स करनय रनलस उतपनन कर",
"shareBasePublic": "इस लिक कथ इटरनट पर कई भयकिख सकत",
"userInviteNoSMTP": "लगति आपन अभ तक मलर किगर नहि! कपय ऊपर दिए गए लिक क ऊपर क कर और इस",
"dragDropHide": "छििए यहड क और डप कर",
"formInput": "फम इनपट लबल दरज कर",
"formHelpText": "कछ सहयतठ ज",
"onlyCreator": "कवल नििई द",
"formDesc": "फम विवरण ज",
"beforeEnablePwd": "एक पसवरड कथ पहच करतिित कर",
"afterEnablePwd": "एकस पसवरड परतिित ह",
"privateLink": "यह दय एक नििक कयम सि गय",
"privateLinkAdditionalInfo": "नििक वग कवल इस दय मिई दिख सकत",
"afterFormSubmitted": "फम कद परसत कि",
"apiOptions": "कयम सट",
"submitAnotherForm": "एक और फम सबमिट कर' बटन दि",
"showBlankForm": "5 सड कद एक खम दि",
"emailForm": "म ई-मल कर",
"showSysFields": "सिटम फड दि",
"filterAutoApply": "ऑट कर",
"showMessage": "यह सश दि",
"viewNotShared": "वरतमन दय स नह!",
"showAllViews": "इस ति सभिर दि",
"collabView": "सदन अनमति उचचतर कथ सहयय किगरशन क बदल सकत।",
"lockedView": "कई भय किगरशन क तब तक सित नह कर सकत जब तक कि यह अनलक न हए।",
"personalView": "कवल आप दय किगरशन कित कर सकत। अनय सहयियकिगत विर डिट रप सिए ह।",
"ownerDesc": "रचन/हट सकत। और पण सदन डस सरचन और फड।",
"creatorDesc": "डस सरचन और म तरह सित कर सकत।",
"editorDesc": "रिड कित कर सकतिन डस/फड करचन नह बदल सकत।",
"commenterDesc": "रिड दख सकत और टिपण कर सकतिन कछ भित नह कर सकत",
"viewerDesc": "रिड दख सकतिन कछ भित नह कर सकत",
"addUser": "नई उपयगकर",
"staticRoleInfo": "सिटम परिित भिित नहि सकत",
"exportZip": "फइल और डउनलड करनिए पट मित कर।",
"importZip": "आयत परिजनिप फइल और पनरभ।",
"importText": "मिप फइल अपलड करक NOCODB परिजन आयत कर",
"metaNoChange": "कई परिवरतन नह पहचन",
"sqlMigration": "सइगशन सवचित रप स बनए ज। एक ति बन और इस पठ क कर।",
"dbConnectionStatus": "मय परवरण",
"dbConnected": "कनशन सफल रह",
"notifications": {
"no_new": "कई नए सश नह",
"clear": "स"
},
"sponsor": {
"header": "आप हम मदद कर सकत!",
"message": "हम एक छम ह NOCODB क ओपन-सस बनिए प समय कम कर रह। हमनन ि एनओसओड उपकरण कटरनट पर हर समसिए सवतर रप स उपलबध हिए।"
},
"loginMsg": "NoCODB मग इन कर",
"passwordRecovery": {
"message_1": "जब आप सइन अप करतपय आपक उपयग किए गए ईमल पतरदन कर।",
"message_2": "हम आपक अपनसवरड रट करनिए एक लिक कथ एक ईमल भ।",
"success": "कपयसवरड रट करनिए अपन ईमल द"
},
"signUp": {
"superAdmin": "आप 'सपर एडमिन' ह",
"alreadyHaveAccount": "क आपकस पहल एक खद ह ?",
"workEmail": "अपनम ईमल दरज कर",
"enterPassword": "अपनसवरड ड",
"forgotPassword": "पसवरड भल गए ह ?",
"dontHaveAccount": "कई ख नह?"
},
"addView": {
"grid": "गिड दय ज",
"gallery": "गलरय ज",
"form": "फम व",
"kanban": "कनबन दय ज",
"calendar": "कडर दय ज"
},
"tablesMetadataInSync": "टबल क SYNC ह",
"addMultipleUsers": "आप एकिक COMMA (,) द अलग ईमल जड़ सकत",
"enterTableName": "टबल कम लि",
"addDefaultColumns": "डिट कलम ज",
"tableNameInDb": "डस मबल कम बच गय"
},
"error": {
"searchProject": "{search} किए आपकज कई परिम नहि",
"invalidChar": "फडर पथ म अमय चरिर।",
"invalidDbCredentials": "अमय डस कियलस।",
"unableToConnectToDb": "डस स कनट करन असमरथ, कपयच करि आपकस ऊपर ह।",
"userDoesntHaveSufficientPermission": "उपयगकरद नह बनिए परत अनमति।",
"dbConnectionStatus": "अमय डस पटर",
"dbConnectionFailed": "कनशन विफलत:",
"signUpRules": {
"emailReqd": "ईमल क जररत ह",
"emailInvalid": "ईमल मय हिए",
"passwdRequired": "पसवरड क आवशयकत",
"passwdLength": "आप पसवरड कम स कम 8 वरण हिए",
"passwdMismatch": "पसवरड मल नह"
}
},
"toast": {
"exportMetadata": "परिजन सफलतवक नित क गई",
"importMetadata": "परिजन सफलतवक आयत क गई",
"clearMetadata": "पट म सफलतवक म",
"stopProject": "परिजन सफलतवक बद ह गई",
"startProject": "परिजन सफलतवक शई",
"restartProject": "परिजन सफलतवक फिर सि गय",
"deleteProject": "परिजन सफलतवक हटि गय",
"authToken": "किपबड म AUTH टकन कि गय",
"projInfo": "किपबड मट कनक गय",
"inviteUrlCopy": "आमरण url किपबड मि गय",
"createView": "व सफलतवक बन गय",
"formEmailSMTP": "कपय ईमल अधिचन सकषम करनिए ऐप सर म SMTP पलगइन क सकिय कर",
"collabView": "सफलतवक सहयय पर सिच कि गय",
"lockedView": "सफलतवक लक किए गए दय पर सिच कि गय",
"futureRelease": "जलद आ रह!"
}
}
}

7
packages/nc-gui-v2/lang/hr.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL izlaz",
"addOption": "Dodajte opciju",
"aggregateFunction": "Agregatna funkcija",
"database": "Baza podataka",
"dbCreateIfNotExists": "Baza podataka: stvoriti ako ne postoji",
"clientKey": "Ključ klijenta",
"clientCert": "Klijent cert",
@ -310,6 +309,7 @@
"importExcel": "Uvoz Excel",
"importCSV": "Import CSV",
"downloadCSV": "Preuzmite kao CSV",
"downloadExcel": "Preuzmite kao XLSX",
"uploadCSV": "Prenesite CSV",
"import": "Uvoz",
"importMetadata": "Uvoz metapodataka",
@ -413,7 +413,7 @@
"deleteProject": "Želite li izbrisati projekt?",
"shareBasePrivate": "Generirajte javno zajedničko upravljanje",
"shareBasePublic": "Svatko na internetu s ovom linkom može vidjeti",
"userInviteNoSMTP": "Izgleda da još niste konfigurirali mailer! Molimo kopirajte iznad poziva veze i pošaljite ga na",
"userInviteNoSMTP": "Izgleda da još niste konfigurirali mailer! n Molimo kopirajte iznad poziva veze i pošaljite ga na",
"dragDropHide": "Povucite i ispustite polja za skrivanje",
"formInput": "Unesite oznaku ulazne obrasce",
"formHelpText": "Dodajte neki tekst pomoći",
@ -497,8 +497,7 @@
"emailReqd": "Potrebna je e-pošta",
"emailInvalid": "E-pošta mora biti valjana",
"passwdRequired": "potrebna je lozinka",
"passwdLength": "Vi lozinka mora biti najmanje 8 znakova",
"passwdMismatch": "Lozinke se ne podudaraju"
"passwdLength": "Vi lozinka mora biti najmanje 8 znakova"
}
},
"toast": {

7
packages/nc-gui-v2/lang/id.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL Output",
"addOption": "Tambahkan opsi",
"aggregateFunction": "Fungsi agregat.",
"database": "Basis Data",
"dbCreateIfNotExists": "Basis Data: Buat jika tidak ada",
"clientKey": "Kunci klien",
"clientCert": "Sertifikat klien",
@ -310,6 +309,7 @@
"importExcel": "Impor Excel.",
"importCSV": "Import CSV",
"downloadCSV": "Unduh sebagai CSV.",
"downloadExcel": "Unduh sebagai XLSX.",
"uploadCSV": "Unggah CSV.",
"import": "Impor",
"importMetadata": "Impor Metadata.",
@ -413,7 +413,7 @@
"deleteProject": "Apakah Anda ingin menghapus proyek?",
"shareBasePrivate": "Menghasilkan basis readonly yang dapat dibagikan secara publik",
"shareBasePublic": "Siapa pun di Internet dengan tautan ini dapat dilihat",
"userInviteNoSMTP": "Sepertinya Anda belum mengonfigurasi mailer! Harap salin tautan undangan di atas dan kirimkan ke",
"userInviteNoSMTP": "Sepertinya Anda belum mengonfigurasi mailer!\nHarap salin tautan undangan di atas dan kirimkan ke",
"dragDropHide": "Seret dan jatuhkan bidang di sini untuk bersembunyi",
"formInput": "Masukkan label input formulir",
"formHelpText": "Tambahkan beberapa teks bantuan",
@ -497,8 +497,7 @@
"emailReqd": "E-mail diperlukan",
"emailInvalid": "E-mail harus valid",
"passwdRequired": "katakunci dibutuhkan",
"passwdLength": "Kata sandi Anda harus minimal 8 karakter",
"passwdMismatch": "Sandi tidak cocok"
"passwdLength": "Kata sandi Anda harus minimal 8 karakter"
}
},
"toast": {

7
packages/nc-gui-v2/lang/it_IT.json

@ -213,7 +213,6 @@
"sqlOutput": "Output SQL",
"addOption": "Aggiungi opzione",
"aggregateFunction": "Aggrega funzione",
"database": "Database",
"dbCreateIfNotExists": "Database: crea se non esiste",
"clientKey": "Chiave client",
"clientCert": "Certificato client",
@ -310,6 +309,7 @@
"importExcel": "Importa Excel.",
"importCSV": "Import CSV",
"downloadCSV": "Scarica come CSV.",
"downloadExcel": "Scarica come XLSX.",
"uploadCSV": "Carica CSV.",
"import": "Importa",
"importMetadata": "Importa metadati",
@ -413,7 +413,7 @@
"deleteProject": "Vuoi cancellare il progetto?",
"shareBasePrivate": "Genera base readonly condivisibile pubblicamente",
"shareBasePublic": "Chiunque su Internet con questo link può visualizzare",
"userInviteNoSMTP": "Sembra che non abbia ancora configurato il mailer! Manda il link d'invito sopra a",
"userInviteNoSMTP": "Sembra che non abbia ancora configurato il mailer! \\n Manda il link d'invito sopra a",
"dragDropHide": "Rilascia qui i campi da nascondere",
"formInput": "Inserisci l'etichetta di input del modulo",
"formHelpText": "Aggiungi testo di aiuto",
@ -497,8 +497,7 @@
"emailReqd": "L'e-mail è richiesta",
"emailInvalid": "L'email deve essere valida",
"passwdRequired": "È richiesta la password",
"passwdLength": "La tua password deve essere di almeno 8 caratteri",
"passwdMismatch": "le passwords non corrispondono"
"passwdLength": "La tua password deve essere di almeno 8 caratteri"
}
},
"toast": {

25
packages/nc-gui-v2/lang/iw.json

@ -151,7 +151,7 @@
"lockedView": "תצוגה נעולה",
"personalView": "תצוגה אישית",
"appStore": "חנות אפליקציות",
"teamAndAuth": "Team & Auth",
"teamAndAuth": "צוות & auth.",
"rolesUserMgmt": "תפקידים & ניהול משתמשים",
"userMgmt": "ניהול משתמשים",
"apiTokenMgmt": "API Tokens Management",
@ -162,14 +162,14 @@
"exportImportMeta": "Export/ Import Metadata",
"uiACL": "בקרת גישה לממשק UI.",
"metaOperations": "פעולות מטא נתונים",
"audit": "Audit",
"auditLogs": "Audit Log",
"sqlMigrations": "SQL Migrations",
"dbCredentials": "Database Credentials",
"advancedParameters": "SSL & Advanced parameters",
"headCreateProject": "יצירת פרויקט",
"headLogin": "התחבר",
"resetPassword": "איפוס סיסמא",
"audit": "בְּדִיקָה",
"auditLogs": "יומן ביקורת",
"sqlMigrations": "SQL הגבלות",
"dbCredentials": "אישורי מסד נתונים",
"advancedParameters": "SSL & פרמטרים מתקדמים",
"headCreateProject": "יצירת פרויקט נוקודב",
"headLogin": "התחבר | נוקודב",
"resetPassword": "לאפס את הסיסמה שלך",
"teamAndSettings": "Team & Settings",
"apiDocs": "API Docs",
"importFromAirtable": "Import From Airtable"
@ -213,7 +213,6 @@
"sqlOutput": "פלט SQL",
"addOption": "הוסף אפשרות",
"aggregateFunction": "פונקציה מצטברת",
"database": "מאגר מידע",
"dbCreateIfNotExists": "מסד נתונים: צור אם לא קיים",
"clientKey": "מפתח הלקוח",
"clientCert": "Client Cert.",
@ -310,6 +309,7 @@
"importExcel": "ייבוא Excel",
"importCSV": "Import CSV",
"downloadCSV": "הורד כמו CSV.",
"downloadExcel": "הורד כמו XLSX.",
"uploadCSV": "העלה CSV.",
"import": ְבוּא",
"importMetadata": "ייבוא מטא נתונים",
@ -413,7 +413,7 @@
"deleteProject": "האם ברצונך למחוק את הפרויקט?",
"shareBasePrivate": "ליצור בסיס שיתוף פעולה לציבור",
"shareBasePublic": "כל אחד באינטרנט עם קישור זה יכול להציג",
"userInviteNoSMTP": "נראה כאילו לא הגדרת מיילר עדיין! \\ N אנא העתק מעל הזמנת קישור ולשלוח אותו",
"userInviteNoSMTP": "נראה כאילו לא הגדרת מיילר עדיין!\nאנא העתק מעל הזמנת קישור ולשלוח אותו",
"dragDropHide": "גרור ושחרר שדות כאן כדי להסתיר",
"formInput": "הזן תווית קלט טופס",
"formHelpText": "הוסף טקסט עזרה",
@ -497,8 +497,7 @@
"emailReqd": "דואר אלקטרוני נדרש",
"emailInvalid": "דואר אלקטרוני חייב להיות תקף",
"passwdRequired": "דרושה סיסמא",
"passwdLength": "הסיסמה שלך חייבת להיות atleast 8 תווים",
"passwdMismatch": "סיסמאות לא תואמות"
"passwdLength": "הסיסמה שלך חייבת להיות atleast 8 תווים"
}
},
"toast": {

5
packages/nc-gui-v2/lang/ja.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL出力",
"addOption": "オプションを追加",
"aggregateFunction": "集約関数",
"database": "データベース",
"dbCreateIfNotExists": "データベース:存在しない場合は作成",
"clientKey": "クライアントキー",
"clientCert": "クライアント証明書",
@ -310,6 +309,7 @@
"importExcel": "エクセルファイルをインポート",
"importCSV": "Import CSV",
"downloadCSV": "CSVをダウンロード",
"downloadExcel": "XLSXをダウンロード",
"uploadCSV": "CSVをアップロード",
"import": "インポート",
"importMetadata": "メタデータをインポート",
@ -497,8 +497,7 @@
"emailReqd": "メールアドレスが必要です",
"emailInvalid": "有効なメールアドレスを入力してください",
"passwdRequired": "パスワードが必要です",
"passwdLength": "パスワードは8文字以上にしてください",
"passwdMismatch": "パスワードが一致していません"
"passwdLength": "パスワードは8文字以上にしてください"
}
},
"toast": {

7
packages/nc-gui-v2/lang/ko.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL 출력",
"addOption": "옵션 추가",
"aggregateFunction": "집합 함수",
"database": "데이터 베이스",
"dbCreateIfNotExists": "데이터베이스 : 존재하지 않는 경우 생성",
"clientKey": "클라이언트 키",
"clientCert": "클라이언트 Cert.",
@ -310,6 +309,7 @@
"importExcel": "엑셀 가져오기",
"importCSV": "CSV 가져오기",
"downloadCSV": "CSV 다운로드",
"downloadExcel": "XLSX 다운로드",
"uploadCSV": "CSV 업로드",
"import": "가져오기",
"importMetadata": "메타 데이터 가져오기",
@ -413,7 +413,7 @@
"deleteProject": "프로젝트를 삭제 하시겠습니까?",
"shareBasePrivate": "공개적으로 공유 할 수있는 ReadOnly Base를 생성합니다",
"shareBasePublic": "이 링크가있는 인터넷의 모든 사람은 볼 수 있습니다",
"userInviteNoSMTP": "아직 메일러를 구성하지 않은 것처럼 보입니다! 초대장 링크를 복사하여 보냅니다.",
"userInviteNoSMTP": "아직 메일러를 구성하지 않은 것처럼 보입니다! \\ n 초대장 링크를 복사하여 보냅니다.",
"dragDropHide": "여기에서 필드를 드래그 앤 드롭하십시오",
"formInput": "양식 입력 레이블 입력",
"formHelpText": "도움말 텍스트 추가",
@ -497,8 +497,7 @@
"emailReqd": "이메일이 필요합니다.",
"emailInvalid": "이메일이 유효해야합니다.",
"passwdRequired": "비밀번호가 필요합니다.",
"passwdLength": "비밀번호는 8자 이상이어야 합니다.",
"passwdMismatch": "비밀번호가 일치하지 않습니다"
"passwdLength": "비밀번호는 8자 이상이어야 합니다."
}
},
"toast": {

7
packages/nc-gui-v2/lang/lv.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL izvade",
"addOption": "Pievienot iespēju",
"aggregateFunction": "Agregācijas funkcija",
"database": "Datubāze",
"dbCreateIfNotExists": "Datubāze : izveidotm ja neeksistē",
"clientKey": "Klienta atslēga",
"clientCert": "Klienta sertifikāts",
@ -310,6 +309,7 @@
"importExcel": "Importēt Excel",
"importCSV": "Import CSV",
"downloadCSV": "Lejupielādēt kā CSV",
"downloadExcel": "Lejupielādēt kā XLSX",
"uploadCSV": "Augšupielādēt CSV",
"import": "Importēt",
"importMetadata": "Importēt metadatus",
@ -413,7 +413,7 @@
"deleteProject": "Vai tu vēlies dzēst projektu?",
"shareBasePrivate": "Izveidot koplietojamu saiti",
"shareBasePublic": "Jebkurš ar šo saiti varēs skatīt",
"userInviteNoSMTP": "E-pasta nosūtītājs vēl nav konfigurēts! Lūdzu kopējiet uzaicinājuma saiti augstāk un nosūtiet to",
"userInviteNoSMTP": "E-pasta nosūtītājs vēl nav konfigurēts! \\n Lūdzu kopējiet uzaicinājuma saiti augstāk un nosūtiet to",
"dragDropHide": "Vilkt un nomest laukus šeit lai noņemtu",
"formInput": "Ievadiet formas ievades lauka birku",
"formHelpText": "Pievienot norādījumus",
@ -497,8 +497,7 @@
"emailReqd": "E-pasts ir obligāts",
"emailInvalid": "E-pastam ir jābūt korektam",
"passwdRequired": "Parole ir obligāta",
"passwdLength": "Parolei jābūt vismaz 8 simboli",
"passwdMismatch": "Paroles nesakrīt"
"passwdLength": "Parolei jābūt vismaz 8 simboli"
}
},
"toast": {

7
packages/nc-gui-v2/lang/nl.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL Uitvoer",
"addOption": "Optie toevoegen",
"aggregateFunction": "Geaggregeerde functie",
"database": "Database",
"dbCreateIfNotExists": "Database: creëer als het niet bestaat",
"clientKey": "Client Key",
"clientCert": "Client Cert",
@ -310,6 +309,7 @@
"importExcel": "Excel importeren",
"importCSV": "Import CSV",
"downloadCSV": "Download als CSV",
"downloadExcel": "Download als XLSX",
"uploadCSV": "Upload CSV",
"import": "Importeren",
"importMetadata": "Importeer Metadata",
@ -413,7 +413,7 @@
"deleteProject": "Wilt u het project verwijderen?",
"shareBasePrivate": "Genereer openbaar deelbare alleen-lezen database",
"shareBasePublic": "Iedereen op het internet met deze link kan bekijken",
"userInviteNoSMTP": "Het lijkt erop dat je nog geen mailer hebt geconfigureerd! Kopieer de bovenstaande uitnodigingslink en verstuur deze zelf naar de ontvanger",
"userInviteNoSMTP": "Het lijkt erop dat je nog geen mailer hebt geconfigureerd! \\n Kopieer de bovenstaande uitnodigingslink en verstuur deze zelf naar de ontvanger",
"dragDropHide": "Versleep de velden naar hier om ze te verbergen",
"formInput": "Voer formulier invoerlabel in",
"formHelpText": "Voeg wat hulptekst toe",
@ -497,8 +497,7 @@
"emailReqd": "E-mail is vereist",
"emailInvalid": "E-mail moet geldig zijn",
"passwdRequired": "Wachtwoord is verplicht",
"passwdLength": "Je wachtwoord moet ten minste 8 tekens hebben",
"passwdMismatch": "Wachtwoorden komen niet overeen"
"passwdLength": "Je wachtwoord moet ten minste 8 tekens hebben"
}
},
"toast": {

7
packages/nc-gui-v2/lang/no.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL-utgang",
"addOption": "Legg til alternativ",
"aggregateFunction": "Samlet funksjon",
"database": "Database",
"dbCreateIfNotExists": "Database: Opprett hvis ikke eksisterer",
"clientKey": "Klientnøkkel",
"clientCert": "Klientsertifikat",
@ -310,6 +309,7 @@
"importExcel": "Importer Excel.",
"importCSV": "Import CSV",
"downloadCSV": "Last ned som CSV.",
"downloadExcel": "Last ned som XLSX.",
"uploadCSV": "Last opp CSV.",
"import": "Importer",
"importMetadata": "Importer metadata",
@ -413,7 +413,7 @@
"deleteProject": "Ønsker du å slette prosjektet?",
"shareBasePrivate": "Generer offentlig delbar readonly base",
"shareBasePublic": "Alle på Internett med denne lenken kan se",
"userInviteNoSMTP": "Ser ut som om du ikke har konfigurert mailer ennå! Vennligst kopier over Inviter Link og send den til",
"userInviteNoSMTP": "Ser ut som om du ikke har konfigurert mailer ennå!\nVennligst kopier over Inviter Link og send den til",
"dragDropHide": "Dra og slipp felt her for å skjule",
"formInput": "Skriv inn skjema inngangsetikett",
"formHelpText": "Legg til litt hjelpetekst",
@ -497,8 +497,7 @@
"emailReqd": "E-post er nødvendig",
"emailInvalid": "E-post må være gyldig",
"passwdRequired": "Passord er påkrevd",
"passwdLength": "Ditt passord må være minst 8 tegn",
"passwdMismatch": "passordene er ikke like"
"passwdLength": "Ditt passord må være minst 8 tegn"
}
},
"toast": {

7
packages/nc-gui-v2/lang/pl.json

@ -213,7 +213,6 @@
"sqlOutput": "Wyjście SQL.",
"addOption": "Dodaj opcję.",
"aggregateFunction": "Funkcja kruszywa",
"database": "Baza danych",
"dbCreateIfNotExists": "Baza danych: Utwórz, jeśli nie istnieje",
"clientKey": "Klucz klienta",
"clientCert": "Cert Client.",
@ -310,6 +309,7 @@
"importExcel": "Importuj Excel.",
"importCSV": "Import CSV",
"downloadCSV": "Pobierz jako CSV.",
"downloadExcel": "Pobierz jako XLSX.",
"uploadCSV": "Prześlij CSV.",
"import": "Import",
"importMetadata": "Importuj metadane",
@ -413,7 +413,7 @@
"deleteProject": "Czy chcesz usunąć projekt?",
"shareBasePrivate": "Wygeneruj publicznie do readonly bazy",
"shareBasePublic": "Każdy w Internecie z tym linkiem może przeglądać",
"userInviteNoSMTP": "Wygląda na to, że nie skonfigurowałeś jeszcze mailera! Proszę skopiować powyżej zaproś link i wyślij go",
"userInviteNoSMTP": "Wygląda na to, że nie skonfigurowałeś jeszcze mailera! n Proszę skopiować powyżej zaproś link i wyślij go",
"dragDropHide": "Przeciągnij i upuść pola tutaj, aby się ukryć",
"formInput": "Wprowadź etykietę wejściową formularza",
"formHelpText": "Dodaj trochę pomocy",
@ -497,8 +497,7 @@
"emailReqd": "Email jest wymagany",
"emailInvalid": "Adres email musi być poprawny",
"passwdRequired": "Wymagane jest hasło",
"passwdLength": "Użytkownik musi być co najmniej 8 znaków",
"passwdMismatch": "Hasła nie pasują do siebie"
"passwdLength": "Użytkownik musi być co najmniej 8 znaków"
}
},
"toast": {

7
packages/nc-gui-v2/lang/pt.json

@ -213,7 +213,6 @@
"sqlOutput": "Saída SQL.",
"addOption": "Adicionar opção",
"aggregateFunction": "Função agregada",
"database": "Base de dados",
"dbCreateIfNotExists": "Base de Dados : criar se não existir",
"clientKey": "Chave do Cliente",
"clientCert": "Certificado do Cliente",
@ -310,6 +309,7 @@
"importExcel": "Importar Excel.",
"importCSV": "Import CSV",
"downloadCSV": "Baixe como CSV.",
"downloadExcel": "Baixe como XLSX.",
"uploadCSV": "Carregar CSV.",
"import": "Importar",
"importMetadata": "Importar Metadados",
@ -413,7 +413,7 @@
"deleteProject": "Você quer excluir o projeto?",
"shareBasePrivate": "Gerar base readonly compartilhável publicamente",
"shareBasePublic": "Qualquer pessoa na internet com este link pode ver",
"userInviteNoSMTP": "Parece que você ainda não configurou o mailer! por favor copie o link acima do convite e envie-o para",
"userInviteNoSMTP": "Parece que você ainda não configurou o mailer!\npor favor copie o link acima do convite e envie-o para",
"dragDropHide": "Arraste e solte os campos aqui para se esconder",
"formInput": "Digite a etiqueta de entrada do formulário",
"formHelpText": "Adicione um texto de ajuda",
@ -497,8 +497,7 @@
"emailReqd": "O Email é obrigatório",
"emailInvalid": "O Email deve ser válido",
"passwdRequired": "A Palavra-passe é obrigatória",
"passwdLength": "A sua palavra-passe deve conter pelo menos 8 caracteres",
"passwdMismatch": "As senhas não coincidem"
"passwdLength": "A sua palavra-passe deve conter pelo menos 8 caracteres"
}
},
"toast": {

7
packages/nc-gui-v2/lang/pt_BR.json

@ -213,7 +213,6 @@
"sqlOutput": "Saída SQL.",
"addOption": "Adicionar opção",
"aggregateFunction": "Função agregada",
"database": "Base de dados",
"dbCreateIfNotExists": "Base de Dados : criar se não existir",
"clientKey": "Chave do Cliente",
"clientCert": "Certificado do Cliente",
@ -310,6 +309,7 @@
"importExcel": "Importar Excel.",
"importCSV": "Import CSV",
"downloadCSV": "Baixe como CSV.",
"downloadExcel": "Baixe como XLSX.",
"uploadCSV": "Carregar CSV.",
"import": "Importar",
"importMetadata": "Importar Metadados",
@ -413,7 +413,7 @@
"deleteProject": "Você quer excluir o projeto?",
"shareBasePrivate": "Gerar base readonly compartilhável publicamente",
"shareBasePublic": "Qualquer pessoa na internet com este link pode ver",
"userInviteNoSMTP": "Parece que você ainda não configurou o mailer! por favor copie o link acima do convite e envie-o para",
"userInviteNoSMTP": "Parece que você ainda não configurou o mailer!\npor favor copie o link acima do convite e envie-o para",
"dragDropHide": "Arraste e solte os campos aqui para se esconder",
"formInput": "Digite a etiqueta de entrada do formulário",
"formHelpText": "Adicione um texto de ajuda",
@ -497,8 +497,7 @@
"emailReqd": "O Email é obrigatório",
"emailInvalid": "O Email deve ser válido",
"passwdRequired": "A Palavra-passe é obrigatória",
"passwdLength": "A sua palavra-passe deve conter pelo menos 8 caracteres",
"passwdMismatch": "As senhas não coincidem"
"passwdLength": "A sua palavra-passe deve conter pelo menos 8 caracteres"
}
},
"toast": {

6
packages/nc-gui-v2/lang/ru.json

@ -213,7 +213,6 @@
"sqlOutput": "Вывод SQL",
"addOption": "Добавить настройку",
"aggregateFunction": "Агрегатная функция",
"database": "База данных",
"dbCreateIfNotExists": "База данных: создать, если не существует",
"clientKey": "Ключ клиента",
"clientCert": "Сертификат клиента",
@ -230,7 +229,6 @@
"bookDemo": "Забронировать бесплатное демо",
"getAnswered": "Получите ответы на ваши вопросы",
"joinDiscord": "Присоединиться к",
"joinCommunity": "Join NocoDB Community",
"joinReddit": "Присоединиться /r/NocoDB",
"followNocodb": "Следите за NocoDB"
},
@ -310,6 +308,7 @@
"importExcel": "Импорт из Excel",
"importCSV": "Import CSV",
"downloadCSV": "Скачать как CSV.",
"downloadExcel": "Скачать как XLSX.",
"uploadCSV": "Загрузить CSV.",
"import": "Импортировать",
"importMetadata": "Импорт метаданных",
@ -497,8 +496,7 @@
"emailReqd": "Требуется E-mail",
"emailInvalid": "Электронная почта должна быть действительной",
"passwdRequired": "необходим пароль",
"passwdLength": "Ваш пароль должен быть не короче 8 символов",
"passwdMismatch": "Пароли не совпадают"
"passwdLength": "Ваш пароль должен быть не короче 8 символов"
}
},
"toast": {

7
packages/nc-gui-v2/lang/sl.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL izhod",
"addOption": "Dodaj možnost",
"aggregateFunction": "Agregatna funkcija",
"database": "Baza podatkov",
"dbCreateIfNotExists": "Baza podatkov: Ustvari, če ne obstaja",
"clientKey": "Odjemalski ključ",
"clientCert": "Potrdilo odjemalca",
@ -310,6 +309,7 @@
"importExcel": "Uvoz Excel.",
"importCSV": "Import CSV",
"downloadCSV": "Prenesite kot CSV.",
"downloadExcel": "Prenesite kot XLSX.",
"uploadCSV": "Upload CSV.",
"import": "Uvozi",
"importMetadata": "Uvozi metapodatkov",
@ -413,7 +413,7 @@
"deleteProject": "Želite izbrisati projekt?",
"shareBasePrivate": "Ustvarite javno rasno redno osnovo",
"shareBasePublic": "Vsak na internetu s to povezavo lahko prikaže",
"userInviteNoSMTP": "Izgleda, da še niste konfigurirali pošiljatelja! Prosimo, kopirajte zgornjo povezavo in jo pošljite",
"userInviteNoSMTP": "Izgleda, da še niste konfigurirali pošiljatelja! n Prosimo, kopirajte zgornjo povezavo in jo pošljite",
"dragDropHide": "Povlecite in spustite polja, da se skrijete",
"formInput": "Vnesite nalepko vnosa obrazca",
"formHelpText": "Dodajte nekaj besedila pomoči",
@ -497,8 +497,7 @@
"emailReqd": "Potrebna je e-pošta",
"emailInvalid": "E-pošta mora biti veljavna",
"passwdRequired": "zahtevano je geslo",
"passwdLength": "Geslo mora biti vsaj 8 znakov",
"passwdMismatch": "geslo se ne ujema"
"passwdLength": "Geslo mora biti vsaj 8 znakov"
}
},
"toast": {

7
packages/nc-gui-v2/lang/sv.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL-utgång",
"addOption": "Lägg till alternativ",
"aggregateFunction": "Aggregatfunktion",
"database": "Databas",
"dbCreateIfNotExists": "Databas: Skapa om det inte finns",
"clientKey": "Klientnyckel",
"clientCert": "Klientcert",
@ -310,6 +309,7 @@
"importExcel": "Import excel",
"importCSV": "Import CSV",
"downloadCSV": "Hämta som CSV",
"downloadExcel": "Hämta som XLSX",
"uploadCSV": "Ladda upp CSV",
"import": "Importera",
"importMetadata": "Importera metadata",
@ -413,7 +413,7 @@
"deleteProject": "Vill du radera projektet?",
"shareBasePrivate": "Generera offentligt delbar readonly base",
"shareBasePublic": "Någon på internet med den här länken kan visa",
"userInviteNoSMTP": "Det verkar som om du inte har konfigurerat Mailer än! Vänligen kopiera ovanför bjudningslänk och skicka den till",
"userInviteNoSMTP": "Det verkar som om du inte har konfigurerat Mailer än!\nVänligen kopiera ovanför bjudningslänk och skicka den till",
"dragDropHide": "Dra och släpp fält här för att dölja",
"formInput": "Ange formulärinmatningslabel",
"formHelpText": "Lägg till lite hjälptext",
@ -497,8 +497,7 @@
"emailReqd": "E-post krävs",
"emailInvalid": "Email måste vara giltig",
"passwdRequired": "lösenord krävs",
"passwdLength": "Du lösenord måste vara minst 8 tecken",
"passwdMismatch": "Lösenorden matchar inte"
"passwdLength": "Du lösenord måste vara minst 8 tecken"
}
},
"toast": {

7
packages/nc-gui-v2/lang/th.json

@ -213,7 +213,6 @@
"sqlOutput": "เอาตต SQL",
"addOption": "เพมตวเลอก",
"aggregateFunction": "ฟงกนรวม",
"database": "ฐานขอมล",
"dbCreateIfNotExists": "ฐานขอมล: สรางถาไมอย",
"clientKey": "รหสลกคา",
"clientCert": "ใบรบรองลกคา",
@ -310,6 +309,7 @@
"importExcel": "นำเขา Excel",
"importCSV": "Import CSV",
"downloadCSV": "ดาวนโหลดเปน CSV",
"downloadExcel": "ดาวนโหลดเปน XLSX",
"uploadCSV": "อปโหลด CSV",
"import": "นำเขา",
"importMetadata": "เมทาดานำเขา",
@ -413,7 +413,7 @@
"deleteProject": "คณตองการลบโครงการหรอไม",
"shareBasePrivate": "สรางฐาน Readonly ทใชวมกนไดอยางเปดเผย",
"shareBasePublic": "ทกคนบนอนเทอรเนตดวยลงคสามารถดได",
"userInviteNoSMTP": "ดเหมอนวาคณยงไมไดกำหนดคาเมล! โปรดคดลอกลงกเชญดานบนและสงไปท",
"userInviteNoSMTP": "ดเหมอนวาคณยงไมไดกำหนดคาเมล!\nโปรดคดลอกลงกเชญดานบนและสงไปท",
"dragDropHide": "ลากและวางฟลดเพอซอน",
"formInput": "ปอนปายชออนพตแบบฟอรม",
"formHelpText": "เพมขอความชวยเหลอบางอยาง",
@ -497,8 +497,7 @@
"emailReqd": "จำเปนตองใชเมล",
"emailInvalid": "อเมลจะตองถกตอง",
"passwdRequired": "ตองการรหสผาน",
"passwdLength": "รหสผานของคณตองมกขระอยางนอย 8 ตว",
"passwdMismatch": "รหสผานไมตรงกน"
"passwdLength": "รหสผานของคณตองมกขระอยางนอย 8 ตว"
}
},
"toast": {

7
packages/nc-gui-v2/lang/tr.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL Çıktısı",
"addOption": "Seçenek ekle",
"aggregateFunction": "Birleştirme fonksiyonu",
"database": "Veritabanı",
"dbCreateIfNotExists": "Veritabanı : yoksa oluştur",
"clientKey": "Müşteri Anahtarı",
"clientCert": "Müşteri Sertifikası",
@ -310,6 +309,7 @@
"importExcel": "Excel'i içe aktar",
"importCSV": "Import CSV",
"downloadCSV": "CSV olarak indir",
"downloadExcel": "XLSX olarak indir",
"uploadCSV": "CSV yükle",
"import": "İçe aktar",
"importMetadata": "Meta verilerini içe aktar",
@ -413,7 +413,7 @@
"deleteProject": "Projeyi silmek istediğinize emin misiniz?",
"shareBasePrivate": "Herkese açık paylaşılabilir salt-okunur bağlantı",
"shareBasePublic": "Bu link ile internetteki herkes görüntüleyebilir",
"userInviteNoSMTP": "Henüz mail ayarları yapılmamış gibi görünüyor! Lütfen yukarıdaki davet linkini kopyalayın ve gönderin",
"userInviteNoSMTP": "Henüz mail ayarları yapılmamış gibi görünüyor! \\n Lütfen yukarıdaki davet linkini kopyalayın ve gönderin",
"dragDropHide": "Gizlemek için sütunları buraya sürükleyip bırakın",
"formInput": "Form girdi etiketini girin",
"formHelpText": "Yardım metni ekleyin",
@ -497,8 +497,7 @@
"emailReqd": "E-posta gerekli",
"emailInvalid": "E-posta geçerli olmalı",
"passwdRequired": "Şifre gerekli",
"passwdLength": "Şifreniz en az 8 karakter olmalıdır",
"passwdMismatch": "Parolalar uyuşmuyor"
"passwdLength": "Şifreniz en az 8 karakter olmalıdır"
}
},
"toast": {

7
packages/nc-gui-v2/lang/uk.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL Output",
"addOption": "Додайте опцію",
"aggregateFunction": "Сукупна функція",
"database": "База даних",
"dbCreateIfNotExists": "База даних: створити, якщо не існує",
"clientKey": "Клієнтський ключ",
"clientCert": "Клієнтський сертифікат",
@ -310,6 +309,7 @@
"importExcel": "Імпорт Excel",
"importCSV": "Import CSV",
"downloadCSV": "Завантажити як CSV",
"downloadExcel": "Завантажити як XLSX",
"uploadCSV": "Завантажити CSV",
"import": "Імпортувати",
"importMetadata": "Імпорт метаданих",
@ -413,7 +413,7 @@
"deleteProject": "Ви хочете видалити проект?",
"shareBasePrivate": "Генерувати загальнодоступну групою",
"shareBasePublic": "Будь-хто в Інтернеті за допомогою цього посилання може переглядати",
"userInviteNoSMTP": "Схоже, ви ще не налаштували Mailer! Будь ласка, скопіюйте вище посилання на запрошення і надішліть його",
"userInviteNoSMTP": "Схоже, ви ще не налаштували Mailer!\nБудь ласка, скопіюйте вище посилання на запрошення і надішліть його",
"dragDropHide": "Перетягніть поля тут, щоб приховати",
"formInput": "Введіть етикетку введення форми",
"formHelpText": "Додайте деякий текст довідки",
@ -497,8 +497,7 @@
"emailReqd": "Потрібна електронна пошта",
"emailInvalid": "Електронна пошта повинна бути дійсним",
"passwdRequired": "Необхідний пароль",
"passwdLength": "Пароль повинен бути принаймні 8 символів",
"passwdMismatch": "Паролі не співпадають"
"passwdLength": "Пароль повинен бути принаймні 8 символів"
}
},
"toast": {

7
packages/nc-gui-v2/lang/vi.json

@ -213,7 +213,6 @@
"sqlOutput": "Đầu ra SQL.",
"addOption": "Thêm tùy chọn",
"aggregateFunction": "Chức năng tổng hợp",
"database": "Cơ sở dữ liệu",
"dbCreateIfNotExists": "Cơ sở dữ liệu: Tạo nếu không tồn tại",
"clientKey": "Khóa khách",
"clientCert": "Chứng chỉ khách hàng.",
@ -310,6 +309,7 @@
"importExcel": "Nhập Excel.",
"importCSV": "Import CSV",
"downloadCSV": "Tải về dưới dạng CSV.",
"downloadExcel": "Tải về dưới dạng XLSX.",
"uploadCSV": "Tải lên CSV.",
"import": "Nhập khẩu",
"importMetadata": "Nhập siêu dữ liệu",
@ -413,7 +413,7 @@
"deleteProject": "Bạn có muốn xóa dự án?",
"shareBasePrivate": "Tạo cơ sở chỉ đọc chia sẻ công khai",
"shareBasePublic": "Bất cứ ai trên Internet với liên kết này có thể xem",
"userInviteNoSMTP": "Có vẻ như bạn chưa định cấu hình Mailer! Vui lòng sao chép liên kết mời trên và gửi nó đến",
"userInviteNoSMTP": "Có vẻ như bạn chưa định cấu hình Mailer!\nVui lòng sao chép liên kết mời trên và gửi nó đến",
"dragDropHide": "Kéo và thả các trường ở đây để ẩn",
"formInput": "Nhập nhãn đầu vào Mẫu",
"formHelpText": "Thêm một số văn bản trợ giúp",
@ -497,8 +497,7 @@
"emailReqd": "Email thì cần thiết",
"emailInvalid": "Email phải hợp lệ",
"passwdRequired": "Mật khẩu là bắt buộc",
"passwdLength": "Mật khẩu của bạn phải có ít nhất 8 ký tự",
"passwdMismatch": "mất khẩu không hợp lệ"
"passwdLength": "Mật khẩu của bạn phải có ít nhất 8 ký tự"
}
},
"toast": {

5
packages/nc-gui-v2/lang/zh_CN.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL输出",
"addOption": "添加选项",
"aggregateFunction": "汇总功能",
"database": "数据库",
"dbCreateIfNotExists": "数据库 : 如果不存在则创建",
"clientKey": "客户端 Key",
"clientCert": "客户端 Cert",
@ -310,6 +309,7 @@
"importExcel": "导入Excel",
"importCSV": "Import CSV",
"downloadCSV": "下载为CSV",
"downloadExcel": "下载为XLSX",
"uploadCSV": "上传CSV",
"import": "导入",
"importMetadata": "导入元数据",
@ -497,8 +497,7 @@
"emailReqd": "邮箱必填",
"emailInvalid": "邮箱格式无效",
"passwdRequired": "密码必填",
"passwdLength": "您的密码必须至少为8个字符",
"passwdMismatch": "密码不匹配"
"passwdLength": "您的密码必须至少为8个字符"
}
},
"toast": {

5
packages/nc-gui-v2/lang/zh_HK.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL輸出",
"addOption": "添加選項",
"aggregateFunction": "匯總功能",
"database": "數據庫",
"dbCreateIfNotExists": "數據庫:創建如果不存在",
"clientKey": "client條key",
"clientCert": "client張cert",
@ -310,6 +309,7 @@
"importExcel": "導入Excel.",
"importCSV": "Import CSV",
"downloadCSV": "下載為CSV.",
"downloadExcel": "下載為XLSX.",
"uploadCSV": "上傳CSV.",
"import": "導出去file",
"importMetadata": "import metadata",
@ -497,8 +497,7 @@
"emailReqd": "E-mail 必須填",
"emailInvalid": "E-mail 唔valid",
"passwdRequired": "密碼必須填",
"passwdLength": "你嗰密碼至少要8個字",
"passwdMismatch": "密碼不匹配"
"passwdLength": "你嗰密碼至少要8個字"
}
},
"toast": {

5
packages/nc-gui-v2/lang/zh_TW.json

@ -213,7 +213,6 @@
"sqlOutput": "SQL 輸出",
"addOption": "新增選項",
"aggregateFunction": "匯總功能",
"database": "數據庫",
"dbCreateIfNotExists": "資料庫:不存在則建立",
"clientKey": "用戶端金鑰",
"clientCert": "用戶端憑證",
@ -310,6 +309,7 @@
"importExcel": "匯入 Excel",
"importCSV": "匯入 CSV",
"downloadCSV": "下載為 CSV",
"downloadExcel": "下載為 XLSX",
"uploadCSV": "上傳 CSV",
"import": "匯入",
"importMetadata": "匯入中繼資料",
@ -497,8 +497,7 @@
"emailReqd": "電子信箱地址為必填",
"emailInvalid": "電子信箱地址格式錯誤",
"passwdRequired": "密碼為必填",
"passwdLength": "您的密碼應至少有 8 個字元",
"passwdMismatch": "密碼不匹配"
"passwdLength": "您的密碼應至少有 8 個字元"
}
},
"toast": {

2
packages/nc-gui-v2/utils/urlUtils.ts

@ -24,7 +24,7 @@ export const dashboardUrl = () => {
// ref : https://stackoverflow.com/a/5717133
export const isValidURL = (str: string) => {
const pattern =
/^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00A1-\uFFFF0-9]-*)*[a-z\u00A1-\uFFFF0-9]+)(?:\.(?:[a-z\u00A1-\uFFFF0-9]-*)*[a-z\u00A1-\uFFFF0-9]+)*(?:\.(?:[a-z\u00A1-\uFFFF]{2,}))\.?)(?::\d{2,5})?(?:[/?#]\S*)?$/i
/^(?:(?:https?|ftp):\/\/)?(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00A1-\uFFFF0-9]-*)*[a-z\u00A1-\uFFFF0-9]+)(?:\.(?:[a-z\u00A1-\uFFFF0-9]-*)*[a-z\u00A1-\uFFFF0-9]+)*(?:\.(?:[a-z\u00A1-\uFFFF]{2,}))\.?)(?::\d{2,5})?(?:[/?#]\S*)?$/i
return !!pattern.test(str)
}

52
packages/nocodb-sdk/src/lib/Api.ts

@ -11,13 +11,16 @@
export interface UserType {
/** Unique identifier for the given user. */
id: number;
id: string;
firstname: string;
lastname: string;
/** @format email */
email: string;
/** @format email */
roles?: string;
/**
* @format date
* @example 1997-10-31
@ -127,6 +130,7 @@ export interface ViewType {
order?: number;
fk_model_id?: string;
slug?: string;
show_system_fields?: boolean;
lock_type?: 'collaborative' | 'locked' | 'personal';
}
@ -382,13 +386,14 @@ export interface FormType {
title?: string;
heading?: string;
subheading?: string;
sucess_msg?: string;
success_msg?: string;
redirect_url?: string;
redirect_after_secs?: string;
email?: string;
banner_image_url?: string;
logo_url?: string;
submit_another_form?: boolean;
show_blank_form?: boolean;
columns?: FormColumnType[];
fk_model_id?: string;
lock_type?: 'collaborative' | 'locked' | 'personal';
@ -436,7 +441,7 @@ export interface SharedViewListType {
}
export interface ViewListType {
list?: GridType | FormType | KanbanType | GalleryType;
list?: ViewType[];
pageInfo?: PaginatedType;
}
@ -661,10 +666,7 @@ export interface FullRequestParams
body?: unknown;
}
export type RequestParams = Omit<
FullRequestParams,
'body' | 'method' | 'query' | 'path'
>;
export type RequestParams = Omit<FullRequestParams, 'body' | 'method' | 'path'>;
export interface ApiConfig<SecurityDataType = unknown>
extends Omit<AxiosRequestConfig, 'data' | 'cancelToken'> {
@ -1271,10 +1273,10 @@ export class Api<
* @tags Project
* @name SharedBaseGet
* @request GET:/api/v1/db/meta/projects/{projectId}/shared
* @response `200` `{ uuid?: string, url?: string }` OK
* @response `200` `{ uuid?: string, url?: string, roles?: string }` OK
*/
sharedBaseGet: (projectId: string, params: RequestParams = {}) =>
this.request<{ uuid?: string; url?: string }, any>({
this.request<{ uuid?: string; url?: string; roles?: string }, any>({
path: `/api/v1/db/meta/projects/${projectId}/shared`,
method: 'GET',
format: 'json',
@ -1302,14 +1304,14 @@ export class Api<
* @tags Project
* @name SharedBaseCreate
* @request POST:/api/v1/db/meta/projects/{projectId}/shared
* @response `200` `{ url?: string, uuid?: string }` OK
* @response `200` `{ uuid?: string, url?: string, roles?: string }` OK
*/
sharedBaseCreate: (
projectId: string,
data: { roles?: string; password?: string },
params: RequestParams = {}
) =>
this.request<{ url?: string; uuid?: string }, any>({
this.request<{ uuid?: string; url?: string; roles?: string }, any>({
path: `/api/v1/db/meta/projects/${projectId}/shared`,
method: 'POST',
body: data,
@ -1324,18 +1326,19 @@ export class Api<
* @tags Project
* @name SharedBaseUpdate
* @request PATCH:/api/v1/db/meta/projects/{projectId}/shared
* @response `200` `void` OK
* @response `200` `{ uuid?: string, url?: string, roles?: string }` OK
*/
sharedBaseUpdate: (
projectId: string,
data: { roles?: string; password?: string },
params: RequestParams = {}
) =>
this.request<void, any>({
this.request<{ uuid?: string; url?: string; roles?: string }, any>({
path: `/api/v1/db/meta/projects/${projectId}/shared`,
method: 'PATCH',
body: data,
type: ContentType.Json,
format: 'json',
...params,
}),
@ -1936,7 +1939,7 @@ export class Api<
*/
update: (
viewId: string,
data: { password?: string },
data: { password?: string; meta?: any },
params: RequestParams = {}
) =>
this.request<SharedViewType, any>({
@ -2024,10 +2027,10 @@ export class Api<
* @tags DB table sort
* @name List
* @request GET:/api/v1/db/meta/views/{viewId}/sorts
* @response `200` `{ uuid?: string, url?: string }` OK
* @response `200` `{ sorts?: { list?: (SortType)[] } }` OK
*/
list: (viewId: string, params: RequestParams = {}) =>
this.request<{ uuid?: string; url?: string }, any>({
this.request<{ sorts?: { list?: SortType[] } }, any>({
path: `/api/v1/db/meta/views/${viewId}/sorts`,
method: 'GET',
format: 'json',
@ -2122,14 +2125,15 @@ export class Api<
* @tags DB table filter
* @name Create
* @request POST:/api/v1/db/meta/views/{viewId}/filters
* @response `200` `void` OK
* @response `200` `FilterType` OK
*/
create: (viewId: string, data: FilterType, params: RequestParams = {}) =>
this.request<void, any>({
this.request<FilterType, any>({
path: `/api/v1/db/meta/views/${viewId}/filters`,
method: 'POST',
body: data,
type: ContentType.Json,
format: 'json',
...params,
}),
@ -2592,7 +2596,11 @@ export class Api<
rowId: string,
relationType: 'mm' | 'hm',
columnName: string,
query?: { limit?: string; offset?: string },
query?: {
limit?: string | number;
offset?: string | number;
where?: string;
},
params: RequestParams = {}
) =>
this.request<any, any>({
@ -2673,7 +2681,11 @@ export class Api<
rowId: string,
relationType: 'mm' | 'hm',
columnName: string,
query?: { limit?: string; offset?: string },
query?: {
limit?: string | number;
offset?: string | number;
where?: string;
},
params: RequestParams = {}
) =>
this.request<any, any>({

2
packages/nocodb/src/lib/models/User.ts

@ -4,7 +4,7 @@ import Noco from '../Noco';
import extractProps from '../meta/helpers/extractProps';
import NocoCache from '../cache/NocoCache';
export default class User implements UserType {
id: number;
id: string;
/** @format email */
email: string;

37
packages/nocodb/src/lib/models/View.ts

@ -551,9 +551,10 @@ export default class View implements ViewType {
show: boolean;
},
ncMeta = Noco.ncMeta
): Promise<Array<GridViewColumn | any>> {
): Promise<GridViewColumn | FormViewColumn | GalleryViewColumn | any> {
const view = await this.get(viewId);
const table = this.extractViewColumnsTableName(view);
console.log(table);
const existingCol = await ncMeta.metaGet2(null, null, table, {
fk_view_id: viewId,
@ -573,7 +574,39 @@ export default class View implements ViewType {
);
return { ...existingCol, ...colData };
} else {
return await ncMeta.metaInsert2(null, null, table, {
switch (view.type) {
case ViewTypes.GRID:
return await GridViewColumn.insert({
fk_view_id: viewId,
fk_column_id: fkColId,
order: colData.order,
show: colData.show,
});
case ViewTypes.GALLERY:
return await GalleryViewColumn.insert({
fk_view_id: viewId,
fk_column_id: fkColId,
order: colData.order,
show: colData.show,
});
case ViewTypes.KANBAN:
// TODO: Use the following when KanbanViewColumn is ready to avoid cache issue
// return await KanbanViewColumn.insert({
// fk_view_id: viewId,
// fk_column_id: fkColId,
// order: colData.order,
// show: colData.show,
// });
break;
case ViewTypes.FORM:
return await FormViewColumn.insert({
fk_view_id: viewId,
fk_column_id: fkColId,
order: colData.order,
show: colData.show,
});
}
return await ncMeta.metaInsert2(view.project_id, view.base_id, table, {
fk_view_id: viewId,
fk_column_id: fkColId,
order: colData.order,

123
scripts/sdk/swagger.json

@ -916,6 +916,9 @@
},
"url": {
"type": "string"
},
"roles": {
"type": "string"
}
}
}
@ -947,10 +950,13 @@
"schema": {
"type": "object",
"properties": {
"uuid": {
"type": "string"
},
"url": {
"type": "string"
},
"uuid": {
"roles": {
"type": "string"
}
}
@ -985,7 +991,25 @@
"operationId": "project-shared-base-update",
"responses": {
"200": {
"description": "OK"
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"uuid": {
"type": "string"
},
"url": {
"type": "string"
},
"roles": {
"type": "string"
}
}
}
}
}
}
},
"requestBody": {
@ -1703,7 +1727,8 @@
"properties": {
"password": {
"type": "string"
}
},
"meta": {}
}
}
}
@ -1828,11 +1853,16 @@
"schema": {
"type": "object",
"properties": {
"uuid": {
"type": "string"
},
"url": {
"type": "string"
"sorts": {
"type": "object",
"properties": {
"list": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Sort"
}
}
}
}
}
}
@ -1968,7 +1998,14 @@
"operationId": "db-table-filter-create",
"responses": {
"200": {
"description": "OK"
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Filter"
}
}
}
}
},
"tags": [
@ -3808,17 +3845,30 @@
"parameters": [
{
"schema": {
"type": "string"
"type": [
"string",
"number"
]
},
"in": "query",
"name": "limit"
},
{
"schema": {
"type": "string"
"type": [
"string",
"number"
]
},
"in": "query",
"name": "offset"
},
{
"schema": {
"type": "string"
},
"in": "query",
"name": "where"
}
]
}
@ -4012,17 +4062,30 @@
"parameters": [
{
"schema": {
"type": "string"
"type": [
"string",
"number"
]
},
"in": "query",
"name": "limit"
},
{
"schema": {
"type": "string"
"type": [
"string",
"number"
]
},
"in": "query",
"name": "offset"
},
{
"schema": {
"type": "string"
},
"in": "query",
"name": "where"
}
]
}
@ -5444,7 +5507,7 @@
"description": "",
"examples": [
{
"id": 142,
"id": "142",
"firstName": "Alice",
"lastName": "Smith",
"email": "alice.smith@gmail.com",
@ -5456,7 +5519,7 @@
"x-internal": false,
"properties": {
"id": {
"type": "integer",
"type": "string",
"description": "Unique identifier for the given user."
},
"firstname": {
@ -5469,6 +5532,10 @@
"type": "string",
"format": "email"
},
"roles": {
"type": "string",
"format": "email"
},
"date_of_birth": {
"type": "string",
"format": "date",
@ -6026,6 +6093,9 @@
"slug": {
"type": "string"
},
"show_system_fields": {
"type": "boolean"
},
"lock_type": {
"type": "string",
"enum": [
@ -7079,7 +7149,7 @@
"subheading": {
"type": "string"
},
"sucess_msg": {
"success_msg": {
"type": "string"
},
"redirect_url": {
@ -7100,6 +7170,9 @@
"submit_another_form": {
"type": "boolean"
},
"show_blank_form": {
"type": "boolean"
},
"columns": {
"type": "array",
"items": {
@ -7356,20 +7429,10 @@
},
"properties": {
"list": {
"oneOf": [
{
"$ref": "#/components/schemas/Grid"
},
{
"$ref": "#/components/schemas/Form"
},
{
"$ref": "#/components/schemas/Kanban"
},
{
"$ref": "#/components/schemas/Gallery"
}
]
"type": "array",
"items": {
"$ref": "#/components/schemas/View"
}
},
"pageInfo": {
"$ref": "#/components/schemas/Paginated"

2
scripts/sdk/templates/http-clients/axios-http-client.eta

@ -23,7 +23,7 @@ export interface FullRequestParams extends Omit<AxiosRequestConfig, "data" | "pa
body?: unknown;
}
export type RequestParams = Omit<FullRequestParams, "body" | "method" | "query" | "path">;
export type RequestParams = Omit<FullRequestParams, "body" | "method" | "path">;
export interface ApiConfig<SecurityDataType = unknown> extends Omit<AxiosRequestConfig, "data" | "cancelToken"> {
securityWorker?: (securityData: SecurityDataType | null) => Promise<AxiosRequestConfig | void> | AxiosRequestConfig | void;

4
scripts/sdk/templates/http-clients/fetch-http-client.eta

@ -24,7 +24,7 @@ export interface FullRequestParams extends Omit<RequestInit, "body"> {
cancelToken?: CancelToken;
}
export type RequestParams = Omit<FullRequestParams, "body" | "method" | "query" | "path">
export type RequestParams = Omit<FullRequestParams, "body" | "method" | "path">
export interface ApiConfig<SecurityDataType = unknown> {
@ -68,7 +68,7 @@ export class HttpClient<SecurityDataType = unknown> {
public setSecurityData = (data: SecurityDataType | null) => {
this.securityData = data;
}
private encodeQueryParam(key: string, value: any) {
const encodedKey = encodeURIComponent(key);
return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`;

Loading…
Cancel
Save