Browse Source

fix: i18n

pull/6614/head
reenphygeorge 1 year ago
parent
commit
5d2131069c
  1. 4
      packages/nc-gui/components/account/UsersModal.vue
  2. 6
      packages/nc-gui/components/cell/attachment/RenameFile.vue
  3. 2
      packages/nc-gui/components/dashboard/settings/data-sources/CreateBase.vue
  4. 2
      packages/nc-gui/components/dlg/AirtableImport.vue
  5. 4
      packages/nc-gui/components/dlg/share-and-collaborate/Collaborate.vue
  6. 5
      packages/nc-gui/components/dlg/share-and-collaborate/SharePage.vue
  7. 4
      packages/nc-gui/components/dlg/share-and-collaborate/View.vue
  8. 3
      packages/nc-gui/components/general/FullScreen.vue
  9. 2
      packages/nc-gui/components/general/JoinCloud.vue
  10. 7
      packages/nc-gui/components/notification/Card.vue
  11. 5
      packages/nc-gui/components/roles/Badge.vue
  12. 15
      packages/nc-gui/components/smartsheet/expanded-form/index.vue
  13. 19
      packages/nc-gui/components/smartsheet/toolbar/ShareView.vue
  14. 8
      packages/nc-gui/components/tabs/auth/user-management/UsersModal.vue
  15. 29
      packages/nc-gui/components/template/Editor.vue
  16. 16
      packages/nc-gui/components/workspace/CreateProjectDlg.vue
  17. 6
      packages/nc-gui/components/workspace/InviteCollabDlg.vue
  18. 39
      packages/nc-gui/lang/en.json
  19. 28
      packages/nocodb-sdk/src/lib/enums.ts

4
packages/nc-gui/components/account/UsersModal.vue

@ -175,7 +175,7 @@ const emailInput: VNodeRef = (el) => (el as HTMLInputElement)?.focus()
v-bind="validateInfos.emails"
validate-trigger="onBlur"
name="emails"
:rules="[{ required: true, message: 'Please input email' }]"
:rules="[{ required: true, message: $t('msg.plsInputEmail') }]"
>
<div class="ml-1 mb-1 text-xs text-gray-500">{{ $t('datatype.Email') }}:</div>
@ -190,7 +190,7 @@ const emailInput: VNodeRef = (el) => (el as HTMLInputElement)?.focus()
</div>
<div class="flex flex-col w-2/4">
<a-form-item name="role" :rules="[{ required: true, message: 'Role required' }]">
<a-form-item name="role" :rules="[{ required: true, message: $t('msg.roleRequired') }]">
<div class="ml-1 mb-1 text-xs text-gray-500">{{ $t('labels.selectUserRole') }}</div>
<a-select v-model:value="usersData.role" class="nc-user-roles" dropdown-class-name="nc-dropdown-user-role">

6
packages/nc-gui/components/cell/attachment/RenameFile.vue

@ -1,5 +1,7 @@
<script lang="ts" setup>
import { onKeyStroke, onMounted, reactive, ref } from '#imports'
import { onKeyStroke, onMounted, reactive, ref, useI18n } from '#imports'
const { t } = useI18n()
const props = defineProps<{
title: string
@ -29,7 +31,7 @@ function renameFile(fileName: string) {
// }
const rules = {
title: [{ required: true, message: 'title is required.' }],
title: [{ required: true, message: t('labels.titleRequired') }],
}
function onCancel() {

2
packages/nc-gui/components/dashboard/settings/data-sources/CreateBase.vue

@ -124,7 +124,7 @@ const validators = computed(() => {
'title': [
{
required: true,
message: 'Source name is required',
message: t('labels.sourceNameRequired'),
},
baseTitleValidator,
],

2
packages/nc-gui/components/dlg/AirtableImport.vue

@ -336,7 +336,7 @@ onMounted(async () => {
<a-input
v-model:value="syncSource.details.syncSourceUrlOrId"
class="nc-input-shared-base"
:placeholder="`${$t('labels.sharedBase')} URL`"
:placeholder="`${$t('labels.sharedBaseUrl')}`"
size="large"
/>
</a-form-item>

4
packages/nc-gui/components/dlg/share-and-collaborate/Collaborate.vue

@ -58,7 +58,7 @@ watch(
v-bind="validateInfos.emails"
validate-trigger="onBlur"
name="emails"
:rules="[{ required: true, message: 'Please input email' }]"
:rules="[{ required: true, message: t('msg.plsInputEmail') }]"
>
<a-input
v-model:value="invitationUsersData.emails"
@ -72,7 +72,7 @@ watch(
</div>
<div class="flex flex-col w-1/5">
<a-form-item name="role" :rules="[{ required: true, message: 'Role required' }]">
<a-form-item name="role" :rules="[{ required: true, message: t('msg.roleRequired') }]">
<a-select
v-model:value="invitationUsersData.role"
class="!rounded-md !bg-white"

5
packages/nc-gui/components/dlg/share-and-collaborate/SharePage.vue

@ -330,29 +330,24 @@ const isPublicShareDisabled = computed(() => {
</div>
<div v-if="activeView?.type === ViewTypes.FORM" class="flex flex-row justify-between">
<!-- use RTL orientation in form - todo: i18n -->
<div class="text-black">{{ $t('activity.surveyMode') }}</div>
<a-switch
v-model:checked="surveyMode"
v-e="['c:share:view:surver-mode:toggle']"
data-testid="nc-modal-share-view__surveyMode"
>
<!-- todo i18n -->
</a-switch>
</div>
<div v-if="activeView?.type === ViewTypes.FORM && isEeUI" class="flex flex-row justify-between">
<!-- use RTL orientation in form - todo: i18n -->
<div class="text-black">{{ $t('activity.rtlOrientation') }}</div>
<a-switch
v-model:checked="withRTL"
v-e="['c:share:view:rtl-orientation:toggle']"
data-testid="nc-modal-share-view__RTL"
>
<!-- todo i18n -->
</a-switch>
</div>
<div v-if="activeView?.type === ViewTypes.FORM" class="flex flex-col justify-between gap-y-1 bg-gray-50 rounded-md">
<!-- todo: i18n -->
<div class="flex flex-row justify-between">
<div class="text-black">{{ $t('activity.useTheme') }}</div>
<a-switch

4
packages/nc-gui/components/dlg/share-and-collaborate/View.vue

@ -118,11 +118,11 @@ watch(showShareModal, (val) => {
>
<div v-if="isInvitationLinkCopied" class="flex flex-row items-center gap-x-1">
<MdiTick class="h-3.5" />
Copied invite link
{{ $t('activity.copyInviteLink') }}
</div>
<div v-else class="flex flex-row items-center gap-x-1">
<MdiContentCopy class="h-3.3" />
Copy invite link
{{ $t('activity.copiedInviteLink') }}
</div>
</a-button>
</div>

3
packages/nc-gui/components/general/FullScreen.vue

@ -34,9 +34,8 @@ useEventListener(document, 'keydown', async (e: KeyboardEvent) => {
<template>
<a-tooltip placement="left">
<!-- todo: i18n -->
<template #title>
<span class="text-xs">{{ isSidebarsOpen ? 'Full width' : 'Exit full width' }}</span>
<span class="text-xs">{{ isSidebarsOpen ? $t('activity.fullWidth') : $t('activity.exitFullWidth') }}</span>
</template>
<div
v-e="['c:toolbar:fullscreen']"

2
packages/nc-gui/components/general/JoinCloud.vue

@ -13,7 +13,7 @@ import { iconMap } from '#imports'
target="_blank"
>
<component :is="iconMap.cloud" class="mt-[1px] text-black font-bold" />
<div class="px-1 text-xs font-bold text-gray-800">Join</div>
<div class="px-1 text-xs font-bold text-gray-800">{{ $t('general.join') }}</div>
</div>
<div
class="group flex justify-center items-center rounded-r-[3px] w-full cursor-pointer px-1 py-1 text-primary border-r-1 border-b-1 border-t-1 border-[#cdd1d6] m-0"

7
packages/nc-gui/components/notification/Card.vue

@ -25,8 +25,7 @@ const groupType = computed({
<div class="p-3" @click.stop>
<div class="flex items-center">
<span class="text-md font-medium text-[#212121]">
<!-- todo: i18n -->
Notification
{{ $t('activity.notification') }}
</span>
<div class="flex-grow"></div>
<div
@ -34,7 +33,7 @@ const groupType = computed({
class="cursor-pointer text-xs text-gray-500 hover:text-primary"
@click.stop="notificationStore.markAllAsRead"
>
Mark all as read
{{ $t('activity.maskAllAsRead') }}
</div>
</div>
</div>
@ -48,7 +47,7 @@ const groupType = computed({
>
<template v-if="!notifications?.length">
<div class="flex flex-col gap-2 items-center justify-center">
<div class="text-sm text-gray-400">You have no new notifications</div>
<div class="text-sm text-gray-400">{{ $t('msg.noNewNotifications') }}</div>
<GeneralIcon icon="inbox" class="!text-40px text-gray-400" />
</div>
</template>

5
packages/nc-gui/components/roles/Badge.vue

@ -26,17 +26,16 @@ const sizeSelect = computed(() => props.size)
const roleProperties = computed(() => {
const role = roleRef.value
const color = RoleColors[role]
const icon = RoleIcons[role]
const label = RoleLabels[role]
return {
color,
icon,
label,
}
})
</script>
<template>
@ -63,7 +62,7 @@ const roleProperties = computed(() => {
>
<GeneralIcon :icon="roleProperties.icon" />
<span class="flex whitespace-nowrap">
{{ roleProperties.label }}
{{ $t(`objects.roleType.${roleProperties.label}`) }}
</span>
<GeneralIcon v-if="clickableRef" icon="arrowDown" />
</div>

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

@ -281,8 +281,7 @@ onMounted(async () => {
await loadCommentsAndLogs()
} catch (e: any) {
if (e.response?.status === 404) {
// todo: i18n
message.error('Record not found')
message.error(t("msg.noRecordFound"))
router.replace({ query: {} })
} else throw e
}
@ -345,9 +344,9 @@ useActiveKeyupListener(
if (changedColumns.value.size > 0) {
await Modal.confirm({
title: 'Do you want to save the changes?',
okText: 'Save',
cancelText: 'Discard',
title: t('msg.saveChanges'),
okText: t('general.save'),
cancelText: t('label.discard'),
onOk: async () => {
await save()
reloadHook?.trigger(null)
@ -360,8 +359,8 @@ useActiveKeyupListener(
} else if (isNew.value) {
await Modal.confirm({
title: 'Do you want to save the record?',
okText: 'Save',
cancelText: 'Discard',
okText: t('general.save'),
cancelText: t('label.discard'),
onOk: async () => {
const data = await _save(rowState.value)
await syncLTARRefs(data)
@ -389,7 +388,7 @@ const onDeleteRowClick = () => {
const onConfirmDeleteRowClick = async () => {
showDeleteRowModal.value = false
await deleteRowById(primaryKey.value)
message.success('Row deleted')
message.success(t('msg.rowDeleted'))
reloadTrigger.trigger()
onClose()
showDeleteRowModal.value = false

19
packages/nc-gui/components/smartsheet/toolbar/ShareView.vue

@ -240,10 +240,6 @@ const copyIframeCode = async () => {
}
}
}
watch(shared, () => {
console.log('shared', shared.value)
})
</script>
<template>
@ -292,23 +288,21 @@ watch(shared, () => {
@click="copyIframeCode"
>
<component :is="iconMap.embed" class="text-gray-500" />
Embed this view in your site
{{ $t('labels.embedInSite') }}
</div>
<div class="px-1 mt-2 flex flex-col gap-3">
<!-- todo: i18n -->
<div class="text-gray-500 border-b-1">Options</div>
<div class="text-gray-500 border-b-1">{{ $t('general.options') }}</div>
<div class="px-1 flex flex-col gap-2">
<div>
<!-- Survey Mode; todo: i18n -->
<a-checkbox
v-if="shared.type === ViewTypes.FORM"
v-model:checked="surveyMode"
data-testid="nc-modal-share-view__survey-mode"
class="!text-sm"
>
Use Survey Mode
{{ $t('general.useSurveyMode') }}
</a-checkbox>
<!-- <Transition name="layout" mode="out-in">
@ -379,9 +373,8 @@ watch(shared, () => {
</div>
<div v-if="shared.type === ViewTypes.FORM">
<!-- todo: i18n -->
<a-checkbox v-model:checked="viewTheme" data-testid="nc-modal-share-view__with-theme" class="!text-sm">
Use Theme
{{ $t('activity.useTheme') }}
</a-checkbox>
<Transition name="layout" mode="out-in">
@ -400,10 +393,8 @@ watch(shared, () => {
</div>
<div v-if="shared.type === ViewTypes.FORM && isRtl">
<!-- use RTL orientation in form - todo: i18n -->
<a-checkbox v-model:checked="withRTL" data-testid="nc-modal-share-view__locale" class="!text-sm">
<!-- todo i18n -->
RTL Orientation
{{ $t('activity.rtlOrientation') }}
</a-checkbox>
</div>
</div>

8
packages/nc-gui/components/tabs/auth/user-management/UsersModal.vue

@ -217,7 +217,7 @@ watch(
v-bind="validateInfos.emails"
validate-trigger="onBlur"
name="emails"
:rules="[{ required: true, message: 'Please input email' }]"
:rules="[{ required: true, message: t('msg.plsInputEmail') }]"
>
<div class="ml-1 mb-1 text-xs text-gray-500">{{ $t('datatype.Email') }}:</div>
@ -233,7 +233,7 @@ watch(
</div>
<div class="flex flex-col w-1/4">
<a-form-item name="role" :rules="[{ required: true, message: 'Role required' }]">
<a-form-item name="role" :rules="[{ required: true, message: t('msg.roleRequired') }]">
<div class="ml-1 mb-1 text-xs text-gray-500">{{ $t('labels.selectUserRole') }}</div>
<a-select
@ -274,9 +274,9 @@ watch(
</div>
<div class="flex flex-row justify-end gap-x-2 border-t-1 border-gray-100 pt-3">
<a-button key="back" class="!rounded-md" @click="cancel">Cancel</a-button>
<a-button key="back" class="!rounded-md" @click="cancel">{{$t('general.cancel')}}</a-button>
<a-button class="!rounded-md">Manage base access</a-button>
<a-button key="submit" class="!rounded-md" type="primary" :loading="loading">Share</a-button>
<a-button key="submit" class="!rounded-md" type="primary" :loading="loading">{{$t('activity.share')}}</a-button>
</div>
</div>
</GeneralModal>

29
packages/nc-gui/components/template/Editor.vue

@ -706,8 +706,7 @@ function handleUIDTChange(column, table) {
<template #extra>
<a-tooltip bottom>
<template #title>
<!-- TODO: i18n -->
<span>Delete Table</span>
<span>{{ $t('activity.deleteTable') }}</span>
</template>
<component
:is="iconMap.delete"
@ -808,8 +807,7 @@ function handleUIDTChange(column, table) {
<template #extra>
<a-tooltip bottom>
<template #title>
<!-- TODO: i18n -->
<span>Delete Table</span>
<span>{{ $t('activity.deleteTable') }}</span>
</template>
<component
:is="iconMap.delete"
@ -846,8 +844,7 @@ function handleUIDTChange(column, table) {
<template v-else-if="column.key === 'dtxp' && hasSelectColumn[tableIdx]">
<span>
<!-- TODO: i18n -->
Options
{{ $t('general.options')}}
</span>
</template>
</template>
@ -872,7 +869,7 @@ function handleUIDTChange(column, table) {
<a-select-option v-for="(option, i) of uiTypeOptions" :key="i" :value="option.value">
<a-tooltip placement="right">
<template v-if="isSelectDisabled(option.label, table.columns[record.key]?._disableSelect)" #title>
The field is too large to be converted to {{ option.label }}
{{ $t('msg.tooLargeField') }} {{ option.label }}
</template>
{{ option.label }}
</a-tooltip>
@ -890,8 +887,7 @@ function handleUIDTChange(column, table) {
<template v-if="column.key === 'action'">
<a-tooltip v-if="record.key === 0">
<template #title>
<!-- TODO: i18n -->
<span>Primary Value</span>
<span>{{ $t('general.primaryValue')}}</span>
</template>
<div class="flex items-center float-right mr-4">
@ -901,8 +897,7 @@ function handleUIDTChange(column, table) {
<a-tooltip v-else>
<template #title>
<!-- TODO: i18n -->
<span>Delete Column</span>
<span>{{ $t('activity.deleteColumn') }}</span>
</template>
<a-button type="text" @click="deleteTableColumn(tableIdx, record.key)">
@ -918,8 +913,7 @@ function handleUIDTChange(column, table) {
<div class="mt-5 flex gap-2 justify-center">
<a-tooltip bottom>
<template #title>
<!-- TODO: i18n -->
<span>Add Number Column</span>
<span>{{ $t('activity.column.addNumberColumn') }}</span>
</template>
<a-button class="group" @click="addNewColumnRow(tableIdx, 'Number')">
@ -931,8 +925,7 @@ function handleUIDTChange(column, table) {
<a-tooltip bottom>
<template #title>
<!-- TODO: i18n -->
<span>Add SingleLineText Column</span>
<span>{{ $t('activity.column.addSingleLineText') }}</span>
</template>
<a-button class="group" @click="addNewColumnRow(tableIdx, 'SingleLineText')">
@ -944,8 +937,7 @@ function handleUIDTChange(column, table) {
<a-tooltip bottom>
<template #title>
<!-- TODO: i18n -->
<span>Add LongText Column</span>
<span>{{ $t('activity.column.addLongText') }}</span>
</template>
<a-button class="group" @click="addNewColumnRow(tableIdx, 'LongText')">
@ -957,8 +949,7 @@ function handleUIDTChange(column, table) {
<a-tooltip bottom>
<template #title>
<!-- TODO: i18n -->
<span>Add Other Column</span>
<span>{{ $t('activity.column.addOther') }}</span>
</template>
<a-button class="group" @click="addNewColumnRow(tableIdx, 'SingleLineText')">

16
packages/nc-gui/components/workspace/CreateProjectDlg.vue

@ -3,7 +3,7 @@ import type { RuleObject } from 'ant-design-vue/es/form'
import type { Form, Input } from 'ant-design-vue'
import type { VNodeRef } from '@vue/runtime-core'
import { computed } from '@vue/reactivity'
import { NcProjectType, baseTitleValidator, extractSdkResponseErrorMsg, ref, useGlobal, useVModel } from '#imports'
import { NcProjectType, baseTitleValidator, extractSdkResponseErrorMsg, ref, useGlobal, useVModel, useI18n } from '#imports'
const props = defineProps<{
modelValue: boolean
@ -12,6 +12,8 @@ const props = defineProps<{
const emit = defineEmits(['update:modelValue'])
const { t } = useI18n()
const dialogShow = useVModel(props, 'modelValue', emit)
const baseType = computed(() => props.type ?? NcProjectType.DB)
@ -24,7 +26,7 @@ const { navigateToProject } = useGlobal()
const nameValidationRules = [
{
required: true,
message: 'Database name is required',
message: t('msg.dbNamerequired'),
},
baseTitleValidator,
] as RuleObject[]
@ -95,7 +97,7 @@ const typeLabel = computed(() => {
<!-- Create A New Table -->
<div class="flex flex-row items-center">
<GeneralProjectIcon :type="baseType" class="mr-2.5 !text-lg !h-4" />
Create {{ typeLabel }}
{{ $t('general.create')+` ${typeLabel}` }}
</div>
</template>
<div class="mt-3">
@ -121,19 +123,19 @@ const typeLabel = computed(() => {
</a-form>
<div class="flex flex-row justify-end mt-7 gap-x-2">
<NcButton type="secondary" @click="dialogShow = false">Cancel</NcButton>
<NcButton type="secondary" @click="dialogShow = false">{{ $t('general.cancel') }}</NcButton>
<NcButton
v-e="['a:base:create']"
data-testid="docs-create-proj-dlg-create-btn"
:loading="creating"
type="primary"
:label="`Create ${typeLabel}`"
:label="$t('general.create')+` ${typeLabel}`"
:loading-label="`Creating ${typeLabel}`"
@click="createProject"
>
{{ `Create ${typeLabel}` }}
{{ $t('general.create')+` ${typeLabel}` }}
<template #loading>
{{ `Creating ${typeLabel}` }}
{{ $t('general.creating')+` ${typeLabel}` }}
</template>
</NcButton>
</div>

6
packages/nc-gui/components/workspace/InviteCollabDlg.vue

@ -137,7 +137,7 @@ const emailInput = ref((el) => {
<div class="flex flex-col mt-1 border-b-1 pb-5">
<div class="flex flex-row items-center pl-1.5 pb-1 h-[1.1rem]">
<MdiAccountOutline />
<div class="text-xs ml-0.5 mt-0.5">Copy Invite Token</div>
<div class="text-xs ml-0.5 mt-0.5">{{ $t('title.copyInviteToken') }}</div>
</div>
<a-alert class="mt-1" type="success" show-icon>
@ -193,7 +193,7 @@ const emailInput = ref((el) => {
v-bind="validateInfos.emails"
validate-trigger="onBlur"
name="emails"
:rules="[{ required: true, message: 'Please input email' }]"
:rules="[{ required: true, message: $t('msg.plsInputEmail') }]"
>
<div class="ml-1 mb-1 text-xs text-gray-500">{{ $t('datatype.Email') }}:</div>
@ -207,7 +207,7 @@ const emailInput = ref((el) => {
</div>
<div class="flex flex-col w-2/4">
<a-form-item name="role" :rules="[{ required: true, message: 'Role required' }]">
<a-form-item name="role" :rules="[{ required: true, message: $t('msg.roleRequired') }]">
<div class="ml-1 mb-1 text-xs text-gray-500">{{ $t('labels.selectUserRole') }}</div>
<a-select v-model:value="usersData.role" class="nc-user-roles" dropdown-class-name="nc-dropdown-user-role">

39
packages/nc-gui/lang/en.json

@ -76,6 +76,7 @@
"whatsappTwilio": "WhatsApp Twilio",
"submit": "Submit",
"create": "Create",
"creating": "Creating",
"details": "Details",
"skip": "Skip",
"duplicate": "Duplicate",
@ -174,7 +175,11 @@
"count": "Count",
"countDistinct": "Count Distinct",
"sumDistinct": "Sum Distinct",
"avgDistinct": "Avg Distinct"
"avgDistinct": "Avg Distinct",
"join": "Join",
"options": "Options",
"primaryValue": "Primary Value",
"useSurveyMode": "Use Survey Mode"
},
"objects": {
"workspace": "Workspace",
@ -215,6 +220,8 @@
"editor": "Editor",
"commenter": "Commenter",
"viewer": "Viewer",
"noaccess":"No Access",
"super": "Super",
"orgLevelCreator": "Organization Level Creator",
"orgLevelViewer": "Organization Level Viewer"
},
@ -314,6 +321,7 @@
"renamingTable": "Renaming Table",
"copyAuthToken": "Copy Auth Token",
"copiedAuthToken": "Copied Auth Token",
"copyInviteToken": "Copy Invite Token",
"showSidebar": "Show Sidebar",
"hideSidebar": "Hide Sidebar",
"creatingTable": "Creating Table",
@ -548,7 +556,7 @@
"requestDataSource": "Request a data source you need?",
"apiKey": "API Key",
"personalAccessToken": "Personal Access Token",
"sharedBase": "Shared Base",
"sharedBaseUrl": "Shared Base",
"importData": "Import Data",
"importSecondaryViews": "Import Secondary Views",
"importRollupColumns": "Import Rollup Columns",
@ -587,7 +595,10 @@
"includeData": "Include Data",
"includeView": "Include View",
"includeWebhook": "Include Webhook",
"zoomInToViewColumns": "Zoom in to view columns"
"zoomInToViewColumns": "Zoom in to view columns",
"embedInSite": "Embed this view in your site",
"titleRequired": "title is required.",
"sourceNameRequired":"Source name is required"
},
"activity": {
"onCondition": "On Condition",
@ -620,6 +631,8 @@
"useTheme": "Use Theme",
"copyLink": "Copy Link",
"copiedLink": "Link Copied",
"copyInviteLink":"Copy invite link",
"copiedInviteLink":"Copied invite link",
"copyUrl": "Copy URL",
"moreColors": "More Colors",
"moveProject": "Move Base",
@ -761,6 +774,16 @@
"toggleCommentsDraw": "Toggle comments draw",
"expandRecord": "Expand Record",
"deleteRecord": "Delete Record",
"fullWidth": "Full width",
"exitFullWidth": "Full width",
"maskAllAsRead": "Mark all as read",
"column":{
"delete": "Delete Column",
"addNumber": "Add Number Column",
"addSingleLineText": "Add SingleLineText Column",
"addLongText": "Add LongText Column",
"addOther":"Add Other Column"
},
"erd": {
"showColumns": "Show Columns",
"showPkAndFk": "Show Primary and Foreign Keys",
@ -913,6 +936,7 @@
"createNewOptionNamed": "Create new option named"
},
"plsEnterANumber": "Please enter a number",
"plsInputEmail": "Please input email",
"invalidDate": "Invalid date",
"invalidLocale": "Invalid locale",
"invalidCurrencyCode": "Invalid Currency Code",
@ -951,6 +975,12 @@
"areYouSureUWantTo": "Are you sure you want to delete the following",
"idColumnRequired": "ID column is required, you can rename this later if required.",
"length59Required": "The length exceeds the max 59 characters",
"noNewNotifications": "You have no new notifications",
"noRecordFound": "Record not found",
"rowDeleted": "Row deleted",
"saveChanges": "Do you want to save the changes?",
"tooLargeField": "The field is too large to be converted to",
"roleRequired": "Role required",
"warning": {
"dbValid": "Please make sure database you are trying to connect is valid! This operation can cause schema loss!!",
"barcode": {
@ -1110,7 +1140,8 @@
"computedFieldDeleteWarning": "contents are read-only",
"noMoreRecords": "No more records",
"tokenNameNotEmpty": "Token name should not be empty",
"tokenNameMaxLength": "Token name should not be more than 255 characters"
"tokenNameMaxLength": "Token name should not be more than 255 characters",
"dbNamerequired": "Database name is required"
},
"error": {
"nameRequired": "Name Required",

28
packages/nocodb-sdk/src/lib/enums.ts

@ -161,20 +161,20 @@ export enum WorkspacePlan {
}
export const RoleLabels = {
[WorkspaceUserRoles.OWNER]: 'Owner',
[WorkspaceUserRoles.CREATOR]: 'Creator',
[WorkspaceUserRoles.EDITOR]: 'Editor',
[WorkspaceUserRoles.COMMENTER]: 'Commenter',
[WorkspaceUserRoles.VIEWER]: 'Viewer',
[ProjectRoles.OWNER]: 'Owner',
[ProjectRoles.CREATOR]: 'Creator',
[ProjectRoles.EDITOR]: 'Editor',
[ProjectRoles.COMMENTER]: 'Commenter',
[ProjectRoles.VIEWER]: 'Viewer',
[ProjectRoles.NO_ACCESS]: 'No Access',
[OrgUserRoles.SUPER_ADMIN]: 'Super',
[OrgUserRoles.CREATOR]: 'Creator',
[OrgUserRoles.VIEWER]: 'Viewer',
[WorkspaceUserRoles.OWNER]: 'owner',
[WorkspaceUserRoles.CREATOR]: 'creator',
[WorkspaceUserRoles.EDITOR]: 'editor',
[WorkspaceUserRoles.COMMENTER]: 'commenter',
[WorkspaceUserRoles.VIEWER]: 'viewer',
[ProjectRoles.OWNER]: 'owner',
[ProjectRoles.CREATOR]: 'creator',
[ProjectRoles.EDITOR]: 'editor',
[ProjectRoles.COMMENTER]: 'commenter',
[ProjectRoles.VIEWER]: 'viewer',
[ProjectRoles.NO_ACCESS]: 'noaccess',
[OrgUserRoles.SUPER_ADMIN]: 'super',
[OrgUserRoles.CREATOR]: 'creator',
[OrgUserRoles.VIEWER]: 'viewer',
};
export const RoleColors = {

Loading…
Cancel
Save