Browse Source

Merge pull request #8755 from nocodb/develop

pull/8756/head 0.250.2
github-actions[bot] 4 months ago committed by GitHub
parent
commit
ee3084252e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 4
      packages/nc-gui/components/dlg/ViewCreate.vue
  2. 22
      packages/nc-gui/components/erd/View.vue
  3. 4
      packages/nc-gui/components/nc/Checkbox.vue
  4. 8
      packages/nc-gui/components/shared-view/AskPassword.vue
  5. 4
      packages/nc-gui/components/smartsheet/Form.vue
  6. 1
      packages/nc-gui/components/smartsheet/Kanban.vue
  7. 2
      packages/nc-gui/components/smartsheet/column/AttachmentOptions.vue
  8. 20
      packages/nc-gui/components/smartsheet/column/BarcodeOptions.vue
  9. 10
      packages/nc-gui/components/smartsheet/column/CheckboxOptions.vue
  10. 7
      packages/nc-gui/components/smartsheet/column/CurrencyOptions.vue
  11. 9
      packages/nc-gui/components/smartsheet/column/DateOptions.vue
  12. 18
      packages/nc-gui/components/smartsheet/column/DateTimeOptions.vue
  13. 5
      packages/nc-gui/components/smartsheet/column/DecimalOptions.vue
  14. 6
      packages/nc-gui/components/smartsheet/column/DurationOptions.vue
  15. 6
      packages/nc-gui/components/smartsheet/column/EditOrAdd.vue
  16. 2
      packages/nc-gui/components/smartsheet/column/LinkOptions.vue
  17. 4
      packages/nc-gui/components/smartsheet/column/NumberOptions.vue
  18. 6
      packages/nc-gui/components/smartsheet/column/PercentOptions.vue
  19. 36
      packages/nc-gui/components/smartsheet/column/RatingOptions.vue
  20. 4
      packages/nc-gui/components/smartsheet/column/TimeOptions.vue
  21. 7
      packages/nc-gui/components/smartsheet/column/UserOptions.vue
  22. 45
      packages/nc-gui/components/smartsheet/details/Fields.vue
  23. 2
      packages/nc-gui/components/smartsheet/expanded-form/Comments.vue
  24. 14
      packages/nc-gui/components/smartsheet/grid/useColumnDrag.ts
  25. 4
      packages/nc-gui/components/smartsheet/toolbar/ColumnFilter.vue
  26. 6
      packages/nc-gui/composables/useAttachment.ts
  27. 45
      packages/nc-gui/composables/useDebounceFnCached.ts
  28. 152
      packages/nc-gui/composables/useViewFilters.ts
  29. 2
      packages/nc-gui/composables/useViewGroupBy.ts
  30. 119
      packages/nc-gui/helpers/columnDefaultMeta.ts
  31. 19
      packages/nc-gui/lang/ar.json
  32. 19
      packages/nc-gui/lang/bn_IN.json
  33. 19
      packages/nc-gui/lang/cs.json
  34. 19
      packages/nc-gui/lang/da.json
  35. 19
      packages/nc-gui/lang/de.json
  36. 27
      packages/nc-gui/lang/es.json
  37. 19
      packages/nc-gui/lang/eu.json
  38. 19
      packages/nc-gui/lang/fa.json
  39. 19
      packages/nc-gui/lang/fi.json
  40. 23
      packages/nc-gui/lang/fr.json
  41. 19
      packages/nc-gui/lang/he.json
  42. 19
      packages/nc-gui/lang/hi.json
  43. 19
      packages/nc-gui/lang/hr.json
  44. 19
      packages/nc-gui/lang/id.json
  45. 25
      packages/nc-gui/lang/it.json
  46. 19
      packages/nc-gui/lang/ja.json
  47. 21
      packages/nc-gui/lang/ko.json
  48. 19
      packages/nc-gui/lang/lv.json
  49. 19
      packages/nc-gui/lang/nl.json
  50. 19
      packages/nc-gui/lang/no.json
  51. 63
      packages/nc-gui/lang/pl.json
  52. 19
      packages/nc-gui/lang/pt.json
  53. 19
      packages/nc-gui/lang/pt_BR.json
  54. 23
      packages/nc-gui/lang/ru.json
  55. 19
      packages/nc-gui/lang/sk.json
  56. 19
      packages/nc-gui/lang/sl.json
  57. 19
      packages/nc-gui/lang/sv.json
  58. 19
      packages/nc-gui/lang/th.json
  59. 19
      packages/nc-gui/lang/tr.json
  60. 19
      packages/nc-gui/lang/uk.json
  61. 19
      packages/nc-gui/lang/vi.json
  62. 21
      packages/nc-gui/lang/zh-Hans.json
  63. 19
      packages/nc-gui/lang/zh-Hant.json
  64. 2
      packages/nc-gui/package.json
  65. 3
      packages/noco-docs/docs/080.records/030.expand-record.md
  66. 2
      packages/nocodb/package.json
  67. 21
      packages/nocodb/src/db/BaseModelSqlv2.ts
  68. 4
      packages/nocodb/src/helpers/catchError.ts
  69. 29
      packages/nocodb/src/meta/meta.service.ts
  70. 15
      packages/nocodb/src/models/BaseUser.ts
  71. 2
      packages/nocodb/src/models/KanbanView.ts
  72. 2
      packages/nocodb/src/models/Model.ts
  73. 15
      packages/nocodb/src/models/SyncSource.ts
  74. 3
      packages/nocodb/src/modules/jobs/jobs/export-import/export.service.ts
  75. 6
      packages/nocodb/src/modules/jobs/jobs/export-import/import.service.ts
  76. 2
      packages/nocodb/src/services/columns.service.ts
  77. 6
      packages/nocodb/src/services/org-users.service.ts
  78. 4
      pnpm-lock.yaml
  79. 3
      tests/playwright/pages/Dashboard/Details/FieldsPage.ts

4
packages/nc-gui/components/dlg/ViewCreate.vue

@ -13,7 +13,7 @@ interface Props {
groupingFieldColumnId?: string groupingFieldColumnId?: string
geoDataFieldColumnId?: string geoDataFieldColumnId?: string
tableId: string tableId: string
calendarRange: Array<{ calendarRange?: Array<{
fk_from_column_id: string fk_from_column_id: string
fk_to_column_id: string | null // for ee only fk_to_column_id: string | null // for ee only
}> }>
@ -36,7 +36,7 @@ interface Form {
// for calendar view only // for calendar view only
calendar_range: Array<{ calendar_range: Array<{
fk_from_column_id: string fk_from_column_id: string
fk_to_column_id: string | undefined // for ee only fk_to_column_id: string | null // for ee only
}> }>
} }

22
packages/nc-gui/components/erd/View.vue

@ -45,14 +45,26 @@ const config = reactive<ERDConfig>({
isFullScreen: false, isFullScreen: false,
}) })
const loadMetaOfTablesNotInMetas = async (localTables: TableType[]) => { const fetchMissingTableMetas = async (localTables: TableType[]) => {
const chunkSize = 5
// Function to process a chunk of tables
const processChunk = async (chunk: TableType[]) => {
await Promise.all( await Promise.all(
localTables chunk.map(async (table) => {
.filter((table) => !metas.value[table.id!])
.map(async (table) => {
await getMeta(table.id!) await getMeta(table.id!)
}), }),
) )
}
// filter out tables that are already loaded and are not from the same source
const filteredTables = localTables.filter((t) => !metas.value[t.id!] && t.source_id === props.sourceId)
// Split the tables into chunks and process each chunk sequentially to avoid hitting throttling limits
for (let i = 0; i < filteredTables.length; i += chunkSize) {
const chunk = filteredTables.slice(i, i + chunkSize)
await processChunk(chunk)
}
} }
const populateTables = async () => { const populateTables = async () => {
@ -73,7 +85,7 @@ const populateTables = async () => {
localTables = baseTables.value localTables = baseTables.value
} }
await loadMetaOfTablesNotInMetas(localTables) await fetchMissingTableMetas(localTables)
tables.value = localTables tables.value = localTables
.filter( .filter(

4
packages/nc-gui/components/nc/Checkbox.vue

@ -1,6 +1,6 @@
<script lang="ts" setup> <script lang="ts" setup>
interface Props { interface Props {
checked: boolean checked?: boolean
size?: 'small' | 'default' | 'large' size?: 'small' | 'default' | 'large'
disabled?: boolean disabled?: boolean
} }
@ -15,7 +15,7 @@ const emit = defineEmits(['change', 'update:checked'])
const checked = useVModel(props, 'checked', emit) const checked = useVModel(props, 'checked', emit)
const onChange = (e: Event) => { const onChange = (e: Event) => {
emit('change', e, checked.value) emit('change', e, (e.target as HTMLInputElement).checked)
} }
</script> </script>

8
packages/nc-gui/components/shared-view/AskPassword.vue

@ -44,13 +44,6 @@ const focus: VNodeRef = (el: typeof InputPassword) => {
return el && el?.focus?.() return el && el?.focus?.()
} }
watch(
() => formState.value.password,
() => {
passwordError.value = null
},
)
const bgImageName = computed(() => { const bgImageName = computed(() => {
switch (props.viewType) { switch (props.viewType) {
case ViewTypes.GRID: case ViewTypes.GRID:
@ -97,6 +90,7 @@ const bgImageName = computed(() => {
class="!rounded-lg !text-small" class="!rounded-lg !text-small"
hide-details hide-details
:placeholder="$t('msg.enterPassword')" :placeholder="$t('msg.enterPassword')"
@input="passwordError = null"
/> />
<Transition name="layout"> <Transition name="layout">
<div v-if="passwordError" class="mb-2 text-sm text-red-500">{{ passwordError }}</div> <div v-if="passwordError" class="mb-2 text-sm text-red-500">{{ passwordError }}</div>

4
packages/nc-gui/components/smartsheet/Form.vue

@ -969,7 +969,7 @@ useEventListener(
:bordered="false" :bordered="false"
:data-testid="NcForm.heading" :data-testid="NcForm.heading"
:data-title="NcForm.heading" :data-title="NcForm.heading"
@update:value="updateView" @input="updateView"
@focus="activeRow = NcForm.heading" @focus="activeRow = NcForm.heading"
@blur="activeRow = ''" @blur="activeRow = ''"
/> />
@ -1280,7 +1280,7 @@ useEventListener(
:placeholder="$t('msg.info.formInput')" :placeholder="$t('msg.info.formInput')"
@focus="onFocusActiveFieldLabel" @focus="onFocusActiveFieldLabel"
@keydown.enter.prevent @keydown.enter.prevent
@update:value="updateFieldTitle" @input="updateFieldTitle($event.target.value)"
@change="updateColMeta(activeField)" @change="updateColMeta(activeField)"
/> />

1
packages/nc-gui/components/smartsheet/Kanban.vue

@ -113,7 +113,6 @@ const kanbanContainerRef = ref()
const selectedStackTitle = ref('') const selectedStackTitle = ref('')
reloadViewDataHook?.on(async () => { reloadViewDataHook?.on(async () => {
console.log('load')
await loadKanbanMeta() await loadKanbanMeta()
await loadKanbanData() await loadKanbanData()
}) })

2
packages/nc-gui/components/smartsheet/column/AttachmentOptions.vue

@ -33,7 +33,7 @@ vModel.value.meta = {
// allow all mime types by default // allow all mime types by default
supportedAttachmentMimeTypes: ['*'], supportedAttachmentMimeTypes: ['*'],
}), }),
...vModel.value.meta, ...(vModel.value.meta || {}),
} }
const expandedKeys = ref<(string | number)[]>([]) const expandedKeys = ref<(string | number)[]>([])

20
packages/nc-gui/components/smartsheet/column/BarcodeOptions.vue

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import type { ColumnType, UITypes } from 'nocodb-sdk' import { type ColumnType, UITypes } from 'nocodb-sdk'
import { AllowedColumnTypesForQrAndBarcodes, isVirtualCol } from 'nocodb-sdk' import { AllowedColumnTypesForQrAndBarcodes, isVirtualCol } from 'nocodb-sdk'
const props = defineProps<{ const props = defineProps<{
@ -29,25 +29,11 @@ const columnsAllowedAsBarcodeValue = computed<ColumnType[]>(() => {
) )
}) })
const supportedBarcodeFormats = [
{ value: 'CODE128', label: 'CODE128' },
{ value: 'upc', label: 'UPC' },
{ value: 'EAN13', label: 'EAN-13' },
{ value: 'EAN8', label: 'EAN-8' },
{ value: 'EAN5', label: 'EAN-5' },
{ value: 'EAN2', label: 'EAN-2' },
{ value: 'CODE39', label: 'CODE39' },
{ value: 'ITF14', label: 'ITF-14' },
{ value: 'MSI', label: 'MSI' },
{ value: 'PHARMACODE', label: 'PHARMACODE' },
{ value: 'CODABAR', label: 'CODABAR' },
]
onMounted(() => { onMounted(() => {
// set default value // set default value
vModel.value.meta = { vModel.value.meta = {
barcodeFormat: supportedBarcodeFormats[0].value, ...columnDefaultMeta[UITypes.Barcode],
...vModel.value.meta, ...(vModel.value.meta || {}),
} }
vModel.value.fk_barcode_value_column_id = vModel.value.fk_barcode_value_column_id =
(column?.value?.colOptions as Record<string, any>)?.fk_barcode_value_column_id || columnsAllowedAsBarcodeValue.value?.[0]?.id (column?.value?.colOptions as Record<string, any>)?.fk_barcode_value_column_id || columnsAllowedAsBarcodeValue.value?.[0]?.id

10
packages/nc-gui/components/smartsheet/column/CheckboxOptions.vue

@ -1,4 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { UITypes } from 'nocodb-sdk'
const props = defineProps<{ const props = defineProps<{
value: any value: any
}>() }>()
@ -50,12 +52,8 @@ const isOpenColorPicker = ref(false)
// set default value // set default value
vModel.value.meta = { vModel.value.meta = {
icon: { ...columnDefaultMeta[UITypes.Checkbox],
checked: 'mdi-check-bold', ...(vModel.value.meta || {}),
unchecked: 'mdi-crop-square',
},
color: '#777',
...vModel.value.meta,
} }
// antdv doesn't support object as value // antdv doesn't support object as value

7
packages/nc-gui/components/smartsheet/column/CurrencyOptions.vue

@ -1,4 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { UITypes } from 'nocodb-sdk'
interface Option { interface Option {
label: string label: string
value: string value: string
@ -64,9 +66,8 @@ function filterOption(input: string, option: Option) {
// set default value // set default value
vModel.value.meta = { vModel.value.meta = {
currency_locale: 'en-US', ...columnDefaultMeta[UITypes.Currency],
currency_code: 'USD', ...(vModel.value.meta || {}),
...vModel.value.meta,
} }
currencyLocales().then((locales) => { currencyLocales().then((locales) => {

9
packages/nc-gui/components/smartsheet/column/DateOptions.vue

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { dateFormats, dateMonthFormats } from 'nocodb-sdk' import { UITypes, dateFormats, dateMonthFormats } from 'nocodb-sdk'
const props = defineProps<{ const props = defineProps<{
value: any value: any
@ -9,9 +9,10 @@ const emit = defineEmits(['update:value'])
const vModel = useVModel(props, 'value', emit) const vModel = useVModel(props, 'value', emit)
if (!vModel.value.meta?.date_format) { // set default value
if (!vModel.value.meta) vModel.value.meta = {} vModel.value.meta = {
vModel.value.meta.date_format = dateFormats[0] ...columnDefaultMeta[UITypes.Date],
...(vModel.value.meta || {}),
} }
</script> </script>

18
packages/nc-gui/components/smartsheet/column/DateTimeOptions.vue

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { dateFormats, timeFormats } from 'nocodb-sdk' import { UITypes, dateFormats, timeFormats } from 'nocodb-sdk'
const props = defineProps<{ const props = defineProps<{
value: any value: any
@ -9,18 +9,10 @@ const emit = defineEmits(['update:value'])
const vModel = useVModel(props, 'value', emit) const vModel = useVModel(props, 'value', emit)
if (!vModel.value.meta?.date_format) { // set default value
if (!vModel.value.meta) vModel.value.meta = {} vModel.value.meta = {
vModel.value.meta.date_format = dateFormats[0] ...columnDefaultMeta[UITypes.DateTime],
} ...(vModel.value.meta || {}),
if (!vModel.value.meta?.time_format) {
if (!vModel.value.meta) vModel.value.meta = {}
vModel.value.meta.time_format = timeFormats[0]
}
if (vModel.value.meta?.is12hrFormat === undefined) {
if (!vModel.value.meta) vModel.value.meta = {}
vModel.value.meta.is12hrFormat = false
} }
</script> </script>

5
packages/nc-gui/components/smartsheet/column/DecimalOptions.vue

@ -1,4 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { UITypes } from 'nocodb-sdk'
const props = defineProps<{ const props = defineProps<{
value: any value: any
}>() }>()
@ -24,8 +26,7 @@ const vModel = useVModel(props, 'value', emit)
// set default value // set default value
vModel.value.meta = { vModel.value.meta = {
precision: precisionFormats[0], ...columnDefaultMeta[UITypes.Decimal],
isLocaleString: false,
...(vModel.value.meta || {}), ...(vModel.value.meta || {}),
} }

6
packages/nc-gui/components/smartsheet/column/DurationOptions.vue

@ -1,4 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { UITypes } from 'nocodb-sdk'
const props = defineProps<{ const props = defineProps<{
value: any value: any
}>() }>()
@ -16,8 +18,8 @@ const durationOptionList =
// set default value // set default value
vModel.value.meta = { vModel.value.meta = {
duration: 0, ...columnDefaultMeta[UITypes.Duration],
...vModel.value.meta, ...(vModel.value.meta || {}),
} }
</script> </script>

6
packages/nc-gui/components/smartsheet/column/EditOrAdd.vue

@ -115,12 +115,13 @@ const showDeprecated = ref(false)
const isSystemField = (t: { name: UITypes }) => const isSystemField = (t: { name: UITypes }) =>
[UITypes.CreatedBy, UITypes.CreatedTime, UITypes.LastModifiedBy, UITypes.LastModifiedTime].includes(t.name) [UITypes.CreatedBy, UITypes.CreatedTime, UITypes.LastModifiedBy, UITypes.LastModifiedTime].includes(t.name)
const uiFilters = (t: { name: UITypes; virtual?: number }) => { const uiFilters = (t: { name: UITypes; virtual?: number; deprecated?: boolean }) => {
const systemFiledNotEdited = !isSystemField(t) || formState.value.uidt === t.name || !isEdit.value const systemFiledNotEdited = !isSystemField(t) || formState.value.uidt === t.name || !isEdit.value
const geoDataToggle = geoDataToggleCondition(t) && (!isEdit.value || !t.virtual || t.name === formState.value.uidt) const geoDataToggle = geoDataToggleCondition(t) && (!isEdit.value || !t.virtual || t.name === formState.value.uidt)
const specificDBType = t.name === UITypes.SpecificDBType && isXcdbBase(meta.value?.source_id) const specificDBType = t.name === UITypes.SpecificDBType && isXcdbBase(meta.value?.source_id)
const showDeprecatedField = !t.deprecated || showDeprecated.value
return systemFiledNotEdited && geoDataToggle && !specificDBType return systemFiledNotEdited && geoDataToggle && !specificDBType && showDeprecatedField
} }
const uiTypesOptions = computed<typeof uiTypes>(() => { const uiTypesOptions = computed<typeof uiTypes>(() => {
@ -329,7 +330,6 @@ const filterOption = (input: string, option: { value: UITypes }) => {
'w-[384px]': !props.embedMode, 'w-[384px]': !props.embedMode,
'min-w-500px': formState.uidt === UITypes.LinkToAnotherRecord || formState.uidt === UITypes.Links, 'min-w-500px': formState.uidt === UITypes.LinkToAnotherRecord || formState.uidt === UITypes.Links,
'!w-116 overflow-visible': formState.uidt === UITypes.Formula && !props.embedMode, '!w-116 overflow-visible': formState.uidt === UITypes.Formula && !props.embedMode,
'!w-[500px]': formState.uidt === UITypes.Attachment && !props.embedMode && !appInfo.ee,
'!w-[600px]': formState.uidt === UITypes.LinkToAnotherRecord || formState.uidt === UITypes.Links, '!w-[600px]': formState.uidt === UITypes.LinkToAnotherRecord || formState.uidt === UITypes.Links,
'shadow-lg border-1 border-gray-200 shadow-gray-300 rounded-xl p-5': !embedMode, 'shadow-lg border-1 border-gray-200 shadow-gray-300 rounded-xl p-5': !embedMode,
}" }"

2
packages/nc-gui/components/smartsheet/column/LinkOptions.vue

@ -44,7 +44,7 @@ setAdditionalValidations({
vModel.value.meta = { vModel.value.meta = {
singular: '', singular: '',
plural: '', plural: '',
...vModel.value.meta, ...(vModel.value.meta || {}),
} }
</script> </script>

4
packages/nc-gui/components/smartsheet/column/NumberOptions.vue

@ -1,4 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { UITypes } from 'nocodb-sdk'
const props = defineProps<{ const props = defineProps<{
value: any value: any
}>() }>()
@ -9,7 +11,7 @@ const vModel = useVModel(props, 'value', emit)
// set default value // set default value
vModel.value.meta = { vModel.value.meta = {
isLocaleString: false, ...columnDefaultMeta[UITypes.Number],
...(vModel.value.meta || {}), ...(vModel.value.meta || {}),
} }
</script> </script>

6
packages/nc-gui/components/smartsheet/column/PercentOptions.vue

@ -1,4 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { UITypes } from 'nocodb-sdk'
const props = defineProps<{ const props = defineProps<{
value: any value: any
isEdit?: boolean isEdit?: boolean
@ -18,8 +20,8 @@ setAdditionalValidations({
// set default value // set default value
vModel.value.meta = { vModel.value.meta = {
is_progress: false, ...columnDefaultMeta[UITypes.Percent],
...vModel.value.meta, ...(vModel.value.meta || {}),
} }
</script> </script>

36
packages/nc-gui/components/smartsheet/column/RatingOptions.vue

@ -1,4 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { UITypes } from 'nocodb-sdk'
const props = defineProps<{ const props = defineProps<{
value: any value: any
}>() }>()
@ -7,30 +9,6 @@ const emit = defineEmits(['update:value'])
const vModel = useVModel(props, 'value', emit) const vModel = useVModel(props, 'value', emit)
// cater existing v1 cases
const iconList = [
{
full: 'mdi-star',
empty: 'mdi-star-outline',
},
{
full: 'mdi-heart',
empty: 'mdi-heart-outline',
},
{
full: 'mdi-moon-full',
empty: 'mdi-moon-new',
},
{
full: 'mdi-thumb-up',
empty: 'mdi-thumb-up-outline',
},
{
full: 'mdi-flag',
empty: 'mdi-flag-outline',
},
]
const picked = computed({ const picked = computed({
get: () => vModel.value.meta.color, get: () => vModel.value.meta.color,
set: (val) => { set: (val) => {
@ -42,14 +20,8 @@ const isOpenColorPicker = ref(false)
// set default value // set default value
vModel.value.meta = { vModel.value.meta = {
iconIdx: 0, ...columnDefaultMeta[UITypes.Rating],
icon: { ...(vModel.value.meta || {}),
full: 'mdi-star',
empty: 'mdi-star-outline',
},
color: '#fcb401',
max: 5,
...vModel.value.meta,
} }
// antdv doesn't support object as value // antdv doesn't support object as value

4
packages/nc-gui/components/smartsheet/column/TimeOptions.vue

@ -1,4 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { UITypes } from 'nocodb-sdk'
const props = defineProps<{ const props = defineProps<{
value: any value: any
}>() }>()
@ -9,7 +11,7 @@ const vModel = useVModel(props, 'value', emit)
// set default value // set default value
vModel.value.meta = { vModel.value.meta = {
is12hrFormat: false, ...columnDefaultMeta[UITypes.Time],
...(vModel.value.meta ?? {}), ...(vModel.value.meta ?? {}),
} }
</script> </script>

7
packages/nc-gui/components/smartsheet/column/UserOptions.vue

@ -1,4 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { UITypes } from 'nocodb-sdk'
const props = defineProps<{ const props = defineProps<{
value: any value: any
isEdit: boolean isEdit: boolean
@ -22,9 +24,8 @@ setAdditionalValidations({
// set default value // set default value
vModel.value.meta = { vModel.value.meta = {
is_multi: false, ...columnDefaultMeta[UITypes.User],
notify: false, ...(vModel.value.meta || {}),
...vModel.value.meta,
} }
onMounted(() => { onMounted(() => {

45
packages/nc-gui/components/smartsheet/details/Fields.vue

@ -46,6 +46,8 @@ const isLocked = inject(IsLockedInj, ref(false))
const { openedViewsTab } = storeToRefs(useViewsStore()) const { openedViewsTab } = storeToRefs(useViewsStore())
const localMetaColumns = ref<ColumnType[] | undefined>([])
const moveOps = ref<moveOp[]>([]) const moveOps = ref<moveOp[]>([])
const visibilityOps = ref<fieldsVisibilityOps[]>([]) const visibilityOps = ref<fieldsVisibilityOps[]>([])
@ -99,7 +101,7 @@ const getFieldOrder = (field?: TableExplorerColumn) => {
const fields = computed<TableExplorerColumn[]>({ const fields = computed<TableExplorerColumn[]>({
get: () => { get: () => {
const x = ((meta.value?.columns as ColumnType[]) ?? []) const x = ((localMetaColumns.value as ColumnType[]) ?? [])
.filter((field) => !field.fk_column_id && !isSystemColumn(field)) .filter((field) => !field.fk_column_id && !isSystemColumn(field))
.concat(newFields.value) .concat(newFields.value)
.map((field) => updateDefaultColumnValues(field)) .map((field) => updateDefaultColumnValues(field))
@ -109,7 +111,7 @@ const fields = computed<TableExplorerColumn[]>({
return x return x
}, },
set: (val) => { set: (val) => {
meta.value!.columns = meta.value?.columns?.map((col) => { localMetaColumns.value = localMetaColumns.value?.map((col) => {
const field = val.find((f) => compareCols(f, col)) const field = val.find((f) => compareCols(f, col))
if (field) { if (field) {
return field return field
@ -217,15 +219,15 @@ const addField = (field?: TableExplorerColumn, before = false) => {
} }
const displayColumn = computed(() => { const displayColumn = computed(() => {
if (!meta.value?.columns) return if (!localMetaColumns.value) return
return meta.value?.columns.find((col) => col.pv) return localMetaColumns.value.find((col) => col.pv)
}) })
const duplicateField = async (field: TableExplorerColumn) => { const duplicateField = async (field: TableExplorerColumn) => {
if (!meta.value?.columns) return if (!localMetaColumns.value) return
// generate duplicate column name // generate duplicate column name
const duplicateColumnName = getUniqueColumnName(`${field.title}_copy`, meta.value?.columns) const duplicateColumnName = getUniqueColumnName(`${field.title}_copy`, localMetaColumns.value)
let fieldPayload = {} let fieldPayload = {}
@ -306,7 +308,12 @@ const onFieldUpdate = (state: TableExplorerColumn, skipLinkChecks = false) => {
} }
} }
const diffs = diff(col, state) as Partial<TableExplorerColumn> const pdiffs: Record<string, any> = diff(col, state)
// remove undefined values
const diffs = Object.fromEntries(
Object.entries(pdiffs).filter(([_, value]) => value !== undefined),
) as Partial<TableExplorerColumn>
if (Object.keys(diffs).length === 0 || (Object.keys(diffs).length === 1 && 'altered' in diffs)) { if (Object.keys(diffs).length === 0 || (Object.keys(diffs).length === 1 && 'altered' in diffs)) {
ops.value = ops.value.filter((op) => op.op === 'add' || !compareCols(op.column, state)) ops.value = ops.value.filter((op) => op.op === 'add' || !compareCols(op.column, state))
@ -604,6 +611,21 @@ const clearChanges = () => {
const isColumnsValid = computed(() => fields.value.every((f) => isColumnValid(f))) const isColumnsValid = computed(() => fields.value.every((f) => isColumnValid(f)))
const metaToLocal = () => {
localMetaColumns.value = meta.value?.columns?.map((c: ColumnType) => {
if (c.uidt && c.uidt in columnDefaultMeta) {
if (!c.meta) c.meta = {}
c.meta = {
...columnDefaultMeta[c.uidt],
...(c.meta || {}),
}
}
return {
...c,
}
})
}
const saveChanges = async () => { const saveChanges = async () => {
if (!isColumnsValid.value) { if (!isColumnsValid.value) {
message.error(t('msg.error.multiFieldSaveValidation')) message.error(t('msg.error.multiFieldSaveValidation'))
@ -692,6 +714,9 @@ const saveChanges = async () => {
} }
await getMeta(meta.value.id, true) await getMeta(meta.value.id, true)
metaToLocal()
columnsHash.value = (await $api.dbTableColumn.hash(meta.value?.id)).hash columnsHash.value = (await $api.dbTableColumn.hash(meta.value?.id)).hash
visibilityOps.value = [] visibilityOps.value = []
@ -841,6 +866,10 @@ onMounted(async () => {
if (meta.value && meta.value.id) { if (meta.value && meta.value.id) {
columnsHash.value = (await $api.dbTableColumn.hash(meta.value.id)).hash columnsHash.value = (await $api.dbTableColumn.hash(meta.value.id)).hash
} }
await until(() => meta.value?.columns)
metaToLocal()
}) })
const onFieldOptionUpdate = () => { const onFieldOptionUpdate = () => {
@ -874,7 +903,7 @@ watch(
const defaultColumnName = generateUniqueColumnName({ const defaultColumnName = generateUniqueColumnName({
formState: oldField, formState: oldField,
tableExplorerColumns: fields.value || [], tableExplorerColumns: fields.value || [],
metaColumns: meta.value?.columns || [], metaColumns: localMetaColumns.value || [],
newFieldTitles, newFieldTitles,
}) })

2
packages/nc-gui/components/smartsheet/expanded-form/Comments.vue

@ -3,7 +3,7 @@ import { type CommentType, ProjectRoles } from 'nocodb-sdk'
const props = defineProps<{ const props = defineProps<{
loading: boolean loading: boolean
primaryKey: string primaryKey: string | null
}>() }>()
const { const {

14
packages/nc-gui/components/smartsheet/grid/useColumnDrag.ts

@ -18,6 +18,7 @@ export const useColumnDrag = ({
const { leftSidebarWidth } = storeToRefs(useSidebarStore()) const { leftSidebarWidth } = storeToRefs(useSidebarStore())
const { width } = useWindowSize() const { width } = useWindowSize()
const isProcessing = ref<boolean>(false)
const draggedCol = ref<ColumnType | null>(null) const draggedCol = ref<ColumnType | null>(null)
const dragColPlaceholderDomRef = ref<HTMLElement | null>(null) const dragColPlaceholderDomRef = ref<HTMLElement | null>(null)
const toBeDroppedColId = ref<string | null>(null) const toBeDroppedColId = ref<string | null>(null)
@ -57,7 +58,7 @@ export const useColumnDrag = ({
const lastViewCol = gridViewCols.value[lastCol.id!] const lastViewCol = gridViewCols.value[lastCol.id!]
// if nextToViewCol/toViewCol is null, return // if nextToViewCol/toViewCol is null, return
if (nextToViewCol === null || lastViewCol === null) return if (nextToViewCol === null && lastViewCol === null) return
const newOrder = nextToViewCol ? toViewCol.order! + (nextToViewCol.order! - toViewCol.order!) / 2 : lastViewCol.order! + 1 const newOrder = nextToViewCol ? toViewCol.order! + (nextToViewCol.order! - toViewCol.order!) / 2 : lastViewCol.order! + 1
const oldOrder = toBeReorderedViewCol.order const oldOrder = toBeReorderedViewCol.order
@ -106,9 +107,16 @@ export const useColumnDrag = ({
} }
const handleReorderColumn = async () => { const handleReorderColumn = async () => {
isProcessing.value = true
try {
dragColPlaceholderDomRef.value!.style.left = '0px' dragColPlaceholderDomRef.value!.style.left = '0px'
dragColPlaceholderDomRef.value!.style.height = '0px' dragColPlaceholderDomRef.value!.style.height = '0px'
await reorderColumn(draggedCol.value!.id!, toBeDroppedColId.value!) await reorderColumn(draggedCol.value!.id!, toBeDroppedColId.value!)
} catch (error) {
console.error('Failed to reorder column: ', error)
} finally {
isProcessing.value = false
}
draggedCol.value = null draggedCol.value = null
toBeDroppedColId.value = null toBeDroppedColId.value = null
} }
@ -180,9 +188,11 @@ export const useColumnDrag = ({
} }
// fallback for safari browser // fallback for safari browser
const onDragEnd = (e: DragEvent) => { const onDragEnd = async (e: DragEvent) => {
e.preventDefault() e.preventDefault()
await until(() => !isProcessing.value).toBeTruthy()
if (!e.dataTransfer || !draggedCol.value || !toBeDroppedColId.value) return if (!e.dataTransfer || !draggedCol.value || !toBeDroppedColId.value) return
handleReorderColumn() handleReorderColumn()

4
packages/nc-gui/components/smartsheet/toolbar/ColumnFilter.vue

@ -878,7 +878,7 @@ const changeToDynamic = async (filter, i) => {
'mt-1 mb-2': filters.length, 'mt-1 mb-2': filters.length,
}" }"
> >
<NcButton :ref="addFilterBtnRef" size="small" type="text" class="nc-btn-focus" @click.stop="addFilter()"> <NcButton size="small" type="text" class="nc-btn-focus" @click.stop="addFilter()">
<div class="flex items-center gap-1"> <div class="flex items-center gap-1">
<component :is="iconMap.plus" /> <component :is="iconMap.plus" />
<!-- Add Filter --> <!-- Add Filter -->
@ -904,7 +904,7 @@ const changeToDynamic = async (filter, i) => {
'mt-1 mb-2': filters.length, 'mt-1 mb-2': filters.length,
}" }"
> >
<NcButton :ref="addFilterBtnRef" class="nc-btn-focus" size="small" type="text" @click.stop="addFilter()"> <NcButton class="nc-btn-focus" size="small" type="text" @click.stop="addFilter()">
<div class="flex items-center gap-1"> <div class="flex items-center gap-1">
<component :is="iconMap.plus" /> <component :is="iconMap.plus" />
<!-- Add Filter --> <!-- Add Filter -->

6
packages/nc-gui/composables/useAttachment.ts

@ -5,9 +5,9 @@ const useAttachment = () => {
const res: string[] = [] const res: string[] = []
if (item?.data) res.push(item.data) if (item?.data) res.push(item.data)
if (item?.file) res.push(window.URL.createObjectURL(item.file)) if (item?.file) res.push(window.URL.createObjectURL(item.file))
if (item?.signedPath) res.push(encodeURI(`${appInfo.value.ncSiteUrl}/${item.signedPath}`)) if (item?.signedPath) res.push(`${appInfo.value.ncSiteUrl}/${encodeURI(item.signedPath)}`)
if (item?.signedUrl) res.push(encodeURI(item.signedUrl)) if (item?.signedUrl) res.push(item.signedUrl)
if (item?.path) res.push(encodeURI(`${appInfo.value.ncSiteUrl}/${item.path}`)) if (item?.path) res.push(`${appInfo.value.ncSiteUrl}/${encodeURI(item.path)}`)
if (item?.url) res.push(item.url) if (item?.url) res.push(item.url)
return res return res
} }

45
packages/nc-gui/composables/useDebounceFnCached.ts

@ -0,0 +1,45 @@
import type { DebounceFilterOptions, MaybeRefOrGetter } from '@vueuse/core'
type FunctionArgs = (...args: any[]) => any
// Default function to generate a cache key
function defaultGetCacheKey(): string {
return 'default'
}
/**
* Creates a cached debounced version of the given function.
*
* @param fn - The function to debounce.
* @param ms - The debounce delay in milliseconds. Default is 500ms.
* @param getCacheKey - Function to generate a unique cache key based on the arguments.
* @param options - Additional options for debouncing.
*
* @returns A debounced version of the input function with caching.
*/
export function useCachedDebouncedFunction<T extends FunctionArgs>(
fn: T,
ms: MaybeRefOrGetter<number> = 500,
getCacheKey: (...args: Parameters<T>) => string | number = defaultGetCacheKey,
options: DebounceFilterOptions = {},
): (...args: Parameters<T>) => ReturnType<T> {
// Cache to store debounced functions based on a unique key
const debounceCache = new Map<string | number, any>()
return (...args: Parameters<T>): ReturnType<T> => {
// Generate a unique key for the given arguments
const key = getCacheKey(...args)
// If the debounced function for the given key is not in the cache, create and cache it
if (!debounceCache.has(key)) {
const debouncedFn = useDebounceFn(fn, ms, options)
debounceCache.set(key, debouncedFn)
}
// Retrieve the cached debounced function
const debouncedFn = debounceCache.get(key)
// Call and return the result of the debounced function
return debouncedFn!(...args)
}
}

152
packages/nc-gui/composables/useViewFilters.ts

@ -10,12 +10,14 @@ import type { ComputedRef, Ref } from 'vue'
import type { SelectProps } from 'ant-design-vue' import type { SelectProps } from 'ant-design-vue'
import { UITypes, isSystemColumn } from 'nocodb-sdk' import { UITypes, isSystemColumn } from 'nocodb-sdk'
type ColumnFilterType = FilterType & { status?: string; id?: string; children?: ColumnFilterType[]; is_group?: boolean }
export function useViewFilters( export function useViewFilters(
view: Ref<ViewType | undefined>, view: Ref<ViewType | undefined>,
_parentId: Ref<string | null> | null | string, _parentId: Ref<string | null> | null | string,
autoApply?: ComputedRef<boolean>, autoApply?: ComputedRef<boolean>,
reloadData?: () => void, reloadData?: () => void,
_currentFilters?: Filter[], _currentFilters?: ColumnFilterType[],
isNestedRoot?: boolean, isNestedRoot?: boolean,
isWebhook?: boolean, isWebhook?: boolean,
isLink?: boolean, isLink?: boolean,
@ -27,7 +29,7 @@ export function useViewFilters(
const currentFilters = ref(_currentFilters) const currentFilters = ref(_currentFilters)
const btLookupTypesMap = ref({}) const btLookupTypesMap = ref<Record<string, any>>({})
const reloadHook = inject(ReloadViewDataHookInj) const reloadHook = inject(ReloadViewDataHookInj)
@ -45,15 +47,15 @@ export function useViewFilters(
const { addUndo, clone, defineViewScope } = useUndoRedo() const { addUndo, clone, defineViewScope } = useUndoRedo()
const _filters = ref<FilterType[]>([...(currentFilters.value || [])]) const _filters = ref<ColumnFilterType[]>([...(currentFilters.value || [])])
const nestedMode = computed(() => isPublic.value || !isUIAllowed('filterSync') || !isUIAllowed('filterChildrenRead')) const nestedMode = computed(() => isPublic.value || !isUIAllowed('filterSync') || !isUIAllowed('filterChildrenRead'))
const filters = computed<FilterType[]>({ const filters = computed<ColumnFilterType[]>({
get: () => { get: () => {
return nestedMode.value && !isLink && !isWebhook ? currentFilters.value! : _filters.value return nestedMode.value && !isLink && !isWebhook ? currentFilters.value! : _filters.value
}, },
set: (value: Filter[]) => { set: (value: ColumnFilterType[]) => {
if (nestedMode.value) { if (nestedMode.value) {
currentFilters.value = value currentFilters.value = value
if (!isLink && !isWebhook) { if (!isLink && !isWebhook) {
@ -117,9 +119,9 @@ export function useViewFilters(
}, {}) }, {})
}) })
const lastFilters = ref<Filter[]>([]) const lastFilters = ref<ColumnFilterType[]>([])
watchOnce(filters, (filters: Filter[]) => { watchOnce(filters, (filters: ColumnFilterType[]) => {
lastFilters.value = clone(filters) lastFilters.value = clone(filters)
}) })
@ -131,7 +133,7 @@ export function useViewFilters(
} }
const isComparisonOpAllowed = ( const isComparisonOpAllowed = (
filter: FilterType, filter: ColumnFilterType,
compOp: { compOp: {
text: string text: string
value: string value: string
@ -141,7 +143,7 @@ export function useViewFilters(
}, },
) => { ) => {
const isNullOrEmptyOp = ['empty', 'notempty', 'null', 'notnull'].includes(compOp.value) const isNullOrEmptyOp = ['empty', 'notempty', 'null', 'notnull'].includes(compOp.value)
const uidt = types.value[filter.fk_column_id] const uidt = types.value[filter.fk_column_id!]
if (compOp.includedTypes) { if (compOp.includedTypes) {
// include allowed values only if selected column type matches // include allowed values only if selected column type matches
@ -167,7 +169,7 @@ export function useViewFilters(
} }
const isComparisonSubOpAllowed = ( const isComparisonSubOpAllowed = (
filter: FilterType, filter: ColumnFilterType,
compOp: { compOp: {
text: string text: string
value: string value: string
@ -176,7 +178,7 @@ export function useViewFilters(
excludedTypes?: UITypes[] excludedTypes?: UITypes[]
}, },
) => { ) => {
const uidt = types.value[filter.fk_column_id] const uidt = types.value[filter.fk_column_id!]
if (compOp.includedTypes) { if (compOp.includedTypes) {
// include allowed values only if selected column type matches // include allowed values only if selected column type matches
@ -187,7 +189,7 @@ export function useViewFilters(
} }
} }
const placeholderFilter = (): Filter => { const placeholderFilter = (): ColumnFilterType => {
const logicalOps = new Set(filters.value.slice(1).map((filter) => filter.logical_op)) const logicalOps = new Set(filters.value.slice(1).map((filter) => filter.logical_op))
return { return {
@ -200,7 +202,7 @@ export function useViewFilters(
} }
} }
const placeholderGroupFilter = (): Filter => { const placeholderGroupFilter = (): ColumnFilterType => {
const logicalOps = new Set(filters.value.slice(1).map((filter) => filter.logical_op)) const logicalOps = new Set(filters.value.slice(1).map((filter) => filter.logical_op))
return { return {
@ -210,12 +212,12 @@ export function useViewFilters(
} }
} }
const loadAllChildFilters = async (filters: Filter[]) => { const loadAllChildFilters = async (filters: ColumnFilterType[]) => {
// Array to store promises of child filter loading // Array to store promises of child filter loading
const promises = [] const promises = []
// Array to store all child filters // Array to store all child filters
const allChildFilters: Filter[] = [] const allChildFilters: ColumnFilterType[] = []
// Iterate over all filters // Iterate over all filters
for (const filter of filters) { for (const filter of filters) {
@ -223,7 +225,7 @@ export function useViewFilters(
if (filter.id && filter.is_group) { if (filter.id && filter.is_group) {
// Load children filters from the backend // Load children filters from the backend
const childFilterPromise = $api.dbTableFilter.childrenRead(filter.id).then((response) => { const childFilterPromise = $api.dbTableFilter.childrenRead(filter.id).then((response) => {
const childFilters = response.list as Filter[] const childFilters = response.list as ColumnFilterType[]
allChildFilters.push(...childFilters) allChildFilters.push(...childFilters)
return loadAllChildFilters(childFilters) return loadAllChildFilters(childFilters)
}) })
@ -235,7 +237,7 @@ export function useViewFilters(
await Promise.all(promises) await Promise.all(promises)
// Push all child filters into the allFilters array // Push all child filters into the allFilters array
if (!isLink && !isWebhook) allFilters.value.push(...allChildFilters) if (!isLink && !isWebhook) allFilters.value.push(...(allChildFilters as FilterType[]))
} }
const loadFilters = async ({ const loadFilters = async ({
@ -259,25 +261,25 @@ export function useViewFilters(
try { try {
if (isWebhook || hookId) { if (isWebhook || hookId) {
if (parentId.value) { if (parentId.value) {
filters.value = (await $api.dbTableFilter.childrenRead(parentId.value)).list as Filter[] filters.value = (await $api.dbTableFilter.childrenRead(parentId.value)).list as ColumnFilterType[]
} else if (hookId && !isNestedRoot) { } else if (hookId && !isNestedRoot) {
filters.value = (await $api.dbTableWebhookFilter.read(hookId)).list as Filter[] filters.value = (await $api.dbTableWebhookFilter.read(hookId)).list as ColumnFilterType[]
} }
} else { } else {
if (isLink || linkColId?.value) { if (isLink || linkColId?.value) {
if (parentId.value) { if (parentId.value) {
filters.value = (await $api.dbTableFilter.childrenRead(parentId.value)).list as Filter[] filters.value = (await $api.dbTableFilter.childrenRead(parentId.value)).list as ColumnFilterType[]
} else if (linkColId?.value && !isNestedRoot) { } else if (linkColId?.value && !isNestedRoot) {
filters.value = (await $api.dbTableLinkFilter.read(linkColId?.value)).list as Filter[] filters.value = (await $api.dbTableLinkFilter.read(linkColId?.value)).list as ColumnFilterType[]
} }
} else { } else {
if (parentId.value) { if (parentId.value) {
filters.value = (await $api.dbTableFilter.childrenRead(parentId.value)).list as Filter[] filters.value = (await $api.dbTableFilter.childrenRead(parentId.value)).list as ColumnFilterType[]
} else { } else {
filters.value = (await $api.dbTableFilter.read(view.value!.id!)).list as Filter[] filters.value = (await $api.dbTableFilter.read(view.value!.id!)).list as ColumnFilterType[]
if (loadAllFilters) { if (loadAllFilters) {
allFilters.value = [...filters.value] allFilters.value = [...filters.value] as FilterType[]
await loadAllChildFilters(allFilters.value) await loadAllChildFilters(allFilters.value as ColumnFilterType[])
} }
} }
} }
@ -311,23 +313,26 @@ export function useViewFilters(
...filter, ...filter,
children: undefined, children: undefined,
fk_parent_id: parentId.value, fk_parent_id: parentId.value,
})) as unknown as FilterType } as FilterType)) as ColumnFilterType
} else if (linkId || linkColId?.value) { } else if (linkId || linkColId?.value) {
filters.value[+i] = (await $api.dbTableLinkFilter.create(linkId || linkColId.value, { filters.value[+i] = (await $api.dbTableLinkFilter.create(linkId || linkColId.value, {
...filter, ...filter,
children: undefined, children: undefined,
fk_parent_id: parentId.value, fk_parent_id: parentId.value,
})) as unknown as FilterType } as FilterType)) as ColumnFilterType
} else { } else {
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, ...filter,
fk_parent_id: parentId.value, fk_parent_id: parentId.value,
}) } as FilterType,
)) as ColumnFilterType
} }
if (children) filters.value[+i].children = children if (children) filters.value[+i].children = children
if (!isLink && !isWebhook) allFilters.value.push(filters.value[+i]) if (!isLink && !isWebhook) allFilters.value.push(filters.value[+i] as FilterType)
} }
} }
@ -338,13 +343,18 @@ export function useViewFilters(
} }
} }
const saveOrUpdate = async (filter: Filter, i: number, force = false, undo = false, skipDataReload = false) => { const saveOrUpdateDebounced = useCachedDebouncedFunction(saveOrUpdate, 500, (_filter: ColumnFilterType, i: number) => i)
async function saveOrUpdate(filter: ColumnFilterType, i: number, force = false, undo = false, skipDataReload = false) {
// if already in progress the debounced function which will call this function again with 500ms delay until it's not saving // if already in progress the debounced function which will call this function again with 500ms delay until it's not saving
if (savingStatus[i]) { if (savingStatus[i]) {
return saveOrUpdateDebounced(filter, i, force, undo, skipDataReload) return saveOrUpdateDebounced(filter, i, force, undo, skipDataReload)
} else {
savingStatus[i] = true
} }
// wait if any previous filter save is in progress, it's to avoid messing up the order of filters
else if (Array.from({ length: i }).some((_, index) => savingStatus[index])) {
return saveOrUpdateDebounced(filter, i, force, undo, skipDataReload)
}
savingStatus[i] = true
if (!view.value && !linkColId?.value) return if (!view.value && !linkColId?.value) return
@ -358,7 +368,7 @@ export function useViewFilters(
fn: (prop: string, data: any) => { fn: (prop: string, data: any) => {
const f = filters.value[i] const f = filters.value[i]
if (f) { if (f) {
f[prop as keyof Filter] = data f[prop as keyof ColumnFilterType] = data
saveOrUpdate(f, i, force, true) saveOrUpdate(f, i, force, true)
} }
}, },
@ -368,25 +378,24 @@ export function useViewFilters(
fn: (prop: string, data: any) => { fn: (prop: string, data: any) => {
const f = filters.value[i] const f = filters.value[i]
if (f) { if (f) {
f[prop as keyof Filter] = data f[prop as keyof ColumnFilterType] = data
saveOrUpdate(f, i, force, true) saveOrUpdate(f, i, force, true)
} }
}, },
args: [Object.keys(delta)[0], filter[Object.keys(delta)[0] as keyof Filter]], args: [Object.keys(delta)[0], filter[Object.keys(delta)[0] as keyof ColumnFilterType]],
}, },
scope: defineViewScope({ view: activeView.value }), scope: defineViewScope({ view: activeView.value }),
}) })
} }
} }
} }
try { try {
if (nestedMode.value) { if (nestedMode.value) {
filters.value[i] = { ...filter } filters.value[i] = { ...filter }
filters.value = [...filters.value] filters.value = [...filters.value]
} else if (!autoApply?.value && !force) { } else if (!autoApply?.value && !force) {
filter.status = filter.id ? 'update' : 'create' filter.status = filter.id ? 'update' : 'create'
} else if (filters.value[i]?.id && filter.status !== 'create') { } else if (filters.value[i]?.id && filters.value[i]?.status !== 'create') {
await $api.dbTableFilter.update(filters.value[i].id!, { await $api.dbTableFilter.update(filters.value[i].id!, {
...filter, ...filter,
fk_parent_id: parentId.value, fk_parent_id: parentId.value,
@ -399,17 +408,33 @@ export function useViewFilters(
}) })
} else { } else {
if (linkColId?.value) { if (linkColId?.value) {
filters.value[i] = await $api.dbTableLinkFilter.create(linkColId.value, { const savedFilter = await $api.dbTableLinkFilter.create(linkColId.value, {
...filter, ...filter,
fk_parent_id: parentId, fk_parent_id: parentId.value,
}) })
// extract id from saved filter and update the filter object
// avoiding whole object update to prevent overwriting of current filter object changes
filters.value[i] = {
...filters.value[i],
fk_parent_id: parentId.value,
id: savedFilter.id,
status: undefined,
}
} else { } else {
filters.value[i] = await $api.dbTableFilter.create(view.value.id!, { const savedFilter = await $api.dbTableFilter.create(view.value!.id!, {
...filter, ...filter,
fk_parent_id: parentId.value, fk_parent_id: parentId.value,
}) })
// extract id from saved filter and update the filter object
// avoiding whole object update to prevent overwriting of current filter object changes
filters.value[i] = {
...filters.value[i],
fk_parent_id: parentId.value,
id: savedFilter.id,
status: undefined,
}
} }
if (!isLink && !isWebhook) allFilters.value.push(filters.value[+i]) if (!isLink && !isWebhook) allFilters.value.push(filters.value[+i] as FilterType)
} }
} catch (e: any) { } catch (e: any) {
console.log(e) console.log(e)
@ -423,7 +448,7 @@ export function useViewFilters(
if (!isWebhook && !skipDataReload && !isLink) reloadData?.() if (!isWebhook && !skipDataReload && !isLink) reloadData?.()
} }
function deleteFilterGroupFromAllFilters(filter: Filter) { function deleteFilterGroupFromAllFilters(filter: ColumnFilterType) {
if (!isLink && !isWebhook) return if (!isLink && !isWebhook) return
// Find all child filters of the specified parentId // Find all child filters of the specified parentId
@ -432,7 +457,7 @@ export function useViewFilters(
// Recursively delete child filter of child filter // Recursively delete child filter of child filter
childFilters.forEach((childFilter) => { childFilters.forEach((childFilter) => {
if (childFilter.is_group) { if (childFilter.is_group) {
deleteFilterGroupFromAllFilters(childFilter) deleteFilterGroupFromAllFilters(childFilter as ColumnFilterType)
} }
}) })
@ -440,11 +465,13 @@ export function useViewFilters(
allFilters.value = allFilters.value.filter((f) => f.id !== filter.id && f.fk_parent_id !== filter.id) allFilters.value = allFilters.value.filter((f) => f.id !== filter.id && f.fk_parent_id !== filter.id)
} }
const deleteFilter = async (filter: Filter, i: number, undo = false) => { const deleteFilter = async (filter: ColumnFilterType, i: number, undo = false) => {
// update the filter status
filter.status = 'delete'
if (!undo && !filter.is_group) { if (!undo && !filter.is_group) {
addUndo({ addUndo({
undo: { undo: {
fn: async (fl: Filter) => { fn: async (fl: ColumnFilterType) => {
fl.status = 'create' fl.status = 'create'
filters.value.splice(i, 0, fl) filters.value.splice(i, 0, fl)
await saveOrUpdate(fl, i, false, true) await saveOrUpdate(fl, i, false, true)
@ -496,11 +523,10 @@ export function useViewFilters(
if (!isLink && !isWebhook) allFilters.value = allFilters.value.filter((f) => f.id !== filter.id) if (!isLink && !isWebhook) allFilters.value = allFilters.value.filter((f) => f.id !== filter.id)
} }
} }
const saveOrUpdateDebounced = useDebounceFn(saveOrUpdate, 500)
const addFilter = async (undo = false, draftFilter: Partial<FilterType> = {}) => { const addFilter = async (undo = false, draftFilter: Partial<FilterType> = {}) => {
filters.value.push(draftFilter?.fk_column_id ? { ...placeholderFilter(), ...draftFilter } : placeholderFilter()) filters.value.push(
(draftFilter?.fk_column_id ? { ...placeholderFilter(), ...draftFilter } : placeholderFilter()) as ColumnFilterType,
)
if (!undo) { if (!undo) {
addUndo({ addUndo({
undo: { undo: {
@ -511,7 +537,7 @@ export function useViewFilters(
args: [filters.value.length - 1], args: [filters.value.length - 1],
}, },
redo: { redo: {
fn: async (i: number, fl: Filter) => { fn: async (i: number, fl: ColumnFilterType) => {
fl.status = 'create' fl.status = 'create'
filters.value.splice(i, 0, fl) filters.value.splice(i, 0, fl)
await saveOrUpdate(fl, i, false, true) await saveOrUpdate(fl, i, false, true)
@ -530,7 +556,7 @@ export function useViewFilters(
const addFilterGroup = async () => { const addFilterGroup = async () => {
const child = placeholderFilter() const child = placeholderFilter()
const placeHolderGroupFilter: Filter = placeholderGroupFilter() const placeHolderGroupFilter: ColumnFilterType = placeholderGroupFilter()
if (nestedMode.value) placeHolderGroupFilter.children = [child] if (nestedMode.value) placeHolderGroupFilter.children = [child]
@ -562,28 +588,34 @@ export function useViewFilters(
// method to extract looked up column meta for all bt lookup columns // method to extract looked up column meta for all bt lookup columns
// it helps to decide the condition operations for the column // it helps to decide the condition operations for the column
const loadBtLookupTypes = async () => { const loadBtLookupTypes = async () => {
const btLookupTypes = {} const btLookupTypes: Record<string, any> = {}
try { try {
for (const col of meta.value?.columns || []) { for (const col of meta.value?.columns || []) {
if (col.uidt !== UITypes.Lookup) continue if (col.uidt !== UITypes.Lookup) continue
let nextCol = col let nextCol: ColumnType | undefined = col
// check all the relation of nested lookup columns is bt or not // check all the relation of nested lookup columns is bt or not
// include the column only if all only if all relations are bt // include the column only if all only if all relations are bt
while (nextCol && nextCol.uidt === UITypes.Lookup) { while (nextCol && nextCol.uidt === UITypes.Lookup) {
// extract the relation column meta // extract the relation column meta
const lookupRelation = (await getMeta(nextCol.fk_model_id))?.columns?.find( const lookupRelation = (await getMeta(nextCol.fk_model_id!))?.columns?.find(
(c) => c.id === (nextCol.colOptions as LookupType).fk_relation_column_id, (c) => c.id === (nextCol!.colOptions as LookupType).fk_relation_column_id,
) )
const relatedTableMeta = await getMeta((lookupRelation.colOptions as LinkToAnotherRecordType).fk_related_model_id)
nextCol = relatedTableMeta?.columns?.find((c) => c.id === (nextCol.colOptions as LookupType).fk_lookup_column_id) // this is less likely to happen but if relation column is not found then break the loop
if (!lookupRelation) {
break
}
const relatedTableMeta = await getMeta((lookupRelation?.colOptions as LinkToAnotherRecordType).fk_related_model_id!)
nextCol = relatedTableMeta?.columns?.find((c) => c.id === (nextCol!.colOptions as LookupType).fk_lookup_column_id)
// if next column is same as root lookup column then break the loop // if next column is same as root lookup column then break the loop
// since it's going to be a circular loop // since it's going to be a circular loop
if (nextCol.id === col.id) { if (nextCol?.id === col.id) {
break break
} }
} }
btLookupTypes[col.id] = nextCol btLookupTypes[col.id!] = nextCol
} }
btLookupTypesMap.value = btLookupTypes btLookupTypesMap.value = btLookupTypes
} catch (e) { } catch (e) {

2
packages/nc-gui/composables/useViewGroupBy.ts

@ -532,6 +532,8 @@ const [useProvideViewGroupBy, useViewGroupBy] = useInjectionState(
(c) => c.id === (nextCol?.colOptions as LookupType).fk_relation_column_id, (c) => c.id === (nextCol?.colOptions as LookupType).fk_relation_column_id,
) )
if (!lookupRelation?.colOptions) break
const relatedTableMeta = await getMeta( const relatedTableMeta = await getMeta(
(lookupRelation?.colOptions as LinkToAnotherRecordType).fk_related_model_id as string, (lookupRelation?.colOptions as LinkToAnotherRecordType).fk_related_model_id as string,
) )

119
packages/nc-gui/helpers/columnDefaultMeta.ts

@ -0,0 +1,119 @@
import { UITypes, dateFormats, timeFormats } from 'nocodb-sdk'
export const precisionFormats = [1, 2, 3, 4, 5, 6, 7, 8]
export const iconList = [
{
full: 'mdi-star',
empty: 'mdi-star-outline',
},
{
full: 'mdi-heart',
empty: 'mdi-heart-outline',
},
{
full: 'mdi-moon-full',
empty: 'mdi-moon-new',
},
{
full: 'mdi-thumb-up',
empty: 'mdi-thumb-up-outline',
},
{
full: 'mdi-flag',
empty: 'mdi-flag-outline',
},
]
export const supportedBarcodeFormats = [
{ value: 'CODE128', label: 'CODE128' },
{ value: 'upc', label: 'UPC' },
{ value: 'EAN13', label: 'EAN-13' },
{ value: 'EAN8', label: 'EAN-8' },
{ value: 'EAN5', label: 'EAN-5' },
{ value: 'EAN2', label: 'EAN-2' },
{ value: 'CODE39', label: 'CODE39' },
{ value: 'ITF14', label: 'ITF-14' },
{ value: 'MSI', label: 'MSI' },
{ value: 'PHARMACODE', label: 'PHARMACODE' },
{ value: 'CODABAR', label: 'CODABAR' },
]
const barcodeDefaultMeta = {
barcodeFormat: supportedBarcodeFormats[0].value,
}
const checkboxDefaultMeta = {
iconIdx: 0,
icon: {
checked: 'mdi-check-bold',
unchecked: 'mdi-crop-square',
},
color: '#777',
}
const currencyDefaultMeta = {
currency_locale: 'en-US',
currency_code: 'USD',
}
const dateDefaultMeta = {
date_format: dateFormats[0],
}
const dateTimeDefaultMeta = {
date_format: dateFormats[0],
time_format: timeFormats[0],
is12hrFormat: false,
}
const decimalDefaultMeta = {
precision: precisionFormats[0],
isLocaleString: false,
}
const durationDefaultMeta = {
duration: 0,
}
const numberDefaultMeta = {
isLocaleString: false,
}
const percentDefaultMeta = {
is_progress: false,
}
const ratingDefaultMeta = {
iconIdx: 0,
icon: {
full: 'mdi-star',
empty: 'mdi-star-outline',
},
color: '#fcb401',
max: 5,
}
const timeDefaultMeta = {
is12hrFormat: false,
}
const userDefaultMeta = {
is_multi: false,
notify: false,
}
export const columnDefaultMeta = {
[UITypes.Checkbox]: checkboxDefaultMeta,
[UITypes.Currency]: currencyDefaultMeta,
[UITypes.Date]: dateDefaultMeta,
[UITypes.DateTime]: dateTimeDefaultMeta,
[UITypes.Decimal]: decimalDefaultMeta,
[UITypes.Duration]: durationDefaultMeta,
[UITypes.Number]: numberDefaultMeta,
[UITypes.Percent]: percentDefaultMeta,
[UITypes.Rating]: ratingDefaultMeta,
[UITypes.Time]: timeDefaultMeta,
[UITypes.User]: userDefaultMeta,
[UITypes.Barcode]: barcodeDefaultMeta,
}

19
packages/nc-gui/lang/ar.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Collapse Stack", "collapseStack": "Collapse Stack",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Delete Stack", "deleteStack": "Delete Stack",
"stackedBy": "Stacked By", "stackedBy": "Stacked By",
"chooseGroupingField": "Choose a Grouping Field", "chooseGroupingField": "Choose a Grouping Field",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/bn_IN.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Collapse Stack", "collapseStack": "Collapse Stack",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Delete Stack", "deleteStack": "Delete Stack",
"stackedBy": "Stacked By", "stackedBy": "Stacked By",
"chooseGroupingField": "Choose a Grouping Field", "chooseGroupingField": "Choose a Grouping Field",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/cs.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Kód měny",
"searchMembers": "Vyhledávání členů", "searchMembers": "Vyhledávání členů",
"noMembersFound": "Nenalezeni žádní členové", "noMembersFound": "Nenalezeni žádní členové",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Kopírovat URL záznamu", "copyRecordURL": "Kopírovat URL záznamu",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Sbalit zásobník", "collapseStack": "Sbalit zásobník",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Odstranit zásobník", "deleteStack": "Odstranit zásobník",
"stackedBy": "Seskupeno dle", "stackedBy": "Seskupeno dle",
"chooseGroupingField": "Výběr pole pro seskupení", "chooseGroupingField": "Výběr pole pro seskupení",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Vytvoření osobních API tokenů pro použití při automatizaci nebo v externích aplikacích.", "apiTokenCreate": "Vytvoření osobních API tokenů pro použití při automatizaci nebo v externích aplikacích.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/da.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Kollaps af stak", "collapseStack": "Kollaps af stak",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Slet stak", "deleteStack": "Slet stak",
"stackedBy": "Stablet af", "stackedBy": "Stablet af",
"chooseGroupingField": "Vælg et grupperingsfelt", "chooseGroupingField": "Vælg et grupperingsfelt",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/de.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Kopfzeilen", "headers": "Kopfzeilen",
"parameterName": "Parametername", "parameterName": "Parametername",
"currencyLocale": "Locale", "currencyLocale": "Währung",
"currencyCode": "Code", "currencyCode": "Währungscode",
"searchMembers": "Nach Nutzern suchen", "searchMembers": "Nach Nutzern suchen",
"noMembersFound": "Keine Mitglieder gefunden", "noMembersFound": "Keine Mitglieder gefunden",
"dateJoined": "Beitrittsdatum", "dateJoined": "Beitrittsdatum",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Rich-Text-Format aktivieren",
"idColon": "ID:", "idColon": "ID:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Stapel einklappen", "collapseStack": "Stapel einklappen",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Stapel löschen", "deleteStack": "Stapel löschen",
"stackedBy": "Gestapelt von", "stackedBy": "Gestapelt von",
"chooseGroupingField": "Wählen Sie ein Gruppierungsfeld", "chooseGroupingField": "Wählen Sie ein Gruppierungsfeld",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Ungültige Uhrzeit", "invalidTime": "Ungültige Uhrzeit",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Ungültige Telefonnummer", "invalidPhoneNumber": "Ungültige Telefonnummer",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Personalisierte API Tokens zur Verwendung in Automatisierungen oder externen Apps erstellen.", "apiTokenCreate": "Personalisierte API Tokens zur Verwendung in Automatisierungen oder externen Apps erstellen.",
"selectFieldToSort": "Feld zum Sortieren auswählen", "selectFieldToSort": "Feld zum Sortieren auswählen",
"selectFieldToGroup": "Feld zum Gruppieren auswählen", "selectFieldToGroup": "Feld zum Gruppieren auswählen",

27
packages/nc-gui/lang/es.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parámetro", "parameter": "Parámetro",
"headers": "Encabezados", "headers": "Encabezados",
"parameterName": "Nombre del parámetro", "parameterName": "Nombre del parámetro",
"currencyLocale": "Locale", "currencyLocale": "Moneda local",
"currencyCode": "Code", "currencyCode": "Código de moneda",
"searchMembers": "Buscar miembros", "searchMembers": "Buscar miembros",
"noMembersFound": "Ningún miembro encontrado", "noMembersFound": "Ningún miembro encontrado",
"dateJoined": "Fecha de incorporación", "dateJoined": "Fecha de incorporación",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Selecciona los campos del panel derecho para añadirlos aquí", "selectFieldsFromRightPannelToAddHere": "Selecciona los campos del panel derecho para añadirlos aquí",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Nombre del encabezado", "headerName": "Nombre del encabezado",
"icon": "Icono", "icon": "Icono",
"max": "Máximo", "max": "Máximo",
"enableRichText": "Enable rich text", "enableRichText": "Activar Texto Enriquecido",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "URL del registro copiado", "copiedRecordURL": "URL del registro copiado",
"copyRecordURL": "Copiar URL de registro", "copyRecordURL": "Copiar URL de registro",
@ -598,7 +600,7 @@
"untitledToken": "Token sin título", "untitledToken": "Token sin título",
"tableName": "Nombre de la tabla", "tableName": "Nombre de la tabla",
"dashboardName": "Nombre del panel", "dashboardName": "Nombre del panel",
"createView": "Crear Vista", "createView": "Crear una vista",
"creatingView": "Creando Vista", "creatingView": "Creando Vista",
"duplicateView": "Duplicar vista", "duplicateView": "Duplicar vista",
"duplicateGridView": "Duplicar vista en cuadrcula", "duplicateGridView": "Duplicar vista en cuadrcula",
@ -937,7 +939,7 @@
"clearMetadata": "Limpiar metadatos", "clearMetadata": "Limpiar metadatos",
"exportToFile": "Exportar a archivo", "exportToFile": "Exportar a archivo",
"changePwd": "Cambia la contraseña", "changePwd": "Cambia la contraseña",
"createView": "Crear vista", "createView": "Crear una Vista",
"shareView": "Compartir vista", "shareView": "Compartir vista",
"findRowByCodeScan": "Find row by scan", "findRowByCodeScan": "Find row by scan",
"fillByCodeScan": "Rellenar por escaneo", "fillByCodeScan": "Rellenar por escaneo",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Colapsar pila", "collapseStack": "Colapsar pila",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Borrar pila", "deleteStack": "Borrar pila",
"stackedBy": "Apilado por", "stackedBy": "Apilado por",
"chooseGroupingField": "Elija un campo de agrupación", "chooseGroupingField": "Elija un campo de agrupación",
@ -1033,7 +1038,7 @@
"group": "Group" "group": "Group"
}, },
"tooltip": { "tooltip": {
"reachedSourceLimit": "Limitado a una única fuente de datos por el momento", "reachedSourceLimit": "Limited to 10 data sources per base",
"saveChanges": "Guardar cambios", "saveChanges": "Guardar cambios",
"xcDB": "Crear un nuevo proyecto", "xcDB": "Crear un nuevo proyecto",
"extDB": "Soporta MySQL, PostgreSQL, SQL Server y SQLite", "extDB": "Soporta MySQL, PostgreSQL, SQL Server y SQLite",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Hora no válida", "invalidTime": "Hora no válida",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Tamaño de página modificado", "pageSizeChanged": "Tamaño de página modificado",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No hay registros vinculados", "noRecordsLinked": "No hay registros vinculados",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "registros vinculados", "recordsLinked": "registros vinculados",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Sólo acepta",
"apiTokenCreate": "Cree tokens de API personales para utilizarlos en la automatización o en aplicaciones externas.", "apiTokenCreate": "Cree tokens de API personales para utilizarlos en la automatización o en aplicaciones externas.",
"selectFieldToSort": "Seleccionar campo para ordenar", "selectFieldToSort": "Seleccionar campo para ordenar",
"selectFieldToGroup": "Seleccione el campo al grupo", "selectFieldToGroup": "Seleccione el campo al grupo",
@ -1519,7 +1524,7 @@
"theAcceptedFileTypesAreXlsXlsxXlsmOdsOts": "Los tipos de archivo aceptados son .xls, .xlsx, .xlsm, .ods, .ots", "theAcceptedFileTypesAreXlsXlsxXlsmOdsOts": "Los tipos de archivo aceptados son .xls, .xlsx, .xlsm, .ods, .ots",
"parameterKeyCannotBeEmpty": "La clave del parámetro no puede estar vacía", "parameterKeyCannotBeEmpty": "La clave del parámetro no puede estar vacía",
"duplicateParameterKeysAreNotAllowed": "No se permiten claves de parámetros duplicadas", "duplicateParameterKeysAreNotAllowed": "No se permiten claves de parámetros duplicadas",
"fieldRequired": "This field cannot be empty.", "fieldRequired": "{value} no puede estar vacía.",
"projectNotAccessible": "Proyecto no accesible", "projectNotAccessible": "Proyecto no accesible",
"copyToClipboardError": "Fallo al copiar al portapapeles", "copyToClipboardError": "Fallo al copiar al portapapeles",
"pasteFromClipboardError": "Failed to paste from clipboard", "pasteFromClipboardError": "Failed to paste from clipboard",

19
packages/nc-gui/lang/eu.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parametroa", "parameter": "Parametroa",
"headers": "Goiburuak", "headers": "Goiburuak",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "Ez da kiderik aurkitu", "noMembersFound": "Ez da kiderik aurkitu",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Collapse Stack", "collapseStack": "Collapse Stack",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Delete Stack", "deleteStack": "Delete Stack",
"stackedBy": "Stacked By", "stackedBy": "Stacked By",
"chooseGroupingField": "Choose a Grouping Field", "chooseGroupingField": "Choose a Grouping Field",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/fa.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "پارامتر", "parameter": "پارامتر",
"headers": "سربرگ", "headers": "سربرگ",
"parameterName": "نام پارامتر", "parameterName": "نام پارامتر",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "کد واحد پولی",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "جمع کردن دسته", "collapseStack": "جمع کردن دسته",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "حذف دسته", "deleteStack": "حذف دسته",
"stackedBy": "دستهبندی با", "stackedBy": "دستهبندی با",
"chooseGroupingField": "انتخاب فیلد گروهبندی", "chooseGroupingField": "انتخاب فیلد گروهبندی",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/fi.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Pinoaminen Pinoaminen", "collapseStack": "Pinoaminen Pinoaminen",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Poista pino", "deleteStack": "Poista pino",
"stackedBy": "Pinottu by", "stackedBy": "Pinottu by",
"chooseGroupingField": "Valitse ryhmittelykenttä", "chooseGroupingField": "Valitse ryhmittelykenttä",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

23
packages/nc-gui/lang/fr.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Couleur ", "colour": "Couleur ",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Propriétaire", "owner": "Propriétaire",
@ -336,8 +337,8 @@
"parameter": "Paramètre", "parameter": "Paramètre",
"headers": "En-têtes", "headers": "En-têtes",
"parameterName": "Nom du paramètre", "parameterName": "Nom du paramètre",
"currencyLocale": "Locale", "currencyLocale": "Langue de la devise",
"currencyCode": "Code", "currencyCode": "Code de la devise",
"searchMembers": "Rechercher des membres", "searchMembers": "Rechercher des membres",
"noMembersFound": "Aucun membre trouvé", "noMembersFound": "Aucun membre trouvé",
"dateJoined": "Date d'inscription", "dateJoined": "Date d'inscription",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Sélectionnez les champs du panneau de droite à ajouter ici", "selectFieldsFromRightPannelToAddHere": "Sélectionnez les champs du panneau de droite à ajouter ici",
"noOptionsFound": "Aucune option trouvée", "noOptionsFound": "Aucune option trouvée",
"surveyFormSubmitConfirmMsg": "Êtes-vous sûr de vouloir envoyer ce formulaire ?", "surveyFormSubmitConfirmMsg": "Êtes-vous sûr de vouloir envoyer ce formulaire ?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Sélectionner une vue", "selectView": "Sélectionner une vue",
@ -598,7 +600,7 @@
"untitledToken": "Jeton sans titre", "untitledToken": "Jeton sans titre",
"tableName": "Nom du tableau", "tableName": "Nom du tableau",
"dashboardName": "Nom du tableau de bord", "dashboardName": "Nom du tableau de bord",
"createView": "Créer vue", "createView": "Créer une vue",
"creatingView": "Création de la vue", "creatingView": "Création de la vue",
"duplicateView": "Dupliquer la vue", "duplicateView": "Dupliquer la vue",
"duplicateGridView": "Dupliquer la vue Grille", "duplicateGridView": "Dupliquer la vue Grille",
@ -937,7 +939,7 @@
"clearMetadata": "Effacer les métadonnées", "clearMetadata": "Effacer les métadonnées",
"exportToFile": "Exporter vers le fichier", "exportToFile": "Exporter vers le fichier",
"changePwd": "Changer le mot de passe", "changePwd": "Changer le mot de passe",
"createView": "Créer vue", "createView": "Créer une vue",
"shareView": "Partager la vue", "shareView": "Partager la vue",
"findRowByCodeScan": "Find row by scan", "findRowByCodeScan": "Find row by scan",
"fillByCodeScan": "Remplir avec un scanner", "fillByCodeScan": "Remplir avec un scanner",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Pile d'effondrement", "collapseStack": "Pile d'effondrement",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Supprimer la pile", "deleteStack": "Supprimer la pile",
"stackedBy": "Empilés par", "stackedBy": "Empilés par",
"chooseGroupingField": "Choisir un champ de regroupement", "chooseGroupingField": "Choisir un champ de regroupement",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Le champ de type Lookup n'est pas supporté pour les relations de non appartenance", "lookupNonBtWarning": "Le champ de type Lookup n'est pas supporté pour les relations de non appartenance",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "Vous n'avez aucun lien défini pour ajouter un champ Lookup",
"recordCouldNotBeFound": "L'enregistrement n'a pas pu être trouvé", "recordCouldNotBeFound": "L'enregistrement n'a pas pu être trouvé",
"invalidPhoneNumber": "Numéro de téléphone invalide", "invalidPhoneNumber": "Numéro de téléphone invalide",
"pageSizeChanged": "Taille de la page modifiée", "pageSizeChanged": "Taille de la page modifiée",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "Aucun enregistrement lié", "noRecordsLinked": "Aucun enregistrement lié",
"noLinkedRecords": "Aucun enregistrement lié", "noLinkedRecords": "Aucun enregistrement lié",
"recordsLinked": "enregistrements liés", "recordsLinked": "enregistrements liés",
"acceptOnlyValid": "N'accepte que les {type} valides", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Créer des jetons d'API personnels à utiliser dans une automatisation ou des applications externes.", "apiTokenCreate": "Créer des jetons d'API personnels à utiliser dans une automatisation ou des applications externes.",
"selectFieldToSort": "Sélectionner le champ de tri", "selectFieldToSort": "Sélectionner le champ de tri",
"selectFieldToGroup": "Sélectionner le champ de regroupement", "selectFieldToGroup": "Sélectionner le champ de regroupement",
@ -1519,7 +1524,7 @@
"theAcceptedFileTypesAreXlsXlsxXlsmOdsOts": "Les types de fichiers acceptés sont .xls, .xlsx, .xlsm, .ods, .ots.", "theAcceptedFileTypesAreXlsXlsxXlsmOdsOts": "Les types de fichiers acceptés sont .xls, .xlsx, .xlsm, .ods, .ots.",
"parameterKeyCannotBeEmpty": "La clé de paramètre ne peut pas être vide", "parameterKeyCannotBeEmpty": "La clé de paramètre ne peut pas être vide",
"duplicateParameterKeysAreNotAllowed": "Les doublons de clés de paramètres ne sont pas autorisés", "duplicateParameterKeysAreNotAllowed": "Les doublons de clés de paramètres ne sont pas autorisés",
"fieldRequired": "This field cannot be empty.", "fieldRequired": "{value} ne peut pas être vide.",
"projectNotAccessible": "Projet non accessible", "projectNotAccessible": "Projet non accessible",
"copyToClipboardError": "Échec de la copie dans le presse-papiers", "copyToClipboardError": "Échec de la copie dans le presse-papiers",
"pasteFromClipboardError": "Échec du collage à partir du presse-papiers", "pasteFromClipboardError": "Échec du collage à partir du presse-papiers",

19
packages/nc-gui/lang/he.json

@ -210,7 +210,8 @@
"set": "הגדר", "set": "הגדר",
"format": "פורמט", "format": "פורמט",
"colour": "צבע", "colour": "צבע",
"use": "השתמש" "use": "השתמש",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "בעלים", "owner": "בעלים",
@ -336,8 +337,8 @@
"parameter": "פרמטר", "parameter": "פרמטר",
"headers": "כותרות", "headers": "כותרות",
"parameterName": "שם פרמטר", "parameterName": "שם פרמטר",
"currencyLocale": "אזור", "currencyLocale": "Currency Locale",
"currencyCode": "קוד", "currencyCode": "Currency Code",
"searchMembers": "חיפוש חברים", "searchMembers": "חיפוש חברים",
"noMembersFound": "לא נמצאו חברים", "noMembersFound": "לא נמצאו חברים",
"dateJoined": "תאריך הצטרפות", "dateJoined": "תאריך הצטרפות",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "בחר שדות מהפאנל הימני להוסיף כאן", "selectFieldsFromRightPannelToAddHere": "בחר שדות מהפאנל הימני להוסיף כאן",
"noOptionsFound": "לא נמצאו אפשרויות", "noOptionsFound": "לא נמצאו אפשרויות",
"surveyFormSubmitConfirmMsg": "האם אתה בטוח שברצונך לשלוח את הטופס הזה?", "surveyFormSubmitConfirmMsg": "האם אתה בטוח שברצונך לשלוח את הטופס הזה?",
"noResultsMatchedYourSearch": "לא נמצאו תוצאות התואמות את החיפוש שלך." "noResultsMatchedYourSearch": "לא נמצאו תוצאות התואמות את החיפוש שלך.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "שם הכותרת", "headerName": "שם הכותרת",
"icon": "סמל", "icon": "סמל",
"max": "מקסימום", "max": "מקסימום",
"enableRichText": "אפשר טקסט עשיר", "enableRichText": "Enable Rich Text",
"idColon": "מזהה:", "idColon": "מזהה:",
"copiedRecordURL": "כתובת URL של הרשומה הועתקה", "copiedRecordURL": "כתובת URL של הרשומה הועתקה",
"copyRecordURL": "העתק כתובת URL של הרשומה", "copyRecordURL": "העתק כתובת URL של הרשומה",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "כווץ מחסנית", "collapseStack": "כווץ מחסנית",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "מחק מחסנית", "deleteStack": "מחק מחסנית",
"stackedBy": "מחוסנית על ידי", "stackedBy": "מחוסנית על ידי",
"chooseGroupingField": "בחר שדה לקיבוץ", "chooseGroupingField": "בחר שדה לקיבוץ",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "שאילתה מקורטת מופעלת", "optimizedQueryEnabled": "שאילתה מקורטת מופעלת",
"lookupNonBtWarning": "שדה החיפוש לא נתמך לאינטרקציה מחוץ ליחס 'נמצא ב'", "lookupNonBtWarning": "שדה החיפוש לא נתמך לאינטרקציה מחוץ ליחס 'נמצא ב'",
"invalidTime": "זמן לא חוקי", "invalidTime": "זמן לא חוקי",
"linkColumnClearNotSupportedYet": "אין לך שום קישורים נתמכים עבור {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "הרשומה לא נמצאה", "recordCouldNotBeFound": "הרשומה לא נמצאה",
"invalidPhoneNumber": "מספר טלפון לא חוקי", "invalidPhoneNumber": "מספר טלפון לא חוקי",
"pageSizeChanged": "גודל העמוד השתנה", "pageSizeChanged": "גודל העמוד השתנה",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "לא נקשרו רשומות", "noRecordsLinked": "לא נקשרו רשומות",
"noLinkedRecords": "אין רשומות מקושרות", "noLinkedRecords": "אין רשומות מקושרות",
"recordsLinked": "רשומות מקושרות", "recordsLinked": "רשומות מקושרות",
"acceptOnlyValid": "קבל רק {type} חוקי", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "צור אסימון API אישי כדי להשתמש באוטומציה או ביישומי חיצוניים.", "apiTokenCreate": "צור אסימון API אישי כדי להשתמש באוטומציה או ביישומי חיצוניים.",
"selectFieldToSort": "בחר שדה למיון", "selectFieldToSort": "בחר שדה למיון",
"selectFieldToGroup": "בחר שדה לקיבוץ", "selectFieldToGroup": "בחר שדה לקיבוץ",

19
packages/nc-gui/lang/hi.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Collapse Stack", "collapseStack": "Collapse Stack",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Delete Stack", "deleteStack": "Delete Stack",
"stackedBy": "Stacked By", "stackedBy": "Stacked By",
"chooseGroupingField": "Choose a Grouping Field", "chooseGroupingField": "Choose a Grouping Field",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/hr.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Sakrij hrpu (stack)", "collapseStack": "Sakrij hrpu (stack)",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Izbriši hrpu (stack)", "deleteStack": "Izbriši hrpu (stack)",
"stackedBy": "Spojeno prema", "stackedBy": "Spojeno prema",
"chooseGroupingField": "Odaberite polje za grupiranje", "chooseGroupingField": "Odaberite polje za grupiranje",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/id.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Tumpukan Runtuh", "collapseStack": "Tumpukan Runtuh",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Hapus Tumpukan", "deleteStack": "Hapus Tumpukan",
"stackedBy": "Ditumpuk oleh", "stackedBy": "Ditumpuk oleh",
"chooseGroupingField": "Pilih Bidang Pengelompokan", "chooseGroupingField": "Pilih Bidang Pengelompokan",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

25
packages/nc-gui/lang/it.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parametro", "parameter": "Parametro",
"headers": "Intestazioni", "headers": "Intestazioni",
"parameterName": "Nome Parametro", "parameterName": "Nome Parametro",
"currencyLocale": "Locale", "currencyLocale": "Valuta Locale",
"currencyCode": "Code", "currencyCode": "Codice valuta",
"searchMembers": "Cerca membri", "searchMembers": "Cerca membri",
"noMembersFound": "Nessun membro trovato", "noMembersFound": "Nessun membro trovato",
"dateJoined": "Data iscrizione", "dateJoined": "Data iscrizione",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Nome dell'intestazione", "headerName": "Nome dell'intestazione",
"icon": "Icona", "icon": "Icona",
"max": "Massimo", "max": "Massimo",
"enableRichText": "Enable rich text", "enableRichText": "Abilita Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "URL del record copiato", "copiedRecordURL": "URL del record copiato",
"copyRecordURL": "Copia URL Record", "copyRecordURL": "Copia URL Record",
@ -598,7 +600,7 @@
"untitledToken": "Token senza titolo", "untitledToken": "Token senza titolo",
"tableName": "Nome della tabella", "tableName": "Nome della tabella",
"dashboardName": "Nome dashboard", "dashboardName": "Nome dashboard",
"createView": "Crea vista", "createView": "Crea una vista",
"creatingView": "Creazione vista", "creatingView": "Creazione vista",
"duplicateView": "Duplica vista", "duplicateView": "Duplica vista",
"duplicateGridView": "Duplica Visualizzazione Griglia", "duplicateGridView": "Duplica Visualizzazione Griglia",
@ -937,7 +939,7 @@
"clearMetadata": "Cancella metadati", "clearMetadata": "Cancella metadati",
"exportToFile": "Esporta su file", "exportToFile": "Esporta su file",
"changePwd": "Cambia password", "changePwd": "Cambia password",
"createView": "Crea vista", "createView": "Crea una vista",
"shareView": "Condividi vista", "shareView": "Condividi vista",
"findRowByCodeScan": "Find row by scan", "findRowByCodeScan": "Find row by scan",
"fillByCodeScan": "Riempi per scansione", "fillByCodeScan": "Riempi per scansione",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Collasso della pila", "collapseStack": "Collasso della pila",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Cancellare la pila", "deleteStack": "Cancellare la pila",
"stackedBy": "Impilato da", "stackedBy": "Impilato da",
"chooseGroupingField": "Scegliere un campo di raggruppamento", "chooseGroupingField": "Scegliere un campo di raggruppamento",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "La query ottimizzata è abilitata", "optimizedQueryEnabled": "La query ottimizzata è abilitata",
"lookupNonBtWarning": "Il campo Lookup non è supportato per la relazione non-appartenente", "lookupNonBtWarning": "Il campo Lookup non è supportato per la relazione non-appartenente",
"invalidTime": "Ora non valida", "invalidTime": "Ora non valida",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "Non ci sono collegamenti supportati per Lookup",
"recordCouldNotBeFound": "Riga non trovata", "recordCouldNotBeFound": "Riga non trovata",
"invalidPhoneNumber": "Numero di telefono non valido", "invalidPhoneNumber": "Numero di telefono non valido",
"pageSizeChanged": "Dimensione pagina modificata", "pageSizeChanged": "Dimensione pagina modificata",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "Nessun record collegato", "noRecordsLinked": "Nessun record collegato",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "record collegati", "recordsLinked": "record collegati",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accetta solo",
"apiTokenCreate": "Creare token API personali da utilizzare nell'automazione o in applicazioni esterne.", "apiTokenCreate": "Creare token API personali da utilizzare nell'automazione o in applicazioni esterne.",
"selectFieldToSort": "Selezionare il campo da ordinare", "selectFieldToSort": "Selezionare il campo da ordinare",
"selectFieldToGroup": "Selezionare il campo da raggruppare", "selectFieldToGroup": "Selezionare il campo da raggruppare",
@ -1519,7 +1524,7 @@
"theAcceptedFileTypesAreXlsXlsxXlsmOdsOts": "I tipi di file accettati sono .xls, .xlsx, .xlsm, .ods, .ots", "theAcceptedFileTypesAreXlsXlsxXlsmOdsOts": "I tipi di file accettati sono .xls, .xlsx, .xlsm, .ods, .ots",
"parameterKeyCannotBeEmpty": "La chiave del parametro non può essere vuota", "parameterKeyCannotBeEmpty": "La chiave del parametro non può essere vuota",
"duplicateParameterKeysAreNotAllowed": "Le chiavi dei parametri duplicate non sono consentite", "duplicateParameterKeysAreNotAllowed": "Le chiavi dei parametri duplicate non sono consentite",
"fieldRequired": "This field cannot be empty.", "fieldRequired": "{value} non può essere vuoto.",
"projectNotAccessible": "Progetto non accessibile", "projectNotAccessible": "Progetto non accessibile",
"copyToClipboardError": "Non è riuscito a copiare negli appunti", "copyToClipboardError": "Non è riuscito a copiare negli appunti",
"pasteFromClipboardError": "Impossibile incollare dagli appunti", "pasteFromClipboardError": "Impossibile incollare dagli appunti",

19
packages/nc-gui/lang/ja.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "スタックを折りたたむ", "collapseStack": "スタックを折りたたむ",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "スタックを削除", "deleteStack": "スタックを削除",
"stackedBy": "スタック", "stackedBy": "スタック",
"chooseGroupingField": "グループ化するフィールドを選択", "chooseGroupingField": "グループ化するフィールドを選択",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

21
packages/nc-gui/lang/ko.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "매개 변수", "parameter": "매개 변수",
"headers": "제목", "headers": "제목",
"parameterName": "매개변수 이름", "parameterName": "매개변수 이름",
"currencyLocale": "Locale", "currencyLocale": "통화 로케일",
"currencyCode": "Code", "currencyCode": "통화 코드",
"searchMembers": "회원 검색", "searchMembers": "회원 검색",
"noMembersFound": "회원을 찾을 수 없습니다.", "noMembersFound": "회원을 찾을 수 없습니다.",
"dateJoined": "가입일", "dateJoined": "가입일",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "헤더 이름", "headerName": "헤더 이름",
"icon": "아이콘", "icon": "아이콘",
"max": "최대", "max": "최대",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "ID:", "idColon": "ID:",
"copiedRecordURL": "레코드 URL을 복사했습니다.", "copiedRecordURL": "레코드 URL을 복사했습니다.",
"copyRecordURL": "레코드 URL 복사", "copyRecordURL": "레코드 URL 복사",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "스택 축소", "collapseStack": "스택 축소",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "스택 삭제", "deleteStack": "스택 삭제",
"stackedBy": "스택 기준", "stackedBy": "스택 기준",
"chooseGroupingField": "그룹화 필드 선택", "chooseGroupingField": "그룹화 필드 선택",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "최적화된 쿼리가 활성화되었습니다", "optimizedQueryEnabled": "최적화된 쿼리가 활성화되었습니다",
"lookupNonBtWarning": "Lookup 필드는 Belongs To 관계에서만 사용할 수 있습니다.", "lookupNonBtWarning": "Lookup 필드는 Belongs To 관계에서만 사용할 수 있습니다.",
"invalidTime": "유효하지 않은 시간형식입니다.", "invalidTime": "유효하지 않은 시간형식입니다.",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "링크 열의 내용을 지우는 것은 아직 지원되지 않습니다.",
"recordCouldNotBeFound": "레코드를 찾을 수 없습니다.", "recordCouldNotBeFound": "레코드를 찾을 수 없습니다.",
"invalidPhoneNumber": "유효하지 않은 전화번호입니다.", "invalidPhoneNumber": "유효하지 않은 전화번호입니다.",
"pageSizeChanged": "페이지 크기가 변경되었습니다.", "pageSizeChanged": "페이지 크기가 변경되었습니다.",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "레코드가 연결되지 않았습니다.", "noRecordsLinked": "레코드가 연결되지 않았습니다.",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "레코드가 연결되었습니다.", "recordsLinked": "레코드가 연결되었습니다.",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "유효한 값만 허용",
"apiTokenCreate": "새 API 토큰 생성", "apiTokenCreate": "새 API 토큰 생성",
"selectFieldToSort": "정렬할 필드 선택", "selectFieldToSort": "정렬할 필드 선택",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",
@ -1519,7 +1524,7 @@
"theAcceptedFileTypesAreXlsXlsxXlsmOdsOts": "허용되는 파일 형식은 .xls, .xlsx, .xlsm, .ods, .ots입니다", "theAcceptedFileTypesAreXlsXlsxXlsmOdsOts": "허용되는 파일 형식은 .xls, .xlsx, .xlsm, .ods, .ots입니다",
"parameterKeyCannotBeEmpty": "매개 변수 키는 비워 둘 수 없습니다.", "parameterKeyCannotBeEmpty": "매개 변수 키는 비워 둘 수 없습니다.",
"duplicateParameterKeysAreNotAllowed": "중복 매개 변수 키는 허용되지 않습니다.", "duplicateParameterKeysAreNotAllowed": "중복 매개 변수 키는 허용되지 않습니다.",
"fieldRequired": "This field cannot be empty.", "fieldRequired": "{value}은(는) 비워 둘 수 없습니다.",
"projectNotAccessible": "프로젝트에 액세스할 수 없습니다.", "projectNotAccessible": "프로젝트에 액세스할 수 없습니다.",
"copyToClipboardError": "클립 보드에 복사할 수 없습니다.", "copyToClipboardError": "클립 보드에 복사할 수 없습니다.",
"pasteFromClipboardError": "Failed to paste from clipboard", "pasteFromClipboardError": "Failed to paste from clipboard",

19
packages/nc-gui/lang/lv.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Virsraksta nosaukums", "headerName": "Virsraksta nosaukums",
"icon": "Ikons", "icon": "Ikons",
"max": "Maksimums", "max": "Maksimums",
"enableRichText": "Enable rich text", "enableRichText": "Ieslēgt bagātīgu tekstu",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Kopēts ieraksta URL", "copiedRecordURL": "Kopēts ieraksta URL",
"copyRecordURL": "Kopēt ieraksta URL", "copyRecordURL": "Kopēt ieraksta URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Salocīt kaudze", "collapseStack": "Salocīt kaudze",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Izdzēst kaudze", "deleteStack": "Izdzēst kaudze",
"stackedBy": "Sakrautas ar", "stackedBy": "Sakrautas ar",
"chooseGroupingField": "Izvēlieties grupēšanas lauku", "chooseGroupingField": "Izvēlieties grupēšanas lauku",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/nl.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Stapel samenvouwen", "collapseStack": "Stapel samenvouwen",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Stapel verwijderen", "deleteStack": "Stapel verwijderen",
"stackedBy": "Gestapeld door", "stackedBy": "Gestapeld door",
"chooseGroupingField": "Kies een groepeerveld", "chooseGroupingField": "Kies een groepeerveld",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/no.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Collapse Stack", "collapseStack": "Collapse Stack",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Delete Stack", "deleteStack": "Delete Stack",
"stackedBy": "Stacked By", "stackedBy": "Stacked By",
"chooseGroupingField": "Choose a Grouping Field", "chooseGroupingField": "Choose a Grouping Field",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

63
packages/nc-gui/lang/pl.json

@ -98,7 +98,7 @@
"bulkUpdate": "Masowa aktualizacja", "bulkUpdate": "Masowa aktualizacja",
"deleting": "Usuwanie", "deleting": "Usuwanie",
"update": "Aktualizuj", "update": "Aktualizuj",
"updating": "Updating", "updating": "Aktualizacja",
"rename": "Zmień nazwę", "rename": "Zmień nazwę",
"reload": "Przeładuj", "reload": "Przeładuj",
"reset": "Zresetuj", "reset": "Zresetuj",
@ -206,11 +206,12 @@
"apply": "Zastosuj", "apply": "Zastosuj",
"text": "Tekst", "text": "Tekst",
"appearance": "Wygląd", "appearance": "Wygląd",
"now": "Now", "now": "Teraz",
"set": "Set", "set": "Ustaw",
"format": "Format", "format": "Formatowanie",
"colour": "Colour", "colour": "Kolor",
"use": "Use" "use": "Użyj",
"stack": "Stos"
}, },
"objects": { "objects": {
"owner": "Właściciel", "owner": "Właściciel",
@ -336,8 +337,8 @@
"parameter": "Parametr", "parameter": "Parametr",
"headers": "Nagłówki", "headers": "Nagłówki",
"parameterName": "Nazwa parametru", "parameterName": "Nazwa parametru",
"currencyLocale": "Locale", "currencyLocale": "Lokalizacja waluty",
"currencyCode": "Code", "currencyCode": "Kod waluty",
"searchMembers": "Szukaj członków", "searchMembers": "Szukaj członków",
"noMembersFound": "Nie znaleziono członków", "noMembersFound": "Nie znaleziono członków",
"dateJoined": "Data dołączenia", "dateJoined": "Data dołączenia",
@ -451,13 +452,14 @@
"selectFieldsFromRightPannelToAddHere": "Wybierz pole z panelu po prawej stronie aby tutaj dodać", "selectFieldsFromRightPannelToAddHere": "Wybierz pole z panelu po prawej stronie aby tutaj dodać",
"noOptionsFound": "Nie znaleziono opcji", "noOptionsFound": "Nie znaleziono opcji",
"surveyFormSubmitConfirmMsg": "Czy na pewno chcesz przesłać ten formularz?", "surveyFormSubmitConfirmMsg": "Czy na pewno chcesz przesłać ten formularz?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Wygląda na to, że ten stos nie ma żadnych rekordów"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Wybierz widok",
"connectionDetails": "Connection Details", "connectionDetails": "Szczegóły połączenia",
"metaSync": "Meta Sync", "metaSync": "Synchronizacja Meta",
"mention": "Mention", "mention": "Wzmianka",
"today": "Dziś", "today": "Dziś",
"workspace": "Obszar roboczy", "workspace": "Obszar roboczy",
"txt": "Wartość rekordu TXT", "txt": "Wartość rekordu TXT",
@ -493,7 +495,7 @@
"userOptions": "Opcje użytkownika", "userOptions": "Opcje użytkownika",
"deleteThisOrganization": "Usuń tę organizację", "deleteThisOrganization": "Usuń tę organizację",
"dangerZone": "Strefa zagrożenia", "dangerZone": "Strefa zagrożenia",
"childView": "Child View", "childView": "Pole podrzędne",
"selectYear": "Wybierz rok", "selectYear": "Wybierz rok",
"save": "Zapisz", "save": "Zapisz",
"cancel": "Anuluj", "cancel": "Anuluj",
@ -543,7 +545,7 @@
"headerName": "Nazwa nagłówka", "headerName": "Nazwa nagłówka",
"icon": "Ikona", "icon": "Ikona",
"max": "Maks", "max": "Maks",
"enableRichText": "Enable rich text", "enableRichText": "Włącz Edytor Tekstu",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Skopiowano URL rekordu", "copiedRecordURL": "Skopiowano URL rekordu",
"copyRecordURL": "Kopiuj URL rekordu", "copyRecordURL": "Kopiuj URL rekordu",
@ -774,16 +776,16 @@
"limitOptions": "Ogranicz opcje", "limitOptions": "Ogranicz opcje",
"limitOptionsSubtext": "Ogranicz opcje widoczne dla użytkowników, wybierając dostępne opcje", "limitOptionsSubtext": "Ogranicz opcje widoczne dla użytkowników, wybierając dostępne opcje",
"clearSelection": "Wyczyść wybór", "clearSelection": "Wyczyść wybór",
"displayAsProgress": "Display as progress", "displayAsProgress": "Wyświetl postęp",
"relationType": "Relation type", "relationType": "Typ relacji",
"showThousandsSeparator": "Show thousands separator", "showThousandsSeparator": "Pokaż separator tysięcy",
"signUpForFree": "Sign up for free", "signUpForFree": "Załóż darmowe konto",
"coverImageField": "Cover image field", "coverImageField": "Cover image field",
"fitImage": "Fit image", "fitImage": "Dopasuj zdjęcie",
"coverImageArea": "Cover image" "coverImageArea": "Obraz okładki"
}, },
"activity": { "activity": {
"hideWeekends": "Hide weekends", "hideWeekends": "Ukryj weekendy",
"renameBase": "Zmień nazwę tabeli", "renameBase": "Zmień nazwę tabeli",
"renameWorkspace": "Zmień nazwę przestrzeni roboczej", "renameWorkspace": "Zmień nazwę przestrzeni roboczej",
"deactivate": "Deaktywuj", "deactivate": "Deaktywuj",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Zwiń stos", "collapseStack": "Zwiń stos",
"collapseAll": "Zwiń wszystkie",
"expandAll": "Rozwiń wszystko",
"renameStack": "Zmień nazwę stosu",
"deleteStack": "Usuń stos", "deleteStack": "Usuń stos",
"stackedBy": "Ułożone według", "stackedBy": "Ułożone według",
"chooseGroupingField": "Wybierz pole grupowania", "chooseGroupingField": "Wybierz pole grupowania",
@ -1119,7 +1124,7 @@
"searchOptions": "Opcje wyszukiwania" "searchOptions": "Opcje wyszukiwania"
}, },
"msg": { "msg": {
"formulaNotSupported": "This function is unavailable for your database", "formulaNotSupported": "Ta funkcja jest niedostępna dla Twojej bazy danych",
"controlOrgAppearance": "Kontroluj nazwę i wygląd organizacji.", "controlOrgAppearance": "Kontroluj nazwę i wygląd organizacji.",
"addCompanyDomains": "Dodaj domeny firmy, aby ograniczyć dostęp od niechcianych użytkowników.", "addCompanyDomains": "Dodaj domeny firmy, aby ograniczyć dostęp od niechcianych użytkowników.",
"restrictUsersFromSharing": "Ogranicz użytkowników z możliwości publicznego udostępniania baz danych.", "restrictUsersFromSharing": "Ogranicz użytkowników z możliwości publicznego udostępniania baz danych.",
@ -1133,13 +1138,13 @@
"thisSharedViewIsProtected": "Ten współdzielony widok jest chroniony", "thisSharedViewIsProtected": "Ten współdzielony widok jest chroniony",
"successfullySubmittedFormData": "Pomyślnie przesłano dane formularza", "successfullySubmittedFormData": "Pomyślnie przesłano dane formularza",
"formViewNotSupportedOnMobile": "Widok formularza nie jest obsługiwany na urządzeniach mobilnych", "formViewNotSupportedOnMobile": "Widok formularza nie jest obsługiwany na urządzeniach mobilnych",
"calendarViewNotSupportedOnMobile": "Calendar view is not supported on mobile", "calendarViewNotSupportedOnMobile": "Widok formularza nie jest obsługiwany na urządzeniach mobilnych",
"newFormWillBeLoaded": "Nowy formularz zostanie załadowany po {seconds} sekundach", "newFormWillBeLoaded": "Nowy formularz zostanie załadowany po {seconds} sekundach",
"optimizedQueryDisabled": "Zoptymalizowane zapytanie jest wyłączone", "optimizedQueryDisabled": "Zoptymalizowane zapytanie jest wyłączone",
"optimizedQueryEnabled": "Zoptymalizowane zapytanie jest włączone", "optimizedQueryEnabled": "Zoptymalizowane zapytanie jest włączone",
"lookupNonBtWarning": "Pole wyszukiwania nie jest obsługiwane dla relacji innych niż 'Należy do'", "lookupNonBtWarning": "Pole wyszukiwania nie jest obsługiwane dla relacji innych niż 'Należy do'",
"invalidTime": "Nieprawidłowy Czas", "invalidTime": "Nieprawidłowy Czas",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "Nie masz jeszcze żadnych obsługiwanych linków do pola Lookup",
"recordCouldNotBeFound": "Nie można znaleźć rekordu", "recordCouldNotBeFound": "Nie można znaleźć rekordu",
"invalidPhoneNumber": "Nieprawidłowy numer telefonu", "invalidPhoneNumber": "Nieprawidłowy numer telefonu",
"pageSizeChanged": "Zmieniono rozmiar strony", "pageSizeChanged": "Zmieniono rozmiar strony",
@ -1212,12 +1217,12 @@
"noRecordsLinked": "Żadne rekordy nie są powiązane", "noRecordsLinked": "Żadne rekordy nie są powiązane",
"noLinkedRecords": "Brak powiązanych rekordów", "noLinkedRecords": "Brak powiązanych rekordów",
"recordsLinked": "rekordy powiązane", "recordsLinked": "rekordy powiązane",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Akceptuje tylko",
"apiTokenCreate": "Utwórz osobiste tokeny API do użytku w automatyzacji lub zewnętrznych aplikacjach.", "apiTokenCreate": "Utwórz osobiste tokeny API do użytku w automatyzacji lub zewnętrznych aplikacjach.",
"selectFieldToSort": "Wybierz pole do sortowania", "selectFieldToSort": "Wybierz pole do sortowania",
"selectFieldToGroup": "Wybierz pole do grupowania", "selectFieldToGroup": "Wybierz pole do grupowania",
"thereAreNoRecordsInTable": "Nie ma rekordów w tabeli", "thereAreNoRecordsInTable": "Nie ma rekordów w tabeli",
"noRecordsAvailForLinking": "No records are currently available for linking", "noRecordsAvailForLinking": "Obecnie nie są dostępne żadne rekordy do powiązania",
"createWebhookMsg1": "Rozpocznij pracę z webhookami!", "createWebhookMsg1": "Rozpocznij pracę z webhookami!",
"createWebhookMsg2": "Zasil automatyzację. Otrzymuj powiadomienia jak tylko pojawią się zmiany w Twoich danych", "createWebhookMsg2": "Zasil automatyzację. Otrzymuj powiadomienia jak tylko pojawią się zmiany w Twoich danych",
"areYouSureUWantTo": "Czy na pewno chcesz usunąć następujące", "areYouSureUWantTo": "Czy na pewno chcesz usunąć następujące",
@ -1431,7 +1436,7 @@
"preventHideAllOptions": "Nie możesz ukryć wszystkich opcji, jeśli pole jest wymagane" "preventHideAllOptions": "Nie możesz ukryć wszystkich opcji, jeśli pole jest wymagane"
}, },
"error": { "error": {
"errorLoadingRecord": "Error loading record data", "errorLoadingRecord": "Błąd ładowania danych",
"fetchingCalendarData": "Błąd podczas pobierania danych kalendarza", "fetchingCalendarData": "Błąd podczas pobierania danych kalendarza",
"fetchingActiveDates": "Błąd podczas pobierania aktywnych dat", "fetchingActiveDates": "Błąd podczas pobierania aktywnych dat",
"scopesRequired": "Wymagane zakresy", "scopesRequired": "Wymagane zakresy",
@ -1519,7 +1524,7 @@
"theAcceptedFileTypesAreXlsXlsxXlsmOdsOts": "Akceptowane typy plików to: .xls, .xlsx, .xlsm, .ods, .ots", "theAcceptedFileTypesAreXlsXlsxXlsmOdsOts": "Akceptowane typy plików to: .xls, .xlsx, .xlsm, .ods, .ots",
"parameterKeyCannotBeEmpty": "Klucz parametru nie może być pusty", "parameterKeyCannotBeEmpty": "Klucz parametru nie może być pusty",
"duplicateParameterKeysAreNotAllowed": "Zduplikowane klucze parametrów są niedozwolone", "duplicateParameterKeysAreNotAllowed": "Zduplikowane klucze parametrów są niedozwolone",
"fieldRequired": "This field cannot be empty.", "fieldRequired": "{value} nie może być puste.",
"projectNotAccessible": "Projekt niedostępny", "projectNotAccessible": "Projekt niedostępny",
"copyToClipboardError": "Nie udało się skopiować do schowka", "copyToClipboardError": "Nie udało się skopiować do schowka",
"pasteFromClipboardError": "Nie udało się wkleić ze schowka", "pasteFromClipboardError": "Nie udało się wkleić ze schowka",

19
packages/nc-gui/lang/pt.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parâmetro", "parameter": "Parâmetro",
"headers": "Cabeçalhos", "headers": "Cabeçalhos",
"parameterName": "Nome do parâmetro", "parameterName": "Nome do parâmetro",
"currencyLocale": "Locale", "currencyLocale": "Moeda local",
"currencyCode": "Code", "currencyCode": "Código de moeda",
"searchMembers": "Procurar membros", "searchMembers": "Procurar membros",
"noMembersFound": "Nenhum membro encontrado", "noMembersFound": "Nenhum membro encontrado",
"dateJoined": "Data de adesão", "dateJoined": "Data de adesão",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Seleccione campos do painel direito para adicionar aqui", "selectFieldsFromRightPannelToAddHere": "Seleccione campos do painel direito para adicionar aqui",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Nome do cabeçalho", "headerName": "Nome do cabeçalho",
"icon": "Ícone", "icon": "Ícone",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Ativar texto rico",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Pilha de Colapso", "collapseStack": "Pilha de Colapso",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Apagar pilha", "deleteStack": "Apagar pilha",
"stackedBy": "Empilhado por", "stackedBy": "Empilhado por",
"chooseGroupingField": "Escolha um Campo de Agrupamento", "chooseGroupingField": "Escolha um Campo de Agrupamento",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/pt_BR.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Recolher pilha", "collapseStack": "Recolher pilha",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Apagar pilha", "deleteStack": "Apagar pilha",
"stackedBy": "Empilhado por", "stackedBy": "Empilhado por",
"chooseGroupingField": "Escolha um Campo de Agrupamento", "chooseGroupingField": "Escolha um Campo de Agrupamento",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

23
packages/nc-gui/lang/ru.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Параметр", "parameter": "Параметр",
"headers": "Заголовки", "headers": "Заголовки",
"parameterName": "Имя параметра", "parameterName": "Имя параметра",
"currencyLocale": "Locale", "currencyLocale": "Валютная локаль",
"currencyCode": "Code", "currencyCode": "Код валюты",
"searchMembers": "Поиск участников", "searchMembers": "Поиск участников",
"noMembersFound": "Участников не найдено", "noMembersFound": "Участников не найдено",
"dateJoined": "Дата вступления", "dateJoined": "Дата вступления",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Название заголовка", "headerName": "Название заголовка",
"icon": "Иконка", "icon": "Иконка",
"max": "Макс", "max": "Макс",
"enableRichText": "Enable rich text", "enableRichText": "Включить насыщенный текст",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "URL скопированной записи", "copiedRecordURL": "URL скопированной записи",
"copyRecordURL": "Копировать URL записи", "copyRecordURL": "Копировать URL записи",
@ -598,7 +600,7 @@
"untitledToken": "Untitled token", "untitledToken": "Untitled token",
"tableName": "Название таблицы", "tableName": "Название таблицы",
"dashboardName": "Dashboard name", "dashboardName": "Dashboard name",
"createView": "Create View", "createView": "Create a View",
"creatingView": "Creating View", "creatingView": "Creating View",
"duplicateView": "Duplicate View", "duplicateView": "Duplicate View",
"duplicateGridView": "Duplicate Grid View", "duplicateGridView": "Duplicate Grid View",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Свернуть стек", "collapseStack": "Свернуть стек",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Удалить стек", "deleteStack": "Удалить стек",
"stackedBy": "Группировка по", "stackedBy": "Группировка по",
"chooseGroupingField": "Выберите поле группировки", "chooseGroupingField": "Выберите поле группировки",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",
@ -1519,7 +1524,7 @@
"theAcceptedFileTypesAreXlsXlsxXlsmOdsOts": "Допустимые типы файлов: .xls, .xlsx, .xlsm, .ods, .ots", "theAcceptedFileTypesAreXlsXlsxXlsmOdsOts": "Допустимые типы файлов: .xls, .xlsx, .xlsm, .ods, .ots",
"parameterKeyCannotBeEmpty": "Ключ параметра не может быть пустым", "parameterKeyCannotBeEmpty": "Ключ параметра не может быть пустым",
"duplicateParameterKeysAreNotAllowed": "Дублирование ключей параметров не допускается", "duplicateParameterKeysAreNotAllowed": "Дублирование ключей параметров не допускается",
"fieldRequired": "This field cannot be empty.", "fieldRequired": "{value} не может быть пустым.",
"projectNotAccessible": "Проект недоступен", "projectNotAccessible": "Проект недоступен",
"copyToClipboardError": "Не удалось скопировать в буфер обмена", "copyToClipboardError": "Не удалось скопировать в буфер обмена",
"pasteFromClipboardError": "Failed to paste from clipboard", "pasteFromClipboardError": "Failed to paste from clipboard",

19
packages/nc-gui/lang/sk.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Zrútiť zásobník", "collapseStack": "Zrútiť zásobník",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Odstrániť zásobník", "deleteStack": "Odstrániť zásobník",
"stackedBy": "Naskladané podľa", "stackedBy": "Naskladané podľa",
"chooseGroupingField": "Výber zoskupovacieho poľa", "chooseGroupingField": "Výber zoskupovacieho poľa",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/sl.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Zbijanje kupa", "collapseStack": "Zbijanje kupa",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Brisanje sklada", "deleteStack": "Brisanje sklada",
"stackedBy": "Zloženo po", "stackedBy": "Zloženo po",
"chooseGroupingField": "Izberite polje za združevanje", "chooseGroupingField": "Izberite polje za združevanje",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/sv.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Ikon", "icon": "Ikon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Kollaps av stapeln", "collapseStack": "Kollaps av stapeln",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Ta bort stacken", "deleteStack": "Ta bort stacken",
"stackedBy": "Staplade av", "stackedBy": "Staplade av",
"chooseGroupingField": "Välj ett grupperingsfält", "chooseGroupingField": "Välj ett grupperingsfält",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Ogiltigt telefonnummer", "invalidPhoneNumber": "Ogiltigt telefonnummer",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/th.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Collapse Stack", "collapseStack": "Collapse Stack",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Delete Stack", "deleteStack": "Delete Stack",
"stackedBy": "Stacked By", "stackedBy": "Stacked By",
"chooseGroupingField": "Choose a Grouping Field", "chooseGroupingField": "Choose a Grouping Field",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/tr.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parametre", "parameter": "Parametre",
"headers": "Üstbilgi", "headers": "Üstbilgi",
"parameterName": "Parametre Adı", "parameterName": "Parametre Adı",
"currencyLocale": "Locale", "currencyLocale": "Para Birimi Dili",
"currencyCode": "Code", "currencyCode": "Para Birimi",
"searchMembers": "Üyeleri Bul", "searchMembers": "Üyeleri Bul",
"noMembersFound": "Üye bulunamadı", "noMembersFound": "Üye bulunamadı",
"dateJoined": "Katılım Tarihi", "dateJoined": "Katılım Tarihi",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Buraya eklemek için sağ panelden alanları seçin", "selectFieldsFromRightPannelToAddHere": "Buraya eklemek için sağ panelden alanları seçin",
"noOptionsFound": "Seçenek bulunamadı", "noOptionsFound": "Seçenek bulunamadı",
"surveyFormSubmitConfirmMsg": "Bu formu göndermek istediğinizden emin misiniz?", "surveyFormSubmitConfirmMsg": "Bu formu göndermek istediğinizden emin misiniz?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Başlık Adı", "headerName": "Başlık Adı",
"icon": "Simge", "icon": "Simge",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Zengin Metni Etkinleştir",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Kayıt URL'si Kopyalandı", "copiedRecordURL": "Kayıt URL'si Kopyalandı",
"copyRecordURL": "Kayıt URL'sini Kopyala", "copyRecordURL": "Kayıt URL'sini Kopyala",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Yığını Daralt", "collapseStack": "Yığını Daralt",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Yığını Sil", "deleteStack": "Yığını Sil",
"stackedBy": "Tarafından Yığılmış", "stackedBy": "Tarafından Yığılmış",
"chooseGroupingField": "Bir Gruplama Alanı Seçin", "chooseGroupingField": "Bir Gruplama Alanı Seçin",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/uk.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Згорнути стек", "collapseStack": "Згорнути стек",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Видалити стек", "deleteStack": "Видалити стек",
"stackedBy": "Групувати по", "stackedBy": "Групувати по",
"chooseGroupingField": "Виберіть поле групування", "chooseGroupingField": "Виберіть поле групування",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

19
packages/nc-gui/lang/vi.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "Collapse Stack", "collapseStack": "Collapse Stack",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "Xóa ngăn xếp", "deleteStack": "Xóa ngăn xếp",
"stackedBy": "Stacked By", "stackedBy": "Stacked By",
"chooseGroupingField": "Choose a Grouping Field", "chooseGroupingField": "Choose a Grouping Field",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

21
packages/nc-gui/lang/zh-Hans.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "所有者", "owner": "所有者",
@ -336,8 +337,8 @@
"parameter": "参数", "parameter": "参数",
"headers": "请求头", "headers": "请求头",
"parameterName": "参数名称", "parameterName": "参数名称",
"currencyLocale": "Locale", "currencyLocale": "货币地区",
"currencyCode": "Code", "currencyCode": "货币代码",
"searchMembers": "搜索成员", "searchMembers": "搜索成员",
"noMembersFound": "未找到成员", "noMembersFound": "未找到成员",
"dateJoined": "加入日期", "dateJoined": "加入日期",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "从右侧面板选择要添加的字段", "selectFieldsFromRightPannelToAddHere": "从右侧面板选择要添加的字段",
"noOptionsFound": "未找到选项", "noOptionsFound": "未找到选项",
"surveyFormSubmitConfirmMsg": "您确定要提交吗?", "surveyFormSubmitConfirmMsg": "您确定要提交吗?",
"noResultsMatchedYourSearch": "您的搜索没有任何匹配结果" "noResultsMatchedYourSearch": "您的搜索没有任何匹配结果",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "标题名称", "headerName": "标题名称",
"icon": "图标", "icon": "图标",
"max": "最大", "max": "最大",
"enableRichText": "Enable rich text", "enableRichText": "启用富文本",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "复制的记录 URL", "copiedRecordURL": "复制的记录 URL",
"copyRecordURL": "复制该记录卡片的 URL", "copyRecordURL": "复制该记录卡片的 URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "折叠此类别", "collapseStack": "折叠此类别",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "删除此类别", "deleteStack": "删除此类别",
"stackedBy": "分类依据为", "stackedBy": "分类依据为",
"chooseGroupingField": "选择分组字段", "chooseGroupingField": "选择分组字段",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "已启用优化查询", "optimizedQueryEnabled": "已启用优化查询",
"lookupNonBtWarning": "非 \"所属关系 \"不支持查找字段", "lookupNonBtWarning": "非 \"所属关系 \"不支持查找字段",
"invalidTime": "无效时间", "invalidTime": "无效时间",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "您没有任何支持查找的链接",
"recordCouldNotBeFound": "找不到记录", "recordCouldNotBeFound": "找不到记录",
"invalidPhoneNumber": "无效电话号码", "invalidPhoneNumber": "无效电话号码",
"pageSizeChanged": "页面大小已更改", "pageSizeChanged": "页面大小已更改",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "没有链接记录", "noRecordsLinked": "没有链接记录",
"noLinkedRecords": "暂无引用数据", "noLinkedRecords": "暂无引用数据",
"recordsLinked": "链接的记录", "recordsLinked": "链接的记录",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "仅接受",
"apiTokenCreate": "创建个人 API tokens,以便在自动化或外部应用程序中使用。", "apiTokenCreate": "创建个人 API tokens,以便在自动化或外部应用程序中使用。",
"selectFieldToSort": "选择要排序的字段", "selectFieldToSort": "选择要排序的字段",
"selectFieldToGroup": "选择要分组的字段", "selectFieldToGroup": "选择要分组的字段",
@ -1519,7 +1524,7 @@
"theAcceptedFileTypesAreXlsXlsxXlsmOdsOts": "可接受的文件类型是 .xls, .xlsx, .xlsm, .ods, .ots", "theAcceptedFileTypesAreXlsXlsxXlsmOdsOts": "可接受的文件类型是 .xls, .xlsx, .xlsm, .ods, .ots",
"parameterKeyCannotBeEmpty": "参数键不能为空", "parameterKeyCannotBeEmpty": "参数键不能为空",
"duplicateParameterKeysAreNotAllowed": "不允许重复的参数键", "duplicateParameterKeysAreNotAllowed": "不允许重复的参数键",
"fieldRequired": "此字段不能为空。", "fieldRequired": "{value} 不能为空。",
"projectNotAccessible": "无权访问此项目", "projectNotAccessible": "无权访问此项目",
"copyToClipboardError": "未能复制到剪贴板", "copyToClipboardError": "未能复制到剪贴板",
"pasteFromClipboardError": "从剪贴板粘贴失败", "pasteFromClipboardError": "从剪贴板粘贴失败",

19
packages/nc-gui/lang/zh-Hant.json

@ -210,7 +210,8 @@
"set": "Set", "set": "Set",
"format": "Format", "format": "Format",
"colour": "Colour", "colour": "Colour",
"use": "Use" "use": "Use",
"stack": "Stack"
}, },
"objects": { "objects": {
"owner": "Owner", "owner": "Owner",
@ -336,8 +337,8 @@
"parameter": "Parameter", "parameter": "Parameter",
"headers": "Headers", "headers": "Headers",
"parameterName": "Parameter Name", "parameterName": "Parameter Name",
"currencyLocale": "Locale", "currencyLocale": "Currency Locale",
"currencyCode": "Code", "currencyCode": "Currency Code",
"searchMembers": "Search Members", "searchMembers": "Search Members",
"noMembersFound": "No members found", "noMembersFound": "No members found",
"dateJoined": "Date Joined", "dateJoined": "Date Joined",
@ -451,7 +452,8 @@
"selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here", "selectFieldsFromRightPannelToAddHere": "Select fields from right panel to add here",
"noOptionsFound": "No options found", "noOptionsFound": "No options found",
"surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?", "surveyFormSubmitConfirmMsg": "Are you sure you want to submit this form?",
"noResultsMatchedYourSearch": "Your search did not yield any matching results." "noResultsMatchedYourSearch": "Your search did not yield any matching results.",
"looksLikeThisStackIsEmpty": "Looks like this stack does not have any records"
}, },
"labels": { "labels": {
"selectView": "Select a View", "selectView": "Select a View",
@ -543,7 +545,7 @@
"headerName": "Header Name", "headerName": "Header Name",
"icon": "Icon", "icon": "Icon",
"max": "Max", "max": "Max",
"enableRichText": "Enable rich text", "enableRichText": "Enable Rich Text",
"idColon": "Id:", "idColon": "Id:",
"copiedRecordURL": "Copied Record URL", "copiedRecordURL": "Copied Record URL",
"copyRecordURL": "Copy Record URL", "copyRecordURL": "Copy Record URL",
@ -1006,6 +1008,9 @@
}, },
"kanban": { "kanban": {
"collapseStack": "摺疊此類別", "collapseStack": "摺疊此類別",
"collapseAll": "Collapse all",
"expandAll": "Expand all",
"renameStack": "Rename stack",
"deleteStack": "刪除此類別", "deleteStack": "刪除此類別",
"stackedBy": "分類依據", "stackedBy": "分類依據",
"chooseGroupingField": "選擇一個分組欄位", "chooseGroupingField": "選擇一個分組欄位",
@ -1139,7 +1144,7 @@
"optimizedQueryEnabled": "Optimized query is enabled", "optimizedQueryEnabled": "Optimized query is enabled",
"lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation", "lookupNonBtWarning": "Lookup field is not supported for non-Belongs to relation",
"invalidTime": "Invalid Time", "invalidTime": "Invalid Time",
"linkColumnClearNotSupportedYet": "You don't have any supported links for {type}", "linkColumnClearNotSupportedYet": "You don't have any supported links for Lookup",
"recordCouldNotBeFound": "Record could not be found", "recordCouldNotBeFound": "Record could not be found",
"invalidPhoneNumber": "Invalid phone number", "invalidPhoneNumber": "Invalid phone number",
"pageSizeChanged": "Page size changed", "pageSizeChanged": "Page size changed",
@ -1212,7 +1217,7 @@
"noRecordsLinked": "No records linked", "noRecordsLinked": "No records linked",
"noLinkedRecords": "No linked records", "noLinkedRecords": "No linked records",
"recordsLinked": "records linked", "recordsLinked": "records linked",
"acceptOnlyValid": "Accept only valid {type}", "acceptOnlyValid": "Accepts only",
"apiTokenCreate": "Create personal API tokens to use in automation or external apps.", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.",
"selectFieldToSort": "Select Field to Sort", "selectFieldToSort": "Select Field to Sort",
"selectFieldToGroup": "Select Field to Group", "selectFieldToGroup": "Select Field to Group",

2
packages/nc-gui/package.json

@ -76,7 +76,7 @@
"marked": "^4.3.0", "marked": "^4.3.0",
"monaco-editor": "^0.45.0", "monaco-editor": "^0.45.0",
"monaco-sql-languages": "^0.11.0", "monaco-sql-languages": "^0.11.0",
"nocodb-sdk": "0.250.1", "nocodb-sdk": "workspace:^",
"papaparse": "^5.4.1", "papaparse": "^5.4.1",
"parse-github-url": "^1.0.2", "parse-github-url": "^1.0.2",
"pinia": "^2.1.7", "pinia": "^2.1.7",

3
packages/noco-docs/docs/080.records/030.expand-record.md

@ -75,8 +75,7 @@ In comments list of an expanded form,
![expand record comment](/img/v2/records/expand-record-comments-edit-3.png) ![expand record comment](/img/v2/records/expand-record-comments-edit-3.png)
:::note :::note
You can only edit your own comments. You cannot delete a comment, but can edit it to remove the content. You can only edit your own comments. Changes to comments are also recorded in the audit log.
Changes to comments are also recorded in the audit log.
::: :::
## Record Actions ## Record Actions

2
packages/nocodb/package.json

@ -137,7 +137,7 @@
"ncp": "^2.0.0", "ncp": "^2.0.0",
"nestjs-kafka": "^1.0.6", "nestjs-kafka": "^1.0.6",
"nestjs-throttler-storage-redis": "^0.4.4", "nestjs-throttler-storage-redis": "^0.4.4",
"nocodb-sdk": "0.250.1", "nocodb-sdk": "workspace:^",
"nodemailer": "^6.9.13", "nodemailer": "^6.9.13",
"object-hash": "^3.0.0", "object-hash": "^3.0.0",
"object-sizeof": "^2.6.4", "object-sizeof": "^2.6.4",

21
packages/nocodb/src/db/BaseModelSqlv2.ts

@ -3850,7 +3850,6 @@ class BaseModelSqlv2 {
let preInsertOps: (() => Promise<string>)[] = []; let preInsertOps: (() => Promise<string>)[] = [];
let aiPkCol: Column; let aiPkCol: Column;
let agPkCol: Column; let agPkCol: Column;
if (!raw) { if (!raw) {
const columns = await this.model.getColumns(this.context); const columns = await this.model.getColumns(this.context);
@ -3873,7 +3872,11 @@ class BaseModelSqlv2 {
); );
} }
if (col.system && !allowSystemColumn) { if (
col.system &&
!allowSystemColumn &&
col.uidt !== UITypes.ForeignKey
) {
NcError.badRequest( NcError.badRequest(
`Column "${col.title}" is system column and cannot be updated`, `Column "${col.title}" is system column and cannot be updated`,
); );
@ -4950,7 +4953,7 @@ class BaseModelSqlv2 {
); );
} }
if (column.system) { if (column.system && column.uidt !== UITypes.ForeignKey) {
NcError.badRequest( NcError.badRequest(
`Column "${column.title}" is system column and cannot be updated`, `Column "${column.title}" is system column and cannot be updated`,
); );
@ -7184,7 +7187,7 @@ class BaseModelSqlv2 {
); );
} }
async getCustomConditionsAndApply(_params: { async getCustomConditionsAndApply(params: {
view?: View; view?: View;
column: Column<any>; column: Column<any>;
qb?; qb?;
@ -7193,7 +7196,8 @@ class BaseModelSqlv2 {
rowId; rowId;
columns?: Column[]; columns?: Column[];
}): Promise<any> { }): Promise<any> {
return; const { filters, qb } = params;
await conditionV2(this, filters, qb);
} }
} }
@ -7500,10 +7504,11 @@ export function _wherePk(
} }
export function getCompositePkValue(primaryKeys: Column[], row) { export function getCompositePkValue(primaryKeys: Column[], row) {
if (typeof row !== 'object') return row; if (row === null || row === undefined) {
if (row === null)
NcError.requiredFieldMissing(primaryKeys.map((c) => c.title).join(',')); NcError.requiredFieldMissing(primaryKeys.map((c) => c.title).join(','));
}
if (typeof row !== 'object') return row;
return primaryKeys.map((c) => row[c.title] ?? row[c.column_name]).join('___'); return primaryKeys.map((c) => row[c.title] ?? row[c.column_name]).join('___');
} }

4
packages/nocodb/src/helpers/catchError.ts

@ -670,7 +670,9 @@ export class NcError {
id: string | string[] | Record<string, string> | Record<string, string>[], id: string | string[] | Record<string, string> | Record<string, string>[],
args?: NcErrorArgs, args?: NcErrorArgs,
) { ) {
if (typeof id === 'string') { if (!id) {
id = 'unknown';
} else if (typeof id === 'string') {
id = [id]; id = [id];
} else if (Array.isArray(id)) { } else if (Array.isArray(id)) {
if (id.every((i) => typeof i === 'string')) { if (id.every((i) => typeof i === 'string')) {

29
packages/nocodb/src/meta/meta.service.ts

@ -326,35 +326,6 @@ export class MetaService {
return query.del(); return query.del();
} }
/***
* Delete meta data with condition (USE WITH CAUTION)
* @param target - Table name
* @param idOrCondition - If string, will delete the record with the given id. If object, will delete the record with the given condition.
* @param xcCondition - Additional nested or complex condition to be added to the query.
*/
public async metaDeleteAll(
target: string,
idOrCondition: string | { [p: string]: any },
xcCondition?: Condition,
): Promise<void> {
const query = this.knexConnection(target);
if (typeof idOrCondition !== 'object') {
query.where('id', idOrCondition);
} else if (idOrCondition) {
query.where(idOrCondition);
}
if (xcCondition) {
query.condition(xcCondition, {});
}
// Check if a condition is present in the query builder and throw an error if not.
this.checkConditionPresent(query, 'delete');
return query.del();
}
/*** /***
* Get meta data * Get meta data
* @param workspace_id - Workspace id * @param workspace_id - Workspace id

15
packages/nocodb/src/models/BaseUser.ts

@ -8,12 +8,12 @@ import {
CacheGetType, CacheGetType,
CacheScope, CacheScope,
MetaTable, MetaTable,
RootScopes,
} from '~/utils/globals'; } from '~/utils/globals';
import Noco from '~/Noco'; import Noco from '~/Noco';
import NocoCache from '~/cache/NocoCache'; import NocoCache from '~/cache/NocoCache';
import { extractProps } from '~/helpers/extractProps'; import { extractProps } from '~/helpers/extractProps';
import { parseMetaProp } from '~/utils/modelUtils'; import { parseMetaProp } from '~/utils/modelUtils';
import { NcError } from '~/helpers/catchError';
export default class BaseUser { export default class BaseUser {
fk_workspace_id?: string; fk_workspace_id?: string;
@ -359,14 +359,11 @@ export default class BaseUser {
userId: string, userId: string,
ncMeta = Noco.ncMeta, ncMeta = Noco.ncMeta,
): Promise<BaseUser[]> { ): Promise<BaseUser[]> {
return await ncMeta.metaList2( if (!userId) NcError.badRequest('User Id is required');
RootScopes.BASE,
RootScopes.BASE, return await ncMeta.knex(MetaTable.PROJECT_USERS).where({
MetaTable.PROJECT_USERS, fk_user_id: userId,
{ });
condition: { fk_user_id: userId },
},
);
} }
static async getProjectsList( static async getProjectsList(

2
packages/nocodb/src/models/KanbanView.ts

@ -109,7 +109,7 @@ export default class KanbanView implements KanbanType {
insertObj.meta = { insertObj.meta = {
fk_cover_image_object_fit: fk_cover_image_object_fit:
parseMetaProp(insertObj)?.fk_cover_image_object_fit || 'cover', parseMetaProp(insertObj)?.fk_cover_image_object_fit || 'fit',
}; };
insertObj.meta = stringifyMetaProp(insertObj); insertObj.meta = stringifyMetaProp(insertObj);

2
packages/nocodb/src/models/Model.ts

@ -236,6 +236,7 @@ export default class Model implements TableType {
]); ]);
let { list: modelList } = cachedList; let { list: modelList } = cachedList;
const { isNoneList } = cachedList; const { isNoneList } = cachedList;
if (!isNoneList && !modelList.length) { if (!isNoneList && !modelList.length) {
modelList = await ncMeta.metaList2( modelList = await ncMeta.metaList2(
context.workspace_id, context.workspace_id,
@ -245,6 +246,7 @@ export default class Model implements TableType {
orderBy: { orderBy: {
order: 'asc', order: 'asc',
}, },
...(source_id ? { condition: { source_id } } : {}),
}, },
); );

15
packages/nocodb/src/models/SyncSource.ts

@ -150,17 +150,14 @@ export default class SyncSource {
); );
} }
static async deleteByUserId( static async deleteByUserId(userId: string, ncMeta = Noco.ncMeta) {
context: NcContext,
userId: string,
ncMeta = Noco.ncMeta,
) {
throw new Error('Method not implemented.');
if (!userId) NcError.badRequest('User Id is required'); if (!userId) NcError.badRequest('User Id is required');
return await ncMeta.metaDeleteAll(MetaTable.SYNC_SOURCE, { return await ncMeta
.knex(MetaTable.SYNC_SOURCE)
.where({
fk_user_id: userId, fk_user_id: userId,
}); })
.del();
} }
} }

3
packages/nocodb/src/modules/jobs/jobs/export-import/export.service.ts

@ -279,6 +279,9 @@ export class ExportService {
if (view.type === ViewTypes.KANBAN) { if (view.type === ViewTypes.KANBAN) {
const meta = parseMetaProp(view.view) as Record<string, any>; const meta = parseMetaProp(view.view) as Record<string, any>;
for (const [k, v] of Object.entries(meta)) { for (const [k, v] of Object.entries(meta)) {
// keep non-array meta as it is
if (!Array.isArray(v)) continue;
const colId = idMap.get(k as string); const colId = idMap.get(k as string);
for (const op of v) { for (const op of v) {
op.fk_column_id = idMap.get(op.fk_column_id); op.fk_column_id = idMap.get(op.fk_column_id);

6
packages/nocodb/src/modules/jobs/jobs/export-import/import.service.ts

@ -1563,6 +1563,12 @@ export class ImportService {
case 'meta': { case 'meta': {
const meta = {}; const meta = {};
for (const [mk, mv] of Object.entries(v as any)) { for (const [mk, mv] of Object.entries(v as any)) {
// copy non-array meta as it is
if (!Array.isArray(mv)) {
meta[mk] = mv;
continue;
}
const tempVal = []; const tempVal = [];
for (const vl of mv as any) { for (const vl of mv as any) {
if (vl.fk_column_id) { if (vl.fk_column_id) {

2
packages/nocodb/src/services/columns.service.ts

@ -542,7 +542,7 @@ export class ColumnsService {
}, },
); );
if (data.length) { if (data.length && column.uidt !== colBody.uidt) {
const existingOptions = colBody.colOptions.options.map( const existingOptions = colBody.colOptions.options.map(
(el) => el.title, (el) => el.title,
); );

6
packages/nocodb/src/services/org-users.service.ts

@ -16,7 +16,7 @@ import { validatePayload } from '~/helpers';
import { NcError } from '~/helpers/catchError'; import { NcError } from '~/helpers/catchError';
import { extractProps } from '~/helpers/extractProps'; import { extractProps } from '~/helpers/extractProps';
import { randomTokenString } from '~/helpers/stringHelpers'; import { randomTokenString } from '~/helpers/stringHelpers';
import { BaseUser, Store, User } from '~/models'; import { BaseUser, Store, SyncSource, User } from '~/models';
import Noco from '~/Noco'; import Noco from '~/Noco';
import { MetaTable, RootScopes } from '~/utils/globals'; import { MetaTable, RootScopes } from '~/utils/globals';
@ -65,7 +65,6 @@ export class OrgUsersService {
} }
// delete base user entry and assign to super admin // delete base user entry and assign to super admin
// TODO-TENANT: scope this to org
const baseUsers = await BaseUser.getProjectsIdList(param.userId, ncMeta); const baseUsers = await BaseUser.getProjectsIdList(param.userId, ncMeta);
// todo: clear cache // todo: clear cache
@ -84,8 +83,7 @@ export class OrgUsersService {
} }
// delete sync source entry // delete sync source entry
// TODO-TENANT: ENABLE THIS & CONFIRM SCOPE await SyncSource.deleteByUserId(param.userId, ncMeta);
// await SyncSource.deleteByUserId(param.userId, ncMeta);
// delete user // delete user
await User.delete(param.userId, ncMeta); await User.delete(param.userId, ncMeta);

4
pnpm-lock.yaml

@ -158,7 +158,7 @@ importers:
specifier: ^0.11.0 specifier: ^0.11.0
version: 0.11.0 version: 0.11.0
nocodb-sdk: nocodb-sdk:
specifier: 0.250.1 specifier: workspace:^
version: link:../nocodb-sdk version: link:../nocodb-sdk
papaparse: papaparse:
specifier: ^5.4.1 specifier: ^5.4.1
@ -727,7 +727,7 @@ importers:
specifier: ^0.4.4 specifier: ^0.4.4
version: 0.4.4(@nestjs/common@10.3.8)(@nestjs/core@10.3.8)(@nestjs/throttler@5.1.2)(ioredis@5.4.1)(reflect-metadata@0.2.1) version: 0.4.4(@nestjs/common@10.3.8)(@nestjs/core@10.3.8)(@nestjs/throttler@5.1.2)(ioredis@5.4.1)(reflect-metadata@0.2.1)
nocodb-sdk: nocodb-sdk:
specifier: 0.250.1 specifier: workspace:^
version: link:../nocodb-sdk version: link:../nocodb-sdk
nodemailer: nodemailer:
specifier: ^6.9.13 specifier: ^6.9.13

3
tests/playwright/pages/Dashboard/Details/FieldsPage.ts

@ -272,6 +272,9 @@ export class FieldsPage extends BasePage {
} }
async saveChanges() { async saveChanges() {
// allow the changes triggered earlier (toggle visibility, etc) to settle
await this.rootPage.waitForTimeout(1000);
await this.waitForResponse({ await this.waitForResponse({
uiAction: async () => await this.saveChangesButton.click(), uiAction: async () => await this.saveChangesButton.click(),
requestUrlPathToMatch: 'api/v1/db/meta/tables/', requestUrlPathToMatch: 'api/v1/db/meta/tables/',

Loading…
Cancel
Save